@storybook/cli 7.0.0-beta.2 → 7.0.0-beta.20

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/generate.mjs CHANGED
@@ -1,4 +1,4 @@
1
- var __freeze=Object.freeze,__defProp=Object.defineProperty;var __require=(x=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(x,{get:(a,b)=>(typeof require!="undefined"?require:a)[b]}):x)(function(x){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+x+'" is not supported')});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})};var __template=(cooked,raw)=>__freeze(__defProp(cooked,"raw",{value:__freeze(raw||cooked.slice())}));import program from"commander";import path15 from"path";import chalk22 from"chalk";import envinfo from"envinfo";import leven from"leven";import{sync as readUpSync3}from"read-pkg-up";import{logger as logger23}from"@storybook/node-logger";import chalk18 from"chalk";import prompts3 from"prompts";import{telemetry}from"@storybook/telemetry";import{withTelemetry}from"@storybook/core-server";import{minVersion,validRange}from"semver";function ltMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major<major}function gtMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major>major}function eqMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major===major}var SUPPORTED_RENDERERS=["react","react-native","vue","vue3","angular","mithril","riot","ember","marionette","marko","preact","svelte","rax","aurelia"],ProjectType=(ProjectType2=>(ProjectType2.UNDETECTED="UNDETECTED",ProjectType2.UNSUPPORTED="UNSUPPORTED",ProjectType2.REACT_SCRIPTS="REACT_SCRIPTS",ProjectType2.REACT="REACT",ProjectType2.REACT_NATIVE="REACT_NATIVE",ProjectType2.REACT_PROJECT="REACT_PROJECT",ProjectType2.WEBPACK_REACT="WEBPACK_REACT",ProjectType2.NEXTJS="NEXTJS",ProjectType2.VUE="VUE",ProjectType2.VUE3="VUE3",ProjectType2.SFC_VUE="SFC_VUE",ProjectType2.ANGULAR="ANGULAR",ProjectType2.EMBER="EMBER",ProjectType2.ALREADY_HAS_STORYBOOK="ALREADY_HAS_STORYBOOK",ProjectType2.WEB_COMPONENTS="WEB_COMPONENTS",ProjectType2.MITHRIL="MITHRIL",ProjectType2.MARIONETTE="MARIONETTE",ProjectType2.MARKO="MARKO",ProjectType2.HTML="HTML",ProjectType2.RIOT="RIOT",ProjectType2.PREACT="PREACT",ProjectType2.SVELTE="SVELTE",ProjectType2.SVELTEKIT="SVELTEKIT",ProjectType2.RAX="RAX",ProjectType2.AURELIA="AURELIA",ProjectType2.SERVER="SERVER",ProjectType2))(ProjectType||{});var supportedTemplates=[{preset:"SFC_VUE",dependencies:{"vue-loader":versionRange=>ltMajor(versionRange,16),vuetify:versionRange=>ltMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"VUE",dependencies:{vue:versionRange=>ltMajor(versionRange,3),nuxt:versionRange=>ltMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"VUE3",dependencies:{vue:versionRange=>versionRange==="next"||eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"EMBER",dependencies:["ember-cli"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"NEXTJS",dependencies:{next:versionRange=>eqMajor(versionRange,9)||gtMajor(versionRange,9)},matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"REACT_PROJECT",peerDependencies:["react"],matcherFunction:({peerDependencies})=>peerDependencies.every(Boolean)},{preset:"REACT_NATIVE",dependencies:["react-native","react-native-scripts"],matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"REACT_SCRIPTS",files:["/node_modules/.bin/react-scripts"],dependencies:["react-scripts"],matcherFunction:({dependencies,files})=>dependencies.every(Boolean)||files.every(Boolean)},{preset:"WEBPACK_REACT",dependencies:["react","webpack"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"REACT",dependencies:["react"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"ANGULAR",dependencies:["@angular/core"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"WEB_COMPONENTS",dependencies:["lit-element","lit-html","lit"],matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"MITHRIL",dependencies:["mithril"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"MARIONETTE",dependencies:["backbone.marionette"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"MARKO",dependencies:["marko"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"RIOT",dependencies:["riot"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"PREACT",dependencies:["preact"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"SVELTEKIT",dependencies:["@sveltejs/kit"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"SVELTE",dependencies:["svelte"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"RAX",dependencies:["rax"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"AURELIA",dependencies:["aurelia-bootstrapper"],matcherFunction:({dependencies})=>dependencies.every(Boolean)}],unsupportedTemplate={preset:"UNSUPPORTED",dependencies:{nuxt:versionRange=>eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},notInstallableProjectTypes=["UNDETECTED","UNSUPPORTED","ALREADY_HAS_STORYBOOK"],installableProjectTypes=Object.values(ProjectType).filter(type=>!notInstallableProjectTypes.includes(type)).map(type=>type.toLowerCase());import path2 from"path";import fs2 from"fs";import findUp from"find-up";import semver from"semver";import path,{join}from"path";import fs from"fs";import fse from"fs-extra";import chalk from"chalk";import{satisfies}from"semver";import stripJsonComments from"strip-json-comments";import{dirname}from"path";function getCliDir(){return dirname(__require.resolve("@storybook/cli/package.json"))}function getRendererDir(renderer){return dirname(__require.resolve(`@storybook/${renderer}/package.json`,{paths:[process.cwd()]}))}var versions_default={"@storybook/addon-a11y":"7.0.0-beta.2","@storybook/addon-actions":"7.0.0-beta.2","@storybook/addon-backgrounds":"7.0.0-beta.2","@storybook/addon-controls":"7.0.0-beta.2","@storybook/addon-docs":"7.0.0-beta.2","@storybook/addon-essentials":"7.0.0-beta.2","@storybook/addon-highlight":"7.0.0-beta.2","@storybook/addon-interactions":"7.0.0-beta.2","@storybook/addon-jest":"7.0.0-beta.2","@storybook/addon-links":"7.0.0-beta.2","@storybook/addon-measure":"7.0.0-beta.2","@storybook/addon-outline":"7.0.0-beta.2","@storybook/addon-storyshots":"7.0.0-beta.2","@storybook/addon-storyshots-puppeteer":"7.0.0-beta.2","@storybook/addon-storysource":"7.0.0-beta.2","@storybook/addon-toolbars":"7.0.0-beta.2","@storybook/addon-viewport":"7.0.0-beta.2","@storybook/addons":"7.0.0-beta.2","@storybook/angular":"7.0.0-beta.2","@storybook/manager-api":"7.0.0-beta.2","@storybook/blocks":"7.0.0-beta.2","@storybook/builder-manager":"7.0.0-beta.2","@storybook/builder-vite":"7.0.0-beta.2","@storybook/builder-webpack5":"7.0.0-beta.2","@storybook/channel-postmessage":"7.0.0-beta.2","@storybook/channel-websocket":"7.0.0-beta.2","@storybook/channels":"7.0.0-beta.2","@storybook/cli":"7.0.0-beta.2","@storybook/client-api":"7.0.0-beta.2","@storybook/client-logger":"7.0.0-beta.2","@storybook/codemod":"7.0.0-beta.2","@storybook/components":"7.0.0-beta.2","@storybook/core-client":"7.0.0-beta.2","@storybook/core-common":"7.0.0-beta.2","@storybook/core-events":"7.0.0-beta.2","@storybook/core-server":"7.0.0-beta.2","@storybook/core-webpack":"7.0.0-beta.2","@storybook/csf-tools":"7.0.0-beta.2","@storybook/docs-tools":"7.0.0-beta.2","@storybook/ember":"7.0.0-beta.2","@storybook/html":"7.0.0-beta.2","@storybook/html-webpack5":"7.0.0-beta.2","@storybook/html-vite":"7.0.0-beta.2","@storybook/instrumenter":"7.0.0-beta.2","@storybook/nextjs":"7.0.0-beta.2","@storybook/node-logger":"7.0.0-beta.2","@storybook/postinstall":"7.0.0-beta.2","@storybook/preact":"7.0.0-beta.2","@storybook/preact-webpack5":"7.0.0-beta.2","@storybook/preset-html-webpack":"7.0.0-beta.2","@storybook/preset-preact-webpack":"7.0.0-beta.2","@storybook/preset-react-webpack":"7.0.0-beta.2","@storybook/preset-server-webpack":"7.0.0-beta.2","@storybook/preset-svelte-webpack":"7.0.0-beta.2","@storybook/preset-vue-webpack":"7.0.0-beta.2","@storybook/preset-vue3-webpack":"7.0.0-beta.2","@storybook/preset-web-components-webpack":"7.0.0-beta.2","@storybook/preview":"7.0.0-beta.2","@storybook/preview-api":"7.0.0-beta.2","@storybook/preview-web":"7.0.0-beta.2","@storybook/react":"7.0.0-beta.2","@storybook/react-vite":"7.0.0-beta.2","@storybook/react-webpack5":"7.0.0-beta.2","@storybook/router":"7.0.0-beta.2","@storybook/server":"7.0.0-beta.2","@storybook/server-webpack5":"7.0.0-beta.2","@storybook/source-loader":"7.0.0-beta.2","@storybook/store":"7.0.0-beta.2","@storybook/svelte":"7.0.0-beta.2","@storybook/sveltekit":"7.0.0-beta.2","@storybook/svelte-vite":"7.0.0-beta.2","@storybook/svelte-webpack5":"7.0.0-beta.2","@storybook/telemetry":"7.0.0-beta.2","@storybook/theming":"7.0.0-beta.2","@storybook/manager":"7.0.0-beta.2","@storybook/vue":"7.0.0-beta.2","@storybook/vue-vite":"7.0.0-beta.2","@storybook/vue-webpack5":"7.0.0-beta.2","@storybook/vue3":"7.0.0-beta.2","@storybook/vue3-vite":"7.0.0-beta.2","@storybook/vue3-webpack5":"7.0.0-beta.2","@storybook/web-components":"7.0.0-beta.2","@storybook/web-components-webpack5":"7.0.0-beta.2","@storybook/web-components-vite":"7.0.0-beta.2",sb:"7.0.0-beta.2",storybook:"7.0.0-beta.2"};var logger=console;function getBowerJson(){let bowerJsonPath=path.resolve("bower.json");if(!fs.existsSync(bowerJsonPath))return!1;let jsonContent=fs.readFileSync(bowerJsonPath,"utf8");return JSON.parse(jsonContent)}function readFileAsJson(jsonPath,allowComments){let filePath=path.resolve(jsonPath);if(!fs.existsSync(filePath))return!1;let fileContent=fs.readFileSync(filePath,"utf8"),jsonContent=allowComments?stripJsonComments(fileContent):fileContent;try{return JSON.parse(jsonContent)}catch(e){throw logger.error(chalk.red(`Invalid json in file: ${filePath}`)),e}}var writeFileAsJson=(jsonPath,content)=>{let filePath=path.resolve(jsonPath);return fs.existsSync(filePath)?(fs.writeFileSync(filePath,`${JSON.stringify(content,null,2)}
1
+ var __defProp=Object.defineProperty;var __require=(x=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(x,{get:(a,b)=>(typeof require<"u"?require:a)[b]}):x)(function(x){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+x+'" is not supported')});var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})};import program from"commander";import path16 from"path";import chalk26 from"chalk";import envinfo from"envinfo";import leven from"leven";import{sync as readUpSync3}from"read-pkg-up";import{logger as logger27}from"@storybook/node-logger";import chalk22 from"chalk";import prompts3 from"prompts";import{telemetry}from"@storybook/telemetry";import{withTelemetry}from"@storybook/core-server";import{minVersion,validRange}from"semver";function ltMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major<major}function gtMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major>major}function eqMajor(versionRange,major){return validRange(versionRange)&&minVersion(versionRange).major===major}var SUPPORTED_RENDERERS=["react","react-native","vue","vue3","angular","mithril","riot","ember","marionette","marko","preact","svelte","rax","aurelia"],ProjectType=(ProjectType2=>(ProjectType2.UNDETECTED="UNDETECTED",ProjectType2.UNSUPPORTED="UNSUPPORTED",ProjectType2.REACT_SCRIPTS="REACT_SCRIPTS",ProjectType2.REACT="REACT",ProjectType2.REACT_NATIVE="REACT_NATIVE",ProjectType2.REACT_PROJECT="REACT_PROJECT",ProjectType2.WEBPACK_REACT="WEBPACK_REACT",ProjectType2.NEXTJS="NEXTJS",ProjectType2.VUE="VUE",ProjectType2.VUE3="VUE3",ProjectType2.SFC_VUE="SFC_VUE",ProjectType2.ANGULAR="ANGULAR",ProjectType2.EMBER="EMBER",ProjectType2.ALREADY_HAS_STORYBOOK="ALREADY_HAS_STORYBOOK",ProjectType2.WEB_COMPONENTS="WEB_COMPONENTS",ProjectType2.MITHRIL="MITHRIL",ProjectType2.MARIONETTE="MARIONETTE",ProjectType2.MARKO="MARKO",ProjectType2.HTML="HTML",ProjectType2.RIOT="RIOT",ProjectType2.PREACT="PREACT",ProjectType2.SVELTE="SVELTE",ProjectType2.SVELTEKIT="SVELTEKIT",ProjectType2.RAX="RAX",ProjectType2.AURELIA="AURELIA",ProjectType2.SERVER="SERVER",ProjectType2))(ProjectType||{});var supportedTemplates=[{preset:"SFC_VUE",dependencies:{"vue-loader":versionRange=>ltMajor(versionRange,16),vuetify:versionRange=>ltMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"VUE",dependencies:{vue:versionRange=>ltMajor(versionRange,3),nuxt:versionRange=>ltMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"VUE3",dependencies:{vue:versionRange=>versionRange==="next"||eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"EMBER",dependencies:["ember-cli"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"NEXTJS",dependencies:{next:versionRange=>eqMajor(versionRange,9)||gtMajor(versionRange,9)},matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"REACT_PROJECT",peerDependencies:["react"],matcherFunction:({peerDependencies})=>peerDependencies.every(Boolean)},{preset:"REACT_NATIVE",dependencies:["react-native","react-native-scripts"],matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"REACT_SCRIPTS",files:["/node_modules/.bin/react-scripts"],dependencies:["react-scripts"],matcherFunction:({dependencies,files})=>dependencies.every(Boolean)||files.every(Boolean)},{preset:"WEBPACK_REACT",dependencies:["react","webpack"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"REACT",dependencies:["react"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"ANGULAR",dependencies:["@angular/core"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"WEB_COMPONENTS",dependencies:["lit-element","lit-html","lit"],matcherFunction:({dependencies})=>dependencies.some(Boolean)},{preset:"MITHRIL",dependencies:["mithril"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"MARIONETTE",dependencies:["backbone.marionette"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"MARKO",dependencies:["marko"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"RIOT",dependencies:["riot"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"PREACT",dependencies:["preact"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"SVELTEKIT",dependencies:["@sveltejs/kit"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"SVELTE",dependencies:["svelte"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"RAX",dependencies:["rax"],matcherFunction:({dependencies})=>dependencies.every(Boolean)},{preset:"AURELIA",dependencies:["aurelia-bootstrapper"],matcherFunction:({dependencies})=>dependencies.every(Boolean)}],unsupportedTemplate={preset:"UNSUPPORTED",dependencies:{nuxt:versionRange=>eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies.some(Boolean)},notInstallableProjectTypes=["UNDETECTED","UNSUPPORTED","ALREADY_HAS_STORYBOOK"],installableProjectTypes=Object.values(ProjectType).filter(type=>!notInstallableProjectTypes.includes(type)).map(type=>type.toLowerCase());import path2 from"path";import fs2 from"fs";import findUp from"find-up";import semver from"semver";import path,{join}from"path";import fs from"fs";import fse from"fs-extra";import chalk from"chalk";import{satisfies}from"semver";import stripJsonComments from"strip-json-comments";import{dirname}from"path";function getCliDir(){return dirname(__require.resolve("@storybook/cli/package.json"))}function getRendererDir(renderer){return dirname(__require.resolve(`@storybook/${renderer}/package.json`,{paths:[process.cwd()]}))}var versions_default={"@storybook/addon-a11y":"7.0.0-beta.20","@storybook/addon-actions":"7.0.0-beta.20","@storybook/addon-backgrounds":"7.0.0-beta.20","@storybook/addon-controls":"7.0.0-beta.20","@storybook/addon-docs":"7.0.0-beta.20","@storybook/addon-essentials":"7.0.0-beta.20","@storybook/addon-highlight":"7.0.0-beta.20","@storybook/addon-interactions":"7.0.0-beta.20","@storybook/addon-jest":"7.0.0-beta.20","@storybook/addon-links":"7.0.0-beta.20","@storybook/addon-measure":"7.0.0-beta.20","@storybook/addon-outline":"7.0.0-beta.20","@storybook/addon-storyshots":"7.0.0-beta.20","@storybook/addon-storyshots-puppeteer":"7.0.0-beta.20","@storybook/addon-storysource":"7.0.0-beta.20","@storybook/addon-toolbars":"7.0.0-beta.20","@storybook/addon-viewport":"7.0.0-beta.20","@storybook/addons":"7.0.0-beta.20","@storybook/angular":"7.0.0-beta.20","@storybook/manager-api":"7.0.0-beta.20","@storybook/blocks":"7.0.0-beta.20","@storybook/builder-manager":"7.0.0-beta.20","@storybook/builder-vite":"7.0.0-beta.20","@storybook/builder-webpack5":"7.0.0-beta.20","@storybook/channel-postmessage":"7.0.0-beta.20","@storybook/channel-websocket":"7.0.0-beta.20","@storybook/channels":"7.0.0-beta.20","@storybook/cli":"7.0.0-beta.20","@storybook/client-api":"7.0.0-beta.20","@storybook/client-logger":"7.0.0-beta.20","@storybook/codemod":"7.0.0-beta.20","@storybook/components":"7.0.0-beta.20","@storybook/core-client":"7.0.0-beta.20","@storybook/core-common":"7.0.0-beta.20","@storybook/core-events":"7.0.0-beta.20","@storybook/core-server":"7.0.0-beta.20","@storybook/core-webpack":"7.0.0-beta.20","@storybook/csf-tools":"7.0.0-beta.20","@storybook/docs-tools":"7.0.0-beta.20","@storybook/ember":"7.0.0-beta.20","@storybook/html":"7.0.0-beta.20","@storybook/html-webpack5":"7.0.0-beta.20","@storybook/html-vite":"7.0.0-beta.20","@storybook/instrumenter":"7.0.0-beta.20","@storybook/nextjs":"7.0.0-beta.20","@storybook/node-logger":"7.0.0-beta.20","@storybook/postinstall":"7.0.0-beta.20","@storybook/preact":"7.0.0-beta.20","@storybook/preact-vite":"7.0.0-beta.20","@storybook/preact-webpack5":"7.0.0-beta.20","@storybook/preset-html-webpack":"7.0.0-beta.20","@storybook/preset-preact-webpack":"7.0.0-beta.20","@storybook/preset-react-webpack":"7.0.0-beta.20","@storybook/preset-server-webpack":"7.0.0-beta.20","@storybook/preset-svelte-webpack":"7.0.0-beta.20","@storybook/preset-vue-webpack":"7.0.0-beta.20","@storybook/preset-vue3-webpack":"7.0.0-beta.20","@storybook/preset-web-components-webpack":"7.0.0-beta.20","@storybook/preview":"7.0.0-beta.20","@storybook/preview-api":"7.0.0-beta.20","@storybook/preview-web":"7.0.0-beta.20","@storybook/react":"7.0.0-beta.20","@storybook/react-vite":"7.0.0-beta.20","@storybook/react-webpack5":"7.0.0-beta.20","@storybook/router":"7.0.0-beta.20","@storybook/server":"7.0.0-beta.20","@storybook/server-webpack5":"7.0.0-beta.20","@storybook/source-loader":"7.0.0-beta.20","@storybook/store":"7.0.0-beta.20","@storybook/svelte":"7.0.0-beta.20","@storybook/sveltekit":"7.0.0-beta.20","@storybook/svelte-vite":"7.0.0-beta.20","@storybook/svelte-webpack5":"7.0.0-beta.20","@storybook/telemetry":"7.0.0-beta.20","@storybook/theming":"7.0.0-beta.20","@storybook/manager":"7.0.0-beta.20","@storybook/vue":"7.0.0-beta.20","@storybook/vue-vite":"7.0.0-beta.20","@storybook/vue-webpack5":"7.0.0-beta.20","@storybook/vue3":"7.0.0-beta.20","@storybook/vue3-vite":"7.0.0-beta.20","@storybook/vue3-webpack5":"7.0.0-beta.20","@storybook/web-components":"7.0.0-beta.20","@storybook/web-components-webpack5":"7.0.0-beta.20","@storybook/web-components-vite":"7.0.0-beta.20",sb:"7.0.0-beta.20",storybook:"7.0.0-beta.20"};var logger=console;function getBowerJson(){let bowerJsonPath=path.resolve("bower.json");if(!fs.existsSync(bowerJsonPath))return!1;let jsonContent=fs.readFileSync(bowerJsonPath,"utf8");return JSON.parse(jsonContent)}function readFileAsJson(jsonPath,allowComments){let filePath=path.resolve(jsonPath);if(!fs.existsSync(filePath))return!1;let fileContent=fs.readFileSync(filePath,"utf8"),jsonContent=allowComments?stripJsonComments(fileContent):fileContent;try{return JSON.parse(jsonContent)}catch(e){throw logger.error(chalk.red(`Invalid json in file: ${filePath}`)),e}}var writeFileAsJson=(jsonPath,content)=>{let filePath=path.resolve(jsonPath);return fs.existsSync(filePath)?(fs.writeFileSync(filePath,`${JSON.stringify(content,null,2)}
2
2
  `),!0):!1},commandLog=message=>(process.stdout.write(chalk.cyan(" \u2022 ")+message),(errorMessage,errorInfo)=>{if(errorMessage){if(process.stdout.write(`. ${chalk.red("\u2716")}
3
3
  `),logger.error(`
4
4
  ${chalk.red(errorMessage)}`),!errorInfo)return;let newErrorInfo=errorInfo.split(`
@@ -8,8 +8,8 @@ var __freeze=Object.freeze,__defProp=Object.defineProperty;var __require=(x=>typ
8
8
  `)});function paddedLog(message){let newMessage=message.split(`
9
9
  `).map(line=>` ${line}`).join(`
10
10
  `);logger.log(newMessage)}function getChars(char,amount){let line="";for(let lc=0;lc<amount;lc+=1)line+=char;return line}function codeLog(codeLines,leftPadAmount){let maxLength=0,finalResult=codeLines.map(line=>(maxLength=line.length>maxLength?line.length:maxLength,line)).map(line=>{let rightPadAmount=maxLength-line.length,newLine=line+getChars(" ",rightPadAmount);return newLine=getChars(" ",leftPadAmount||2)+chalk.inverse(` ${newLine} `),newLine}).join(`
11
- `);logger.log(finalResult)}async function getBabelDependencies(packageManager,packageJson){let dependenciesToAdd=[],babelLoaderVersion="^8.0.0-0",babelCoreVersion=packageJson.dependencies["babel-core"]||packageJson.devDependencies["babel-core"];if(babelCoreVersion){let latestCompatibleBabelVersion=await packageManager.latestVersion("babel-core",babelCoreVersion);satisfies(latestCompatibleBabelVersion,"^6.0.0")&&(babelLoaderVersion="^7.0.0")}else if(!packageJson.dependencies["@babel/core"]&&!packageJson.devDependencies["@babel/core"]){let babelCoreInstallVersion=await packageManager.getVersion("@babel/core");dependenciesToAdd.push(`@babel/core@${babelCoreInstallVersion}`)}if(!packageJson.dependencies["babel-loader"]&&!packageJson.devDependencies["babel-loader"]){let babelLoaderInstallVersion=await packageManager.getVersion("babel-loader",babelLoaderVersion);dependenciesToAdd.push(`babel-loader@${babelLoaderInstallVersion}`)}return dependenciesToAdd}function copyTemplate(templateRoot){let templateDir=path.resolve(templateRoot,"template-csf/");if(!fs.existsSync(templateDir))throw new Error("Couldn't find template dir");fse.copySync(templateDir,".",{overwrite:!0})}async function copyComponents(renderer,language){let languageFolderMapping={["javascript"]:"js",["typescript"]:"ts",["typescript-legacy"]:"ts-legacy"},componentsPath=async()=>{let baseDir=getRendererDir(renderer),assetsDir=join(baseDir,"template/cli"),assetsLanguage=join(assetsDir,languageFolderMapping[language]),assetsJS=join(assetsDir,languageFolderMapping["javascript"]),assetsTSLegacy=join(assetsDir,languageFolderMapping["typescript-legacy"]),assetsTS=join(assetsDir,languageFolderMapping["typescript"]);if(await fse.pathExists(assetsLanguage))return assetsLanguage;if(language==="typescript"&&await fse.pathExists(assetsTSLegacy))return assetsTSLegacy;if(language==="typescript-legacy"&&await fse.pathExists(assetsTS))return assetsTS;if(await fse.pathExists(assetsJS))return assetsJS;if(await fse.pathExists(assetsDir))return assetsDir;throw new Error(`Unsupported renderer: ${renderer}`)},destinationPath=await(async()=>await fse.pathExists("./src")?"./src/stories":"./stories")();await fse.copy(join(getCliDir(),"rendererAssets/common"),destinationPath,{overwrite:!0}),await fse.copy(await componentsPath(),destinationPath,{overwrite:!0})}function getStorybookVersionSpecifier(packageJson){let allDeps={...packageJson.dependencies,...packageJson.devDependencies},storybookPackage=Object.keys(allDeps).find(name=>versions_default[name]);if(!storybookPackage)throw new Error("Couldn't find any official storybook packages in package.json");return allDeps[storybookPackage]}var regex=/[\s"\n]next.*?(\d+).*/,detectNextJS=packageManager=>{try{let out="";if(packageManager.type==="npm")try{out=packageManager.executeCommand("npm",["ls","next"])}catch{out=packageManager.executeCommand("npm",["why","next"])}else out=packageManager.executeCommand("yarn",["why","next"]);let[,version]=out.match(regex);return version&&parseInt(version,10)?parseInt(version,10):!1}catch{}return!1};var viteConfigFiles=["vite.config.ts","vite.config.js","vite.config.mjs"],hasDependency=(packageJson,name,matcher)=>{let version=packageJson.dependencies?.[name]||packageJson.devDependencies?.[name];return version&&typeof matcher=="function"?matcher(version):!!version},hasPeerDependency=(packageJson,name,matcher)=>{let version=packageJson.peerDependencies?.[name];return version&&typeof matcher=="function"?matcher(version):!!version},getFrameworkPreset=(packageJson,framework)=>{let matcher={dependencies:[!1],peerDependencies:[!1],files:[!1]},{preset,files,dependencies,peerDependencies,matcherFunction}=framework,dependencySearches=[];Array.isArray(dependencies)?dependencySearches=dependencies.map(name=>[name,void 0]):typeof dependencies=="object"&&(dependencySearches=Object.entries(dependencies)),dependencySearches.length>0&&(matcher.dependencies=dependencySearches.map(([name,matchFn])=>hasDependency(packageJson,name,matchFn)));let peerDependencySearches=[];return Array.isArray(peerDependencies)?peerDependencySearches=peerDependencies.map(name=>[name,void 0]):typeof peerDependencies=="object"&&(peerDependencySearches=Object.entries(peerDependencies)),peerDependencySearches.length>0&&(matcher.peerDependencies=peerDependencySearches.map(([name,matchFn])=>hasPeerDependency(packageJson,name,matchFn))),Array.isArray(files)&&files.length>0&&(matcher.files=files.map(name=>fs2.existsSync(path2.join(process.cwd(),name)))),matcherFunction(matcher)?preset:null};function detectFrameworkPreset(packageJson={}){let result=[...supportedTemplates,unsupportedTemplate].find(framework=>getFrameworkPreset(packageJson,framework)!==null);return result?result.preset:"UNDETECTED"}function detectBuilder(packageManager){if(findUp.sync(viteConfigFiles))return paddedLog("Detected vite project, setting builder to @storybook/builder-vite"),"vite";let nextJSVersion=detectNextJS(packageManager);return nextJSVersion&&nextJSVersion>=11?"webpack5":"webpack5"}function isStorybookInstalled(dependencies,force){return dependencies&&!force&&dependencies.devDependencies&&SUPPORTED_RENDERERS.reduce((storybookPresent,framework)=>storybookPresent||!!dependencies.devDependencies[`@storybook/${framework}`],!1)?"ALREADY_HAS_STORYBOOK":!1}function detectLanguage(packageJson){let language="javascript";return packageJson&&(hasDependency(packageJson,"typescript",version=>semver.gte(semver.coerce(version),"4.9.0"))&&(!hasDependency(packageJson,"prettier")||hasDependency(packageJson,"prettier",version=>semver.gte(semver.coerce(version),"2.8.0")))&&(!hasDependency(packageJson,"@babel/plugin-transform-typescript")||hasDependency(packageJson,"@babel/plugin-transform-typescript",version=>semver.gte(semver.coerce(version),"7.20.0")))&&(!hasDependency(packageJson,"@typescript-eslint/parser")||hasDependency(packageJson,"@typescript-eslint/parser",version=>semver.gte(semver.coerce(version),"5.44.0")))?language="typescript-legacy":hasDependency(packageJson,"typescript")&&(language="typescript-legacy")),language}function detect(packageJson,options={}){let bowerJson=getBowerJson();if(!packageJson&&!bowerJson)return"UNDETECTED";let storyBookInstalled=isStorybookInstalled(packageJson,options.force);return storyBookInstalled||(options.html?"HTML":detectFrameworkPreset(packageJson||bowerJson))}import path7,{join as join2}from"path";import semver3 from"semver";import*as path3 from"path";import*as fs3 from"fs";import{pathExists}from"fs-extra";function getAngularAppTsConfigPath(){let angularJson=readFileAsJson("angular.json",!0),defaultProject=getDefaultProjectName(angularJson),tsConfigPath=angularJson.projects[defaultProject].architect.build.options.tsConfig;return!tsConfigPath||!fs3.existsSync(path3.resolve(tsConfigPath))?!1:tsConfigPath}function getAngularAppTsConfigJson(){let tsConfigPath=getAngularAppTsConfigPath();return tsConfigPath?readFileAsJson(tsConfigPath,!0):!1}function setStorybookTsconfigExtendsPath(tsconfigJson){let angularProjectTsConfigPath=getAngularAppTsConfigPath(),newTsconfigJson={...tsconfigJson};return newTsconfigJson.extends=`../${angularProjectTsConfigPath}`,newTsconfigJson}function editStorybookTsConfig(tsconfigPath){let tsConfigJson;try{tsConfigJson=readFileAsJson(tsconfigPath)}catch(e){throw e.name==="SyntaxError"&&e.message.indexOf("Unexpected token /")>-1?new Error(`Comments are disallowed in ${tsconfigPath}`):e}tsConfigJson=setStorybookTsconfigExtendsPath(tsConfigJson),writeFileAsJson(tsconfigPath,tsConfigJson)}function getDefaultProjectName(angularJson){let{defaultProject,projects}=angularJson;if(projects?.storybook)return"storybook";if(defaultProject)return defaultProject;let firstProjectName=projects?Object.keys(projects)[0]:void 0;if(firstProjectName)return firstProjectName}function checkForProjects(){let{projects}=readFileAsJson("angular.json",!0);if(!projects||Object.keys(projects).length===0)throw new Error(`Could not find a project in your Angular workspace.
12
- Add a project and re-run the installation`)}async function getBaseTsConfigName(){return await pathExists("./tsconfig.base.json")?"tsconfig.base.json":"tsconfig.json"}import path6 from"path";import fse3 from"fs-extra";import{dedent as dedent2}from"ts-dedent";import fse2 from"fs-extra";import{dedent}from"ts-dedent";async function configureMain({addons,extensions=["js","jsx","ts","tsx"],commonJs=!1,...custom}){let prefix=await fse2.pathExists("./src")?"../src":"../stories",config={stories:[`${prefix}/**/*.mdx`,`${prefix}/**/*.stories.@(${extensions.join("|")})`],addons,...custom},stringified=`module.exports = ${JSON.stringify(config,null,2).replace(/\\"/g,'"').replace(/['"]%%/g,"").replace(/%%['"]/g,"").replace(/\\n/g,`\r
11
+ `);logger.log(finalResult)}async function getBabelDependencies(packageManager,packageJson){let dependenciesToAdd=[],babelLoaderVersion="^8.0.0-0",babelCoreVersion=packageJson.dependencies["babel-core"]||packageJson.devDependencies["babel-core"];if(babelCoreVersion){let latestCompatibleBabelVersion=await packageManager.latestVersion("babel-core",babelCoreVersion);satisfies(latestCompatibleBabelVersion,"^6.0.0")&&(babelLoaderVersion="^7.0.0")}else if(!packageJson.dependencies["@babel/core"]&&!packageJson.devDependencies["@babel/core"]){let babelCoreInstallVersion=await packageManager.getVersion("@babel/core");dependenciesToAdd.push(`@babel/core@${babelCoreInstallVersion}`)}if(!packageJson.dependencies["babel-loader"]&&!packageJson.devDependencies["babel-loader"]){let babelLoaderInstallVersion=await packageManager.getVersion("babel-loader",babelLoaderVersion);dependenciesToAdd.push(`babel-loader@${babelLoaderInstallVersion}`)}return dependenciesToAdd}function copyTemplate(templateRoot){let templateDir=path.resolve(templateRoot,"template-csf/");if(!fs.existsSync(templateDir))throw new Error("Couldn't find template dir");fse.copySync(templateDir,".",{overwrite:!0})}async function copyComponents(renderer,language){let languageFolderMapping={["javascript"]:"js",["typescript"]:"ts",["typescript-legacy"]:"ts-legacy"},componentsPath=async()=>{let baseDir=getRendererDir(renderer),assetsDir=join(baseDir,"template/cli"),assetsLanguage=join(assetsDir,languageFolderMapping[language]),assetsJS=join(assetsDir,languageFolderMapping["javascript"]),assetsTSLegacy=join(assetsDir,languageFolderMapping["typescript-legacy"]),assetsTS=join(assetsDir,languageFolderMapping["typescript"]);if(await fse.pathExists(assetsLanguage))return assetsLanguage;if(language==="typescript"&&await fse.pathExists(assetsTSLegacy))return assetsTSLegacy;if(language==="typescript-legacy"&&await fse.pathExists(assetsTS))return assetsTS;if(await fse.pathExists(assetsJS))return assetsJS;if(await fse.pathExists(assetsDir))return assetsDir;throw new Error(`Unsupported renderer: ${renderer}`)},destinationPath=await(async()=>await fse.pathExists("./src")?"./src/stories":"./stories")();await fse.copy(join(getCliDir(),"rendererAssets/common"),destinationPath,{overwrite:!0}),await fse.copy(await componentsPath(),destinationPath,{overwrite:!0})}function getStorybookVersionSpecifier(packageJson){let allDeps={...packageJson.dependencies,...packageJson.devDependencies},storybookPackage=Object.keys(allDeps).find(name=>versions_default[name]);if(!storybookPackage)throw new Error("Couldn't find any official storybook packages in package.json");return allDeps[storybookPackage]}var regex=/[\s"\n]next.*?(\d+).*/,detectNextJS=packageManager=>{try{let out="";if(packageManager.type==="npm")try{out=packageManager.executeCommand("npm",["ls","next"])}catch{out=packageManager.executeCommand("npm",["why","next"])}else out=packageManager.executeCommand("yarn",["why","next"]);let[,version]=out.match(regex);return version&&parseInt(version,10)?parseInt(version,10):!1}catch{}return!1};var viteConfigFiles=["vite.config.ts","vite.config.js","vite.config.mjs"],hasDependency=(packageJson,name,matcher)=>{let version=packageJson.dependencies?.[name]||packageJson.devDependencies?.[name];return version&&typeof matcher=="function"?matcher(version):!!version},hasPeerDependency=(packageJson,name,matcher)=>{let version=packageJson.peerDependencies?.[name];return version&&typeof matcher=="function"?matcher(version):!!version},getFrameworkPreset=(packageJson,framework)=>{let matcher={dependencies:[!1],peerDependencies:[!1],files:[!1]},{preset,files,dependencies,peerDependencies,matcherFunction}=framework,dependencySearches=[];Array.isArray(dependencies)?dependencySearches=dependencies.map(name=>[name,void 0]):typeof dependencies=="object"&&(dependencySearches=Object.entries(dependencies)),dependencySearches.length>0&&(matcher.dependencies=dependencySearches.map(([name,matchFn])=>hasDependency(packageJson,name,matchFn)));let peerDependencySearches=[];return Array.isArray(peerDependencies)?peerDependencySearches=peerDependencies.map(name=>[name,void 0]):typeof peerDependencies=="object"&&(peerDependencySearches=Object.entries(peerDependencies)),peerDependencySearches.length>0&&(matcher.peerDependencies=peerDependencySearches.map(([name,matchFn])=>hasPeerDependency(packageJson,name,matchFn))),Array.isArray(files)&&files.length>0&&(matcher.files=files.map(name=>fs2.existsSync(path2.join(process.cwd(),name)))),matcherFunction(matcher)?preset:null};function detectFrameworkPreset(packageJson={}){let result=[...supportedTemplates,unsupportedTemplate].find(framework=>getFrameworkPreset(packageJson,framework)!==null);return result?result.preset:"UNDETECTED"}function detectBuilder(packageManager){if(findUp.sync(viteConfigFiles))return paddedLog("Detected vite project, setting builder to @storybook/builder-vite"),"vite";let nextJSVersion=detectNextJS(packageManager);return nextJSVersion&&nextJSVersion>=11?"webpack5":"webpack5"}function isStorybookInstalled(dependencies,force){return dependencies&&!force&&dependencies.devDependencies&&SUPPORTED_RENDERERS.reduce((storybookPresent,framework)=>storybookPresent||!!dependencies.devDependencies[`@storybook/${framework}`],!1)?"ALREADY_HAS_STORYBOOK":!1}function detectLanguage(packageJson){let language="javascript";return packageJson&&(hasDependency(packageJson,"typescript",version=>semver.gte(semver.coerce(version),"4.9.0"))&&(!hasDependency(packageJson,"prettier")||hasDependency(packageJson,"prettier",version=>semver.gte(semver.coerce(version),"2.8.0")))&&(!hasDependency(packageJson,"@babel/plugin-transform-typescript")||hasDependency(packageJson,"@babel/plugin-transform-typescript",version=>semver.gte(semver.coerce(version),"7.20.0")))&&(!hasDependency(packageJson,"@typescript-eslint/parser")||hasDependency(packageJson,"@typescript-eslint/parser",version=>semver.gte(semver.coerce(version),"5.44.0")))&&(!hasDependency(packageJson,"eslint-plugin-storybook")||hasDependency(packageJson,"eslint-plugin-storybook",version=>semver.gte(semver.coerce(version),"0.6.8")))?language="typescript":hasDependency(packageJson,"typescript")&&(language="typescript-legacy")),language}function detect(packageJson,options={}){let bowerJson=getBowerJson();if(!packageJson&&!bowerJson)return"UNDETECTED";let storyBookInstalled=isStorybookInstalled(packageJson,options.force);return storyBookInstalled||(options.html?"HTML":detectFrameworkPreset(packageJson||bowerJson))}import path8,{join as join2}from"path";import semver2 from"semver";import*as path3 from"path";import*as fs3 from"fs";import{pathExists}from"fs-extra";function getAngularAppTsConfigPath(){let angularJson=readFileAsJson("angular.json",!0),defaultProject=getDefaultProjectName(angularJson),tsConfigPath=angularJson.projects[defaultProject].architect.build.options.tsConfig;return!tsConfigPath||!fs3.existsSync(path3.resolve(tsConfigPath))?!1:tsConfigPath}function getAngularAppTsConfigJson(){let tsConfigPath=getAngularAppTsConfigPath();return tsConfigPath?readFileAsJson(tsConfigPath,!0):!1}function setStorybookTsconfigExtendsPath(tsconfigJson){let angularProjectTsConfigPath=getAngularAppTsConfigPath(),newTsconfigJson={...tsconfigJson};return newTsconfigJson.extends=`../${angularProjectTsConfigPath}`,newTsconfigJson}function editStorybookTsConfig(tsconfigPath){let tsConfigJson;try{tsConfigJson=readFileAsJson(tsconfigPath)}catch(e){throw e.name==="SyntaxError"&&e.message.indexOf("Unexpected token /")>-1?new Error(`Comments are disallowed in ${tsconfigPath}`):e}tsConfigJson=setStorybookTsconfigExtendsPath(tsConfigJson),writeFileAsJson(tsconfigPath,tsConfigJson)}function getDefaultProjectName(angularJson){let{defaultProject,projects}=angularJson;if(projects?.storybook)return"storybook";if(defaultProject)return defaultProject;let firstProjectName=projects?Object.keys(projects)[0]:void 0;if(firstProjectName)return firstProjectName}function checkForProjects(){let{projects}=readFileAsJson("angular.json",!0);if(!projects||Object.keys(projects).length===0)throw new Error(`Could not find a project in your Angular workspace.
12
+ Add a project and re-run the installation`)}async function getBaseTsConfigName(){return await pathExists("./tsconfig.base.json")?"tsconfig.base.json":"tsconfig.json"}import path7 from"path";import fse3 from"fs-extra";import{dedent as dedent2}from"ts-dedent";import fse2 from"fs-extra";import{dedent}from"ts-dedent";async function configureMain({addons,extensions=["js","jsx","ts","tsx"],commonJs=!1,...custom}){let prefix=await fse2.pathExists("./src")?"../src":"../stories",config={stories:[`${prefix}/**/*.mdx`,`${prefix}/**/*.stories.@(${extensions.join("|")})`],addons,...custom},stringified=`module.exports = ${JSON.stringify(config,null,2).replace(/\\"/g,'"').replace(/['"]%%/g,"").replace(/%%['"]/g,"").replace(/\\n/g,`\r
13
13
  `)}`;await fse2.writeFile(`./.storybook/main.${commonJs?"cjs":"js"}`,dedent`
14
14
  const path = require('path');
15
15
  ${stringified}
@@ -18,7 +18,7 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
18
18
  import docJson from "../documentation.json";
19
19
  setCompodocJson(docJson);
20
20
 
21
- `.trimStart(),extraParameters:"docs: { inlineStories: true },"}};async function configurePreview(framework){let{prefix="",extraParameters=""}=frameworkToPreviewParts[framework]||{},previewPath="./.storybook/preview.js";if(await fse2.pathExists(previewPath))return;let preview=dedent`
21
+ `.trimStart()}};async function configurePreview(framework){let{prefix="",extraParameters=""}=frameworkToPreviewParts[framework]||{},previewPath="./.storybook/preview.js";if(await fse2.pathExists(previewPath))return;let preview=dedent`
22
22
  ${prefix}
23
23
  export const parameters = {
24
24
  actions: { argTypesRegex: "^on[A-Z].*" },
@@ -30,18 +30,18 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
30
30
  },
31
31
  ${extraParameters}
32
32
  }`.replace(`
33
- `,"").trim();await fse2.writeFile(previewPath,preview,{encoding:"utf8"})}import deprecate from"util-deprecate";var useNpmWarning=deprecate(()=>{},"`--use-npm` is deprecated and will be removed in Storybook 8.0. \nPlease use the `--package-manager=npm` option instead.\nRead more at https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#cli-option---use-npm-deprecated");import{sync as spawnSync2}from"cross-spawn";import{sync as findUpSync}from"find-up";import semver2 from"semver";import chalk2 from"chalk";import{gt,satisfies as satisfies2}from"semver";import{sync as spawnSync}from"cross-spawn";import path4 from"path";import fs4 from"fs";var logger2=console;function getPackageDetails(pkg2){let idx=pkg2.lastIndexOf("@");if(idx<=0)return[pkg2,void 0];let packageName=pkg2.slice(0,idx),packageVersion=pkg2.slice(idx+1);return[packageName,packageVersion]}var JsPackageManager=class{setRegistryURL(url){url?this.executeCommand("npm",["config","set","registry",url]):this.executeCommand("npm",["config","delete","registry"])}getRegistryURL(){let url=this.executeCommand("npm",["config","get","registry"]).trim();return url==="undefined"?void 0:url}constructor(options){this.cwd=options?.cwd}installDependencies(){let done=commandLog("Preparing to install dependencies");done(),logger2.log(),logger2.log(),done=commandLog("Installing dependencies");try{this.runInstall()}catch{done("An error occurred while installing dependencies."),process.exit(1)}done()}packageJsonPath(){return this.cwd?path4.resolve(this.cwd,"package.json"):path4.resolve("package.json")}readPackageJson(){let packageJsonPath=this.packageJsonPath();if(!fs4.existsSync(packageJsonPath))throw new Error(`Could not read package.json file at ${packageJsonPath}`);let jsonContent=fs4.readFileSync(packageJsonPath,"utf8");return JSON.parse(jsonContent)}writePackageJson(packageJson){let content=`${JSON.stringify(packageJson,null,2)}
33
+ `,"").trim();await fse2.writeFile(previewPath,preview,{encoding:"utf8"})}import deprecate from"util-deprecate";var useNpmWarning=deprecate(()=>{},"`--use-npm` is deprecated and will be removed in Storybook 8.0. \nPlease use the `--package-manager=npm` option instead.\nRead more at https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#cli-option---use-npm-deprecated");import path5 from"path";import{sync as spawnSync2}from"cross-spawn";import{sync as findUpSync}from"find-up";import chalk2 from"chalk";import{gt,satisfies as satisfies2}from"semver";import{sync as spawnSync}from"cross-spawn";import path4 from"path";import fs4 from"fs";var logger2=console;function getPackageDetails(pkg2){let idx=pkg2.lastIndexOf("@");if(idx<=0)return[pkg2,void 0];let packageName=pkg2.slice(0,idx),packageVersion=pkg2.slice(idx+1);return[packageName,packageVersion]}var JsPackageManager=class{setRegistryURL(url){url?this.executeCommand("npm",["config","set","registry",url]):this.executeCommand("npm",["config","delete","registry"])}getRegistryURL(){let url=this.executeCommand("npm",["config","get","registry"]).trim();return url==="undefined"?void 0:url}constructor(options){this.cwd=options?.cwd}installDependencies(){let done=commandLog("Preparing to install dependencies");done(),logger2.log(),logger2.log(),done=commandLog("Installing dependencies");try{this.runInstall()}catch{done("An error occurred while installing dependencies."),process.exit(1)}done()}packageJsonPath(){return this.cwd?path4.resolve(this.cwd,"package.json"):path4.resolve("package.json")}readPackageJson(){let packageJsonPath=this.packageJsonPath();if(!fs4.existsSync(packageJsonPath))throw new Error(`Could not read package.json file at ${packageJsonPath}`);let jsonContent=fs4.readFileSync(packageJsonPath,"utf8");return JSON.parse(jsonContent)}writePackageJson(packageJson){let content=`${JSON.stringify(packageJson,null,2)}
34
34
  `;fs4.writeFileSync(this.packageJsonPath(),content,"utf8")}retrievePackageJson(){let packageJson;try{packageJson=this.readPackageJson()}catch{this.initPackageJson(),packageJson=this.readPackageJson()}return{...packageJson,dependencies:{...packageJson.dependencies},devDependencies:{...packageJson.devDependencies}}}addDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options,dependenciesMap=dependencies.reduce((acc,dep)=>{let[packageName,packageVersion]=getPackageDetails(dep);return{...acc,[packageName]:packageVersion}},{});options.installAsDevDependencies?packageJson.devDependencies={...packageJson.devDependencies,...dependenciesMap}:packageJson.dependencies={...packageJson.dependencies,...dependenciesMap},this.writePackageJson(packageJson)}else try{this.runAddDeps(dependencies,options.installAsDevDependencies)}catch(e){logger2.error("An error occurred while installing dependencies."),logger2.log(e.message),process.exit(1)}}removeDependencies(options,dependencies){let{skipInstall}=options;if(skipInstall){let{packageJson}=options;dependencies.forEach(dep=>{packageJson.devDependencies&&delete packageJson.devDependencies[dep],packageJson.dependencies&&delete packageJson.dependencies[dep]}),this.writePackageJson(packageJson)}else try{this.runRemoveDeps(dependencies)}catch(e){logger2.error("An error occurred while removing dependencies."),logger2.log(e.message),process.exit(1)}}getVersionedPackages(packages){return Promise.all(packages.map(async pkg2=>{let[packageName,packageVersion]=getPackageDetails(pkg2);return`${packageName}@${await this.getVersion(packageName,packageVersion)}`}))}getVersions(...packageNames){return Promise.all(packageNames.map(packageName=>this.getVersion(packageName)))}async getVersion(packageName,constraint){let current;/(@storybook|^sb$|^storybook$)/.test(packageName)&&(current=versions_default[packageName]);let latest;try{latest=await this.latestVersion(packageName,constraint)}catch(e){if(current)return logger2.warn(`
35
35
  ${chalk2.yellow(e.message)}`),current;logger2.error(`
36
- ${chalk2.red(e.message)}`),process.exit(1)}return`^${current&&(!constraint||satisfies2(current,constraint))&&gt(current,latest)?current:latest}`}async latestVersion(packageName,constraint){return constraint?(await this.runGetVersions(packageName,!0)).reverse().find(version=>satisfies2(version,constraint)):this.runGetVersions(packageName,!1)}addStorybookCommandInScripts(options){let storybookCmd=`storybook dev -p ${options?.port??6006}`,buildStorybookCmd="storybook build",preCommand=options?.preCommand?this.getRunCommand(options.preCommand):void 0;this.addScripts({storybook:[preCommand,storybookCmd].filter(Boolean).join(" && "),"build-storybook":[preCommand,buildStorybookCmd].filter(Boolean).join(" && ")})}addESLintConfig(){let packageJson=this.retrievePackageJson();this.writePackageJson({...packageJson,eslintConfig:{...packageJson.eslintConfig,overrides:[...packageJson.eslintConfig?.overrides||[],{files:["**/*.stories.*"],rules:{"import/no-anonymous-default-export":"off"}}]}})}addScripts(scripts){let packageJson=this.retrievePackageJson();this.writePackageJson({...packageJson,scripts:{...packageJson.scripts,...scripts}})}addPackageResolutions(versions){let packageJson=this.retrievePackageJson(),resolutions=this.getResolutions(packageJson,versions);this.writePackageJson({...packageJson,...resolutions})}executeCommand(command2,args,stdio){let commandResult=spawnSync(command2,args,{cwd:this.cwd,stdio:stdio??"pipe",encoding:"utf-8",shell:!0});if(commandResult.status!==0)throw new Error(commandResult.stderr??"");return commandResult.stdout??""}};var NPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="npm"}initPackageJson(){return this.executeCommand("npm",["init","-y"])}getRunStorybookCommand(){return"npm run storybook"}getRunCommand(command2){return`npm run ${command2}`}getNpmVersion(){return this.executeCommand("npm",["--version"])}hasLegacyPeerDeps(){return this.executeCommand("npm",["config","get","legacy-peer-deps","--location=project"]).trim()==="true"}setLegacyPeerDeps(){this.executeCommand("npm",["config","set","legacy-peer-deps=true","--location=project"])}needsLegacyPeerDeps(version){return semver2.gte(version,"7.0.0")&&!this.hasLegacyPeerDeps()}getInstallArgs(){return this.installArgs||(this.installArgs=this.needsLegacyPeerDeps(this.getNpmVersion())?["install","--legacy-peer-deps"]:["install"]),this.installArgs}getUninstallArgs(){return this.uninstallArgs||(this.uninstallArgs=this.needsLegacyPeerDeps(this.getNpmVersion())?["uninstall","--legacy-peer-deps"]:["uninstall"]),this.uninstallArgs}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}runInstall(){this.executeCommand("npm",this.getInstallArgs(),"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("npm",[...this.getInstallArgs(),...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("npm",[...this.getUninstallArgs(),...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("npm",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using npm`)}}};var PNPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="pnpm"}initPackageJson(){return this.executeCommand("pnpm",["init","-y"])}getRunStorybookCommand(){return"pnpm run storybook"}getRunCommand(command2){return`pnpm run ${command2}`}getPnpmVersion(){return this.executeCommand("pnpm",["--version"])}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}runInstall(){this.executeCommand("pnpm",["install"],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("pnpm",["add",...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("pnpm",["remove",...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("pnpm",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using pnpm`)}}};var Yarn2Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn2"}initPackageJson(){return this.executeCommand("yarn",["init"])}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command2){return`yarn ${command2}`}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}runInstall(){this.executeCommand("yarn",[],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("yarn",["add",...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("yarn",["remove",...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let field=fetchAllVersions?"versions":"version",args=["--fields",field,"--json"],commandResult=this.executeCommand("yarn",["npm","info",packageName,...args]);try{return JSON.parse(commandResult)[field]}catch{throw new Error(`Unable to find versions of ${packageName} using yarn 2`)}}};var Yarn1Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn1"}initPackageJson(){return this.executeCommand("yarn",["init","-y"])}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command2){return`yarn ${command2}`}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}runInstall(){this.executeCommand("yarn",[],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=["--ignore-workspace-root-check",...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("yarn",["add",...args],"inherit")}runRemoveDeps(dependencies){let args=["--ignore-workspace-root-check",...dependencies];this.executeCommand("yarn",["remove",...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("yarn",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.type==="inspect")return parsedOutput.data;throw new Error(`Unable to find versions of ${packageName} using yarn`)}catch{throw new Error(`Unable to find versions of ${packageName} using yarn`)}}};var JsPackageManagerFactory=class{static getPackageManager({force,useNpm}={},cwd){if(useNpm||force==="npm")return new NPMProxy({cwd});if(force==="pnpm")return new PNPMProxy({cwd});if(force==="yarn1")return new Yarn1Proxy({cwd});if(force==="yarn2")return new Yarn2Proxy({cwd});let yarnVersion=getYarnVersion(cwd),hasYarnLockFile=Boolean(findUpSync("yarn.lock",{cwd})),hasPNPMLockFile=Boolean(findUpSync("pnpm-lock.yaml",{cwd})),hasNPMCommand=hasNPM(cwd),hasPNPMCommand=hasPNPM(cwd);if(yarnVersion&&(hasYarnLockFile||!hasNPMCommand&&!hasPNPMCommand))return yarnVersion===1?new Yarn1Proxy({cwd}):new Yarn2Proxy({cwd});if(hasPNPMCommand&&hasPNPMLockFile)return new PNPMProxy({cwd});if(hasNPMCommand)return new NPMProxy({cwd});throw new Error("Unable to find a usable package manager within NPM, PNPM, Yarn and Yarn 2")}};function hasNPM(cwd){return spawnSync2("npm",["--version"],{cwd,shell:!0}).status===0}function hasPNPM(cwd){return spawnSync2("pnpm",["--version"],{cwd,shell:!0}).status===0}function getYarnVersion(cwd){let yarnVersionCommand=spawnSync2("yarn",["--version"],{cwd,shell:!0});if(yarnVersionCommand.status!==0)return;let yarnVersion=yarnVersionCommand.output.toString().replace(/,/g,"").replace(/"/g,"");return/^1\.+/.test(yarnVersion)?1:2}import{writeFile,access}from"fs-extra";import{logger as logger3}from"@storybook/node-logger";import path5 from"path";import prompts from"prompts";var generateStorybookBabelConfigInCWD=async()=>{let target=process.cwd();return generateStorybookBabelConfig({target})},generateStorybookBabelConfig=async({target})=>{logger3.info(`Generating the storybook default babel config at ${target}`);let contents=JSON.stringify({sourceType:"unambiguous",presets:[],plugins:[]},null,2),fileName=".babelrc.json",location=path5.join(target,fileName);if(await access(location).then(()=>!0,()=>!1)){let{overwrite}=await prompts({type:"confirm",initial:!0,name:"overwrite",message:`${fileName} already exists. Would you like overwrite it?`});if(overwrite===!1){logger3.warn("Cancelled, babel config file was NOT written to file-system.");return}}logger3.info(`Writing file to ${location}`),await writeFile(location,contents)};var defaultOptions={extraPackages:[],extraAddons:[],staticDir:void 0,addScripts:!0,addComponents:!0,addBabel:!1,addESLint:!1,extraMain:void 0,framework:void 0,extensions:void 0,commonJs:!1},getBuilderDetails=builder=>{let map=versions_default;if(map[builder])return builder;let builderPackage=`@storybook/${builder}`;return map[builderPackage]?builderPackage:builder},wrapForPnp=packageName=>`%%path.dirname(require.resolve(path.join('${packageName}', 'package.json')))%%`,getFrameworkDetails=(renderer,builder,pnp,framework)=>{let frameworkPackage=framework?`@storybook/${framework}`:`@storybook/${renderer}-${builder}`,frameworkPackagePath=pnp?wrapForPnp(frameworkPackage):frameworkPackage,rendererPackage=`@storybook/${renderer}`,rendererPackagePath=pnp?wrapForPnp(rendererPackage):rendererPackage,builderPackage=getBuilderDetails(builder),builderPackagePath=pnp?wrapForPnp(builderPackage):builderPackage,isKnownFramework=!!versions_default[frameworkPackage],isKnownRenderer=!!versions_default[rendererPackage];if(isKnownFramework)return{packages:[frameworkPackage],framework:frameworkPackagePath,rendererId:renderer,type:"framework"};if(isKnownRenderer)return{packages:[rendererPackage,builderPackage],builder:builderPackagePath,renderer:rendererPackagePath,rendererId:renderer,type:"renderer"};throw new Error(`Could not find the framework (${frameworkPackage}) or renderer (${rendererPackage}) package`)},stripVersions=addons=>addons.map(addon=>getPackageDetails(addon)[0]),hasInteractiveStories=rendererId=>["react","angular","preact","svelte","vue","vue3","html"].includes(rendererId),hasFrameworkTemplates=framework=>["angular","nextjs","sveltekit"].includes(framework),_a;async function baseGenerator(packageManager,npmOptions,{language,builder="webpack5",pnp,commonJs},renderer,options=defaultOptions,framework){let{extraAddons:extraAddonPackages,extraPackages,staticDir,addScripts,addComponents,addBabel,addESLint,extraMain,extensions}={...defaultOptions,...options},{packages:frameworkPackages,type,rendererId,framework:frameworkInclude,builder:builderInclude}=getFrameworkDetails(renderer,builder,pnp,framework),addons=["@storybook/addon-links","@storybook/addon-essentials",...stripVersions(extraAddonPackages)],addonPackages=["@storybook/addon-links","@storybook/addon-essentials","@storybook/blocks",...extraAddonPackages];hasInteractiveStories(rendererId)&&(addons.push("@storybook/addon-interactions"),addonPackages.push("@storybook/addon-interactions","@storybook/testing-library"));let files=await fse3.readdir(process.cwd()),packageJson=packageManager.retrievePackageJson(),installedDependencies=new Set(Object.keys({...packageJson.dependencies,...packageJson.devDependencies}));if(installedDependencies.has("react")||addonPackages.push("react"),installedDependencies.has("react-dom")||addonPackages.push("react-dom"),type==="renderer")throw new Error(dedent2`
36
+ ${chalk2.red(e.message)}`),process.exit(1)}return`^${current&&(!constraint||satisfies2(current,constraint))&&gt(current,latest)?current:latest}`}async latestVersion(packageName,constraint){return constraint?(await this.runGetVersions(packageName,!0)).reverse().find(version=>satisfies2(version,constraint)):this.runGetVersions(packageName,!1)}addStorybookCommandInScripts(options){let storybookCmd=`storybook dev -p ${options?.port??6006}`,buildStorybookCmd="storybook build",preCommand=options?.preCommand?this.getRunCommand(options.preCommand):void 0;this.addScripts({storybook:[preCommand,storybookCmd].filter(Boolean).join(" && "),"build-storybook":[preCommand,buildStorybookCmd].filter(Boolean).join(" && ")})}addESLintConfig(){let packageJson=this.retrievePackageJson();this.writePackageJson({...packageJson,eslintConfig:{...packageJson.eslintConfig,overrides:[...packageJson.eslintConfig?.overrides||[],{files:["**/*.stories.*"],rules:{"import/no-anonymous-default-export":"off"}}]}})}addScripts(scripts){let packageJson=this.retrievePackageJson();this.writePackageJson({...packageJson,scripts:{...packageJson.scripts,...scripts}})}addPackageResolutions(versions){let packageJson=this.retrievePackageJson(),resolutions=this.getResolutions(packageJson,versions);this.writePackageJson({...packageJson,...resolutions})}executeCommand(command2,args,stdio){let commandResult=spawnSync(command2,args,{cwd:this.cwd,stdio:stdio??"pipe",encoding:"utf-8",shell:!0});if(commandResult.status!==0)throw new Error(commandResult.stderr??"");return commandResult.stdout??""}};var NPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="npm"}initPackageJson(){return this.executeCommand("npm",["init","-y"])}getRunStorybookCommand(){return"npm run storybook"}getRunCommand(command2){return`npm run ${command2}`}getNpmVersion(){return this.executeCommand("npm",["--version"])}getInstallArgs(){return this.installArgs||(this.installArgs=["install"]),this.installArgs}getUninstallArgs(){return this.uninstallArgs||(this.uninstallArgs=["uninstall"]),this.uninstallArgs}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}runInstall(){this.executeCommand("npm",this.getInstallArgs(),"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("npm",[...this.getInstallArgs(),...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("npm",[...this.getUninstallArgs(),...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("npm",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using npm`)}}};var PNPMProxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="pnpm"}initPackageJson(){return this.executeCommand("pnpm",["init","-y"])}getRunStorybookCommand(){return"pnpm run storybook"}getRunCommand(command2){return`pnpm run ${command2}`}getPnpmVersion(){return this.executeCommand("pnpm",["--version"])}getResolutions(packageJson,versions){return{overrides:{...packageJson.overrides,...versions}}}runInstall(){this.executeCommand("pnpm",["install"],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("pnpm",["add",...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("pnpm",["remove",...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("pnpm",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.error)throw new Error(parsedOutput.error.summary);return parsedOutput}catch{throw new Error(`Unable to find versions of ${packageName} using pnpm`)}}};var Yarn2Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn2"}initPackageJson(){return this.executeCommand("yarn",["init"])}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command2){return`yarn ${command2}`}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}runInstall(){this.executeCommand("yarn",[],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=[...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("yarn",["add",...args],"inherit")}runRemoveDeps(dependencies){let args=[...dependencies];this.executeCommand("yarn",["remove",...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let field=fetchAllVersions?"versions":"version",args=["--fields",field,"--json"],commandResult=this.executeCommand("yarn",["npm","info",packageName,...args]);try{return JSON.parse(commandResult)[field]}catch{throw new Error(`Unable to find versions of ${packageName} using yarn 2`)}}};var Yarn1Proxy=class extends JsPackageManager{constructor(){super(...arguments);this.type="yarn1"}initPackageJson(){return this.executeCommand("yarn",["init","-y"])}getRunStorybookCommand(){return"yarn storybook"}getRunCommand(command2){return`yarn ${command2}`}getResolutions(packageJson,versions){return{resolutions:{...packageJson.resolutions,...versions}}}runInstall(){this.executeCommand("yarn",[],"inherit")}runAddDeps(dependencies,installAsDevDependencies){let args=["--ignore-workspace-root-check",...dependencies];installAsDevDependencies&&(args=["-D",...args]),this.executeCommand("yarn",["add",...args],"inherit")}runRemoveDeps(dependencies){let args=["--ignore-workspace-root-check",...dependencies];this.executeCommand("yarn",["remove",...args],"inherit")}runGetVersions(packageName,fetchAllVersions){let args=[fetchAllVersions?"versions":"version","--json"],commandResult=this.executeCommand("yarn",["info",packageName,...args]);try{let parsedOutput=JSON.parse(commandResult);if(parsedOutput.type==="inspect")return parsedOutput.data;throw new Error(`Unable to find versions of ${packageName} using yarn`)}catch{throw new Error(`Unable to find versions of ${packageName} using yarn`)}}};var NPM_LOCKFILE="package-lock.json",PNPM_LOCKFILE="pnpm-lock.yaml",YARN_LOCKFILE="yarn.lock",JsPackageManagerFactory=class{static getPackageManager({force}={},cwd){if(force==="npm")return new NPMProxy({cwd});if(force==="pnpm")return new PNPMProxy({cwd});if(force==="yarn1")return new Yarn1Proxy({cwd});if(force==="yarn2")return new Yarn2Proxy({cwd});let yarnVersion=getYarnVersion(cwd),closestLockfilePath=findUpSync([YARN_LOCKFILE,PNPM_LOCKFILE,NPM_LOCKFILE],{cwd}),closestLockfile=closestLockfilePath&&path5.basename(closestLockfilePath),hasNPMCommand=hasNPM(cwd),hasPNPMCommand=hasPNPM(cwd);if(yarnVersion&&(closestLockfile===YARN_LOCKFILE||!hasNPMCommand&&!hasPNPMCommand))return yarnVersion===1?new Yarn1Proxy({cwd}):new Yarn2Proxy({cwd});if(hasPNPMCommand&&closestLockfile===PNPM_LOCKFILE)return new PNPMProxy({cwd});if(hasNPMCommand)return new NPMProxy({cwd});throw new Error("Unable to find a usable package manager within NPM, PNPM, Yarn and Yarn 2")}};function hasNPM(cwd){return spawnSync2("npm",["--version"],{cwd,shell:!0}).status===0}function hasPNPM(cwd){return spawnSync2("pnpm",["--version"],{cwd,shell:!0}).status===0}function getYarnVersion(cwd){let yarnVersionCommand=spawnSync2("yarn",["--version"],{cwd,shell:!0});if(yarnVersionCommand.status!==0)return;let yarnVersion=yarnVersionCommand.output.toString().replace(/,/g,"").replace(/"/g,"");return/^1\.+/.test(yarnVersion)?1:2}import{writeFile,pathExists as pathExists2}from"fs-extra";import{logger as logger3}from"@storybook/node-logger";import path6 from"path";import prompts from"prompts";var generateStorybookBabelConfigInCWD=async()=>{let target=process.cwd();return generateStorybookBabelConfig({target})},generateStorybookBabelConfig=async({target})=>{logger3.info(`Generating the storybook default babel config at ${target}`);let fileName=".babelrc.json",location=path6.join(target,fileName);if(await pathExists2(location)){let{overwrite}=await prompts({type:"confirm",initial:!0,name:"overwrite",message:`${fileName} already exists. Would you like overwrite it?`});if(overwrite===!1){logger3.warn("Cancelled, babel config file was NOT written to file-system.");return}}let{typescript,jsx}=await prompts([{type:"confirm",initial:!0,name:"typescript",message:"Do you want to add the TypeScript preset?"},{type:"confirm",initial:!0,name:"jsx",message:"Do you want to add the React preset?"}]),added=["@babel/preset-env"],presets=[["@babel/preset-env",{targets:{chrome:100}}]];typescript&&(added.push("@babel/preset-typescript"),presets.push("@babel/preset-typescript")),jsx&&(added.push("@babel/preset-react"),presets.push("@babel/preset-react"));let contents=JSON.stringify({sourceType:"unambiguous",presets,plugins:[]},null,2);logger3.info(`Writing file to ${location}`),await writeFile(location,contents);let{runInstall}=await prompts({type:"confirm",initial:!0,name:"runInstall",message:`Shall we install the required dependencies now? (${added.join(", ")})`});runInstall&&(logger3.info("Installing dependencies..."),JsPackageManagerFactory.getPackageManager().addDependencies({installAsDevDependencies:!0},added))};var defaultOptions={extraPackages:[],extraAddons:[],staticDir:void 0,addScripts:!0,addComponents:!0,addBabel:!1,addESLint:!1,extraMain:void 0,framework:void 0,extensions:void 0,commonJs:!1},getBuilderDetails=builder=>{let map=versions_default;if(map[builder])return builder;let builderPackage=`@storybook/${builder}`;return map[builderPackage]?builderPackage:builder},wrapForPnp=packageName=>`%%path.dirname(require.resolve(path.join('${packageName}', 'package.json')))%%`,getFrameworkDetails=(renderer,builder,pnp,framework)=>{let frameworkPackage=framework?`@storybook/${framework}`:`@storybook/${renderer}-${builder}`,frameworkPackagePath=pnp?wrapForPnp(frameworkPackage):frameworkPackage,rendererPackage=`@storybook/${renderer}`,rendererPackagePath=pnp?wrapForPnp(rendererPackage):rendererPackage,builderPackage=getBuilderDetails(builder),builderPackagePath=pnp?wrapForPnp(builderPackage):builderPackage,isKnownFramework=!!versions_default[frameworkPackage],isKnownRenderer=!!versions_default[rendererPackage];if(isKnownFramework)return{packages:[frameworkPackage],framework:frameworkPackagePath,rendererId:renderer,type:"framework"};if(isKnownRenderer)return{packages:[rendererPackage,builderPackage],builder:builderPackagePath,renderer:rendererPackagePath,rendererId:renderer,type:"renderer"};throw new Error(`Could not find the framework (${frameworkPackage}) or renderer (${rendererPackage}) package`)},stripVersions=addons=>addons.map(addon=>getPackageDetails(addon)[0]),hasInteractiveStories=rendererId=>["react","angular","preact","svelte","vue","vue3","html"].includes(rendererId),hasFrameworkTemplates=framework=>["angular","nextjs"].includes(framework);async function baseGenerator(packageManager,npmOptions,{language,builder="webpack5",pnp,commonJs},renderer,options=defaultOptions,framework){let{extraAddons:extraAddonPackages,extraPackages,staticDir,addScripts,addComponents,addBabel,addESLint,extraMain,extensions}={...defaultOptions,...options},{packages:frameworkPackages,type,rendererId,framework:frameworkInclude,builder:builderInclude}=getFrameworkDetails(renderer,builder,pnp,framework),addons=["@storybook/addon-links","@storybook/addon-essentials",...stripVersions(extraAddonPackages)],addonPackages=["@storybook/addon-links","@storybook/addon-essentials","@storybook/blocks",...extraAddonPackages];hasInteractiveStories(rendererId)&&(addons.push("@storybook/addon-interactions"),addonPackages.push("@storybook/addon-interactions","@storybook/testing-library"));let files=await fse3.readdir(process.cwd()),packageJson=packageManager.retrievePackageJson(),installedDependencies=new Set(Object.keys({...packageJson.dependencies,...packageJson.devDependencies}));if(installedDependencies.has("react")||addonPackages.push("react"),installedDependencies.has("react-dom")||addonPackages.push("react-dom"),type==="renderer")throw new Error(dedent2`
37
37
  Sorry, for now, you can not do this, please use a framework such as @storybook/react-webpack5
38
38
 
39
39
  https://github.com/storybookjs/storybook/issues/18360
40
- `);let packages=["storybook",`@storybook/${rendererId}`,...frameworkPackages,...addonPackages,...extraPackages].filter(Boolean).filter(packageToInstall=>!installedDependencies.has(getPackageDetails(packageToInstall)[0])),versionedPackages=await packageManager.getVersionedPackages(packages);if(await fse3.ensureDir("./.storybook"),await configureMain({framework:{name:frameworkInclude,options:options.framework||{}},docs:{docsPage:!0},addons:pnp?addons.map(wrapForPnp):addons,extensions,commonJs,...staticDir?{staticDirs:[path6.join("..",staticDir)]}:null,...extraMain,...type!=="framework"?{core:{builder:builderInclude}}:{}}),await configurePreview(rendererId),frameworkPackages.find(pkg2=>pkg2.match(/^@storybook\/.*-vite$/)||pkg2==="@storybook/sveltekit")){let previewHead=dedent2(_a||(_a=__template([`
40
+ `);let packages=["storybook",`@storybook/${rendererId}`,...frameworkPackages,...addonPackages,...extraPackages].filter(Boolean).filter(packageToInstall=>!installedDependencies.has(getPackageDetails(packageToInstall)[0])),versionedPackages=await packageManager.getVersionedPackages(packages);if(await fse3.ensureDir("./.storybook"),await configureMain({framework:{name:frameworkInclude,options:options.framework||{}},docs:{autodocs:"tag"},addons:pnp?addons.map(wrapForPnp):addons,extensions,commonJs,...staticDir?{staticDirs:[path7.join("..",staticDir)]}:null,...extraMain,...type!=="framework"?{core:{builder:builderInclude}}:{}}),await configurePreview(rendererId),frameworkPackages.find(pkg2=>pkg2.match(/^@storybook\/.*-vite$/)||pkg2==="@storybook/sveltekit")){let previewHead=dedent2`
41
41
  <script>
42
42
  window.global = window;
43
- <\/script>
44
- `])));await fse3.writeFile(".storybook/preview-head.html",previewHead,{encoding:"utf8"})}let babelDependencies=addBabel&&builder!=="vite"?await getBabelDependencies(packageManager,packageJson):[];if(!files.some(fname=>fname.startsWith(".babel")||fname.startsWith("babel")||fname==="package.json")&&await generateStorybookBabelConfigInCWD(),packageManager.addDependencies({...npmOptions,packageJson},[...versionedPackages,...babelDependencies]),addScripts&&packageManager.addStorybookCommandInScripts({port:6006}),addESLint&&packageManager.addESLintConfig(),addComponents){let templateLocation=hasFrameworkTemplates(framework)?framework:rendererId;await copyComponents(templateLocation,language)}}function editAngularAppTsConfig(){let tsConfigJson=getAngularAppTsConfigJson(),glob="**/*.stories.*";if(!tsConfigJson)return;let{exclude=[]}=tsConfigJson;exclude.includes(glob)||(tsConfigJson.exclude=[...exclude,glob],writeFileAsJson(getAngularAppTsConfigPath(),tsConfigJson))}var generator=async(packageManager,npmOptions,options)=>{checkForProjects();let angularVersion=semver3.coerce(packageManager.retrievePackageJson().dependencies["@angular/core"])?.version,updatedOptions=semver3.gte(angularVersion,"12.0.0")?{...options,builder:"webpack5"}:options;await baseGenerator(packageManager,npmOptions,updatedOptions,"angular",{extraPackages:["@compodoc/compodoc"],addScripts:!1},"angular");let templateDir=join2(getCliDir(),"templates","angular");copyTemplate(templateDir),editAngularAppTsConfig(),editStorybookTsConfig(path7.resolve("./.storybook/tsconfig.json"));let tsConfigFile=await getBaseTsConfigName();packageManager.addScripts({"docs:json":`compodoc -p ./${tsConfigFile} -e json -d .`}),packageManager.addStorybookCommandInScripts({port:6006,preCommand:"docs:json"})},ANGULAR_default=generator;import{join as join3}from"path";function addStorybookExcludeGlobToTsConfig(){let tsConfigJson=readFileAsJson("tsconfig.json",!0),glob="**/*.stories.ts";if(!tsConfigJson)return;let{exclude=[]}=tsConfigJson;exclude.includes(glob)||(tsConfigJson.exclude=[...exclude,glob],writeFileAsJson("tsconfig.json",tsConfigJson))}var generator2=async(packageManager,npmOptions,options)=>{addStorybookExcludeGlobToTsConfig(),await baseGenerator(packageManager,npmOptions,options,"aurelia",{extraPackages:["aurelia"]});let templateDir=join3(getCliDir(),"templates","aurelia");copyTemplate(templateDir)},AURELIA_default=generator2;var generator3=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"ember",{extraPackages:["babel-plugin-ember-modules-api-polyfill","babel-plugin-htmlbars-inline-precompile"],staticDir:"dist"})},EMBER_default=generator3;var generator4=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react")},REACT_default=generator4;import{join as join4}from"path";import chalk3 from"chalk";import shell from"shelljs";var generator5=async(packageManager,npmOptions,installServer)=>{let dirname2=shell.ls("-d","ios/*.xcodeproj").stdout;if(dirname2){let projectName=dirname2.slice(4,dirname2.length-10-1);projectName?shell.sed("-i","%APP_NAME%",projectName,"storybook/index.js"):paddedLog(chalk3.red("ERR: Could not determine project name, to fix: https://github.com/storybookjs/storybook/issues/1277"))}let packageJson=packageManager.retrievePackageJson(),missingReactDom=!packageJson.dependencies["react-dom"]&&!packageJson.devDependencies["react-dom"],reactVersion=packageJson.dependencies.react,webAddonsV5=["@storybook/addon-links@^5.3","@storybook/addon-knobs@^5.3","@storybook/addon-actions@^5.3"],packagesToResolve=[...["@storybook/addon-ondevice-knobs","@storybook/addon-ondevice-actions"],"@storybook/react-native",installServer&&"@storybook/react-native-server"].filter(Boolean),resolvedPackages=await packageManager.getVersionedPackages(packagesToResolve),packages=[...await getBabelDependencies(packageManager,packageJson),...resolvedPackages,...webAddonsV5,missingReactDom&&reactVersion&&`react-dom@${reactVersion}`].filter(Boolean);packageManager.addDependencies({...npmOptions,packageJson},packages),installServer&&packageManager.addStorybookCommandInScripts({port:7007});let templateDir=join4(getCliDir(),"templates","react-native");copyTemplate(templateDir)},REACT_NATIVE_default=generator5;import path8 from"path";import fs5 from"fs";import semver4 from"semver";var generator6=async(packageManager,npmOptions,options)=>{let monorepoRootPath=path8.join(__dirname,"..","..","..","..","..",".."),extraMain=options.linkable?{webpackFinal:`%%(config) => {
43
+ </script>
44
+ `;await fse3.writeFile(".storybook/preview-head.html",previewHead,{encoding:"utf8"})}let babelDependencies=addBabel&&builder!=="vite"?await getBabelDependencies(packageManager,packageJson):[];if(!files.some(fname=>fname.startsWith(".babel")||fname.startsWith("babel")||fname==="package.json")&&await generateStorybookBabelConfigInCWD(),packageManager.addDependencies({...npmOptions,packageJson},[...versionedPackages,...babelDependencies]),addScripts&&packageManager.addStorybookCommandInScripts({port:6006}),addESLint&&packageManager.addESLintConfig(),addComponents){let templateLocation=hasFrameworkTemplates(framework)?framework:rendererId;await copyComponents(templateLocation,language)}}function editAngularAppTsConfig(){let tsConfigJson=getAngularAppTsConfigJson(),glob="**/*.stories.*";if(!tsConfigJson)return;let{exclude=[]}=tsConfigJson;exclude.includes(glob)||(tsConfigJson.exclude=[...exclude,glob],writeFileAsJson(getAngularAppTsConfigPath(),tsConfigJson))}var generator=async(packageManager,npmOptions,options)=>{checkForProjects();let angularVersion=semver2.coerce(packageManager.retrievePackageJson().dependencies["@angular/core"])?.version,updatedOptions=semver2.gte(angularVersion,"12.0.0")?{...options,builder:"webpack5"}:options;await baseGenerator(packageManager,npmOptions,updatedOptions,"angular",{extraPackages:["@compodoc/compodoc"],addScripts:!1},"angular");let templateDir=join2(getCliDir(),"templates","angular");copyTemplate(templateDir),editAngularAppTsConfig(),editStorybookTsConfig(path8.resolve("./.storybook/tsconfig.json"));let tsConfigFile=await getBaseTsConfigName();packageManager.addScripts({"docs:json":`compodoc -p ./${tsConfigFile} -e json -d .`}),packageManager.addStorybookCommandInScripts({port:6006,preCommand:"docs:json"})},ANGULAR_default=generator;import{join as join3}from"path";function addStorybookExcludeGlobToTsConfig(){let tsConfigJson=readFileAsJson("tsconfig.json",!0),glob="**/*.stories.ts";if(!tsConfigJson)return;let{exclude=[]}=tsConfigJson;exclude.includes(glob)||(tsConfigJson.exclude=[...exclude,glob],writeFileAsJson("tsconfig.json",tsConfigJson))}var generator2=async(packageManager,npmOptions,options)=>{addStorybookExcludeGlobToTsConfig(),await baseGenerator(packageManager,npmOptions,options,"aurelia",{extraPackages:["aurelia"]});let templateDir=join3(getCliDir(),"templates","aurelia");copyTemplate(templateDir)},AURELIA_default=generator2;var generator3=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"ember",{extraPackages:["babel-plugin-ember-modules-api-polyfill","babel-plugin-htmlbars-inline-precompile"],staticDir:"dist"})},EMBER_default=generator3;var generator4=async(packageManager,npmOptions,options)=>{let extraPackages=detectLanguage()==="javascript"?["prop-types"]:[];await baseGenerator(packageManager,npmOptions,options,"react",{extraPackages})},REACT_default=generator4;import{join as join4}from"path";import chalk3 from"chalk";import shell from"shelljs";var generator5=async(packageManager,npmOptions,installServer)=>{let dirname2=shell.ls("-d","ios/*.xcodeproj").stdout;if(dirname2){let projectName=dirname2.slice(4,dirname2.length-10-1);projectName?shell.sed("-i","%APP_NAME%",projectName,"storybook/index.js"):paddedLog(chalk3.red("ERR: Could not determine project name, to fix: https://github.com/storybookjs/storybook/issues/1277"))}let packageJson=packageManager.retrievePackageJson(),missingReactDom=!packageJson.dependencies["react-dom"]&&!packageJson.devDependencies["react-dom"],reactVersion=packageJson.dependencies.react,webAddonsV5=["@storybook/addon-links@^5.3","@storybook/addon-knobs@^5.3","@storybook/addon-actions@^5.3"],packagesToResolve=[...["@storybook/addon-ondevice-knobs","@storybook/addon-ondevice-actions"],"@storybook/react-native",installServer&&"@storybook/react-native-server"].filter(Boolean),resolvedPackages=await packageManager.getVersionedPackages(packagesToResolve),packages=[...await getBabelDependencies(packageManager,packageJson),...resolvedPackages,...webAddonsV5,missingReactDom&&reactVersion&&`react-dom@${reactVersion}`].filter(Boolean);packageManager.addDependencies({...npmOptions,packageJson},packages),installServer&&packageManager.addStorybookCommandInScripts({port:7007});let templateDir=join4(getCliDir(),"templates","react-native");copyTemplate(templateDir)},REACT_NATIVE_default=generator5;import path9 from"path";import fs5 from"fs";import semver3 from"semver";var generator6=async(packageManager,npmOptions,options)=>{let monorepoRootPath=path9.join(__dirname,"..","..","..","..","..",".."),extraMain=options.linkable?{webpackFinal:`%%(config) => {
45
45
  // add monorepo root as a valid directory to import modules from
46
46
  config.resolve.plugins.forEach((p) => {
47
47
  if (Array.isArray(p.appSrcs)) {
@@ -50,10 +50,10 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
50
50
  });
51
51
  return config;
52
52
  }
53
- %%`}:{},craVersion=semver4.coerce(packageManager.retrievePackageJson().dependencies["react-scripts"])?.version,isCra5=craVersion&&semver4.gte(craVersion,"5.0.0"),updatedOptions=isCra5?{...options,builder:"webpack5"}:options,extraPackages=["@storybook/node-logger"];isCra5&&(extraPackages.push("webpack"),extraPackages.push("babel-plugin-named-exports-order"),extraPackages.push("prop-types")),await baseGenerator(packageManager,npmOptions,updatedOptions,"react",{extraAddons:[`@storybook/preset-create-react-app${isCra5?"":"@3"}`],extraPackages,staticDir:fs5.existsSync(path8.resolve("./public"))?"public":void 0,addBabel:!1,addESLint:!0,extraMain})},REACT_SCRIPTS_default=generator6;var generator7=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react",void 0,"nextjs")},NEXTJS_default=generator7;var generator8=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue")},SFC_VUE_default=generator8;var generator9=async(packageManager,npmOptions,options)=>{let extraPackages=options.builder==="webpack5"?["vue-loader@^15.7.0"]:[];await baseGenerator(packageManager,npmOptions,options,"vue",{extraPackages})},VUE_default=generator9;var generator10=async(packageManager,npmOptions,options)=>{let extraPackages=options.builder==="webpack5"?["vue-loader@^17.0.0","@vue/compiler-sfc@^3.2.0"]:[];await baseGenerator(packageManager,npmOptions,options,"vue3",{extraPackages})},VUE3_default=generator10;var generator11=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react")},WEBPACK_REACT_default=generator11;var generator12=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"mithril")},MITHRIL_default=generator12;var generator13=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"marionette")},MARIONETTE_default=generator13;var generator14=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"marko")},MARKO_default=generator14;var generator15=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"html")},HTML_default=generator15;var generator16=async(packageManager,npmOptions,options)=>baseGenerator(packageManager,npmOptions,options,"web-components",{extraPackages:["lit-html"]}),WEB_COMPONENTS_default=generator16;var generator17=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"riot",{extraPackages:["riot-tag-loader"]})},RIOT_default=generator17;var generator18=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"preact")},PREACT_default=generator18;var generator19=async(packageManager,npmOptions,options)=>{let extraPackages=options.builder==="webpack5"?["svelte","svelte-loader"]:[];await baseGenerator(packageManager,npmOptions,options,"svelte",{extraPackages,extensions:["js","jsx","ts","tsx","svelte"],commonJs:!0})},SVELTE_default=generator19;var generator20=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"svelte",void 0,"sveltekit")},SVELTEKIT_default=generator20;var generator21=async(packageManager,npmOptions,options)=>{let[latestRaxVersion]=await packageManager.getVersions("rax"),packageJson=packageManager.retrievePackageJson(),raxVersion=packageJson.dependencies.rax||latestRaxVersion;packageJson.dependencies.rax=packageJson.dependencies.rax||raxVersion,packageJson.dependencies["rax-image"]=packageJson.dependencies["rax-image"]||raxVersion,packageJson.dependencies["rax-link"]=packageJson.dependencies["rax-link"]||raxVersion,packageJson.dependencies["rax-text"]=packageJson.dependencies["rax-text"]||raxVersion,packageJson.dependencies["rax-view"]=packageJson.dependencies["rax-view"]||raxVersion,packageManager.writePackageJson(packageJson),await baseGenerator(packageManager,npmOptions,options,"rax",{extraPackages:["rax"]})},RAX_default=generator21;import{join as join5}from"path";var generator22=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"server",{extensions:["json"]});let templateDir=join5(getCliDir(),"templates","server");copyTemplate(templateDir)},SERVER_default=generator22;import prompts2 from"prompts";import chalk17 from"chalk";import boxen from"boxen";import chalk5 from"chalk";import{dedent as dedent4}from"ts-dedent";import semver6 from"semver";import chalk4 from"chalk";import{dedent as dedent3}from"ts-dedent";import semver5 from"semver";import{readConfig,writeConfig}from"@storybook/csf-tools";import{getStorybookInfo}from"@storybook/core-common";var logger4=console,webpack5={id:"webpack5",async checkWebpack5Builder(packageJson){let{mainConfig,version:storybookVersion}=getStorybookInfo(packageJson),storybookCoerced=storybookVersion&&semver5.coerce(storybookVersion)?.version;if(!storybookCoerced)return logger4.warn(dedent3`
54
- ❌ Unable to determine storybook version, skipping ${chalk4.cyan("webpack5")} fix.
53
+ %%`}:{},craVersion=semver3.coerce(packageManager.retrievePackageJson().dependencies["react-scripts"])?.version,isCra5=craVersion&&semver3.gte(craVersion,"5.0.0"),updatedOptions=isCra5?{...options,builder:"webpack5"}:options,extraPackages=["@storybook/node-logger"];isCra5&&(extraPackages.push("webpack"),extraPackages.push("babel-plugin-named-exports-order"),extraPackages.push("prop-types")),await baseGenerator(packageManager,npmOptions,updatedOptions,"react",{extraAddons:[`@storybook/preset-create-react-app${isCra5?"":"@3"}`],extraPackages,staticDir:fs5.existsSync(path9.resolve("./public"))?"public":void 0,addBabel:!1,addESLint:!0,extraMain})},REACT_SCRIPTS_default=generator6;var generator7=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react",void 0,"nextjs")},NEXTJS_default=generator7;var generator8=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue")},SFC_VUE_default=generator8;var generator9=async(packageManager,npmOptions,options)=>{let extraPackages=options.builder==="webpack5"?["vue-loader@^15.7.0"]:[];await baseGenerator(packageManager,npmOptions,options,"vue",{extraPackages})},VUE_default=generator9;var generator10=async(packageManager,npmOptions,options)=>{let extraPackages=options.builder==="webpack5"?["vue-loader@^17.0.0","@vue/compiler-sfc@^3.2.0"]:[];await baseGenerator(packageManager,npmOptions,options,"vue3",{extraPackages})},VUE3_default=generator10;var generator11=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react")},WEBPACK_REACT_default=generator11;var generator12=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"mithril")},MITHRIL_default=generator12;var generator13=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"marionette")},MARIONETTE_default=generator13;var generator14=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"marko")},MARKO_default=generator14;var generator15=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"html")},HTML_default=generator15;var generator16=async(packageManager,npmOptions,options)=>baseGenerator(packageManager,npmOptions,options,"web-components",{extraPackages:["lit-html"]}),WEB_COMPONENTS_default=generator16;var generator17=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"riot",{extraPackages:["riot-tag-loader"]})},RIOT_default=generator17;var generator18=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"preact")},PREACT_default=generator18;var generator19=async(packageManager,npmOptions,options)=>{let extraPackages=options.builder==="webpack5"?["svelte","svelte-loader"]:[];await baseGenerator(packageManager,npmOptions,options,"svelte",{extraPackages,extensions:["js","jsx","ts","tsx","svelte"],commonJs:!0})},SVELTE_default=generator19;var generator20=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"svelte",void 0,"sveltekit")},SVELTEKIT_default=generator20;var generator21=async(packageManager,npmOptions,options)=>{let[latestRaxVersion]=await packageManager.getVersions("rax"),packageJson=packageManager.retrievePackageJson(),raxVersion=packageJson.dependencies.rax||latestRaxVersion;packageJson.dependencies.rax=packageJson.dependencies.rax||raxVersion,packageJson.dependencies["rax-image"]=packageJson.dependencies["rax-image"]||raxVersion,packageJson.dependencies["rax-link"]=packageJson.dependencies["rax-link"]||raxVersion,packageJson.dependencies["rax-text"]=packageJson.dependencies["rax-text"]||raxVersion,packageJson.dependencies["rax-view"]=packageJson.dependencies["rax-view"]||raxVersion,packageManager.writePackageJson(packageJson),await baseGenerator(packageManager,npmOptions,options,"rax",{extraPackages:["rax"]})},RAX_default=generator21;import{join as join5}from"path";var generator22=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"server",{extensions:["json"]});let templateDir=join5(getCliDir(),"templates","server");copyTemplate(templateDir)},SERVER_default=generator22;import prompts2 from"prompts";import chalk21 from"chalk";import boxen from"boxen";import{createWriteStream,move,remove}from"fs-extra";import tempy from"tempy";import dedent20 from"ts-dedent";import{join as join6}from"path";import chalk5 from"chalk";import{dedent as dedent4}from"ts-dedent";import semver5 from"semver";import chalk4 from"chalk";import{dedent as dedent3}from"ts-dedent";import semver4 from"semver";import{readConfig,writeConfig}from"@storybook/csf-tools";import{getStorybookInfo}from"@storybook/core-common";var logger4=console,webpack5={id:"webpack5",async checkWebpack5Builder(packageJson){let{mainConfig,version:storybookVersion}=getStorybookInfo(packageJson),storybookCoerced=storybookVersion&&semver4.coerce(storybookVersion)?.version;if(!storybookCoerced)throw new Error(dedent3`
54
+ ❌ Unable to determine storybook version.
55
55
  🤔 Are you running automigrate from your project directory?
56
- `),null;if(semver5.lt(storybookCoerced,"6.3.0"))return logger4.warn(dedent3`
56
+ `);if(semver4.lt(storybookCoerced,"6.3.0"))return logger4.warn(dedent3`
57
57
  Detected SB 6.3 or below, please upgrade storybook to use webpack5.
58
58
 
59
59
  To upgrade to the latest stable release, run this from your project directory:
@@ -61,38 +61,38 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
61
61
  ${chalk4.cyan("npx storybook upgrade")}
62
62
 
63
63
  Add the ${chalk4.cyan("--prerelease")} flag to get the latest prerelease.
64
- `.trim()),null;if(semver5.gte(storybookCoerced,"7.0.0"))return null;if(!mainConfig)return logger4.warn("Unable to find storybook main.js config"),null;let main=await readConfig(mainConfig),builder=main.getFieldValue(["core","builder"]);return builder&&builder!=="webpack4"?(logger4.info(`Found builder ${builder}, skipping`),null):{storybookVersion,main}},async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,webpackVersion=dependencies.webpack||devDependencies.webpack,webpackCoerced=semver5.coerce(webpackVersion)?.version;if(!webpackCoerced||semver5.lt(webpackCoerced,"5.0.0")||semver5.gte(webpackCoerced,"6.0.0"))return null;let builderInfo=await this.checkWebpack5Builder(packageJson);return builderInfo?{webpackVersion,...builderInfo}:null},prompt({webpackVersion}){let webpackFormatted=chalk4.cyan(`webpack ${webpackVersion}`);return dedent3`
64
+ `.trim()),null;if(semver4.gte(storybookCoerced,"7.0.0"))return null;if(!mainConfig)return logger4.warn("Unable to find storybook main.js config"),null;let main=await readConfig(mainConfig),builder=main.getFieldValue(["core","builder"]);return builder&&builder!=="webpack4"?(logger4.info(`Found builder ${builder}, skipping`),null):{storybookVersion,main}},async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,webpackVersion=dependencies.webpack||devDependencies.webpack,webpackCoerced=semver4.coerce(webpackVersion)?.version;if(!webpackCoerced||semver4.lt(webpackCoerced,"5.0.0")||semver4.gte(webpackCoerced,"6.0.0"))return null;let builderInfo=await this.checkWebpack5Builder(packageJson);return builderInfo?{webpackVersion,...builderInfo}:null},prompt({webpackVersion}){let webpackFormatted=chalk4.cyan(`webpack ${webpackVersion}`);return dedent3`
65
65
  We've detected you're running ${webpackFormatted}.
66
66
  Your Storybook's main.js files specifies webpack4, which is incompatible.
67
67
 
68
68
  To run Storybook in webpack5-mode, we can install Storybook's ${chalk4.cyan("@storybook/builder-webpack5")} for you.
69
69
 
70
70
  More info: ${chalk4.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack-5-manager-build")}
71
- `},async run({result:{main,storybookVersion,webpackVersion},packageManager,dryRun}){let deps=[`@storybook/builder-webpack5@${storybookVersion}`];webpackVersion||deps.push("webpack@5"),logger4.info(`\u2705 Adding dependencies: ${deps}`),dryRun||packageManager.addDependencies({installAsDevDependencies:!0},deps),logger4.info("\u2705 Setting `core.builder` to `@storybook/builder-webpack5` in main.js"),dryRun||(main.setFieldValue(["core","builder"],"@storybook/builder-webpack5"),await writeConfig(main))}};var cra5={id:"cra5",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,craVersion=dependencies["react-scripts"]||devDependencies["react-scripts"],craCoerced=semver6.coerce(craVersion)?.version;if(!craCoerced||semver6.lt(craCoerced,"5.0.0"))return null;let builderInfo=await webpack5.checkWebpack5Builder(packageJson);return builderInfo?{craVersion,...builderInfo}:null},prompt({craVersion,...rest}){let craFormatted=chalk5.cyan(`Create React App (CRA) ${craVersion}`);return console.log({...rest}),dedent4`
71
+ `},async run({result:{main,storybookVersion,webpackVersion},packageManager,dryRun}){let deps=[`@storybook/builder-webpack5@${storybookVersion}`];webpackVersion||deps.push("webpack@5"),logger4.info(`\u2705 Adding dependencies: ${deps}`),dryRun||packageManager.addDependencies({installAsDevDependencies:!0},deps),logger4.info("\u2705 Setting `core.builder` to `@storybook/builder-webpack5` in main.js"),dryRun||(main.setFieldValue(["core","builder"],"@storybook/builder-webpack5"),await writeConfig(main))}};var cra5={id:"cra5",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,craVersion=dependencies["react-scripts"]||devDependencies["react-scripts"],craCoerced=semver5.coerce(craVersion)?.version;if(!craCoerced||semver5.lt(craCoerced,"5.0.0"))return null;let builderInfo=await webpack5.checkWebpack5Builder(packageJson);return builderInfo?{craVersion,...builderInfo}:null},prompt({craVersion,...rest}){let craFormatted=chalk5.cyan(`Create React App (CRA) ${craVersion}`);return console.log({...rest}),dedent4`
72
72
  We've detected you are running ${craFormatted} which is powered by webpack5.
73
73
  Your Storybook's main.js files specifies webpack4, which is incompatible.
74
74
 
75
75
  In order to work with your version of CRA, we need to install Storybook's ${chalk5.cyan("@storybook/builder-webpack5")}.
76
76
 
77
77
  More info: ${chalk5.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#cra5-upgrade")}
78
- `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};import chalk6 from"chalk";import{dedent as dedent5}from"ts-dedent";import semver7 from"semver";var angular12={id:"angular12",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,angularVersion=dependencies["@angular/core"]||devDependencies["@angular/core"],angularCoerced=semver7.coerce(angularVersion)?.version;if(!angularCoerced||semver7.lt(angularCoerced,"12.0.0"))return null;let builderInfo=await webpack5.checkWebpack5Builder(packageJson);return builderInfo?{angularVersion,...builderInfo}:null},prompt({angularVersion}){let angularFormatted=chalk6.cyan(`Angular ${angularVersion}`);return dedent5`
78
+ `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};import chalk6 from"chalk";import{dedent as dedent5}from"ts-dedent";import semver6 from"semver";var angular12={id:"angular12",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,angularVersion=dependencies["@angular/core"]||devDependencies["@angular/core"],angularCoerced=semver6.coerce(angularVersion)?.version;if(!angularCoerced||semver6.lt(angularCoerced,"12.0.0"))return null;let builderInfo=await webpack5.checkWebpack5Builder(packageJson);return builderInfo?{angularVersion,...builderInfo}:null},prompt({angularVersion}){let angularFormatted=chalk6.cyan(`Angular ${angularVersion}`);return dedent5`
79
79
  We've detected you are running ${angularFormatted} which is powered by webpack5.
80
80
  Your Storybook's main.js files specifies webpack4, which is incompatible.
81
81
 
82
82
  In order to work with your version of Angular, we need to install Storybook's ${chalk6.cyan("@storybook/builder-webpack5")}.
83
83
 
84
84
  More info: ${chalk6.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#angular12-upgrade")}
85
- `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};import chalk7 from"chalk";import{dedent as dedent6}from"ts-dedent";import semver8 from"semver";var vue3={id:"vue3",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,vueVersion=dependencies.vue||devDependencies.vue,vueCoerced=semver8.coerce(vueVersion)?.version;if(!vueCoerced||semver8.lt(vueCoerced,"3.0.0"))return null;let builderInfo=await webpack5.checkWebpack5Builder(packageJson);return builderInfo?{vueVersion,...builderInfo}:null},prompt({vueVersion,storybookVersion}){let vueFormatted=chalk7.cyan(`Vue ${vueVersion}`),sbFormatted=chalk7.cyan(`Storybook ${storybookVersion}`);return dedent6`
85
+ `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};import chalk7 from"chalk";import{dedent as dedent6}from"ts-dedent";import semver7 from"semver";var vue3={id:"vue3",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{dependencies,devDependencies}=packageJson,vueVersion=dependencies.vue||devDependencies.vue,vueCoerced=semver7.coerce(vueVersion)?.version;if(!vueCoerced||semver7.lt(vueCoerced,"3.0.0"))return null;let builderInfo=await webpack5.checkWebpack5Builder(packageJson);return builderInfo?{vueVersion,...builderInfo}:null},prompt({vueVersion,storybookVersion}){let vueFormatted=chalk7.cyan(`Vue ${vueVersion}`),sbFormatted=chalk7.cyan(`Storybook ${storybookVersion}`);return dedent6`
86
86
  We've detected you are running ${vueFormatted} with Storybook.
87
87
  ${sbFormatted} runs webpack4 by default, which is incompatible.
88
88
 
89
89
  In order to work with your version of Vue, we need to install Storybook's ${chalk7.cyan("webpack5 builder")}.
90
90
 
91
91
  More info: ${chalk7.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vue3-upgrade")}
92
- `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};import chalk8 from"chalk";import{dedent as dedent7}from"ts-dedent";import semver9 from"semver";import{readConfig as readConfig2,writeConfig as writeConfig2}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo2}from"@storybook/core-common";var logger5=console,mainjsFramework={id:"mainjsFramework",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{mainConfig,framework,version:storybookVersion}=getStorybookInfo2(packageJson);if(!mainConfig)return logger5.warn("Unable to find storybook main.js config, skipping"),null;let storybookCoerced=storybookVersion&&semver9.coerce(storybookVersion)?.version;if(!storybookCoerced)return logger5.warn(dedent7`
93
- ❌ Unable to determine storybook version, skipping ${chalk8.cyan("mainjsFramework")} fix.
92
+ `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};import chalk8 from"chalk";import{dedent as dedent7}from"ts-dedent";import semver8 from"semver";import{readConfig as readConfig2,writeConfig as writeConfig2}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo2}from"@storybook/core-common";var logger5=console,mainjsFramework={id:"mainjsFramework",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{mainConfig,framework,version:storybookVersion}=getStorybookInfo2(packageJson);if(!mainConfig)return logger5.warn("Unable to find storybook main.js config, skipping"),null;let storybookCoerced=storybookVersion&&semver8.coerce(storybookVersion)?.version;if(!storybookCoerced)throw new Error(dedent7`
93
+ ❌ Unable to determine storybook version.
94
94
  🤔 Are you running automigrate from your project directory?
95
- `),null;let main=await readConfig2(mainConfig),currentFramework=main.getFieldValue(["framework"]),features=main.getFieldValue(["features"]);return currentFramework?null:features?.breakingChangesV7||features?.storyStoreV7||semver9.gte(storybookCoerced,"7.0.0")?{main,framework:`@storybook/${framework}`}:null},prompt({framework}){let frameworkFormatted=chalk8.cyan(`framework: '${framework}'`);return dedent7`
95
+ `);let main=await readConfig2(mainConfig),currentFramework=main.getFieldValue(["framework"]),features=main.getFieldValue(["features"]);return currentFramework?null:features?.breakingChangesV7||features?.storyStoreV7||semver8.gte(storybookCoerced,"7.0.0")?{main,framework:`@storybook/${framework}`}:null},prompt({framework}){let frameworkFormatted=chalk8.cyan(`framework: '${framework}'`);return dedent7`
96
96
  We've detected that your main.js configuration file does not specify the
97
97
  'framework' field, which is a requirement in SB7.0 and above. We can add one
98
98
  for you automatically:
@@ -121,62 +121,94 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
121
121
  We can upgrade your project to use the new builder automatically.
122
122
 
123
123
  More info: ${chalk10.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-renamed")}
124
- `},async run({result:{builder,main,packageJson},packageManager,dryRun}){let{dependencies={},devDependencies={}}=packageJson;if(logger7.info("Removing existing 'storybook-builder-vite' dependency"),dryRun||(delete dependencies["storybook-builder-vite"],delete devDependencies["storybook-builder-vite"],packageManager.writePackageJson(packageJson)),logger7.info("Adding '@storybook/builder-vite' as dev dependency"),dryRun||packageManager.addDependencies({installAsDevDependencies:!0},["@storybook/builder-vite"]),logger7.info("Updating main.js to use vite builder"),!dryRun){let updatedBuilder=typeof builder=="string"?"@storybook/builder-vite":{name:"@storybook/builder-vite",options:builder.options};main.setFieldValue(["core","builder"],updatedBuilder),await writeConfig4(main)}}};import chalk11 from"chalk";import{dedent as dedent10}from"ts-dedent";import semver10 from"semver";import{getStorybookInfo as getStorybookInfo5}from"@storybook/core-common";var logger8=console,getStorybookScripts=allScripts=>Object.keys(allScripts).reduce((acc,key)=>{let isStorybookScript=!1,allWordsFromScript=allScripts[key].split(" "),newScript=allWordsFromScript.map((currentWord,index)=>{let previousWord=allWordsFromScript[index-1],isSbBinary=currentWord==="build-storybook"||currentWord==="start-storybook",isPrependedByPkgManager=previousWord&&["npx","run","yarn","pnpx"].some(cmd=>previousWord.includes(cmd));return isSbBinary&&!isPrependedByPkgManager?(isStorybookScript=!0,currentWord.replace("start-storybook","storybook dev").replace("build-storybook","storybook build")):currentWord}).join(" ");return isStorybookScript&&(acc[key]={before:allScripts[key],after:newScript}),acc},{}),sbScripts={id:"sb-scripts",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{scripts={},devDependencies,dependencies}=packageJson,{version:storybookVersion}=getStorybookInfo5(packageJson),allDeps={...dependencies,...devDependencies},storybookCoerced=storybookVersion&&semver10.coerce(storybookVersion)?.version;if(!storybookCoerced)return logger8.warn(dedent10`
125
- ❌ Unable to determine storybook version, skipping ${chalk11.cyan("sb-scripts")} fix.
124
+ `},async run({result:{builder,main,packageJson},packageManager,dryRun}){let{dependencies={},devDependencies={}}=packageJson;if(logger7.info("Removing existing 'storybook-builder-vite' dependency"),dryRun||(delete dependencies["storybook-builder-vite"],delete devDependencies["storybook-builder-vite"],packageManager.writePackageJson(packageJson)),logger7.info("Adding '@storybook/builder-vite' as dev dependency"),dryRun||packageManager.addDependencies({installAsDevDependencies:!0},["@storybook/builder-vite"]),logger7.info("Updating main.js to use vite builder"),!dryRun){let updatedBuilder=typeof builder=="string"?"@storybook/builder-vite":{name:"@storybook/builder-vite",options:builder.options};main.setFieldValue(["core","builder"],updatedBuilder),await writeConfig4(main)}}};import chalk11 from"chalk";import{dedent as dedent10}from"ts-dedent";import semver9 from"semver";import{getStorybookInfo as getStorybookInfo5}from"@storybook/core-common";var logger8=console,getStorybookScripts=allScripts=>Object.keys(allScripts).reduce((acc,key)=>{let isStorybookScript=!1,allWordsFromScript=allScripts[key].split(" "),newScript=allWordsFromScript.map((currentWord,index)=>{let previousWord=allWordsFromScript[index-1],isSbBinary=currentWord==="build-storybook"||currentWord==="start-storybook"||currentWord==="sb",isPrependedByPkgManager=previousWord&&["npx","run","yarn","pnpx"].some(cmd=>previousWord.includes(cmd));return isSbBinary&&!isPrependedByPkgManager?(isStorybookScript=!0,currentWord.replace("sb","storybook").replace("start-storybook","storybook dev").replace("build-storybook","storybook build")):currentWord}).join(" ");return isStorybookScript&&(acc[key]={before:allScripts[key],after:newScript}),acc},{}),sbScripts={id:"sb-scripts",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{scripts={}}=packageJson,{version:storybookVersion}=getStorybookInfo5(packageJson),storybookCoerced=storybookVersion&&semver9.coerce(storybookVersion)?.version;if(!storybookCoerced)throw new Error(dedent10`
125
+ ❌ Unable to determine storybook version.
126
126
  🤔 Are you running automigrate from your project directory?
127
- `),null;if(allDeps.sb||allDeps.storybook)return null;let storybookScripts=getStorybookScripts(scripts);return Object.keys(storybookScripts).length===0?null:semver10.gte(storybookCoerced,"7.0.0")?{packageJson,storybookScripts,storybookVersion}:null},prompt({storybookVersion,storybookScripts}){let sbFormatted=chalk11.cyan(`Storybook ${storybookVersion}`),newScriptsMessage=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc.push([chalk11.bold(scriptKey),"from:",chalk11.cyan(storybookScripts[scriptKey].before),"to:",chalk11.cyan(storybookScripts[scriptKey].after)].join(`
127
+ `);if(semver9.lt(storybookCoerced,"7.0.0"))return null;let storybookScripts=getStorybookScripts(scripts);return Object.keys(storybookScripts).length===0?null:{packageJson,storybookScripts,storybookVersion}},prompt({storybookVersion,storybookScripts}){let sbFormatted=chalk11.cyan(`Storybook ${storybookVersion}`),newScriptsMessage=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc.push([chalk11.bold(scriptKey),"from:",chalk11.cyan(storybookScripts[scriptKey].before),"to:",chalk11.cyan(storybookScripts[scriptKey].after)].join(`
128
128
  `)),acc),[]);return dedent10`
129
129
  We've detected you are using ${sbFormatted} with scripts from previous versions of Storybook.
130
130
  Starting in Storybook 7, the ${chalk11.yellow("start-storybook")} and ${chalk11.yellow("build-storybook")} binaries have changed to ${chalk11.magenta("storybook dev")} and ${chalk11.magenta("storybook build")} respectively.
131
- In order to work with ${sbFormatted}, Storybook's ${chalk11.magenta("storybook")} binary has to be installed and your storybook scripts have to be adjusted to use the binary. We can install the storybook binary and adjust your scripts for you:
131
+ In order to work with ${sbFormatted}, your storybook scripts have to be adjusted to use the binary. We can adjust them for you:
132
132
 
133
133
  ${newScriptsMessage.join(`
134
134
 
135
135
  `)}
136
136
 
137
137
  In case this migration did not cover all of your scripts, or you'd like more info: ${chalk11.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#start-storybook--build-storybook-binaries-removed")}
138
- `},async run({result:{storybookScripts,packageJson},packageManager,dryRun}){if(logger8.log(),logger8.info("Adding 'storybook' as dev dependency"),logger8.log(),!dryRun){let versionToInstall=getStorybookVersionSpecifier(packageJson);packageManager.addDependencies({installAsDevDependencies:!0},[`storybook@${versionToInstall}`])}if(logger8.info("Updating scripts in package.json"),logger8.log(),!dryRun){let newScripts=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc[scriptKey]=storybookScripts[scriptKey].after,acc),{});logger8.log(),packageManager.addScripts(newScripts)}}};import chalk12 from"chalk";import dedent11 from"ts-dedent";import semver11 from"semver";import{readConfig as readConfig5,writeConfig as writeConfig5}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo6}from"@storybook/core-common";var logger9=console,packagesMap={"@storybook/react":{webpack5:"@storybook/react-webpack5",vite:"@storybook/react-vite"},"@storybook/preact":{webpack5:"@storybook/preact-webpack5"},"@storybook/server":{webpack5:"@storybook/server-webpack5"},"@storybook/angular":{webpack5:"@storybook/angular"},"@storybook/vue":{webpack5:"@storybook/vue-webpack5"},"@storybook/vue3":{webpack5:"@storybook/vue3-webpack5",vite:"@storybook/vue3-vite"},"@storybook/svelte":{webpack5:"@storybook/svelte-webpack5",vite:"@storybook/svelte-vite"},"@storybook/web-components":{webpack5:"@storybook/web-components-webpack5",vite:"@storybook/web-components-vite"},"@storybook/html":{webpack5:"@storybook/html-webpack5",vite:"@storybook/html-vite"}},getBuilder=builder=>typeof builder=="string"?builder.includes("vite")?"vite":"webpack5":builder?.name.includes("vite")?"vite":"webpack5",getFrameworkOptions=(framework,main)=>{let frameworkOptions={};try{frameworkOptions=main.getFieldValue([`${framework}Options`])}catch(e){logger9.warn(dedent11`
138
+ `},async run({result:{storybookScripts},packageManager,dryRun}){if(logger8.info("\u2705 Updating scripts in package.json"),logger8.log(),!dryRun){let newScripts=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc[scriptKey]=storybookScripts[scriptKey].after,acc),{});logger8.log(),packageManager.addScripts(newScripts)}}};import chalk12 from"chalk";import{dedent as dedent11}from"ts-dedent";import semver10 from"semver";import{getStorybookInfo as getStorybookInfo6}from"@storybook/core-common";var logger9=console,sbBinary={id:"storybook-binary",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{devDependencies,dependencies}=packageJson,{version:storybookVersion}=getStorybookInfo6(packageJson),allDeps={...dependencies,...devDependencies},storybookCoerced=storybookVersion&&semver10.coerce(storybookVersion)?.version;if(!storybookCoerced)throw new Error(dedent11`
139
+ ❌ Unable to determine storybook version.
140
+ 🤔 Are you running automigrate from your project directory?
141
+ `);if(semver10.lt(storybookCoerced,"7.0.0"))return null;let hasSbBinary=!!allDeps.sb,hasStorybookBinary=!!allDeps.storybook;return!hasSbBinary&&hasStorybookBinary?null:{hasSbBinary,hasStorybookBinary,storybookVersion,packageJson}},prompt({storybookVersion,hasSbBinary,hasStorybookBinary}){let sbFormatted=chalk12.cyan(`Storybook ${storybookVersion}`),storybookBinaryMessage=hasStorybookBinary?"":`We've detected you are using ${sbFormatted} without Storybook's ${chalk12.magenta("storybook")} binary. Starting in Storybook 7.0, it has to be installed.`;return dedent11`
142
+ ${storybookBinaryMessage}
143
+ ${hasSbBinary?`You're using the 'sb' binary and it should be replaced, as 'storybook' is the recommended way to run Storybook.
144
+ `:""}
145
+
146
+ More info: ${chalk12.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#start-storybook--build-storybook-binaries-removed")}
147
+ `},async run({result:{packageJson,hasSbBinary,hasStorybookBinary},packageManager,dryRun}){if(hasSbBinary&&(logger9.info("\u2705 Removing 'sb' dependency"),dryRun||packageManager.removeDependencies({skipInstall:!hasStorybookBinary,packageJson},["sb"])),!hasStorybookBinary&&(logger9.log(),logger9.info("\u2705 Adding 'storybook' as dev dependency"),logger9.log(),!dryRun)){let versionToInstall=getStorybookVersionSpecifier(packageJson);packageManager.addDependencies({installAsDevDependencies:!0},[`storybook@${versionToInstall}`])}}};import chalk13 from"chalk";import dedent12 from"ts-dedent";import semver11 from"semver";import{readConfig as readConfig5,writeConfig as writeConfig5}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo7}from"@storybook/core-common";var logger10=console,getNextjsAddonOptions=addons=>{let nextjsAddon=addons?.find(addon=>typeof addon=="string"?addon==="storybook-addon-next":addon.name==="storybook-addon-next");return!nextjsAddon||typeof nextjsAddon=="string"?{}:nextjsAddon.options||{}},nextjsFramework={id:"nextjsFramework",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),allDeps={...packageJson.dependencies,...packageJson.devDependencies};if(!allDeps.next)return null;let{mainConfig,version:storybookVersion}=getStorybookInfo7(packageJson);if(!mainConfig)return logger10.warn("Unable to find storybook main.js config, skipping"),null;let storybookCoerced=storybookVersion&&semver11.coerce(storybookVersion)?.version;if(!storybookCoerced)throw new Error(dedent12`
148
+ ❌ Unable to determine storybook version.
149
+ 🤔 Are you running automigrate from your project directory?
150
+ `);if(!semver11.gte(storybookCoerced,"7.0.0"))return null;let main=await readConfig5(mainConfig),frameworkPackage=main.getFieldValue(["framework"]);if(!frameworkPackage)return null;let frameworkPackageName=typeof frameworkPackage=="string"?frameworkPackage:frameworkPackage.name;if(frameworkPackageName==="@storybook/react-vite")return logger10.info(dedent12`
151
+ We've detected you are using Storybook in a Next.js project.
152
+
153
+ In Storybook 7, we introduced a new framework package for Next.js projects: @storybook/nextjs.
154
+
155
+ This package provides a better experience for Next.js users, however it is only compatible with the webpack 5 builder, so we can't automigrate for you, as you are using the Vite builder.
156
+
157
+ If you are interested in using this package, see: ${chalk13.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md")}
158
+ `),null;if(frameworkPackageName!=="@storybook/react-webpack5")return null;let addonOptions=getNextjsAddonOptions(main.getFieldValue(["addons"])),frameworkOptions=main.getFieldValue(["framework","options"])||{},addonsToRemove=["storybook-addon-next","storybook-addon-next-router"].filter(dep=>allDeps[dep]);return{main,addonsToRemove,frameworkOptions:{...frameworkOptions,...addonOptions},packageJson}},prompt({addonsToRemove}){let addonsMessage="";return addonsToRemove.length>0&&(addonsMessage=`
159
+ This package also supports features provided by the following packages, which can now be removed:
160
+ ${addonsToRemove.map(dep=>`- ${chalk13.cyan(dep)}`).join(", ")}
161
+ `),dedent12`
162
+ We've detected you are using Storybook in a ${chalk13.bold("Next.js")} project.
163
+
164
+ In Storybook 7, we introduced a new framework package for Next.js projects: ${chalk13.magenta("@storybook/nextjs")}.
165
+
166
+ This package is a replacement for ${chalk13.magenta("@storybook/react-webpack5")} and provides a better experience for Next.js users.
167
+ ${addonsMessage}
168
+ To learn more about it, see: ${chalk13.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md")}
169
+ `},async run({result:{addonsToRemove,main,frameworkOptions,packageJson},packageManager,dryRun}){let dependenciesToRemove=[...addonsToRemove,"@storybook/react-webpack5"];if(dependenciesToRemove.length>0&&(logger10.info(`\u2705 Removing redundant packages: ${dependenciesToRemove.join(", ")}`),!dryRun)){packageManager.removeDependencies({skipInstall:!0,packageJson},dependenciesToRemove);let updatedAddons=main.getFieldValue(["addons"]).filter(addon=>typeof addon=="string"?!addonsToRemove.includes(addon):addon.name?!addonsToRemove.includes(addon.name):!1);main.setFieldValue(["addons"],updatedAddons)}if(logger10.info("\u2705 Installing new dependencies: @storybook/nextjs"),!dryRun){let versionToInstall=getStorybookVersionSpecifier(packageJson);packageManager.addDependencies({installAsDevDependencies:!0,packageJson},[`@storybook/nextjs@${versionToInstall}`])}logger10.info("\u2705 Updating framework field in main.js"),dryRun||(main.setFieldValue(["framework","options"],frameworkOptions),main.setFieldValue(["framework","name"],"@storybook/nextjs"),await writeConfig5(main))}};import chalk14 from"chalk";import dedent13 from"ts-dedent";import semver12 from"semver";import{readConfig as readConfig6,writeConfig as writeConfig6}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo8}from"@storybook/core-common";var logger11=console,packagesMap={"@storybook/react":{webpack5:"@storybook/react-webpack5",vite:"@storybook/react-vite"},"@storybook/preact":{webpack5:"@storybook/preact-webpack5"},"@storybook/server":{webpack5:"@storybook/server-webpack5"},"@storybook/angular":{webpack5:"@storybook/angular"},"@storybook/vue":{webpack5:"@storybook/vue-webpack5"},"@storybook/vue3":{webpack5:"@storybook/vue3-webpack5",vite:"@storybook/vue3-vite"},"@storybook/svelte":{webpack5:"@storybook/svelte-webpack5",vite:"@storybook/svelte-vite"},"@storybook/web-components":{webpack5:"@storybook/web-components-webpack5",vite:"@storybook/web-components-vite"},"@storybook/html":{webpack5:"@storybook/html-webpack5",vite:"@storybook/html-vite"}},getBuilder=builder=>typeof builder=="string"?builder.includes("vite")?"vite":"webpack5":builder?.name.includes("vite")?"vite":"webpack5",getFrameworkOptions=(framework,main)=>{let frameworkOptions={};try{frameworkOptions=main.getFieldValue([`${framework}Options`])}catch(e){logger11.warn(dedent13`
139
170
  Unable to get the ${framework}Options field.
140
171
 
141
172
  Please review the changes made to your main.js config and make any necessary changes.
142
173
  The ${framework}Options should be moved to the framework.options field.
143
174
 
144
175
  The following error occurred when we tried to get the ${framework}Options field:
145
- `),console.log(e)}return frameworkOptions||{}},newFrameworks={id:"newFrameworks",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),allDeps={...packageJson.dependencies,...packageJson.devDependencies},{mainConfig,version:storybookVersion,framework}=getStorybookInfo6(packageJson);if(!mainConfig)return logger9.warn("Unable to find storybook main.js config, skipping"),null;let storybookCoerced=storybookVersion&&semver11.coerce(storybookVersion)?.version;if(!storybookCoerced)return logger9.warn(dedent11`
146
- ❌ Unable to determine storybook version, skipping ${chalk12.cyan("newFrameworks")} fix.
176
+ `),console.log(e)}return frameworkOptions||{}},newFrameworks={id:"newFrameworks",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),allDeps={...packageJson.dependencies,...packageJson.devDependencies},{mainConfig,version:storybookVersion,framework}=getStorybookInfo8(packageJson);if(!mainConfig)return logger11.warn("Unable to find storybook main.js config, skipping"),null;let storybookCoerced=storybookVersion&&semver12.coerce(storybookVersion)?.version;if(!storybookCoerced)throw new Error(dedent13`
177
+ ❌ Unable to determine storybook version.
147
178
  🤔 Are you running automigrate from your project directory?
148
- `),null;if(!semver11.gte(storybookCoerced,"7.0.0"))return null;let main=await readConfig5(mainConfig),frameworkPackage=main.getFieldValue(["framework"]),builder=main.getFieldValue(["core","builder"]);if(!frameworkPackage||!Object.keys(packagesMap).includes(frameworkPackage))return null;let builderInfo={name:getBuilder(builder),options:main.getFieldValue(["core","builder","options"])||{}},newFrameworkPackage=packagesMap[frameworkPackage][builderInfo.name];if(!newFrameworkPackage)return null;if(allDeps.vite&&semver11.lt(semver11.coerce(allDeps.vite).version,"3.0.0"))return logger9.warn(dedent11`
149
- Detected Vite ${allDeps.vite}, which is unsupported in Storybook 7.0, so the ${chalk12.cyan("newFrameworks")} fix will be skipped.
150
- Please upgrade vite to 3.0.0 or higher and rerun this automigration with "npx storybook@future automigrate".
151
- `),null;let frameworkOptions=getFrameworkOptions(framework,main),dependenciesToRemove=["@storybook/builder-webpack5","@storybook/manager-webpack5","@storybook/builder-webpack4","@storybook/manager-webpack4","@storybook/builder-vite","storybook-builder-vite"].filter(dep=>allDeps[dep]),dependenciesToAdd=[];return newFrameworkPackage!==frameworkPackage&&dependenciesToAdd.push(newFrameworkPackage),{main,dependenciesToAdd,dependenciesToRemove,frameworkPackage:newFrameworkPackage,frameworkOptions,builderInfo,packageJson}},prompt(){return dedent11`
179
+ `);if(!semver12.gte(storybookCoerced,"7.0.0"))return null;let main=await readConfig6(mainConfig),frameworkPackage=main.getFieldValue(["framework"]),builder=main.getFieldValue(["core","builder"]);if(!frameworkPackage||!Object.keys(packagesMap).includes(frameworkPackage))return null;let builderInfo={name:getBuilder(builder),options:main.getFieldValue(["core","builder","options"])||{}},newFrameworkPackage=packagesMap[frameworkPackage][builderInfo.name];if(!newFrameworkPackage)return null;let frameworkOptions=newFrameworkPackage==="@storybook/svelte-vite"?{}:getFrameworkOptions(framework,main),dependenciesToRemove=["@storybook/builder-webpack5","@storybook/manager-webpack5","@storybook/builder-webpack4","@storybook/manager-webpack4","@storybook/builder-vite","storybook-builder-vite"].filter(dep=>allDeps[dep]),dependenciesToAdd=[];if(newFrameworkPackage!==frameworkPackage&&dependenciesToAdd.push(newFrameworkPackage),allDeps.vite&&semver12.lt(semver12.coerce(allDeps.vite).version,"3.0.0"))throw new Error(dedent13`
180
+ Your project should be upgraded to use the framework package ${chalk14.bold(newFrameworkPackage)}, but we detected that you are using Vite ${chalk14.bold(allDeps.vite)}, which is unsupported in ${chalk14.bold("Storybook 7.0")}. Please upgrade Vite to ${chalk14.bold("3.0.0 or higher")} and rerun this migration.
181
+ `);return{main,dependenciesToAdd,dependenciesToRemove,frameworkPackage:newFrameworkPackage,frameworkOptions,builderInfo,packageJson}},prompt({frameworkPackage,dependenciesToRemove}){return dedent13`
152
182
  We've detected you are using an older format of Storybook frameworks and builders.
153
183
 
154
184
  In Storybook 7, frameworks also specify the builder to be used.
155
185
 
156
- We can remove the dependencies that are no longer needed and install the new framework that already includes the builder.
186
+ We can remove the dependencies that are no longer needed: ${chalk14.yellow(dependenciesToRemove.join(", "))}
187
+
188
+ And set up the ${chalk14.magenta(frameworkPackage)} framework that already includes the builder.
157
189
 
158
- To learn more about the framework field, see: ${chalk12.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory")}
190
+ To learn more about the framework field, see: ${chalk14.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-field-mandatory")}
159
191
 
160
- ${chalk12.underline(chalk12.bold(chalk12.cyan("Webpack4 users")))}
192
+ ${chalk14.underline(chalk14.bold(chalk14.cyan("Webpack4 users")))}
161
193
 
162
194
  Unless you're using Storybook's Vite builder, this automigration will install a Webpack5-based framework.
163
195
 
164
196
  If you were using Storybook's Webpack4 builder (default in 6.x, discontinued in 7.0), this could be a breaking
165
- change--especially if your project has a custom webpack configuration.
197
+ change -- especially if your project has a custom webpack configuration.
166
198
 
167
- To learn more about migrating from Webpack4, see: ${chalk12.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack4-support-discontinued")}
168
- `},async run({result:{dependenciesToAdd,dependenciesToRemove,main,frameworkPackage,frameworkOptions,builderInfo,packageJson},packageManager,dryRun}){if(logger9.info(`\u2705 Removing legacy dependencies: ${dependenciesToRemove.join(", ")}`),dryRun||packageManager.removeDependencies({skipInstall:dependenciesToAdd.length>0,packageJson},dependenciesToRemove),dependenciesToAdd.length>0&&(logger9.info(`\u2705 Installing new dependencies: ${dependenciesToAdd.join(", ")}`),!dryRun)){let versionToInstall=getStorybookVersionSpecifier(packageJson),depsToAdd=dependenciesToAdd.map(dep=>`${dep}@${versionToInstall}`);packageManager.addDependencies({installAsDevDependencies:!0},depsToAdd)}if(!dryRun){logger9.info("\u2705 Updating framework field in main.js");let currentCore=main.getFieldValue(["core"]);main.setFieldValue(["framework","name"],frameworkPackage),main.setFieldValue(["framework","options"],frameworkOptions),currentCore?.builder&&delete currentCore.builder,Object.keys(builderInfo.options).length>0&&main.setFieldValue(["framework","options","builder"],builderInfo.options),currentCore&&(Object.keys(currentCore).length===0?main.setFieldValue(["core"],{}):main.setFieldValue(["core"],currentCore)),await writeConfig5(main)}}};import chalk13 from"chalk";import dedent12 from"ts-dedent";import{getStorybookInfo as getStorybookInfo7}from"@storybook/core-common";import{readFile as readFile2}from"fs-extra";var RemovedAPIs=(RemovedAPIs2=>(RemovedAPIs2.addDecorator="addDecorator",RemovedAPIs2.addParameters="addParameters",RemovedAPIs2.addLoader="addLoader",RemovedAPIs2.getStorybook="getStorybook",RemovedAPIs2.setAddon="setAddon",RemovedAPIs2.clearDecorators="clearDecorators",RemovedAPIs2))(RemovedAPIs||{}),removedGlobalClientAPIs={id:"removedglobalclientapis",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{previewConfig}=getStorybookInfo7(packageJson);if(previewConfig){let contents=await readFile2(previewConfig,"utf8"),usedAPIs=Object.values(RemovedAPIs).reduce((acc,item)=>(contents.includes(item)&&acc.push(item),acc),[]);if(usedAPIs.length)return{usedAPIs,previewPath:previewConfig}}return null},prompt({usedAPIs,previewPath}){return dedent12`
169
- The following APIs (used in "${chalk13.yellow(previewPath)}") have been removed from Storybook:
199
+ To learn more about migrating from Webpack4, see: ${chalk14.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack4-support-discontinued")}
200
+ `},async run({result:{dependenciesToAdd,dependenciesToRemove,main,frameworkPackage,frameworkOptions,builderInfo,packageJson},packageManager,dryRun}){if(logger11.info(`\u2705 Removing legacy dependencies: ${dependenciesToRemove.join(", ")}`),dryRun||packageManager.removeDependencies({skipInstall:dependenciesToAdd.length>0,packageJson},dependenciesToRemove),dependenciesToAdd.length>0&&(logger11.info(`\u2705 Installing new dependencies: ${dependenciesToAdd.join(", ")}`),!dryRun)){let versionToInstall=getStorybookVersionSpecifier(packageJson),depsToAdd=dependenciesToAdd.map(dep=>`${dep}@${versionToInstall}`);packageManager.addDependencies({installAsDevDependencies:!0},depsToAdd)}if(!dryRun){logger11.info("\u2705 Updating framework field in main.js");let currentCore=main.getFieldValue(["core"]);main.setFieldValue(["framework","name"],frameworkPackage),main.setFieldValue(["framework","options"],frameworkOptions),currentCore?.builder&&delete currentCore.builder,frameworkPackage==="@storybook/svelte-vite"&&main.getFieldNode(["svelteOptions"])&&(logger11.info("\u2705 Removing svelteOptions field in main.js"),main.removeField(["svelteOptions"])),Object.keys(builderInfo.options).length>0&&main.setFieldValue(["framework","options","builder"],builderInfo.options),currentCore&&(Object.keys(currentCore).length===0?main.removeField(["core"]):main.setFieldValue(["core"],currentCore)),await writeConfig6(main)}}};import chalk15 from"chalk";import dedent14 from"ts-dedent";import{getStorybookInfo as getStorybookInfo9}from"@storybook/core-common";import{readFile as readFile2}from"fs-extra";var RemovedAPIs=(RemovedAPIs2=>(RemovedAPIs2.addDecorator="addDecorator",RemovedAPIs2.addParameters="addParameters",RemovedAPIs2.addLoader="addLoader",RemovedAPIs2.getStorybook="getStorybook",RemovedAPIs2.setAddon="setAddon",RemovedAPIs2.clearDecorators="clearDecorators",RemovedAPIs2))(RemovedAPIs||{}),removedGlobalClientAPIs={id:"removedglobalclientapis",promptOnly:!0,async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{previewConfig}=getStorybookInfo9(packageJson);if(previewConfig){let contents=await readFile2(previewConfig,"utf8"),usedAPIs=Object.values(RemovedAPIs).reduce((acc,item)=>(contents.includes(item)&&acc.push(item),acc),[]);if(usedAPIs.length)return{usedAPIs,previewPath:previewConfig}}return null},prompt({usedAPIs,previewPath}){return dedent14`
201
+ ${chalk15.bold(chalk15.red("Attention"))}: We could not automatically make this change. You'll need to do it manually.
202
+
203
+ The following APIs (used in "${chalk15.yellow(previewPath)}") have been removed from Storybook:
170
204
 
171
- ${usedAPIs.map(api=>`- ${chalk13.cyan(api)}`).join(`
205
+ ${usedAPIs.map(api=>`- ${chalk15.cyan(api)}`).join(`
172
206
  `)}
173
207
 
174
- You'll need to update "${chalk13.yellow(previewPath)}" manually.
175
-
176
208
  Please see the migration guide for more information:
177
- ${chalk13.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#removed-global-client-apis")}
178
- `},async run(){console.log("Skipping automatic fix for removed global client APIs")}};import chalk14 from"chalk";import{dedent as dedent13}from"ts-dedent";import{basename}from"path";import fse5 from"fs-extra";import globby from"globby";var MDX1_SCRIPT_START=/<style>{`/g,MDX1_SCRIPT_END=/`}<\/style>/g,fixMdxScript=mdx=>mdx.replace(MDX1_SCRIPT_START,"<style>\n {`").replace(MDX1_SCRIPT_END," `}\n</style>"),logger10=console,mdx1to2={id:"mdx1to2",async check(){let storiesMdxFiles=await globby("./!(node_modules)**/*.(story|stories).mdx");return storiesMdxFiles.length?{storiesMdxFiles}:void 0},prompt({storiesMdxFiles}){return dedent13`
179
- We've found ${chalk14.yellow(storiesMdxFiles.length)} '.stories.mdx' files in your project.
209
+ ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#removed-global-client-apis")}
210
+ `}};import chalk16 from"chalk";import{dedent as dedent15}from"ts-dedent";import{basename}from"path";import fse5 from"fs-extra";import globby from"globby";var MDX1_SCRIPT_START=/<style>{`/g,MDX1_SCRIPT_END=/`}<\/style>/g,fixMdxScript=mdx=>mdx.replace(MDX1_SCRIPT_START,"<style>\n {`").replace(MDX1_SCRIPT_END," `}\n</style>"),logger12=console,mdx1to2={id:"mdx1to2",async check(){let storiesMdxFiles=await globby("./!(node_modules)**/*.(story|stories).mdx");return storiesMdxFiles.length?{storiesMdxFiles}:void 0},prompt({storiesMdxFiles}){return dedent15`
211
+ We've found ${chalk16.yellow(storiesMdxFiles.length)} '.stories.mdx' files in your project.
180
212
 
181
213
  Storybook has upgraded to MDX2 (https://mdxjs.com/blog/v2/), which contains breaking changes from V1.
182
214
 
@@ -184,17 +216,61 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
184
216
 
185
217
  For a full guide for how to manually upgrade your files, see the MDX2 migration guide:
186
218
 
187
- ${chalk14.cyan("https://mdxjs.com/migrating/v2/#update-mdx-files")}
188
- `},async run({result:{storiesMdxFiles},dryRun}){await Promise.all(storiesMdxFiles.map(async fname=>{let contents=await fse5.readFile(fname,"utf-8"),updated=fixMdxScript(contents);updated===contents?logger10.info(`\u{1F197} Unmodified ${basename(fname)}`):(logger10.info(`\u2705 Modified ${basename(fname)}`),dryRun||await fse5.writeFile(fname,updated))}))}};import chalk15 from"chalk";import{dedent as dedent14}from"ts-dedent";import{readConfig as readConfig6,writeConfig as writeConfig6}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo8}from"@storybook/core-common";var logger11=console,docsPageAutomatic={id:"docsPageAutomatic",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{mainConfig}=getStorybookInfo8(packageJson);if(!mainConfig)return logger11.warn("Unable to find storybook main.js config, skipping"),null;let main=await readConfig6(mainConfig);return main.getFieldValue(["docs"])?.docsPage===void 0?{main}:null},prompt(){let docsPageAutomaticFormatted=chalk15.cyan("docs: { docsPage: 'automatic' }");return dedent14`
189
- We've detected that your main.js configuration file has not configured docsPage. In 6.x we
190
- we defaulted to having a docsPage for every story, in 7.x you need to opt in per-component.
191
- However, we can set the \`docs.docsPage\` to 'automatic' to approximate the old behaviour:
219
+ ${chalk16.cyan("https://mdxjs.com/migrating/v2/#update-mdx-files")}
220
+ `},async run({result:{storiesMdxFiles},dryRun}){await Promise.all(storiesMdxFiles.map(async fname=>{let contents=await fse5.readFile(fname,"utf-8"),updated=fixMdxScript(contents);updated===contents?logger12.info(`\u{1F197} Unmodified ${basename(fname)}`):(logger12.info(`\u2705 Modified ${basename(fname)}`),dryRun||await fse5.writeFile(fname,updated))}))}};import chalk17 from"chalk";import{dedent as dedent16}from"ts-dedent";import{readConfig as readConfig7,writeConfig as writeConfig7}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo10}from"@storybook/core-common";var logger13=console,autodocsTrue={id:"autodocsTrue",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{mainConfig}=getStorybookInfo10(packageJson);if(!mainConfig)return logger13.warn("Unable to find storybook main.js config, skipping"),null;let main=await readConfig7(mainConfig),docs=main.getFieldValue(["docs"]),docsPageToAutodocsMapping={true:"tag",automatic:!0,false:!1};if(docs?.docsPage){let oldValue=docs?.docsPage.toString();if(!(oldValue in docsPageToAutodocsMapping))throw new Error(`Unexpected value for docs.docsPage: ${oldValue}`);return{main,value:docsPageToAutodocsMapping[oldValue]}}return docs?.autodocs===void 0?{main}:null},prompt({value}){let autodocsFormatted=chalk17.cyan(`docs: { autodocs: ${JSON.stringify(value??!0)} }`);return value?dedent16`
221
+ We've changed the configuration of autodocs (previous docsPage), so now the value:
222
+ - docs.autodocs: true -- means automatically create docs for every CSF file
223
+ - docs.autodocs: 'tag' -- means only create autodocs for CSF files with the 'autodocs' tag
224
+ - docs.autodocs: false -- means never create autodocs
225
+
226
+ Based on your prior configuration, we can set the \`docs.autodocs\` to keep your old behaviour:
227
+
228
+ ${autodocsFormatted}
229
+
230
+ ${value==="tag"&&"NOTE: it is important you change all CSF files to use the 'autodocs' tag rather than the 'docsPage' tag."}
192
231
 
193
- ${docsPageAutomaticFormatted}
232
+ More info: ${chalk17.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#autodocs")}
233
+ `:dedent16`
234
+ We've detected that your main.js configuration file has not configured autodocs. In 6.x we
235
+ we defaulted to having a autodocs for every story, in 7.x you need to opt in per-component.
236
+ However, we can set the \`docs.autodocs\` to true to approximate the old behaviour:
194
237
 
195
- More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#docs-page")}
196
- `},async run({result:{main},dryRun}){logger11.info("\u2705 Setting 'docs.docsPage' to 'automatic' in main.js"),dryRun||(main.setFieldValue(["docs","docsPage"],"automatic"),await writeConfig6(main))}};import chalk16 from"chalk";import{dedent as dedent15}from"ts-dedent";var addReact={id:"addReact",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),installedDependencies=new Set(Object.keys({...packageJson.dependencies,...packageJson.devDependencies})),dependents=["@storybook/addon-essentials","@storybook/addon-docs"].filter(pkg2=>installedDependencies.has(pkg2)),additionalDependencies=[];return dependents.length>0&&(installedDependencies.has("react")||additionalDependencies.push("react"),installedDependencies.has("react-dom")||additionalDependencies.push("react-dom")),additionalDependencies.length>0?{dependents,additionalDependencies}:null},prompt({dependents,additionalDependencies}){let dependentsFormatted=dependents.map(pkg2=>chalk16.cyan(pkg2)).join(" & "),additionalDependenciesFormatted=additionalDependencies.map(pkg2=>`- ${chalk16.cyan(pkg2)}`).join(`
197
- `);return dedent15`
238
+ ${autodocsFormatted}
239
+
240
+ More info: ${chalk17.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#autodocs")}
241
+ `},async run({result:{main,value},dryRun}){logger13.info("\u2705 Setting 'docs.autodocs' to true in main.js"),dryRun||(main.removeField(["docs","docsPage"]),main.setFieldValue(["docs","autodocs"],value??!0),await writeConfig7(main))}};import chalk18 from"chalk";import dedent17 from"ts-dedent";import semver13 from"semver";import{readConfig as readConfig8,writeConfig as writeConfig8}from"@storybook/csf-tools";import{getStorybookInfo as getStorybookInfo11}from"@storybook/core-common";var logger14=console,fixId="sveltekitFramework",sveltekitFramework={id:fixId,async check({packageManager}){let packageJson=packageManager.retrievePackageJson();if(!{...packageJson.dependencies,...packageJson.devDependencies}["@sveltejs/kit"])return null;let{mainConfig,version:storybookVersion}=getStorybookInfo11(packageJson);if(!mainConfig)return logger14.warn("Unable to find storybook main.js config, skipping"),null;let sbVersionCoerced=storybookVersion&&semver13.coerce(storybookVersion)?.version;if(!sbVersionCoerced)throw new Error(dedent17`
242
+ ❌ Unable to determine storybook version.
243
+ 🤔 Are you running automigrate from your project directory?
244
+ `);if(!semver13.gte(sbVersionCoerced,"7.0.0"))return null;let main=await readConfig8(mainConfig),frameworkConfig=main.getFieldValue(["framework"]);if(!frameworkConfig)return logger14.warn(dedent17`
245
+ ❌ Unable to determine Storybook framework, skipping ${chalk18.cyan(fixId)} fix.
246
+ 🤔 Are you running automigrate from your project directory?
247
+ `),null;let framework=typeof frameworkConfig=="string"?frameworkConfig:frameworkConfig.name;if(framework==="@storybook/sveltekit")return null;if(framework==="@storybook/svelte-vite")return{main,packageJson,dependenciesToRemove:["@storybook/svelte-vite"]};if(framework!=="@storybook/svelte")return logger14.warn(dedent17`
248
+ We've detected you are using Storybook in a SvelteKit project.
249
+
250
+ In Storybook 7, we introduced a new framework package for SvelteKit projects: @storybook/sveltekit.
251
+
252
+ This package provides a better experience for SvelteKit users, however it is only compatible with the Svelte framework and the Vite builder, so we can't automigrate for you, as you are using another framework and builder combination.
253
+
254
+ If you are interested in using this package, see: ${chalk18.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#sveltekit-needs-the-storybooksveltekit-framework")}
255
+ `),null;let builder=main.getFieldValue(["core","builder"]);return["@storybook/builder-vite","storybook-builder-vite"].includes(builder)?{main,packageJson,dependenciesToRemove:[builder]}:(logger14.warn(dedent17`
256
+ We've detected you are using Storybook in a SvelteKit project.
257
+
258
+ In Storybook 7, we introduced a new framework package for SvelteKit projects: @storybook/sveltekit.
259
+
260
+ This package provides a better experience for SvelteKit users, however it is only compatible with the Vite builder, so we can't automigrate for you, as you are using another builder.
261
+
262
+ If you are interested in using this package, see: ${chalk18.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#sveltekit-needs-the-storybooksveltekit-framework")}
263
+ `),null)},prompt(){return dedent17`
264
+ We've detected you are using Storybook in a SvelteKit project.
265
+
266
+ In Storybook 7, we introduced a new framework package for SvelteKit projects: @storybook/sveltekit
267
+ This package is a replacement for @storybook/svelte-vite and provides a better experience for SvelteKit users.
268
+
269
+ We can automatically migrate your project to use the new SvelteKit framework package.
270
+
271
+ To learn more about this change, see: ${chalk18.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#sveltekit-needs-the-storybooksveltekit-framework")}
272
+ `},async run({result:{main,packageJson,dependenciesToRemove},packageManager,dryRun}){if(logger14.info(`\u2705 Removing redundant packages: ${dependenciesToRemove.join(", ")}`),dryRun||packageManager.removeDependencies({skipInstall:!0,packageJson},dependenciesToRemove),logger14.info("\u2705 Installing new dependencies: @storybook/sveltekit"),!dryRun){let versionToInstall=getStorybookVersionSpecifier(packageJson);packageManager.addDependencies({installAsDevDependencies:!0,packageJson},[`@storybook/sveltekit@${versionToInstall}`])}logger14.info("\u2705 Updating framework field in main.js"),main.setFieldValue(["framework"],"@storybook/sveltekit");let currentCore=main.getFieldValue(["core"]);if(currentCore.builder){logger14.info("\u2705 Updating core field in main.js");let{builder,...core}=currentCore;Object.keys(core).length===0?main.removeField(["core"]):main.setFieldValue(["core"],core)}main.getFieldNode(["svelteOptions"])&&(logger14.info("\u2705 Removing svelteOptions field in main.js"),main.removeField(["svelteOptions"])),dryRun||await writeConfig8(main)}};import chalk19 from"chalk";import{dedent as dedent18}from"ts-dedent";var addReact={id:"addReact",async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),installedDependencies=new Set(Object.keys({...packageJson.dependencies,...packageJson.devDependencies})),dependents=["@storybook/addon-essentials","@storybook/addon-docs"].filter(pkg2=>installedDependencies.has(pkg2)),additionalDependencies=[];return dependents.length>0&&(installedDependencies.has("react")||additionalDependencies.push("react"),installedDependencies.has("react-dom")||additionalDependencies.push("react-dom")),additionalDependencies.length>0?{dependents,additionalDependencies}:null},prompt({dependents,additionalDependencies}){let dependentsFormatted=dependents.map(pkg2=>chalk19.cyan(pkg2)).join(" & "),additionalDependenciesFormatted=additionalDependencies.map(pkg2=>`- ${chalk19.cyan(pkg2)}`).join(`
273
+ `);return dedent18`
198
274
  We've detected that you're using ${dependentsFormatted}.
199
275
 
200
276
  Starting in Storybook 7 we now require the following peer dependencies:
@@ -203,9 +279,55 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
203
279
 
204
280
  We can add these for you automatically.
205
281
 
206
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-peer-dependencies-required")}
207
- `},async run({packageManager,result:{additionalDependencies},dryRun}){dryRun||packageManager.addDependencies({installAsDevDependencies:!0},additionalDependencies)}};var fixes=[cra5,webpack5,angular12,vue3,mainjsFramework,eslintPlugin,builderVite,sbScripts,newFrameworks,removedGlobalClientAPIs,mdx1to2,docsPageAutomatic,addReact];var logger12=console;var automigrate=async({fixId,dryRun,yes,useNpm,force}={})=>{let packageManager=JsPackageManagerFactory.getPackageManager({useNpm,force}),filtered=fixId?fixes.filter(f=>f.id===fixId):fixes;logger12.info("\u{1F50E} checking possible migrations..");let fixResults={};for(let i=0;i<filtered.length;i+=1){let f=fixes[i],result,fixStatus;try{result=await f.check({packageManager})}catch{fixStatus="check_failed",logger12.info(`failed to check fix: ${f.id}`)}if(!result)fixStatus="unnecessary";else{logger12.info(`\u{1F50E} found a '${chalk17.cyan(f.id)}' migration:`),logger12.info();let message=f.prompt(result);logger12.info(boxen(message,{borderStyle:"round",padding:1,borderColor:"#F1618C"}));let runAnswer;if(dryRun?runAnswer={fix:!1}:yes?runAnswer={fix:!0}:runAnswer=await prompts2({type:"confirm",name:"fix",message:`Do you want to run the '${chalk17.cyan(f.id)}' migration on your project?`}),runAnswer.fix)try{await f.run({result,packageManager,dryRun}),logger12.info(`\u2705 ran ${chalk17.cyan(f.id)} migration`),fixStatus="succeeded"}catch(error){fixStatus="failed",logger12.info(`\u274C error when running ${chalk17.cyan(f.id)} migration:`),logger12.info(error),logger12.info()}else fixStatus="skipped",logger12.info(`Skipping the ${chalk17.cyan(f.id)} migration.`),logger12.info(),logger12.info(`If you change your mind, run '${chalk17.cyan("npx storybook@next automigrate")}'`)}fixResults[f.id]=fixStatus}return logger12.info(),logger12.info("\u2705 migration check successfully ran"),logger12.info(),fixResults};var logger13=console,installStorybook=(projectType,packageManager,options)=>{let npmOptions={installAsDevDependencies:!0,skipInstall:options.skipInstall},packageJson;try{packageJson=packageManager.readPackageJson()}catch{}let generatorOptions={language:detectLanguage(packageJson),builder:options.builder||detectBuilder(packageManager),linkable:!!options.linkable,commonJs:options.commonJs,pnp:options.usePnp};return(async()=>{switch(projectType){case"ALREADY_HAS_STORYBOOK":return logger13.log(),paddedLog("There seems to be a Storybook already available in this project."),paddedLog(`Apply following command to force:
208
- `),codeLog(["sb init [options] -f"]),logger13.log(),Promise.resolve();case"REACT_SCRIPTS":return REACT_SCRIPTS_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Create React App" based project'));case"REACT":return REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog(`Adding Storybook support to your "React" app
282
+ More info: ${chalk19.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-peer-dependencies-required")}
283
+ `},async run({packageManager,result:{additionalDependencies},dryRun}){dryRun||packageManager.addDependencies({installAsDevDependencies:!0},additionalDependencies)}};import chalk20 from"chalk";import dedent19 from"ts-dedent";import semver14 from"semver";import{getStorybookInfo as getStorybookInfo12}from"@storybook/core-common";var nodeJsRequirement={id:"nodejs-requirement",promptOnly:!0,async check({packageManager}){let packageJson=packageManager.retrievePackageJson(),{version:storybookVersion}=getStorybookInfo12(packageJson),storybookCoerced=storybookVersion&&semver14.coerce(storybookVersion)?.version;if(!storybookCoerced)throw new Error(dedent19`
284
+ Unable to determine storybook version.
285
+ 🤔 Are you running automigrate from your project directory?
286
+ `);if(!semver14.gte(storybookCoerced,"7.0.0"))return null;let nodeVersion=process.version;return semver14.lt(nodeVersion,"16.0.0")?{nodeVersion}:null},prompt({nodeVersion}){return dedent19`
287
+ ${chalk20.bold(chalk20.red("Attention"))}: We could not automatically make this change. You'll need to do it manually.
288
+
289
+ We've detected that you're using Node ${chalk20.bold(nodeVersion)} but Storybook 7 only supports Node ${chalk20.bold("v16.0.0")} and higher. You will either need to upgrade your Node version or keep using an older version of Storybook.
290
+
291
+ Please see the migration guide for more information:
292
+ ${chalk20.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#dropped-support-for-node-15-and-below")}
293
+ `}};var fixes=[nodeJsRequirement,cra5,webpack5,angular12,vue3,mainjsFramework,eslintPlugin,sveltekitFramework,builderVite,sbBinary,sbScripts,newFrameworks,nextjsFramework,removedGlobalClientAPIs,mdx1to2,autodocsTrue,addReact];import{EOL}from"os";var cleanLog=str=>str.replace(/\u001b\[.*?m/g,"").replace(/╮│/g,`\u256E
294
+ \u2502`).replace(/││/g,`\u2502
295
+ \u2502`).replace(/│╰/g,`\u2502
296
+ \u2570`).replace(/⚠️ {2}failed to check/g,`${EOL}\u26A0\uFE0F failed to check`);var logger15=console,LOG_FILE_NAME="migration-storybook.log",LOG_FILE_PATH=join6(process.cwd(),LOG_FILE_NAME),TEMP_LOG_FILE_PATH="",originalStdOutWrite=process.stdout.write.bind(process.stdout),originalStdErrWrite=process.stderr.write.bind(process.stdout),augmentLogsToFile=()=>{TEMP_LOG_FILE_PATH=tempy.file({name:LOG_FILE_NAME});let logStream=createWriteStream(TEMP_LOG_FILE_PATH);process.stdout.write=d=>(originalStdOutWrite(d),logStream.write(cleanLog(d))),process.stderr.write=d=>logStream.write(cleanLog(d))},cleanup=()=>{process.stdout.write=originalStdOutWrite,process.stderr.write=originalStdErrWrite};var logAvailableMigrations=()=>{let availableFixes=fixes.map(f=>chalk21.yellow(f.id)).join(", ");logger15.info(`
297
+ The following migrations are available: ${availableFixes}`)},automigrate=async({fixId:fixId2,dryRun,yes,useNpm,packageManager:pkgMgr,list}={})=>{if(list)return logAvailableMigrations(),null;useNpm&&(useNpmWarning(),pkgMgr="npm");let fixes2=fixId2?fixes.filter(f=>f.id===fixId2):fixes;if(fixId2&&fixes2.length===0)return logger15.info(`\u{1F4ED} No migrations found for ${chalk21.magenta(fixId2)}.`),logAvailableMigrations(),null;augmentLogsToFile();let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr});logger15.info("\u{1F50E} checking possible migrations..");let fixResults={},fixSummary={succeeded:[],failed:{},manual:[],skipped:[]};for(let i=0;i<fixes2.length;i+=1){let f=fixes2[i],result;try{result=await f.check({packageManager})}catch(error){logger15.info(`\u26A0\uFE0F failed to check fix ${chalk21.bold(f.id)}`),logger15.error(`
298
+ ${error.stack}`),fixSummary.failed[f.id]=error.message,fixResults[f.id]="check_failed"}if(result){logger15.info(`
299
+ \u{1F50E} found a '${chalk21.cyan(f.id)}' migration:`);let message=f.prompt(result);logger15.info(boxen(message,{borderStyle:"round",padding:1,borderColor:"#F1618C",title:f.promptOnly?"Manual migration detected":"Automigration detected"}));let runAnswer;try{if(dryRun)runAnswer={fix:!1};else if(yes)runAnswer={fix:!0},f.promptOnly&&(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id));else if(f.promptOnly){fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id),logger15.info();let{shouldContinue}=await prompts2({type:"toggle",name:"shouldContinue",message:"Select continue once you have made the required changes, or quit to exit the migration process",initial:!0,active:"continue",inactive:"quit"},{onCancel:()=>{throw new Error}});if(!shouldContinue){fixResults[f.id]="manual_skipped";break}}else runAnswer=await prompts2({type:"confirm",name:"fix",message:`Do you want to run the '${chalk21.cyan(f.id)}' migration on your project?`,initial:!0},{onCancel:()=>{throw new Error}})}catch{break}if(!f.promptOnly)if(runAnswer.fix)try{await f.run({result,packageManager,dryRun}),logger15.info(`\u2705 ran ${chalk21.cyan(f.id)} migration`),fixResults[f.id]="succeeded",fixSummary.succeeded.push(f.id)}catch(error){fixResults[f.id]="failed",fixSummary.failed[f.id]=error.message,logger15.info(`\u274C error when running ${chalk21.cyan(f.id)} migration`),logger15.info(error),logger15.info()}else fixResults[f.id]="skipped",fixSummary.skipped.push(f.id)}else fixResults[f.id]=fixResults[f.id]||"unnecessary"}return Object.values(fixResults).some(r=>r==="failed"||r==="check_failed")?await move(TEMP_LOG_FILE_PATH,join6(process.cwd(),LOG_FILE_NAME),{overwrite:!0}):await remove(TEMP_LOG_FILE_PATH),logger15.info(),logger15.info(getMigrationSummary(fixResults,fixSummary,LOG_FILE_PATH)),logger15.info(),cleanup(),fixResults};function getMigrationSummary(fixResults,fixSummary,logFile){let hasNoFixes=Object.values(fixResults).every(r=>r==="unnecessary"),hasFailures=Object.values(fixResults).some(r=>r==="failed"||r==="check_failed"),title=hasNoFixes?"No migrations were applicable to your project":hasFailures?"Migration check ran with failures":"Migration check ran successfully",successfulFixesMessage=fixSummary.succeeded.length>0?`
300
+ ${chalk21.bold("Successful migrations:")}
301
+
302
+ ${fixSummary.succeeded.map(m=>chalk21.green(m)).join(", ")}
303
+ `:"",failedFixesMessage=Object.keys(fixSummary.failed).length>0?`
304
+ ${chalk21.bold("Failed migrations:")}
305
+ ${Object.entries(fixSummary.failed).reduce((acc,[id,error])=>`${acc}
306
+ ${chalk21.redBright(id)}:
307
+ ${error}
308
+ `,"")}
309
+
310
+ You can find the full logs in ${chalk21.cyan(logFile)}
311
+ `:"",manualFixesMessage=fixSummary.manual.length>0?`
312
+ ${chalk21.bold("Manual migrations:")}
313
+
314
+ ${fixSummary.manual.map(m=>fixResults[m]==="manual_succeeded"?chalk21.green(m):chalk21.blue(m)).join(", ")}
315
+ `:"",skippedFixesMessage=fixSummary.skipped.length>0?`
316
+ ${chalk21.bold("Skipped migrations:")}
317
+
318
+ ${fixSummary.skipped.map(m=>chalk21.cyan(m)).join(", ")}
319
+ `:"",summaryMessage=dedent20`
320
+ ${successfulFixesMessage}${manualFixesMessage}${failedFixesMessage}${skippedFixesMessage}${hasNoFixes?"":`
321
+ \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
322
+
323
+ `}If you'd like to run the migrations again, you can do so by running '${chalk21.cyan("npx storybook@next automigrate")}'
324
+
325
+ The automigrations try to migrate common patterns in your project, but might not contain everything needed to migrate to the latest version of Storybook.
326
+
327
+ Please check the changelog and migration guide for manual migrations and more information: ${chalk21.yellow("https://storybook.js.org/migration-guides/7.0")}
328
+ And reach out on Discord if you need help: ${chalk21.yellow("https://discord.gg/storybook")}
329
+ `;return boxen(summaryMessage,{borderStyle:"round",padding:1,title,borderColor:hasFailures?"red":"green"})}var logger16=console,installStorybook=(projectType,packageManager,options)=>{let npmOptions={installAsDevDependencies:!0,skipInstall:options.skipInstall},packageJson;try{packageJson=packageManager.readPackageJson()}catch{}let generatorOptions={language:detectLanguage(packageJson),builder:options.builder||detectBuilder(packageManager),linkable:!!options.linkable,commonJs:options.commonJs,pnp:options.usePnp};return(async()=>{switch(projectType){case"ALREADY_HAS_STORYBOOK":return logger16.log(),paddedLog("There seems to be a Storybook already available in this project."),paddedLog(`Apply following command to force:
330
+ `),codeLog(["sb init [options] -f"]),logger16.log(),Promise.resolve();case"REACT_SCRIPTS":return REACT_SCRIPTS_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Create React App" based project'));case"REACT":return REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog(`Adding Storybook support to your "React" app
209
331
  `));case"REACT_NATIVE":return(options.yes?Promise.resolve({server:!0}):prompts3([{type:"confirm",name:"server",message:"Do you want to install dependencies necessary to run Storybook server? You can manually do it later by install @storybook/react-native-server",initial:!1}])).then(({server})=>REACT_NATIVE_default(packageManager,npmOptions,server)).then(commandLog(`Adding Storybook support to your "React Native" app
210
332
  `));case"WEBPACK_REACT":return WEBPACK_REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog(`Adding Storybook support to your "Webpack React" app
211
333
  `));case"REACT_PROJECT":return REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog(`Adding Storybook support to your "React" library
@@ -227,90 +349,117 @@ Add a project and re-run the installation`)}async function getBaseTsConfigName()
227
349
  `));case"RAX":return RAX_default(packageManager,npmOptions,generatorOptions).then(commandLog(`Adding Storybook support to your "Rax" app
228
350
  `));case"AURELIA":return AURELIA_default(packageManager,npmOptions,generatorOptions).then(commandLog(`Adding Storybook support to your "Aurelia" app
229
351
  `));case"SERVER":return SERVER_default(packageManager,npmOptions,generatorOptions).then(commandLog(`Adding Storybook support to your "Server" app
230
- `));case"UNSUPPORTED":return paddedLog("We detected a project type that we don't support yet."),paddedLog("If you'd like your framework to be supported, please let use know about it at https://github.com/storybookjs/storybook/issues"),logger13.log(),Promise.resolve();default:return paddedLog(`We couldn't detect your project type. (code: ${projectType})`),paddedLog("You can specify a project type explicitly via `sb init --type <type>`, see our docs on how to configure Storybook for your framework: https://storybook.js.org/docs/react/get-started/install"),logger13.log(),projectTypeInquirer(options,packageManager)}})().catch(ex=>{logger13.error(`
231
- ${chalk18.red(ex.stack)}`),process.exit(1)})},projectTypeInquirer=async(options,packageManager)=>{let manualAnswer=options.yes?!0:await prompts3([{type:"confirm",name:"manual",message:"Do you want to manually choose a Storybook project type to install?"}]);if(manualAnswer!==!0&&manualAnswer.manual){let frameworkAnswer=await prompts3([{type:"select",name:"manualFramework",message:"Please choose a project type from the following list:",choices:installableProjectTypes.map(type=>({title:type,value:type.toUpperCase()}))}]);return installStorybook(frameworkAnswer.manualFramework,packageManager,options)}return Promise.resolve()};async function doInitiate(options,pkg2){let{useNpm,packageManager:pkgMgr}=options;useNpm&&useNpmWarning();let packageManager=JsPackageManagerFactory.getPackageManager({useNpm,force:pkgMgr}),welcomeMessage="storybook init - the simplest way to add a Storybook to your project.";logger13.log(chalk18.inverse(`
352
+ `));case"UNSUPPORTED":return paddedLog("We detected a project type that we don't support yet."),paddedLog("If you'd like your framework to be supported, please let use know about it at https://github.com/storybookjs/storybook/issues"),logger16.log(),Promise.resolve();default:return paddedLog(`We couldn't detect your project type. (code: ${projectType})`),paddedLog("You can specify a project type explicitly via `sb init --type <type>`, see our docs on how to configure Storybook for your framework: https://storybook.js.org/docs/react/get-started/install"),logger16.log(),projectTypeInquirer(options,packageManager)}})().catch(ex=>{logger16.error(`
353
+ ${chalk22.red(ex.stack)}`),process.exit(1)})},projectTypeInquirer=async(options,packageManager)=>{let manualAnswer=options.yes?!0:await prompts3([{type:"confirm",name:"manual",message:"Do you want to manually choose a Storybook project type to install?"}]);if(manualAnswer!==!0&&manualAnswer.manual){let frameworkAnswer=await prompts3([{type:"select",name:"manualFramework",message:"Please choose a project type from the following list:",choices:installableProjectTypes.map(type=>({title:type,value:type.toUpperCase()}))}]);return installStorybook(frameworkAnswer.manualFramework,packageManager,options)}return Promise.resolve()};async function doInitiate(options,pkg2){let{packageManager:pkgMgr}=options;options.useNpm&&(useNpmWarning(),pkgMgr="npm");let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),welcomeMessage="storybook init - the simplest way to add a Storybook to your project.";logger16.log(chalk22.inverse(`
232
354
  ${welcomeMessage}
233
- `));let{default:updateNotifier}=await import("update-notifier");updateNotifier({pkg:pkg2,updateCheckInterval:1e3*60*60}).notify();let projectType,projectTypeProvided=options.type,infoText=projectTypeProvided?`Installing Storybook for user specified project type: ${projectTypeProvided}`:"Detecting project type",done=commandLog(infoText),packageJson=packageManager.retrievePackageJson(),isEsm=packageJson&&packageJson.type==="module";try{projectTypeProvided?installableProjectTypes.includes(projectTypeProvided)?projectType=isStorybookInstalled(packageJson,options.force)?"ALREADY_HAS_STORYBOOK":projectTypeProvided.toUpperCase():(done(`The provided project type was not recognized by Storybook: ${projectTypeProvided}`),logger13.log(`
355
+ `));let{default:updateNotifier}=await import("simple-update-notifier");await updateNotifier({pkg:pkg2,updateCheckInterval:1e3*60*60});let projectType,projectTypeProvided=options.type,infoText=projectTypeProvided?`Installing Storybook for user specified project type: ${projectTypeProvided}`:"Detecting project type",done=commandLog(infoText),packageJson=packageManager.retrievePackageJson(),isEsm=packageJson&&packageJson.type==="module";try{projectTypeProvided?installableProjectTypes.includes(projectTypeProvided)?projectType=isStorybookInstalled(packageJson,options.force)?"ALREADY_HAS_STORYBOOK":projectTypeProvided.toUpperCase():(done(`The provided project type was not recognized by Storybook: ${projectTypeProvided}`),logger16.log(`
234
356
  The project types currently supported by Storybook are:
235
- `),installableProjectTypes.sort().forEach(framework=>paddedLog(`- ${framework}`)),logger13.log(),process.exit(1)):projectType=detect(packageJson,options)}catch(ex){done(ex.message),process.exit(1)}if(done(),await installStorybook(projectType,packageManager,{...options,...isEsm?{commonJs:!0}:void 0}),options.skipInstall||packageManager.installDependencies(),options.disableTelemetry||telemetry("init",{projectType}),await automigrate({yes:options.yes||process.env.CI==="true",useNpm,force:pkgMgr}),logger13.log(`
357
+ `),installableProjectTypes.sort().forEach(framework=>paddedLog(`- ${framework}`)),logger16.log(),process.exit(1)):projectType=detect(packageJson,options)}catch(ex){done(ex.message),process.exit(1)}if(done(),await installStorybook(projectType,packageManager,{...options,...isEsm?{commonJs:!0}:void 0}),options.skipInstall||packageManager.installDependencies(),options.disableTelemetry||telemetry("init",{projectType}),await automigrate({yes:options.yes||process.env.CI==="true",packageManager:pkgMgr}),logger16.log(`
236
358
  To run your Storybook, type:
237
- `),codeLog([packageManager.getRunStorybookCommand()]),logger13.log(`
238
- For more information visit:`,chalk18.cyan("https://storybook.js.org")),projectType==="REACT_NATIVE"){let REACT_NATIVE_REPO="https://github.com/storybookjs/react-native";logger13.log(),logger13.log(chalk18.red("NOTE: installation is not 100% automated.")),logger13.log(`To quickly run Storybook, replace contents of your app entry with:
239
- `),codeLog(["export {default} from './storybook';"]),logger13.log(`
359
+ `),codeLog([packageManager.getRunStorybookCommand()]),logger16.log(`
360
+ For more information visit:`,chalk22.cyan("https://storybook.js.org")),projectType==="REACT_NATIVE"){let REACT_NATIVE_REPO="https://github.com/storybookjs/react-native";logger16.log(),logger16.log(chalk22.red("NOTE: installation is not 100% automated.")),logger16.log(`To quickly run Storybook, replace contents of your app entry with:
361
+ `),codeLog(["export {default} from './storybook';"]),logger16.log(`
240
362
  For more in information, see the github readme:
241
- `),logger13.log(chalk18.cyan(REACT_NATIVE_REPO)),logger13.log()}logger13.log()}async function initiate(options,pkg2){await withTelemetry("init",{cliOptions:options},()=>doInitiate(options,pkg2))}import path9 from"path";import fs6 from"fs";import{sync as spawnSync3}from"cross-spawn";import{getStorybookInfo as getStorybookInfo9}from"@storybook/core-common";import{readConfig as readConfig7,writeConfig as writeConfig7}from"@storybook/csf-tools";var logger14=console,LEGACY_CONFIGS=["addons","config","presets"],postinstallAddon=async(addonName,isOfficialAddon)=>{let skipMsg=null;isOfficialAddon?fs6.existsSync(".storybook")?(skipMsg="no codmods found",LEGACY_CONFIGS.forEach(config=>{try{let codemod=__require.resolve(`${getPackageName(addonName,isOfficialAddon)}/postinstall/${config}.js`);commandLog(`Running postinstall script for ${addonName}`)();let configFile=path9.join(".storybook",`${config}.ts`);fs6.existsSync(configFile)||(configFile=path9.join(".storybook",`${config}.js`),fs6.existsSync(configFile)||fs6.writeFileSync(configFile,"","utf8")),spawnSync3("npx",["jscodeshift","-t",codemod,configFile],{stdio:"inherit",shell:!0}),skipMsg=null}catch{}})):skipMsg="no .storybook config":skipMsg="unofficial addon",skipMsg&&commandLog(`Skipping postinstall for ${addonName}, ${skipMsg}`)()},getVersionSpecifier=addon=>{let groups=/^(...*)@(.*)$/.exec(addon);return groups?[groups[1],groups[2]]:[addon,void 0]};async function add(addon,options){let{useNpm,packageManager:pkgMgr}=options;useNpm&&useNpmWarning();let packageManager=JsPackageManagerFactory.getPackageManager({useNpm,force:pkgMgr}),packageJson=packageManager.retrievePackageJson(),[addonName,versionSpecifier]=getVersionSpecifier(addon),{mainConfig,version:storybookVersion}=getStorybookInfo9(packageJson);if(!mainConfig){logger14.error("Unable to find storybook main.js config");return}let main=await readConfig7(mainConfig),addons=main.getFieldValue(["addons"]);addons&&!Array.isArray(addons)&&logger14.error("Expected addons array in main.js config"),logger14.log(`Verifying ${addonName}`);let latestVersion=packageManager.latestVersion(addonName);latestVersion||logger14.error(`Unknown addon ${addonName}`);let isStorybookAddon=addonName.startsWith("@storybook/"),addonWithVersion=`${addonName}@${versionSpecifier||(isStorybookAddon?storybookVersion:latestVersion)}`;logger14.log(`Installing ${addonWithVersion}`),packageManager.addDependencies({installAsDevDependencies:!0},[addonWithVersion]),logger14.log(`Adding '${addon}' to main.js addons field.`);let updatedAddons=[...addons||[],addonName];main.setFieldValue(["addons"],updatedAddons),await writeConfig7(main),options.skipPostinstall||await postinstallAddon(addon,isStorybookAddon)}import{listCodemods,runCodemod}from"@storybook/codemod";async function migrate(migration,{configDir,glob,dryRun,list,rename,logger:logger24,parser}){if(list)listCodemods().forEach(key=>logger24.log(key));else if(migration)await runCodemod(migration,{configDir,glob,dryRun,logger:logger24,rename,parser});else throw new Error("Migrate: please specify a migration name or --list")}import path10 from"path";import{writeFile as writeFile2,stat}from"fs-extra";import puppeteerCore from"puppeteer-core";import express from"express";import getPort from"get-port";import{logger as logger15}from"@storybook/node-logger";var read=async url=>{let browser=await usePuppeteerBrowser(),page=await browser.newPage();await page.goto(url),await page.waitForFunction(`
363
+ `),logger16.log(chalk22.cyan(REACT_NATIVE_REPO)),logger16.log()}logger16.log()}async function initiate(options,pkg2){await withTelemetry("init",{cliOptions:options},()=>doInitiate(options,pkg2))}import path10 from"path";import fs6 from"fs";import{sync as spawnSync3}from"cross-spawn";import{getStorybookInfo as getStorybookInfo13}from"@storybook/core-common";import{readConfig as readConfig9,writeConfig as writeConfig9}from"@storybook/csf-tools";var logger17=console,LEGACY_CONFIGS=["addons","config","presets"],postinstallAddon=async(addonName,isOfficialAddon)=>{let skipMsg=null;isOfficialAddon?fs6.existsSync(".storybook")?(skipMsg="no codmods found",LEGACY_CONFIGS.forEach(config=>{try{let codemod=__require.resolve(`${getPackageName(addonName,isOfficialAddon)}/postinstall/${config}.js`);commandLog(`Running postinstall script for ${addonName}`)();let configFile=path10.join(".storybook",`${config}.ts`);fs6.existsSync(configFile)||(configFile=path10.join(".storybook",`${config}.js`),fs6.existsSync(configFile)||fs6.writeFileSync(configFile,"","utf8")),spawnSync3("npx",["jscodeshift","-t",codemod,configFile],{stdio:"inherit",shell:!0}),skipMsg=null}catch{}})):skipMsg="no .storybook config":skipMsg="unofficial addon",skipMsg&&commandLog(`Skipping postinstall for ${addonName}, ${skipMsg}`)()},getVersionSpecifier=addon=>{let groups=/^(...*)@(.*)$/.exec(addon);return groups?[groups[1],groups[2]]:[addon,void 0]};async function add(addon,options){let{packageManager:pkgMgr}=options;options.useNpm&&(useNpmWarning(),pkgMgr="npm");let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),packageJson=packageManager.retrievePackageJson(),[addonName,versionSpecifier]=getVersionSpecifier(addon),{mainConfig,version:storybookVersion}=getStorybookInfo13(packageJson);if(!mainConfig){logger17.error("Unable to find storybook main.js config");return}let main=await readConfig9(mainConfig),addons=main.getFieldValue(["addons"]);addons&&!Array.isArray(addons)&&logger17.error("Expected addons array in main.js config"),logger17.log(`Verifying ${addonName}`);let latestVersion=packageManager.latestVersion(addonName);latestVersion||logger17.error(`Unknown addon ${addonName}`);let isStorybookAddon=addonName.startsWith("@storybook/"),addonWithVersion=`${addonName}@${versionSpecifier||(isStorybookAddon?storybookVersion:latestVersion)}`;logger17.log(`Installing ${addonWithVersion}`),packageManager.addDependencies({installAsDevDependencies:!0},[addonWithVersion]),logger17.log(`Adding '${addon}' to main.js addons field.`);let updatedAddons=[...addons||[],addonName];main.setFieldValue(["addons"],updatedAddons),await writeConfig9(main),options.skipPostinstall||await postinstallAddon(addon,isStorybookAddon)}import{listCodemods,runCodemod}from"@storybook/codemod";async function migrate(migration,{glob,dryRun,list,rename,logger:logger28,parser}){if(list)listCodemods().forEach(key=>logger28.log(key));else if(migration)await runCodemod(migration,{glob,dryRun,logger:logger28,rename,parser});else throw new Error("Migrate: please specify a migration name or --list")}import path11 from"path";import{writeFile as writeFile2,stat}from"fs-extra";import puppeteerCore from"puppeteer-core";import express from"express";import getPort from"get-port";import{logger as logger18}from"@storybook/node-logger";var read=async url=>{let browser=await usePuppeteerBrowser(),page=await browser.newPage();await page.goto(url),await page.waitForFunction(`
242
364
  (window.__STORYBOOK_PREVIEW__ && window.__STORYBOOK_PREVIEW__.extract && window.__STORYBOOK_PREVIEW__.extract()) ||
243
365
  (window.__STORYBOOK_STORY_STORE__ && window.__STORYBOOK_STORY_STORE__.extract && window.__STORYBOOK_STORY_STORE__.extract())
244
- `);let data=JSON.parse(await page.evaluate(async()=>JSON.stringify(window.__STORYBOOK_STORY_STORE__.getStoriesJsonData(),null,2)));return setImmediate(()=>{browser.close()}),data},useLocation=async input=>{if(await stat(path10.resolve(input)),input.match(/^http/))return[input,async()=>{}];let app=express();app.use(express.static(input));let port=await getPort();return new Promise(resolve2=>{let server=app.listen(port,()=>{let result=`http://localhost:${port}/iframe.html`;logger15.info(`connecting to: ${result}`),resolve2([result,server.close.bind(server)])})})},usePuppeteerBrowser=async()=>{let args=["--no-sandbox ","--disable-setuid-sandbox"];try{return await puppeteerCore.launch({args,executablePath:process.env.SB_CHROMIUM_PATH})}catch{return logger15.info("installing puppeteer..."),new Promise((resolve2,reject)=>{__require("child_process").exec(`node ${__require.resolve(path10.join("puppeteer-core","install.js"))}`,error=>error?reject(error):resolve2(puppeteerCore.launch({args})))})}};async function extract(input,targetPath){if(input&&targetPath){let[location,exit]=await useLocation(input),data=await read(location);await writeFile2(targetPath,JSON.stringify(data,null,2)),await exit()}else throw new Error("Extract: please specify a path where your built-storybook is (can be a public url) and a target directory")}import{sync as spawnSync4}from"cross-spawn";import{telemetry as telemetry2,getStorybookCoreVersion}from"@storybook/telemetry";import semver12 from"semver";import{logger as logger16}from"@storybook/node-logger";import{withTelemetry as withTelemetry2}from"@storybook/core-server";var versionRegex=/(@storybook\/[^@]+)@(\S+)/,getStorybookVersion=line=>{if(line.startsWith("npm "))return null;let match=versionRegex.exec(line);return!match||!semver12.clean(match[2])?null:{package:match[1],version:match[2]}},excludeList=["@storybook/addon-bench","@storybook/addon-console","@storybook/addon-postcss","@storybook/babel-plugin-require-context-hook","@storybook/bench","@storybook/builder-vite","@storybook/csf","@storybook/design-system","@storybook/ember-cli-storybook","@storybook/eslint-config-storybook","@storybook/expect","@storybook/jest","@storybook/linter-config","@storybook/mdx1-csf","@storybook/mdx2-csf","@storybook/react-docgen-typescript-plugin","@storybook/storybook-deployer","@storybook/test-runner","@storybook/testing-library","@storybook/testing-react"],isCorePackage=pkg2=>pkg2.startsWith("@storybook/")&&!pkg2.startsWith("@storybook/preset-")&&!excludeList.includes(pkg2),deprecatedPackages=[{minVersion:"6.0.0-alpha.0",url:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#60-deprecations",deprecations:["@storybook/addon-notes","@storybook/addon-info","@storybook/addon-contexts","@storybook/addon-options","@storybook/addon-centered"]}],formatPackage=pkg2=>`${pkg2.package}@${pkg2.version}`,warnPackages=pkgs=>pkgs.forEach(pkg2=>logger16.warn(`- ${formatPackage(pkg2)}`)),checkVersionConsistency=()=>{let storybookPackages=spawnSync4("npm",["ls"],{stdio:"pipe",shell:!0}).output.toString().split(`
245
- `).map(getStorybookVersion).filter(Boolean).filter(pkg2=>isCorePackage(pkg2.package));if(!storybookPackages.length){logger16.warn("No storybook core packages found."),logger16.warn("'npm ls | grep storybook' can show if multiple versions are installed.");return}storybookPackages.sort((a,b)=>semver12.rcompare(a.version,b.version));let latestVersion=storybookPackages[0].version,outdated=storybookPackages.filter(pkg2=>pkg2.version!==latestVersion);outdated.length>0&&(logger16.warn(`Found ${outdated.length} outdated packages (relative to '${formatPackage(storybookPackages[0])}')`),logger16.warn("Please make sure your packages are updated to ensure a consistent experience."),warnPackages(outdated)),deprecatedPackages.forEach(({minVersion:minVersion2,url,deprecations})=>{if(semver12.gte(latestVersion,minVersion2)){let deprecated=storybookPackages.filter(pkg2=>deprecations.includes(pkg2.package));deprecated.length>0&&(logger16.warn(`Found ${deprecated.length} deprecated packages since ${minVersion2}`),logger16.warn(`See ${url}`),warnPackages(deprecated))}})},EXTRA_FLAGS={"react-scripts@<5":["--reject","/preset-create-react-app/"]},addExtraFlags=(extraFlags,flags,{dependencies,devDependencies})=>Object.entries(extraFlags).reduce((acc,entry)=>{let[pattern,extra]=entry,[pkg2,specifier]=getPackageDetails(pattern),pkgVersion=dependencies[pkg2]||devDependencies[pkg2];return pkgVersion&&semver12.satisfies(semver12.coerce(pkgVersion),specifier)?[...acc,...extra]:acc},[...flags]),doUpgrade=async({tag,prerelease,skipCheck,useNpm,packageManager:pkgMgr,dryRun,yes,...options})=>{useNpm&&useNpmWarning();let packageManager=JsPackageManagerFactory.getPackageManager({useNpm,force:pkgMgr}),beforeVersion=await getStorybookCoreVersion();if(commandLog("Checking for latest versions of '@storybook/*' packages"),tag&&prerelease)throw new Error("Cannot set both --tag and --prerelease. Use --tag next to get the latest prereleae");let target="latest";prerelease?target="@next":tag&&(target=`@${tag}`);let flags=[];dryRun||flags.push("--upgrade"),flags.push("--target"),flags.push(target),flags=addExtraFlags(EXTRA_FLAGS,flags,packageManager.retrievePackageJson());let check=spawnSync4("npx",["npm-check-updates@latest","/storybook/",...flags],{stdio:"pipe",shell:!0}).output.toString();logger16.info(check),dryRun||(commandLog("Installing upgrades"),packageManager.installDependencies());let automigrationResults;if(skipCheck||(checkVersionConsistency(),automigrationResults=await automigrate({dryRun,yes,useNpm,force:pkgMgr})),!options.disableTelemetry){let afterVersion=await getStorybookCoreVersion();telemetry2("upgrade",{prerelease,tag,automigrationResults,beforeVersion,afterVersion})}};async function upgrade(options){await withTelemetry2("upgrade",{cliOptions:options},()=>doUpgrade(options))}import prompts4 from"prompts";import fs7 from"fs";import path12 from"path";import chalk20 from"chalk";import boxen2 from"boxen";import{dedent as dedent16}from"ts-dedent";import path11 from"path";import{readJSON,writeJSON,outputFile}from"fs-extra";import shell2 from"shelljs";import chalk19 from"chalk";import{command}from"execa";var configs_exports={};__export(configs_exports,{angular:()=>angular,angular12:()=>angular122,angular13:()=>angular13,angular130:()=>angular130,cra:()=>cra,cra_typescript:()=>cra_typescript,html:()=>html,nextjs:()=>nextjs,nextjs_typescript:()=>nextjs_typescript,preact:()=>preact,react:()=>react,react_in_yarn_workspace:()=>react_in_yarn_workspace,react_legacy_root_api:()=>react_legacy_root_api,react_typescript:()=>react_typescript,sfcVue:()=>sfcVue,svelte:()=>svelte,svelteKit:()=>svelteKit,vue:()=>vue,vue3:()=>vue32,web_components:()=>web_components,web_components_lit2:()=>web_components_lit2,web_components_typescript:()=>web_components_typescript});var fromDeps=(...args)=>["mkdir {{appName}}","cd {{appName}}","touch yarn.lock","yarn init --yes",args.length&&`yarn add ${args.join(" ")}`].filter(Boolean).join(" && "),cra={renderer:"react",name:"cra",version:"latest",generator:["npm_config_user_agent=npm npx -p create-react-app@{{version}} create-react-app {{appName}}","cd {{appName}}",'echo "FAST_REFRESH=true" > .env','echo "SKIP_PREFLIGHT_CHECK=true" > .env'].join(" && ")},cra_typescript={renderer:"react",name:"cra_typescript",version:"latest",generator:["npm_config_user_agent=npm npx -p create-react-app@{{version}} create-react-app {{appName}} --template typescript"].join(" && ")},react={renderer:"react",name:"react",version:"latest",generator:fromDeps("react","react-dom","@babel/preset-react"),additionalDeps:["prop-types"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-react"] }'}]},react_legacy_root_api={renderer:"react",name:"react_legacy_root_api",version:"latest",generator:fromDeps("react","react-dom"),additionalDeps:["prop-types","@babel/preset-react"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-react"] }'}],mainOverrides:{reactOptions:{legacyRootApi:!0}}},react_typescript={renderer:"react",name:"react_typescript",version:"latest",generator:fromDeps("react","react-dom"),typescript:!0,additionalDeps:["@babel/preset-react","@babel/preset-typescript"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-react", "@babel/preset-typescript"] }'}]},nextjs={renderer:"react",name:"nextjs",version:"latest",generator:["npm_config_user_agent=npm npx -p create-next-app@{{version}} create-next-app {{appName}}","cd {{appName}}"].join(" && ")},nextjs_typescript={renderer:"react",name:"nextjs_typescript",version:"latest",generator:["npm_config_user_agent=npm npx -p create-next-app@{{version}} create-next-app {{appName}} --typescript","cd {{appName}}"].join(" && ")},react_in_yarn_workspace={renderer:"react",name:"react_in_yarn_workspace",version:"latest",generator:["mkdir {{appName}}","cd {{appName}}",'echo "{ \\"name\\": \\"workspace-root\\", \\"private\\": true, \\"workspaces\\": [] }" > package.json',"touch yarn.lock","yarn add react react-dom"].join(" && ")},baseAngular={renderer:"angular",name:"angular",version:"latest",generator:"npx -p @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skip-install=true --strict"},angular122={...baseAngular,name:"angular12",version:"v12-lts"},angular130={...baseAngular,name:"angular130",version:"13.0.x"},angular13={...baseAngular,name:"angular13",version:"13.1.x"},angular=baseAngular,web_components={renderer:"web-components",name:"web_components",version:"2",generator:fromDeps("lit-element")},web_components_typescript={...web_components,name:"web_components_typescript",typescript:!0,additionalDeps:["@babel/preset-typescript"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-typescript"] }'}]},web_components_lit2={...web_components,version:"next",name:"web_components_lit2",generator:fromDeps("lit"),typescript:!0,additionalDeps:["@babel/preset-typescript"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-typescript"] }'}]},vue={renderer:"vue",name:"vue",version:"latest",generator:['npx -p @vue/cli vue create {{appName}} --default --packageManager=yarn --force --merge --preset="Default (Vue 2)"'].join(" && ")},vue32={renderer:"vue3",name:"vue3",version:"next",generator:["npx -p @vue/cli@^4 vue create {{appName}} --preset=__default_vue_3__ --packageManager=npm --no-git --force"].join(" && ")},html={renderer:"html",name:"html",version:"latest",generator:fromDeps(),autoDetect:!1},preact={renderer:"preact",name:"preact",version:"latest",generator:"npx preact-cli@{{version}} create preactjs-templates/default {{appName}} --install=false --git=false"},sfcVue={renderer:"vue",name:"sfcVue",version:"latest",generator:fromDeps("vue@2.6","vue-loader@15.9","vue-template-compiler@2.6","webpack")},svelte={renderer:"svelte",name:"svelte",version:"latest",generator:"npx giget github:sveltejs/template#master {{appName}}"},svelteKit={renderer:"svelte",name:"svelteKit",version:"latest",generator:"yarn create svelte-with-args --name={{appName}} --directory=. --template=skeleton --types=null --no-prettier --no-eslint --no-playwright"};var logger17=console,exec=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&logger17.info(startMessage),dryRun){logger17.info(`
366
+ `);let data=JSON.parse(await page.evaluate(async()=>JSON.stringify(window.__STORYBOOK_STORY_STORE__.getStoriesJsonData(),null,2)));return setImmediate(()=>{browser.close()}),data},useLocation=async input=>{if(await stat(path11.resolve(input)),input.match(/^http/))return[input,async()=>{}];let app=express();app.use(express.static(input));let port=await getPort();return new Promise(resolve2=>{let server=app.listen(port,()=>{let result=`http://localhost:${port}/iframe.html`;logger18.info(`connecting to: ${result}`),resolve2([result,server.close.bind(server)])})})},usePuppeteerBrowser=async()=>{let args=["--no-sandbox ","--disable-setuid-sandbox"];try{return await puppeteerCore.launch({args,executablePath:process.env.SB_CHROMIUM_PATH})}catch{return logger18.info("installing puppeteer..."),new Promise((resolve2,reject)=>{__require("child_process").exec(`node ${__require.resolve(path11.join("puppeteer-core","install.js"))}`,error=>error?reject(error):resolve2(puppeteerCore.launch({args})))})}};async function extract(input,targetPath){if(input&&targetPath){let[location,exit]=await useLocation(input),data=await read(location);await writeFile2(targetPath,JSON.stringify(data,null,2)),await exit()}else throw new Error("Extract: please specify a path where your built-storybook is (can be a public url) and a target directory")}import{sync as spawnSync4}from"cross-spawn";import{telemetry as telemetry2,getStorybookCoreVersion}from"@storybook/telemetry";import semver15 from"semver";import{logger as logger19}from"@storybook/node-logger";import{withTelemetry as withTelemetry2}from"@storybook/core-server";var versionRegex=/(@storybook\/[^@]+)@(\S+)/,getStorybookVersion=line=>{if(line.startsWith("npm "))return null;let match=versionRegex.exec(line);return!match||!semver15.clean(match[2])?null:{package:match[1],version:match[2]}},excludeList=["@storybook/addon-bench","@storybook/addon-console","@storybook/addon-postcss","@storybook/babel-plugin-require-context-hook","@storybook/bench","@storybook/builder-vite","@storybook/csf","@storybook/design-system","@storybook/ember-cli-storybook","@storybook/eslint-config-storybook","@storybook/expect","@storybook/jest","@storybook/linter-config","@storybook/mdx1-csf","@storybook/mdx2-csf","@storybook/react-docgen-typescript-plugin","@storybook/storybook-deployer","@storybook/test-runner","@storybook/testing-library","@storybook/testing-react"],isCorePackage=pkg2=>pkg2.startsWith("@storybook/")&&!pkg2.startsWith("@storybook/preset-")&&!excludeList.includes(pkg2),deprecatedPackages=[{minVersion:"6.0.0-alpha.0",url:"https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#60-deprecations",deprecations:["@storybook/addon-notes","@storybook/addon-info","@storybook/addon-contexts","@storybook/addon-options","@storybook/addon-centered"]}],formatPackage=pkg2=>`${pkg2.package}@${pkg2.version}`,warnPackages=pkgs=>pkgs.forEach(pkg2=>logger19.warn(`- ${formatPackage(pkg2)}`)),checkVersionConsistency=()=>{let storybookPackages=spawnSync4("npm",["ls"],{stdio:"pipe",shell:!0}).output.toString().split(`
367
+ `).map(getStorybookVersion).filter(Boolean).filter(pkg2=>isCorePackage(pkg2.package));if(!storybookPackages.length){logger19.warn("No storybook core packages found."),logger19.warn("'npm ls | grep storybook' can show if multiple versions are installed.");return}storybookPackages.sort((a,b)=>semver15.rcompare(a.version,b.version));let latestVersion=storybookPackages[0].version,outdated=storybookPackages.filter(pkg2=>pkg2.version!==latestVersion);outdated.length>0&&(logger19.warn(`Found ${outdated.length} outdated packages (relative to '${formatPackage(storybookPackages[0])}')`),logger19.warn("Please make sure your packages are updated to ensure a consistent experience."),warnPackages(outdated)),deprecatedPackages.forEach(({minVersion:minVersion2,url,deprecations})=>{if(semver15.gte(latestVersion,minVersion2)){let deprecated=storybookPackages.filter(pkg2=>deprecations.includes(pkg2.package));deprecated.length>0&&(logger19.warn(`Found ${deprecated.length} deprecated packages since ${minVersion2}`),logger19.warn(`See ${url}`),warnPackages(deprecated))}})},EXTRA_FLAGS={"react-scripts@<5":["--reject","/preset-create-react-app/"]},addExtraFlags=(extraFlags,flags,{dependencies,devDependencies})=>Object.entries(extraFlags).reduce((acc,entry)=>{let[pattern,extra]=entry,[pkg2,specifier]=getPackageDetails(pattern),pkgVersion=dependencies[pkg2]||devDependencies[pkg2];return pkgVersion&&semver15.satisfies(semver15.coerce(pkgVersion),specifier)?[...acc,...extra]:acc},[...flags]),doUpgrade=async({tag,prerelease,skipCheck,useNpm,packageManager:pkgMgr,dryRun,yes,...options})=>{useNpm&&(useNpmWarning(),pkgMgr="npm");let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),beforeVersion=await getStorybookCoreVersion();if(commandLog("Checking for latest versions of '@storybook/*' packages"),tag&&prerelease)throw new Error("Cannot set both --tag and --prerelease. Use --tag next to get the latest prereleae");let target="latest";prerelease?target="@next":tag&&(target=`@${tag}`);let flags=[];dryRun||flags.push("--upgrade"),flags.push("--target"),flags.push(target),flags=addExtraFlags(EXTRA_FLAGS,flags,packageManager.retrievePackageJson());let check=spawnSync4("npx",["npm-check-updates@latest","/storybook/",...flags],{stdio:"pipe",shell:!0}).output.toString();logger19.info(check);let checkSb=spawnSync4("npx",["npm-check-updates@latest","sb",...flags],{stdio:"pipe",shell:!0}).output.toString();logger19.info(checkSb),dryRun||(commandLog("Installing upgrades"),packageManager.installDependencies());let automigrationResults;if(skipCheck||(checkVersionConsistency(),automigrationResults=await automigrate({dryRun,yes,packageManager:pkgMgr})),!options.disableTelemetry){let afterVersion=await getStorybookCoreVersion();telemetry2("upgrade",{prerelease,tag,automigrationResults,beforeVersion,afterVersion})}};async function upgrade(options){await withTelemetry2("upgrade",{cliOptions:options},()=>doUpgrade(options))}import prompts4 from"prompts";import fs7 from"fs";import path13 from"path";import chalk24 from"chalk";import boxen2 from"boxen";import{dedent as dedent21}from"ts-dedent";import path12 from"path";import{readJSON,writeJSON,outputFile}from"fs-extra";import shell2 from"shelljs";import chalk23 from"chalk";import{command}from"execa";var configs_exports={};__export(configs_exports,{angular:()=>angular,angular12:()=>angular122,angular13:()=>angular13,angular130:()=>angular130,cra:()=>cra,cra_typescript:()=>cra_typescript,html:()=>html,nextjs:()=>nextjs,nextjs_typescript:()=>nextjs_typescript,preact:()=>preact,preact_vite:()=>preact_vite,react:()=>react,react_in_yarn_workspace:()=>react_in_yarn_workspace,react_legacy_root_api:()=>react_legacy_root_api,react_typescript:()=>react_typescript,sfcVue:()=>sfcVue,svelte:()=>svelte,svelteKit:()=>svelteKit,vue:()=>vue,vue3:()=>vue32,web_components:()=>web_components,web_components_lit2:()=>web_components_lit2,web_components_typescript:()=>web_components_typescript});var fromDeps=(...args)=>["mkdir {{appName}}","cd {{appName}}","touch yarn.lock","yarn init --yes",args.length&&`yarn add ${args.join(" ")}`].filter(Boolean).join(" && "),cra={renderer:"react",name:"cra",version:"latest",generator:["npm_config_user_agent=npm npx -p create-react-app@{{version}} create-react-app {{appName}}","cd {{appName}}",'echo "FAST_REFRESH=true" > .env','echo "SKIP_PREFLIGHT_CHECK=true" > .env'].join(" && ")},cra_typescript={renderer:"react",name:"cra_typescript",version:"latest",generator:["npm_config_user_agent=npm npx -p create-react-app@{{version}} create-react-app {{appName}} --template typescript"].join(" && ")},react={renderer:"react",name:"react",version:"latest",generator:fromDeps("react","react-dom","@babel/preset-react"),additionalDeps:["prop-types"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-react"] }'}]},react_legacy_root_api={renderer:"react",name:"react_legacy_root_api",version:"latest",generator:fromDeps("react","react-dom"),additionalDeps:["prop-types","@babel/preset-react"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-react"] }'}],mainOverrides:{reactOptions:{legacyRootApi:!0}}},react_typescript={renderer:"react",name:"react_typescript",version:"latest",generator:fromDeps("react","react-dom"),typescript:!0,additionalDeps:["@babel/preset-react","@babel/preset-typescript"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-react", "@babel/preset-typescript"] }'}]},nextjs={renderer:"react",name:"nextjs",version:"latest",generator:["npm_config_user_agent=npm npx -p create-next-app@{{version}} create-next-app {{appName}}","cd {{appName}}"].join(" && ")},nextjs_typescript={renderer:"react",name:"nextjs_typescript",version:"latest",generator:["npm_config_user_agent=npm npx -p create-next-app@{{version}} create-next-app {{appName}} --typescript","cd {{appName}}"].join(" && ")},react_in_yarn_workspace={renderer:"react",name:"react_in_yarn_workspace",version:"latest",generator:["mkdir {{appName}}","cd {{appName}}",'echo "{ \\"name\\": \\"workspace-root\\", \\"private\\": true, \\"workspaces\\": [] }" > package.json',"touch yarn.lock","yarn add react react-dom"].join(" && ")},baseAngular={renderer:"angular",name:"angular",version:"latest",generator:"npx -p @angular/cli@{{version}} ng new {{appName}} --routing=true --minimal=true --style=scss --skip-install=true --strict"},angular122={...baseAngular,name:"angular12",version:"v12-lts"},angular130={...baseAngular,name:"angular130",version:"13.0.x"},angular13={...baseAngular,name:"angular13",version:"13.1.x"},angular=baseAngular,web_components={renderer:"web-components",name:"web_components",version:"2",generator:fromDeps("lit-element")},web_components_typescript={...web_components,name:"web_components_typescript",typescript:!0,additionalDeps:["@babel/preset-typescript"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-typescript"] }'}]},web_components_lit2={...web_components,version:"next",name:"web_components_lit2",generator:fromDeps("lit"),typescript:!0,additionalDeps:["@babel/preset-typescript"],additionalFiles:[{path:".babelrc",contents:'{ "presets": ["@babel/preset-typescript"] }'}]},vue={renderer:"vue",name:"vue",version:"latest",generator:['npx -p @vue/cli vue create {{appName}} --default --packageManager=yarn --force --merge --preset="Default (Vue 2)"'].join(" && ")},vue32={renderer:"vue3",name:"vue3",version:"next",generator:["npx -p @vue/cli@^4 vue create {{appName}} --preset=__default_vue_3__ --packageManager=npm --no-git --force"].join(" && ")},html={renderer:"html",name:"html",version:"latest",generator:fromDeps(),autoDetect:!1},preact={renderer:"preact",name:"preact",version:"latest",generator:"npx preact-cli@{{version}} create preactjs-templates/default {{appName}} --install=false --git=false"},preact_vite={renderer:"preact",name:"preact",version:"latest",generator:"yarn create vite@{{version}} {{appName}} --template preact"},sfcVue={renderer:"vue",name:"sfcVue",version:"latest",generator:fromDeps("vue@2.6","vue-loader@15.9","vue-template-compiler@2.6","webpack")},svelte={renderer:"svelte",name:"svelte",version:"latest",generator:"npx giget github:sveltejs/template#master {{appName}}"},svelteKit={renderer:"svelte",name:"svelteKit",version:"latest",generator:"yarn create svelte-with-args --name={{appName}} --directory=. --template=skeleton --types=null --no-prettier --no-eslint --no-playwright"};var logger20=console,exec=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&logger20.info(startMessage),dryRun){logger20.info(`
246
368
  > ${command2}
247
- `);return}return logger17.debug(command2),new Promise((resolve2,reject)=>{let defaultOptions2={silent:!1},child=shell2.exec(command2,{...defaultOptions2,...options,async:!0,silent:!1});child.stderr.pipe(process.stderr),child.on("exit",code=>{code===0?resolve2(void 0):(logger17.error(chalk19.red(`An error occurred while executing: \`${command2}\``)),logger17.log(errorMessage),reject(new Error(`command exited with code: ${code}: `)))})})},addPackageResolutions=async({cwd})=>{logger17.info("\u{1F522} Adding package resolutions:");let packageJsonPath=path11.join(cwd,"package.json"),packageJson=await readJSON(packageJsonPath);packageJson.resolutions=versions_default,await writeJSON(packageJsonPath,packageJson,{spaces:2})},addLocalPackageResolutions=async({cwd})=>{logger17.info("\u{1F522} Adding package resolutions:");let packageJsonPath=path11.join(cwd,"package.json"),packageJson=await readJSON(packageJsonPath),workspaceDir=path11.join(__dirname,"..","..","..","..",".."),{stdout}=await command("yarn workspaces list --json",{cwd:workspaceDir});console.log({stdout,workspaceDir});let workspaces=JSON.parse(`[${stdout.split(`
248
- `).join(",")}]`);console.log({workspaces}),packageJson.resolutions=Object.keys(versions_default).reduce((acc,key)=>({...acc,[key]:path11.join(workspaceDir,workspaces.find(item=>item.name===key).location)}),{}),await writeJSON(packageJsonPath,packageJson,{spaces:2})},installYarn2=async({cwd,pnp,name})=>{let command2=["yarn set version berry","yarn config set enableGlobalCache true",`yarn config set nodeLinker ${pnp?"pnp":"node-modules"}`];[cra.name,cra_typescript.name].includes(name)&&command2.push(`yarn config set packageExtensions --json '{ "babel-preset-react-app@10.0.x": { "dependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.16.0" } } }'`),await exec(command2.join(" && "),{cwd},{startMessage:"\u{1F9F6} Installing Yarn 2",errorMessage:"\u{1F6A8} Installing Yarn 2 failed"})},configureYarn2ForE2E=async({cwd})=>{let command2=[`yarn config set npmScopes --json '{ "storybook": { "npmRegistryServer": "http://localhost:6001/" } }'`,`yarn config set unsafeHttpWhitelist --json '["localhost"]'`,"yarn config set pnpFallbackMode none","yarn config set enableImmutableInstalls false",`yarn config set logFilters --json '[ { "code": "YN0013", "level": "discard" } ]'`].join(" && ");await exec(command2,{cwd},{startMessage:"\u{1F39B} Configuring Yarn 2",errorMessage:"\u{1F6A8} Configuring Yarn 2 failed"})},generate=async({cwd,name,appName,version,generator:generator23})=>{let command2=generator23.replace(/{{appName}}/g,appName).replace(/{{version}}/g,version);await exec(command2,{cwd},{startMessage:`\u{1F3D7} Bootstrapping ${name} project (this might take a few minutes)`,errorMessage:`\u{1F6A8} Bootstrapping ${name} failed`})},addAdditionalFiles=async({additionalFiles,cwd})=>{logger17.info("\u2935\uFE0F Adding required files"),await Promise.all(additionalFiles.map(async file=>{await outputFile(path11.resolve(cwd,file.path),file.contents,{encoding:"UTF-8"})}))},initStorybook=async({cwd,autoDetect=!0,name,e2e,pnp})=>{let flags=["--yes"];autoDetect||flags.push(`--type ${name}`),e2e&&flags.push("--linkable"),pnp&&flags.push("--use-pnp");let command2=`${`node ${__filename}`} init ${flags.join(" ")}`;await exec(command2,{cwd},{startMessage:"\u{1F3A8} Initializing Storybook with @storybook/cli",errorMessage:"\u{1F6A8} Storybook initialization failed"})},addRequiredDeps=async({cwd,additionalDeps})=>{shell2.rm("-f",path11.join(cwd,"package-lock.json"),path11.join(cwd,"yarn.lock"));let command2=additionalDeps&&additionalDeps.length>0?`yarn add -D ${additionalDeps.join(" ")}`:"yarn install";await exec(command2,{cwd},{startMessage:"\u{1F30D} Adding needed deps & installing all deps",errorMessage:"\u{1F6A8} Dependencies installation failed"})},addTypescript=async({cwd})=>{logger17.info("\u{1F46E} Adding typescript and tsconfig.json");try{await exec("yarn add -D typescript@latest",{cwd});let tsConfig={compilerOptions:{baseUrl:".",esModuleInterop:!0,jsx:"preserve",skipLibCheck:!0,strict:!0},include:["src/*"]},tsConfigJsonPath=path11.resolve(cwd,"tsconfig.json");await writeJSON(tsConfigJsonPath,tsConfig,{encoding:"utf8",spaces:2})}catch(e){throw logger17.error("\u{1F6A8} Creating tsconfig.json failed"),e}},doTask=async(task,options,condition=!0)=>{condition&&(await task(options),logger17.log())},registryUrlNPM=url=>exec(`npm ${["config","set","registry",url].join(" ")}`,{cwd:path11.join(process.cwd(),"..")}),registryUrlYarn=url=>exec(`yarn ${["config","set","npmRegistryServer",url].join(" ")}`,{cwd:path11.join(__dirname,"..")}),createAndInit=async(cwd,{name,version,...rest},{e2e,pnp,local,registry})=>{let options={name,version,appName:path11.basename(cwd),creationPath:path11.join(cwd,".."),cwd,e2e,pnp,...rest};logger17.log(),logger17.info(`\u{1F3C3} Starting for ${name} ${version}`),logger17.log(),await doTask(generate,{...options,cwd:options.creationPath}),await doTask(addAdditionalFiles,{...options,cwd},!!options.additionalFiles),e2e&&await doTask(addPackageResolutions,options),local&&await doTask(addLocalPackageResolutions,options),await doTask(installYarn2,options),e2e&&await doTask(configureYarn2ForE2E,options,e2e),await doTask(addTypescript,options,!!options.typescript),await doTask(addRequiredDeps,options),registry&&(await registryUrlNPM(registry),await registryUrlYarn(registry)),await doTask(initStorybook,options)};var logger18=console,TEMPLATES=configs_exports,CURATED_TEMPLATES=Object.fromEntries(Object.entries(configs_exports).filter(entry=>entry[0]!=="react_in_yarn_workspace")),RENDERERS=Object.values(CURATED_TEMPLATES).reduce((acc,cur)=>(acc[cur.renderer]=[...acc[cur.renderer]||[],cur],acc),{}),repro=async({outputDirectory,list,template,renderer,generator:generator23,e2e,local,registry,pnp})=>{if(logger18.info(boxen2(dedent16`
249
- 🤗 Welcome to ${chalk20.yellow("sb repro")}! 🤗
369
+ `);return}return logger20.debug(command2),new Promise((resolve2,reject)=>{let defaultOptions2={silent:!1},child=shell2.exec(command2,{...defaultOptions2,...options,async:!0,silent:!1});child.stderr.pipe(process.stderr),child.on("exit",code=>{code===0?resolve2(void 0):(logger20.error(chalk23.red(`An error occurred while executing: \`${command2}\``)),logger20.log(errorMessage),reject(new Error(`command exited with code: ${code}: `)))})})},addPackageResolutions=async({cwd})=>{logger20.info("\u{1F522} Adding package resolutions:");let packageJsonPath=path12.join(cwd,"package.json"),packageJson=await readJSON(packageJsonPath);packageJson.resolutions=versions_default,await writeJSON(packageJsonPath,packageJson,{spaces:2})},addLocalPackageResolutions=async({cwd})=>{logger20.info("\u{1F522} Adding package resolutions:");let packageJsonPath=path12.join(cwd,"package.json"),packageJson=await readJSON(packageJsonPath),workspaceDir=path12.join(__dirname,"..","..","..","..",".."),{stdout}=await command("yarn workspaces list --json",{cwd:workspaceDir});console.log({stdout,workspaceDir});let workspaces=JSON.parse(`[${stdout.split(`
370
+ `).join(",")}]`);console.log({workspaces}),packageJson.resolutions=Object.keys(versions_default).reduce((acc,key)=>({...acc,[key]:path12.join(workspaceDir,workspaces.find(item=>item.name===key).location)}),{}),await writeJSON(packageJsonPath,packageJson,{spaces:2})},installYarn2=async({cwd,pnp,name})=>{let command2=["yarn set version berry","yarn config set enableGlobalCache true",`yarn config set nodeLinker ${pnp?"pnp":"node-modules"}`];[cra.name,cra_typescript.name].includes(name)&&command2.push(`yarn config set packageExtensions --json '{ "babel-preset-react-app@10.0.x": { "dependencies": { "@babel/plugin-proposal-private-property-in-object": "^7.16.0" } } }'`),await exec(command2.join(" && "),{cwd},{startMessage:"\u{1F9F6} Installing Yarn 2",errorMessage:"\u{1F6A8} Installing Yarn 2 failed"})},configureYarn2ForE2E=async({cwd})=>{let command2=[`yarn config set npmScopes --json '{ "storybook": { "npmRegistryServer": "http://localhost:6001/" } }'`,`yarn config set unsafeHttpWhitelist --json '["localhost"]'`,"yarn config set pnpFallbackMode none","yarn config set enableImmutableInstalls false",`yarn config set logFilters --json '[ { "code": "YN0013", "level": "discard" } ]'`].join(" && ");await exec(command2,{cwd},{startMessage:"\u{1F39B} Configuring Yarn 2",errorMessage:"\u{1F6A8} Configuring Yarn 2 failed"})},generate=async({cwd,name,appName,version,generator:generator23})=>{let command2=generator23.replace(/{{appName}}/g,appName).replace(/{{version}}/g,version);await exec(command2,{cwd},{startMessage:`\u{1F3D7} Bootstrapping ${name} project (this might take a few minutes)`,errorMessage:`\u{1F6A8} Bootstrapping ${name} failed`})},addAdditionalFiles=async({additionalFiles,cwd})=>{logger20.info("\u2935\uFE0F Adding required files"),await Promise.all(additionalFiles.map(async file=>{await outputFile(path12.resolve(cwd,file.path),file.contents,{encoding:"UTF-8"})}))},initStorybook=async({cwd,autoDetect=!0,name,e2e,pnp})=>{let flags=["--yes"];autoDetect||flags.push(`--type ${name}`),e2e&&flags.push("--linkable"),pnp&&flags.push("--use-pnp");let command2=`${`node ${__filename}`} init ${flags.join(" ")}`;await exec(command2,{cwd},{startMessage:"\u{1F3A8} Initializing Storybook with @storybook/cli",errorMessage:"\u{1F6A8} Storybook initialization failed"})},addRequiredDeps=async({cwd,additionalDeps})=>{shell2.rm("-f",path12.join(cwd,"package-lock.json"),path12.join(cwd,"yarn.lock"));let command2=additionalDeps&&additionalDeps.length>0?`yarn add -D ${additionalDeps.join(" ")}`:"yarn install";await exec(command2,{cwd},{startMessage:"\u{1F30D} Adding needed deps & installing all deps",errorMessage:"\u{1F6A8} Dependencies installation failed"})},addTypescript=async({cwd})=>{logger20.info("\u{1F46E} Adding typescript and tsconfig.json");try{await exec("yarn add -D typescript@latest",{cwd});let tsConfig={compilerOptions:{baseUrl:".",esModuleInterop:!0,jsx:"preserve",skipLibCheck:!0,strict:!0},include:["src/*"]},tsConfigJsonPath=path12.resolve(cwd,"tsconfig.json");await writeJSON(tsConfigJsonPath,tsConfig,{encoding:"utf8",spaces:2})}catch(e){throw logger20.error("\u{1F6A8} Creating tsconfig.json failed"),e}},doTask=async(task,options,condition=!0)=>{condition&&(await task(options),logger20.log())},registryUrlNPM=url=>exec(`npm ${["config","set","registry",url].join(" ")}`,{cwd:path12.join(process.cwd(),"..")}),registryUrlYarn=url=>exec(`yarn ${["config","set","npmRegistryServer",url].join(" ")}`,{cwd:path12.join(__dirname,"..")}),createAndInit=async(cwd,{name,version,...rest},{e2e,pnp,local,registry})=>{let options={name,version,appName:path12.basename(cwd),creationPath:path12.join(cwd,".."),cwd,e2e,pnp,...rest};logger20.log(),logger20.info(`\u{1F3C3} Starting for ${name} ${version}`),logger20.log(),await doTask(generate,{...options,cwd:options.creationPath}),await doTask(addAdditionalFiles,{...options,cwd},!!options.additionalFiles),e2e&&await doTask(addPackageResolutions,options),local&&await doTask(addLocalPackageResolutions,options),await doTask(installYarn2,options),e2e&&await doTask(configureYarn2ForE2E,options,e2e),await doTask(addTypescript,options,!!options.typescript),await doTask(addRequiredDeps,options),registry&&(await registryUrlNPM(registry),await registryUrlYarn(registry)),await doTask(initStorybook,options)};var logger21=console,TEMPLATES=configs_exports,CURATED_TEMPLATES=Object.fromEntries(Object.entries(configs_exports).filter(entry=>entry[0]!=="react_in_yarn_workspace")),RENDERERS=Object.values(CURATED_TEMPLATES).reduce((acc,cur)=>(acc[cur.renderer]=[...acc[cur.renderer]||[],cur],acc),{}),repro=async({outputDirectory,list,template,renderer,generator:generator23,e2e,local,registry,pnp})=>{if(logger21.info(boxen2(dedent21`
371
+ 🤗 Welcome to ${chalk24.yellow("sb repro")}! 🤗
250
372
 
251
- Create a ${chalk20.green("new project")} to minimally reproduce Storybook issues.
373
+ Create a ${chalk24.green("new project")} to minimally reproduce Storybook issues.
252
374
 
253
375
  1. select an environment that most closely matches your project setup.
254
376
  2. select a location for the reproduction, outside of your project.
255
377
 
256
378
  After the reproduction is ready, we'll guide you through the next steps.
257
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),list){logger18.info("\u{1F308} Available templates"),Object.entries(RENDERERS).forEach(([r,templates])=>{logger18.info(r),templates.forEach(t=>logger18.info(`- ${t.name}`)),r==="other"&&logger18.info("- blank")});return}let selectedTemplate=template,selectedRenderer=renderer;if(!selectedTemplate&&!generator23){if(!selectedRenderer){let{renderer:rendererOpt}=await prompts4({type:"select",message:"\u{1F308} Select the repro renderer",name:"renderer",choices:Object.keys(RENDERERS).map(f=>({title:f,value:f}))});selectedRenderer=rendererOpt}if(!selectedRenderer)throw new Error("\u{1F6A8} Repro: please select a renderer!");selectedTemplate=(await prompts4({type:"select",message:"\u{1F4DD} Select the repro base template",name:"template",choices:RENDERERS[selectedRenderer].map(f=>({title:f.name,value:f.name}))})).template}let selectedConfig=generator23?{name:"custom",version:"custom",generator:generator23}:TEMPLATES[selectedTemplate];if(!selectedConfig)throw new Error("\u{1F6A8} Repro: please specify a valid template type");let selectedDirectory=outputDirectory;if(!selectedDirectory){let{directory}=await prompts4({type:"text",message:"Enter the output directory",name:"directory",initial:selectedConfig.name,validate:directoryName=>fs7.existsSync(directoryName)?`${directoryName} already exists. Please choose another name.`:!0});selectedDirectory=directory}try{let cwd=path12.isAbsolute(selectedDirectory)?selectedDirectory:path12.join(process.cwd(),selectedDirectory);logger18.info(`\u{1F3C3} Running ${selectedTemplate} into ${cwd}`),await createAndInit(cwd,selectedConfig,{registry,e2e:!!e2e,pnp:!!pnp,local:!!local}),e2e||await initGitRepo(cwd),logger18.info(boxen2(dedent16`
379
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),list){logger21.info("\u{1F308} Available templates"),Object.entries(RENDERERS).forEach(([r,templates])=>{logger21.info(r),templates.forEach(t=>logger21.info(`- ${t.name}`)),r==="other"&&logger21.info("- blank")});return}let selectedTemplate=template,selectedRenderer=renderer;if(!selectedTemplate&&!generator23){if(!selectedRenderer){let{renderer:rendererOpt}=await prompts4({type:"select",message:"\u{1F308} Select the repro renderer",name:"renderer",choices:Object.keys(RENDERERS).map(f=>({title:f,value:f}))});selectedRenderer=rendererOpt}if(!selectedRenderer)throw new Error("\u{1F6A8} Repro: please select a renderer!");selectedTemplate=(await prompts4({type:"select",message:"\u{1F4DD} Select the repro base template",name:"template",choices:RENDERERS[selectedRenderer].map(f=>({title:f.name,value:f.name}))})).template}let selectedConfig=generator23?{name:"custom",version:"custom",generator:generator23}:TEMPLATES[selectedTemplate];if(!selectedConfig)throw new Error("\u{1F6A8} Repro: please specify a valid template type");let selectedDirectory=outputDirectory;if(!selectedDirectory){let{directory}=await prompts4({type:"text",message:"Enter the output directory",name:"directory",initial:selectedConfig.name,validate:directoryName=>fs7.existsSync(directoryName)?`${directoryName} already exists. Please choose another name.`:!0});selectedDirectory=directory}try{let cwd=path13.isAbsolute(selectedDirectory)?selectedDirectory:path13.join(process.cwd(),selectedDirectory);logger21.info(`\u{1F3C3} Running ${selectedTemplate} into ${cwd}`),await createAndInit(cwd,selectedConfig,{registry,e2e:!!e2e,pnp:!!pnp,local:!!local}),e2e||await initGitRepo(cwd),logger21.info(boxen2(dedent21`
258
380
  🎉 Your Storybook reproduction project is ready to use! 🎉
259
381
 
260
- ${chalk20.yellow(`cd ${selectedDirectory}`)}
261
- ${chalk20.yellow("yarn storybook")}
382
+ ${chalk24.yellow(`cd ${selectedDirectory}`)}
383
+ ${chalk24.yellow("yarn storybook")}
262
384
 
263
385
  Once you've recreated the problem you're experiencing, please:
264
386
 
265
- 1. Document any additional steps in ${chalk20.cyan("README.md")}
387
+ 1. Document any additional steps in ${chalk24.cyan("README.md")}
266
388
  2. Publish the repository to github
267
389
  3. Link to the repro repository in your issue
268
390
 
269
391
  Having a clean repro helps us solve your issue faster! 🙏
270
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}catch(error){throw logger18.error("\u{1F6A8} Failed to create repro"),error}},initGitRepo=async cwd=>{await exec("git init",{cwd}),await exec('echo "node_modules" >> .gitignore',{cwd}),await exec("git add --all",{cwd}),await exec('git commit -am "added storybook"',{cwd}),await exec("git tag repro-base",{cwd})};import prompts5 from"prompts";import path13 from"path";import chalk21 from"chalk";import boxen3 from"boxen";import{dedent as dedent17}from"ts-dedent";import{downloadTemplate}from"giget";import{existsSync as existsSync2}from"fs-extra";var allTemplates={"cra/default-js":{name:"Create React App (Javascript)",script:"npx create-react-app .",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"cra/default-ts":{name:"Create React App (Typescript)",script:"npx create-react-app . --template typescript",skipTasks:["smoke-test"],expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/12-js":{name:"Next.js v12 (JavaScript)",script:'yarn create next-app {{beforeDir}} -e https://github.com/vercel/next.js/tree/next-12-3-2/examples/hello-world && cd {{beforeDir}} && npm pkg set "dependencies.next"="^12.2.0" && yarn && git add . && git commit --amend --no-edit && cd ..',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/default-js":{name:"Next.js (JavaScript)",script:"yarn create next-app {{beforeDir}} --javascript --eslint",expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/default-ts":{name:"Next.js (TypeScript)",script:"yarn create next-app {{beforeDir}} --typescript --eslint",expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"react-vite/default-js":{name:"React Vite (JS)",script:"yarn create vite . --template react",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"}},"react-vite/default-ts":{name:"React Vite (TS)",script:"yarn create vite . --template react-ts",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"}},"react-webpack/18-ts":{name:"React Webpack5 (TS)",script:"yarn create webpack5-react .",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"react-webpack/17-ts":{name:"React Webpack5 (TS)",script:'yarn create webpack5-react . --version-react="17" --version-react-dom="17"',expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"vue3-vite/default-js":{name:"Vue3 Vite (JS)",script:"yarn create vite . --template vue",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"}},"vue3-vite/default-ts":{name:"Vue3 Vite (TS)",script:"yarn create vite . --template vue-ts",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"}},"vue2-vite/2.7-js":{name:"Vue2 Vite (vue 2.7 JS)",script:`yarn create vite . --template vanilla && yarn add --dev @vitejs/plugin-vue2 vue-template-compiler vue@2 && echo "import vue2 from '@vitejs/plugin-vue2';
392
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}catch(error){throw logger21.error("\u{1F6A8} Failed to create repro"),error}},initGitRepo=async cwd=>{await exec("git init",{cwd}),await exec('echo "node_modules" >> .gitignore',{cwd}),await exec("git add --all",{cwd}),await exec('git commit -am "added storybook"',{cwd}),await exec("git tag repro-base",{cwd})};import prompts5 from"prompts";import path14 from"path";import chalk25 from"chalk";import boxen3 from"boxen";import{dedent as dedent22}from"ts-dedent";import{downloadTemplate}from"giget";import{existsSync as existsSync2}from"fs-extra";var allTemplates={"cra/default-js":{name:"Create React App (Javascript)",script:"npx create-react-app .",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"cra/default-ts":{name:"Create React App (Typescript)",script:"npx create-react-app . --template typescript",skipTasks:["smoke-test"],expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/12-js":{name:"Next.js v12 (JavaScript)",script:'yarn create next-app {{beforeDir}} -e https://github.com/vercel/next.js/tree/next-12-3-2/examples/hello-world && cd {{beforeDir}} && npm pkg set "dependencies.next"="^12.2.0" && yarn && git add . && git commit --amend --no-edit && cd ..',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/default-js":{name:"Next.js (JavaScript)",script:"yarn create next-app {{beforeDir}} --javascript --eslint",expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/default-ts":{name:"Next.js (TypeScript)",script:"yarn create next-app {{beforeDir}} --typescript --eslint",expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"react-vite/default-js":{name:"React Vite (JS)",script:"yarn create vite . --template react",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"}},"react-vite/default-ts":{name:"React Vite (TS)",script:"yarn create vite . --template react-ts",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"}},"react-webpack/18-ts":{name:"React Webpack5 (TS)",script:"yarn create webpack5-react .",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"react-webpack/17-ts":{name:"React Webpack5 (TS)",script:'yarn create webpack5-react . --version-react="17" --version-react-dom="17"',expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"vue3-vite/default-js":{name:"Vue3 Vite (JS)",script:"yarn create vite . --template vue",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"}},"vue3-vite/default-ts":{name:"Vue3 Vite (TS)",script:"yarn create vite . --template vue-ts",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"}},"vue2-vite/2.7-js":{name:"Vue2 Vite (vue 2.7 JS)",script:`yarn create vite . --template vanilla && yarn add --dev @vitejs/plugin-vue2 vue-template-compiler vue@2 && echo "import vue2 from '@vitejs/plugin-vue2';
271
393
 
272
394
  export default {
273
395
  plugins: [vue2()]
274
- };" > vite.config.js`,skipTasks:["smoke-test"],expected:{framework:"@storybook/vue-vite",renderer:"@storybook/vue",builder:"@storybook/builder-vite"}},"html-webpack/default":{name:"HTML Webpack5",script:"yarn create webpack5-html .",expected:{framework:"@storybook/html-webpack5",renderer:"@storybook/html",builder:"@storybook/builder-webpack5"}},"html-vite/default-js":{name:"HTML Vite JS",script:'yarn create vite . --template vanilla && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},inDevelopment:!0},"html-vite/default-ts":{name:"HTML Vite TS",script:'yarn create vite . --template vanilla-ts && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},inDevelopment:!0},"svelte-vite/default-js":{name:"Svelte Vite (JS)",script:"yarn create vite . --template svelte",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"svelte-vite/default-ts":{name:"Svelte Vite (TS)",script:"yarn create vite . --template svelte-ts",skipTasks:["smoke-test"],expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"angular-cli/default-ts":{name:"Angular CLI (latest)",script:"npx -p @angular/cli ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"}},"angular-cli/14-ts":{name:"Angular CLI (Version 14)",script:"npx -p @angular/cli@14 ng new angular-v14 --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"}},"angular-cli/13-ts":{name:"Angular CLI (Version 13)",script:"npx -p @angular/cli@13 ng new angular-v13 --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"}},"svelte-kit/skeleton-js":{inDevelopment:!0,name:"Svelte Kit (JS)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-js --directory=. --template=skeleton --types=null --no-prettier --no-eslint --no-playwright",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"svelte-kit/skeleton-ts":{inDevelopment:!0,name:"Svelte Kit (TS)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-ts --directory=. --template=skeleton --types=typescript --no-prettier --no-eslint --no-playwright",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"lit-vite/default-js":{name:"Lit Vite (JS)",script:"yarn create vite . --template lit",skipTasks:["smoke-test"],expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"}},"lit-vite/default-ts":{name:"Lit Vite (TS)",script:"yarn create vite . --template lit-ts",skipTasks:["smoke-test"],expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"}},"vue-cli/default-js":{name:"Vue-CLI (Default JS)",script:"npx -p @vue/cli vue create . --default --packageManager=yarn --force --merge",skipTasks:["smoke-test"],expected:{framework:"@storybook/vue3-webpack5",renderer:"@storybook/vue3",builder:"@storybook/builder-webpack5"}},"vue-cli/vue2-default-js":{name:"Vue-CLI (Vue2 JS)",script:'npx -p @vue/cli vue create . --default --packageManager=yarn --force --merge --preset="Default (Vue 2)"',skipTasks:["smoke-test"],expected:{framework:"@storybook/vue-webpack5",renderer:"@storybook/vue",builder:"@storybook/builder-webpack5"}},"preact-webpack5/default-js":{name:"Preact CLI (Default JS)",script:"npx preact-cli create default {{beforeDir}} --name preact-app --yarn --no-install",expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"}},"preact-webpack5/default-ts":{name:"Preact CLI (Default TS)",script:"npx preact-cli create typescript {{beforeDir}} --name preact-app --yarn --no-install",expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"}}},ci=["cra/default-ts","react-vite/default-ts"],pr=[...ci,"angular-cli/default-ts","vue3-vite/default-ts","vue-cli/vue2-default-js","lit-vite/default-ts","svelte-vite/default-ts","svelte-kit/skeleton-ts","nextjs/default-ts"],merged=[...pr,"react-webpack/18-ts","react-webpack/17-ts","angular-cli/14-ts","angular-cli/13-ts","preact-webpack5/default-ts","html-webpack/default"],daily=[...merged,"cra/default-js","react-vite/default-js","vue3-vite/default-js","vue2-vite/2.7-js","vue-cli/default-js","lit-vite/default-js","svelte-kit/skeleton-js","svelte-vite/default-js","nextjs/default-js","preact-webpack5/default-js"];var logger19=console,toChoices=c=>({title:allTemplates[c].name,value:c}),reproNext=async({output:outputDirectory,filterValue,branch,init})=>{let keys=Object.keys(allTemplates),choices=keys.reduce((acc,group)=>{let current=allTemplates[group],filterRegex=new RegExp(filterValue,"i");return(!filterValue||current.name.match(filterRegex)||group.match(filterRegex)||current.expected.builder.match(filterRegex)||current.expected.framework.match(filterRegex)||current.expected.renderer.match(filterRegex))&&acc.push(group),acc},[]);choices.length===0&&(logger19.info(boxen3(dedent17`
396
+ };" > vite.config.js`,skipTasks:["smoke-test"],expected:{framework:"@storybook/vue-vite",renderer:"@storybook/vue",builder:"@storybook/builder-vite"}},"html-webpack/default":{name:"HTML Webpack5",script:"yarn create webpack5-html .",expected:{framework:"@storybook/html-webpack5",renderer:"@storybook/html",builder:"@storybook/builder-webpack5"}},"html-vite/default-js":{name:"HTML Vite JS",script:'yarn create vite . --template vanilla && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},inDevelopment:!0},"html-vite/default-ts":{name:"HTML Vite TS",script:'yarn create vite . --template vanilla-ts && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},inDevelopment:!0},"svelte-vite/default-js":{name:"Svelte Vite (JS)",script:"yarn create vite . --template svelte",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"svelte-vite/default-ts":{name:"Svelte Vite (TS)",script:"yarn create vite . --template svelte-ts",skipTasks:["smoke-test"],expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"angular-cli/default-ts":{name:"Angular CLI (latest)",script:"npx -p @angular/cli ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"}},"angular-cli/14-ts":{name:"Angular CLI (Version 14)",script:"npx -p @angular/cli@14 ng new angular-v14 --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"}},"angular-cli/13-ts":{name:"Angular CLI (Version 13)",script:"npx -p @angular/cli@13 ng new angular-v13 --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"}},"svelte-kit/skeleton-js":{name:"Svelte Kit (JS)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-js --directory=. --template=skeleton --types=null --no-prettier --no-eslint --no-playwright --no-vitest",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"svelte-kit/skeleton-ts":{name:"Svelte Kit (TS)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-ts --directory=. --template=skeleton --types=typescript --no-prettier --no-eslint --no-playwright --no-vitest",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"}},"lit-vite/default-js":{name:"Lit Vite (JS)",script:"yarn create vite . --template lit",skipTasks:["smoke-test"],expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"}},"lit-vite/default-ts":{name:"Lit Vite (TS)",script:"yarn create vite . --template lit-ts",skipTasks:["smoke-test"],expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"}},"vue-cli/default-js":{name:"Vue-CLI (Default JS)",script:"npx -p @vue/cli vue create . --default --packageManager=yarn --force --merge",skipTasks:["smoke-test"],expected:{framework:"@storybook/vue3-webpack5",renderer:"@storybook/vue3",builder:"@storybook/builder-webpack5"}},"vue-cli/vue2-default-js":{name:"Vue-CLI (Vue2 JS)",script:'npx -p @vue/cli vue create . --default --packageManager=yarn --force --merge --preset="Default (Vue 2)"',skipTasks:["smoke-test"],expected:{framework:"@storybook/vue-webpack5",renderer:"@storybook/vue",builder:"@storybook/builder-webpack5"}},"preact-webpack5/default-js":{name:"Preact CLI (Default JS)",script:"npx preact-cli create default {{beforeDir}} --name preact-app --yarn --no-install",expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"}},"preact-webpack5/default-ts":{name:"Preact CLI (Default TS)",script:"npx preact-cli create typescript {{beforeDir}} --name preact-app --yarn --no-install",expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"}},"preact-vite/default-js":{name:"Preact Vite (JS)",script:"yarn create vite . --template preact",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"}},"preact-vite/default-ts":{name:"Preact Vite (TS)",script:"yarn create vite . --template preact-ts",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"}}},ci=["cra/default-ts","react-vite/default-ts"],pr=[...ci,"angular-cli/default-ts","vue3-vite/default-ts","vue-cli/vue2-default-js","lit-vite/default-ts","svelte-vite/default-ts","svelte-kit/skeleton-ts","nextjs/default-ts"],merged=[...pr,"react-webpack/18-ts","react-webpack/17-ts","angular-cli/14-ts","angular-cli/13-ts","preact-webpack5/default-ts","preact-vite/default-ts","html-webpack/default"],daily=[...merged,"cra/default-js","react-vite/default-js","vue3-vite/default-js","vue2-vite/2.7-js","vue-cli/default-js","lit-vite/default-js","svelte-kit/skeleton-js","svelte-vite/default-js","nextjs/12-js","nextjs/default-js","preact-webpack5/default-js","preact-vite/default-js"];var logger22=console,toChoices=c=>({title:allTemplates[c].name,value:c}),reproNext=async({output:outputDirectory,filterValue,branch,init})=>{let filterRegex=new RegExp(`^${filterValue||""}`,"i"),keys=Object.keys(allTemplates),choices=keys.reduce((acc,group)=>{let current=allTemplates[group];return(!filterValue||current.name.match(filterRegex)||group.match(filterRegex)||current.expected.builder.match(filterRegex)||current.expected.framework.match(filterRegex)||current.expected.renderer.match(filterRegex))&&acc.push(group),acc},[]);choices.length===0&&(logger22.info(boxen3(dedent22`
275
397
  🔎 You filtered out all templates. 🔍
276
-
277
- After filtering all the templates with "${chalk21.yellow(filterValue)}", we found no results. Please try again with a different filter.
398
+
399
+ After filtering all the templates with "${chalk25.yellow(filterValue)}", we found no results. Please try again with a different filter.
278
400
 
279
401
  Available templates:
280
- ${keys.map(key=>chalk21.blue`- ${key}`).join(`
402
+ ${keys.map(key=>chalk25.blue`- ${key}`).join(`
281
403
  `)}
282
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1));let selectedTemplate=null;if(choices.length===1?[selectedTemplate]=choices:(logger19.info(boxen3(dedent17`
283
- 🤗 Welcome to ${chalk21.yellow("sb repro NEXT")}! 🤗
284
-
285
- Create a ${chalk21.green("new project")} to minimally reproduce Storybook issues.
286
-
404
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1));let selectedTemplate=null;if(choices.length===1?[selectedTemplate]=choices:(logger22.info(boxen3(dedent22`
405
+ 🤗 Welcome to ${chalk25.yellow("sb repro NEXT")}! 🤗
406
+
407
+ Create a ${chalk25.green("new project")} to minimally reproduce Storybook issues.
408
+
287
409
  1. select an environment that most closely matches your project setup.
288
410
  2. select a location for the reproduction, outside of your project.
289
-
411
+
290
412
  After the reproduction is ready, we'll guide you through the next steps.
291
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),selectedTemplate=await promptSelectedTemplate(choices)),!!!(selectedTemplate??null)){logger19.error("Somehow we got no templates. Please rerun this command!");return}let selectedConfig=allTemplates[selectedTemplate];if(!selectedConfig)throw new Error("\u{1F6A8} Repro: please specify a valid template type");let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||selectedTemplate;if(selectedDirectory&&existsSync2(`${selectedDirectory}`)&&logger19.info(`\u26A0\uFE0F ${selectedDirectory} already exists! Overwriting...`),!selectedDirectory){let{directory}=await prompts5({type:"text",message:"Enter the output directory",name:"directory",initial:outputDirectoryName,validate:async directoryName=>existsSync2(directoryName)?`${directoryName} already exists. Please choose another name.`:!0});selectedDirectory=directory}try{let templateDestination=path13.isAbsolute(selectedDirectory)?selectedDirectory:path13.join(process.cwd(),selectedDirectory);logger19.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger19.log("\u{1F4E6} Downloading repro template...");try{await downloadTemplate(`github:storybookjs/repro-templates-temp/${selectedTemplate}/${init?"after-storybook":"before-storybook"}#${branch}`,{force:!0,dir:templateDestination})}catch(err){throw logger19.error(`\u{1F6A8} Failed to download repro template: ${err.message}`),err}let initMessage=init?chalk21.yellow(`yarn install
292
- yarn storybook`):`Recreate your setup, then ${chalk21.yellow("run npx storybook init")}`;logger19.info(boxen3(dedent17`
413
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),selectedTemplate=await promptSelectedTemplate(choices)),!!!(selectedTemplate??null)){logger22.error("Somehow we got no templates. Please rerun this command!");return}let selectedConfig=allTemplates[selectedTemplate];if(!selectedConfig)throw new Error("\u{1F6A8} Repro: please specify a valid template type");let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||selectedTemplate;if(selectedDirectory&&existsSync2(`${selectedDirectory}`)&&logger22.info(`\u26A0\uFE0F ${selectedDirectory} already exists! Overwriting...`),!selectedDirectory){let{directory}=await prompts5({type:"text",message:"Enter the output directory",name:"directory",initial:outputDirectoryName,validate:async directoryName=>existsSync2(directoryName)?`${directoryName} already exists. Please choose another name.`:!0});selectedDirectory=directory}try{let templateDestination=path14.isAbsolute(selectedDirectory)?selectedDirectory:path14.join(process.cwd(),selectedDirectory);logger22.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger22.log("\u{1F4E6} Downloading repro template...");try{await downloadTemplate(`github:storybookjs/repro-templates-temp/${selectedTemplate}/${init?"after-storybook":"before-storybook"}#${branch}`,{force:!0,dir:templateDestination})}catch(err){throw logger22.error(`\u{1F6A8} Failed to download repro template: ${err.message}`),err}let initMessage=init?chalk25.yellow(`yarn install
414
+ yarn storybook`):`Recreate your setup, then ${chalk25.yellow("run npx storybook init")}`;logger22.info(boxen3(dedent22`
293
415
  🎉 Your Storybook reproduction project is ready to use! 🎉
294
416
 
295
- ${chalk21.yellow(`cd ${selectedDirectory}`)}
417
+ ${chalk25.yellow(`cd ${selectedDirectory}`)}
296
418
  ${initMessage}
297
419
 
298
420
  Once you've recreated the problem you're experiencing, please:
299
-
300
- 1. Document any additional steps in ${chalk21.cyan("README.md")}
421
+
422
+ 1. Document any additional steps in ${chalk25.cyan("README.md")}
301
423
  2. Publish the repository to github
302
424
  3. Link to the repro repository in your issue
303
425
 
304
426
  Having a clean repro helps us solve your issue faster! 🙏
305
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}catch(error){throw logger19.error("\u{1F6A8} Failed to create repro"),error}};async function promptSelectedTemplate(choices){let{template}=await prompts5({type:"select",message:"\u{1F308} Select the template",name:"template",choices:choices.map(toChoices)});return template||null}import fse6 from"fs-extra";import path14 from"path";import{sync as spawnSync5}from"cross-spawn";import{logger as logger20}from"@storybook/node-logger";var link=async({target,local,start})=>{let storybookDir=process.cwd();try{if((await fse6.readJSON("package.json")).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=path14.basename(target);if(!local){let reprosDir=path14.join(storybookDir,"../storybook-repros");logger20.info(`Ensuring directory ${reprosDir}`),await fse6.ensureDir(reprosDir),logger20.info(`Cloning ${target}`),await exec(`git clone ${target}`,{cwd:reprosDir}),reproName=path14.basename(target,path14.extname(target)),reproDir=path14.join(reprosDir,reproName)}let reproPackageJson=await fse6.readJSON(path14.join(reproDir,"package.json")),version=spawnSync5("yarn",["--version"],{cwd:reproDir,stdio:"pipe",shell:!0}).stdout.toString();if(!/^[23]\./.test(version)){logger20.warn(`\u{1F6A8} Expected yarn 2 or 3 in ${reproDir}!`),logger20.warn(""),logger20.warn("Please set it up with `yarn set version berry`,"),logger20.warn(`then link '${reproDir}' with the '--local' flag.`);return}logger20.info(`Linking ${reproDir}`),await exec(`yarn link --all ${storybookDir}`,{cwd:reproDir}),logger20.info(`Installing ${reproName}`),await exec("yarn install",{cwd:reproDir}),logger20.info("Magic stuff related to @storybook/preset-create-react-app, we need to fix peerDependencies"),reproPackageJson.devDependencies?.vite||await exec("yarn add -D webpack-hot-middleware",{cwd:reproDir}),await exec("yarn add @types/node@16",{cwd:reproDir}),start&&(logger20.info(`Running ${reproName} storybook`),await exec("yarn run storybook",{cwd:reproDir}))};import{dedent as dedent18}from"ts-dedent";import{sync as readUpSync}from"read-pkg-up";import{logger as logger21,instance as npmLog}from"@storybook/node-logger";import{buildDevStandalone,withTelemetry as withTelemetry3}from"@storybook/core-server";import{cache}from"@storybook/core-common";var dev=async cliOptions=>{process.env.NODE_ENV=process.env.NODE_ENV||"development";try{let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",configType:"DEVELOPMENT",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,docsMode:!!cliOptions.docs,cache,packageJson:readUpSync({cwd:__dirname}).packageJson};await withTelemetry3("dev",{presetOptions:options},()=>buildDevStandalone(options))}catch(error){npmLog.heading="",error instanceof Error?error.error?logger21.error(error.error):error.stats&&error.stats.compilation.errors?error.stats.compilation.errors.forEach(e=>logger21.plain(e)):logger21.error(error):error.compilation?.errors&&error.compilation.errors.forEach(e=>logger21.plain(e)),logger21.line(),logger21.warn(error.close?dedent18`
427
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}catch(error){throw logger22.error("\u{1F6A8} Failed to create repro"),error}};async function promptSelectedTemplate(choices){let{template}=await prompts5({type:"select",message:"\u{1F308} Select the template",name:"template",choices:choices.map(toChoices)});return template||null}import fse6 from"fs-extra";import path15 from"path";import{sync as spawnSync5}from"cross-spawn";import{logger as logger23}from"@storybook/node-logger";var link=async({target,local,start})=>{let storybookDir=process.cwd();try{if((await fse6.readJSON("package.json")).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=path15.basename(target);if(!local){let reprosDir=path15.join(storybookDir,"../storybook-repros");logger23.info(`Ensuring directory ${reprosDir}`),await fse6.ensureDir(reprosDir),logger23.info(`Cloning ${target}`),await exec(`git clone ${target}`,{cwd:reprosDir}),reproName=path15.basename(target,path15.extname(target)),reproDir=path15.join(reprosDir,reproName)}let reproPackageJson=await fse6.readJSON(path15.join(reproDir,"package.json")),version=spawnSync5("yarn",["--version"],{cwd:reproDir,stdio:"pipe",shell:!0}).stdout.toString();if(!/^[23]\./.test(version)){logger23.warn(`\u{1F6A8} Expected yarn 2 or 3 in ${reproDir}!`),logger23.warn(""),logger23.warn("Please set it up with `yarn set version berry`,"),logger23.warn(`then link '${reproDir}' with the '--local' flag.`);return}logger23.info(`Linking ${reproDir}`),await exec(`yarn link --all ${storybookDir}`,{cwd:reproDir}),logger23.info(`Installing ${reproName}`),await exec("yarn install",{cwd:reproDir}),logger23.info("Magic stuff related to @storybook/preset-create-react-app, we need to fix peerDependencies"),reproPackageJson.devDependencies?.vite||await exec("yarn add -D webpack-hot-middleware",{cwd:reproDir}),await exec("yarn add @types/node@16",{cwd:reproDir}),start&&(logger23.info(`Running ${reproName} storybook`),await exec("yarn run storybook",{cwd:reproDir}))};import{dedent as dedent24}from"ts-dedent";import{sync as readUpSync}from"read-pkg-up";import{logger as logger25,instance as npmLog}from"@storybook/node-logger";import{buildDevStandalone,withTelemetry as withTelemetry3}from"@storybook/core-server";import{cache}from"@storybook/core-common";import{logger as logger24}from"@storybook/node-logger";import dedent23 from"ts-dedent";function ensureReactPeerDeps(){try{__require.resolve("react"),__require.resolve("react-dom")}catch{logger24.error(dedent23`
428
+ Starting in 7.0, react and react-dom are now required peer dependencies of Storybook.
429
+ https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-peer-dependencies-required
430
+
431
+ It seems that you haven't run Storybook's CLI to upgrade to the latest version.
432
+ The upgrade command will install the required peer dependencies for you and will take
433
+ care of other important auto migrations as well.
434
+
435
+ If you want to upgrade to the latest prerelease version, please run:
436
+
437
+ $ npx storybook@next upgrade --prerelease
438
+
439
+ Otherwise, please run:
440
+
441
+ $ npx storybook upgrade
442
+
443
+ If you do not want to use the upgrade commands,
444
+ please install react and react-dom in your project manually.
445
+
446
+ npm:
447
+ $ npm add react react-dom --dev
448
+
449
+ yarn:
450
+ $ yarn add react react-dom --dev
451
+
452
+ pnpm:
453
+ $ pnpm add react react-dom --dev
454
+ `),process.exit(1)}}var dev=async cliOptions=>{process.env.NODE_ENV=process.env.NODE_ENV||"development",ensureReactPeerDeps();try{let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",configType:"DEVELOPMENT",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,docsMode:!!cliOptions.docs,cache,packageJson:readUpSync({cwd:__dirname}).packageJson};await withTelemetry3("dev",{cliOptions,presetOptions:options},()=>buildDevStandalone(options))}catch(error){npmLog.heading="",error instanceof Error?error.error?logger25.error(error.error):error.stats&&error.stats.compilation.errors?error.stats.compilation.errors.forEach(e=>logger25.plain(e)):logger25.error(error):error.compilation?.errors&&error.compilation.errors.forEach(e=>logger25.plain(e)),logger25.line(),logger25.warn(error.close?dedent24`
306
455
  FATAL broken build!, will close the process,
307
456
  Fix the error below and restart storybook.
308
- `:dedent18`
457
+ `:dedent24`
309
458
  Broken build, fix the error above.
310
459
  You may need to refresh the browser.
311
- `),logger21.line(),process.exit(1)}};import{sync as readUpSync2}from"read-pkg-up";import{logger as logger22}from"@storybook/node-logger";import{buildStaticStandalone,withTelemetry as withTelemetry4}from"@storybook/core-server";import{cache as cache2}from"@storybook/core-common";var build=async cliOptions=>{try{let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",outputDir:cliOptions.outputDir||"./storybook-static",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,docsMode:!!cliOptions.docs,configType:"PRODUCTION",cache:cache2,packageJson:readUpSync2({cwd:__dirname}).packageJson};await withTelemetry4("build",{presetOptions:options},()=>buildStaticStandalone(options))}catch(err){logger22.error(err),process.exit(1)}};function parseList(str){return str.split(",").map(item=>item.trim()).filter(item=>item.length>0)}function getEnvConfig(program2,configEnv){Object.keys(configEnv).forEach(fieldName=>{let envVarName=configEnv[fieldName],envVarValue=process.env[envVarName];envVarValue&&(program2[fieldName]=envVarValue)})}var pkg=readUpSync3({cwd:__dirname}).packageJson,consoleLogger=console;program.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");program.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("-N --use-npm","Use npm to install deps (deprecated)").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)").action(options=>initiate(options,pkg).catch(err=>{logger23.error(err),process.exit(1)}));program.command("add <addon>").description("Add an addon to your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").option("-N --use-npm","Use NPM to install dependencies (deprecated)").option("-s --skip-postinstall","Skip package specific postinstall config modifications").action((addonName,options)=>add(addonName,options));program.command("babelrc").description("generate the default storybook babel config into your current working directory").action(()=>generateStorybookBabelConfigInCWD());program.command("upgrade").description("Upgrade your Storybook packages to the latest").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").option("-N --use-npm","Use NPM to install dependencies (deprecated)").option("-y --yes","Skip prompting the user").option("-n --dry-run","Only check for upgrades, do not install").option("-t --tag <tag>","Upgrade to a certain npm dist-tag (e.g. next, prerelease)").option("-p --prerelease","Upgrade to the pre-release packages").option("-s --skip-check","Skip postinstall version and automigration checks").action(options=>upgrade(options));program.command("info").description("Prints debugging information about the local environment").action(()=>{consoleLogger.log(chalk22.bold(`
312
- Environment Info:`)),envinfo.run({System:["OS","CPU"],Binaries:["Node","Yarn","npm"],Browsers:["Chrome","Edge","Firefox","Safari"],npmPackages:"@storybook/*",npmGlobalPackages:"@storybook/*"}).then(consoleLogger.log)});program.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("-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,parser})=>{migrate(migration,{configDir,glob,dryRun,list,rename,parser,logger:consoleLogger}).catch(err=>{logger23.error(err),process.exit(1)})});program.command("extract [location] [output]").description("extract stories.json from a built version").action((location="storybook-static",output=path15.join(location,"stories.json"))=>extract(location,output).catch(e=>{logger23.error(e),process.exit(1)}));program.command("repro [outputDirectory]").description("Create a reproduction from a set of possible templates").option("-f --renderer <renderer>","Filter on given renderer").option("-t --template <template>","Use the given template").option("-l --list","List available templates").option("-g --generator <generator>","Use custom generator command").option("--registry <registry>","which registry to use for storybook packages").option("--pnp","Use Yarn Plug'n'Play mode instead of node_modules one").option("--local","use storybook's local packages instead of yarn's registry").option("--e2e","Used in e2e context").action((outputDirectory,{renderer,template,list,e2e,generator:generator23,pnp,local})=>repro({outputDirectory,renderer,template,list,e2e,local,generator:generator23,pnp}).catch(e=>{logger23.error(e),process.exit(1)}));program.command("repro-next [filterValue]").description("Create a reproduction from a set of possible templates").option("-o --output <outDir>","Define an output directory").option("-b --branch <branch>","Define the branch to download from","next").option("--no-init","Whether to download a template without an initialized Storybook",!1).action((filterValue,options)=>reproNext({filterValue,...options}).catch(e=>{logger23.error(e),process.exit(1)}));program.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(e=>{logger23.error(e),process.exit(1)}));program.command("automigrate [fixId]").description("Check storybook for known problems 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>","Force package manager").option("-N --use-npm","Use npm as package manager (deprecated)").action(async(fixId,options)=>{await automigrate({fixId,...options}).catch(e=>{logger23.error(e),process.exit(1)})});program.command("dev").option("-p, --port <number>","Port to run Storybook",str=>parseInt(str,10)).option("-h, --host <string>","Host to run Storybook").option("-s, --static-dir <dir-names>","Directory where to load static files from",parseList).option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("--https","Serve Storybook over HTTPS. Note: You must provide your own certificate information.").option("--ssl-ca <ca>","Provide an SSL certificate authority. (Optional with --https, required if using a self-signed certificate)",parseList).option("--ssl-cert <cert>","Provide an SSL certificate. (Required with --https)").option("--ssl-key <key>","Provide an SSL key. (Required with --https)").option("--smoke-test","Exit after successful start").option("--ci","CI mode (skip interactive prompts, don't open browser)").option("--no-open","Do not open Storybook automatically in the browser").option("--loglevel <level>","Control level of logging during build").option("--quiet","Suppress verbose build output").option("--no-version-updates","Suppress update check",!0).option("--no-release-notes","Suppress automatic redirects to the release notes after upgrading",!0).option("--no-manager-cache","Do not cache the manager UI").option("--debug-webpack","Display final webpack configurations for debugging purposes").option("--webpack-stats-json [directory]","Write Webpack Stats JSON to disk").option("--preview-url <string>","Disables the default storybook preview and lets your use your own").option("--force-build-preview","Build the preview iframe even if you are using --preview-url").option("--docs","Build a documentation-only site using addon-docs").action(options=>{logger23.setLevel(program.loglevel),consoleLogger.log(chalk22.bold(`${pkg.name} v${pkg.version}`)+chalk22.reset(`
313
- `)),getEnvConfig(program,{port:"SBCONFIG_PORT",host:"SBCONFIG_HOSTNAME",staticDir:"SBCONFIG_STATIC_DIR",configDir:"SBCONFIG_CONFIG_DIR",ci:"CI"}),typeof program.port=="string"&&program.port.length>0&&(program.port=parseInt(program.port,10)),dev({...options,packageJson:pkg})});program.command("build").option("-s, --static-dir <dir-names>","Directory where to load static files from",parseList).option("-o, --output-dir <dir-name>","Directory where to store built files").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("--quiet","Suppress verbose build output").option("--loglevel <level>","Control level of logging during build").option("--debug-webpack","Display final webpack configurations for debugging purposes").option("--webpack-stats-json [directory]","Write Webpack Stats JSON to disk").option("--preview-url <string>","Disables the default storybook preview and lets your use your own").option("--force-build-preview","Build the preview iframe even if you are using --preview-url").option("--docs","Build a documentation-only site using addon-docs").option("--no-manager-cache","Do not cache the manager UI").action(options=>{process.env.NODE_ENV=process.env.NODE_ENV||"production",logger23.setLevel(program.loglevel),consoleLogger.log(chalk22.bold(`${pkg.name} v${pkg.version}
460
+ `),logger25.line(),process.exit(1)}};import{sync as readUpSync2}from"read-pkg-up";import{logger as logger26}from"@storybook/node-logger";import{buildStaticStandalone,withTelemetry as withTelemetry4}from"@storybook/core-server";import{cache as cache2}from"@storybook/core-common";var build=async cliOptions=>{ensureReactPeerDeps();try{let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",outputDir:cliOptions.outputDir||"./storybook-static",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,docsMode:!!cliOptions.docs,configType:"PRODUCTION",cache:cache2,packageJson:readUpSync2({cwd:__dirname}).packageJson};await withTelemetry4("build",{cliOptions,presetOptions:options},()=>buildStaticStandalone(options))}catch(err){logger26.error(err),process.exit(1)}};function parseList(str){return str.split(",").map(item=>item.trim()).filter(item=>item.length>0)}function getEnvConfig(program2,configEnv){Object.keys(configEnv).forEach(fieldName=>{let envVarName=configEnv[fieldName],envVarValue=process.env[envVarName];envVarValue&&(program2[fieldName]=envVarValue)})}var pkg=readUpSync3({cwd:__dirname}).packageJson,consoleLogger=console;program.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");program.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("-N --use-npm","Use npm to install deps (deprecated)").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)").action(options=>initiate(options,pkg).catch(err=>{logger27.error(err),process.exit(1)}));program.command("add <addon>").description("Add an addon to your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").option("-N --use-npm","Use NPM to install dependencies (deprecated)").option("-s --skip-postinstall","Skip package specific postinstall config modifications").action((addonName,options)=>add(addonName,options));program.command("babelrc").description("generate the default storybook babel config into your current working directory").action(()=>generateStorybookBabelConfigInCWD());program.command("upgrade").description("Upgrade your Storybook packages to the latest").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").option("-N --use-npm","Use NPM to install dependencies (deprecated)").option("-y --yes","Skip prompting the user").option("-n --dry-run","Only check for upgrades, do not install").option("-t --tag <tag>","Upgrade to a certain npm dist-tag (e.g. next, prerelease)").option("-p --prerelease","Upgrade to the pre-release packages").option("-s --skip-check","Skip postinstall version and automigration checks").action(options=>upgrade(options));program.command("info").description("Prints debugging information about the local environment").action(()=>{consoleLogger.log(chalk26.bold(`
461
+ Environment Info:`)),envinfo.run({System:["OS","CPU"],Binaries:["Node","Yarn","npm"],Browsers:["Chrome","Edge","Firefox","Safari"],npmPackages:"@storybook/*",npmGlobalPackages:"@storybook/*"}).then(consoleLogger.log)});program.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("-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,parser})=>{migrate(migration,{configDir,glob,dryRun,list,rename,parser,logger:consoleLogger}).catch(err=>{logger27.error(err),process.exit(1)})});program.command("extract [location] [output]").description("extract stories.json from a built version").action((location="storybook-static",output=path16.join(location,"stories.json"))=>extract(location,output).catch(e=>{logger27.error(e),process.exit(1)}));program.command("repro [outputDirectory]").description("Create a reproduction from a set of possible templates").option("-f --renderer <renderer>","Filter on given renderer").option("-t --template <template>","Use the given template").option("-l --list","List available templates").option("-g --generator <generator>","Use custom generator command").option("--registry <registry>","which registry to use for storybook packages").option("--pnp","Use Yarn Plug'n'Play mode instead of node_modules one").option("--local","use storybook's local packages instead of yarn's registry").option("--e2e","Used in e2e context").action((outputDirectory,{renderer,template,list,e2e,generator:generator23,pnp,local})=>repro({outputDirectory,renderer,template,list,e2e,local,generator:generator23,pnp}).catch(e=>{logger27.error(e),process.exit(1)}));program.command("repro-next [filterValue]").description("Create a reproduction from a set of possible templates").option("-o --output <outDir>","Define an output directory").option("-b --branch <branch>","Define the branch to download from","next").option("--no-init","Whether to download a template without an initialized Storybook",!1).action((filterValue,options)=>reproNext({filterValue,...options}).catch(e=>{logger27.error(e),process.exit(1)}));program.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(e=>{logger27.error(e),process.exit(1)}));program.command("automigrate [fixId]").description("Check storybook for known problems 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>","Force package manager").option("-N --use-npm","Use npm as package manager (deprecated)").option("-l --list","List available migrations").action(async(fixId2,options)=>{await automigrate({fixId:fixId2,...options}).catch(e=>{logger27.error(e),process.exit(1)})});program.command("dev").option("-p, --port <number>","Port to run Storybook",str=>parseInt(str,10)).option("-h, --host <string>","Host to run Storybook").option("-s, --static-dir <dir-names>","Directory where to load static files from",parseList).option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("--https","Serve Storybook over HTTPS. Note: You must provide your own certificate information.").option("--ssl-ca <ca>","Provide an SSL certificate authority. (Optional with --https, required if using a self-signed certificate)",parseList).option("--ssl-cert <cert>","Provide an SSL certificate. (Required with --https)").option("--ssl-key <key>","Provide an SSL key. (Required with --https)").option("--smoke-test","Exit after successful start").option("--ci","CI mode (skip interactive prompts, don't open browser)").option("--no-open","Do not open Storybook automatically in the browser").option("--loglevel <level>","Control level of logging during build").option("--quiet","Suppress verbose build output").option("--no-version-updates","Suppress update check",!0).option("--no-release-notes","Suppress automatic redirects to the release notes after upgrading",!0).option("--no-manager-cache","Do not cache the manager UI").option("--debug-webpack","Display final webpack configurations for debugging purposes").option("--webpack-stats-json [directory]","Write Webpack Stats JSON to disk").option("--preview-url <string>","Disables the default storybook preview and lets your use your own").option("--force-build-preview","Build the preview iframe even if you are using --preview-url").option("--docs","Build a documentation-only site using addon-docs").action(options=>{logger27.setLevel(program.loglevel),consoleLogger.log(chalk26.bold(`${pkg.name} v${pkg.version}`)+chalk26.reset(`
462
+ `)),getEnvConfig(program,{port:"SBCONFIG_PORT",host:"SBCONFIG_HOSTNAME",staticDir:"SBCONFIG_STATIC_DIR",configDir:"SBCONFIG_CONFIG_DIR",ci:"CI"}),typeof program.port=="string"&&program.port.length>0&&(program.port=parseInt(program.port,10)),dev({...options,packageJson:pkg})});program.command("build").option("-s, --static-dir <dir-names>","Directory where to load static files from",parseList).option("-o, --output-dir <dir-name>","Directory where to store built files").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").option("--quiet","Suppress verbose build output").option("--loglevel <level>","Control level of logging during build").option("--debug-webpack","Display final webpack configurations for debugging purposes").option("--webpack-stats-json [directory]","Write Webpack Stats JSON to disk").option("--preview-url <string>","Disables the default storybook preview and lets your use your own").option("--force-build-preview","Build the preview iframe even if you are using --preview-url").option("--docs","Build a documentation-only site using addon-docs").option("--no-manager-cache","Do not cache the manager UI").action(options=>{process.env.NODE_ENV=process.env.NODE_ENV||"production",logger27.setLevel(program.loglevel),consoleLogger.log(chalk26.bold(`${pkg.name} v${pkg.version}
314
463
  `)),getEnvConfig(program,{staticDir:"SBCONFIG_STATIC_DIR",outputDir:"SBCONFIG_OUTPUT_DIR",configDir:"SBCONFIG_CONFIG_DIR"}),build({...options,packageJson:pkg})});program.on("command:*",([invalidCmd])=>{consoleLogger.error(` Invalid command: %s.
315
464
  See --help for a list of available commands.`,invalidCmd);let suggestion=program.commands.map(cmd=>cmd._name).find(cmd=>leven(cmd,invalidCmd)<3);suggestion&&consoleLogger.info(`
316
465
  Did you mean ${suggestion}?`),process.exit(1)});program.usage("<command> [options]").version(pkg.version).parse(process.argv);