@storybook/cli 9.0.5 → 9.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -103,7 +103,7 @@
103
103
  2. Upgrade to ${import_picocolors33.default.bold("Vitest 3")} to continue using the addon
104
104
 
105
105
  After addressing this, you can try running the upgrade command again.
106
- `}}}});var import_cli5=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger4=require("storybook/internal/node-logger"),import_telemetry2=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require("envinfo"),1),import_leven=__toESM(require("leven"),1),import_picocolors36=__toESM(require_picocolors(),1);var version="9.0.5";var import_node_path2=require("path"),import_common3=require("storybook/internal/common"),import_csf_tools2=require("storybook/internal/csf-tools"),import_prompts=__toESM(require("prompts"),1),import_semver=__toESM(require("semver"),1),import_ts_dedent2=require("ts-dedent");var import_babel=require("storybook/internal/babel"),defaultRequireWrapperName="getAbsolutePath";function doesVariableOrFunctionDeclarationExist(node,name){return import_babel.types.isVariableDeclaration(node)&&node.declarations.length===1&&import_babel.types.isVariableDeclarator(node.declarations[0])&&import_babel.types.isIdentifier(node.declarations[0].id)&&node.declarations[0].id?.name===name||import_babel.types.isFunctionDeclaration(node)&&import_babel.types.isIdentifier(node.id)&&node.id.name===name}function getReferenceToRequireWrapper(config,value){return import_babel.types.callExpression(import_babel.types.identifier(getRequireWrapperName(config)??defaultRequireWrapperName),[import_babel.types.stringLiteral(value)])}function getRequireWrapperName(config){let declarationName=config.getBodyDeclarations().flatMap(node=>doesVariableOrFunctionDeclarationExist(node,"wrapForPnp")?["wrapForPnp"]:doesVariableOrFunctionDeclarationExist(node,defaultRequireWrapperName)?[defaultRequireWrapperName]:[]);return declarationName.length?declarationName[0]:null}function isRequireWrapperNecessary(node,cb=()=>{}){if(import_babel.types.isStringLiteral(node))return cb(node),!0;if(import_babel.types.isObjectExpression(node)){let nameProperty=node.properties.find(property=>import_babel.types.isObjectProperty(property)&&import_babel.types.isIdentifier(property.key)&&property.key.name==="name");if(nameProperty&&import_babel.types.isStringLiteral(nameProperty.value))return cb(nameProperty),!0}return import_babel.types.isArrayExpression(node)&&node.elements.some(element=>element&&isRequireWrapperNecessary(element))?(cb(node),!0):!1}function getFieldsForRequireWrapper(config){let frameworkNode=config.getFieldNode(["framework"]),builderNode=config.getFieldNode(["core","builder"]),rendererNode=config.getFieldNode(["core","renderer"]),addons=config.getFieldNode(["addons"]);return[...frameworkNode?[frameworkNode]:[],...builderNode?[builderNode]:[],...rendererNode?[rendererNode]:[],...addons&&import_babel.types.isArrayExpression(addons)?[addons]:[]]}function getRequireWrapperAsCallExpression(isConfigTypescript){let functionDeclaration={...import_babel.types.functionDeclaration(import_babel.types.identifier(defaultRequireWrapperName),[{...import_babel.types.identifier("value"),...isConfigTypescript?{typeAnnotation:import_babel.types.tsTypeAnnotation(import_babel.types.tSStringKeyword())}:{}}],import_babel.types.blockStatement([import_babel.types.returnStatement(import_babel.types.callExpression(import_babel.types.identifier("dirname"),[import_babel.types.callExpression(import_babel.types.memberExpression(import_babel.types.identifier("require"),import_babel.types.identifier("resolve")),[import_babel.types.callExpression(import_babel.types.identifier("join"),[import_babel.types.identifier("value"),import_babel.types.stringLiteral("package.json")])])]))])),...isConfigTypescript?{returnType:import_babel.types.tSTypeAnnotation(import_babel.types.tsAnyKeyword())}:{}};return import_babel.types.addComment(functionDeclaration,"leading",`*
106
+ `}}}});var import_cli5=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger4=require("storybook/internal/node-logger"),import_telemetry2=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require("envinfo"),1),import_leven=__toESM(require("leven"),1),import_picocolors36=__toESM(require_picocolors(),1);var version="9.0.8";var import_node_path2=require("path"),import_common3=require("storybook/internal/common"),import_csf_tools2=require("storybook/internal/csf-tools"),import_prompts=__toESM(require("prompts"),1),import_semver=__toESM(require("semver"),1),import_ts_dedent2=require("ts-dedent");var import_babel=require("storybook/internal/babel"),defaultRequireWrapperName="getAbsolutePath";function doesVariableOrFunctionDeclarationExist(node,name){return import_babel.types.isVariableDeclaration(node)&&node.declarations.length===1&&import_babel.types.isVariableDeclarator(node.declarations[0])&&import_babel.types.isIdentifier(node.declarations[0].id)&&node.declarations[0].id?.name===name||import_babel.types.isFunctionDeclaration(node)&&import_babel.types.isIdentifier(node.id)&&node.id.name===name}function getReferenceToRequireWrapper(config,value){return import_babel.types.callExpression(import_babel.types.identifier(getRequireWrapperName(config)??defaultRequireWrapperName),[import_babel.types.stringLiteral(value)])}function getRequireWrapperName(config){let declarationName=config.getBodyDeclarations().flatMap(node=>doesVariableOrFunctionDeclarationExist(node,"wrapForPnp")?["wrapForPnp"]:doesVariableOrFunctionDeclarationExist(node,defaultRequireWrapperName)?[defaultRequireWrapperName]:[]);return declarationName.length?declarationName[0]:null}function isRequireWrapperNecessary(node,cb=()=>{}){if(import_babel.types.isStringLiteral(node))return cb(node),!0;if(import_babel.types.isObjectExpression(node)){let nameProperty=node.properties.find(property=>import_babel.types.isObjectProperty(property)&&import_babel.types.isIdentifier(property.key)&&property.key.name==="name");if(nameProperty&&import_babel.types.isStringLiteral(nameProperty.value))return cb(nameProperty),!0}return import_babel.types.isArrayExpression(node)&&node.elements.some(element=>element&&isRequireWrapperNecessary(element))?(cb(node),!0):!1}function getFieldsForRequireWrapper(config){let frameworkNode=config.getFieldNode(["framework"]),builderNode=config.getFieldNode(["core","builder"]),rendererNode=config.getFieldNode(["core","renderer"]),addons=config.getFieldNode(["addons"]);return[...frameworkNode?[frameworkNode]:[],...builderNode?[builderNode]:[],...rendererNode?[rendererNode]:[],...addons&&import_babel.types.isArrayExpression(addons)?[addons]:[]]}function getRequireWrapperAsCallExpression(isConfigTypescript){let functionDeclaration={...import_babel.types.functionDeclaration(import_babel.types.identifier(defaultRequireWrapperName),[{...import_babel.types.identifier("value"),...isConfigTypescript?{typeAnnotation:import_babel.types.tsTypeAnnotation(import_babel.types.tSStringKeyword())}:{}}],import_babel.types.blockStatement([import_babel.types.returnStatement(import_babel.types.callExpression(import_babel.types.identifier("dirname"),[import_babel.types.callExpression(import_babel.types.memberExpression(import_babel.types.identifier("require"),import_babel.types.identifier("resolve")),[import_babel.types.callExpression(import_babel.types.identifier("join"),[import_babel.types.identifier("value"),import_babel.types.stringLiteral("package.json")])])]))])),...isConfigTypescript?{returnType:import_babel.types.tSTypeAnnotation(import_babel.types.tsAnyKeyword())}:{}};return import_babel.types.addComment(functionDeclaration,"leading",`*
107
107
  * This function is used to resolve the absolute path of a package.
108
108
  * It is needed in projects that use Yarn PnP or are set up within a monorepo.
109
109
  `),functionDeclaration}function wrapValueWithRequireWrapper(config,node){isRequireWrapperNecessary(node,n=>{if(import_babel.types.isStringLiteral(n)){let wrapperNode=getReferenceToRequireWrapper(config,n.value);Object.keys(n).forEach(k=>{delete n[k]}),Object.keys(wrapperNode).forEach(k=>{n[k]=wrapperNode[k]})}import_babel.types.isObjectProperty(n)&&import_babel.types.isStringLiteral(n.value)&&(n.value=getReferenceToRequireWrapper(config,n.value.value)),import_babel.types.isArrayExpression(n)&&n.elements.forEach(element=>{element&&isRequireWrapperNecessary(element)&&wrapValueWithRequireWrapper(config,element)})})}var import_node_path=require("path"),import_common=require("storybook/internal/common"),import_common2=require("storybook/internal/common"),import_csf_tools=require("storybook/internal/csf-tools"),import_picocolors=__toESM(require_picocolors(),1),import_ts_dedent=require("ts-dedent"),logger=console,getFrameworkPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.framework=="string"?mainConfig.framework:mainConfig?.framework?.name;return packageNameOrPath?(0,import_common.extractProperFrameworkName)(packageNameOrPath):null};var getStorybookData=async({packageManager,configDir:userDefinedConfigDir})=>{let packageJson=await packageManager.retrievePackageJson(),{mainConfig:mainConfigPath,version:storybookVersionSpecifier,configDir:configDirFromScript,previewConfig:previewConfigPath}=(0,import_common.getStorybookInfo)(packageJson,userDefinedConfigDir),storybookVersion=await(0,import_common2.getCoercedStorybookVersion)(packageManager),configDir=userDefinedConfigDir||configDirFromScript||".storybook",mainConfig;try{mainConfig=await(0,import_common.loadMainConfig)({configDir,noCache:!0})}catch(err){throw new Error(import_ts_dedent.dedent`Unable to find or evaluate ${import_picocolors.default.blue(mainConfigPath)}: ${String(err)}`)}return{configDir,mainConfig,storybookVersionSpecifier,storybookVersion,mainConfigPath,previewConfigPath,packageJson}},updateMainConfig=async({mainConfigPath,dryRun},callback)=>{try{let main=await(0,import_csf_tools.readConfig)(mainConfigPath);await callback(main),dryRun||await(0,import_csf_tools.writeConfig)(main)}catch(e){logger.info(`\u274C The migration failed to update your ${import_picocolors.default.blue(mainConfigPath)} on your behalf because of the following error:
@@ -294,7 +294,7 @@ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
294
294
  We can set it up automatically for you.
295
295
 
296
296
  More info: ${import_picocolors15.default.yellow("https://storybook.js.org/docs/9/configure/integration/eslint-plugin")}
297
- `},async run({result:{eslintConfigFile,unsupportedExtension,isFlatConfig},packageManager,dryRun,skipInstall,storybookVersion}){let deps=[`eslint-plugin-storybook@${storybookVersion}`];if(logger8.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall},deps),!dryRun&&unsupportedExtension){logger8.info(import_ts_dedent11.dedent`
297
+ `},async run({result:{eslintConfigFile,unsupportedExtension,isFlatConfig},packageManager,dryRun,skipInstall,storybookVersion}){let deps=[`eslint-plugin-storybook@${storybookVersion}`];if(logger8.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall,packageJson:await packageManager.readPackageJson()},deps),!dryRun&&unsupportedExtension){logger8.info(import_ts_dedent11.dedent`
298
298
  ⚠️ The plugin was successfully installed but failed to be configured.
299
299
 
300
300
  Found an eslint config file with an unsupported automigration format: .eslintrc.${unsupportedExtension}.
@@ -320,7 +320,7 @@ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
320
320
  We can make the necessary changes in your configuration automatically.
321
321
 
322
322
  More info: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mainjs-docsautodocs-is-deprecated
323
- `,async run({result,dryRun,mainConfigPath,previewConfigPath}){let{autodocs}=result;logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("docs")} parameter in main config file...`),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{let docs=main.getFieldValue(["docs"])||{};dryRun||(delete docs.autodocs,Object.keys(docs).length===0?main.removeField(["docs"]):main.setFieldValue(["docs"],docs))}),autodocs===!0&&previewConfigPath&&(logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("tags")} parameter in preview config file...`),await updateMainConfig({mainConfigPath:previewConfigPath,dryRun:!!dryRun},async preview=>{let tags=preview.getFieldValue(["tags"])||[];!tags.includes("autodocs")&&!dryRun&&preview.setFieldValue(["tags"],[...tags,"autodocs"])}))}};var import_common17=require("storybook/internal/common"),import_picocolors19=__toESM(require_picocolors(),1),import_ts_dedent15=require("ts-dedent"),consolidatedAddons={"@storybook/addon-actions":"storybook/actions","@storybook/addon-controls":"storybook/internal/controls","@storybook/addon-toolbars":"storybook/internal/toolbars","@storybook/addon-highlight":"storybook/highlight","@storybook/addon-measure":"storybook/measure","@storybook/addon-outline":"storybook/outline","@storybook/addon-backgrounds":"storybook/backgrounds","@storybook/addon-viewport":"storybook/viewport"},removeEssentials={id:"remove-essentials",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig,packageManager}){if(!mainConfigPath)return null;try{let hasEssentialsAddon=!1,hasDocsAddon=!1,hasDocsDisabled=!1,additionalAddonsToRemove=[],CORE_ADDONS=["@storybook/addon-actions","@storybook/addon-backgrounds","@storybook/addon-controls","@storybook/addon-highlight","@storybook/addon-measure","@storybook/addon-outline","@storybook/addon-toolbars","@storybook/addon-viewport"],addonNames=(0,import_common17.getAddonNames)(mainConfig);hasEssentialsAddon=addonNames.includes("@storybook/addon-essentials"),hasDocsAddon=addonNames.includes("@storybook/addon-docs");let packageJson=await packageManager.retrievePackageJson(),allDeps={...packageJson.dependencies,...packageJson.devDependencies},installedAddons=Object.keys(allDeps);for(let addon of CORE_ADDONS)(addonNames.includes(addon)||installedAddons.includes(addon))&&additionalAddonsToRemove.push(addon);if(hasEssentialsAddon){let essentialsEntry=mainConfig.addons?.find(addon=>typeof addon=="string"?addon.includes("@storybook/addon-essentials"):addon.name.includes("@storybook/addon-essentials"));typeof essentialsEntry=="object"&&(hasDocsDisabled=(essentialsEntry.options||{}).docs===!1)}return!hasEssentialsAddon&&additionalAddonsToRemove.length===0?null:{hasEssentials:hasEssentialsAddon,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove,allDeps,packageJson}}catch{return null}},prompt({hasDocsDisabled,additionalAddonsToRemove,hasEssentials}){let message="";hasEssentials&&(message=import_ts_dedent15.dedent`
323
+ `,async run({result,dryRun,mainConfigPath,previewConfigPath}){let{autodocs}=result;logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("docs")} parameter in main config file...`),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{let docs=main.getFieldValue(["docs"])||{};dryRun||(delete docs.autodocs,Object.keys(docs).length===0?main.removeField(["docs"]):main.setFieldValue(["docs"],docs))}),autodocs===!0&&previewConfigPath&&(logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("tags")} parameter in preview config file...`),await updateMainConfig({mainConfigPath:previewConfigPath,dryRun:!!dryRun},async preview=>{let tags=preview.getFieldValue(["tags"])||[];!tags.includes("autodocs")&&!dryRun&&preview.setFieldValue(["tags"],[...tags,"autodocs"])}))}};var import_common17=require("storybook/internal/common"),import_picocolors19=__toESM(require_picocolors(),1),import_ts_dedent15=require("ts-dedent");function moveEssentialOptions(dryRun,essentialsOptions){return async main=>{let features=main.getFieldValue(["features"])||{};dryRun||main.setFieldValue(["features"],{...features,...essentialsOptions})}}var consolidatedAddons={"@storybook/addon-actions":"storybook/actions","@storybook/addon-controls":"storybook/internal/controls","@storybook/addon-toolbars":"storybook/internal/toolbars","@storybook/addon-highlight":"storybook/highlight","@storybook/addon-measure":"storybook/measure","@storybook/addon-outline":"storybook/outline","@storybook/addon-backgrounds":"storybook/backgrounds","@storybook/addon-viewport":"storybook/viewport"},removeEssentials={id:"remove-essentials",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig,packageManager}){if(!mainConfigPath)return null;try{let hasEssentialsAddon=!1,hasDocsAddon=!1,hasDocsDisabled=!1,essentialsOptions,additionalAddonsToRemove=[],CORE_ADDONS=["@storybook/addon-actions","@storybook/addon-backgrounds","@storybook/addon-controls","@storybook/addon-highlight","@storybook/addon-measure","@storybook/addon-outline","@storybook/addon-toolbars","@storybook/addon-viewport"],addonNames=(0,import_common17.getAddonNames)(mainConfig);hasEssentialsAddon=addonNames.includes("@storybook/addon-essentials"),hasDocsAddon=addonNames.includes("@storybook/addon-docs");let packageJson=await packageManager.retrievePackageJson(),allDeps={...packageJson.dependencies,...packageJson.devDependencies},installedAddons=Object.keys(allDeps);for(let addon of CORE_ADDONS)(addonNames.includes(addon)||installedAddons.includes(addon))&&additionalAddonsToRemove.push(addon);if(hasEssentialsAddon){let essentialsEntry=mainConfig.addons?.find(addon=>typeof addon=="string"?addon.includes("@storybook/addon-essentials"):addon.name.includes("@storybook/addon-essentials"));if(typeof essentialsEntry=="object"){let options=essentialsEntry.options||{};hasDocsDisabled=options.docs===!1;let optionsExceptDocs=Object.fromEntries(Object.entries(options).filter(([key])=>key!=="docs"));Object.keys(optionsExceptDocs).length>0&&(essentialsOptions=optionsExceptDocs)}}if(!hasEssentialsAddon&&additionalAddonsToRemove.length===0)return null;let result={hasEssentials:hasEssentialsAddon,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove,allDeps,packageJson};return essentialsOptions&&(result.essentialsOptions=essentialsOptions),result}catch{return null}},prompt({hasDocsDisabled,additionalAddonsToRemove,hasEssentials}){let message="";hasEssentials&&(message=import_ts_dedent15.dedent`
324
324
  We've detected that you have ${import_picocolors19.default.yellow("@storybook/addon-essentials")} installed.
325
325
 
326
326
  In Storybook 9.0, all features from ${import_picocolors19.default.yellow("@storybook/addon-essentials")} (except docs)
@@ -339,9 +339,9 @@ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
339
339
 
340
340
  Since you were using the docs feature, we'll install ${import_picocolors19.default.yellow("@storybook/addon-docs")}
341
341
  separately and add it to your configuration if it's not already present.
342
- `:additionalAddonsMessage},async run({result,dryRun,packageManager,configDir,packageJson}){let{hasEssentials,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove}=result;if(!(!hasEssentials&&additionalAddonsToRemove.length===0)&&!dryRun){hasEssentials&&(console.log("Removing @storybook/addon-essentials..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-essentials","--config-dir",configDir]));for(let addon of additionalAddonsToRemove)await packageManager.runPackageCommand("storybook",["remove",addon,"--config-dir",configDir]);let errors=await(0,import_common17.scanAndTransformFiles)({dryRun:!!dryRun,transformFn:import_common17.transformImportFiles,transformOptions:consolidatedAddons});if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
342
+ `:additionalAddonsMessage},async run({result,dryRun,packageManager,configDir,packageJson,mainConfigPath}){let{hasEssentials,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove,essentialsOptions}=result;if(!(!hasEssentials&&additionalAddonsToRemove.length===0)&&!dryRun){hasEssentials&&(console.log("Removing @storybook/addon-essentials..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-essentials","--config-dir",configDir]));for(let addon of additionalAddonsToRemove)await packageManager.runPackageCommand("storybook",["remove",addon,"--config-dir",configDir]);let errors=await(0,import_common17.scanAndTransformFiles)({dryRun:!!dryRun,transformFn:import_common17.transformImportFiles,transformOptions:consolidatedAddons});if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
343
343
  ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
344
- `)}`);if(!hasDocsDisabled&&hasEssentials)if(!hasDocsAddon)console.log("Adding @storybook/addon-docs..."),await packageManager.runPackageCommand("storybook",["add","@storybook/addon-docs","--config-dir",configDir]);else{let allDeps=result.allDeps;if(!(allDeps["@storybook/addon-docs"]!==void 0)){let storybookVersion=allDeps.storybook,isStorybookDevDependency=packageJson.devDependencies?.storybook!==void 0;await packageManager.addDependencies({installAsDevDependencies:isStorybookDevDependency},["@storybook/addon-docs@"+storybookVersion])}}}}};var import_promises5=require("fs/promises"),import_common18=require("storybook/internal/common"),import_picocolors20=__toESM(require_picocolors(),1),import_prompts3=__toESM(require("prompts"),1),import_ts_dedent16=require("ts-dedent"),getAllDependencies=packageJson=>Object.keys({...packageJson.dependencies||{},...packageJson.devDependencies||{}}),detectFrameworks=dependencies=>Object.keys(import_common18.frameworkPackages).filter(pkg=>dependencies.includes(pkg)),detectRenderers=dependencies=>Object.keys(import_common18.rendererPackages).filter(pkg=>dependencies.includes(pkg)).filter(pkg=>!Object.keys(import_common18.frameworkPackages).includes(pkg)),replaceImports=(source,renderer,framework)=>{let regex2=new RegExp(`(['"])${renderer}(['"])`,"g");return regex2.test(source)?source.replace(regex2,`$1${framework}$2`):null},transformSourceFiles=async(files,renderer,framework,dryRun)=>{let errors=[],{default:pLimit}=await import("p-limit"),limit=pLimit(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises5.readFile)(file,"utf-8"),transformed=replaceImports(contents,renderer,framework);!dryRun&&transformed&&await(0,import_promises5.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},removeRendererInPackageJson=async(packageJsonPath,renderer,dryRun)=>{try{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),hasChanges=!1;return packageJson.dependencies?.[renderer]&&(delete packageJson.dependencies[renderer],hasChanges=!0),packageJson.devDependencies?.[renderer]&&(delete packageJson.devDependencies[renderer],hasChanges=!0),!dryRun&&hasChanges&&await(0,import_promises5.writeFile)(packageJsonPath,JSON.stringify(packageJson,null,2)),hasChanges}catch(error){throw new Error(`Failed to update package.json: ${error}`)}},checkPackageJson=async packageJsonPath=>{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),dependencies=getAllDependencies(packageJson),frameworks=detectFrameworks(dependencies);if(frameworks.length===0)return null;let renderers=detectRenderers(dependencies);return renderers.length===0?null:{frameworks,renderers}},rendererToFramework={id:"renderer-to-framework",versionRange:["<9.0.0","^9.0.0-0"],promptType:"auto",async check(){let projectRoot=await(0,import_common18.getProjectRoot)(),{globby}=await import("globby"),packageJsonFiles=await globby(["**/package.json"],{...(0,import_common18.commonGlobOptions)(""),ignore:["**/node_modules/**"],cwd:projectRoot,gitignore:!0,absolute:!0}),validResults=(await Promise.all(packageJsonFiles.map(async file=>{try{return await checkPackageJson(file)}catch{return null}}))).filter(r=>r!==null&&r.renderers.length>0);return validResults.length===0?null:{frameworks:[...new Set(validResults.flatMap(r=>r.frameworks))],renderers:[...new Set(validResults.flatMap(r=>r.renderers))],packageJsonFiles:packageJsonFiles.filter((_,i)=>validResults[i]!==null)}},prompt(){return import_ts_dedent16.dedent`
344
+ `)}`);if(essentialsOptions&&updateMainConfig({mainConfigPath,dryRun:!!dryRun},moveEssentialOptions(dryRun,essentialsOptions)),!hasDocsDisabled&&hasEssentials)if(!hasDocsAddon)console.log("Adding @storybook/addon-docs..."),await packageManager.runPackageCommand("storybook",["add","@storybook/addon-docs","--config-dir",configDir]);else{let allDeps=result.allDeps;if(!(allDeps["@storybook/addon-docs"]!==void 0)){let storybookVersion=allDeps.storybook,isStorybookDevDependency=packageJson.devDependencies?.storybook!==void 0;await packageManager.addDependencies({installAsDevDependencies:isStorybookDevDependency},["@storybook/addon-docs@"+storybookVersion])}}}}};var import_promises5=require("fs/promises"),import_common18=require("storybook/internal/common"),import_picocolors20=__toESM(require_picocolors(),1),import_prompts3=__toESM(require("prompts"),1),import_ts_dedent16=require("ts-dedent"),getAllDependencies=packageJson=>Object.keys({...packageJson.dependencies||{},...packageJson.devDependencies||{}}),detectFrameworks=dependencies=>Object.keys(import_common18.frameworkPackages).filter(pkg=>dependencies.includes(pkg)),detectRenderers=dependencies=>Object.keys(import_common18.rendererPackages).filter(pkg=>dependencies.includes(pkg)).filter(pkg=>!Object.keys(import_common18.frameworkPackages).includes(pkg)),replaceImports=(source,renderer,framework)=>{let regex2=new RegExp(`(['"])${renderer}(['"])`,"g");return regex2.test(source)?source.replace(regex2,`$1${framework}$2`):null},transformSourceFiles=async(files,renderer,framework,dryRun)=>{let errors=[],{default:pLimit}=await import("p-limit"),limit=pLimit(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises5.readFile)(file,"utf-8"),transformed=replaceImports(contents,renderer,framework);!dryRun&&transformed&&await(0,import_promises5.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},removeRendererInPackageJson=async(packageJsonPath,renderer,dryRun)=>{try{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),hasChanges=!1;return packageJson.dependencies?.[renderer]&&(delete packageJson.dependencies[renderer],hasChanges=!0),packageJson.devDependencies?.[renderer]&&(delete packageJson.devDependencies[renderer],hasChanges=!0),!dryRun&&hasChanges&&await(0,import_promises5.writeFile)(packageJsonPath,JSON.stringify(packageJson,null,2)),hasChanges}catch(error){throw new Error(`Failed to update package.json: ${error}`)}},checkPackageJson=async packageJsonPath=>{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),dependencies=getAllDependencies(packageJson),frameworks=detectFrameworks(dependencies);if(frameworks.length===0)return null;let renderers=detectRenderers(dependencies);return renderers.length===0?null:{frameworks,renderers}},rendererToFramework={id:"renderer-to-framework",versionRange:["<9.0.0","^9.0.0-0"],promptType:"auto",async check(){let projectRoot=await(0,import_common18.getProjectRoot)(),{globby}=await import("globby"),packageJsonFiles=await globby(["**/package.json"],{...(0,import_common18.commonGlobOptions)(""),ignore:["**/node_modules/**"],cwd:projectRoot,gitignore:!0,absolute:!0}),validResults=(await Promise.all(packageJsonFiles.map(async file=>{try{return await checkPackageJson(file)}catch{return null}}))).filter(r=>r!==null&&r.renderers.length>0);return validResults.length===0?null:{frameworks:[...new Set(validResults.flatMap(r=>r.frameworks))],renderers:[...new Set(validResults.flatMap(r=>r.renderers))],packageJsonFiles:packageJsonFiles.filter((_,i)=>validResults[i]!==null)}},prompt(){return import_ts_dedent16.dedent`
345
345
  As part of Storybook's evolution, we're moving from renderer-based to framework-based configuration.
346
346
 
347
347
  This migration will:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/cli",
3
- "version": "9.0.5",
3
+ "version": "9.0.8",
4
4
  "description": "Storybook CLI",
5
5
  "keywords": [
6
6
  "storybook"
@@ -42,10 +42,10 @@
42
42
  },
43
43
  "dependencies": {
44
44
  "@babel/types": "^7.24.0",
45
- "@storybook/codemod": "9.0.5",
45
+ "@storybook/codemod": "9.0.8",
46
46
  "@types/semver": "^7.3.4",
47
47
  "commander": "^12.1.0",
48
- "create-storybook": "9.0.5",
48
+ "create-storybook": "9.0.8",
49
49
  "cross-spawn": "^7.0.6",
50
50
  "envinfo": "^7.7.3",
51
51
  "execa": "^9.5.2",
@@ -56,7 +56,7 @@
56
56
  "p-limit": "^6.2.0",
57
57
  "prompts": "^2.4.0",
58
58
  "semver": "^7.3.7",
59
- "storybook": "9.0.5",
59
+ "storybook": "9.0.8",
60
60
  "tiny-invariant": "^1.3.1",
61
61
  "ts-dedent": "^2.0.0"
62
62
  },