@storybook/cli 9.1.0-alpha.9 → 9.1.0-beta.0

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.
Files changed (2) hide show
  1. package/dist/bin/index.cjs +10 -10
  2. package/package.json +4 -4
@@ -77,7 +77,7 @@ ${project.error.stack||project.error.message}`).join(`
77
77
  ${errorMessage}
78
78
  Please fix the errors and run the upgrade command again.`)}let selectedProjects=await handleMultipleProjects(validProjects,errorProjects,detectedConfigDirs,options.yes);return selectedProjects?{allProjects:validProjects,selectedProjects}:void 0}catch(error){throw error instanceof import_common2.HandledError||import_node_logger3.logger.error("Failed to get projects"),error}},findFilesUp=(matchers,cwd)=>{let matchingFiles=[];return findUpMultipleSync(directory=>{matchingFiles.push(...globbySync(matchers,{gitignore:!0,cwd:directory}))},{cwd,stopAt:(0,import_common3.getProjectRoot)()}),matchingFiles},getStoriesPathsFromConfig=async({stories,configDir,workingDir})=>{if(stories.length===0)return[];let normalizedStories=(0,import_common2.normalizeStories)(stories,{configDir,workingDir});return(await import_core_server.StoryIndexGenerator.findMatchingFilesForSpecifiers(normalizedStories,workingDir,!0)).flatMap(([specifier,cache])=>import_core_server.StoryIndexGenerator.storyFileNames(new Map([[specifier,cache]])))}}});var import_node_path6,import_common4,import_common5,import_csf_tools,import_node_logger4,import_picocolors2,import_ts_dedent4,getFrameworkPackageName,getStorybookData,updateMainConfig,init_mainConfigFile=__esm({"src/automigrate/helpers/mainConfigFile.ts"(){"use strict";import_node_path6=require("path"),import_common4=require("storybook/internal/common"),import_common5=require("storybook/internal/common"),import_csf_tools=require("storybook/internal/csf-tools"),import_node_logger4=require("storybook/internal/node-logger"),import_picocolors2=__toESM(require_picocolors(),1),import_ts_dedent4=require("ts-dedent");init_util();getFrameworkPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.framework=="string"?mainConfig.framework:mainConfig?.framework?.name;return packageNameOrPath?(0,import_common4.extractProperFrameworkName)(packageNameOrPath):null},getStorybookData=async({configDir:userDefinedConfigDir,cwd,packageManagerName,cache=!1})=>{import_node_logger4.logger.debug("Getting Storybook info...");let{mainConfigPath,version:storybookVersionSpecifier,configDir:configDirFromScript,previewConfigPath}=(0,import_common4.getStorybookInfo)(userDefinedConfigDir),configDir=userDefinedConfigDir||configDirFromScript||".storybook";import_node_logger4.logger.debug("Loading main config...");let mainConfig;try{mainConfig=await(0,import_common4.loadMainConfig)({configDir,noCache:!cache,cwd})}catch(err){throw new Error(import_ts_dedent4.dedent`Unable to find or evaluate ${import_picocolors2.default.blue(mainConfigPath)}: ${String(err)}`)}let workingDir=(0,import_node_path6.isAbsolute)(configDir)?(0,import_node_path6.dirname)(configDir):(0,import_node_path6.dirname)((0,import_node_path6.join)(cwd??process.cwd(),configDir));import_node_logger4.logger.debug("Getting stories paths...");let storiesPaths=await getStoriesPathsFromConfig({stories:mainConfig.stories,configDir,workingDir});import_node_logger4.logger.debug("Getting package manager...");let packageManager=import_common4.JsPackageManagerFactory.getPackageManager({force:packageManagerName,configDir,storiesPaths});import_node_logger4.logger.debug("Getting Storybook version...");let storybookVersion=await(0,import_common5.getCoercedStorybookVersion)(packageManager);return{configDir,mainConfig,storybookVersionSpecifier,storybookVersion,mainConfigPath,previewConfigPath,packageManager,storiesPaths}},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){import_node_logger4.logger.log(`\u274C The migration failed to update your ${import_picocolors2.default.blue(mainConfigPath)} on your behalf because of the following error:
79
79
  ${e}
80
- `),import_node_logger4.logger.log(`\u26A0\uFE0F Storybook automigrations are based on AST parsing and it's possible that your ${import_picocolors2.default.blue(mainConfigPath)} file contains a non-standard format (e.g. your export is not an object) or that there was an error when parsing dynamic values (e.g. "require" calls, or usage of environment variables). When your main config is non-standard, automigrations are unfortunately not possible. Please follow the instructions given previously and follow the documentation to make the updates manually.`)}}}});var require_windows=__commonJS({"../../node_modules/isexe/windows.js"(exports2,module2){"use strict";module2.exports=isexe;isexe.sync=sync;var fs7=require("fs");function checkPathExt(path8,options){var pathext=options.pathExt!==void 0?options.pathExt:process.env.PATHEXT;if(!pathext||(pathext=pathext.split(";"),pathext.indexOf("")!==-1))return!0;for(var i=0;i<pathext.length;i++){var p=pathext[i].toLowerCase();if(p&&path8.substr(-p.length).toLowerCase()===p)return!0}return!1}function checkStat(stat,path8,options){return!stat.isSymbolicLink()&&!stat.isFile()?!1:checkPathExt(path8,options)}function isexe(path8,options,cb){fs7.stat(path8,function(er,stat){cb(er,er?!1:checkStat(stat,path8,options))})}function sync(path8,options){return checkStat(fs7.statSync(path8),path8,options)}}});var require_mode=__commonJS({"../../node_modules/isexe/mode.js"(exports2,module2){"use strict";module2.exports=isexe;isexe.sync=sync;var fs7=require("fs");function isexe(path8,options,cb){fs7.stat(path8,function(er,stat){cb(er,er?!1:checkStat(stat,options))})}function sync(path8,options){return checkStat(fs7.statSync(path8),options)}function checkStat(stat,options){return stat.isFile()&&checkMode(stat,options)}function checkMode(stat,options){var mod=stat.mode,uid=stat.uid,gid=stat.gid,myUid=options.uid!==void 0?options.uid:process.getuid&&process.getuid(),myGid=options.gid!==void 0?options.gid:process.getgid&&process.getgid(),u=parseInt("100",8),g=parseInt("010",8),o=parseInt("001",8),ug=u|g,ret=mod&o||mod&g&&gid===myGid||mod&u&&uid===myUid||mod&ug&&myUid===0;return ret}}});var require_isexe=__commonJS({"../../node_modules/isexe/index.js"(exports2,module2){"use strict";var fs7=require("fs"),core;process.platform==="win32"||global.TESTING_WINDOWS?core=require_windows():core=require_mode();module2.exports=isexe;isexe.sync=sync;function isexe(path8,options,cb){if(typeof options=="function"&&(cb=options,options={}),!cb){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(resolve2,reject){isexe(path8,options||{},function(er,is){er?reject(er):resolve2(is)})})}core(path8,options||{},function(er,is){er&&(er.code==="EACCES"||options&&options.ignoreErrors)&&(er=null,is=!1),cb(er,is)})}function sync(path8,options){try{return core.sync(path8,options||{})}catch(er){if(options&&options.ignoreErrors||er.code==="EACCES")return!1;throw er}}}});var require_which=__commonJS({"../../node_modules/which/which.js"(exports2,module2){"use strict";var isWindows=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",path8=require("path"),COLON=isWindows?";":":",isexe=require_isexe(),getNotFoundError=cmd=>Object.assign(new Error(`not found: ${cmd}`),{code:"ENOENT"}),getPathInfo=(cmd,opt)=>{let colon=opt.colon||COLON,pathEnv=cmd.match(/\//)||isWindows&&cmd.match(/\\/)?[""]:[...isWindows?[process.cwd()]:[],...(opt.path||process.env.PATH||"").split(colon)],pathExtExe=isWindows?opt.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",pathExt=isWindows?pathExtExe.split(colon):[""];return isWindows&&cmd.indexOf(".")!==-1&&pathExt[0]!==""&&pathExt.unshift(""),{pathEnv,pathExt,pathExtExe}},which=(cmd,opt,cb)=>{typeof opt=="function"&&(cb=opt,opt={}),opt||(opt={});let{pathEnv,pathExt,pathExtExe}=getPathInfo(cmd,opt),found=[],step=i=>new Promise((resolve2,reject)=>{if(i===pathEnv.length)return opt.all&&found.length?resolve2(found):reject(getNotFoundError(cmd));let ppRaw=pathEnv[i],pathPart=/^".*"$/.test(ppRaw)?ppRaw.slice(1,-1):ppRaw,pCmd=path8.join(pathPart,cmd),p=!pathPart&&/^\.[\\\/]/.test(cmd)?cmd.slice(0,2)+pCmd:pCmd;resolve2(subStep(p,i,0))}),subStep=(p,i,ii)=>new Promise((resolve2,reject)=>{if(ii===pathExt.length)return resolve2(step(i+1));let ext=pathExt[ii];isexe(p+ext,{pathExt:pathExtExe},(er,is)=>{if(!er&&is)if(opt.all)found.push(p+ext);else return resolve2(p+ext);return resolve2(subStep(p,i,ii+1))})});return cb?step(0).then(res=>cb(null,res),cb):step(0)},whichSync=(cmd,opt)=>{opt=opt||{};let{pathEnv,pathExt,pathExtExe}=getPathInfo(cmd,opt),found=[];for(let i=0;i<pathEnv.length;i++){let ppRaw=pathEnv[i],pathPart=/^".*"$/.test(ppRaw)?ppRaw.slice(1,-1):ppRaw,pCmd=path8.join(pathPart,cmd),p=!pathPart&&/^\.[\\\/]/.test(cmd)?cmd.slice(0,2)+pCmd:pCmd;for(let j=0;j<pathExt.length;j++){let cur=p+pathExt[j];try{if(isexe.sync(cur,{pathExt:pathExtExe}))if(opt.all)found.push(cur);else return cur}catch{}}}if(opt.all&&found.length)return found;if(opt.nothrow)return null;throw getNotFoundError(cmd)};module2.exports=which;which.sync=whichSync}});var require_path_key=__commonJS({"../../node_modules/path-key/index.js"(exports2,module2){"use strict";var pathKey=(options={})=>{let environment=options.env||process.env;return(options.platform||process.platform)!=="win32"?"PATH":Object.keys(environment).reverse().find(key=>key.toUpperCase()==="PATH")||"Path"};module2.exports=pathKey;module2.exports.default=pathKey}});var require_resolveCommand=__commonJS({"../../node_modules/cross-spawn/lib/util/resolveCommand.js"(exports2,module2){"use strict";var path8=require("path"),which=require_which(),getPathKey=require_path_key();function resolveCommandAttempt(parsed,withoutPathExt){let env=parsed.options.env||process.env,cwd=process.cwd(),hasCustomCwd=parsed.options.cwd!=null,shouldSwitchCwd=hasCustomCwd&&process.chdir!==void 0&&!process.chdir.disabled;if(shouldSwitchCwd)try{process.chdir(parsed.options.cwd)}catch{}let resolved;try{resolved=which.sync(parsed.command,{path:env[getPathKey({env})],pathExt:withoutPathExt?path8.delimiter:void 0})}catch{}finally{shouldSwitchCwd&&process.chdir(cwd)}return resolved&&(resolved=path8.resolve(hasCustomCwd?parsed.options.cwd:"",resolved)),resolved}function resolveCommand(parsed){return resolveCommandAttempt(parsed)||resolveCommandAttempt(parsed,!0)}module2.exports=resolveCommand}});var require_escape=__commonJS({"../../node_modules/cross-spawn/lib/util/escape.js"(exports2,module2){"use strict";var metaCharsRegExp=/([()\][%!^"`<>&|;, *?])/g;function escapeCommand(arg){return arg=arg.replace(metaCharsRegExp,"^$1"),arg}function escapeArgument(arg,doubleEscapeMetaChars){return arg=`${arg}`,arg=arg.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),arg=arg.replace(/(?=(\\+?)?)\1$/,"$1$1"),arg=`"${arg}"`,arg=arg.replace(metaCharsRegExp,"^$1"),doubleEscapeMetaChars&&(arg=arg.replace(metaCharsRegExp,"^$1")),arg}module2.exports.command=escapeCommand;module2.exports.argument=escapeArgument}});var require_shebang_regex=__commonJS({"../../node_modules/shebang-regex/index.js"(exports2,module2){"use strict";module2.exports=/^#!(.*)/}});var require_shebang_command=__commonJS({"../../node_modules/shebang-command/index.js"(exports2,module2){"use strict";var shebangRegex=require_shebang_regex();module2.exports=(string="")=>{let match=string.match(shebangRegex);if(!match)return null;let[path8,argument]=match[0].replace(/#! ?/,"").split(" "),binary=path8.split("/").pop();return binary==="env"?argument:argument?`${binary} ${argument}`:binary}}});var require_readShebang=__commonJS({"../../node_modules/cross-spawn/lib/util/readShebang.js"(exports2,module2){"use strict";var fs7=require("fs"),shebangCommand=require_shebang_command();function readShebang(command2){let buffer=Buffer.alloc(150),fd;try{fd=fs7.openSync(command2,"r"),fs7.readSync(fd,buffer,0,150,0),fs7.closeSync(fd)}catch{}return shebangCommand(buffer.toString())}module2.exports=readShebang}});var require_parse4=__commonJS({"../../node_modules/cross-spawn/lib/parse.js"(exports2,module2){"use strict";var path8=require("path"),resolveCommand=require_resolveCommand(),escape=require_escape(),readShebang=require_readShebang(),isWin=process.platform==="win32",isExecutableRegExp=/\.(?:com|exe)$/i,isCmdShimRegExp=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function detectShebang(parsed){parsed.file=resolveCommand(parsed);let shebang=parsed.file&&readShebang(parsed.file);return shebang?(parsed.args.unshift(parsed.file),parsed.command=shebang,resolveCommand(parsed)):parsed.file}function parseNonShell(parsed){if(!isWin)return parsed;let commandFile=detectShebang(parsed),needsShell=!isExecutableRegExp.test(commandFile);if(parsed.options.forceShell||needsShell){let needsDoubleEscapeMetaChars=isCmdShimRegExp.test(commandFile);parsed.command=path8.normalize(parsed.command),parsed.command=escape.command(parsed.command),parsed.args=parsed.args.map(arg=>escape.argument(arg,needsDoubleEscapeMetaChars));let shellCommand=[parsed.command].concat(parsed.args).join(" ");parsed.args=["/d","/s","/c",`"${shellCommand}"`],parsed.command=process.env.comspec||"cmd.exe",parsed.options.windowsVerbatimArguments=!0}return parsed}function parse3(command2,args,options){args&&!Array.isArray(args)&&(options=args,args=null),args=args?args.slice(0):[],options=Object.assign({},options);let parsed={command:command2,args,options,file:void 0,original:{command:command2,args}};return options.shell?parsed:parseNonShell(parsed)}module2.exports=parse3}});var require_enoent=__commonJS({"../../node_modules/cross-spawn/lib/enoent.js"(exports2,module2){"use strict";var isWin=process.platform==="win32";function notFoundError(original,syscall){return Object.assign(new Error(`${syscall} ${original.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${syscall} ${original.command}`,path:original.command,spawnargs:original.args})}function hookChildProcess(cp,parsed){if(!isWin)return;let originalEmit=cp.emit;cp.emit=function(name,arg1){if(name==="exit"){let err=verifyENOENT(arg1,parsed);if(err)return originalEmit.call(cp,"error",err)}return originalEmit.apply(cp,arguments)}}function verifyENOENT(status,parsed){return isWin&&status===1&&!parsed.file?notFoundError(parsed.original,"spawn"):null}function verifyENOENTSync(status,parsed){return isWin&&status===1&&!parsed.file?notFoundError(parsed.original,"spawnSync"):null}module2.exports={hookChildProcess,verifyENOENT,verifyENOENTSync,notFoundError}}});var require_cross_spawn=__commonJS({"../../node_modules/cross-spawn/index.js"(exports2,module2){"use strict";var cp=require("child_process"),parse3=require_parse4(),enoent=require_enoent();function spawn(command2,args,options){let parsed=parse3(command2,args,options),spawned=cp.spawn(parsed.command,parsed.args,parsed.options);return enoent.hookChildProcess(spawned,parsed),spawned}function spawnSync3(command2,args,options){let parsed=parse3(command2,args,options),result=cp.spawnSync(parsed.command,parsed.args,parsed.options);return result.error=result.error||enoent.verifyENOENTSync(result.status,parsed),result}module2.exports=spawn;module2.exports.spawn=spawn;module2.exports.sync=spawnSync3;module2.exports._parse=parse3;module2.exports._enoent=enoent}});var import_cli3=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server3=require("storybook/internal/core-server"),import_node_logger24=require("storybook/internal/node-logger"),import_telemetry2=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require_envinfo(),1);var array=[],characterCodeCache=[];function leven(first,second){if(first===second)return 0;let swap=first;first.length>second.length&&(first=second,second=swap);let firstLength=first.length,secondLength=second.length;for(;firstLength>0&&first.charCodeAt(~-firstLength)===second.charCodeAt(~-secondLength);)firstLength--,secondLength--;let start=0;for(;start<firstLength&&first.charCodeAt(start)===second.charCodeAt(start);)start++;if(firstLength-=start,secondLength-=start,firstLength===0)return secondLength;let bCharacterCode,result,temporary,temporary2,index=0,index2=0;for(;index<firstLength;)characterCodeCache[index]=first.charCodeAt(start+index),array[index]=++index;for(;index2<secondLength;)for(bCharacterCode=second.charCodeAt(start+index2),temporary=index2++,result=index2,index=0;index<firstLength;index++)temporary2=bCharacterCode===characterCodeCache[index]?temporary:temporary+1,temporary=array[index],result=array[index]=temporary>result?temporary2>result?result+1:temporary2:temporary2>temporary?temporary+1:temporary2;return result}var import_picocolors19=__toESM(require_picocolors(),1);var version="9.1.0-alpha.9";var import_node_path7=require("path"),import_common6=require("storybook/internal/common"),import_csf_tools2=require("storybook/internal/csf-tools"),import_node_logger5=require("storybook/internal/node-logger"),import_semver6=__toESM(require_semver2(),1),import_ts_dedent5=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",`*
80
+ `),import_node_logger4.logger.log(`\u26A0\uFE0F Storybook automigrations are based on AST parsing and it's possible that your ${import_picocolors2.default.blue(mainConfigPath)} file contains a non-standard format (e.g. your export is not an object) or that there was an error when parsing dynamic values (e.g. "require" calls, or usage of environment variables). When your main config is non-standard, automigrations are unfortunately not possible. Please follow the instructions given previously and follow the documentation to make the updates manually.`)}}}});var require_windows=__commonJS({"../../node_modules/isexe/windows.js"(exports2,module2){"use strict";module2.exports=isexe;isexe.sync=sync;var fs7=require("fs");function checkPathExt(path8,options){var pathext=options.pathExt!==void 0?options.pathExt:process.env.PATHEXT;if(!pathext||(pathext=pathext.split(";"),pathext.indexOf("")!==-1))return!0;for(var i=0;i<pathext.length;i++){var p=pathext[i].toLowerCase();if(p&&path8.substr(-p.length).toLowerCase()===p)return!0}return!1}function checkStat(stat,path8,options){return!stat.isSymbolicLink()&&!stat.isFile()?!1:checkPathExt(path8,options)}function isexe(path8,options,cb){fs7.stat(path8,function(er,stat){cb(er,er?!1:checkStat(stat,path8,options))})}function sync(path8,options){return checkStat(fs7.statSync(path8),path8,options)}}});var require_mode=__commonJS({"../../node_modules/isexe/mode.js"(exports2,module2){"use strict";module2.exports=isexe;isexe.sync=sync;var fs7=require("fs");function isexe(path8,options,cb){fs7.stat(path8,function(er,stat){cb(er,er?!1:checkStat(stat,options))})}function sync(path8,options){return checkStat(fs7.statSync(path8),options)}function checkStat(stat,options){return stat.isFile()&&checkMode(stat,options)}function checkMode(stat,options){var mod=stat.mode,uid=stat.uid,gid=stat.gid,myUid=options.uid!==void 0?options.uid:process.getuid&&process.getuid(),myGid=options.gid!==void 0?options.gid:process.getgid&&process.getgid(),u=parseInt("100",8),g=parseInt("010",8),o=parseInt("001",8),ug=u|g,ret=mod&o||mod&g&&gid===myGid||mod&u&&uid===myUid||mod&ug&&myUid===0;return ret}}});var require_isexe=__commonJS({"../../node_modules/isexe/index.js"(exports2,module2){"use strict";var fs7=require("fs"),core;process.platform==="win32"||global.TESTING_WINDOWS?core=require_windows():core=require_mode();module2.exports=isexe;isexe.sync=sync;function isexe(path8,options,cb){if(typeof options=="function"&&(cb=options,options={}),!cb){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(resolve2,reject){isexe(path8,options||{},function(er,is){er?reject(er):resolve2(is)})})}core(path8,options||{},function(er,is){er&&(er.code==="EACCES"||options&&options.ignoreErrors)&&(er=null,is=!1),cb(er,is)})}function sync(path8,options){try{return core.sync(path8,options||{})}catch(er){if(options&&options.ignoreErrors||er.code==="EACCES")return!1;throw er}}}});var require_which=__commonJS({"../../node_modules/which/which.js"(exports2,module2){"use strict";var isWindows=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",path8=require("path"),COLON=isWindows?";":":",isexe=require_isexe(),getNotFoundError=cmd=>Object.assign(new Error(`not found: ${cmd}`),{code:"ENOENT"}),getPathInfo=(cmd,opt)=>{let colon=opt.colon||COLON,pathEnv=cmd.match(/\//)||isWindows&&cmd.match(/\\/)?[""]:[...isWindows?[process.cwd()]:[],...(opt.path||process.env.PATH||"").split(colon)],pathExtExe=isWindows?opt.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",pathExt=isWindows?pathExtExe.split(colon):[""];return isWindows&&cmd.indexOf(".")!==-1&&pathExt[0]!==""&&pathExt.unshift(""),{pathEnv,pathExt,pathExtExe}},which=(cmd,opt,cb)=>{typeof opt=="function"&&(cb=opt,opt={}),opt||(opt={});let{pathEnv,pathExt,pathExtExe}=getPathInfo(cmd,opt),found=[],step=i=>new Promise((resolve2,reject)=>{if(i===pathEnv.length)return opt.all&&found.length?resolve2(found):reject(getNotFoundError(cmd));let ppRaw=pathEnv[i],pathPart=/^".*"$/.test(ppRaw)?ppRaw.slice(1,-1):ppRaw,pCmd=path8.join(pathPart,cmd),p=!pathPart&&/^\.[\\\/]/.test(cmd)?cmd.slice(0,2)+pCmd:pCmd;resolve2(subStep(p,i,0))}),subStep=(p,i,ii)=>new Promise((resolve2,reject)=>{if(ii===pathExt.length)return resolve2(step(i+1));let ext=pathExt[ii];isexe(p+ext,{pathExt:pathExtExe},(er,is)=>{if(!er&&is)if(opt.all)found.push(p+ext);else return resolve2(p+ext);return resolve2(subStep(p,i,ii+1))})});return cb?step(0).then(res=>cb(null,res),cb):step(0)},whichSync=(cmd,opt)=>{opt=opt||{};let{pathEnv,pathExt,pathExtExe}=getPathInfo(cmd,opt),found=[];for(let i=0;i<pathEnv.length;i++){let ppRaw=pathEnv[i],pathPart=/^".*"$/.test(ppRaw)?ppRaw.slice(1,-1):ppRaw,pCmd=path8.join(pathPart,cmd),p=!pathPart&&/^\.[\\\/]/.test(cmd)?cmd.slice(0,2)+pCmd:pCmd;for(let j=0;j<pathExt.length;j++){let cur=p+pathExt[j];try{if(isexe.sync(cur,{pathExt:pathExtExe}))if(opt.all)found.push(cur);else return cur}catch{}}}if(opt.all&&found.length)return found;if(opt.nothrow)return null;throw getNotFoundError(cmd)};module2.exports=which;which.sync=whichSync}});var require_path_key=__commonJS({"../../node_modules/path-key/index.js"(exports2,module2){"use strict";var pathKey=(options={})=>{let environment=options.env||process.env;return(options.platform||process.platform)!=="win32"?"PATH":Object.keys(environment).reverse().find(key=>key.toUpperCase()==="PATH")||"Path"};module2.exports=pathKey;module2.exports.default=pathKey}});var require_resolveCommand=__commonJS({"../../node_modules/cross-spawn/lib/util/resolveCommand.js"(exports2,module2){"use strict";var path8=require("path"),which=require_which(),getPathKey=require_path_key();function resolveCommandAttempt(parsed,withoutPathExt){let env=parsed.options.env||process.env,cwd=process.cwd(),hasCustomCwd=parsed.options.cwd!=null,shouldSwitchCwd=hasCustomCwd&&process.chdir!==void 0&&!process.chdir.disabled;if(shouldSwitchCwd)try{process.chdir(parsed.options.cwd)}catch{}let resolved;try{resolved=which.sync(parsed.command,{path:env[getPathKey({env})],pathExt:withoutPathExt?path8.delimiter:void 0})}catch{}finally{shouldSwitchCwd&&process.chdir(cwd)}return resolved&&(resolved=path8.resolve(hasCustomCwd?parsed.options.cwd:"",resolved)),resolved}function resolveCommand(parsed){return resolveCommandAttempt(parsed)||resolveCommandAttempt(parsed,!0)}module2.exports=resolveCommand}});var require_escape=__commonJS({"../../node_modules/cross-spawn/lib/util/escape.js"(exports2,module2){"use strict";var metaCharsRegExp=/([()\][%!^"`<>&|;, *?])/g;function escapeCommand(arg){return arg=arg.replace(metaCharsRegExp,"^$1"),arg}function escapeArgument(arg,doubleEscapeMetaChars){return arg=`${arg}`,arg=arg.replace(/(?=(\\+?)?)\1"/g,'$1$1\\"'),arg=arg.replace(/(?=(\\+?)?)\1$/,"$1$1"),arg=`"${arg}"`,arg=arg.replace(metaCharsRegExp,"^$1"),doubleEscapeMetaChars&&(arg=arg.replace(metaCharsRegExp,"^$1")),arg}module2.exports.command=escapeCommand;module2.exports.argument=escapeArgument}});var require_shebang_regex=__commonJS({"../../node_modules/shebang-regex/index.js"(exports2,module2){"use strict";module2.exports=/^#!(.*)/}});var require_shebang_command=__commonJS({"../../node_modules/shebang-command/index.js"(exports2,module2){"use strict";var shebangRegex=require_shebang_regex();module2.exports=(string="")=>{let match=string.match(shebangRegex);if(!match)return null;let[path8,argument]=match[0].replace(/#! ?/,"").split(" "),binary=path8.split("/").pop();return binary==="env"?argument:argument?`${binary} ${argument}`:binary}}});var require_readShebang=__commonJS({"../../node_modules/cross-spawn/lib/util/readShebang.js"(exports2,module2){"use strict";var fs7=require("fs"),shebangCommand=require_shebang_command();function readShebang(command2){let buffer=Buffer.alloc(150),fd;try{fd=fs7.openSync(command2,"r"),fs7.readSync(fd,buffer,0,150,0),fs7.closeSync(fd)}catch{}return shebangCommand(buffer.toString())}module2.exports=readShebang}});var require_parse4=__commonJS({"../../node_modules/cross-spawn/lib/parse.js"(exports2,module2){"use strict";var path8=require("path"),resolveCommand=require_resolveCommand(),escape=require_escape(),readShebang=require_readShebang(),isWin=process.platform==="win32",isExecutableRegExp=/\.(?:com|exe)$/i,isCmdShimRegExp=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function detectShebang(parsed){parsed.file=resolveCommand(parsed);let shebang=parsed.file&&readShebang(parsed.file);return shebang?(parsed.args.unshift(parsed.file),parsed.command=shebang,resolveCommand(parsed)):parsed.file}function parseNonShell(parsed){if(!isWin)return parsed;let commandFile=detectShebang(parsed),needsShell=!isExecutableRegExp.test(commandFile);if(parsed.options.forceShell||needsShell){let needsDoubleEscapeMetaChars=isCmdShimRegExp.test(commandFile);parsed.command=path8.normalize(parsed.command),parsed.command=escape.command(parsed.command),parsed.args=parsed.args.map(arg=>escape.argument(arg,needsDoubleEscapeMetaChars));let shellCommand=[parsed.command].concat(parsed.args).join(" ");parsed.args=["/d","/s","/c",`"${shellCommand}"`],parsed.command=process.env.comspec||"cmd.exe",parsed.options.windowsVerbatimArguments=!0}return parsed}function parse3(command2,args,options){args&&!Array.isArray(args)&&(options=args,args=null),args=args?args.slice(0):[],options=Object.assign({},options);let parsed={command:command2,args,options,file:void 0,original:{command:command2,args}};return options.shell?parsed:parseNonShell(parsed)}module2.exports=parse3}});var require_enoent=__commonJS({"../../node_modules/cross-spawn/lib/enoent.js"(exports2,module2){"use strict";var isWin=process.platform==="win32";function notFoundError(original,syscall){return Object.assign(new Error(`${syscall} ${original.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${syscall} ${original.command}`,path:original.command,spawnargs:original.args})}function hookChildProcess(cp,parsed){if(!isWin)return;let originalEmit=cp.emit;cp.emit=function(name,arg1){if(name==="exit"){let err=verifyENOENT(arg1,parsed);if(err)return originalEmit.call(cp,"error",err)}return originalEmit.apply(cp,arguments)}}function verifyENOENT(status,parsed){return isWin&&status===1&&!parsed.file?notFoundError(parsed.original,"spawn"):null}function verifyENOENTSync(status,parsed){return isWin&&status===1&&!parsed.file?notFoundError(parsed.original,"spawnSync"):null}module2.exports={hookChildProcess,verifyENOENT,verifyENOENTSync,notFoundError}}});var require_cross_spawn=__commonJS({"../../node_modules/cross-spawn/index.js"(exports2,module2){"use strict";var cp=require("child_process"),parse3=require_parse4(),enoent=require_enoent();function spawn(command2,args,options){let parsed=parse3(command2,args,options),spawned=cp.spawn(parsed.command,parsed.args,parsed.options);return enoent.hookChildProcess(spawned,parsed),spawned}function spawnSync3(command2,args,options){let parsed=parse3(command2,args,options),result=cp.spawnSync(parsed.command,parsed.args,parsed.options);return result.error=result.error||enoent.verifyENOENTSync(result.status,parsed),result}module2.exports=spawn;module2.exports.spawn=spawn;module2.exports.sync=spawnSync3;module2.exports._parse=parse3;module2.exports._enoent=enoent}});var import_cli3=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server3=require("storybook/internal/core-server"),import_node_logger24=require("storybook/internal/node-logger"),import_telemetry3=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require_envinfo(),1);var array=[],characterCodeCache=[];function leven(first,second){if(first===second)return 0;let swap=first;first.length>second.length&&(first=second,second=swap);let firstLength=first.length,secondLength=second.length;for(;firstLength>0&&first.charCodeAt(~-firstLength)===second.charCodeAt(~-secondLength);)firstLength--,secondLength--;let start=0;for(;start<firstLength&&first.charCodeAt(start)===second.charCodeAt(start);)start++;if(firstLength-=start,secondLength-=start,firstLength===0)return secondLength;let bCharacterCode,result,temporary,temporary2,index=0,index2=0;for(;index<firstLength;)characterCodeCache[index]=first.charCodeAt(start+index),array[index]=++index;for(;index2<secondLength;)for(bCharacterCode=second.charCodeAt(start+index2),temporary=index2++,result=index2,index=0;index<firstLength;index++)temporary2=bCharacterCode===characterCodeCache[index]?temporary:temporary+1,temporary=array[index],result=array[index]=temporary>result?temporary2>result?result+1:temporary2:temporary2>temporary?temporary+1:temporary2;return result}var import_picocolors19=__toESM(require_picocolors(),1);var version="9.1.0-beta.0";var import_node_path7=require("path"),import_common6=require("storybook/internal/common"),import_csf_tools2=require("storybook/internal/csf-tools"),import_node_logger5=require("storybook/internal/node-logger"),import_semver6=__toESM(require_semver2(),1),import_ts_dedent5=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",`*
81
81
  * This function is used to resolve the absolute path of a package.
82
82
  * It is needed in projects that use Yarn PnP or are set up within a monorepo.
83
83
  `),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)})})}init_mainConfigFile();var postinstallAddon=async(addonName,options)=>{try{let modulePath=require.resolve(`${addonName}/postinstall`,{paths:[process.cwd()]}),postinstall=require(modulePath);try{console.log(`Running postinstall script for ${addonName}`),await postinstall(options)}catch(e){console.error(`Error running postinstall script for ${addonName}`),console.error(e)}}catch{}};var getVersionSpecifier=addon=>{let groups=/^(@{0,1}[^@]+)(?:@(.+))?$/.exec(addon);return groups?[groups[1],groups[2]]:[addon,void 0]};var checkInstalled=(addonName,main)=>!!main.addons?.find(entry=>(typeof entry=="string"?entry:entry.name)?.endsWith(addonName)),isCoreAddon=addonName=>Object.hasOwn(import_common6.versions,addonName);async function add(addon,{packageManager:pkgMgr,skipPostinstall,configDir:userSpecifiedConfigDir,yes,skipInstall},logger23=console){let[addonName,inputVersion]=getVersionSpecifier(addon),{mainConfig,mainConfigPath,configDir,previewConfigPath,packageManager}=await getStorybookData({configDir:userSpecifiedConfigDir,packageManagerName:pkgMgr});if(typeof configDir>"u")throw new Error(import_ts_dedent5.dedent`
@@ -195,7 +195,7 @@ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
195
195
  `);return}dryRun||await(0,import_cli.configureEslintPlugin)({eslintConfigFile,packageManager,isFlatConfig})}};var import_promises6=require("fs/promises"),import_csf_tools8=require("storybook/internal/csf-tools"),import_picocolors12=__toESM(require_picocolors(),1),initialGlobals={id:"initial-globals",link:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#previewjs-globals-renamed-to-initialglobals",async check({previewConfigPath}){if(!previewConfigPath)return null;let previewConfig=(0,import_csf_tools8.loadConfig)((await(0,import_promises6.readFile)(previewConfigPath)).toString()).parse(),globals=previewConfig.getFieldNode(["globals"]);return globals?{globals,previewConfig,previewConfigPath}:null},prompt(){return`Rename ${import_picocolors12.default.cyan("globals")} to ${import_picocolors12.default.cyan("initialGlobals")} in preview.js?`},async run({dryRun,result}){result.previewConfig.removeField(["globals"]),result.previewConfig.setFieldNode(["initialGlobals"],result.globals),dryRun||await(0,import_promises6.writeFile)(result.previewConfigPath,(0,import_csf_tools8.formatConfig)(result.previewConfig))}};var import_common18=require("storybook/internal/common"),removeAddonInteractions={id:"remove-addon-interactions",link:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#essentials-addon-viewport-controls-interactions-and-actions-moved-to-core",async check({mainConfig,packageManager}){let addons=(0,import_common18.getAddonNames)(mainConfig),interactionsAddon="@storybook/addon-interactions",hasInteractionsAddon=addons.some(addon=>addon.includes(interactionsAddon)),hasInteractionsAddonInDeps=packageManager.isDependencyInstalled(interactionsAddon);return!hasInteractionsAddon&&!hasInteractionsAddonInDeps?null:!0},prompt(){return"@storybook/addon-interactions has been moved to Storybook core and will be removed from your configuration."},async run({packageManager,dryRun,configDir}){dryRun||await(0,import_common18.removeAddon)("@storybook/addon-interactions",{configDir,skipInstall:!0,packageManager})}};var import_csf_tools9=require("storybook/internal/csf-tools"),import_picocolors13=__toESM(require_picocolors(),1);init_mainConfigFile();var logger12={log:message=>{process.env.NODE_ENV!=="test"&&console.log(message)}},removeDocsAutodocs={id:"remove-docs-autodocs",link:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mainjs-docsautodocs-is-deprecated",async check({mainConfigPath}){if(!mainConfigPath)return null;try{let autodocs=(await(0,import_csf_tools9.readConfig)(mainConfigPath)).getSafeFieldValue(["docs","autodocs"]);return autodocs===void 0?null:{autodocs}}catch{return null}},prompt:()=>`${import_picocolors13.default.cyan("docs.autodocs")} has been removed in Storybook 9 and will be removed from your configuration.`,async run({result,dryRun,mainConfigPath,previewConfigPath}){let{autodocs}=result;logger12.log(`\u{1F504} Updating ${import_picocolors13.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&&(logger12.log(`\u{1F504} Updating ${import_picocolors13.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_common19=require("storybook/internal/common");init_mainConfigFile();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-essential-addons",link:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#essentials-addon-viewport-controls-interactions-and-actions-moved-to-core",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_common19.getAddonNames)(mainConfig);hasEssentialsAddon=addonNames.includes("@storybook/addon-essentials"),hasDocsAddon=addonNames.includes("@storybook/addon-docs");let allDeps=packageManager.getAllDependencies(),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};return essentialsOptions&&(result.essentialsOptions=essentialsOptions),result}catch{return null}},prompt(){return"In Storybook 9.0, several addons have been moved into Storybook's core and are no longer needed as separate packages. We'll remove the unnecessary addons from your configuration and dependencies, and update your code to use the new core features."},async run({result,dryRun,packageManager,configDir,storybookVersion,storiesPaths,mainConfigPath,previewConfigPath}){let{hasEssentials,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove,essentialsOptions}=result;if(!(!hasEssentials&&additionalAddonsToRemove.length===0)&&!dryRun){hasEssentials&&await(0,import_common19.removeAddon)("@storybook/addon-essentials",{configDir,packageManager,skipInstall:!0});for(let addon of additionalAddonsToRemove)await(0,import_common19.removeAddon)(addon,{configDir,packageManager,skipInstall:!0});let errors=await(0,import_common19.transformImportFiles)([...storiesPaths,mainConfigPath,previewConfigPath].filter(Boolean),consolidatedAddons,dryRun);if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
196
196
  ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
197
197
  `)}`);essentialsOptions&&updateMainConfig({mainConfigPath,dryRun:!!dryRun},moveEssentialOptions(dryRun,essentialsOptions)),!hasDocsDisabled&&hasEssentials&&await add("@storybook/addon-docs",{configDir,packageManager:packageManager.type,skipInstall:!0,skipPostinstall:!0,yes:!0})}}};var import_promises7=require("fs/promises"),import_common20=require("storybook/internal/common"),import_node_logger15=require("storybook/internal/node-logger"),getAllDependencies=packageJson=>Object.keys({...packageJson.dependencies||{},...packageJson.devDependencies||{}}),detectFrameworks=dependencies=>Object.keys(import_common20.frameworkPackages).filter(pkg=>dependencies.includes(pkg)),detectRenderers=dependencies=>Object.keys(import_common20.rendererPackages).filter(pkg=>dependencies.includes(pkg)).filter(pkg=>!Object.keys(import_common20.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:pLimit3}=await Promise.resolve().then(()=>(init_p_limit2(),p_limit_exports)),limit=pLimit3(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises7.readFile)(file,"utf-8"),transformed=replaceImports(contents,renderer,framework);!dryRun&&transformed&&await(0,import_promises7.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},removeRendererInPackageJson=async(packageJsonPath,renderer,dryRun)=>{try{let content=await(0,import_promises7.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_promises7.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_promises7.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",promptType:"auto",link:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#moving-from-renderer-based-to-framework-based-configuration",async check({packageManager}){let validResults=(await Promise.all(packageManager.packageJsonPaths.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:packageManager.packageJsonPaths.filter((_,i)=>validResults[i]!==null)}},prompt(){return"We're moving from renderer-based to framework-based configuration and update your imports and dependencies accordingly."},async run(options){let{result,dryRun=!1,storiesPaths,configDir}=options;for(let selectedFramework of result.frameworks){if(!import_common20.frameworkPackages[selectedFramework]){import_node_logger15.logger.warn(`Framework name not found for ${selectedFramework}, skipping.`);continue}let rendererName=import_common20.frameworkToRenderer[import_common20.frameworkPackages[selectedFramework]],[rendererPackage]=Object.entries(import_common20.rendererPackages).find(([,renderer])=>renderer===rendererName)??[];if(!rendererPackage){import_node_logger15.logger.warn(`Renderer package not found for ${selectedFramework}, skipping.`);continue}if(rendererPackage===selectedFramework)continue;import_node_logger15.logger.debug(`
198
- Migrating ${rendererPackage} to ${selectedFramework}`);let{globby:globby2}=await Promise.resolve().then(()=>(init_globby(),globby_exports)),configFiles=await globby2([`${configDir}/**/*`]);await transformSourceFiles([...storiesPaths,...configFiles].filter(Boolean),rendererPackage,selectedFramework,dryRun),import_node_logger15.logger.debug("Updating package.json files..."),await Promise.all(result.packageJsonFiles.map(file=>removeRendererInPackageJson(file,rendererPackage,dryRun)))}}};var import_node_fs6=require("fs"),import_promises8=require("fs/promises"),import_node_path8=require("path"),import_ts_dedent12=require("ts-dedent");async function renameInFile(filePath,oldText,newText){try{let updatedContent=(await(0,import_promises8.readFile)(filePath,"utf8")).replaceAll(oldText,newText);await(0,import_promises8.writeFile)(filePath,updatedContent,"utf8")}catch(error){console.error(`Error updating references in ${filePath}:`,error)}}var getDotStorybookReferences=async searchDir=>{try{let{globby:globby2}=await Promise.resolve().then(()=>(init_globby(),globby_exports)),{readFile:readFile7}=await import("fs/promises"),files=await globby2(`${searchDir}/**/*`,{onlyFiles:!0,gitignore:!0}),referencedFiles=[];return await Promise.all(files.map(async file=>{try{(await readFile7(file,"utf8")).includes(".storybook")&&referencedFiles.push(file)}catch{}})),referencedFiles}catch(fsError){return console.warn("Unable to search for .storybook references:",fsError),[]}},rnstorybookConfig={id:"rnstorybook-config",link:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-native-config-dir-renamed",async check({packageManager,mainConfigPath}){if(!packageManager.getAllDependencies()["@storybook/react-native"])return null;let projectDir=mainConfigPath?(0,import_node_path8.join)(mainConfigPath,"..",".."):process.cwd(),storybookDir=(0,import_node_path8.join)(projectDir,".storybook"),rnStorybookDir=(0,import_node_path8.join)(projectDir,".rnstorybook"),{globby:globby2}=await Promise.resolve().then(()=>(init_globby(),globby_exports)),requiresFiles=await globby2((0,import_node_path8.join)(storybookDir,"storybook.requires.*"));return(0,import_node_fs6.existsSync)(storybookDir)&&requiresFiles.length>0&&!(0,import_node_fs6.existsSync)(rnStorybookDir)?{storybookDir,rnStorybookDir}:null},prompt(){return import_ts_dedent12.dedent`We'll rename your .storybook directory to .rnstorybook and update all references to it.`},async run({result:{storybookDir,rnStorybookDir},dryRun,packageManager}){let instanceDir=packageManager.instanceDir,dotStorybookReferences=await getDotStorybookReferences(instanceDir);dryRun||(await Promise.all(dotStorybookReferences.map(async ref=>{await renameInFile(ref,".storybook",".rnstorybook")})),await(0,import_promises8.rename)(storybookDir,rnStorybookDir))}};var import_node_fs7=require("fs"),import_node_path9=require("path"),import_common21=require("storybook/internal/common"),import_node_logger16=require("storybook/internal/node-logger"),import_semver10=__toESM(require_semver2(),1),import_ts_dedent13=require("ts-dedent");async function getLatestVersions(packageManager,packages){return Promise.all(packages.map(async([packageName])=>({packageName,beforeVersion:await packageManager.getInstalledVersion(packageName),afterVersion:await packageManager.latestVersion(packageName)})))}function isValidVersionType(packageName,specifier){return specifier.startsWith("patch:")||specifier.startsWith("file:")||specifier.startsWith("link:")||specifier.startsWith("portal:")||specifier.startsWith("git:")||specifier.startsWith("git+")||specifier.startsWith("http:")||specifier.startsWith("https:")||specifier.startsWith("workspace:")?(import_node_logger16.logger.debug(`Skipping ${packageName} as it does not have a valid version type: ${specifier}`),!1):!0}var upgradeStorybookRelatedDependencies={id:"upgrade-storybook-related-dependencies",promptType:"auto",promptDefaultValue:!1,async check({packageManager,storybookVersion}){import_node_logger16.logger.debug("Checking for incompatible storybook packages...");let analyzedPackages=await getIncompatibleStorybookPackages({currentStorybookVersion:storybookVersion,packageManager,skipErrors:!0}),allDependencies=packageManager.getAllDependencies(),storybookDependencies=Object.keys(allDependencies).filter(dep=>dep.includes("storybook")).filter(dep=>!(0,import_common21.isCorePackage)(dep)&&!(0,import_common21.isSatelliteAddon)(dep)),incompatibleDependencies=analyzedPackages.filter(pkg=>pkg.hasIncompatibleDependencies).map(pkg=>pkg.packageName),uniquePackages=Array.from(new Set([...storybookDependencies,...incompatibleDependencies].filter(dep=>isValidVersionType(dep,allDependencies[dep])))).map(packageName=>[packageName,allDependencies[packageName]]),upgradablePackages=(await getLatestVersions(packageManager,uniquePackages)).filter(({afterVersion,beforeVersion,packageName})=>beforeVersion===null||afterVersion===null||allDependencies[packageName]===null?!1:(0,import_semver10.gt)(afterVersion,beforeVersion));return upgradablePackages.length>0?{upgradable:upgradablePackages}:null},prompt(){return"We'll upgrade the community packages that are compatible."},async run({result:{upgradable},packageManager,dryRun}){if(dryRun){import_node_logger16.logger.log(import_ts_dedent13.dedent`
198
+ Migrating ${rendererPackage} to ${selectedFramework}`);let{globby:globby2}=await Promise.resolve().then(()=>(init_globby(),globby_exports)),configFiles=await globby2([`${configDir}/**/*`]);await transformSourceFiles([...storiesPaths,...configFiles].filter(Boolean),rendererPackage,selectedFramework,dryRun),import_node_logger15.logger.debug("Updating package.json files..."),await Promise.all(result.packageJsonFiles.map(file=>removeRendererInPackageJson(file,rendererPackage,dryRun)))}}};var import_node_fs6=require("fs"),import_promises8=require("fs/promises"),import_node_path8=require("path"),import_ts_dedent12=require("ts-dedent");async function renameInFile(filePath,oldText,newText){try{let updatedContent=(await(0,import_promises8.readFile)(filePath,"utf8")).replaceAll(oldText,newText);await(0,import_promises8.writeFile)(filePath,updatedContent,"utf8")}catch(error){console.error(`Error updating references in ${filePath}:`,error)}}var getDotStorybookReferences=async searchDir=>{try{let{globby:globby2}=await Promise.resolve().then(()=>(init_globby(),globby_exports)),{readFile:readFile7}=await import("fs/promises"),files=await globby2(`${searchDir}/**/*`,{onlyFiles:!0,gitignore:!0}),referencedFiles=[];return await Promise.all(files.map(async file=>{try{(await readFile7(file,"utf8")).includes(".storybook")&&referencedFiles.push(file)}catch{}})),referencedFiles}catch(fsError){return console.warn("Unable to search for .storybook references:",fsError),[]}},rnstorybookConfig={id:"rnstorybook-config",link:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-native-config-dir-renamed",async check({packageManager,mainConfigPath}){if(!packageManager.getAllDependencies()["@storybook/react-native"])return null;let projectDir=mainConfigPath?(0,import_node_path8.join)(mainConfigPath,"..",".."):process.cwd(),storybookDir=(0,import_node_path8.join)(projectDir,".storybook"),rnStorybookDir=(0,import_node_path8.join)(projectDir,".rnstorybook"),{globby:globby2}=await Promise.resolve().then(()=>(init_globby(),globby_exports)),requiresFiles=await globby2((0,import_node_path8.join)(storybookDir,"storybook.requires.*"));return(0,import_node_fs6.existsSync)(storybookDir)&&requiresFiles.length>0&&!(0,import_node_fs6.existsSync)(rnStorybookDir)?{storybookDir,rnStorybookDir}:null},prompt(){return import_ts_dedent12.dedent`We'll rename your .storybook directory to .rnstorybook and update all references to it.`},async run({result:{storybookDir,rnStorybookDir},dryRun,packageManager}){let instanceDir=packageManager.instanceDir,dotStorybookReferences=await getDotStorybookReferences(instanceDir);dryRun||(await Promise.all(dotStorybookReferences.map(async ref=>{await renameInFile(ref,".storybook",".rnstorybook")})),await(0,import_promises8.rename)(storybookDir,rnStorybookDir))}};var import_node_fs7=require("fs"),import_node_path9=require("path"),import_common21=require("storybook/internal/common"),import_node_logger16=require("storybook/internal/node-logger"),import_semver10=__toESM(require_semver2(),1),import_ts_dedent13=require("ts-dedent");async function getLatestVersions(packageManager,packages){return Promise.all(packages.map(async([packageName])=>({packageName,beforeVersion:await packageManager.getInstalledVersion(packageName),afterVersion:await packageManager.latestVersion(packageName)})))}function isValidVersionType(packageName,specifier){return specifier.startsWith("patch:")||specifier.startsWith("file:")||specifier.startsWith("link:")||specifier.startsWith("portal:")||specifier.startsWith("git:")||specifier.startsWith("git+")||specifier.startsWith("http:")||specifier.startsWith("https:")||specifier.startsWith("workspace:")?(import_node_logger16.logger.debug(`Skipping ${packageName} as it does not have a valid version type: ${specifier}`),!1):!0}var upgradeStorybookRelatedDependencies={id:"upgrade-storybook-related-dependencies",promptType:"auto",defaultSelected:!1,async check({packageManager,storybookVersion}){import_node_logger16.logger.debug("Checking for incompatible storybook packages...");let analyzedPackages=await getIncompatibleStorybookPackages({currentStorybookVersion:storybookVersion,packageManager,skipErrors:!0}),allDependencies=packageManager.getAllDependencies(),storybookDependencies=Object.keys(allDependencies).filter(dep=>dep.includes("storybook")).filter(dep=>!(0,import_common21.isCorePackage)(dep)&&!(0,import_common21.isSatelliteAddon)(dep)),incompatibleDependencies=analyzedPackages.filter(pkg=>pkg.hasIncompatibleDependencies).map(pkg=>pkg.packageName),uniquePackages=Array.from(new Set([...storybookDependencies,...incompatibleDependencies].filter(dep=>isValidVersionType(dep,allDependencies[dep])))).map(packageName=>[packageName,allDependencies[packageName]]),upgradablePackages=(await getLatestVersions(packageManager,uniquePackages)).filter(({afterVersion,beforeVersion,packageName})=>beforeVersion===null||afterVersion===null||allDependencies[packageName]===null?!1:(0,import_semver10.gt)(afterVersion,beforeVersion));return upgradablePackages.length>0?{upgradable:upgradablePackages}:null},prompt(){return"We'll upgrade the community packages that are compatible."},async run({result:{upgradable},packageManager,dryRun}){if(dryRun){import_node_logger16.logger.log(import_ts_dedent13.dedent`
199
199
  The following would have been upgraded:
200
200
  ${upgradable.map(({packageName,afterVersion,beforeVersion})=>`${packageName}: ${beforeVersion} => ${afterVersion}`).join(`
201
201
  `)}
@@ -218,7 +218,7 @@ ${error}`).join(`
218
218
  The following migrations are available:
219
219
  ${availableFixes}
220
220
  `)},hasFailures=fixResults=>Object.values(fixResults||{}).some(r=>r==="failed"||r==="check_failed"),doAutomigrate=async options=>{import_node_logger18.logger.debug("Extracting storybook data...");let{mainConfig,mainConfigPath,previewConfigPath,storybookVersion,configDir,packageManager,storiesPaths}=await getStorybookData({configDir:options.configDir,packageManagerName:options.packageManager});if(!storybookVersion)throw new Error("Could not determine Storybook version");if(!mainConfigPath)throw new Error("Could not determine main config path");let outcome=await automigrate({...options,packageManager,storybookVersion,beforeVersion:storybookVersion,mainConfigPath,mainConfig,previewConfigPath,configDir,isUpgrade:!1,isLatest:!1,storiesPaths});if(Object.values(outcome?.fixResults??{}).some(r=>r==="succeeded"||r==="manual_succeeded")&&packageManager.installDependencies(),outcome&&!options.skipDoctor&&await doctor({configDir,packageManager:options.packageManager}),hasFailures(outcome?.fixResults))throw new Error("Some migrations failed")},automigrate=async({fixId,fixes:inputFixes,dryRun,yes,packageManager,list,configDir,mainConfig,mainConfigPath,previewConfigPath,storybookVersion,beforeVersion,renderer:rendererPackage,skipInstall,hideMigrationSummary=!1,isUpgrade,isLatest,storiesPaths})=>{if(list)return logAvailableMigrations(),null;let commandFix=commandFixes.find(f=>f.id===fixId);if(commandFix)return import_node_logger18.logger.log(`\u{1F50E} Running migration ${import_picocolors15.default.magenta(fixId)}..`),await commandFix.run({mainConfigPath,previewConfigPath,packageManager,configDir,dryRun,mainConfig,result:null,storybookVersion,storiesPaths}),null;let selectedFixes=inputFixes||allFixes.filter(fix=>!(fix.id===upgradeStorybookRelatedDependencies.id&&isLatest===!1&&fixId!==upgradeStorybookRelatedDependencies.id)),fixes=fixId?selectedFixes.filter(f=>f.id===fixId):selectedFixes;if(fixId&&fixes.length===0)return import_node_logger18.logger.log(`\u{1F4ED} No migrations found for ${import_picocolors15.default.magenta(fixId)}.`),logAvailableMigrations(),null;import_node_logger18.logger.log("\u{1F50E} checking possible migrations..");let{fixResults,fixSummary,preCheckFailure}=await runFixes({fixes,packageManager,rendererPackage,skipInstall,configDir,previewConfigPath,mainConfig,mainConfigPath,storybookVersion,beforeVersion,isUpgrade:!!isUpgrade,dryRun,yes,storiesPaths});return hasFailures(fixResults)&&import_node_logger18.logTracker.enableLogWriting(),hideMigrationSummary||(import_node_logger18.logger.log(""),logMigrationSummary({fixResults,fixSummary}),import_node_logger18.logger.log("")),{fixResults,preCheckFailure}};async function runFixes({fixes,dryRun,yes,rendererPackage,skipInstall,configDir,packageManager,mainConfig,mainConfigPath,previewConfigPath,storybookVersion,storiesPaths}){let fixResults={},fixSummary={succeeded:[],failed:{},manual:[],skipped:[]};for(let i=0;i<fixes.length;i+=1){let f=fixes[i],result;try{import_node_logger18.logger.debug(`Running ${import_picocolors15.default.cyan(f.id)} migration checks`),result=await f.check({packageManager,configDir,rendererPackage,mainConfig,storybookVersion,previewConfigPath,mainConfigPath,storiesPaths}),import_node_logger18.logger.debug(`End of ${import_picocolors15.default.cyan(f.id)} migration checks`)}catch(error){import_node_logger18.logger.warn(`\u26A0\uFE0F failed to check fix ${import_picocolors15.default.bold(f.id)}`),error instanceof Error&&(import_node_logger18.logger.error(`
221
- ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_failed"}if(result){let promptType=typeof f.promptType=="function"?await f.promptType(result):f.promptType??"auto";import_node_logger18.logger.log(`\u{1F50E} found a '${import_picocolors15.default.cyan(f.id)}' migration:`);let getTitle=()=>{switch(promptType){case"auto":return"Automigration detected";case"manual":return"Manual migration detected";case"notification":return"Migration notification"}},currentTaskLogger=import_node_logger18.prompt.taskLog({id:`automigrate-task-${f.id}`,title:`${getTitle()}: ${import_picocolors15.default.cyan(f.id)}`});import_node_logger18.logger.logBox(f.prompt());let runAnswer;try{if(dryRun)runAnswer={fix:!1};else if(yes)runAnswer={fix:!0},promptType==="manual"&&(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id));else if(promptType==="manual"){if(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id),import_node_logger18.logger.log(""),!await import_node_logger18.prompt.confirm({message:"Select continue once you have made the required changes, or quit to exit the migration process",initialValue:!0,active:"continue",inactive:"quit"},{onCancel:()=>{throw new Error}})){fixResults[f.id]="manual_skipped";break}}else promptType==="auto"?runAnswer={fix:await import_node_logger18.prompt.confirm({message:`Do you want to run the '${import_picocolors15.default.cyan(f.id)}' migration on your project?`,initialValue:f.promptDefaultValue??!0},{onCancel:()=>{throw new Error}})}:promptType==="notification"&&(runAnswer={fix:await import_node_logger18.prompt.confirm({message:"Do you want to continue?"},{onCancel:()=>{throw new Error}})})}catch{break}if(promptType==="auto")if(invariant(runAnswer,"runAnswer must be defined if not promptOnly"),runAnswer.fix)try{invariant(typeof f.run=="function","run method should be available in fix."),invariant(mainConfigPath,"Main config path should be defined to run migration."),await f.run({result,packageManager,dryRun,mainConfigPath,configDir,previewConfigPath,mainConfig,skipInstall,storybookVersion,storiesPaths}),import_node_logger18.logger.log(`\u2705 ran ${import_picocolors15.default.cyan(f.id)} migration`),fixResults[f.id]="succeeded",fixSummary.succeeded.push(f.id),currentTaskLogger.success(`Ran ${import_picocolors15.default.cyan(f.id)} migration`)}catch(error){fixResults[f.id]="failed";let errorMessage=error instanceof Error?error.message:"Failed to run migration";fixSummary.failed[f.id]=errorMessage,currentTaskLogger.error(`Error when running ${import_picocolors15.default.cyan(f.id)} migration`)}else fixResults[f.id]="skipped",fixSummary.skipped.push(f.id),currentTaskLogger.success(`Skipped ${import_picocolors15.default.cyan(f.id)} migration`)}else fixResults[f.id]=fixResults[f.id]||"unnecessary"}return{fixResults,fixSummary}}var import_promises9=require("fs/promises"),import_node_path10=require("path"),import_node_logger19=require("storybook/internal/node-logger"),import_cross_spawn=__toESM(require_cross_spawn(),1),import_picocolors16=__toESM(require_picocolors(),1),exec=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&import_node_logger19.logger.info(startMessage),dryRun){import_node_logger19.logger.info(`
221
+ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_failed"}if(result){let promptType=typeof f.promptType=="function"?await f.promptType(result):f.promptType??"auto";import_node_logger18.logger.log(`\u{1F50E} found a '${import_picocolors15.default.cyan(f.id)}' migration:`);let getTitle=()=>{switch(promptType){case"auto":return"Automigration detected";case"manual":return"Manual migration detected";case"notification":return"Migration notification"}},currentTaskLogger=import_node_logger18.prompt.taskLog({id:`automigrate-task-${f.id}`,title:`${getTitle()}: ${import_picocolors15.default.cyan(f.id)}`});import_node_logger18.logger.logBox(f.prompt());let runAnswer;try{if(dryRun)runAnswer={fix:!1};else if(yes)runAnswer={fix:!0},promptType==="manual"&&(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id));else if(promptType==="manual"){if(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id),import_node_logger18.logger.log(""),!await import_node_logger18.prompt.confirm({message:"Select continue once you have made the required changes, or quit to exit the migration process",initialValue:!0,active:"continue",inactive:"quit"},{onCancel:()=>{throw new Error}})){fixResults[f.id]="manual_skipped";break}}else promptType==="auto"?runAnswer={fix:await import_node_logger18.prompt.confirm({message:`Do you want to run the '${import_picocolors15.default.cyan(f.id)}' migration on your project?`,initialValue:f.defaultSelected??!0},{onCancel:()=>{throw new Error}})}:promptType==="notification"&&(runAnswer={fix:await import_node_logger18.prompt.confirm({message:"Do you want to continue?"},{onCancel:()=>{throw new Error}})})}catch{break}if(promptType==="auto")if(invariant(runAnswer,"runAnswer must be defined if not promptOnly"),runAnswer.fix)try{invariant(typeof f.run=="function","run method should be available in fix."),invariant(mainConfigPath,"Main config path should be defined to run migration."),await f.run({result,packageManager,dryRun,mainConfigPath,configDir,previewConfigPath,mainConfig,skipInstall,storybookVersion,storiesPaths}),import_node_logger18.logger.log(`\u2705 ran ${import_picocolors15.default.cyan(f.id)} migration`),fixResults[f.id]="succeeded",fixSummary.succeeded.push(f.id),currentTaskLogger.success(`Ran ${import_picocolors15.default.cyan(f.id)} migration`)}catch(error){fixResults[f.id]="failed";let errorMessage=error instanceof Error?error.message:"Failed to run migration";fixSummary.failed[f.id]=errorMessage,currentTaskLogger.error(`Error when running ${import_picocolors15.default.cyan(f.id)} migration`)}else fixResults[f.id]="skipped",fixSummary.skipped.push(f.id),currentTaskLogger.success(`Skipped ${import_picocolors15.default.cyan(f.id)} migration`)}else fixResults[f.id]=fixResults[f.id]||"unnecessary"}return{fixResults,fixSummary}}var import_promises9=require("fs/promises"),import_node_path10=require("path"),import_node_logger19=require("storybook/internal/node-logger"),import_cross_spawn=__toESM(require_cross_spawn(),1),import_picocolors16=__toESM(require_picocolors(),1),exec=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&import_node_logger19.logger.info(startMessage),dryRun){import_node_logger19.logger.info(`
222
222
  > ${command2}
223
223
  `);return}return import_node_logger19.logger.info(command2),new Promise((resolve2,reject)=>{let child=(0,import_cross_spawn.spawn)(command2,{...options,shell:!0,stdio:"pipe"});child.stderr.pipe(process.stdout),child.stdout.pipe(process.stdout),child.on("exit",code=>{code===0?resolve2(void 0):(import_node_logger19.logger.error(import_picocolors16.default.red(`An error occurred while executing: \`${command2}\``)),errorMessage&&import_node_logger19.logger.info(errorMessage),reject(new Error(`command exited with code: ${code}: `)))})})},link=async({target,local,start})=>{let storybookDir=process.cwd();try{if(JSON.parse(await(0,import_promises9.readFile)("package.json",{encoding:"utf8"})).name!=="@storybook/root")throw new Error}catch{throw new Error("Expected to run link from the root of the storybook monorepo")}let reproDir=target,reproName=(0,import_node_path10.basename)(target);if(!local){let reprosDir=(0,import_node_path10.join)(storybookDir,"../storybook-repros");import_node_logger19.logger.info(`Ensuring directory ${reprosDir}`),await(0,import_promises9.mkdir)(reprosDir,{recursive:!0}),import_node_logger19.logger.info(`Cloning ${target}`),await exec(`git clone ${target}`,{cwd:reprosDir}),reproName=(0,import_node_path10.basename)(target,(0,import_node_path10.extname)(target)),reproDir=(0,import_node_path10.join)(reprosDir,reproName)}let version2=(0,import_cross_spawn.sync)("yarn",["--version"],{cwd:reproDir,stdio:"pipe",shell:!0}).stdout.toString();if(!/^[2-4]\./.test(version2)){import_node_logger19.logger.warn(`\u{1F6A8} Expected yarn 2 or higher in ${reproDir}!`),import_node_logger19.logger.warn(""),import_node_logger19.logger.warn("Please set it up with `yarn set version berry`,"),import_node_logger19.logger.warn(`then link '${reproDir}' with the '--local' flag.`);return}import_node_logger19.logger.info(`Linking ${reproDir}`),await exec(`yarn link --all --relative ${storybookDir}`,{cwd:reproDir}),import_node_logger19.logger.info(`Installing ${reproName}`);let reproPackageJson=JSON.parse(await(0,import_promises9.readFile)((0,import_node_path10.join)(reproDir,"package.json"),{encoding:"utf8"}));reproPackageJson.devDependencies?.vite||(reproPackageJson.devDependencies={...reproPackageJson.devDependencies,"webpack-hot-middleware":"*"}),reproPackageJson.devDependencies={...reproPackageJson.devDependencies,"@types/node":"^22"},await(0,import_promises9.writeFile)((0,import_node_path10.join)(reproDir,"package.json"),JSON.stringify(reproPackageJson,null,2)),await exec("yarn install",{cwd:reproDir}),start&&(import_node_logger19.logger.info(`Running ${reproName} storybook`),await exec("yarn run storybook",{cwd:reproDir}))};var import_node_logger20=require("storybook/internal/node-logger"),import_codemod2=require("@storybook/codemod");async function migrate(migration,{glob,dryRun,list,rename:rename2,parser}){if(list)(0,import_codemod2.listCodemods)().forEach(key=>import_node_logger20.logger.log(key));else if(migration)await(0,import_codemod2.runCodemod)(migration,{glob,dryRun,logger:import_node_logger20.logger,rename:rename2,parser});else throw new Error("Migrate: please specify a migration name or --list")}var import_node_fs8=require("fs"),import_promises10=require("fs/promises"),import_node_path11=require("path"),import_common22=require("storybook/internal/common"),import_node_logger21=require("storybook/internal/node-logger"),import_giget=require("giget");var _DRIVE_LETTER_START_RE=/^[A-Za-z]:\//;function normalizeWindowsPath(input=""){return input&&input.replace(/\\/g,"/").replace(_DRIVE_LETTER_START_RE,r=>r.toUpperCase())}var _UNC_REGEX=/^[/\\]{2}/,_IS_ABSOLUTE_RE=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/,_DRIVE_LETTER_RE=/^[A-Za-z]:$/;var normalize2=function(path8){if(path8.length===0)return".";path8=normalizeWindowsPath(path8);let isUNCPath=path8.match(_UNC_REGEX),isPathAbsolute=isAbsolute3(path8),trailingSeparator=path8[path8.length-1]==="/";return path8=normalizeString(path8,!isPathAbsolute),path8.length===0?isPathAbsolute?"/":trailingSeparator?"./":".":(trailingSeparator&&(path8+="/"),_DRIVE_LETTER_RE.test(path8)&&(path8+="/"),isUNCPath?isPathAbsolute?`//${path8}`:`//./${path8}`:isPathAbsolute&&!isAbsolute3(path8)?`/${path8}`:path8)},join5=function(...arguments_){if(arguments_.length===0)return".";let joined;for(let argument of arguments_)argument&&argument.length>0&&(joined===void 0?joined=argument:joined+=`/${argument}`);return joined===void 0?".":normalize2(joined.replace(/\/\/+/g,"/"))};function normalizeString(path8,allowAboveRoot){let res="",lastSegmentLength=0,lastSlash=-1,dots=0,char=null;for(let index=0;index<=path8.length;++index){if(index<path8.length)char=path8[index];else{if(char==="/")break;char="/"}if(char==="/"){if(!(lastSlash===index-1||dots===1))if(dots===2){if(res.length<2||lastSegmentLength!==2||res[res.length-1]!=="."||res[res.length-2]!=="."){if(res.length>2){let lastSlashIndex=res.lastIndexOf("/");lastSlashIndex===-1?(res="",lastSegmentLength=0):(res=res.slice(0,lastSlashIndex),lastSegmentLength=res.length-1-res.lastIndexOf("/")),lastSlash=index,dots=0;continue}else if(res.length>0){res="",lastSegmentLength=0,lastSlash=index,dots=0;continue}}allowAboveRoot&&(res+=res.length>0?"/..":"..",lastSegmentLength=2)}else res.length>0?res+=`/${path8.slice(lastSlash+1,index)}`:res=path8.slice(lastSlash+1,index),lastSegmentLength=index-lastSlash-1;lastSlash=index,dots=0}else char==="."&&dots!==-1?++dots:dots=-1}return res}var isAbsolute3=function(p){return _IS_ABSOLUTE_RE.test(p)};var import_picocolors17=__toESM(require_picocolors(),1),import_semver11=__toESM(require_semver2(),1);var import_ts_dedent17=require("ts-dedent");var baseTemplates={"cra/default-js":{name:"Create React App Latest (Webpack | JavaScript)",script:`
224
224
  npx create-react-app {{beforeDir}} && cd {{beforeDir}} && jq '.browserslist.production[0] = ">0.9%"' package.json > tmp.json && mv tmp.json package.json
@@ -271,24 +271,24 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_
271
271
  3. Link to the repro repository in your issue
272
272
 
273
273
  Having a clean repro helps us solve your issue faster! 🙏
274
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})}catch(error){throw import_node_logger21.logger.error("\u{1F6A8} Failed to create sandbox"),error}};async function promptSelectedTemplate(choices){return await import_node_logger21.prompt.select({message:"Select a template",options:choices.map(toChoices)})}var import_common23=require("storybook/internal/common"),import_common24=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger23=require("storybook/internal/node-logger"),import_server_errors2=require("storybook/internal/server-errors"),import_telemetry=require("storybook/internal/telemetry"),import_cross_spawn2=__toESM(require_cross_spawn(),1),import_picocolors18=__toESM(require_picocolors(),1),import_semver12=__toESM(require_semver2(),1),import_ts_dedent18=require("ts-dedent");init_utils();var import_node_logger22=require("storybook/internal/node-logger");init_util();async function collectAutomigrationsAcrossProjects(options){let{fixes,projects,taskLog}=options,automigrationMap=new Map;import_node_logger22.logger.debug(`Starting automigration collection across ${projects.length} projects and ${fixes.length} fixes...`);function collectResult(fix,project,status,result){let existing=automigrationMap.get(fix.id);existing?existing.reports.push({project,result,status}):automigrationMap.set(fix.id,{fix,reports:[{result,status,project}]})}for(let project of projects){let projectName=shortenPath(project.configDir);taskLog.message(`Checking automigrations for ${projectName}...`),import_node_logger22.logger.debug(`Processing project: ${projectName}`);for(let fix of fixes)try{import_node_logger22.logger.debug(`Checking fix ${fix.id} for project ${projectName}...`);let checkOptions={packageManager:project.packageManager,configDir:project.configDir,mainConfig:project.mainConfig,storybookVersion:project.storybookVersion,previewConfigPath:project.previewConfigPath,mainConfigPath:project.mainConfigPath,storiesPaths:project.storiesPaths},result=await fix.check(checkOptions);result!==null?collectResult(fix,project,"check_succeeded",result):collectResult(fix,project,"not_applicable")}catch(error){collectResult(fix,project,"check_failed"),import_node_logger22.logger.debug(`Failed to check fix ${fix.id} for project ${shortenPath(project.configDir)}.`),import_node_logger22.logger.debug(`${error instanceof Error?error.stack:String(error)}`)}}let allAutomigrations=Array.from(automigrationMap.values()),applicableAutomigrations=allAutomigrations.filter(am=>am.reports.every(rep=>rep.status!=="not_applicable")),{successAutomigrations,failedAutomigrations}=applicableAutomigrations.reduce((acc,{fix,reports})=>{let successReports=reports.filter(report=>report.status==="check_succeeded"),failedReports=reports.filter(report=>report.status==="check_failed");return successReports.length>0&&acc.successAutomigrations.push(fix.id),failedReports.length>0&&acc.failedAutomigrations.push(fix.id),acc},{successAutomigrations:[],failedAutomigrations:[]});return taskLog.message(`
274
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})}catch(error){throw import_node_logger21.logger.error("\u{1F6A8} Failed to create sandbox"),error}};async function promptSelectedTemplate(choices){return await import_node_logger21.prompt.select({message:"Select a template",options:choices.map(toChoices)})}var import_common23=require("storybook/internal/common"),import_common24=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger23=require("storybook/internal/node-logger"),import_server_errors2=require("storybook/internal/server-errors"),import_telemetry2=require("storybook/internal/telemetry"),import_cross_spawn2=__toESM(require_cross_spawn(),1),import_picocolors18=__toESM(require_picocolors(),1),import_semver12=__toESM(require_semver2(),1),import_ts_dedent18=require("ts-dedent");init_utils();var import_node_logger22=require("storybook/internal/node-logger"),import_telemetry=require("storybook/internal/telemetry");init_util();async function collectAutomigrationsAcrossProjects(options){let{fixes,projects,taskLog}=options,automigrationMap=new Map;import_node_logger22.logger.debug(`Starting automigration collection across ${projects.length} projects and ${fixes.length} fixes...`);function collectResult(fix,project,status,result){let existing=automigrationMap.get(fix.id);existing?existing.reports.push({project,result,status}):automigrationMap.set(fix.id,{fix,reports:[{result,status,project}]})}for(let project of projects){let projectName=shortenPath(project.configDir);taskLog.message(`Checking automigrations for ${projectName}...`),import_node_logger22.logger.debug(`Processing project: ${projectName}`);for(let fix of fixes)try{import_node_logger22.logger.debug(`Checking fix ${fix.id} for project ${projectName}...`);let checkOptions={packageManager:project.packageManager,configDir:project.configDir,mainConfig:project.mainConfig,storybookVersion:project.storybookVersion,previewConfigPath:project.previewConfigPath,mainConfigPath:project.mainConfigPath,storiesPaths:project.storiesPaths},result=await fix.check(checkOptions);result!==null?collectResult(fix,project,"check_succeeded",result):collectResult(fix,project,"not_applicable")}catch(error){collectResult(fix,project,"check_failed"),import_node_logger22.logger.debug(`Failed to check fix ${fix.id} for project ${shortenPath(project.configDir)}.`),import_node_logger22.logger.debug(`${error instanceof Error?error.stack:String(error)}`)}}let allAutomigrations=Array.from(automigrationMap.values()),applicableAutomigrations=allAutomigrations.filter(am=>am.reports.every(rep=>rep.status!=="not_applicable")),{successAutomigrations,failedAutomigrations}=applicableAutomigrations.reduce((acc,{fix,reports})=>{let successReports=reports.filter(report=>report.status==="check_succeeded"),failedReports=reports.filter(report=>report.status==="check_failed");return successReports.length>0&&acc.successAutomigrations.push(fix.id),failedReports.length>0&&acc.failedAutomigrations.push(fix.id),acc},{successAutomigrations:[],failedAutomigrations:[]});return taskLog.message(`
275
275
  Automigrations detected:`),successAutomigrations.forEach(fixId=>{taskLog.message(`${import_node_logger22.CLI_COLORS.success(`${import_node_logger22.logger.SYMBOLS.success} ${fixId}`)}`)}),failedAutomigrations.forEach(fixId=>{taskLog.message(`${import_node_logger22.CLI_COLORS.error(`${import_node_logger22.logger.SYMBOLS.error} ${fixId}`)}`)}),failedAutomigrations.length>0?taskLog.error(`${failedAutomigrations.length} automigration ${failedAutomigrations.length>1?"checks":"check"} failed`):taskLog.success(`${applicableAutomigrations.length===0?"No automigrations detected":`${applicableAutomigrations.length} automigration(s) detected`}`),allAutomigrations}var formatProjectDirs=list=>{let relativeDirs=list.filter(p=>p.status==="check_succeeded").map(p=>shortenPath(p.project.configDir)||".");if(relativeDirs.length<=1)return relativeDirs.join(", ");let remaining=relativeDirs.length-1;return`${relativeDirs.slice(0,1).join(", ")}${remaining>0?` and ${remaining} more...`:""}`};async function promptForAutomigrations(automigrations,options){if(automigrations.length===0)return[];if(options.dryRun)return import_node_logger22.logger.log("Detected automigrations (dry run - no changes will be made):"),automigrations.forEach(({fix,reports:list})=>{import_node_logger22.logger.log(` - ${fix.id} (${formatProjectDirs(list)})`)}),[];if(options.yes)return import_node_logger22.logger.log("Running all detected automigrations:"),automigrations.forEach(({fix,reports:list})=>{import_node_logger22.logger.log(` - ${fix.id} (${formatProjectDirs(list)})`)}),automigrations;let choices=automigrations.map(am=>{let hint=[];hint.push(`${am.fix.prompt()}`),am.fix.link&&hint.push(`More info: ${am.fix.link}`);let label=am.reports.length>1?`${am.fix.id} (${formatProjectDirs(am.reports)})`:am.fix.id;return{value:am.fix.id,label,hint:hint.join(`
276
- `)}}),selectedIds=await import_node_logger22.prompt.multiselect({message:"Select automigrations to run",options:choices,initialValues:choices.map(c=>c.value)});return automigrations.filter(am=>selectedIds.includes(am.fix.id))}async function runAutomigrationsForProjects(selectedAutomigrations,options){let{dryRun,skipInstall,automigrations}=options,projectResults={},applicableAutomigrations=selectedAutomigrations.filter(am=>am.reports.every(rep=>rep.status!=="not_applicable")),projectAutomigrationResults=new Map;for(let automigration of automigrations)for(let report of automigration.reports){let{project,result,status}=report,existing=projectAutomigrationResults.get(project.configDir)||[];existing.length>0?existing.push({fix:automigration.fix,project,result,status}):projectAutomigrationResults.set(project.configDir,[{fix:automigration.fix,project,result,status}])}let projectIndex=0;for(let[configDir,projectAutomigration]of projectAutomigrationResults){let countPrefix=projectAutomigrationResults.size>1?`(${++projectIndex}/${projectAutomigrationResults.size}) `:"",{project}=projectAutomigration[0],projectName=shortenPath(project.configDir),taskLog=applicableAutomigrations.length>0?import_node_logger22.prompt.taskLog({id:`automigrate-${projectName}`,title:`${countPrefix}Running automigrations for ${projectName}`}):{message:message=>{import_node_logger22.logger.debug(`${message}`)},error:message=>{import_node_logger22.logger.debug(`${message}`)},success:message=>{import_node_logger22.logger.debug(`${message}`)}},fixResults={};for(let automigration of projectAutomigration){let{fix,result,project:project2,status}=automigration;if(status==="not_applicable"){fixResults[fix.id]="unnecessary";continue}if(status==="check_failed"){fixResults[fix.id]="check_failed";continue}if(!selectedAutomigrations.some(am=>am.fix.id===fix.id&&am.reports.some(report=>report.project.configDir===project2.configDir))){fixResults[fix.id]="skipped";continue}try{if(typeof fix.run=="function"){let runOptions={packageManager:project2.packageManager,result,dryRun,mainConfigPath:project2.mainConfigPath,previewConfigPath:project2.previewConfigPath,mainConfig:project2.mainConfig,configDir:project2.configDir,skipInstall,storybookVersion:project2.storybookVersion,storiesPaths:project2.storiesPaths};await fix.run(runOptions),fixResults[fix.id]="succeeded",taskLog.message(import_node_logger22.CLI_COLORS.success(`${import_node_logger22.logger.SYMBOLS.success} ${fix.id}`))}}catch(error){fixResults[fix.id]="failed",taskLog.message(import_node_logger22.CLI_COLORS.error(`${import_node_logger22.logger.SYMBOLS.error} ${automigration.fix.id}`)),import_node_logger22.logger.debug(`${error instanceof Error?error.stack:String(error)}`)}}let automigrationsWithErrors=Object.values(fixResults).filter(status=>status==="failed");if(automigrationsWithErrors.length>0){let count=automigrationsWithErrors.length;taskLog.error(`${countPrefix}${count} automigrations failed for ${projectName}`)}else taskLog.success(`${countPrefix}Completed automigrations for ${projectName}`);projectResults[configDir]=fixResults}return projectResults}async function runAutomigrations(projects,options){let projectAutomigrationData=projects.map(project=>({configDir:project.configDir,packageManager:project.packageManager,mainConfig:project.mainConfig,mainConfigPath:project.mainConfigPath,previewConfigPath:project.previewConfigPath,storybookVersion:project.currentCLIVersion,beforeVersion:project.beforeVersion,storiesPaths:project.storiesPaths})),detectingAutomigrationTask=import_node_logger22.prompt.taskLog({id:"detect-automigrations",title:projectAutomigrationData.length>1?`Detecting automigrations for ${projectAutomigrationData.length} projects...`:"Detecting automigrations..."}),detectedAutomigrations=await collectAutomigrationsAcrossProjects({fixes:allFixes,projects:projectAutomigrationData,dryRun:options.dryRun,yes:options.yes,skipInstall:options.skipInstall,taskLog:detectingAutomigrationTask}),successfulAutomigrations=detectedAutomigrations.filter(am=>am.reports.some(report=>report.status==="check_succeeded")),selectedAutomigrations=await promptForAutomigrations(successfulAutomigrations,{dryRun:options.dryRun,yes:options.yes}),automigrationResults=await runAutomigrationsForProjects(selectedAutomigrations,{automigrations:detectedAutomigrations,dryRun:options.dryRun,yes:options.yes,skipInstall:options.skipInstall});return Object.entries(automigrationResults).forEach(([configDir,fixResults])=>{if(fixResults[rnstorybookConfig.id]==="succeeded"){let project=projects.find(p=>p.configDir===configDir);if(project){let oldConfigDir=project.configDir;project.configDir=project.configDir.replace(".storybook",".rnstorybook"),automigrationResults[project.configDir]=fixResults,delete automigrationResults[oldConfigDir]}}}),{detectedAutomigrations,automigrationResults}}init_util();function getUpgradeResults(projectResults,doctorResults){let successfulProjects=[],failedProjects=[],projectsWithNoFixes=[];return{allProjects:Object.entries(projectResults).map(([configDir,fixResults])=>{let automigrationResults=Object.entries(fixResults).map(([fixId,status])=>{let succeeded=status==="succeeded"||status==="manual_succeeded";return{fixId,status,succeeded}}),hasFailures2=automigrationResults.some(fix=>fix.status==="failed"||fix.status==="check_failed"),hasSuccessfulFixes=automigrationResults.some(fix=>fix.status==="succeeded"||fix.status==="manual_succeeded"),noFixesNeeded=Object.keys(fixResults).length===0,migratedSuccessfully=hasSuccessfulFixes&&!hasFailures2,hasDoctorReport=!!doctorResults[configDir];return hasFailures2?failedProjects.push(configDir):migratedSuccessfully?successfulProjects.push(configDir):noFixesNeeded&&projectsWithNoFixes.push(configDir),{configDir,migratedSuccessfully,hasDoctorReport,automigrations:{fixes:automigrationResults,noFixesNeeded,hasFailures:hasFailures2,hasSuccessfulFixes},doctor:doctorResults[configDir]?{status:doctorResults[configDir].status,isHealthy:doctorResults[configDir].status==="healthy"}:null}}),successfulProjects,failedProjects,projectsWithNoFixes}}function logUpgradeResults(projectResults,detectedAutomigrations,doctorResults){let{successfulProjects,failedProjects,projectsWithNoFixes}=getUpgradeResults(projectResults,doctorResults);if(failedProjects.length>0){if(import_node_logger23.logTracker.enableLogWriting(),import_node_logger23.logger.step("The upgrade is complete, but some projects failed to upgrade or migrate completely. Please see the debug logs for more details."),successfulProjects.length>0){let successfulProjectsList=successfulProjects.map(dir=>` \u2022 ${shortenPath(dir)}`).join(`
276
+ `),defaultSelected:am.fix.defaultSelected??!0}}),selectedIds=await import_node_logger22.prompt.multiselect({message:"Select automigrations to run",options:choices,initialValues:choices.filter(c=>c.defaultSelected).map(c=>c.value)});return automigrations.filter(am=>selectedIds.includes(am.fix.id))}async function runAutomigrationsForProjects(selectedAutomigrations,options){let{dryRun,skipInstall,automigrations}=options,projectResults={},applicableAutomigrations=selectedAutomigrations.filter(am=>am.reports.every(rep=>rep.status!=="not_applicable")),projectAutomigrationResults=new Map;for(let automigration of automigrations)for(let report of automigration.reports){let{project,result,status}=report,existing=projectAutomigrationResults.get(project.configDir)||[];existing.length>0?existing.push({fix:automigration.fix,project,result,status}):projectAutomigrationResults.set(project.configDir,[{fix:automigration.fix,project,result,status}])}let projectIndex=0;for(let[configDir,projectAutomigration]of projectAutomigrationResults){let countPrefix=projectAutomigrationResults.size>1?`(${++projectIndex}/${projectAutomigrationResults.size}) `:"",{project}=projectAutomigration[0],projectName=shortenPath(project.configDir),taskLog=applicableAutomigrations.length>0?import_node_logger22.prompt.taskLog({id:`automigrate-${projectName}`,title:`${countPrefix}Running automigrations for ${projectName}`}):{message:message=>{import_node_logger22.logger.debug(`${message}`)},error:message=>{import_node_logger22.logger.debug(`${message}`)},success:message=>{import_node_logger22.logger.debug(`${message}`)}},fixResults={},fixFailures={};for(let automigration of projectAutomigration){let{fix,result,project:project2,status}=automigration;if(status==="not_applicable"){fixResults[fix.id]="unnecessary";continue}if(status==="check_failed"){fixResults[fix.id]="check_failed";continue}if(!selectedAutomigrations.some(am=>am.fix.id===fix.id&&am.reports.some(report=>report.project.configDir===project2.configDir))){fixResults[fix.id]="skipped";continue}try{if(typeof fix.run=="function"){let runOptions={packageManager:project2.packageManager,result,dryRun,mainConfigPath:project2.mainConfigPath,previewConfigPath:project2.previewConfigPath,mainConfig:project2.mainConfig,configDir:project2.configDir,skipInstall,storybookVersion:project2.storybookVersion,storiesPaths:project2.storiesPaths};await fix.run(runOptions),fixResults[fix.id]="succeeded",taskLog.message(import_node_logger22.CLI_COLORS.success(`${import_node_logger22.logger.SYMBOLS.success} ${fix.id}`))}}catch(error){let errorMessage=(error instanceof Error?error.stack:String(error))??"Unknown error";fixResults[fix.id]="failed",fixFailures[fix.id]=(0,import_telemetry.sanitizeError)(error),taskLog.message(import_node_logger22.CLI_COLORS.error(`${import_node_logger22.logger.SYMBOLS.error} ${automigration.fix.id}`)),import_node_logger22.logger.debug(errorMessage)}}let automigrationsWithErrors=Object.values(fixResults).filter(status=>status==="failed");if(automigrationsWithErrors.length>0){let count=automigrationsWithErrors.length;taskLog.error(`${countPrefix}${count} automigrations failed for ${projectName}`)}else taskLog.success(`${countPrefix}Completed automigrations for ${projectName}`);projectResults[configDir]={automigrationStatuses:fixResults,automigrationErrors:fixFailures}}return projectResults}async function runAutomigrations(projects,options){let projectAutomigrationData=projects.map(project=>({configDir:project.configDir,packageManager:project.packageManager,mainConfig:project.mainConfig,mainConfigPath:project.mainConfigPath,previewConfigPath:project.previewConfigPath,storybookVersion:project.currentCLIVersion,beforeVersion:project.beforeVersion,storiesPaths:project.storiesPaths})),detectingAutomigrationTask=import_node_logger22.prompt.taskLog({id:"detect-automigrations",title:projectAutomigrationData.length>1?`Detecting automigrations for ${projectAutomigrationData.length} projects...`:"Detecting automigrations..."}),detectedAutomigrations=await collectAutomigrationsAcrossProjects({fixes:allFixes,projects:projectAutomigrationData,dryRun:options.dryRun,yes:options.yes,skipInstall:options.skipInstall,taskLog:detectingAutomigrationTask}),successfulAutomigrations=detectedAutomigrations.filter(am=>am.reports.some(report=>report.status==="check_succeeded")),selectedAutomigrations=await promptForAutomigrations(successfulAutomigrations,{dryRun:options.dryRun,yes:options.yes}),automigrationResults=await runAutomigrationsForProjects(selectedAutomigrations,{automigrations:detectedAutomigrations,dryRun:options.dryRun,yes:options.yes,skipInstall:options.skipInstall});return Object.entries(automigrationResults).forEach(([configDir,resultData])=>{if(resultData.automigrationStatuses[rnstorybookConfig.id]==="succeeded"){let project=projects.find(p=>p.configDir===configDir);if(project){let oldConfigDir=project.configDir;project.configDir=project.configDir.replace(".storybook",".rnstorybook"),automigrationResults[project.configDir]=resultData,delete automigrationResults[oldConfigDir]}}}),{detectedAutomigrations,automigrationResults}}init_util();function getUpgradeResults(projectResults,doctorResults){let successfulProjects=[],failedProjects=[],projectsWithNoFixes=[];return{allProjects:Object.entries(projectResults).map(([configDir,resultData])=>{let automigrationResults=Object.entries(resultData.automigrationStatuses).map(([fixId,status])=>{let succeeded=status==="succeeded"||status==="manual_succeeded";return{fixId,status,succeeded}}),hasFailures2=automigrationResults.some(fix=>fix.status==="failed"||fix.status==="check_failed"),hasSuccessfulFixes=automigrationResults.some(fix=>fix.status==="succeeded"||fix.status==="manual_succeeded"),noFixesNeeded=Object.keys(resultData.automigrationStatuses).length===0,migratedSuccessfully=hasSuccessfulFixes&&!hasFailures2,hasDoctorReport=!!doctorResults[configDir];return hasFailures2?failedProjects.push(configDir):migratedSuccessfully?successfulProjects.push(configDir):noFixesNeeded&&projectsWithNoFixes.push(configDir),{configDir,migratedSuccessfully,hasDoctorReport,automigrations:{fixes:automigrationResults,noFixesNeeded,hasFailures:hasFailures2,hasSuccessfulFixes},doctor:doctorResults[configDir]?{status:doctorResults[configDir].status,isHealthy:doctorResults[configDir].status==="healthy"}:null}}),successfulProjects,failedProjects,projectsWithNoFixes}}function logUpgradeResults(projectResults,detectedAutomigrations,doctorResults){let{successfulProjects,failedProjects,projectsWithNoFixes}=getUpgradeResults(projectResults,doctorResults);if(failedProjects.length>0){if(import_node_logger23.logTracker.enableLogWriting(),import_node_logger23.logger.step("The upgrade is complete, but some projects failed to upgrade or migrate completely. Please see the debug logs for more details."),successfulProjects.length>0){let successfulProjectsList=successfulProjects.map(dir=>` \u2022 ${shortenPath(dir)}`).join(`
277
277
  `);import_node_logger23.logger.log(`${import_node_logger23.CLI_COLORS.success("Successfully upgraded:")}
278
278
  ${successfulProjectsList}`)}let failedProjectsList=failedProjects.map(dir=>` \u2022 ${shortenPath(dir)}`).join(`
279
279
  `);if(import_node_logger23.logger.log(`${import_node_logger23.CLI_COLORS.error("Failed to upgrade:")}
280
280
  Some automigrations failed, please check the logs in the log file for more details.
281
281
  ${failedProjectsList}`),projectsWithNoFixes.length>0){let projectList=projectsWithNoFixes.map(dir=>` \u2022 ${shortenPath(dir)}`).join(`
282
282
  `);import_node_logger23.logger.log(`${import_node_logger23.CLI_COLORS.info("No applicable migrations:")}
283
- ${projectList}`)}}else import_node_logger23.logger.step("The upgrade is complete!"),Object.values(doctorResults).every(result=>result.status==="healthy")?import_node_logger23.logger.log(`${import_node_logger23.CLI_COLORS.success("Your project(s) have been upgraded successfully! \u{1F389}")}`):import_node_logger23.logger.log(`${import_picocolors18.default.yellow("Your project(s) have been upgraded successfully, but some issues were found which need your attention, please check Storybook doctor logs above.")}`);let automigrationLinks=detectedAutomigrations.filter(am=>Object.entries(projectResults).some(([_,fixResults])=>fixResults[am.fix.id]==="failed"||fixResults[am.fix.id]==="succeeded"||fixResults[am.fix.id]==="check_failed")).map(am=>`\u2022 ${(0,import_node_logger23.createHyperlink)(am.fix.id,am.fix.link)}`);if(automigrationLinks.length>0){let automigrationLinksMessage=[`If you want to learn more about the automigrations that executed in your project(s), please check the following links:
283
+ ${projectList}`)}}else import_node_logger23.logger.step("The upgrade is complete!"),Object.values(doctorResults).every(result=>result.status==="healthy")?import_node_logger23.logger.log(`${import_node_logger23.CLI_COLORS.success("Your project(s) have been upgraded successfully! \u{1F389}")}`):import_node_logger23.logger.log(`${import_picocolors18.default.yellow("Your project(s) have been upgraded successfully, but some issues were found which need your attention, please check Storybook doctor logs above.")}`);let automigrationLinks=detectedAutomigrations.filter(am=>Object.entries(projectResults).some(([_,resultData])=>resultData.automigrationStatuses[am.fix.id]==="failed"||resultData.automigrationStatuses[am.fix.id]==="succeeded"||resultData.automigrationStatuses[am.fix.id]==="check_failed")).map(am=>`\u2022 ${(0,import_node_logger23.createHyperlink)(am.fix.id,am.fix.link)}`);if(automigrationLinks.length>0){let automigrationLinksMessage=[`If you want to learn more about the automigrations that executed in your project(s), please check the following links:
284
284
  `,...automigrationLinks].join(`
285
- `);import_node_logger23.logger.log(automigrationLinksMessage)}import_node_logger23.logger.log(`For a full list of changes, please check our migration guide: ${import_node_logger23.CLI_COLORS.cta("https://storybook.js.org/docs/migration-guide")}`)}async function sendMultiUpgradeTelemetry(options){let{allProjects,selectedProjects,projectResults,doctorResults,hasUserInterrupted=!1}=options,{successfulProjects,failedProjects,projectsWithNoFixes}=getUpgradeResults(projectResults,doctorResults),processedProjects=new Set([...Object.keys(projectResults),...Object.keys(doctorResults)]),incompleteProjects=selectedProjects.map(p=>p.configDir).filter(configDir=>!processedProjects.has(configDir)),projectsWithDoctorReports=Object.values(doctorResults).filter(result=>result.status!=="healthy").length;try{await(0,import_telemetry.telemetry)("multi-upgrade",{totalDetectedProjects:allProjects.length,totalSelectedProjects:selectedProjects.length,projectsWithSuccessfulAutomigrations:successfulProjects.length,projectsWithFailedAutomigrations:failedProjects.length,projectsWithNoAutomigrations:projectsWithNoFixes.length,projectsWithDoctorReports,incompleteProjects:incompleteProjects.length,hasUserInterrupted})}catch(error){import_node_logger23.logger.debug(`Failed to send multi-upgrade telemetry: ${String(error)}`)}}async function upgrade(options){await(0,import_core_server2.withTelemetry)("upgrade",{cliOptions:{...options,configDir:options.configDir?.[0]}},async()=>{import_node_logger23.logger.intro(`Storybook Upgrade - ${import_picocolors18.default.bold(`v${import_common23.versions.storybook}`)}`);let projectsResult=await getProjects(options);if(projectsResult===void 0||projectsResult.selectedProjects.length===0)return;let{allProjects,selectedProjects:storybookProjects}=projectsResult;storybookProjects.length>1?import_node_logger23.logger.info(`Upgrading the following projects:
285
+ `);import_node_logger23.logger.log(automigrationLinksMessage)}import_node_logger23.logger.log(`For a full list of changes, please check our migration guide: ${import_node_logger23.CLI_COLORS.cta("https://storybook.js.org/docs/migration-guide")}`)}async function sendMultiUpgradeTelemetry(options){let{allProjects,selectedProjects,projectResults,doctorResults,hasUserInterrupted=!1}=options,{successfulProjects,failedProjects,projectsWithNoFixes}=getUpgradeResults(projectResults,doctorResults),processedProjects=new Set([...Object.keys(projectResults),...Object.keys(doctorResults)]),incompleteProjects=selectedProjects.map(p=>p.configDir).filter(configDir=>!processedProjects.has(configDir)),projectsWithDoctorReports=Object.values(doctorResults).filter(result=>result.status!=="healthy").length;try{await(0,import_telemetry2.telemetry)("multi-upgrade",{totalDetectedProjects:allProjects.length,totalSelectedProjects:selectedProjects.length,projectsWithSuccessfulAutomigrations:successfulProjects.length,projectsWithFailedAutomigrations:failedProjects.length,projectsWithNoAutomigrations:projectsWithNoFixes.length,projectsWithDoctorReports,incompleteProjects:incompleteProjects.length,hasUserInterrupted})}catch(error){import_node_logger23.logger.debug(`Failed to send multi-upgrade telemetry: ${String(error)}`)}}async function upgrade(options){await(0,import_core_server2.withTelemetry)("upgrade",{cliOptions:{...options,configDir:options.configDir?.[0]}},async()=>{import_node_logger23.logger.intro(`Storybook Upgrade - ${import_picocolors18.default.bold(`v${import_common23.versions.storybook}`)}`);let projectsResult=await getProjects(options);if(projectsResult===void 0||projectsResult.selectedProjects.length===0)return;let{allProjects,selectedProjects:storybookProjects}=projectsResult;storybookProjects.length>1?import_node_logger23.logger.info(`Upgrading the following projects:
286
286
  ${storybookProjects.map(p=>`${import_picocolors18.default.cyan(shortenPath(p.configDir))}: ${import_picocolors18.default.bold(p.beforeVersion)} -> ${import_picocolors18.default.bold(p.currentCLIVersion)}`).join(`
287
287
  `)}`):import_node_logger23.logger.info(`Upgrading from ${import_picocolors18.default.bold(storybookProjects[0].beforeVersion)} to ${import_picocolors18.default.bold(storybookProjects[0].currentCLIVersion)}`);let automigrationResults={},doctorResults={},handleInterruption=async()=>{throw import_node_logger23.logger.log(`
288
288
 
289
289
  Upgrade interrupted by user.`),allProjects.length>1&&await sendMultiUpgradeTelemetry({allProjects,selectedProjects:storybookProjects,projectResults:automigrationResults,doctorResults,hasUserInterrupted:!0}),new import_common24.HandledError("Upgrade cancelled by user")};process.on("SIGINT",handleInterruption),process.on("SIGTERM",handleInterruption);try{if(processAutoblockerResults(storybookProjects,message=>{import_node_logger23.logger.error(import_ts_dedent18.dedent`Blockers detected\n\n${message}`)}))throw new import_common24.HandledError("Blockers detected");if(storybookProjects.some(project=>{if(!project.isCanary&&(0,import_semver12.lt)(project.currentCLIVersion,project.beforeVersion))throw new import_server_errors2.UpgradeStorybookToLowerVersionError({beforeVersion:project.beforeVersion,currentVersion:project.currentCLIVersion});if(!project.beforeVersion)throw new import_server_errors2.UpgradeStorybookUnknownCurrentVersionError}),!options.dryRun){let task=import_node_logger23.prompt.taskLog({id:"upgrade-dependencies",title:"Fetching versions to update package.json files.."});try{let loggedPaths=[];for(let project of storybookProjects){import_node_logger23.logger.debug(`Updating dependencies in ${shortenPath(project.configDir)}...`);let newPaths=project.packageManager.packageJsonPaths.map(shortenPath).filter(path8=>!loggedPaths.includes(path8));newPaths.length>0&&(task.message(newPaths.join(`
290
- `)),loggedPaths.push(...newPaths)),await upgradeStorybookDependencies({packageManager:project.packageManager,isCanary:project.isCanary,isCLIOutdated:project.isCLIOutdated,isCLIPrerelease:project.isCLIPrerelease,isCLIExactLatest:project.isCLIExactLatest,isCLIExactPrerelease:project.isCLIExactPrerelease})}task.success("Updated package versions in package.json files")}catch(err){task.error(`Failed to upgrade dependencies: ${String(err)}`)}}let{automigrationResults:automigrationResults2,detectedAutomigrations}=await runAutomigrations(storybookProjects,options),rootPackageManager=storybookProjects.length>1?import_common24.JsPackageManagerFactory.getPackageManager({force:options.packageManager}):storybookProjects[0].packageManager;rootPackageManager.type==="npm"?await rootPackageManager.installDependencies({force:!0}):await rootPackageManager.installDependencies(),rootPackageManager.type!=="yarn1"&&rootPackageManager.isStorybookInMonorepo()&&(import_node_logger23.logger.warn("Since you are in a monorepo, we advise you to deduplicate your dependencies. We can do this for you but it might take some time."),options.yes||await import_node_logger23.prompt.confirm({message:`Execute ${rootPackageManager.getRunCommand("dedupe")}?`,initialValue:!0})?rootPackageManager.type==="npm"?await rootPackageManager.dedupeDependencies({force:!0}):await rootPackageManager.dedupeDependencies():import_node_logger23.logger.log(`If you find any issues running Storybook, you can run ${rootPackageManager.getRunCommand("dedupe")} manually to deduplicate your dependencies and try again.`));let doctorProjects=storybookProjects.map(project=>({configDir:project.configDir,packageManager:project.packageManager,storybookVersion:project.currentCLIVersion,mainConfig:project.mainConfig}));if(import_node_logger23.logger.step("Checking the health of your project(s).."),doctorResults=await runMultiProjectDoctor(doctorProjects),displayDoctorResults(doctorResults)&&import_node_logger23.logTracker.enableLogWriting(),logUpgradeResults(automigrationResults2,detectedAutomigrations,doctorResults),!options.disableTelemetry){for(let project of storybookProjects){let fixResults=automigrationResults2[project.configDir]||{},doctorFailureCount=0,doctorErrorCount=0;Object.values(doctorResults[project.configDir]?.diagnostics||{}).forEach(status=>{status==="has_issues"&&doctorFailureCount++,status==="check_error"&&doctorErrorCount++});let automigrationFailureCount=Object.values(fixResults).filter(status=>status==="failed").length,automigrationPreCheckFailure=project.autoblockerCheckResults&&project.autoblockerCheckResults.length>0?project.autoblockerCheckResults?.map(result=>result.result!==null?result.blocker.id:null).filter(Boolean):null;await(0,import_telemetry.telemetry)("upgrade",{beforeVersion:project.beforeVersion,afterVersion:project.currentCLIVersion,automigrationResults:fixResults,automigrationFailureCount,automigrationPreCheckFailure,doctorResults:doctorResults[project.configDir]?.diagnostics||{},doctorFailureCount,doctorErrorCount})}await sendMultiUpgradeTelemetry({allProjects,selectedProjects:storybookProjects,projectResults:automigrationResults2,doctorResults})}}finally{process.removeListener("SIGINT",handleInterruption),process.removeListener("SIGTERM",handleInterruption)}})}(0,import_telemetry2.addToGlobalContext)("cliVersion",import_common25.versions.storybook);var handleCommandFailure=async error=>{error instanceof import_common25.HandledError||import_node_logger24.logger.error(String(error));let logFile=await import_node_logger24.logTracker.writeToFile();import_node_logger24.logger.log(`Storybook debug logs can be found at: ${logFile}`),import_node_logger24.logger.outro(""),process.exit(1)},command=name=>import_commander.program.command(name).option("--disable-telemetry","Disable sending telemetry data",process.env.STORYBOOK_DISABLE_TELEMETRY&&process.env.STORYBOOK_DISABLE_TELEMETRY!=="false").option("--debug","Get more logs in debug mode",!1).option("--enable-crash-reports","Enable sending crash reports to telemetry data").option("--write-logs","Write all debug logs to a file at the end of the run").option("--loglevel <trace | debug | info | warn | error | silent>","Define log level","info").hook("preAction",async self2=>{try{let options=self2.opts();options.loglevel&&import_node_logger24.logger.setLogLevel(options.loglevel),options.writeLogs&&import_node_logger24.logTracker.enableLogWriting(),await(0,import_cli3.globalSettings)()}catch(e){import_node_logger24.logger.error(`Error loading global settings:
291
- `+String(e))}}).hook("postAction",async()=>{if(import_node_logger24.logTracker.shouldWriteLogsToFile){let logFile=await import_node_logger24.logTracker.writeToFile();import_node_logger24.logger.log(`Storybook debug logs can be found at: ${logFile}`),import_node_logger24.logger.outro(import_node_logger24.CLI_COLORS.success("Done!"))}});command("init").description("Initialize Storybook into your project").option("-f --force","Force add Storybook").option("-s --skip-install","Skip installing deps").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing deps").option("--use-pnp","Enable PnP mode for Yarn 2+").option("-p --parser <babel | babylon | flow | ts | tsx>","jscodeshift parser").option("-t --type <type>","Add Storybook for a specific project type").option("-y --yes","Answer yes to all prompts").option("-b --builder <webpack5 | vite>","Builder library").option("-l --linkable","Prepare installation for link (contributor helper)").option("--dev","Launch the development server after completing initialization. Enabled by default (default: true)",process.env.CI!=="true"&&process.env.IN_STORYBOOK_SANDBOX!=="true").option("--no-dev","Complete the initialization of Storybook without launching the Storybook development server");command("add <addon>").description("Add an addon to your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager for installing dependencies").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("--skip-install","Skip installing deps").option("-s --skip-postinstall","Skip package specific postinstall config modifications").option("-y --yes","Skip prompting the user").option("--skip-doctor","Skip doctor check").action((addonName,options)=>add(addonName,options));command("remove <addon>").description("Remove an addon from your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager for installing dependencies").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("-s --skip-install","Skip installing deps").action((addonName,options)=>(0,import_core_server3.withTelemetry)("remove",{cliOptions:options},async()=>{let packageManager=import_common25.JsPackageManagerFactory.getPackageManager({configDir:options.configDir,force:options.packageManager});await(0,import_common25.removeAddon)(addonName,{configDir:options.configDir,packageManager,skipInstall:options.skipInstall}),options.disableTelemetry||await(0,import_telemetry2.telemetry)("remove",{addon:addonName,source:"cli"})}));command("upgrade").description(`Upgrade your Storybook packages to v${import_common25.versions.storybook}`).option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager for installing dependencies").option("-y --yes","Skip prompting the user").option("-f --force","force the upgrade, skipping autoblockers").option("-n --dry-run","Only check for upgrades, do not install").option("-s --skip-check","Skip postinstall version and automigration checks").option("-c, --config-dir <dir-name...>","Directory(ies) where to load Storybook configurations from").action(async options=>{import_node_logger24.prompt.setPromptLibrary("clack"),await upgrade(options).catch(handleCommandFailure)});command("info").description("Prints debugging information about the local environment").action(async()=>{import_node_logger24.logger.log(import_picocolors19.default.bold(`
292
- Storybook Environment Info:`));let activePackageManager=import_common25.JsPackageManagerFactory.getPackageManager().type.replace(/\d/,""),output=await import_envinfo.default.run({System:["OS","CPU","Shell"],Binaries:["Node","Yarn","npm","pnpm"],Browsers:["Chrome","Edge","Firefox","Safari"],npmPackages:"{@storybook/*,*storybook*,sb,chromatic}",npmGlobalPackages:"{@storybook/*,*storybook*,sb,chromatic}"}),activePackageManagerLine=output.match(new RegExp(`${activePackageManager}:.*`,"i"));import_node_logger24.logger.log(output.replace(activePackageManagerLine,import_picocolors19.default.bold(`${activePackageManagerLine} <----- active`)))});command("migrate [migration]").description("Run a Storybook codemod migration on your source files").option("-l --list","List available migrations").option("-g --glob <glob>","Glob for files upon which to apply the migration","**/*.js").option("-p --parser <babel | babylon | flow | ts | tsx>","jscodeshift parser").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("-n --dry-run","Dry run: verify the migration exists and show the files to which it will be applied").option("-r --rename <from-to>",'Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts"').action((migration,{configDir,glob,dryRun,list,rename:rename2,parser})=>{migrate(migration,{configDir,glob,dryRun,list,rename:rename2,parser}).catch(handleCommandFailure)});command("sandbox [filterValue]").alias("repro").description("Create a sandbox from a set of possible templates").option("-o --output <outDir>","Define an output directory").option("--no-init","Whether to download a template without an initialized Storybook",!1).action((filterValue,options)=>sandbox({filterValue,...options}).catch(handleCommandFailure));command("link <repo-url-or-directory>").description("Pull down a repro from a URL (or a local directory), link it, and run storybook").option("--local","Link a local directory already in your file system").option("--no-start","Start the storybook",!0).action((target,{local,start})=>link({target,local,start}).catch(handleCommandFailure));command("automigrate [fixId]").description("Check storybook for incompatibilities or migrations and apply fixes").option("-y --yes","Skip prompting the user").option("-n --dry-run","Only check for fixes, do not actually run them").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager").option("-l --list","List available migrations").option("-c, --config-dir <dir-name>","Directory of Storybook configurations to migrate").option("-s --skip-install","Skip installing deps").option("--renderer <renderer-pkg-name>","The renderer package for the framework Storybook is using.").option("--skip-doctor","Skip doctor check").action(async(fixId,options)=>{await doAutomigrate({fixId,...options}).catch(handleCommandFailure)});command("doctor").description("Check Storybook for known problems and provide suggestions or fixes").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager").option("-c, --config-dir <dir-name>","Directory of Storybook configuration").action(async options=>{await doctor(options).catch(handleCommandFailure)});import_commander.program.on("command:*",([invalidCmd])=>{let errorMessage=` Invalid command: ${import_picocolors19.default.bold(invalidCmd)}.
290
+ `)),loggedPaths.push(...newPaths)),await upgradeStorybookDependencies({packageManager:project.packageManager,isCanary:project.isCanary,isCLIOutdated:project.isCLIOutdated,isCLIPrerelease:project.isCLIPrerelease,isCLIExactLatest:project.isCLIExactLatest,isCLIExactPrerelease:project.isCLIExactPrerelease})}task.success("Updated package versions in package.json files")}catch(err){task.error(`Failed to upgrade dependencies: ${String(err)}`)}}let{automigrationResults:automigrationResults2,detectedAutomigrations}=await runAutomigrations(storybookProjects,options),rootPackageManager=storybookProjects.length>1?import_common24.JsPackageManagerFactory.getPackageManager({force:options.packageManager}):storybookProjects[0].packageManager;rootPackageManager.type==="npm"?await rootPackageManager.installDependencies({force:!0}):await rootPackageManager.installDependencies(),rootPackageManager.type!=="yarn1"&&rootPackageManager.isStorybookInMonorepo()&&(import_node_logger23.logger.warn("Since you are in a monorepo, we advise you to deduplicate your dependencies. We can do this for you but it might take some time."),options.yes||await import_node_logger23.prompt.confirm({message:`Execute ${rootPackageManager.getRunCommand("dedupe")}?`,initialValue:!0})?rootPackageManager.type==="npm"?await rootPackageManager.dedupeDependencies({force:!0}):await rootPackageManager.dedupeDependencies():import_node_logger23.logger.log(`If you find any issues running Storybook, you can run ${rootPackageManager.getRunCommand("dedupe")} manually to deduplicate your dependencies and try again.`));let doctorProjects=storybookProjects.map(project=>({configDir:project.configDir,packageManager:project.packageManager,storybookVersion:project.currentCLIVersion,mainConfig:project.mainConfig}));if(import_node_logger23.logger.step("Checking the health of your project(s).."),doctorResults=await runMultiProjectDoctor(doctorProjects),displayDoctorResults(doctorResults)&&import_node_logger23.logTracker.enableLogWriting(),logUpgradeResults(automigrationResults2,detectedAutomigrations,doctorResults),!options.disableTelemetry){for(let project of storybookProjects){let resultData=automigrationResults2[project.configDir]||{automigrationStatuses:{},automigrationErrors:{}},doctorFailureCount=0,doctorErrorCount=0;Object.values(doctorResults[project.configDir]?.diagnostics||{}).forEach(status=>{status==="has_issues"&&doctorFailureCount++,status==="check_error"&&doctorErrorCount++});let automigrationFailureCount=Object.keys(resultData.automigrationErrors).length,automigrationPreCheckFailure=project.autoblockerCheckResults&&project.autoblockerCheckResults.length>0?project.autoblockerCheckResults?.map(result=>result.result!==null?result.blocker.id:null).filter(Boolean):null;await(0,import_telemetry2.telemetry)("upgrade",{beforeVersion:project.beforeVersion,afterVersion:project.currentCLIVersion,automigrationResults:resultData.automigrationStatuses,automigrationErrors:resultData.automigrationErrors,automigrationFailureCount,automigrationPreCheckFailure,doctorResults:doctorResults[project.configDir]?.diagnostics||{},doctorFailureCount,doctorErrorCount})}await sendMultiUpgradeTelemetry({allProjects,selectedProjects:storybookProjects,projectResults:automigrationResults2,doctorResults})}}finally{process.removeListener("SIGINT",handleInterruption),process.removeListener("SIGTERM",handleInterruption)}})}(0,import_telemetry3.addToGlobalContext)("cliVersion",import_common25.versions.storybook);var handleCommandFailure=async error=>{error instanceof import_common25.HandledError||import_node_logger24.logger.error(String(error));let logFile=await import_node_logger24.logTracker.writeToFile();import_node_logger24.logger.log(`Storybook debug logs can be found at: ${logFile}`),import_node_logger24.logger.outro(""),process.exit(1)},command=name=>import_commander.program.command(name).option("--disable-telemetry","Disable sending telemetry data",process.env.STORYBOOK_DISABLE_TELEMETRY&&process.env.STORYBOOK_DISABLE_TELEMETRY!=="false").option("--debug","Get more logs in debug mode",!1).option("--enable-crash-reports","Enable sending crash reports to telemetry data").option("--write-logs","Write all debug logs to a file at the end of the run").option("--loglevel <trace | debug | info | warn | error | silent>","Define log level","info").hook("preAction",async self2=>{try{let options=self2.opts();options.loglevel&&import_node_logger24.logger.setLogLevel(options.loglevel),options.writeLogs&&import_node_logger24.logTracker.enableLogWriting(),await(0,import_cli3.globalSettings)()}catch(e){import_node_logger24.logger.error(`Error loading global settings:
291
+ `+String(e))}}).hook("postAction",async()=>{if(import_node_logger24.logTracker.shouldWriteLogsToFile){let logFile=await import_node_logger24.logTracker.writeToFile();import_node_logger24.logger.log(`Storybook debug logs can be found at: ${logFile}`),import_node_logger24.logger.outro(import_node_logger24.CLI_COLORS.success("Done!"))}});command("init").description("Initialize Storybook into your project").option("-f --force","Force add Storybook").option("-s --skip-install","Skip installing deps").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing deps").option("--use-pnp","Enable PnP mode for Yarn 2+").option("-p --parser <babel | babylon | flow | ts | tsx>","jscodeshift parser").option("-t --type <type>","Add Storybook for a specific project type").option("-y --yes","Answer yes to all prompts").option("-b --builder <webpack5 | vite>","Builder library").option("-l --linkable","Prepare installation for link (contributor helper)").option("--dev","Launch the development server after completing initialization. Enabled by default (default: true)",process.env.CI!=="true"&&process.env.IN_STORYBOOK_SANDBOX!=="true").option("--no-dev","Complete the initialization of Storybook without launching the Storybook development server");command("add <addon>").description("Add an addon to your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager for installing dependencies").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("--skip-install","Skip installing deps").option("-s --skip-postinstall","Skip package specific postinstall config modifications").option("-y --yes","Skip prompting the user").option("--skip-doctor","Skip doctor check").action((addonName,options)=>add(addonName,options));command("remove <addon>").description("Remove an addon from your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager for installing dependencies").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("-s --skip-install","Skip installing deps").action((addonName,options)=>(0,import_core_server3.withTelemetry)("remove",{cliOptions:options},async()=>{let packageManager=import_common25.JsPackageManagerFactory.getPackageManager({configDir:options.configDir,force:options.packageManager});await(0,import_common25.removeAddon)(addonName,{configDir:options.configDir,packageManager,skipInstall:options.skipInstall}),options.disableTelemetry||await(0,import_telemetry3.telemetry)("remove",{addon:addonName,source:"cli"})}));command("upgrade").description(`Upgrade your Storybook packages to v${import_common25.versions.storybook}`).option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager for installing dependencies").option("-y --yes","Skip prompting the user").option("-f --force","force the upgrade, skipping autoblockers").option("-n --dry-run","Only check for upgrades, do not install").option("-s --skip-check","Skip postinstall version and automigration checks").option("-c, --config-dir <dir-name...>","Directory(ies) where to load Storybook configurations from").action(async options=>{import_node_logger24.prompt.setPromptLibrary("clack"),await upgrade(options).catch(handleCommandFailure)});command("info").description("Prints debugging information about the local environment").action(async()=>{import_node_logger24.logger.log(import_picocolors19.default.bold(`
292
+ Storybook Environment Info:`));let activePackageManager=import_common25.JsPackageManagerFactory.getPackageManager().type.replace(/\d/,""),output=await import_envinfo.default.run({System:["OS","CPU","Shell"],Binaries:["Node","Yarn","npm","pnpm"],Browsers:["Chrome","Edge","Firefox","Safari"],npmPackages:"{@storybook/*,*storybook*,sb,chromatic}",npmGlobalPackages:"{@storybook/*,*storybook*,sb,chromatic}"}),activePackageManagerLine=output.match(new RegExp(`${activePackageManager}:.*`,"i"));import_node_logger24.logger.log(output.replace(activePackageManagerLine,import_picocolors19.default.bold(`${activePackageManagerLine} <----- active`)))});command("migrate [migration]").description("Run a Storybook codemod migration on your source files").option("-l --list","List available migrations").option("-g --glob <glob>","Glob for files upon which to apply the migration","**/*.js").option("-p --parser <babel | babylon | flow | ts | tsx>","jscodeshift parser").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("-n --dry-run","Dry run: verify the migration exists and show the files to which it will be applied").option("-r --rename <from-to>",'Rename suffix of matching files after codemod has been applied, e.g. ".js:.ts"').action((migration,{configDir,glob,dryRun,list,rename:rename2,parser})=>{migrate(migration,{configDir,glob,dryRun,list,rename:rename2,parser}).catch(handleCommandFailure)});command("sandbox [filterValue]").alias("repro").description("Create a sandbox from a set of possible templates").option("-o --output <outDir>","Define an output directory").option("--no-init","Whether to download a template without an initialized Storybook",!1).action((filterValue,options)=>sandbox({filterValue,...options}).catch(handleCommandFailure));command("link <repo-url-or-directory>").description("Pull down a repro from a URL (or a local directory), link it, and run storybook").option("--local","Link a local directory already in your file system").option("--no-start","Start the storybook",!0).action((target,{local,start})=>link({target,local,start}).catch(handleCommandFailure));command("automigrate [fixId]").description("Check storybook for incompatibilities or migrations and apply fixes").option("-y --yes","Skip prompting the user").option("-n --dry-run","Only check for fixes, do not actually run them").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager").option("-l --list","List available migrations").option("-c, --config-dir <dir-name>","Directory of Storybook configurations to migrate").option("-s --skip-install","Skip installing deps").option("--renderer <renderer-pkg-name>","The renderer package for the framework Storybook is using.").option("--skip-doctor","Skip doctor check").action(async(fixId,options)=>{import_node_logger24.prompt.setPromptLibrary("clack"),await doAutomigrate({fixId,...options}).catch(handleCommandFailure)});command("doctor").description("Check Storybook for known problems and provide suggestions or fixes").option("--package-manager <npm|pnpm|yarn1|yarn2|bun>","Force package manager").option("-c, --config-dir <dir-name>","Directory of Storybook configuration").action(async options=>{await doctor(options).catch(handleCommandFailure)});import_commander.program.on("command:*",([invalidCmd])=>{let errorMessage=` Invalid command: ${import_picocolors19.default.bold(invalidCmd)}.
293
293
  See --help for a list of available commands.`,suggestion=import_commander.program.commands.map(cmd=>cmd.name()).find(cmd=>leven(cmd,invalidCmd)<3);suggestion&&(errorMessage+=`
294
294
  Did you mean ${import_picocolors19.default.yellow(suggestion)}?`),import_node_logger24.logger.error(errorMessage),process.exit(1)});import_commander.program.usage("<command> [options]").version(String(version)).parse(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/cli",
3
- "version": "9.1.0-alpha.9",
3
+ "version": "9.1.0-beta.0",
4
4
  "description": "Storybook CLI",
5
5
  "keywords": [
6
6
  "storybook"
@@ -41,13 +41,13 @@
41
41
  "prep": "jiti ../../../scripts/prepare/bundle.ts"
42
42
  },
43
43
  "dependencies": {
44
- "@storybook/codemod": "9.1.0-alpha.9",
44
+ "@storybook/codemod": "9.1.0-beta.0",
45
45
  "@types/semver": "^7.3.4",
46
46
  "commander": "^12.1.0",
47
- "create-storybook": "9.1.0-alpha.9",
47
+ "create-storybook": "9.1.0-beta.0",
48
48
  "giget": "^1.0.0",
49
49
  "jscodeshift": "^0.15.1",
50
- "storybook": "9.1.0-alpha.9",
50
+ "storybook": "9.1.0-beta.0",
51
51
  "ts-dedent": "^2.0.0"
52
52
  },
53
53
  "devDependencies": {