@storybook/cli 9.1.0-alpha.2 → 9.1.0-alpha.4
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.
- package/dist/bin/index.cjs +8 -8
- package/package.json +4 -4
package/dist/bin/index.cjs
CHANGED
|
@@ -103,14 +103,14 @@
|
|
|
103
103
|
2. Upgrade to ${import_picocolors33.default.bold("Vitest 3")} to continue using the addon
|
|
104
104
|
|
|
105
105
|
After addressing this, you can try running the upgrade command again.
|
|
106
|
-
`}}}});var import_cli5=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger4=require("storybook/internal/node-logger"),import_telemetry2=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require("envinfo"),1),import_leven=__toESM(require("leven"),1),import_picocolors36=__toESM(require_picocolors(),1);var version="9.1.0-alpha.
|
|
106
|
+
`}}}});var import_cli5=require("storybook/internal/cli"),import_common25=require("storybook/internal/common"),import_core_server2=require("storybook/internal/core-server"),import_node_logger4=require("storybook/internal/node-logger"),import_telemetry2=require("storybook/internal/telemetry"),import_commander=require("commander"),import_envinfo=__toESM(require("envinfo"),1),import_leven=__toESM(require("leven"),1),import_picocolors36=__toESM(require_picocolors(),1);var version="9.1.0-alpha.4";var import_node_path2=require("path"),import_common3=require("storybook/internal/common"),import_csf_tools2=require("storybook/internal/csf-tools"),import_prompts=__toESM(require("prompts"),1),import_semver=__toESM(require("semver"),1),import_ts_dedent2=require("ts-dedent");var import_babel=require("storybook/internal/babel"),defaultRequireWrapperName="getAbsolutePath";function doesVariableOrFunctionDeclarationExist(node,name){return import_babel.types.isVariableDeclaration(node)&&node.declarations.length===1&&import_babel.types.isVariableDeclarator(node.declarations[0])&&import_babel.types.isIdentifier(node.declarations[0].id)&&node.declarations[0].id?.name===name||import_babel.types.isFunctionDeclaration(node)&&import_babel.types.isIdentifier(node.id)&&node.id.name===name}function getReferenceToRequireWrapper(config,value){return import_babel.types.callExpression(import_babel.types.identifier(getRequireWrapperName(config)??defaultRequireWrapperName),[import_babel.types.stringLiteral(value)])}function getRequireWrapperName(config){let declarationName=config.getBodyDeclarations().flatMap(node=>doesVariableOrFunctionDeclarationExist(node,"wrapForPnp")?["wrapForPnp"]:doesVariableOrFunctionDeclarationExist(node,defaultRequireWrapperName)?[defaultRequireWrapperName]:[]);return declarationName.length?declarationName[0]:null}function isRequireWrapperNecessary(node,cb=()=>{}){if(import_babel.types.isStringLiteral(node))return cb(node),!0;if(import_babel.types.isObjectExpression(node)){let nameProperty=node.properties.find(property=>import_babel.types.isObjectProperty(property)&&import_babel.types.isIdentifier(property.key)&&property.key.name==="name");if(nameProperty&&import_babel.types.isStringLiteral(nameProperty.value))return cb(nameProperty),!0}return import_babel.types.isArrayExpression(node)&&node.elements.some(element=>element&&isRequireWrapperNecessary(element))?(cb(node),!0):!1}function getFieldsForRequireWrapper(config){let frameworkNode=config.getFieldNode(["framework"]),builderNode=config.getFieldNode(["core","builder"]),rendererNode=config.getFieldNode(["core","renderer"]),addons=config.getFieldNode(["addons"]);return[...frameworkNode?[frameworkNode]:[],...builderNode?[builderNode]:[],...rendererNode?[rendererNode]:[],...addons&&import_babel.types.isArrayExpression(addons)?[addons]:[]]}function getRequireWrapperAsCallExpression(isConfigTypescript){let functionDeclaration={...import_babel.types.functionDeclaration(import_babel.types.identifier(defaultRequireWrapperName),[{...import_babel.types.identifier("value"),...isConfigTypescript?{typeAnnotation:import_babel.types.tsTypeAnnotation(import_babel.types.tSStringKeyword())}:{}}],import_babel.types.blockStatement([import_babel.types.returnStatement(import_babel.types.callExpression(import_babel.types.identifier("dirname"),[import_babel.types.callExpression(import_babel.types.memberExpression(import_babel.types.identifier("require"),import_babel.types.identifier("resolve")),[import_babel.types.callExpression(import_babel.types.identifier("join"),[import_babel.types.identifier("value"),import_babel.types.stringLiteral("package.json")])])]))])),...isConfigTypescript?{returnType:import_babel.types.tSTypeAnnotation(import_babel.types.tsAnyKeyword())}:{}};return import_babel.types.addComment(functionDeclaration,"leading",`*
|
|
107
107
|
* This function is used to resolve the absolute path of a package.
|
|
108
108
|
* It is needed in projects that use Yarn PnP or are set up within a monorepo.
|
|
109
109
|
`),functionDeclaration}function wrapValueWithRequireWrapper(config,node){isRequireWrapperNecessary(node,n=>{if(import_babel.types.isStringLiteral(n)){let wrapperNode=getReferenceToRequireWrapper(config,n.value);Object.keys(n).forEach(k=>{delete n[k]}),Object.keys(wrapperNode).forEach(k=>{n[k]=wrapperNode[k]})}import_babel.types.isObjectProperty(n)&&import_babel.types.isStringLiteral(n.value)&&(n.value=getReferenceToRequireWrapper(config,n.value.value)),import_babel.types.isArrayExpression(n)&&n.elements.forEach(element=>{element&&isRequireWrapperNecessary(element)&&wrapValueWithRequireWrapper(config,element)})})}var import_node_path=require("path"),import_common=require("storybook/internal/common"),import_common2=require("storybook/internal/common"),import_csf_tools=require("storybook/internal/csf-tools"),import_picocolors=__toESM(require_picocolors(),1),import_ts_dedent=require("ts-dedent"),logger=console,getFrameworkPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.framework=="string"?mainConfig.framework:mainConfig?.framework?.name;return packageNameOrPath?(0,import_common.extractProperFrameworkName)(packageNameOrPath):null};var getStorybookData=async({packageManager,configDir:userDefinedConfigDir})=>{let packageJson=await packageManager.retrievePackageJson(),{mainConfig:mainConfigPath,version:storybookVersionSpecifier,configDir:configDirFromScript,previewConfig:previewConfigPath}=(0,import_common.getStorybookInfo)(packageJson,userDefinedConfigDir),storybookVersion=await(0,import_common2.getCoercedStorybookVersion)(packageManager),configDir=userDefinedConfigDir||configDirFromScript||".storybook",mainConfig;try{mainConfig=await(0,import_common.loadMainConfig)({configDir,noCache:!0})}catch(err){throw new Error(import_ts_dedent.dedent`Unable to find or evaluate ${import_picocolors.default.blue(mainConfigPath)}: ${String(err)}`)}return{configDir,mainConfig,storybookVersionSpecifier,storybookVersion,mainConfigPath,previewConfigPath,packageJson}},updateMainConfig=async({mainConfigPath,dryRun},callback)=>{try{let main=await(0,import_csf_tools.readConfig)(mainConfigPath);await callback(main),dryRun||await(0,import_csf_tools.writeConfig)(main)}catch(e){logger.info(`\u274C The migration failed to update your ${import_picocolors.default.blue(mainConfigPath)} on your behalf because of the following error:
|
|
110
110
|
${e}
|
|
111
111
|
`),logger.info(`\u26A0\uFE0F Storybook automigrations are based on AST parsing and it's possible that your ${import_picocolors.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 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_common3.versions,addonName);async function add(addon,{packageManager:pkgMgr,skipPostinstall,configDir:userSpecifiedConfigDir,yes,skipInstall},logger17=console){let[addonName,inputVersion]=getVersionSpecifier(addon),packageManager=import_common3.JsPackageManagerFactory.getPackageManager({force:pkgMgr}),{mainConfig,mainConfigPath,configDir,previewConfigPath,storybookVersion}=await getStorybookData({packageManager,configDir:userSpecifiedConfigDir});if(typeof configDir>"u")throw new Error(import_ts_dedent2.dedent`
|
|
112
112
|
Unable to find storybook config directory. Please specify your Storybook config directory with the --config-dir flag.
|
|
113
|
-
`);if(!mainConfigPath){logger17.error("Unable to find Storybook main.js config");return}let shouldAddToMain=!0;if(checkInstalled(addonName,mainConfig)&&(shouldAddToMain=!1,!yes)){logger17.log(`The Storybook addon "${addonName}" is already present in ${mainConfigPath}.`);let{shouldForceInstall}=await(0,import_prompts.default)({type:"confirm",name:"shouldForceInstall",message:"Do you wish to install it again?"});if(!shouldForceInstall)return}let main=await(0,import_csf_tools2.readConfig)(mainConfigPath);logger17.log(`Verifying ${addonName}`);let version2=inputVersion;!version2&&isCoreAddon(addonName)&&storybookVersion&&(version2=storybookVersion),version2||(version2=await packageManager.latestVersion(addonName)),isCoreAddon(addonName)&&version2!==storybookVersion&&logger17.warn(`The version of ${addonName} (${version2}) you are installing is not the same as the version of Storybook you are using (${storybookVersion}). This may lead to unexpected behavior.`);let addonWithVersion=isValidVersion(version2)&&!version2.includes("-pr-")?`${addonName}@^${version2}`:`${addonName}@${version2}`;if(logger17.log(`Installing ${addonWithVersion}`),await packageManager.addDependencies({installAsDevDependencies:!0,writeOutputToFile:!1},[addonWithVersion]),shouldAddToMain){if(logger17.log(`Adding '${addon}' to the "addons" field in ${mainConfigPath}`),main.getFieldNode(["addons"])&&getRequireWrapperName(main)!==null){let addonNode=main.valueToNode(addonName);main.appendNodeToArray(["addons"],addonNode),wrapValueWithRequireWrapper(main,addonNode)}else main.appendValueToArray(["addons"],addonName);await(0,import_csf_tools2.writeConfig)(main)}try{await(0,import_common3.syncStorybookAddons)(mainConfig,previewConfigPath)}catch{}!skipPostinstall&&isCoreAddon(addonName)&&await postinstallAddon(addonName,{packageManager:packageManager.type,configDir,yes,skipInstall})}function isValidVersion(version2){return import_semver.default.valid(version2)||version2.match(/^\d+$/)}var import_node_fs3=require("fs"),import_promises7=require("fs/promises"),import_node_path6=require("path"),import_common20=require("storybook/internal/common");var import_node_process2=__toESM(require("process"),1);function ansiRegex({onlyFirst=!1}={}){let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}var regex=ansiRegex();function stripAnsi(string){if(typeof string!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);return string.replace(regex,"")}var import_eastasianwidth=__toESM(require_eastasianwidth(),1),import_emoji_regex=__toESM(require_emoji_regex(),1);function stringWidth(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}var wrapAnsi16=(offset=0)=>code=>`\x1B[${code+offset}m`,wrapAnsi256=(offset=0)=>code=>`\x1B[${38+offset};5;${code}m`,wrapAnsi16m=(offset=0)=>(red,green,blue)=>`\x1B[${38+offset};2;${red};${green};${blue}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},modifierNames=Object.keys(styles.modifier),foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor),colorNames=[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){let codes=new Map;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(10),styles.bgColor.ansi256=wrapAnsi256(10),styles.bgColor.ansi16m=wrapAnsi16m(10),Object.defineProperties(styles,{rgbToAnsi256:{value(red,green,blue){return red===green&&green===blue?red<8?16:red>248?231:Math.round((red-8)/247*24)+232:16+36*Math.round(red/255*5)+6*Math.round(green/255*5)+Math.round(blue/255*5)},enumerable:!1},hexToRgb:{value(hex){let matches=/[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));if(!matches)return[0,0,0];let[colorString]=matches;colorString.length===3&&(colorString=[...colorString].map(character=>character+character).join(""));let integer=Number.parseInt(colorString,16);return[integer>>16&255,integer>>8&255,integer&255]},enumerable:!1},hexToAnsi256:{value:hex=>styles.rgbToAnsi256(...styles.hexToRgb(hex)),enumerable:!1},ansi256ToAnsi:{value(code){if(code<8)return 30+code;if(code<16)return 90+(code-8);let red,green,blue;if(code>=232)red=((code-232)*10+8)/255,green=red,blue=red;else{code-=16;let remainder=code%36;red=Math.floor(code/36)/5,green=Math.floor(remainder/6)/5,blue=remainder%6/5}let value=Math.max(red,green,blue)*2;if(value===0)return 30;let result=30+(Math.round(blue)<<2|Math.round(green)<<1|Math.round(red));return value===2&&(result+=60),result},enumerable:!1},rgbToAnsi:{value:(red,green,blue)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(red,green,blue)),enumerable:!1},hexToAnsi:{value:hex=>styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),enumerable:!1}}),styles}var ansiStyles=assembleStyles(),ansi_styles_default=ansiStyles;var import_node_process=__toESM(require("process"),1),import_node_os=__toESM(require("os"),1),import_node_tty=__toESM(require("tty"),1);function hasFlag(flag,argv=globalThis.Deno?globalThis.Deno.args:import_node_process.default.argv){let prefix=flag.startsWith("-")?"":flag.length===1?"-":"--",position=argv.indexOf(prefix+flag),terminatorPosition=argv.indexOf("--");return position!==-1&&(terminatorPosition===-1||position<terminatorPosition)}var{env}=import_node_process.default,flagForceColor;hasFlag("no-color")||hasFlag("no-colors")||hasFlag("color=false")||hasFlag("color=never")?flagForceColor=0:(hasFlag("color")||hasFlag("colors")||hasFlag("color=true")||hasFlag("color=always"))&&(flagForceColor=1);function envForceColor(){if("FORCE_COLOR"in env)return env.FORCE_COLOR==="true"?1:env.FORCE_COLOR==="false"?0:env.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(env.FORCE_COLOR,10),3)}function translateLevel(level){return level===0?!1:{level,hasBasic:!0,has256:level>=2,has16m:level>=3}}function _supportsColor(haveStream,{streamIsTTY,sniffFlags=!0}={}){let noFlagForceColor=envForceColor();noFlagForceColor!==void 0&&(flagForceColor=noFlagForceColor);let forceColor=sniffFlags?flagForceColor:noFlagForceColor;if(forceColor===0)return 0;if(sniffFlags){if(hasFlag("color=16m")||hasFlag("color=full")||hasFlag("color=truecolor"))return 3;if(hasFlag("color=256"))return 2}if("TF_BUILD"in env&&"AGENT_NAME"in env)return 1;if(haveStream&&!streamIsTTY&&forceColor===void 0)return 0;let min=forceColor||0;if(env.TERM==="dumb")return min;if(import_node_process.default.platform==="win32"){let osRelease=import_node_os.default.release().split(".");return Number(osRelease[0])>=10&&Number(osRelease[2])>=10586?Number(osRelease[2])>=14931?3:2:1}if("CI"in env)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(key=>key in env)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(sign=>sign in env)||env.CI_NAME==="codeship"?1:min;if("TEAMCITY_VERSION"in env)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION)?1:0;if(env.COLORTERM==="truecolor"||env.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in env){let version2=Number.parseInt((env.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(env.TERM_PROGRAM){case"iTerm.app":return version2>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(env.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)||"COLORTERM"in env?1:min}function createSupportsColor(stream,options={}){let level=_supportsColor(stream,{streamIsTTY:stream&&stream.isTTY,...options});return translateLevel(level)}var supportsColor={stdout:createSupportsColor({isTTY:import_node_tty.default.isatty(1)}),stderr:createSupportsColor({isTTY:import_node_tty.default.isatty(2)})},supports_color_default=supportsColor;function stringReplaceAll(string,substring,replacer){let index=string.indexOf(substring);if(index===-1)return string;let substringLength=substring.length,endIndex=0,returnValue="";do returnValue+=string.slice(endIndex,index)+substring+replacer,endIndex=index+substringLength,index=string.indexOf(substring,endIndex);while(index!==-1);return returnValue+=string.slice(endIndex),returnValue}function stringEncaseCRLFWithFirstIndex(string,prefix,postfix,index){let endIndex=0,returnValue="";do{let gotCR=string[index-1]==="\r";returnValue+=string.slice(endIndex,gotCR?index-1:index)+prefix+(gotCR?`\r
|
|
113
|
+
`);if(!mainConfigPath){logger17.error("Unable to find Storybook main.js config");return}let shouldAddToMain=!0;if(checkInstalled(addonName,mainConfig)&&(shouldAddToMain=!1,!yes)){logger17.log(`The Storybook addon "${addonName}" is already present in ${mainConfigPath}.`);let{shouldForceInstall}=await(0,import_prompts.default)({type:"confirm",name:"shouldForceInstall",message:"Do you wish to install it again?"});if(!shouldForceInstall)return}let main=await(0,import_csf_tools2.readConfig)(mainConfigPath);logger17.log(`Verifying ${addonName}`);let version2=inputVersion;!version2&&isCoreAddon(addonName)&&storybookVersion&&(version2=storybookVersion),version2||(version2=await packageManager.latestVersion(addonName)),isCoreAddon(addonName)&&version2!==storybookVersion&&logger17.warn(`The version of ${addonName} (${version2}) you are installing is not the same as the version of Storybook you are using (${storybookVersion}). This may lead to unexpected behavior.`);let addonWithVersion=isValidVersion(version2)&&!version2.includes("-pr-")?`${addonName}@^${version2}`:`${addonName}@${version2}`;if(logger17.log(`Installing ${addonWithVersion}`),await packageManager.addDependencies({installAsDevDependencies:!0,writeOutputToFile:!1},[addonWithVersion]),shouldAddToMain){if(logger17.log(`Adding '${addon}' to the "addons" field in ${mainConfigPath}`),main.getFieldNode(["addons"])&&getRequireWrapperName(main)!==null){let addonNode=main.valueToNode(addonName);main.appendNodeToArray(["addons"],addonNode),wrapValueWithRequireWrapper(main,addonNode)}else main.appendValueToArray(["addons"],addonName);await(0,import_csf_tools2.writeConfig)(main)}try{await(0,import_common3.syncStorybookAddons)(mainConfig,previewConfigPath,configDir)}catch{}!skipPostinstall&&isCoreAddon(addonName)&&await postinstallAddon(addonName,{packageManager:packageManager.type,configDir,yes,skipInstall})}function isValidVersion(version2){return import_semver.default.valid(version2)||version2.match(/^\d+$/)}var import_node_fs3=require("fs"),import_promises7=require("fs/promises"),import_node_path6=require("path"),import_common20=require("storybook/internal/common");var import_node_process2=__toESM(require("process"),1);function ansiRegex({onlyFirst=!1}={}){let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}var regex=ansiRegex();function stripAnsi(string){if(typeof string!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);return string.replace(regex,"")}var import_eastasianwidth=__toESM(require_eastasianwidth(),1),import_emoji_regex=__toESM(require_emoji_regex(),1);function stringWidth(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}var wrapAnsi16=(offset=0)=>code=>`\x1B[${code+offset}m`,wrapAnsi256=(offset=0)=>code=>`\x1B[${38+offset};5;${code}m`,wrapAnsi16m=(offset=0)=>(red,green,blue)=>`\x1B[${38+offset};2;${red};${green};${blue}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},modifierNames=Object.keys(styles.modifier),foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor),colorNames=[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){let codes=new Map;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(10),styles.bgColor.ansi256=wrapAnsi256(10),styles.bgColor.ansi16m=wrapAnsi16m(10),Object.defineProperties(styles,{rgbToAnsi256:{value(red,green,blue){return red===green&&green===blue?red<8?16:red>248?231:Math.round((red-8)/247*24)+232:16+36*Math.round(red/255*5)+6*Math.round(green/255*5)+Math.round(blue/255*5)},enumerable:!1},hexToRgb:{value(hex){let matches=/[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));if(!matches)return[0,0,0];let[colorString]=matches;colorString.length===3&&(colorString=[...colorString].map(character=>character+character).join(""));let integer=Number.parseInt(colorString,16);return[integer>>16&255,integer>>8&255,integer&255]},enumerable:!1},hexToAnsi256:{value:hex=>styles.rgbToAnsi256(...styles.hexToRgb(hex)),enumerable:!1},ansi256ToAnsi:{value(code){if(code<8)return 30+code;if(code<16)return 90+(code-8);let red,green,blue;if(code>=232)red=((code-232)*10+8)/255,green=red,blue=red;else{code-=16;let remainder=code%36;red=Math.floor(code/36)/5,green=Math.floor(remainder/6)/5,blue=remainder%6/5}let value=Math.max(red,green,blue)*2;if(value===0)return 30;let result=30+(Math.round(blue)<<2|Math.round(green)<<1|Math.round(red));return value===2&&(result+=60),result},enumerable:!1},rgbToAnsi:{value:(red,green,blue)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(red,green,blue)),enumerable:!1},hexToAnsi:{value:hex=>styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),enumerable:!1}}),styles}var ansiStyles=assembleStyles(),ansi_styles_default=ansiStyles;var import_node_process=__toESM(require("process"),1),import_node_os=__toESM(require("os"),1),import_node_tty=__toESM(require("tty"),1);function hasFlag(flag,argv=globalThis.Deno?globalThis.Deno.args:import_node_process.default.argv){let prefix=flag.startsWith("-")?"":flag.length===1?"-":"--",position=argv.indexOf(prefix+flag),terminatorPosition=argv.indexOf("--");return position!==-1&&(terminatorPosition===-1||position<terminatorPosition)}var{env}=import_node_process.default,flagForceColor;hasFlag("no-color")||hasFlag("no-colors")||hasFlag("color=false")||hasFlag("color=never")?flagForceColor=0:(hasFlag("color")||hasFlag("colors")||hasFlag("color=true")||hasFlag("color=always"))&&(flagForceColor=1);function envForceColor(){if("FORCE_COLOR"in env)return env.FORCE_COLOR==="true"?1:env.FORCE_COLOR==="false"?0:env.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(env.FORCE_COLOR,10),3)}function translateLevel(level){return level===0?!1:{level,hasBasic:!0,has256:level>=2,has16m:level>=3}}function _supportsColor(haveStream,{streamIsTTY,sniffFlags=!0}={}){let noFlagForceColor=envForceColor();noFlagForceColor!==void 0&&(flagForceColor=noFlagForceColor);let forceColor=sniffFlags?flagForceColor:noFlagForceColor;if(forceColor===0)return 0;if(sniffFlags){if(hasFlag("color=16m")||hasFlag("color=full")||hasFlag("color=truecolor"))return 3;if(hasFlag("color=256"))return 2}if("TF_BUILD"in env&&"AGENT_NAME"in env)return 1;if(haveStream&&!streamIsTTY&&forceColor===void 0)return 0;let min=forceColor||0;if(env.TERM==="dumb")return min;if(import_node_process.default.platform==="win32"){let osRelease=import_node_os.default.release().split(".");return Number(osRelease[0])>=10&&Number(osRelease[2])>=10586?Number(osRelease[2])>=14931?3:2:1}if("CI"in env)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(key=>key in env)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(sign=>sign in env)||env.CI_NAME==="codeship"?1:min;if("TEAMCITY_VERSION"in env)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION)?1:0;if(env.COLORTERM==="truecolor"||env.TERM==="xterm-kitty")return 3;if("TERM_PROGRAM"in env){let version2=Number.parseInt((env.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(env.TERM_PROGRAM){case"iTerm.app":return version2>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(env.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)||"COLORTERM"in env?1:min}function createSupportsColor(stream,options={}){let level=_supportsColor(stream,{streamIsTTY:stream&&stream.isTTY,...options});return translateLevel(level)}var supportsColor={stdout:createSupportsColor({isTTY:import_node_tty.default.isatty(1)}),stderr:createSupportsColor({isTTY:import_node_tty.default.isatty(2)})},supports_color_default=supportsColor;function stringReplaceAll(string,substring,replacer){let index=string.indexOf(substring);if(index===-1)return string;let substringLength=substring.length,endIndex=0,returnValue="";do returnValue+=string.slice(endIndex,index)+substring+replacer,endIndex=index+substringLength,index=string.indexOf(substring,endIndex);while(index!==-1);return returnValue+=string.slice(endIndex),returnValue}function stringEncaseCRLFWithFirstIndex(string,prefix,postfix,index){let endIndex=0,returnValue="";do{let gotCR=string[index-1]==="\r";returnValue+=string.slice(endIndex,gotCR?index-1:index)+prefix+(gotCR?`\r
|
|
114
114
|
`:`
|
|
115
115
|
`)+postfix,endIndex=index+1,index=string.indexOf(`
|
|
116
116
|
`,endIndex)}while(index!==-1);return returnValue+=string.slice(endIndex),returnValue}var{stdout:stdoutColor,stderr:stderrColor}=supports_color_default,GENERATOR=Symbol("GENERATOR"),STYLER=Symbol("STYLER"),IS_EMPTY=Symbol("IS_EMPTY"),levelMapping=["ansi","ansi","ansi256","ansi16m"],styles2=Object.create(null),applyOptions=(object,options={})=>{if(options.level&&!(Number.isInteger(options.level)&&options.level>=0&&options.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let colorLevel=stdoutColor?stdoutColor.level:0;object.level=options.level===void 0?colorLevel:options.level};var chalkFactory=options=>{let chalk2=(...strings)=>strings.join(" ");return applyOptions(chalk2,options),Object.setPrototypeOf(chalk2,createChalk.prototype),chalk2};function createChalk(options){return chalkFactory(options)}Object.setPrototypeOf(createChalk.prototype,Function.prototype);for(let[styleName,style]of Object.entries(ansi_styles_default))styles2[styleName]={get(){let builder=createBuilder(this,createStyler(style.open,style.close,this[STYLER]),this[IS_EMPTY]);return Object.defineProperty(this,styleName,{value:builder}),builder}};styles2.visible={get(){let builder=createBuilder(this,this[STYLER],!0);return Object.defineProperty(this,"visible",{value:builder}),builder}};var getModelAnsi=(model,level,type,...arguments_)=>model==="rgb"?level==="ansi16m"?ansi_styles_default[type].ansi16m(...arguments_):level==="ansi256"?ansi_styles_default[type].ansi256(ansi_styles_default.rgbToAnsi256(...arguments_)):ansi_styles_default[type].ansi(ansi_styles_default.rgbToAnsi(...arguments_)):model==="hex"?getModelAnsi("rgb",level,type,...ansi_styles_default.hexToRgb(...arguments_)):ansi_styles_default[type][model](...arguments_),usedModels=["rgb","hex","ansi256"];for(let model of usedModels){styles2[model]={get(){let{level}=this;return function(...arguments_){let styler=createStyler(getModelAnsi(model,levelMapping[level],"color",...arguments_),ansi_styles_default.color.close,this[STYLER]);return createBuilder(this,styler,this[IS_EMPTY])}}};let bgModel="bg"+model[0].toUpperCase()+model.slice(1);styles2[bgModel]={get(){let{level}=this;return function(...arguments_){let styler=createStyler(getModelAnsi(model,levelMapping[level],"bgColor",...arguments_),ansi_styles_default.bgColor.close,this[STYLER]);return createBuilder(this,styler,this[IS_EMPTY])}}}}var proto=Object.defineProperties(()=>{},{...styles2,level:{enumerable:!0,get(){return this[GENERATOR].level},set(level){this[GENERATOR].level=level}}}),createStyler=(open,close,parent)=>{let openAll,closeAll;return parent===void 0?(openAll=open,closeAll=close):(openAll=parent.openAll+open,closeAll=close+parent.closeAll),{open,close,openAll,closeAll,parent}},createBuilder=(self,_styler,_isEmpty)=>{let builder=(...arguments_)=>applyStyle(builder,arguments_.length===1?""+arguments_[0]:arguments_.join(" "));return Object.setPrototypeOf(builder,proto),builder[GENERATOR]=self,builder[STYLER]=_styler,builder[IS_EMPTY]=_isEmpty,builder},applyStyle=(self,string)=>{if(self.level<=0||!string)return self[IS_EMPTY]?"":string;let styler=self[STYLER];if(styler===void 0)return string;let{openAll,closeAll}=styler;if(string.includes("\x1B"))for(;styler!==void 0;)string=stringReplaceAll(string,styler.close,styler.open),styler=styler.parent;let lfIndex=string.indexOf(`
|
|
@@ -161,8 +161,8 @@ Please try a different pattern.
|
|
|
161
161
|
`),new Error("No files matched");try{let pLimit=(await import("p-limit")).default,limit=pLimit(maxConcurrentTasks);await Promise.all(files.map(file=>limit(async()=>{try{let filePath=file;try{filePath=await import_fs.promises.realpath(file)}catch{}let source=await import_fs.promises.readFile(filePath,"utf-8"),transformedSource=await transform({path:filePath,source});if(transformedSource!==source){if(!dryRun){let fileContent=skipFormatting?transformedSource:await(0,import_common8.formatFileContent)(file,transformedSource);await import_fs.promises.writeFile(file,fileContent,"utf-8")}modifiedCount++}else unmodifiedCount++}catch(fileError){logger3.error(`Error processing file ${file}:`,fileError),errorCount++}})))}catch(error){logger3.error("Error applying transform:",error),errorCount++}logger3.log(`Summary: ${import_picocolors6.default.green(`${modifiedCount} transformed`)}, ${import_picocolors6.default.yellow(`${unmodifiedCount} unmodified`)}, ${import_picocolors6.default.red(`${errorCount} errors`)}`),dryRun&&logger3.log(import_picocolors6.default.bold(`This was a dry run. Run without --dry-run to apply the transformation to ${modifiedCount} files.`))}var printBoxedMessage=(message,style)=>boxen(message,{borderStyle:"round",padding:1,borderColor:"#F1618C",...style});var import_babel3=require("storybook/internal/babel"),import_common9=require("storybook/internal/common"),import_csf_tools3=require("storybook/internal/csf-tools"),import_picocolors7=__toESM(require_picocolors(),1);var import_babel2=require("storybook/internal/babel");function cleanupTypeImports(programNode,disallowList2){let usedIdentifiers=new Set;try{(0,import_babel2.traverse)(programNode,{Identifier(path3){path3.findParent(p=>p.isImportDeclaration())||usedIdentifiers.add(path3.node.name)},noScope:!0})}catch{}return programNode.body.filter(node=>{if(import_babel2.types.isImportDeclaration(node)){let{source,specifiers}=node;if(source.value.startsWith("@storybook/")){let allowedSpecifiers=specifiers.filter(specifier=>{if(import_babel2.types.isImportSpecifier(specifier)&&import_babel2.types.isIdentifier(specifier.imported)){let name=specifier.imported.name;return!disallowList2.includes(name)||usedIdentifiers.has(name)}return!0});return allowedSpecifiers.length>0?(node.specifiers=allowedSpecifiers,!0):!1}}return!0})}function removeExportDeclarations(programNode,exportDecls){return programNode.body.filter(node=>{if(import_babel2.types.isExportNamedDeclaration(node)&&node.declaration){if(import_babel2.types.isVariableDeclaration(node.declaration))return node.declaration.declarations=node.declaration.declarations.filter(decl=>import_babel2.types.isIdentifier(decl.id)&&!exportDecls[decl.id.name]),node.declaration.declarations.length>0;if(import_babel2.types.isFunctionDeclaration(node.declaration)){let funcDecl=node.declaration;return import_babel2.types.isIdentifier(funcDecl.id)&&!exportDecls[funcDecl.id.name]}}return!0})}function getConfigProperties(exportDecls){let properties=[];for(let[name,decl]of Object.entries(exportDecls))import_babel2.types.isVariableDeclarator(decl)&&decl.init?properties.push(import_babel2.types.objectProperty(import_babel2.types.identifier(name),decl.init)):import_babel2.types.isFunctionDeclaration(decl)&&properties.push(import_babel2.types.objectProperty(import_babel2.types.identifier(name),import_babel2.types.arrowFunctionExpression([],decl.body)));return properties}async function configToCsfFactory(info,{configType,frameworkPackage},{dryRun=!1,skipFormatting=!1}={}){let config=(0,import_csf_tools3.loadConfig)(info.source);try{config.parse()}catch(err){return logger4.log(`Error when parsing ${info.path}, skipping:
|
|
162
162
|
${err}`),info.source}let methodName=configType==="main"?"defineMain":"definePreview",programNode=config._ast.program,hasNamedExports=Object.keys(config._exportDecls).length>0;if(config._exportsObject&&hasNamedExports){let exportDecls=config._exportDecls,defineConfigProps=getConfigProperties(exportDecls);config._exportsObject.properties.push(...defineConfigProps),programNode.body=removeExportDeclarations(programNode,exportDecls)}else if(config._exportsObject){let defineConfigCall=import_babel3.types.callExpression(import_babel3.types.identifier(methodName),[config._exportsObject]),exportDefaultNode=null,declarationNodeIndex=-1;programNode.body.forEach(node=>{if(import_babel3.types.isExportDefaultDeclaration(node)&&import_babel3.types.isIdentifier(node.declaration)){let declarationName=node.declaration.name;if(declarationNodeIndex=programNode.body.findIndex(n=>import_babel3.types.isVariableDeclaration(n)&&n.declarations.some(d=>import_babel3.types.isIdentifier(d.id)&&d.id.name===declarationName&&import_babel3.types.isObjectExpression(d.init))),declarationNodeIndex!==-1){exportDefaultNode=node;let declarationNode=programNode.body[declarationNodeIndex];if(import_babel3.types.isVariableDeclaration(declarationNode)){let id=declarationNode.declarations[0].id;import_babel3.types.isIdentifier(id)&&id.name&&programNode.body.splice(declarationNodeIndex,1)}}}else import_babel3.types.isExportDefaultDeclaration(node)&&import_babel3.types.isObjectExpression(node.declaration)&&(exportDefaultNode=node)}),exportDefaultNode!==null&&(exportDefaultNode.declaration=defineConfigCall)}else if(hasNamedExports){let exportDecls=config._exportDecls,defineConfigProps=getConfigProperties(exportDecls),defineConfigCall=import_babel3.types.callExpression(import_babel3.types.identifier(methodName),[import_babel3.types.objectExpression(defineConfigProps)]);programNode.body=removeExportDeclarations(programNode,exportDecls),programNode.body.push(import_babel3.types.exportDefaultDeclaration(defineConfigCall))}let configImport=import_babel3.types.importDeclaration([import_babel3.types.importSpecifier(import_babel3.types.identifier(methodName),import_babel3.types.identifier(methodName))],import_babel3.types.stringLiteral(frameworkPackage+`${configType==="main"?"/node":""}`)),existingImport=programNode.body.find(node=>import_babel3.types.isImportDeclaration(node)&&node.importKind!=="type"&&node.source.value===configImport.source.value);existingImport&&import_babel3.types.isImportDeclaration(existingImport)?existingImport.specifiers.some(specifier=>import_babel3.types.isImportSpecifier(specifier)&&import_babel3.types.isIdentifier(specifier.imported)&&specifier.imported.name===methodName)||existingImport.specifiers.push(import_babel3.types.importSpecifier(import_babel3.types.identifier(methodName),import_babel3.types.identifier(methodName))):programNode.body.unshift(configImport);let disallowList2=["StorybookConfig","Preview"];programNode.body=cleanupTypeImports(programNode,disallowList2);let output=(0,import_csf_tools3.printConfig)(config).code;return dryRun?(logger4.log(`Would write to ${import_picocolors7.default.yellow(info.path)}:
|
|
163
163
|
${import_picocolors7.default.green(output)}`),info.source):skipFormatting?output:(0,import_common9.formatFileContent)(info.path,output)}var import_babel4=require("storybook/internal/babel"),import_csf_tools4=require("storybook/internal/csf-tools"),import_path=__toESM(require("path"),1);var reuseDisallowList=["play","run","extends","story"],typesDisallowList=["Story","StoryFn","StoryObj","Meta","MetaObj","ComponentStory","ComponentMeta"];async function storyToCsfFactory(info,{previewConfigPath,useSubPathImports}){let csf=(0,import_csf_tools4.loadCsf)(info.source,{makeTitle:()=>"FIXME"});try{csf.parse()}catch(err){return logger4.log(`Error when parsing ${info.path}, skipping:
|
|
164
|
-
${err}`),info.source}let metaVariableName=csf._metaVariableName??"meta",programNode=csf._ast.program,previewImport,hasRootLevelConfig=programNode.body.some(n=>import_babel4.types.isVariableDeclaration(n)&&n.declarations.some(declaration=>import_babel4.types.isIdentifier(declaration.id,{name:"preview"}))),previewPath="#.storybook/preview";if(!useSubPathImports){let relativePath=import_path.default.relative(import_path.default.dirname(info.path),previewConfigPath),{dir,name}=import_path.default.parse(relativePath);previewPath=`${dir?`${dir}/`:""}${name}`,previewPath.startsWith(".")||(previewPath=`./${previewPath}`),previewPath=previewPath.replace(/\\/g,"/")}let sbConfigImportName=hasRootLevelConfig?"storybookPreview":"preview",sbConfigImportSpecifier=import_babel4.types.importDefaultSpecifier(import_babel4.types.identifier(sbConfigImportName));programNode.body.forEach(node=>{if(import_babel4.types.isImportDeclaration(node)&&(0,import_csf_tools4.isValidPreviewPath)(node.source.value)){let defaultImportSpecifier=node.specifiers.find(specifier=>import_babel4.types.isImportDefaultSpecifier(specifier));defaultImportSpecifier?defaultImportSpecifier.local.name!==sbConfigImportName&&(sbConfigImportName=defaultImportSpecifier.local.name):node.specifiers.push(sbConfigImportSpecifier),previewImport=node}});let hasMeta=!!csf._meta;Object.entries(csf._storyExports).forEach(([_key,decl])=>{let id=decl.id,declarator=decl,init=import_babel4.types.isVariableDeclarator(declarator)?declarator.init:void 0;
|
|
165
|
-
\u{1F6E0}\uFE0F Applying codemod on your stories, this might take some time...`),await packageManager.executeCommand({command:`${packageManager.getRemoteRunCommand()} storybook migrate csf-2-to-3 --glob=${globString}`,args:[],stdio:"ignore",ignoreError:!0}),await runCodemod(globString,info=>storyToCsfFactory(info,codemodOptions),{dryRun})}catch(err){if(err.message==="No files matched")await runStoriesCodemod(options);else throw err}}var csfFactories={id:"csf-factories",promptType:"command",async run({dryRun,mainConfig,mainConfigPath,previewConfigPath,packageJson,packageManager}){let useSubPathImports=!0;process.env.IN_STORYBOOK_SANDBOX||(logger4.log(printBoxedMessage(import_ts_dedent4.dedent`
|
|
164
|
+
${err}`),info.source}let metaVariableName=csf._metaVariableName??"meta",programNode=csf._ast.program,previewImport,hasRootLevelConfig=programNode.body.some(n=>import_babel4.types.isVariableDeclaration(n)&&n.declarations.some(declaration=>import_babel4.types.isIdentifier(declaration.id,{name:"preview"}))),previewPath="#.storybook/preview";if(!useSubPathImports){let relativePath=import_path.default.relative(import_path.default.dirname(info.path),previewConfigPath),{dir,name}=import_path.default.parse(relativePath);previewPath=`${dir?`${dir}/`:""}${name}`,previewPath.startsWith(".")||(previewPath=`./${previewPath}`),previewPath=previewPath.replace(/\\/g,"/")}let sbConfigImportName=hasRootLevelConfig?"storybookPreview":"preview",sbConfigImportSpecifier=import_babel4.types.importDefaultSpecifier(import_babel4.types.identifier(sbConfigImportName));programNode.body.forEach(node=>{if(import_babel4.types.isImportDeclaration(node)&&(0,import_csf_tools4.isValidPreviewPath)(node.source.value)){let defaultImportSpecifier=node.specifiers.find(specifier=>import_babel4.types.isImportDefaultSpecifier(specifier));defaultImportSpecifier?defaultImportSpecifier.local.name!==sbConfigImportName&&(sbConfigImportName=defaultImportSpecifier.local.name):node.specifiers.push(sbConfigImportSpecifier),previewImport=node}});let hasMeta=!!csf._meta;Object.entries(csf._storyExports).forEach(([_key,decl])=>{let id=decl.id,declarator=decl,init=import_babel4.types.isVariableDeclarator(declarator)?declarator.init:void 0;import_babel4.types.isIdentifier(id)&&init&&(id.typeAnnotation&&(id.typeAnnotation=null),(import_babel4.types.isTSSatisfiesExpression(init)||import_babel4.types.isTSAsExpression(init))&&(init=init.expression),import_babel4.types.isObjectExpression(init)?declarator.init=import_babel4.types.callExpression(import_babel4.types.memberExpression(import_babel4.types.identifier(metaVariableName),import_babel4.types.identifier("story")),init.properties.length===0?[]:[init]):import_babel4.types.isArrowFunctionExpression(init)&&(declarator.init=import_babel4.types.callExpression(import_babel4.types.memberExpression(import_babel4.types.identifier(metaVariableName),import_babel4.types.identifier("story")),[init])))});let storyExportDecls=new Map(Object.entries(csf._storyExports).filter(entry=>!import_babel4.types.isFunctionDeclaration(entry[1])));if((0,import_babel4.traverse)(csf._ast,{Identifier(nodePath){let identifierName=nodePath.node.name,binding=nodePath.scope.getBinding(identifierName);if(binding&&storyExportDecls.has(binding.identifier.name)||identifierName===metaVariableName){let parent=nodePath.parent;if(import_babel4.types.isVariableDeclarator(parent)&&parent.id===nodePath.node||import_babel4.types.isImportSpecifier(parent)||import_babel4.types.isExportSpecifier(parent)||import_babel4.types.isExportDefaultDeclaration(parent)||import_babel4.types.isMemberExpression(parent)&&import_babel4.types.isIdentifier(parent.property,{name:"input"})||import_babel4.types.isMemberExpression(parent)&&import_babel4.types.isIdentifier(parent.property)&&reuseDisallowList.includes(parent.property.name))return;try{nodePath.replaceWith(import_babel4.types.memberExpression(import_babel4.types.identifier(identifierName),import_babel4.types.identifier("input")))}catch(err){if(err.message.includes('instead got "MemberExpression"'))return;throw err}}}}),csf._metaPath){let declaration=csf._metaPath.node.declaration;if((import_babel4.types.isTSSatisfiesExpression(declaration)||import_babel4.types.isTSAsExpression(declaration))&&(declaration=declaration.expression),import_babel4.types.isObjectExpression(declaration)){let metaVariable=import_babel4.types.variableDeclaration("const",[import_babel4.types.variableDeclarator(import_babel4.types.identifier(metaVariableName),import_babel4.types.callExpression(import_babel4.types.memberExpression(import_babel4.types.identifier(sbConfigImportName),import_babel4.types.identifier("meta")),[declaration]))]);csf._metaPath.replaceWith(metaVariable)}else if(import_babel4.types.isIdentifier(declaration)){let binding=csf._metaPath.scope.getBinding(declaration.name);if(binding&&binding.path.isVariableDeclarator()){let originalName=declaration.name;binding.path.node.id=import_babel4.types.identifier(metaVariableName);let init=binding.path.node.init;(import_babel4.types.isTSSatisfiesExpression(init)||import_babel4.types.isTSAsExpression(init))&&(init=init.expression),import_babel4.types.isObjectExpression(init)&&(binding.path.node.init=import_babel4.types.callExpression(import_babel4.types.memberExpression(import_babel4.types.identifier(sbConfigImportName),import_babel4.types.identifier("meta")),[init])),csf._metaPath.scope.rename(originalName,metaVariableName)}csf._metaPath.remove()}}if(previewImport)previewImport.source.value!==previewPath&&(previewImport.source=import_babel4.types.stringLiteral(previewPath));else if(hasMeta){let configImport=import_babel4.types.importDeclaration([import_babel4.types.importDefaultSpecifier(import_babel4.types.identifier(sbConfigImportName))],import_babel4.types.stringLiteral(previewPath));programNode.body.unshift(configImport)}return programNode.body.forEach((node,index)=>{import_babel4.types.isTSTypeAliasDeclaration(node)&&(programNode.body.some(otherNode=>import_babel4.types.isVariableDeclaration(otherNode)?otherNode.declarations.some(declaration=>import_babel4.types.isIdentifier(declaration.init)&&declaration.init.name===node.id.name):!1)||programNode.body.splice(index,1))}),programNode.body=cleanupTypeImports(programNode,typesDisallowList),(0,import_csf_tools4.printCsf)(csf).code}var logger4=console;async function runStoriesCodemod(options){let{dryRun,packageManager,...codemodOptions}=options;try{let globString="{stories,src}/**/{Button,Header,Page}.stories.*";process.env.IN_STORYBOOK_SANDBOX||(logger4.log("Please enter the glob for your stories to migrate"),globString=(await(0,import_prompts2.default)({type:"text",name:"glob",message:"glob",initial:"src/**/*.stories.*"},{onCancel:()=>process.exit(0)})).glob),logger4.log(`
|
|
165
|
+
\u{1F6E0}\uFE0F Applying codemod on your stories, this might take some time...`),await packageManager.executeCommand({command:`${packageManager.getRemoteRunCommand()} storybook migrate csf-2-to-3 --glob=${globString}`,args:[],stdio:"ignore",ignoreError:!0}),await runCodemod(globString,info=>storyToCsfFactory(info,codemodOptions),{dryRun})}catch(err){if(err.message==="No files matched")await runStoriesCodemod(options);else throw err}}var csfFactories={id:"csf-factories",promptType:"command",async run({dryRun,configDir,mainConfig,mainConfigPath,previewConfigPath,packageJson,packageManager}){let useSubPathImports=!0;process.env.IN_STORYBOOK_SANDBOX||(logger4.log(printBoxedMessage(import_ts_dedent4.dedent`
|
|
166
166
|
The CSF factories format benefits from subpath imports (the imports property in your \`package.json\`), which is a node standard for module resolution. This makes it more convenient to import the preview config in your story files.
|
|
167
167
|
|
|
168
168
|
However, please note that this might not work if you have an outdated tsconfig, use custom paths, or have type alias plugins configured in your project. You can always rerun this codemod and select another option to update your code later.
|
|
@@ -175,7 +175,7 @@ ${err}`),info.source}let metaVariableName=csf._metaVariableName??"meta",programN
|
|
|
175
175
|
- ${import_picocolors8.default.bold("Relative imports:")} ${import_picocolors8.default.cyan("`import preview from '../../.storybook/preview'`")}
|
|
176
176
|
`)),useSubPathImports=(await(0,import_prompts2.default)({type:"select",name:"useSubPathImports",message:"Which would you like to use?",choices:[{title:"Subpath imports",value:!0},{title:"Relative imports",value:!1}],initial:0},{onCancel:()=>process.exit(0)})).useSubPathImports),useSubPathImports&&!packageJson.imports?.["#*"]&&(logger4.log(`\u{1F5FA}\uFE0F Adding imports map in ${import_picocolors8.default.cyan(packageManager.packageJsonPath())}`),packageJson.imports={...packageJson.imports,"#*":["./*","./*.ts","./*.tsx","./*.js","./*.jsx"]},await packageManager.writePackageJson(packageJson)),await runStoriesCodemod({dryRun,packageManager,useSubPathImports,previewConfigPath}),logger4.log(`
|
|
177
177
|
\u{1F6E0}\uFE0F Applying codemod on your main config...`);let frameworkPackage=getFrameworkPackageName(mainConfig)||"@storybook/your-framework-here";await runCodemod(mainConfigPath,fileInfo=>configToCsfFactory(fileInfo,{configType:"main",frameworkPackage},{dryRun})),logger4.log(`
|
|
178
|
-
\u{1F6E0}\uFE0F Applying codemod on your preview config...`),await runCodemod(previewConfigPath,fileInfo=>configToCsfFactory(fileInfo,{configType:"preview",frameworkPackage},{dryRun})),await(0,import_common10.syncStorybookAddons)(mainConfig,previewConfigPath),logger4.log(printBoxedMessage(import_ts_dedent4.dedent`
|
|
178
|
+
\u{1F6E0}\uFE0F Applying codemod on your preview config...`),await runCodemod(previewConfigPath,fileInfo=>configToCsfFactory(fileInfo,{configType:"preview",frameworkPackage},{dryRun})),await(0,import_common10.syncStorybookAddons)(mainConfig,previewConfigPath,configDir),logger4.log(printBoxedMessage(import_ts_dedent4.dedent`
|
|
179
179
|
You can now run Storybook with the new CSF factories format.
|
|
180
180
|
|
|
181
181
|
For more info, check out the docs:
|
|
@@ -320,7 +320,7 @@ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
|
|
|
320
320
|
We can make the necessary changes in your configuration automatically.
|
|
321
321
|
|
|
322
322
|
More info: https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mainjs-docsautodocs-is-deprecated
|
|
323
|
-
`,async run({result,dryRun,mainConfigPath,previewConfigPath}){let{autodocs}=result;logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("docs")} parameter in main config file...`),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{let docs=main.getFieldValue(["docs"])||{};dryRun||(delete docs.autodocs,Object.keys(docs).length===0?main.removeField(["docs"]):main.setFieldValue(["docs"],docs))}),autodocs===!0&&previewConfigPath&&(logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("tags")} parameter in preview config file...`),await updateMainConfig({mainConfigPath:previewConfigPath,dryRun:!!dryRun},async preview=>{let tags=preview.getFieldValue(["tags"])||[];!tags.includes("autodocs")&&!dryRun&&preview.setFieldValue(["tags"],[...tags,"autodocs"])}))}};var import_common17=require("storybook/internal/common"),import_picocolors19=__toESM(require_picocolors(),1),import_ts_dedent15=require("ts-dedent"),consolidatedAddons={"@storybook/addon-actions":"storybook/actions","@storybook/addon-controls":"storybook/internal/controls","@storybook/addon-toolbars":"storybook/internal/toolbars","@storybook/addon-highlight":"storybook/highlight","@storybook/addon-measure":"storybook/measure","@storybook/addon-outline":"storybook/outline","@storybook/addon-backgrounds":"storybook/backgrounds","@storybook/addon-viewport":"storybook/viewport"},removeEssentials={id:"remove-essentials",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig,packageManager}){if(!mainConfigPath)return null;try{let hasEssentialsAddon=!1,hasDocsAddon=!1,hasDocsDisabled=!1,additionalAddonsToRemove=[],CORE_ADDONS=["@storybook/addon-actions","@storybook/addon-backgrounds","@storybook/addon-controls","@storybook/addon-highlight","@storybook/addon-measure","@storybook/addon-outline","@storybook/addon-toolbars","@storybook/addon-viewport"],addonNames=(0,import_common17.getAddonNames)(mainConfig);hasEssentialsAddon=addonNames.includes("@storybook/addon-essentials"),hasDocsAddon=addonNames.includes("@storybook/addon-docs");let packageJson=await packageManager.retrievePackageJson(),allDeps={...packageJson.dependencies,...packageJson.devDependencies},installedAddons=Object.keys(allDeps);for(let addon of CORE_ADDONS)(addonNames.includes(addon)||installedAddons.includes(addon))&&additionalAddonsToRemove.push(addon);if(hasEssentialsAddon){let essentialsEntry=mainConfig.addons?.find(addon=>typeof addon=="string"?addon.includes("@storybook/addon-essentials"):addon.name.includes("@storybook/addon-essentials"));typeof essentialsEntry=="object"
|
|
323
|
+
`,async run({result,dryRun,mainConfigPath,previewConfigPath}){let{autodocs}=result;logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("docs")} parameter in main config file...`),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{let docs=main.getFieldValue(["docs"])||{};dryRun||(delete docs.autodocs,Object.keys(docs).length===0?main.removeField(["docs"]):main.setFieldValue(["docs"],docs))}),autodocs===!0&&previewConfigPath&&(logger9.log(`\u{1F504} Updating ${import_picocolors18.default.cyan("tags")} parameter in preview config file...`),await updateMainConfig({mainConfigPath:previewConfigPath,dryRun:!!dryRun},async preview=>{let tags=preview.getFieldValue(["tags"])||[];!tags.includes("autodocs")&&!dryRun&&preview.setFieldValue(["tags"],[...tags,"autodocs"])}))}};var import_common17=require("storybook/internal/common"),import_picocolors19=__toESM(require_picocolors(),1),import_ts_dedent15=require("ts-dedent");function moveEssentialOptions(dryRun,essentialsOptions){return async main=>{let features=main.getFieldValue(["features"])||{};dryRun||main.setFieldValue(["features"],{...features,...essentialsOptions})}}var consolidatedAddons={"@storybook/addon-actions":"storybook/actions","@storybook/addon-controls":"storybook/internal/controls","@storybook/addon-toolbars":"storybook/internal/toolbars","@storybook/addon-highlight":"storybook/highlight","@storybook/addon-measure":"storybook/measure","@storybook/addon-outline":"storybook/outline","@storybook/addon-backgrounds":"storybook/backgrounds","@storybook/addon-viewport":"storybook/viewport"},removeEssentials={id:"remove-essentials",versionRange:["<9.0.0","^9.0.0-0 || ^9.0.0"],async check({mainConfigPath,mainConfig,packageManager}){if(!mainConfigPath)return null;try{let hasEssentialsAddon=!1,hasDocsAddon=!1,hasDocsDisabled=!1,essentialsOptions,additionalAddonsToRemove=[],CORE_ADDONS=["@storybook/addon-actions","@storybook/addon-backgrounds","@storybook/addon-controls","@storybook/addon-highlight","@storybook/addon-measure","@storybook/addon-outline","@storybook/addon-toolbars","@storybook/addon-viewport"],addonNames=(0,import_common17.getAddonNames)(mainConfig);hasEssentialsAddon=addonNames.includes("@storybook/addon-essentials"),hasDocsAddon=addonNames.includes("@storybook/addon-docs");let packageJson=await packageManager.retrievePackageJson(),allDeps={...packageJson.dependencies,...packageJson.devDependencies},installedAddons=Object.keys(allDeps);for(let addon of CORE_ADDONS)(addonNames.includes(addon)||installedAddons.includes(addon))&&additionalAddonsToRemove.push(addon);if(hasEssentialsAddon){let essentialsEntry=mainConfig.addons?.find(addon=>typeof addon=="string"?addon.includes("@storybook/addon-essentials"):addon.name.includes("@storybook/addon-essentials"));if(typeof essentialsEntry=="object"){let options=essentialsEntry.options||{};hasDocsDisabled=options.docs===!1;let optionsExceptDocs=Object.fromEntries(Object.entries(options).filter(([key])=>key!=="docs"));Object.keys(optionsExceptDocs).length>0&&(essentialsOptions=optionsExceptDocs)}}if(!hasEssentialsAddon&&additionalAddonsToRemove.length===0)return null;let result={hasEssentials:hasEssentialsAddon,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove,allDeps,packageJson};return essentialsOptions&&(result.essentialsOptions=essentialsOptions),result}catch{return null}},prompt({hasDocsDisabled,additionalAddonsToRemove,hasEssentials}){let message="";hasEssentials&&(message=import_ts_dedent15.dedent`
|
|
324
324
|
We've detected that you have ${import_picocolors19.default.yellow("@storybook/addon-essentials")} installed.
|
|
325
325
|
|
|
326
326
|
In Storybook 9.0, all features from ${import_picocolors19.default.yellow("@storybook/addon-essentials")} (except docs)
|
|
@@ -339,9 +339,9 @@ ${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
|
|
|
339
339
|
|
|
340
340
|
Since you were using the docs feature, we'll install ${import_picocolors19.default.yellow("@storybook/addon-docs")}
|
|
341
341
|
separately and add it to your configuration if it's not already present.
|
|
342
|
-
`:additionalAddonsMessage},async run({result,dryRun,packageManager,configDir,packageJson}){let{hasEssentials,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove}=result;if(!(!hasEssentials&&additionalAddonsToRemove.length===0)&&!dryRun){hasEssentials&&(console.log("Removing @storybook/addon-essentials..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-essentials","--config-dir",configDir]));for(let addon of additionalAddonsToRemove)await packageManager.runPackageCommand("storybook",["remove",addon,"--config-dir",configDir]);let errors=await(0,import_common17.scanAndTransformFiles)({dryRun:!!dryRun,transformFn:import_common17.transformImportFiles,transformOptions:consolidatedAddons});if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
|
|
342
|
+
`:additionalAddonsMessage},async run({result,dryRun,packageManager,configDir,packageJson,mainConfigPath}){let{hasEssentials,hasDocsDisabled,hasDocsAddon,additionalAddonsToRemove,essentialsOptions}=result;if(!(!hasEssentials&&additionalAddonsToRemove.length===0)&&!dryRun){hasEssentials&&(console.log("Removing @storybook/addon-essentials..."),await packageManager.runPackageCommand("storybook",["remove","@storybook/addon-essentials","--config-dir",configDir]));for(let addon of additionalAddonsToRemove)await packageManager.runPackageCommand("storybook",["remove",addon,"--config-dir",configDir]);let errors=await(0,import_common17.scanAndTransformFiles)({dryRun:!!dryRun,transformFn:import_common17.transformImportFiles,transformOptions:consolidatedAddons});if(errors.length>0)throw new Error(`Failed to process ${errors.length} files:
|
|
343
343
|
${errors.map(({file,error})=>`- ${file}: ${error.message}`).join(`
|
|
344
|
-
`)}`);if(
|
|
344
|
+
`)}`);if(essentialsOptions&&updateMainConfig({mainConfigPath,dryRun:!!dryRun},moveEssentialOptions(dryRun,essentialsOptions)),!hasDocsDisabled&&hasEssentials)if(!hasDocsAddon)console.log("Adding @storybook/addon-docs..."),await packageManager.runPackageCommand("storybook",["add","@storybook/addon-docs","--config-dir",configDir]);else{let allDeps=result.allDeps;if(!(allDeps["@storybook/addon-docs"]!==void 0)){let storybookVersion=allDeps.storybook,isStorybookDevDependency=packageJson.devDependencies?.storybook!==void 0;await packageManager.addDependencies({installAsDevDependencies:isStorybookDevDependency},["@storybook/addon-docs@"+storybookVersion])}}}}};var import_promises5=require("fs/promises"),import_common18=require("storybook/internal/common"),import_picocolors20=__toESM(require_picocolors(),1),import_prompts3=__toESM(require("prompts"),1),import_ts_dedent16=require("ts-dedent"),getAllDependencies=packageJson=>Object.keys({...packageJson.dependencies||{},...packageJson.devDependencies||{}}),detectFrameworks=dependencies=>Object.keys(import_common18.frameworkPackages).filter(pkg=>dependencies.includes(pkg)),detectRenderers=dependencies=>Object.keys(import_common18.rendererPackages).filter(pkg=>dependencies.includes(pkg)).filter(pkg=>!Object.keys(import_common18.frameworkPackages).includes(pkg)),replaceImports=(source,renderer,framework)=>{let regex2=new RegExp(`(['"])${renderer}(['"])`,"g");return regex2.test(source)?source.replace(regex2,`$1${framework}$2`):null},transformSourceFiles=async(files,renderer,framework,dryRun)=>{let errors=[],{default:pLimit}=await import("p-limit"),limit=pLimit(10);return await Promise.all(files.map(file=>limit(async()=>{try{let contents=await(0,import_promises5.readFile)(file,"utf-8"),transformed=replaceImports(contents,renderer,framework);!dryRun&&transformed&&await(0,import_promises5.writeFile)(file,transformed)}catch(error){errors.push({file,error})}}))),errors},removeRendererInPackageJson=async(packageJsonPath,renderer,dryRun)=>{try{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),hasChanges=!1;return packageJson.dependencies?.[renderer]&&(delete packageJson.dependencies[renderer],hasChanges=!0),packageJson.devDependencies?.[renderer]&&(delete packageJson.devDependencies[renderer],hasChanges=!0),!dryRun&&hasChanges&&await(0,import_promises5.writeFile)(packageJsonPath,JSON.stringify(packageJson,null,2)),hasChanges}catch(error){throw new Error(`Failed to update package.json: ${error}`)}},checkPackageJson=async packageJsonPath=>{let content=await(0,import_promises5.readFile)(packageJsonPath,"utf-8"),packageJson=JSON.parse(content),dependencies=getAllDependencies(packageJson),frameworks=detectFrameworks(dependencies);if(frameworks.length===0)return null;let renderers=detectRenderers(dependencies);return renderers.length===0?null:{frameworks,renderers}},rendererToFramework={id:"renderer-to-framework",versionRange:["<9.0.0","^9.0.0-0"],promptType:"auto",async check(){let projectRoot=await(0,import_common18.getProjectRoot)(),{globby}=await import("globby"),packageJsonFiles=await globby(["**/package.json"],{...(0,import_common18.commonGlobOptions)(""),ignore:["**/node_modules/**"],cwd:projectRoot,gitignore:!0,absolute:!0}),validResults=(await Promise.all(packageJsonFiles.map(async file=>{try{return await checkPackageJson(file)}catch{return null}}))).filter(r=>r!==null&&r.renderers.length>0);return validResults.length===0?null:{frameworks:[...new Set(validResults.flatMap(r=>r.frameworks))],renderers:[...new Set(validResults.flatMap(r=>r.renderers))],packageJsonFiles:packageJsonFiles.filter((_,i)=>validResults[i]!==null)}},prompt(){return import_ts_dedent16.dedent`
|
|
345
345
|
As part of Storybook's evolution, we're moving from renderer-based to framework-based configuration.
|
|
346
346
|
|
|
347
347
|
This migration will:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook/cli",
|
|
3
|
-
"version": "9.1.0-alpha.
|
|
3
|
+
"version": "9.1.0-alpha.4",
|
|
4
4
|
"description": "Storybook CLI",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook"
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@babel/types": "^7.24.0",
|
|
45
|
-
"@storybook/codemod": "9.1.0-alpha.
|
|
45
|
+
"@storybook/codemod": "9.1.0-alpha.4",
|
|
46
46
|
"@types/semver": "^7.3.4",
|
|
47
47
|
"commander": "^12.1.0",
|
|
48
|
-
"create-storybook": "9.1.0-alpha.
|
|
48
|
+
"create-storybook": "9.1.0-alpha.4",
|
|
49
49
|
"cross-spawn": "^7.0.6",
|
|
50
50
|
"envinfo": "^7.7.3",
|
|
51
51
|
"execa": "^9.5.2",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"p-limit": "^6.2.0",
|
|
57
57
|
"prompts": "^2.4.0",
|
|
58
58
|
"semver": "^7.3.7",
|
|
59
|
-
"storybook": "9.1.0-alpha.
|
|
59
|
+
"storybook": "9.1.0-alpha.4",
|
|
60
60
|
"tiny-invariant": "^1.3.1",
|
|
61
61
|
"ts-dedent": "^2.0.0"
|
|
62
62
|
},
|