@storybook/cli 7.6.8 → 7.6.10

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,20 +1,20 @@
1
- import { __commonJS, __require, __toESM, versions_default, JsPackageManagerFactory, parseList, getEnvConfig, useNpmWarning, isCorePackage, getStorybookVersion, getStorybookVersionSpecifier, HandledError, commandLog, installableProjectTypes, paddedLog, codeLog, isNxProject, getPackageDetails, supportedTemplates, unsupportedTemplate, getCliDir, copyTemplate, getBabelDependencies, copyTemplateFiles, externalFrameworks } from './chunk-PDWNXPGP.mjs';
1
+ import { __commonJS, __require, __toESM, versions_default, JsPackageManagerFactory, parseList, getEnvConfig, useNpmWarning, isCorePackage, getStorybookVersion, getStorybookVersionSpecifier, HandledError, commandLog, installableProjectTypes, paddedLog, codeLog, isNxProject, supportedTemplates, unsupportedTemplate, getPackageDetails, getCliDir, copyTemplate, getBabelDependencies, copyTemplateFiles, externalFrameworks } from './chunk-ONIN4YDE.mjs';
2
2
  import program from 'commander';
3
3
  import path8, { join, isAbsolute, resolve, basename } from 'path';
4
4
  import chalk12 from 'chalk';
5
5
  import envinfo from 'envinfo';
6
6
  import leven from 'leven';
7
7
  import { sync } from 'read-pkg-up';
8
- import { logger, instance } from '@storybook/node-logger';
8
+ import { logger, instance, deprecate } from '@storybook/node-logger';
9
9
  import { addToGlobalContext, telemetry, getStorybookCoreVersion } from '@storybook/telemetry';
10
10
  import prompts5 from 'prompts';
11
11
  import { withTelemetry, buildDevStandalone, buildStaticStandalone } from '@storybook/core-server';
12
- import { NxProjectDetectedError, MissingAngularJsonError } from '@storybook/core-events/server-errors';
12
+ import { UpgradeStorybookToLowerVersionError, UpgradeStorybookToSameVersionError, NxProjectDetectedError, MissingAngularJsonError } from '@storybook/core-events/server-errors';
13
13
  import dedent18, { dedent } from 'ts-dedent';
14
14
  import fse, { pathExists, move, remove, writeFile, existsSync, readdir, readdirSync, createWriteStream, stat, readFile, readJson, writeJson } from 'fs-extra';
15
+ import semver, { prerelease, lt, eq, coerce } from 'semver';
15
16
  import fs from 'fs';
16
17
  import findUp from 'find-up';
17
- import semver from 'semver';
18
18
  import ora from 'ora';
19
19
  import detectIndent from 'detect-indent';
20
20
  import { readConfig, writeConfig } from '@storybook/csf-tools';
@@ -39,9 +39,9 @@ var require_ansi_regex=__commonJS({"../../node_modules/ansi-regex/index.js"(expo
39
39
  `&&(escapeCode&&code&&(returnValue+=wrapAnsi(escapeCode)),escapeUrl&&(returnValue+=wrapAnsiHyperlink(escapeUrl)));}return returnValue};module.exports=(string,columns,options)=>String(string).normalize().replace(/\r\n/g,`
40
40
  `).split(`
41
41
  `).map(line=>exec2(line,columns,options)).join(`
42
- `);}});var require_boxen=__commonJS({"../../node_modules/boxen/index.js"(exports,module){var stringWidth=require_string_width(),chalk32=__require("chalk"),widestLine=require_widest_line(),cliBoxes=require_cli_boxes(),camelCase=require_camelcase(),ansiAlign=require_ansi_align(),wrapAnsi=require_wrap_ansi(),NL=`
42
+ `);}});var require_boxen=__commonJS({"../../node_modules/boxen/index.js"(exports,module){var stringWidth=require_string_width(),chalk33=__require("chalk"),widestLine=require_widest_line(),cliBoxes=require_cli_boxes(),camelCase=require_camelcase(),ansiAlign=require_ansi_align(),wrapAnsi=require_wrap_ansi(),NL=`
43
43
  `,PAD=" ",terminalColumns=()=>{let{env,stdout,stderr}=process;return stdout&&stdout.columns?stdout.columns:stderr&&stderr.columns?stderr.columns:env.COLUMNS?Number.parseInt(env.COLUMNS,10):80},getObject=detail=>typeof detail=="number"?{top:detail,right:detail*3,bottom:detail,left:detail*3}:{top:0,right:0,bottom:0,left:0,...detail},getBorderChars=borderStyle=>{let sides=["topLeft","topRight","bottomRight","bottomLeft","vertical","horizontal"],chararacters;if(typeof borderStyle=="string"){if(chararacters=cliBoxes[borderStyle],!chararacters)throw new TypeError(`Invalid border style: ${borderStyle}`)}else {for(let side of sides)if(!borderStyle[side]||typeof borderStyle[side]!="string")throw new TypeError(`Invalid border style: ${side}`);chararacters=borderStyle;}return chararacters},makeTitle=(text,horizontal,alignement)=>{let title="",textWidth=stringWidth(text);switch(alignement){case"left":title=text+horizontal.slice(textWidth);break;case"right":title=horizontal.slice(textWidth)+text;break;default:horizontal=horizontal.slice(textWidth),horizontal.length%2===1?(horizontal=horizontal.slice(Math.floor(horizontal.length/2)),title=horizontal.slice(1)+text+horizontal):(horizontal=horizontal.slice(horizontal.length/2),title=horizontal+text+horizontal);break}return title},makeContentText=(text,padding,columns,align)=>{text=ansiAlign(text,{align});let lines=text.split(NL),textWidth=widestLine(text),max=columns-padding.left-padding.right;if(textWidth>max){let newLines=[];for(let line of lines){let createdLines=wrapAnsi(line,max,{hard:!0}),alignedLinesArray=ansiAlign(createdLines,{align}).split(`
44
- `),longestLength=Math.max(...alignedLinesArray.map(s=>stringWidth(s)));for(let alignedLine of alignedLinesArray){let paddedLine;switch(align){case"center":paddedLine=PAD.repeat((max-longestLength)/2)+alignedLine;break;case"right":paddedLine=PAD.repeat(max-longestLength)+alignedLine;break;default:paddedLine=alignedLine;break}newLines.push(paddedLine);}}lines=newLines;}align==="center"&&textWidth<max?lines=lines.map(line=>PAD.repeat((max-textWidth)/2)+line):align==="right"&&textWidth<max&&(lines=lines.map(line=>PAD.repeat(max-textWidth)+line));let paddingLeft=PAD.repeat(padding.left),paddingRight=PAD.repeat(padding.right);return lines=lines.map(line=>paddingLeft+line+paddingRight),lines=lines.map(line=>{if(columns-stringWidth(line)>0)switch(align){case"center":return line+PAD.repeat(columns-stringWidth(line));case"right":return line+PAD.repeat(columns-stringWidth(line));default:return line+PAD.repeat(columns-stringWidth(line))}return line}),padding.top>0&&(lines=new Array(padding.top).fill(PAD.repeat(columns)).concat(lines)),padding.bottom>0&&(lines=lines.concat(new Array(padding.bottom).fill(PAD.repeat(columns)))),lines.join(NL)},isHex=color=>color.match(/^#(?:[0-f]{3}){1,2}$/i),isColorValid=color=>typeof color=="string"&&(chalk32[color]||isHex(color)),getColorFn=color=>isHex(color)?chalk32.hex(color):chalk32[color],getBGColorFn=color=>isHex(color)?chalk32.bgHex(color):chalk32[camelCase(["bg",color])];module.exports=(text,options)=>{options={padding:0,borderStyle:"single",dimBorder:!1,textAlignment:"left",float:"left",titleAlignment:"left",...options},options.align&&(options.textAlignment=options.align);let BORDERS_WIDTH=2;if(options.borderColor&&!isColorValid(options.borderColor))throw new Error(`${options.borderColor} is not a valid borderColor`);if(options.backgroundColor&&!isColorValid(options.backgroundColor))throw new Error(`${options.backgroundColor} is not a valid backgroundColor`);let chars=getBorderChars(options.borderStyle),padding=getObject(options.padding),margin=getObject(options.margin),colorizeBorder=border=>{let newBorder=options.borderColor?getColorFn(options.borderColor)(border):border;return options.dimBorder?chalk32.dim(newBorder):newBorder},colorizeContent=content=>options.backgroundColor?getBGColorFn(options.backgroundColor)(content):content,columns=terminalColumns(),contentWidth=widestLine(wrapAnsi(text,columns-BORDERS_WIDTH,{hard:!0,trim:!1}))+padding.left+padding.right,title=options.title&&options.title.slice(0,columns-4-margin.left-margin.right);if(title&&(title=` ${title} `,stringWidth(title)>contentWidth&&(contentWidth=stringWidth(title))),margin.left&&margin.right&&contentWidth+BORDERS_WIDTH+margin.left+margin.right>columns){let multiplier=(columns-contentWidth-BORDERS_WIDTH)/(margin.left+margin.right);margin.left=Math.max(0,Math.floor(margin.left*multiplier)),margin.right=Math.max(0,Math.floor(margin.right*multiplier));}contentWidth=Math.min(contentWidth,columns-BORDERS_WIDTH-margin.left-margin.right),text=makeContentText(text,padding,contentWidth,options.textAlignment);let marginLeft=PAD.repeat(margin.left);if(options.float==="center"){let marginWidth=Math.max((columns-contentWidth-BORDERS_WIDTH)/2,0);marginLeft=PAD.repeat(marginWidth);}else if(options.float==="right"){let marginWidth=Math.max(columns-contentWidth-margin.right-BORDERS_WIDTH,0);marginLeft=PAD.repeat(marginWidth);}let horizontal=chars.horizontal.repeat(contentWidth),top=colorizeBorder(NL.repeat(margin.top)+marginLeft+chars.topLeft+(title?makeTitle(title,horizontal,options.titleAlignment):horizontal)+chars.topRight),bottom=colorizeBorder(marginLeft+chars.bottomLeft+horizontal+chars.bottomRight+NL.repeat(margin.bottom)),side=colorizeBorder(chars.vertical),LINE_SEPARATOR=contentWidth+BORDERS_WIDTH+margin.left>=columns?"":NL,middle=text.split(NL).map(line=>marginLeft+side+colorizeContent(line)+side).join(LINE_SEPARATOR);return top+LINE_SEPARATOR+middle+LINE_SEPARATOR+bottom};module.exports._borderStyles=cliBoxes;}});var import_boxen=__toESM(require_boxen());var viteConfigFiles=["vite.config.ts","vite.config.js","vite.config.mjs"],webpackConfigFiles=["webpack.config.js"],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=>fs.existsSync(name))),matcherFunction(matcher)?preset:null};function detectFrameworkPreset(packageJson={}){let result=[...supportedTemplates,unsupportedTemplate].find(framework=>getFrameworkPreset(packageJson,framework)!==null);return result?result.preset:"UNDETECTED"}async function detectBuilder(packageManager,projectType){let viteConfig=findUp.sync(viteConfigFiles),webpackConfig=findUp.sync(webpackConfigFiles),dependencies=await packageManager.getAllDependencies();if(viteConfig||dependencies.vite&&dependencies.webpack===void 0)return commandLog("Detected Vite project. Setting builder to Vite")(),"vite";if(webpackConfig||dependencies.webpack&&dependencies.vite!==void 0)return commandLog("Detected webpack project. Setting builder to webpack")(),"webpack5";switch(projectType){case"SFC_VUE":return "vite";case"REACT_SCRIPTS":case"ANGULAR":case"REACT_NATIVE":case"NEXTJS":return "webpack5";default:let{builder}=await prompts5({type:"select",name:"builder",message:`
44
+ `),longestLength=Math.max(...alignedLinesArray.map(s=>stringWidth(s)));for(let alignedLine of alignedLinesArray){let paddedLine;switch(align){case"center":paddedLine=PAD.repeat((max-longestLength)/2)+alignedLine;break;case"right":paddedLine=PAD.repeat(max-longestLength)+alignedLine;break;default:paddedLine=alignedLine;break}newLines.push(paddedLine);}}lines=newLines;}align==="center"&&textWidth<max?lines=lines.map(line=>PAD.repeat((max-textWidth)/2)+line):align==="right"&&textWidth<max&&(lines=lines.map(line=>PAD.repeat(max-textWidth)+line));let paddingLeft=PAD.repeat(padding.left),paddingRight=PAD.repeat(padding.right);return lines=lines.map(line=>paddingLeft+line+paddingRight),lines=lines.map(line=>{if(columns-stringWidth(line)>0)switch(align){case"center":return line+PAD.repeat(columns-stringWidth(line));case"right":return line+PAD.repeat(columns-stringWidth(line));default:return line+PAD.repeat(columns-stringWidth(line))}return line}),padding.top>0&&(lines=new Array(padding.top).fill(PAD.repeat(columns)).concat(lines)),padding.bottom>0&&(lines=lines.concat(new Array(padding.bottom).fill(PAD.repeat(columns)))),lines.join(NL)},isHex=color=>color.match(/^#(?:[0-f]{3}){1,2}$/i),isColorValid=color=>typeof color=="string"&&(chalk33[color]||isHex(color)),getColorFn=color=>isHex(color)?chalk33.hex(color):chalk33[color],getBGColorFn=color=>isHex(color)?chalk33.bgHex(color):chalk33[camelCase(["bg",color])];module.exports=(text,options)=>{options={padding:0,borderStyle:"single",dimBorder:!1,textAlignment:"left",float:"left",titleAlignment:"left",...options},options.align&&(options.textAlignment=options.align);let BORDERS_WIDTH=2;if(options.borderColor&&!isColorValid(options.borderColor))throw new Error(`${options.borderColor} is not a valid borderColor`);if(options.backgroundColor&&!isColorValid(options.backgroundColor))throw new Error(`${options.backgroundColor} is not a valid backgroundColor`);let chars=getBorderChars(options.borderStyle),padding=getObject(options.padding),margin=getObject(options.margin),colorizeBorder=border=>{let newBorder=options.borderColor?getColorFn(options.borderColor)(border):border;return options.dimBorder?chalk33.dim(newBorder):newBorder},colorizeContent=content=>options.backgroundColor?getBGColorFn(options.backgroundColor)(content):content,columns=terminalColumns(),contentWidth=widestLine(wrapAnsi(text,columns-BORDERS_WIDTH,{hard:!0,trim:!1}))+padding.left+padding.right,title=options.title&&options.title.slice(0,columns-4-margin.left-margin.right);if(title&&(title=` ${title} `,stringWidth(title)>contentWidth&&(contentWidth=stringWidth(title))),margin.left&&margin.right&&contentWidth+BORDERS_WIDTH+margin.left+margin.right>columns){let multiplier=(columns-contentWidth-BORDERS_WIDTH)/(margin.left+margin.right);margin.left=Math.max(0,Math.floor(margin.left*multiplier)),margin.right=Math.max(0,Math.floor(margin.right*multiplier));}contentWidth=Math.min(contentWidth,columns-BORDERS_WIDTH-margin.left-margin.right),text=makeContentText(text,padding,contentWidth,options.textAlignment);let marginLeft=PAD.repeat(margin.left);if(options.float==="center"){let marginWidth=Math.max((columns-contentWidth-BORDERS_WIDTH)/2,0);marginLeft=PAD.repeat(marginWidth);}else if(options.float==="right"){let marginWidth=Math.max(columns-contentWidth-margin.right-BORDERS_WIDTH,0);marginLeft=PAD.repeat(marginWidth);}let horizontal=chars.horizontal.repeat(contentWidth),top=colorizeBorder(NL.repeat(margin.top)+marginLeft+chars.topLeft+(title?makeTitle(title,horizontal,options.titleAlignment):horizontal)+chars.topRight),bottom=colorizeBorder(marginLeft+chars.bottomLeft+horizontal+chars.bottomRight+NL.repeat(margin.bottom)),side=colorizeBorder(chars.vertical),LINE_SEPARATOR=contentWidth+BORDERS_WIDTH+margin.left>=columns?"":NL,middle=text.split(NL).map(line=>marginLeft+side+colorizeContent(line)+side).join(LINE_SEPARATOR);return top+LINE_SEPARATOR+middle+LINE_SEPARATOR+bottom};module.exports._borderStyles=cliBoxes;}});var import_boxen=__toESM(require_boxen());var viteConfigFiles=["vite.config.ts","vite.config.js","vite.config.mjs"],webpackConfigFiles=["webpack.config.js"],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=>fs.existsSync(name))),matcherFunction(matcher)?preset:null};function detectFrameworkPreset(packageJson={}){let result=[...supportedTemplates,unsupportedTemplate].find(framework=>getFrameworkPreset(packageJson,framework)!==null);return result?result.preset:"UNDETECTED"}async function detectBuilder(packageManager,projectType){let viteConfig=findUp.sync(viteConfigFiles),webpackConfig=findUp.sync(webpackConfigFiles),dependencies=await packageManager.getAllDependencies();if(viteConfig||dependencies.vite&&dependencies.webpack===void 0)return commandLog("Detected Vite project. Setting builder to Vite")(),"vite";if(webpackConfig||dependencies.webpack&&dependencies.vite!==void 0)return commandLog("Detected webpack project. Setting builder to webpack")(),"webpack5";switch(projectType){case"SFC_VUE":return "vite";case"REACT_SCRIPTS":case"ANGULAR":case"REACT_NATIVE":case"NEXTJS":return "webpack5";default:let{builder}=await prompts5({type:"select",name:"builder",message:`
45
45
  We were not able to detect the right builder for your project. Please select one:`,choices:[{title:"Vite",value:"vite"},{title:"Webpack 5",value:"webpack5"}]},{onCancel:()=>{throw new HandledError("Canceled by the user")}});return builder}}function isStorybookInstantiated(configDir=resolve(process.cwd(),".storybook")){return fs.existsSync(configDir)}async function detectPnp(){return !!findUp.sync([".pnp.js",".pnp.cjs"])}async function detectLanguage(packageManager){let language="javascript";if(fs.existsSync("jsconfig.json"))return language;let isTypescriptDirectDependency=await packageManager.getAllDependencies().then(deps=>!!deps.typescript),typescriptVersion=await packageManager.getPackageVersion("typescript"),prettierVersion=await packageManager.getPackageVersion("prettier"),babelPluginTransformTypescriptVersion=await packageManager.getPackageVersion("@babel/plugin-transform-typescript"),typescriptEslintParserVersion=await packageManager.getPackageVersion("@typescript-eslint/parser"),eslintPluginStorybookVersion=await packageManager.getPackageVersion("eslint-plugin-storybook");return isTypescriptDirectDependency&&typescriptVersion&&(semver.gte(typescriptVersion,"4.9.0")&&(!prettierVersion||semver.gte(prettierVersion,"2.8.0"))&&(!babelPluginTransformTypescriptVersion||semver.gte(babelPluginTransformTypescriptVersion,"7.20.0"))&&(!typescriptEslintParserVersion||semver.gte(typescriptEslintParserVersion,"5.44.0"))&&(!eslintPluginStorybookVersion||semver.gte(eslintPluginStorybookVersion,"0.6.8"))?language="typescript-4-9":semver.gte(typescriptVersion,"3.8.0")?language="typescript-3-8":semver.lt(typescriptVersion,"3.8.0")&&logger.warn("Detected TypeScript < 3.8, populating with JavaScript examples")),language}async function detect(packageManager,options={}){let packageJson=await packageManager.retrievePackageJson();return packageJson?await isNxProject()?"NX":options.html?"HTML":detectFrameworkPreset(packageJson):"UNDETECTED"}var sanitizeFramework=framework=>{let matches=framework.match(/(@storybook\/\w+(?:-\w+)*)|(storybook-(\w+(?:-\w+)*))/g);if(matches)return matches[0]};async function configureMain({addons,extensions=["js","jsx","mjs","ts","tsx"],storybookConfigFolder,language,prefixes=[],...custom}){let srcPath=path8.resolve(storybookConfigFolder,"../src"),prefix=await fse.pathExists(srcPath)?"../src":"../stories",config={stories:[`${prefix}/**/*.mdx`,`${prefix}/**/*.stories.@(${extensions.join("|")})`],addons,...custom},isTypescript=language==="typescript-4-9"||language==="typescript-3-8",mainConfigTemplate=dedent`<<import>><<prefix>>const config<<type>> = <<mainContents>>;
46
46
  export default config;`,frameworkPackage=sanitizeFramework(custom.framework?.name);frameworkPackage||(mainConfigTemplate=mainConfigTemplate.replace("<<import>>","").replace("<<type>>",""),logger.warn("Could not find framework package name"));let mainContents=JSON.stringify(config,null,2).replace(/['"]%%/g,"").replace(/%%['"]/g,""),imports=[],finalPrefixes=[...prefixes];custom.framework?.name.includes("path.dirname(")&&imports.push("import path from 'path';"),isTypescript?imports.push(`import type { StorybookConfig } from '${frameworkPackage}';`):finalPrefixes.push(`/** @type { import('${frameworkPackage}').StorybookConfig } */`);let mainJsContents=mainConfigTemplate.replace("<<import>>",`${imports.join(`
47
47
 
@@ -80,7 +80,7 @@ We were not able to detect the right builder for your project. Please select one
80
80
  Sorry, for now, you can not do this, please use a framework such as @storybook/react-webpack5
81
81
 
82
82
  https://github.com/storybookjs/storybook/issues/18360
83
- `);let extraPackagesToInstall=typeof extraPackages=="function"?await extraPackages({builder:builder||builderInclude,framework:framework||frameworkInclude}):extraPackages,allPackages=["storybook",getExternalFramework(rendererId)?void 0:`@storybook/${rendererId}`,...frameworkPackages6,...addonPackages,...extraPackagesToInstall].filter(Boolean),packages=[...new Set(allPackages)].filter(packageToInstall=>!installedDependencies.has(getPackageDetails(packageToInstall)[0]));logger4.log();let versionedPackagesSpinner=ora({indent:2,text:`Getting the correct version of ${packages.length} packages`}).start(),versionedPackages=await packageManager.getVersionedPackages(packages);versionedPackagesSpinner.succeed();let depsToInstall=[...versionedPackages];if(builder!=="vite"&&!skipBabel){let frameworksThatNeedBabelConfig2=["@storybook/react-webpack5","@storybook/vue-webpack5","@storybook/vue3-webpack5","@storybook/html-webpack5","@storybook/web-components-webpack5"],needsBabelConfig=frameworkPackages6.find(pkg2=>frameworksThatNeedBabelConfig2.includes(pkg2));if(!files.some(fname=>fname.startsWith(".babel")||fname.startsWith("babel"))&&needsBabelConfig){let isTypescript=language!=="javascript",isReact=rendererId==="react";depsToInstall.push(...getBabelPresets({typescript:isTypescript,jsx:isReact})),await writeBabelConfigFile({typescript:isTypescript,jsx:isReact});}}try{if(process.env.CI!=="true"){let{hasEslint,isStorybookPluginInstalled,eslintConfigFile}=await extractEslintInfo(packageManager);hasEslint&&!isStorybookPluginInstalled&&(skipPrompts||await suggestESLintPlugin())&&(depsToInstall.push("eslint-plugin-storybook"),await configureEslintPlugin(eslintConfigFile,packageManager));}}catch{}if(depsToInstall.length>0){let addDependenciesSpinner=ora({indent:2,text:"Installing Storybook dependencies"}).start();await packageManager.addDependencies({...npmOptions,packageJson},depsToInstall),addDependenciesSpinner.succeed();}if(await fse.ensureDir(`./${storybookConfigFolder}`),addMainFile){let prefixes=shouldApplyRequireWrapperOnPackageNames?['import { join, dirname } from "path"',language==="javascript"?dedent`/**
83
+ `);let extraPackagesToInstall=typeof extraPackages=="function"?await extraPackages({builder:builder||builderInclude,framework:framework||frameworkInclude}):extraPackages,allPackages=["storybook",getExternalFramework(rendererId)?void 0:`@storybook/${rendererId}`,...frameworkPackages6,...addonPackages,...extraPackagesToInstall].filter(Boolean),packages=[...new Set(allPackages)].filter(packageToInstall=>!installedDependencies.has(getPackageDetails(packageToInstall)[0]));logger4.log();let versionedPackagesSpinner=ora({indent:2,text:`Getting the correct version of ${packages.length} packages`}).start(),versionedPackages=await packageManager.getVersionedPackages(packages);if(versionedPackagesSpinner.succeed(),builder!=="vite"&&!skipBabel){let frameworksThatNeedBabelConfig2=["@storybook/react-webpack5","@storybook/vue-webpack5","@storybook/vue3-webpack5","@storybook/html-webpack5","@storybook/web-components-webpack5"],needsBabelConfig=frameworkPackages6.find(pkg2=>frameworksThatNeedBabelConfig2.includes(pkg2));if(!files.some(fname=>fname.startsWith(".babel")||fname.startsWith("babel"))&&needsBabelConfig){let isTypescript=language!=="javascript",isReact=rendererId==="react";versionedPackages.push(...getBabelPresets({typescript:isTypescript,jsx:isReact})),await writeBabelConfigFile({typescript:isTypescript,jsx:isReact});}}try{if(process.env.CI!=="true"){let{hasEslint,isStorybookPluginInstalled,eslintConfigFile}=await extractEslintInfo(packageManager);hasEslint&&!isStorybookPluginInstalled&&(skipPrompts||await suggestESLintPlugin())&&(versionedPackages.push("eslint-plugin-storybook"),await configureEslintPlugin(eslintConfigFile,packageManager));}}catch{}if(versionedPackages.length>0){let addDependenciesSpinner=ora({indent:2,text:"Installing Storybook dependencies"}).start();await packageManager.addDependencies({...npmOptions,packageJson},versionedPackages),addDependenciesSpinner.succeed();}if(await fse.ensureDir(`./${storybookConfigFolder}`),addMainFile){let prefixes=shouldApplyRequireWrapperOnPackageNames?['import { join, dirname } from "path"',language==="javascript"?dedent`/**
84
84
  * This function is used to resolve the absolute path of a package.
85
85
  * It is needed in projects that use Yarn PnP or are set up within a monorepo.
86
86
  */
@@ -96,7 +96,7 @@ We were not able to detect the right builder for your project. Please select one
96
96
  import { setCompodocJson } from "@storybook/addon-docs/angular";
97
97
  import docJson from "../documentation.json";
98
98
  setCompodocJson(docJson);
99
- `.trimStart(),promptForCompoDocs=async()=>{let{useCompoDoc}=await prompts5({type:"confirm",name:"useCompoDoc",message:"Do you want to use Compodoc for documentation?"});return useCompoDoc},AngularJSON=class{constructor(){if(!fs.existsSync(ANGULAR_JSON_PATH))throw new MissingAngularJsonError({path:join(process.cwd(),ANGULAR_JSON_PATH)});let jsonContent=fs.readFileSync(ANGULAR_JSON_PATH,"utf8");this.json=JSON.parse(jsonContent);}get projects(){return this.json.projects}get projectsWithoutStorybook(){return Object.keys(this.projects).filter(projectName=>{let{architect}=this.projects[projectName];return !architect.storybook})}get hasStorybookBuilder(){return Object.keys(this.projects).some(projectName=>{let{architect}=this.projects[projectName];return Object.keys(architect).some(key=>architect[key].builder==="@storybook/angular:start-storybook")})}get rootProject(){let rootProjectName=Object.keys(this.projects).find(projectName=>{let{root}=this.projects[projectName];return root===""||root==="."});return rootProjectName?this.projects[rootProjectName]:null}getProjectSettingsByName(projectName){return this.projects[projectName]}async getProjectName(){if(this.projectsWithoutStorybook.length>1){let{projectName}=await prompts5({type:"select",name:"projectName",message:"For which project do you want to generate Storybook configuration?",choices:this.projectsWithoutStorybook.map(name=>({title:name,value:name}))});return projectName}return this.projectsWithoutStorybook[0]}addStorybookEntries({angularProjectName,storybookFolder,useCompodoc,root}){let{architect}=this.projects[angularProjectName],baseOptions={configDir:storybookFolder,browserTarget:`${angularProjectName}:build`,compodoc:useCompodoc,...useCompodoc&&{compodocArgs:["-e","json","-d",root||"."]}};architect.storybook||(architect.storybook={builder:"@storybook/angular:start-storybook",options:{...baseOptions,port:6006}}),architect["build-storybook"]||(architect["build-storybook"]={builder:"@storybook/angular:build-storybook",options:{...baseOptions,outputDir:Object.keys(this.projects).length===1?"storybook-static":`dist/storybook/${angularProjectName}`}});}write(){fs.writeFileSync(ANGULAR_JSON_PATH,JSON.stringify(this.json,null,2));}};var generator=async(packageManager,npmOptions,options,commandOptions)=>{let angularJSON=new AngularJSON;if(!angularJSON.projects||angularJSON.projects&&Object.keys(angularJSON.projects).length===0)throw new Error("Storybook was not able to find any projects in your angular.json file. Are you sure this is an Angular CLI project?");if(angularJSON.projectsWithoutStorybook.length===0)throw new Error("Every project in your workspace is already set up with Storybook. There is nothing to do!");let angularProjectName=await angularJSON.getProjectName();paddedLog(`Adding Storybook support to your "${angularProjectName}" project`);let angularProject=angularJSON.getProjectSettingsByName(angularProjectName);if(!angularProject)throw new Error(`Somehow we were not able to retrieve the "${angularProjectName}" project in your angular.json file. This is likely a bug in Storybook, please file an issue.`);let{root,projectType}=angularProject,{projects}=angularJSON,useCompodoc=commandOptions.yes?!0:await promptForCompoDocs(),storybookFolder=root?`${root}/.storybook`:".storybook";angularJSON.addStorybookEntries({angularProjectName,storybookFolder,useCompodoc,root}),angularJSON.write(),await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5",...useCompodoc&&{frameworkPreviewParts:{prefix:compoDocPreviewPrefix}}},"angular",{...useCompodoc&&{extraPackages:["@compodoc/compodoc","@storybook/addon-docs"]},addScripts:!1,componentsDestinationPath:root?`${root}/src/stories`:void 0,storybookConfigFolder:storybookFolder},"angular"),Object.keys(projects).length===1&&packageManager.addScripts({storybook:`ng run ${angularProjectName}:storybook`,"build-storybook":`ng run ${angularProjectName}:build-storybook`});let projectTypeValue=projectType||"application";projectTypeValue!=="application"&&projectTypeValue!=="library"&&(projectTypeValue="application");let templateDir=join(getCliDir(),"templates","angular",projectTypeValue);return templateDir&&copyTemplate(templateDir,root||void 0),{projectName:angularProjectName,configDir:storybookFolder}},ANGULAR_default=generator;var generator2=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"ember",{extraPackages:["babel-plugin-ember-modules-api-polyfill","babel-plugin-htmlbars-inline-precompile"],staticDir:"dist"});},EMBER_default=generator2;var generator3=async(packageManager,npmOptions,options)=>{let extraPackages=await detectLanguage(packageManager)==="javascript"?["prop-types"]:[];await baseGenerator(packageManager,npmOptions,options,"react",{extraPackages,useSWC:({builder})=>builder==="webpack5",extraAddons:["@storybook/addon-onboarding"]});},REACT_default=generator3;var generator4=async(packageManager,npmOptions)=>{let packageJson=await packageManager.retrievePackageJson(),missingReactDom=!packageJson.dependencies["react-dom"]&&!packageJson.devDependencies["react-dom"],reactVersion=packageJson.dependencies.react,packagesToResolve=["react-native-safe-area-context","@react-native-async-storage/async-storage","@react-native-community/datetimepicker","@react-native-community/slider","@storybook/addon-ondevice-controls","@storybook/addon-ondevice-actions","@storybook/react-native"],packagesWithFixedVersion=["@storybook/addon-actions@^6.5.16","@storybook/addon-controls@^6.5.16"],resolvedPackages=await packageManager.getVersionedPackages(packagesToResolve),packages=[...await getBabelDependencies(packageManager,packageJson),...packagesWithFixedVersion,...resolvedPackages,missingReactDom&&reactVersion&&`react-dom@${reactVersion}`].filter(Boolean);await packageManager.addDependencies({...npmOptions,packageJson},packages),packageManager.addScripts({"storybook-generate":"sb-rn-get-stories","storybook-watch":"sb-rn-watcher"});let storybookConfigFolder=".storybook";await copyTemplateFiles({packageManager,renderer:"react-native",language:"javascript",destination:storybookConfigFolder,includeCommonAssets:!1});},REACT_NATIVE_default=generator4;var generator5=async(packageManager,npmOptions,options)=>{let monorepoRootPath=path8.join(__dirname,"..","..","..","..","..",".."),extraMain=options.linkable?{webpackFinal:`%%(config) => {
99
+ `.trimStart(),promptForCompoDocs=async()=>{let{useCompoDoc}=await prompts5({type:"confirm",name:"useCompoDoc",message:"Do you want to use Compodoc for documentation?"});return useCompoDoc},AngularJSON=class{constructor(){if(!fs.existsSync(ANGULAR_JSON_PATH))throw new MissingAngularJsonError({path:join(process.cwd(),ANGULAR_JSON_PATH)});let jsonContent=fs.readFileSync(ANGULAR_JSON_PATH,"utf8");this.json=JSON.parse(jsonContent);}get projects(){return this.json.projects}get projectsWithoutStorybook(){return Object.keys(this.projects).filter(projectName=>{let{architect}=this.projects[projectName];return !architect.storybook})}get hasStorybookBuilder(){return Object.keys(this.projects).some(projectName=>{let{architect}=this.projects[projectName];return Object.keys(architect).some(key=>architect[key].builder==="@storybook/angular:start-storybook")})}get rootProject(){let rootProjectName=Object.keys(this.projects).find(projectName=>{let{root}=this.projects[projectName];return root===""||root==="."});return rootProjectName?this.projects[rootProjectName]:null}getProjectSettingsByName(projectName){return this.projects[projectName]}async getProjectName(){if(this.projectsWithoutStorybook.length>1){let{projectName}=await prompts5({type:"select",name:"projectName",message:"For which project do you want to generate Storybook configuration?",choices:this.projectsWithoutStorybook.map(name=>({title:name,value:name}))});return projectName}return this.projectsWithoutStorybook[0]}addStorybookEntries({angularProjectName,storybookFolder,useCompodoc,root}){let{architect}=this.projects[angularProjectName],baseOptions={configDir:storybookFolder,browserTarget:`${angularProjectName}:build`,compodoc:useCompodoc,...useCompodoc&&{compodocArgs:["-e","json","-d",root||"."]}};architect.storybook||(architect.storybook={builder:"@storybook/angular:start-storybook",options:{...baseOptions,port:6006}}),architect["build-storybook"]||(architect["build-storybook"]={builder:"@storybook/angular:build-storybook",options:{...baseOptions,outputDir:Object.keys(this.projects).length===1?"storybook-static":`dist/storybook/${angularProjectName}`}});}write(){fs.writeFileSync(ANGULAR_JSON_PATH,JSON.stringify(this.json,null,2));}};var generator=async(packageManager,npmOptions,options,commandOptions)=>{let angularJSON=new AngularJSON;if(!angularJSON.projects||angularJSON.projects&&Object.keys(angularJSON.projects).length===0)throw new Error("Storybook was not able to find any projects in your angular.json file. Are you sure this is an Angular CLI project?");if(angularJSON.projectsWithoutStorybook.length===0)throw new Error("Every project in your workspace is already set up with Storybook. There is nothing to do!");let angularProjectName=await angularJSON.getProjectName();paddedLog(`Adding Storybook support to your "${angularProjectName}" project`);let angularProject=angularJSON.getProjectSettingsByName(angularProjectName);if(!angularProject)throw new Error(`Somehow we were not able to retrieve the "${angularProjectName}" project in your angular.json file. This is likely a bug in Storybook, please file an issue.`);let{root,projectType}=angularProject,{projects}=angularJSON,useCompodoc=commandOptions.yes?!0:await promptForCompoDocs(),storybookFolder=root?`${root}/.storybook`:".storybook";angularJSON.addStorybookEntries({angularProjectName,storybookFolder,useCompodoc,root}),angularJSON.write(),await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5",...useCompodoc&&{frameworkPreviewParts:{prefix:compoDocPreviewPrefix}}},"angular",{...useCompodoc&&{extraPackages:["@compodoc/compodoc","@storybook/addon-docs"]},addScripts:!1,componentsDestinationPath:root?`${root}/src/stories`:void 0,storybookConfigFolder:storybookFolder},"angular"),Object.keys(projects).length===1&&packageManager.addScripts({storybook:`ng run ${angularProjectName}:storybook`,"build-storybook":`ng run ${angularProjectName}:build-storybook`});let projectTypeValue=projectType||"application";projectTypeValue!=="application"&&projectTypeValue!=="library"&&(projectTypeValue="application");let templateDir=join(getCliDir(),"templates","angular",projectTypeValue);return templateDir&&copyTemplate(templateDir,root||void 0),{projectName:angularProjectName,configDir:storybookFolder}},ANGULAR_default=generator;var generator2=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"ember",{extraPackages:["babel-plugin-ember-modules-api-polyfill","babel-plugin-htmlbars-inline-precompile"],staticDir:"dist"});},EMBER_default=generator2;var generator3=async(packageManager,npmOptions,options)=>{let extraPackages=await detectLanguage(packageManager)==="javascript"?["prop-types"]:[];await baseGenerator(packageManager,npmOptions,options,"react",{extraPackages,useSWC:({builder})=>builder==="webpack5",extraAddons:["@storybook/addon-onboarding@^1.0.0"]});},REACT_default=generator3;var generator4=async(packageManager,npmOptions)=>{let packageJson=await packageManager.retrievePackageJson(),missingReactDom=!packageJson.dependencies["react-dom"]&&!packageJson.devDependencies["react-dom"],reactVersion=packageJson.dependencies.react,packagesToResolve=["react-native-safe-area-context","@react-native-async-storage/async-storage","@react-native-community/datetimepicker","@react-native-community/slider","@storybook/addon-ondevice-controls","@storybook/addon-ondevice-actions","@storybook/react-native"],packagesWithFixedVersion=["@storybook/addon-actions@^6.5.16","@storybook/addon-controls@^6.5.16"],versionedPackages=await packageManager.getVersionedPackages(packagesToResolve),packages=[...await getBabelDependencies(packageManager,packageJson),...packagesWithFixedVersion,...versionedPackages,missingReactDom&&reactVersion&&`react-dom@${reactVersion}`].filter(Boolean);await packageManager.addDependencies({...npmOptions,packageJson},packages),packageManager.addScripts({"storybook-generate":"sb-rn-get-stories","storybook-watch":"sb-rn-watcher"});let storybookConfigFolder=".storybook";await copyTemplateFiles({packageManager,renderer:"react-native",language:"javascript",destination:storybookConfigFolder,includeCommonAssets:!1});},REACT_NATIVE_default=generator4;var generator5=async(packageManager,npmOptions,options)=>{let monorepoRootPath=path8.join(__dirname,"..","..","..","..","..",".."),extraMain=options.linkable?{webpackFinal:`%%(config) => {
100
100
  // add monorepo root as a valid directory to import modules from
101
101
  config.resolve.plugins.forEach((p) => {
102
102
  if (Array.isArray(p.appSrcs)) {
@@ -112,7 +112,7 @@ We were not able to detect the right builder for your project. Please select one
112
112
  Storybook 7.0+ doesn't support react-scripts@<5.0.0.
113
113
 
114
114
  https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#create-react-app-dropped-cra4-support
115
- `);let extraPackages=[];extraPackages.push("webpack"),extraPackages.push("prop-types");let extraAddons=[`@storybook/preset-create-react-app@${versions_default["@storybook/preset-create-react-app"]}`,"@storybook/addon-onboarding"];await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{useSWC:()=>!0,extraAddons,extraPackages,staticDir:fs.existsSync(path8.resolve("./public"))?"public":void 0,skipBabel:!0,extraMain});},REACT_SCRIPTS_default=generator5;var generator6=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{extraAddons:["@storybook/addon-onboarding"]},"nextjs");},NEXTJS_default=generator6;var generator7=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue",{useSWC:({builder})=>builder==="webpack5"});},SFC_VUE_default=generator7;var generator8=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue",{extraPackages:async({builder})=>builder==="webpack5"?["vue-loader@^15.7.0"]:[],useSWC:({builder})=>builder==="webpack5"});},VUE_default=generator8;var generator9=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue3",{extraPackages:async({builder})=>builder==="webpack5"?["vue-loader@^17.0.0","@vue/compiler-sfc@^3.2.0"]:[],useSWC:({builder})=>builder==="webpack5"});},VUE3_default=generator9;var generator10=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react",{extraAddons:["@storybook/addon-onboarding"],useSWC:({builder})=>builder==="webpack5"});},WEBPACK_REACT_default=generator10;var generator11=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"html",{useSWC:({builder})=>builder==="webpack5"});},HTML_default=generator11;var generator12=async(packageManager,npmOptions,options)=>baseGenerator(packageManager,npmOptions,options,"web-components",{extraPackages:["lit"],useSWC:({builder})=>builder==="webpack5"}),WEB_COMPONENTS_default=generator12;var generator13=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"preact",{useSWC:({builder})=>builder==="webpack5"});},PREACT_default=generator13;var generator14=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"svelte",{extensions:["js","jsx","ts","tsx","svelte"]});},SVELTE_default=generator14;var generator15=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"qwik",{},"qwik");},QWIK_default=generator15;var generator16=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"svelte",void 0,"sveltekit");},SVELTEKIT_default=generator16;var generator17=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"solid",{},"solid");},SOLID_default=generator17;var generator18=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"server",{useSWC:()=>!0,extensions:["json","yaml","yml"]});},SERVER_default=generator18;var logger5=console,installStorybook=async(projectType,packageManager,options)=>{let npmOptions={installAsDevDependencies:!0,skipInstall:options.skipInstall},language=await detectLanguage(packageManager),pnp=await detectPnp(),generatorOptions={language,builder:options.builder,linkable:!!options.linkable,pnp:pnp||options.usePnp,yes:options.yes,projectType},runGenerator=async()=>{switch(projectType){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'));case"REACT_NATIVE":return REACT_NATIVE_default(packageManager,npmOptions).then(commandLog('Adding Storybook support to your "React Native" app'));case"QWIK":return QWIK_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Qwik" app'));case"WEBPACK_REACT":return WEBPACK_REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Webpack React" app'));case"REACT_PROJECT":return REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "React" library'));case"NEXTJS":return NEXTJS_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Next" app'));case"SFC_VUE":return SFC_VUE_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Single File Components Vue" app'));case"VUE":return VUE_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Vue" app'));case"VUE3":return VUE3_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Vue 3" app'));case"ANGULAR":return commandLog('Adding Storybook support to your "Angular" app'),ANGULAR_default(packageManager,npmOptions,generatorOptions,options);case"EMBER":return EMBER_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Ember" app'));case"HTML":return HTML_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "HTML" app'));case"WEB_COMPONENTS":return WEB_COMPONENTS_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "web components" app'));case"PREACT":return PREACT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Preact" app'));case"SVELTE":return SVELTE_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Svelte" app'));case"SVELTEKIT":return SVELTEKIT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "SvelteKit" app'));case"SERVER":return SERVER_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Server" app'));case"NX":throw new NxProjectDetectedError;case"SOLID":return SOLID_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "SolidJS" app'));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"),logger5.log(),Promise.resolve();default:return paddedLog(`We couldn't detect your project type. (code: ${projectType})`),paddedLog("You can specify a project type explicitly via `storybook init --type <type>`, see our docs on how to configure Storybook for your framework: https://storybook.js.org/docs/react/get-started/install"),logger5.log(),projectTypeInquirer(options,packageManager)}};try{return await runGenerator()}catch(err){throw err?.message!=="Canceled by the user"&&err?.stack&&logger5.error(`
115
+ `);let extraPackages=[];extraPackages.push("webpack"),extraPackages.push("prop-types");let extraAddons=["@storybook/preset-create-react-app","@storybook/addon-onboarding@^1.0.0"];await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{useSWC:()=>!0,extraAddons,extraPackages,staticDir:fs.existsSync(path8.resolve("./public"))?"public":void 0,skipBabel:!0,extraMain});},REACT_SCRIPTS_default=generator5;var generator6=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{extraAddons:["@storybook/addon-onboarding@^1.0.0"]},"nextjs");},NEXTJS_default=generator6;var generator7=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue",{useSWC:({builder})=>builder==="webpack5"});},SFC_VUE_default=generator7;var generator8=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue",{extraPackages:async({builder})=>builder==="webpack5"?["vue-loader@^15.7.0"]:[],useSWC:({builder})=>builder==="webpack5"});},VUE_default=generator8;var generator9=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"vue3",{extraPackages:async({builder})=>builder==="webpack5"?["vue-loader@^17.0.0","@vue/compiler-sfc@^3.2.0"]:[],useSWC:({builder})=>builder==="webpack5"});},VUE3_default=generator9;var generator10=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react",{extraAddons:["@storybook/addon-onboarding@^1.0.0"],useSWC:({builder})=>builder==="webpack5"});},WEBPACK_REACT_default=generator10;var generator11=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"html",{useSWC:({builder})=>builder==="webpack5"});},HTML_default=generator11;var generator12=async(packageManager,npmOptions,options)=>baseGenerator(packageManager,npmOptions,options,"web-components",{extraPackages:["lit"],useSWC:({builder})=>builder==="webpack5"}),WEB_COMPONENTS_default=generator12;var generator13=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"preact",{useSWC:({builder})=>builder==="webpack5"});},PREACT_default=generator13;var generator14=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"svelte",{extensions:["js","jsx","ts","tsx","svelte"]});},SVELTE_default=generator14;var generator15=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"qwik",{},"qwik");},QWIK_default=generator15;var generator16=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"svelte",void 0,"sveltekit");},SVELTEKIT_default=generator16;var generator17=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"solid",{},"solid");},SOLID_default=generator17;var generator18=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"server",{useSWC:()=>!0,extensions:["json","yaml","yml"]});},SERVER_default=generator18;var logger5=console,installStorybook=async(projectType,packageManager,options)=>{let npmOptions={installAsDevDependencies:!0,skipInstall:options.skipInstall},language=await detectLanguage(packageManager),pnp=await detectPnp(),generatorOptions={language,builder:options.builder,linkable:!!options.linkable,pnp:pnp||options.usePnp,yes:options.yes,projectType},runGenerator=async()=>{switch(projectType){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'));case"REACT_NATIVE":return REACT_NATIVE_default(packageManager,npmOptions).then(commandLog('Adding Storybook support to your "React Native" app'));case"QWIK":return QWIK_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Qwik" app'));case"WEBPACK_REACT":return WEBPACK_REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Webpack React" app'));case"REACT_PROJECT":return REACT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "React" library'));case"NEXTJS":return NEXTJS_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Next" app'));case"SFC_VUE":return SFC_VUE_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Single File Components Vue" app'));case"VUE":return VUE_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Vue" app'));case"VUE3":return VUE3_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Vue 3" app'));case"ANGULAR":return commandLog('Adding Storybook support to your "Angular" app'),ANGULAR_default(packageManager,npmOptions,generatorOptions,options);case"EMBER":return EMBER_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Ember" app'));case"HTML":return HTML_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "HTML" app'));case"WEB_COMPONENTS":return WEB_COMPONENTS_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "web components" app'));case"PREACT":return PREACT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Preact" app'));case"SVELTE":return SVELTE_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Svelte" app'));case"SVELTEKIT":return SVELTEKIT_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "SvelteKit" app'));case"SERVER":return SERVER_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "Server" app'));case"NX":throw new NxProjectDetectedError;case"SOLID":return SOLID_default(packageManager,npmOptions,generatorOptions).then(commandLog('Adding Storybook support to your "SolidJS" app'));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"),logger5.log(),Promise.resolve();default:return paddedLog(`We couldn't detect your project type. (code: ${projectType})`),paddedLog("You can specify a project type explicitly via `storybook init --type <type>`, see our docs on how to configure Storybook for your framework: https://storybook.js.org/docs/react/get-started/install"),logger5.log(),projectTypeInquirer(options,packageManager)}};try{return await runGenerator()}catch(err){throw err?.message!=="Canceled by the user"&&err?.stack&&logger5.error(`
116
116
  ${chalk12.red(err.stack)}`),new HandledError(err)}},projectTypeInquirer=async(options,packageManager)=>{let manualAnswer=options.yes?!0:await prompts5([{type:"confirm",name:"manual",message:"Do you want to manually choose a Storybook project type to install?"}]);if(manualAnswer!==!0&&manualAnswer.manual){let{manualFramework}=await prompts5([{type:"select",name:"manualFramework",message:"Please choose a project type from the following list:",choices:installableProjectTypes.map(type=>({title:type,value:type.toUpperCase()}))}]);if(manualFramework)return installStorybook(manualFramework,packageManager,options)}logger5.log(),logger5.log("For more information about installing Storybook: https://storybook.js.org/docs"),process.exit(0);},getEmptyDirMessage=packageManagerType=>{let generatorCommandsMap={vite:{npm:"npm create vite@latest",yarn1:"yarn create vite",yarn2:"yarn create vite",pnpm:"pnpm create vite"},angular:{npm:"npx -p @angular/cli ng new my-project --package-manager=npm",yarn1:"npx -p @angular/cli ng new my-project --package-manager=yarn",yarn2:"npx -p @angular/cli ng new my-project --package-manager=yarn",pnpm:"npx -p @angular/cli ng new my-project --package-manager=pnpm"}};return dedent18`
117
117
  Storybook cannot be installed into an empty project. We recommend creating a new project with the following:
118
118
 
@@ -127,9 +127,14 @@ We were not able to detect the right builder for your project. Please select one
127
127
  Once you've created a project, please re-run ${chalk12.green("npx storybook@latest init")} inside the project root. For more information, see ${chalk12.yellowBright("https://storybook.js.org/docs")}
128
128
 
129
129
  Good luck! 🚀
130
- `};async function doInitiate(options,pkg2){let{packageManager:pkgMgr}=options;options.useNpm&&(useNpmWarning(),pkgMgr="npm");let cwdFolderEntries=readdirSync(process.cwd()),isEmptyDir=cwdFolderEntries.length===0||cwdFolderEntries.every(entry=>entry.startsWith(".")),packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),welcomeMessage="storybook init - the simplest way to add a Storybook to your project.";logger5.log(chalk12.inverse(`
131
- ${welcomeMessage}
132
- `));let{default:updateNotifier}=await import('simple-update-notifier');if(await updateNotifier({pkg:pkg2,updateCheckInterval:1e3*60*60}),options.force!==!0&&isEmptyDir)throw logger5.log((0, import_boxen.default)(getEmptyDirMessage(packageManager.type),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),new HandledError("Project was initialized in an empty directory.");let projectType,projectTypeProvided=options.type,infoText=projectTypeProvided?`Installing Storybook for user specified project type: ${projectTypeProvided}`:"Detecting project type",done=commandLog(infoText);if(projectTypeProvided)if(installableProjectTypes.includes(projectTypeProvided))projectType=projectTypeProvided.toUpperCase();else throw done(`The provided project type was not recognized by Storybook: ${projectTypeProvided}`),logger5.log(`
130
+ `};async function doInitiate(options,pkg2){let{packageManager:pkgMgr}=options;options.useNpm&&(useNpmWarning(),pkgMgr="npm");let cwdFolderEntries=readdirSync(process.cwd()),isEmptyDir=cwdFolderEntries.length===0||cwdFolderEntries.every(entry=>entry.startsWith(".")),packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr});if(options.force!==!0&&isEmptyDir)throw logger5.log((0, import_boxen.default)(getEmptyDirMessage(packageManager.type),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),new HandledError("Project was initialized in an empty directory.");let latestVersion=await packageManager.latestVersion("@storybook/cli"),currentVersion=versions_default["@storybook/cli"],isPrerelease=prerelease(currentVersion),isOutdated=lt(currentVersion,latestVersion),borderColor=isOutdated?"#FC521F":"#F1618C",messages={welcome:`Adding Storybook version ${chalk12.bold(currentVersion)} to your project..`,notLatest:chalk12.red(dedent18`
131
+ This version is behind the latest release, which is: ${chalk12.bold(latestVersion)}!
132
+ You likely ran the init command through npx, which can use a locally cached version, to get the latest please run:
133
+ ${chalk12.bold("npx storybook@latest init")}
134
+
135
+ You may want to CTRL+C to stop, and run with the latest version instead.
136
+ `),prelease:chalk12.yellow("This is a pre-release version.")};logger5.log((0, import_boxen.default)([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(isPrerelease?[messages.prelease]:[]).join(`
137
+ `),{borderStyle:"round",padding:1,borderColor}));let projectType,projectTypeProvided=options.type,infoText=projectTypeProvided?`Installing Storybook for user specified project type: ${projectTypeProvided}`:"Detecting project type",done=commandLog(infoText);if(projectTypeProvided)if(installableProjectTypes.includes(projectTypeProvided))projectType=projectTypeProvided.toUpperCase();else throw done(`The provided project type was not recognized by Storybook: ${projectTypeProvided}`),logger5.log(`
133
138
  The project types currently supported by Storybook are:
134
139
  `),installableProjectTypes.sort().forEach(framework=>paddedLog(`- ${framework}`)),logger5.log(),new HandledError(`Unknown project type supplied: ${projectTypeProvided}`);else try{projectType=await detect(packageManager,options);}catch(err){throw done(err.message),new HandledError(err)}done();let storybookInstantiated=isStorybookInstantiated();if(options.force===!1&&storybookInstantiated&&projectType!=="ANGULAR"){logger5.log();let{force}=await prompts5([{type:"confirm",name:"force",message:"We found a .storybook config directory in your project. Therefore we assume that Storybook is already instantiated for your project. Do you still want to continue and force the initialization?"}]);logger5.log(),force?options.force=!0:process.exit(0);}options.skipInstall||await packageManager.installDependencies();let installResult=await installStorybook(projectType,packageManager,options);if(options.skipInstall||await packageManager.installDependencies(),options.disableTelemetry||await telemetry("init",{projectType}),projectType==="REACT_NATIVE")return logger5.log(),logger5.log(chalk12.yellow(`NOTE: installation is not 100% automated.
135
140
  `)),logger5.log(`To quickly run Storybook, replace contents of your app entry with:
@@ -143,7 +148,7 @@ The project types currently supported by Storybook are:
143
148
 
144
149
  Wanna know more about Storybook? Check out ${chalk12.cyan("https://storybook.js.org/")}
145
150
  Having trouble or want to chat? Join us at ${chalk12.cyan("https://discord.gg/storybook/")}
146
- `,{borderStyle:"round",padding:1,borderColor:"#F1618C"})),{shouldRunDev:process.env.CI!=="true"&&process.env.IN_STORYBOOK_SANDBOX!=="true",projectType,packageManager,storybookCommand}}async function initiate(options,pkg2){let initiateResult=await withTelemetry("init",{cliOptions:options,printError:err=>!err.handled&&logger5.error(err)},()=>doInitiate(options,pkg2));if(initiateResult.shouldRunDev){let{projectType,packageManager,storybookCommand}=initiateResult;logger5.log(`
151
+ `,{borderStyle:"round",padding:1,borderColor:"#F1618C"})),{shouldRunDev:process.env.CI!=="true"&&process.env.IN_STORYBOOK_SANDBOX!=="true",projectType,packageManager,storybookCommand}}async function initiate(options,pkg2){let initiateResult=await withTelemetry("init",{cliOptions:options,printError:err=>!err.handled&&logger5.error(err)},()=>doInitiate(options));if(initiateResult.shouldRunDev){let{projectType,packageManager,storybookCommand}=initiateResult;logger5.log(`
147
152
  Running Storybook`);try{let isReactWebProject=projectType==="REACT_SCRIPTS"||projectType==="REACT"||projectType==="WEBPACK_REACT"||projectType==="REACT_PROJECT"||projectType==="NEXTJS",flags=[];packageManager.type==="npm"&&flags.push("--"),isReactWebProject&&flags.push("--initial-path=/onboarding"),flags.push("--quiet"),packageManager.runPackageCommandSync(storybookCommand.replace(/^yarn /,""),flags,void 0,"inherit");}catch{}}}var logger6=console,postinstallAddon=async(addonName,options)=>{try{let modulePath=__require.resolve(`${addonName}/postinstall`,{paths:[process.cwd()]}),postinstall=__require(modulePath);try{logger6.log(`Running postinstall script for ${addonName}`),await postinstall(options);}catch(e){logger6.error(`Error running postinstall script for ${addonName}`),logger6.error(e);}}catch{}},getVersionSpecifier=addon=>{let groups=/^(...*)@(.*)$/.exec(addon);return groups?[groups[1],groups[2]]:[addon,void 0]},requireMain=configDir=>{let absoluteConfigDir=isAbsolute(configDir)?configDir:join(process.cwd(),configDir),mainFile=join(absoluteConfigDir,"main");return serverRequire(mainFile)??{}},checkInstalled=(addonName,main)=>!!main.addons?.find(entry=>(typeof entry=="string"?entry:entry.name)?.endsWith(addonName));async function add(addon,options){let{packageManager:pkgMgr}=options;options.useNpm&&(useNpmWarning(),pkgMgr="npm");let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),packageJson=await packageManager.retrievePackageJson(),{mainConfig,configDir}=getStorybookInfo(packageJson);if(checkInstalled(addon,requireMain(configDir)))throw new Error(dedent18`
148
153
  Addon ${addon} is already installed; we skipped adding it to your ${mainConfig}.
149
154
  `);let[addonName,versionSpecifier]=getVersionSpecifier(addon);if(!mainConfig){logger6.error("Unable to find storybook main.js config");return}let main=await readConfig(mainConfig);logger6.log(`Verifying ${addonName}`);let latestVersion=await packageManager.latestVersion(addonName);latestVersion||logger6.error(`Unknown addon ${addonName}`);let isStorybookAddon=addonName.startsWith("@storybook/"),isAddonFromCore=isCorePackage(addonName),storybookVersion=await getStorybookVersion(packageManager),version=versionSpecifier||(isAddonFromCore?storybookVersion:latestVersion),addonWithVersion=semver.valid(version)?`${addonName}@^${version}`:`${addonName}@${version}`;logger6.log(`Installing ${addonWithVersion}`),await packageManager.addDependencies({installAsDevDependencies:!0},[addonWithVersion]),logger6.log(`Adding '${addon}' to main.js addons field.`),main.appendValueToArray(["addons"],addonName),await writeConfig(main),!options.skipPostinstall&&isStorybookAddon&&await postinstallAddon(addonName,{packageManager:packageManager.type});}var import_boxen3=__toESM(require_boxen());var logger7=console,getFrameworkPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.framework=="string"?mainConfig.framework:mainConfig?.framework?.name;if(!packageNameOrPath)return null;let normalizedPath=path8.normalize(packageNameOrPath).replace(new RegExp(/\\/,"g"),"/");return Object.keys(frameworkPackages).find(pkg2=>normalizedPath.endsWith(pkg2))||packageNameOrPath},getBuilderPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.core?.builder=="string"?mainConfig.core.builder:mainConfig?.core?.builder?.name;if(!packageNameOrPath)return null;let normalizedPath=path8.normalize(packageNameOrPath).replace(new RegExp(/\\/,"g"),"/");return builderPackages.find(pkg2=>normalizedPath.endsWith(pkg2))||packageNameOrPath},getRendererPackageNameFromFramework=frameworkPackageName=>{if(frameworkPackageName){if(Object.keys(rendererPackages).includes(frameworkPackageName))return frameworkPackageName;if(Object.values(rendererPackages).includes(frameworkPackageName))return Object.keys(rendererPackages).find(k=>rendererPackages[k]===frameworkPackageName)}return null},getStorybookData=async({packageManager,configDir:userDefinedConfigDir})=>{let packageJson=await packageManager.retrievePackageJson(),{mainConfig:mainConfigPath,version:storybookVersionSpecifier,configDir:configDirFromScript,previewConfig:previewConfigPath}=getStorybookInfo(packageJson,userDefinedConfigDir),storybookVersion=await getStorybookVersion(packageManager),configDir=userDefinedConfigDir||configDirFromScript||".storybook",mainConfig;try{mainConfig=await loadMainConfig({configDir,noCache:!0});}catch(err){throw new Error(dedent18`Unable to find or evaluate ${chalk12.blue(mainConfigPath)}: ${err.message}`)}return {configDir,mainConfig,storybookVersionSpecifier,storybookVersion,mainConfigPath,previewConfigPath}},updateMainConfig=async({mainConfigPath,dryRun},callback)=>{try{let main=await readConfig(mainConfigPath);await callback(main),dryRun||await writeConfig(main);}catch(e){logger7.info(`\u274C The migration failed to update your ${chalk12.blue(mainConfigPath)} on your behalf because of the following error:
@@ -153,9 +158,11 @@ Running Storybook`);try{let isReactWebProject=projectType==="REACT_SCRIPTS"||pro
153
158
 
154
159
  To upgrade to the latest stable release, run this from your project directory:
155
160
 
156
- ${chalk12.cyan("npx storybook upgrade")}
161
+ ${chalk12.cyan("npx storybook@latest upgrade")}
162
+
163
+ To upgrade to the latest pre-release, run this from your project directory:
157
164
 
158
- Add the ${chalk12.cyan("--prerelease")} flag to get the latest prerelease.
165
+ ${chalk12.cyan("npx storybook@next upgrade")}
159
166
  `.trim()),null;if(semver.gte(storybookVersion,"7.0.0"))return null;if(!mainConfig)return logger8.warn("Unable to find storybook main.js config"),null;let builderPackageName=getBuilderPackageName(mainConfig);return builderPackageName&&builderPackageName!=="webpack4"?(logger8.info(`Found builder ${builderPackageName}, skipping`),null):{storybookVersion}};var logger9=console,webpack5={id:"webpack5",async check({configDir,packageManager,mainConfig,storybookVersion}){let webpackVersion=await packageManager.getPackageVersion("webpack");if(!webpackVersion||semver.lt(webpackVersion,"5.0.0")||semver.gte(webpackVersion,"6.0.0"))return null;let builderInfo=await checkWebpack5Builder({mainConfig,storybookVersion});return builderInfo?{webpackVersion,...builderInfo}:null},prompt({webpackVersion}){let webpackFormatted=chalk12.cyan(`webpack ${webpackVersion}`);return dedent`
160
167
  We've detected you're running ${webpackFormatted}.
161
168
  Your Storybook's main.js files specifies webpack4, which is incompatible.
@@ -207,7 +214,7 @@ Running Storybook`);try{let isReactWebProject=projectType==="REACT_SCRIPTS"||pro
207
214
  We can upgrade your project to use the new builder automatically.
208
215
 
209
216
  More info: ${chalk12.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-renamed")}
210
- `},async run({result:{builder,packageJson},packageManager,dryRun,mainConfigPath}){let{dependencies={},devDependencies={}}=packageJson;logger12.info("\u2705 Removing existing 'storybook-builder-vite' dependency"),dryRun||(delete dependencies["storybook-builder-vite"],delete devDependencies["storybook-builder-vite"],await packageManager.writePackageJson(packageJson)),logger12.info("\u2705 Adding '@storybook/builder-vite' as dev dependency"),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0},["@storybook/builder-vite"]),logger12.info("\u2705 Updating main.js to use vite builder"),dryRun||await updateMainConfig({dryRun,mainConfigPath},async main=>{let updatedBuilder=typeof builder=="string"?"@storybook/builder-vite":{name:"@storybook/builder-vite",options:builder.options};main.setFieldValue(["core","builder"],updatedBuilder),await writeConfig(main);});}};var logger13=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","pnpm dlx"].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,storybookVersion}){let packageJson=await packageManager.retrievePackageJson(),{scripts={}}=packageJson;if(semver.lt(storybookVersion,"7.0.0"))return null;let storybookScripts=getStorybookScripts(scripts);return Object.keys(storybookScripts).length===0?null:{packageJson,storybookScripts,storybookVersion}},prompt({storybookVersion,storybookScripts}){let sbFormatted=chalk12.cyan(`Storybook ${storybookVersion}`),newScriptsMessage=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc.push([chalk12.bold(scriptKey),"from:",chalk12.cyan(storybookScripts[scriptKey].before),"to:",chalk12.cyan(storybookScripts[scriptKey].after)].join(`
217
+ `},async run({result:{builder,packageJson},packageManager,dryRun,mainConfigPath}){let{dependencies={},devDependencies={}}=packageJson;if(logger12.info("\u2705 Removing existing 'storybook-builder-vite' dependency"),dryRun||(delete dependencies["storybook-builder-vite"],delete devDependencies["storybook-builder-vite"],await packageManager.writePackageJson(packageJson)),logger12.info("\u2705 Adding '@storybook/builder-vite' as dev dependency"),!dryRun){let versionToInstall=getStorybookVersionSpecifier(await packageManager.retrievePackageJson());await packageManager.addDependencies({installAsDevDependencies:!0},[`@storybook/builder-vite@${versionToInstall}`]);}logger12.info("\u2705 Updating main.js to use vite builder"),dryRun||await updateMainConfig({dryRun,mainConfigPath},async main=>{let updatedBuilder=typeof builder=="string"?"@storybook/builder-vite":{name:"@storybook/builder-vite",options:builder.options};main.setFieldValue(["core","builder"],updatedBuilder),await writeConfig(main);});}};var logger13=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","pnpm dlx"].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,storybookVersion}){let packageJson=await packageManager.retrievePackageJson(),{scripts={}}=packageJson;if(semver.lt(storybookVersion,"7.0.0"))return null;let storybookScripts=getStorybookScripts(scripts);return Object.keys(storybookScripts).length===0?null:{packageJson,storybookScripts,storybookVersion}},prompt({storybookVersion,storybookScripts}){let sbFormatted=chalk12.cyan(`Storybook ${storybookVersion}`),newScriptsMessage=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc.push([chalk12.bold(scriptKey),"from:",chalk12.cyan(storybookScripts[scriptKey].before),"to:",chalk12.cyan(storybookScripts[scriptKey].after)].join(`
211
218
  `)),acc),[]);return dedent`
212
219
  We've detected you are using ${sbFormatted} with scripts from previous versions of Storybook.
213
220
  Starting in Storybook 7, the ${chalk12.yellow("start-storybook")} and ${chalk12.yellow("build-storybook")} binaries have changed to ${chalk12.magenta("storybook dev")} and ${chalk12.magenta("storybook build")} respectively.
@@ -440,8 +447,22 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message,fixResults[f.id]="check_f
440
447
  ${JSON.stringify(nextStoriesEntries,null,2)}`),dryRun||await updateMainConfig({mainConfigPath,dryRun},async main=>{main.setFieldValue(["stories"],nextStoriesEntries);});}};var logger22=console;async function migrate(migration,{glob:glob2,dryRun,list,rename,parser}){if(list)listCodemods().forEach(key=>logger22.log(key));else if(migration)migration==="mdx-to-csf"&&!dryRun&&(await runFixes({fixes:[bareMdxStoriesGlob]}),await addStorybookBlocksPackage()),await runCodemod(migration,{glob:glob2,dryRun,logger:logger22,rename,parser});else throw new Error("Migrate: please specify a migration name or --list")}async function addStorybookBlocksPackage(){let packageManager=JsPackageManagerFactory.getPackageManager(),packageJson=await packageManager.retrievePackageJson(),versionToInstall=getStorybookVersionSpecifier(await packageManager.retrievePackageJson());logger22.info('\u2705 Adding "@storybook/blocks" package'),await packageManager.addDependencies({installAsDevDependencies:!0,packageJson},[`@storybook/blocks@${versionToInstall}`]);}var read=async url=>{let browser=await usePuppeteerBrowser(),page=await browser.newPage();await page.goto(url),await page.waitForFunction(`
441
448
  (window.__STORYBOOK_PREVIEW__ && window.__STORYBOOK_PREVIEW__.extract && window.__STORYBOOK_PREVIEW__.extract()) ||
442
449
  (window.__STORYBOOK_STORY_STORE__ && window.__STORYBOOK_STORY_STORE__.extract && window.__STORYBOOK_STORY_STORE__.extract())
443
- `);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(path8.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`;logger.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 logger.info("installing puppeteer..."),new Promise((resolve2,reject)=>{__require("child_process").exec(`node ${__require.resolve(path8.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 writeFile(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")}var versionRegex=/(@storybook\/[^@]+)@(\S+)/,getStorybookVersion2=line=>{if(line.startsWith("npm "))return null;let match=versionRegex.exec(line);return !match||!semver.clean(match[2])?null:{package:match[1],version:match[2]}},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=>logger.warn(`- ${formatPackage(pkg2)}`)),checkVersionConsistency=()=>{let storybookPackages=sync$1("npm",["ls"],{stdio:"pipe",shell:!0}).output.toString().split(`
444
- `).map(getStorybookVersion2).filter(Boolean).filter(pkg2=>isCorePackage(pkg2.package));if(!storybookPackages.length){logger.warn("No storybook core packages found."),logger.warn("'npm ls | grep storybook' can show if multiple versions are installed.");return}storybookPackages.sort((a,b)=>semver.rcompare(a.version,b.version));let latestVersion=storybookPackages[0].version,outdated=storybookPackages.filter(pkg2=>pkg2.version!==latestVersion);outdated.length>0&&(logger.warn(`Found ${outdated.length} outdated packages (relative to '${formatPackage(storybookPackages[0])}')`),logger.warn("Please make sure your packages are updated to ensure a consistent experience."),warnPackages(outdated)),deprecatedPackages.forEach(({minVersion,url,deprecations})=>{if(semver.gte(latestVersion,minVersion)){let deprecated=storybookPackages.filter(pkg2=>deprecations.includes(pkg2.package));deprecated.length>0&&(logger.warn(`Found ${deprecated.length} deprecated packages since ${minVersion}`),logger.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&&semver.satisfies(semver.coerce(pkgVersion),specifier)?[...acc,...extra]:acc},[...flags]),addNxPackagesToReject=flags=>{let newFlags=[...flags],index=flags.indexOf("--reject");return index>-1?newFlags[index+1].endsWith("/")&&newFlags[index+1].startsWith("/")?(newFlags[index+1]=newFlags[index+1].substring(1,newFlags[index+1].length-1),newFlags[index+1]=`/(${newFlags[index+1]}|@nrwl/storybook|@nx/storybook)/`):newFlags[index+1]=`${newFlags[index+1]},@nrwl/storybook,@nx/storybook`:(newFlags.push("--reject"),newFlags.push("@nrwl/storybook,@nx/storybook")),newFlags},doUpgrade=async({tag,prerelease,skipCheck,useNpm,packageManager:pkgMgr,dryRun,configDir,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,await packageManager.retrievePackageJson()),flags=addNxPackagesToReject(flags);let check=sync$1("npx",["npm-check-updates@latest","/storybook/",...flags],{stdio:"pipe",shell:!0});logger.info(check.stdout.toString()),logger.info(check.stderr.toString());let checkSb=sync$1("npx",["npm-check-updates@latest","sb",...flags],{stdio:"pipe",shell:!0});logger.info(checkSb.stdout.toString()),logger.info(checkSb.stderr.toString()),dryRun||(commandLog("Installing upgrades"),await packageManager.installDependencies());let automigrationResults;if(skipCheck||(checkVersionConsistency(),automigrationResults=await automigrate({dryRun,yes,packageManager:pkgMgr,configDir})),!options.disableTelemetry){let afterVersion=await getStorybookCoreVersion(),{preCheckFailure,fixResults}=automigrationResults||{};telemetry("upgrade",{prerelease,tag,beforeVersion,afterVersion,...{automigrationResults:preCheckFailure?null:fixResults,automigrationPreCheckFailure:preCheckFailure||null}});}};async function upgrade(options){await withTelemetry("upgrade",{cliOptions:options},()=>doUpgrade(options));}var import_boxen4=__toESM(require_boxen());var baseTemplates={"cra/default-js":{name:"Create React App Latest (Webpack | JavaScript)",script:"npx create-react-app {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"cra/default-ts":{name:"Create React App Latest (Webpack | TypeScript)",script:"npx create-react-app {{beforeDir}} --template typescript",skipTasks:["smoke-test","bench"],expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/default-js":{name:"Next.js Latest (Webpack | JavaScript)",script:'yarn create next-app {{beforeDir}} --javascript --eslint --tailwind --app --import-alias="@/*" --src-dir',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"nextjs/default-ts":{name:"Next.js Latest (Webpack | TypeScript)",script:'yarn create next-app {{beforeDir}} --typescript --eslint --tailwind --app --import-alias="@/*" --src-dir',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"nextjs/prerelease":{name:"Next.js Prerelease (Webpack | TypeScript)",script:'npx create-next-app@canary {{beforeDir}} --typescript --eslint --tailwind --app --import-alias="@/*" --src-dir',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"react-vite/default-js":{name:"React Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template react",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"react-vite/default-ts":{name:"React Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template react-ts",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},skipTasks:["bench"]},"react-webpack/18-ts":{name:"React Latest (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"react-webpack/17-ts":{name:"React v17 (Webpack | TypeScript)",script:'yarn create webpack5-react {{beforeDir}} --version-react="17" --version-react-dom="17"',expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"solid-vite/default-js":{name:"SolidJS Latest (Vite | JavaScript)",script:"npx degit solidjs/templates/js {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench"]},"solid-vite/default-ts":{name:"SolidJS Latest (Vite | TypeScript)",script:"npx degit solidjs/templates/ts {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-js":{name:"Vue v3 (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-ts":{name:"Vue v3 (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue-ts",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"vue2-vite/2.7-js":{name:"Vue v2 (Vite | JavaScript)",script:"npx create-vue@2 {{beforeDir}} --default",expected:{framework:"@storybook/vue-vite",renderer:"@storybook/vue",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"html-webpack/default":{name:"HTML Latest (Webpack | JavaScript)",script:"yarn create webpack5-html {{beforeDir}}",expected:{framework:"@storybook/html-webpack5",renderer:"@storybook/html",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"html-vite/default-js":{name:"HTML Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"html-vite/default-ts":{name:"HTML Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-vite/default-js":{name:"Svelte Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-vite/default-ts":{name:"Svelte Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte-ts",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"angular-cli/prerelease":{name:"Angular CLI Prerelease (Webpack | TypeScript)",script:"npx -p @angular/cli@next ng new angular-v16 --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"angular-cli/default-ts":{name:"Angular CLI Latest (Webpack | TypeScript)",script:"npx -p @angular/cli ng new angular-latest --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"angular-cli/15-ts":{name:"Angular CLI v15 (Webpack | TypeScript)",script:"npx -p @angular/cli@15 ng new angular-v15 --directory {{beforeDir}} --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"},skipTasks:["e2e-tests-dev","bench"]},"svelte-kit/skeleton-js":{name:"SvelteKit Latest (Vite | JavaScript)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-js --directory={{beforeDir}} --template=skeleton --types=null --no-prettier --no-eslint --no-playwright --no-vitest --no-svelte5",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-kit/skeleton-ts":{name:"SvelteKit Latest (Vite | TypeScript)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-ts --directory={{beforeDir}} --template=skeleton --types=typescript --no-prettier --no-eslint --no-playwright --no-vitest --no-svelte5",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"lit-vite/default-js":{name:"Lit Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"lit-vite/default-ts":{name:"Lit Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"vue-cli/default-js":{name:"Vue CLI v3 (Webpack | JavaScript)",script:'npx -p @vue/cli vue create {{beforeDir}} --default --packageManager=yarn --force --merge && cd {{beforeDir}} && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/vue3-webpack5",renderer:"@storybook/vue3",builder:"@storybook/builder-webpack5"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"preact-webpack5/default-js":{name:"Preact CLI Latest (Webpack | JavaScript)",script:'npx preact-cli create default {{beforeDir}} --name preact-app --yarn --no-install && cd {{beforeDir}} && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"preact-webpack5/default-ts":{name:"Preact CLI Latest (Webpack | TypeScript)",script:'npx preact-cli create typescript {{beforeDir}} --name preact-app --yarn --no-install && cd {{beforeDir}} && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"preact-vite/default-js":{name:"Preact Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"preact-vite/default-ts":{name:"Preact Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact-ts",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"qwik-vite/default-ts":{name:"Qwik CLI Latest (Vite | TypeScript)",script:"yarn create qwik basic {{beforeDir}}",inDevelopment:!0,expected:{framework:"storybook-framework-qwik",renderer:"storybook-framework-qwik",builder:"storybook-framework-qwik"},skipTasks:["e2e-tests","e2e-tests-dev","bench"]}},internalTemplates={"internal/swc-webpack":{...baseTemplates["react-webpack/18-ts"],name:"SWC (react-webpack/18-ts)",isInternal:!0,inDevelopment:!0,modifications:{mainConfig:{framework:{name:"@storybook/react-webpack5",options:{builder:{useSWC:!0}}}}},skipTasks:["bench"]},"internal/server-webpack5":{name:"Server Webpack5",script:'yarn init -y && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/server-webpack5",renderer:"@storybook/server",builder:"@storybook/builder-webpack5"},isInternal:!0,skipTasks:["bench"]}},benchTemplates={"bench/react-vite-default-ts":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic"]},"bench/react-webpack-18-ts":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic"]},"bench/react-vite-default-ts-nodocs":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, no docs)",isInternal:!0,modifications:{skipTemplateStories:!0,disableDocs:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic"]},"bench/react-vite-default-ts-test-build":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests"]},"bench/react-webpack-18-ts-test-build":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests"]}},allTemplates={...baseTemplates,...internalTemplates,...benchTemplates};var logger25=console,toChoices=c=>({title:allTemplates[c].name,value:c}),sandbox=async({output:outputDirectory,filterValue,branch,init})=>{let selectedConfig=allTemplates[filterValue],selectedTemplate=selectedConfig?filterValue:null;if(!selectedConfig){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},[]);if(choices.length===0&&(logger25.info((0, import_boxen4.default)(dedent`
450
+ `);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(path8.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`;logger.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 logger.info("installing puppeteer..."),new Promise((resolve2,reject)=>{__require("child_process").exec(`node ${__require.resolve(path8.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 writeFile(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")}var import_boxen4=__toESM(require_boxen());var versionRegex=/(@storybook\/[^@]+)@(\S+)/,getStorybookVersion2=line=>{if(line.startsWith("npm "))return null;let match=versionRegex.exec(line);return !match||!semver.clean(match[2])?null:{package:match[1],version:match[2]}},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=>logger.warn(`- ${formatPackage(pkg2)}`)),checkVersionConsistency=()=>{let storybookPackages=sync$1("npm",["ls"],{stdio:"pipe",shell:!0}).output.toString().split(`
451
+ `).map(getStorybookVersion2).filter(Boolean).filter(pkg2=>isCorePackage(pkg2.package));if(!storybookPackages.length){logger.warn("No storybook core packages found."),logger.warn("'npm ls | grep storybook' can show if multiple versions are installed.");return}storybookPackages.sort((a,b)=>semver.rcompare(a.version,b.version));let latestVersion=storybookPackages[0].version,outdated=storybookPackages.filter(pkg2=>pkg2.version!==latestVersion);outdated.length>0&&(logger.warn(`Found ${outdated.length} outdated packages (relative to '${formatPackage(storybookPackages[0])}')`),logger.warn("Please make sure your packages are updated to ensure a consistent experience."),warnPackages(outdated)),deprecatedPackages.forEach(({minVersion,url,deprecations})=>{if(semver.gte(latestVersion,minVersion)){let deprecated=storybookPackages.filter(pkg2=>deprecations.includes(pkg2.package));deprecated.length>0&&(logger.warn(`Found ${deprecated.length} deprecated packages since ${minVersion}`),logger.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&&semver.satisfies(semver.coerce(pkgVersion),specifier)?[...acc,...extra]:acc},[...flags]),addNxPackagesToReject=flags=>{let newFlags=[...flags],index=flags.indexOf("--reject");return index>-1?newFlags[index+1].endsWith("/")&&newFlags[index+1].startsWith("/")?(newFlags[index+1]=newFlags[index+1].substring(1,newFlags[index+1].length-1),newFlags[index+1]=`/(${newFlags[index+1]}|@nrwl/storybook|@nx/storybook)/`):newFlags[index+1]=`${newFlags[index+1]},@nrwl/storybook,@nx/storybook`:(newFlags.push("--reject"),newFlags.push("@nrwl/storybook,@nx/storybook")),newFlags},deprecatedUpgrade=async({tag,prerelease:prerelease3,skipCheck,useNpm,packageManager:pkgMgr,dryRun,configDir,yes,...options})=>{useNpm&&(useNpmWarning(),pkgMgr="npm"),tag?deprecate("The --tag flag is deprecated. Specify the version you want to upgrade to with `npx storybook@<version> upgrade` instead"):prerelease3&&deprecate("The --prerelease flag is deprecated. Specify the version you want to upgrade to with `npx storybook@<version> upgrade` instead");let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),beforeVersion=await getStorybookCoreVersion();if(commandLog("Checking for latest versions of '@storybook/*' packages"),tag&&prerelease3)throw new Error("Cannot set both --tag and --prerelease. Use --tag next to get the latest prereleae");let target="latest";prerelease3?target="@next":tag&&(target=`@${tag}`);let flags=[];dryRun||flags.push("--upgrade"),flags.push("--target"),flags.push(target),flags=addExtraFlags(EXTRA_FLAGS,flags,await packageManager.retrievePackageJson()),flags=addNxPackagesToReject(flags);let check=sync$1("npx",["npm-check-updates@latest","/storybook/",...flags],{stdio:"pipe",shell:!0});logger.info(check.stdout.toString()),logger.info(check.stderr.toString());let checkSb=sync$1("npx",["npm-check-updates@latest","sb",...flags],{stdio:"pipe",shell:!0});logger.info(checkSb.stdout.toString()),logger.info(checkSb.stderr.toString()),dryRun||(commandLog("Installing upgrades"),await packageManager.installDependencies());let automigrationResults;if(skipCheck||(checkVersionConsistency(),automigrationResults=await automigrate({dryRun,yes,packageManager:pkgMgr,configDir})),!options.disableTelemetry){let afterVersion=await getStorybookCoreVersion(),{preCheckFailure,fixResults}=automigrationResults||{};telemetry("upgrade",{prerelease:prerelease3,tag,beforeVersion,afterVersion,...{automigrationResults:preCheckFailure?null:fixResults,automigrationPreCheckFailure:preCheckFailure||null}});}},doUpgrade=async({tag,prerelease:prerelease3,skipCheck,useNpm,packageManager:pkgMgr,dryRun,configDir,yes,...options})=>{if(useNpm&&(useNpmWarning(),pkgMgr="npm"),tag||prerelease3){await deprecatedUpgrade({tag,prerelease:prerelease3,skipCheck,useNpm,packageManager:pkgMgr,dryRun,configDir,yes,...options});return}let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),beforeVersion=await getStorybookCoreVersion()??"0.0.0",currentVersion=versions_default["@storybook/cli"],isCanary=currentVersion.startsWith("0.0.0");if(!isCanary&&lt(currentVersion,beforeVersion))throw new UpgradeStorybookToLowerVersionError({beforeVersion,currentVersion});if(!isCanary&&eq(currentVersion,beforeVersion))throw new UpgradeStorybookToSameVersionError({beforeVersion});let latestVersion=await packageManager.latestVersion("@storybook/cli"),isOutdated=lt(currentVersion,latestVersion),isPrerelease=semver.prerelease(currentVersion)!==null,borderColor=isOutdated?"#FC521F":"#F1618C",messages={welcome:`Upgrading Storybook from version ${chalk12.bold(beforeVersion)} to version ${chalk12.bold(currentVersion)}..`,notLatest:chalk12.red(dedent18`
452
+ This version is behind the latest release, which is: ${chalk12.bold(latestVersion)}!
453
+ You likely ran the upgrade command through npx, which can use a locally cached version, to upgrade to the latest version please run:
454
+ ${chalk12.bold("npx storybook@latest upgrade")}
455
+
456
+ You may want to CTRL+C to stop, and run with the latest version instead.
457
+ `),prelease:chalk12.yellow("This is a pre-release version.")};logger.plain((0, import_boxen4.default)([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(isPrerelease?[messages.prelease]:[]).join(`
458
+ `),{borderStyle:"round",padding:1,borderColor}));let packageJson=await packageManager.retrievePackageJson(),toUpgradedDependencies=deps=>Object.keys(deps||{}).filter(dependency=>{if(dependency==="@storybook/preset-create-react-app"){let reactScriptsVersion=packageJson.dependencies["react-scripts"]??packageJson.devDependencies["react-scripts"];if(reactScriptsVersion&&lt(coerce(reactScriptsVersion),"5.0.0"))return !1}return dependency in versions_default}).map(dependency=>`${dependency}@${(!isOutdated||isPrerelease)&&!isCanary?"^":""}${versions_default[dependency]}`),upgradedDependencies=toUpgradedDependencies(packageJson.dependencies),upgradedDevDependencies=toUpgradedDependencies(packageJson.devDependencies);dryRun||(commandLog(`Updating dependencies in ${chalk12.cyan("package.json")}..`),logger.plain(""),upgradedDependencies.length>0&&await packageManager.addDependencies({installAsDevDependencies:!1,skipInstall:!0,packageJson},upgradedDependencies),upgradedDevDependencies.length>0&&await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall:!0,packageJson},upgradedDevDependencies),await packageManager.installDependencies());let automigrationResults;if(skipCheck||(checkVersionConsistency(),automigrationResults=await automigrate({dryRun,yes,packageManager:pkgMgr,configDir})),!options.disableTelemetry){let afterVersion=await getStorybookCoreVersion(),{preCheckFailure,fixResults}=automigrationResults||{};telemetry("upgrade",{beforeVersion,afterVersion,...{automigrationResults:preCheckFailure?null:fixResults,automigrationPreCheckFailure:preCheckFailure||null}});}};async function upgrade(options){await withTelemetry("upgrade",{cliOptions:options},()=>doUpgrade(options));}var import_boxen5=__toESM(require_boxen());var baseTemplates={"cra/default-js":{name:"Create React App Latest (Webpack | JavaScript)",script:"npx create-react-app {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"cra/default-ts":{name:"Create React App Latest (Webpack | TypeScript)",script:"npx create-react-app {{beforeDir}} --template typescript",skipTasks:["smoke-test","bench"],expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"}},"nextjs/default-js":{name:"Next.js Latest (Webpack | JavaScript)",script:'yarn create next-app {{beforeDir}} --javascript --eslint --tailwind --app --import-alias="@/*" --src-dir',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"nextjs/default-ts":{name:"Next.js Latest (Webpack | TypeScript)",script:'yarn create next-app {{beforeDir}} --typescript --eslint --tailwind --app --import-alias="@/*" --src-dir',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"nextjs/prerelease":{name:"Next.js Prerelease (Webpack | TypeScript)",script:'npx create-next-app@canary {{beforeDir}} --typescript --eslint --tailwind --app --import-alias="@/*" --src-dir',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"react-vite/default-js":{name:"React Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template react",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"react-vite/default-ts":{name:"React Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template react-ts",expected:{framework:"@storybook/react-vite",renderer:"@storybook/react",builder:"@storybook/builder-vite"},skipTasks:["bench"]},"react-webpack/18-ts":{name:"React Latest (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"react-webpack/17-ts":{name:"React v17 (Webpack | TypeScript)",script:'yarn create webpack5-react {{beforeDir}} --version-react="17" --version-react-dom="17"',expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"solid-vite/default-js":{name:"SolidJS Latest (Vite | JavaScript)",script:"npx degit solidjs/templates/js {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench"]},"solid-vite/default-ts":{name:"SolidJS Latest (Vite | TypeScript)",script:"npx degit solidjs/templates/ts {{beforeDir}}",expected:{framework:"storybook-solidjs-vite",renderer:"storybook-solidjs",builder:"@storybook/builder-vite"},inDevelopment:!0,skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-js":{name:"Vue v3 (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"vue3-vite/default-ts":{name:"Vue v3 (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template vue-ts",expected:{framework:"@storybook/vue3-vite",renderer:"@storybook/vue3",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"vue2-vite/2.7-js":{name:"Vue v2 (Vite | JavaScript)",script:"npx create-vue@2 {{beforeDir}} --default",expected:{framework:"@storybook/vue-vite",renderer:"@storybook/vue",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"html-webpack/default":{name:"HTML Latest (Webpack | JavaScript)",script:"yarn create webpack5-html {{beforeDir}}",expected:{framework:"@storybook/html-webpack5",renderer:"@storybook/html",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"html-vite/default-js":{name:"HTML Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"html-vite/default-ts":{name:"HTML Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template vanilla-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/html-vite",renderer:"@storybook/html",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-vite/default-js":{name:"Svelte Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-vite/default-ts":{name:"Svelte Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template svelte-ts",expected:{framework:"@storybook/svelte-vite",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"angular-cli/prerelease":{name:"Angular CLI Prerelease (Webpack | TypeScript)",script:"npx -p @angular/cli@next ng new angular-v16 --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"angular-cli/default-ts":{name:"Angular CLI Latest (Webpack | TypeScript)",script:"npx -p @angular/cli ng new angular-latest --directory {{beforeDir}} --routing=true --minimal=true --style=scss --strict --skip-git --skip-install --package-manager=yarn --ssr",expected:{framework:"@storybook/angular",renderer:"@storybook/angular",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"angular-cli/15-ts":{name:"Angular CLI v15 (Webpack | TypeScript)",script:"npx -p @angular/cli@15 ng new angular-v15 --directory {{beforeDir}} --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"},skipTasks:["e2e-tests-dev","bench"]},"svelte-kit/skeleton-js":{name:"SvelteKit Latest (Vite | JavaScript)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-js --directory={{beforeDir}} --template=skeleton --types=null --no-prettier --no-eslint --no-playwright --no-vitest --no-svelte5",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"svelte-kit/skeleton-ts":{name:"SvelteKit Latest (Vite | TypeScript)",script:"yarn create svelte-with-args --name=svelte-kit/skeleton-ts --directory={{beforeDir}} --template=skeleton --types=typescript --no-prettier --no-eslint --no-playwright --no-vitest --no-svelte5",expected:{framework:"@storybook/sveltekit",renderer:"@storybook/svelte",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"lit-vite/default-js":{name:"Lit Latest (Vite | JavaScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"lit-vite/default-ts":{name:"Lit Latest (Vite | TypeScript)",script:'npm create vite --yes {{beforeDir}} -- --template lit-ts && cd {{beforeDir}} && echo "export default {}" > vite.config.js',expected:{framework:"@storybook/web-components-vite",renderer:"@storybook/web-components",builder:"@storybook/builder-vite"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"vue-cli/default-js":{name:"Vue CLI v3 (Webpack | JavaScript)",script:'npx -p @vue/cli vue create {{beforeDir}} --default --packageManager=yarn --force --merge && cd {{beforeDir}} && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/vue3-webpack5",renderer:"@storybook/vue3",builder:"@storybook/builder-webpack5"},skipTasks:["smoke-test","e2e-tests-dev","bench"]},"preact-webpack5/default-js":{name:"Preact CLI Latest (Webpack | JavaScript)",script:'npx preact-cli create default {{beforeDir}} --name preact-app --yarn --no-install && cd {{beforeDir}} && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"preact-webpack5/default-ts":{name:"Preact CLI Latest (Webpack | TypeScript)",script:'npx preact-cli create typescript {{beforeDir}} --name preact-app --yarn --no-install && cd {{beforeDir}} && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/preact-webpack5",renderer:"@storybook/preact",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"]},"preact-vite/default-js":{name:"Preact Latest (Vite | JavaScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"preact-vite/default-ts":{name:"Preact Latest (Vite | TypeScript)",script:"npm create vite --yes {{beforeDir}} -- --template preact-ts",expected:{framework:"@storybook/preact-vite",renderer:"@storybook/preact",builder:"@storybook/builder-vite"},skipTasks:["e2e-tests-dev","bench"]},"qwik-vite/default-ts":{name:"Qwik CLI Latest (Vite | TypeScript)",script:"yarn create qwik basic {{beforeDir}}",inDevelopment:!0,expected:{framework:"storybook-framework-qwik",renderer:"storybook-framework-qwik",builder:"storybook-framework-qwik"},skipTasks:["e2e-tests","e2e-tests-dev","bench"]}},internalTemplates={"internal/swc-webpack":{...baseTemplates["react-webpack/18-ts"],name:"SWC (react-webpack/18-ts)",isInternal:!0,inDevelopment:!0,modifications:{mainConfig:{framework:{name:"@storybook/react-webpack5",options:{builder:{useSWC:!0}}}}},skipTasks:["bench"]},"internal/server-webpack5":{name:"Server Webpack5",script:'yarn init -y && echo "module.exports = {}" > webpack.config.js',expected:{framework:"@storybook/server-webpack5",renderer:"@storybook/server",builder:"@storybook/builder-webpack5"},isInternal:!0,skipTasks:["bench"]}},benchTemplates={"bench/react-vite-default-ts":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic"]},"bench/react-webpack-18-ts":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts)",isInternal:!0,modifications:{skipTemplateStories:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic"]},"bench/react-vite-default-ts-nodocs":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, no docs)",isInternal:!0,modifications:{skipTemplateStories:!0,disableDocs:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests","chromatic"]},"bench/react-vite-default-ts-test-build":{...baseTemplates["react-vite/default-ts"],name:"Bench (react-vite/default-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests"]},"bench/react-webpack-18-ts-test-build":{...baseTemplates["react-webpack/18-ts"],name:"Bench (react-webpack/18-ts, test-build)",isInternal:!0,modifications:{skipTemplateStories:!0,testBuild:!0},skipTasks:["e2e-tests-dev","test-runner","test-runner-dev","e2e-tests"]}},allTemplates={...baseTemplates,...internalTemplates,...benchTemplates};var logger25=console,toChoices=c=>({title:allTemplates[c].name,value:c}),sandbox=async({output:outputDirectory,filterValue,init,...options},pkg2)=>{let selectedConfig=allTemplates[filterValue],templateId=selectedConfig?filterValue:null,{packageManager:pkgMgr}=options,packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),latestVersion=await packageManager.latestVersion("@storybook/cli"),nextVersion=await packageManager.latestVersion("@storybook/cli@next").catch(e=>"0.0.0"),currentVersion=versions_default["@storybook/cli"],isPrerelease=prerelease(currentVersion),isOutdated=lt(currentVersion,isPrerelease?nextVersion:latestVersion),borderColor=isOutdated?"#FC521F":"#F1618C",downloadType=!isOutdated&&init?"after-storybook":"before-storybook",branch=isPrerelease?"next":"main",messages={welcome:`Creating a Storybook ${chalk12.bold(currentVersion)} sandbox..`,notLatest:chalk12.red(dedent`
459
+ This version is behind the latest release, which is: ${chalk12.bold(latestVersion)}!
460
+ You likely ran the init command through npx, which can use a locally cached version, to get the latest please run:
461
+ ${chalk12.bold("npx storybook@latest sandbox")}
462
+
463
+ You may want to CTRL+C to stop, and run with the latest version instead.
464
+ `),longInitTime:chalk12.yellow("The creation of the sandbox will take longer, because we will need to run init."),prerelease:chalk12.yellow("This is a pre-release version.")};if(logger25.log((0, import_boxen5.default)([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(init&&(isOutdated||isPrerelease)?[messages.longInitTime]:[]).concat(isPrerelease?[messages.prerelease]:[]).join(`
465
+ `),{borderStyle:"round",padding:1,borderColor})),!selectedConfig){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},[]);if(choices.length===0&&(logger25.info((0, import_boxen5.default)(dedent`
445
466
  🔎 You filtered out all templates. 🔍
446
467
 
447
468
  After filtering all the templates with "${chalk12.yellow(filterValue)}", we found no results. Please try again with a different filter.
@@ -449,7 +470,7 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message,fixResults[f.id]="check_f
449
470
  Available templates:
450
471
  ${keys.map(key=>chalk12.blue`- ${key}`).join(`
451
472
  `)}
452
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1)),choices.length===1?[selectedTemplate]=choices:(logger25.info((0, import_boxen4.default)(dedent`
473
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1)),choices.length===1?[templateId]=choices:(logger25.info((0, import_boxen5.default)(dedent`
453
474
  🤗 Welcome to ${chalk12.yellow("sb sandbox")}! 🤗
454
475
 
455
476
  Create a ${chalk12.green("new project")} to minimally reproduce Storybook issues.
@@ -458,9 +479,13 @@ ${error.stack}`),fixSummary.failed[f.id]=error.message,fixResults[f.id]="check_f
458
479
  2. select a location for the reproduction, outside of your project.
459
480
 
460
481
  After the reproduction is ready, we'll guide you through the next steps.
461
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),selectedTemplate=await promptSelectedTemplate(choices)),!!!(selectedTemplate??null)){logger25.error("Somehow we got no templates. Please rerun this command!");return}if(selectedConfig=allTemplates[selectedTemplate],!selectedConfig)throw new Error("\u{1F6A8} Sandbox: please specify a valid template type")}let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||selectedTemplate;if(selectedDirectory&&existsSync(`${selectedDirectory}`)&&logger25.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=>existsSync(directoryName)?`${directoryName} already exists. Please choose another name.`:!0},{onCancel:()=>{logger25.log("Command cancelled by the user. Exiting..."),process.exit(1);}});selectedDirectory=directory;}try{let templateDestination=path8.isAbsolute(selectedDirectory)?selectedDirectory:path8.join(process.cwd(),selectedDirectory);logger25.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger25.log("\u{1F4E6} Downloading sandbox template...");try{let gitPath=`github:storybookjs/sandboxes/${selectedTemplate}/${init?"after-storybook":"before-storybook"}#${branch}`;if(await downloadTemplate(gitPath,{force:!0,dir:templateDestination}),(await readdir(templateDestination)).length===0)throw new Error(dedent`Template downloaded from ${chalk12.blue(gitPath)} is empty.
462
- Are you use it exists? Or did you want to set ${chalk12.yellow(selectedTemplate)} to inDevelopment first?`)}catch(err){throw logger25.error(`\u{1F6A8} Failed to download sandbox template: ${err.message}`),err}let initMessage=init?chalk12.yellow(`yarn install
463
- yarn storybook`):`Recreate your setup, then ${chalk12.yellow("npx storybook@latest init")}`;logger25.info((0,import_boxen4.default)(dedent`
482
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),templateId=await promptSelectedTemplate(choices)),!!!(templateId??null)){logger25.error("Somehow we got no templates. Please rerun this command!");return}if(selectedConfig=allTemplates[templateId],!selectedConfig)throw new Error("\u{1F6A8} Sandbox: please specify a valid template type")}let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||templateId;if(selectedDirectory&&existsSync(`${selectedDirectory}`)&&logger25.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=>existsSync(directoryName)?`${directoryName} already exists. Please choose another name.`:!0},{onCancel:()=>{logger25.log("Command cancelled by the user. Exiting..."),process.exit(1);}});selectedDirectory=directory;}try{let templateDestination=path8.isAbsolute(selectedDirectory)?selectedDirectory:path8.join(process.cwd(),selectedDirectory);logger25.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger25.log(`\u{1F4E6} Downloading sandbox template (${chalk12.bold(downloadType)})...`);try{let gitPath=`github:storybookjs/sandboxes/${templateId}/${downloadType}#${branch}`;if(await downloadTemplate(gitPath,{force:!0,dir:templateDestination}),(await readdir(templateDestination)).length===0){let selected=chalk12.yellow(templateId);throw new Error(dedent`
483
+ Template downloaded from ${chalk12.blue(gitPath)} is empty.
484
+ Are you use it exists? Or did you want to set ${selected} to inDevelopment first?
485
+ `)}if(downloadType==="before-storybook"&&init){let before=process.cwd();process.chdir(templateDestination),await doInitiate({...options},pkg2),process.chdir(before);}}catch(err){throw logger25.error(`\u{1F6A8} Failed to download sandbox template: ${err.message}`),err}let initMessage=init?chalk12.yellow(dedent`
486
+ yarn install
487
+ yarn storybook
488
+ `):`Recreate your setup, then ${chalk12.yellow("npx storybook@latest init")}`;logger25.info((0,import_boxen5.default)(dedent`
464
489
  🎉 Your Storybook reproduction project is ready to use! 🎉
465
490
 
466
491
  ${chalk12.yellow(`cd ${selectedDirectory}`)}
@@ -481,7 +506,7 @@ yarn storybook`):`Recreate your setup, then ${chalk12.yellow("npx storybook@late
481
506
  `:dedent`
482
507
  Broken build, fix the error above.
483
508
  You may need to refresh the browser.
484
- `),logger.line();}var dev=async cliOptions=>{process.env.NODE_ENV=process.env.NODE_ENV||"development";let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",configType:"DEVELOPMENT",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,cache,packageJson:sync({cwd:__dirname}).packageJson};await withTelemetry("dev",{cliOptions,presetOptions:options,printError},()=>buildDevStandalone(options));};var build=async cliOptions=>{let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",outputDir:cliOptions.outputDir||"./storybook-static",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,configType:"PRODUCTION",cache:cache,packageJson:sync({cwd:__dirname}).packageJson};await withTelemetry("build",{cliOptions,presetOptions:options},()=>buildStaticStandalone(options));};var import_boxen5=__toESM(require_boxen());function getPrimaryVersion(name,installationMetadata){if(!name)return;let packageMetadata=installationMetadata?.dependencies[name];if(packageMetadata)return packageMetadata[0]?.version}function getMismatchingVersionsWarnings(installationMetadata,allDependencies){if(!installationMetadata)return;let messages=[];try{let frameworkPackageName=Object.keys(installationMetadata?.dependencies||[]).find(packageName=>Object.keys(frameworkPackages).includes(packageName)),cliVersion=getPrimaryVersion("@storybook/cli",installationMetadata)||getPrimaryVersion("storybook",installationMetadata),frameworkVersion=getPrimaryVersion(frameworkPackageName,installationMetadata);if(!cliVersion||!frameworkVersion||semver.eq(cliVersion,frameworkVersion))return;messages.push(`${chalk12.bold("Attention:")} There seems to be a mismatch between your Storybook package versions. This can result in a broken Storybook installation.`);let versionToCompare,packageToDisplay;semver.lt(cliVersion,frameworkVersion)?(versionToCompare=frameworkVersion,packageToDisplay=frameworkPackageName):(versionToCompare=cliVersion,packageToDisplay="storybook"),messages.push(`The version of your storybook core packages should align with ${chalk12.yellow(versionToCompare)} (from the ${chalk12.cyan(packageToDisplay)} package) or higher.`);let filteredDependencies=Object.entries(installationMetadata?.dependencies||[]).filter(([name,packages])=>Object.keys(versions_default).includes(name)?packages[0].version!==versionToCompare:!1);if(filteredDependencies.length>0){let packageJsonSuffix="(in your package.json)";messages.push("Based on your lockfile, these dependencies should be upgraded:",filteredDependencies.map(([name,dep])=>`${chalk12.hex("#ff9800")(name)}: ${dep[0].version} ${allDependencies?.[name]?packageJsonSuffix:""}`).sort((a,b)=>(b.includes(packageJsonSuffix)?1:0)-(a.includes(packageJsonSuffix)?1:0)).join(`
509
+ `),logger.line();}var dev=async cliOptions=>{process.env.NODE_ENV=process.env.NODE_ENV||"development";let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",configType:"DEVELOPMENT",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,cache,packageJson:sync({cwd:__dirname}).packageJson};await withTelemetry("dev",{cliOptions,presetOptions:options,printError},()=>buildDevStandalone(options));};var build=async cliOptions=>{let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",outputDir:cliOptions.outputDir||"./storybook-static",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,configType:"PRODUCTION",cache:cache,packageJson:sync({cwd:__dirname}).packageJson};await withTelemetry("build",{cliOptions,presetOptions:options},()=>buildStaticStandalone(options));};var import_boxen6=__toESM(require_boxen());function getPrimaryVersion(name,installationMetadata){if(!name)return;let packageMetadata=installationMetadata?.dependencies[name];if(packageMetadata)return packageMetadata[0]?.version}function getMismatchingVersionsWarnings(installationMetadata,allDependencies){if(!installationMetadata)return;let messages=[];try{let frameworkPackageName=Object.keys(installationMetadata?.dependencies||[]).find(packageName=>Object.keys(frameworkPackages).includes(packageName)),cliVersion=getPrimaryVersion("@storybook/cli",installationMetadata)||getPrimaryVersion("storybook",installationMetadata),frameworkVersion=getPrimaryVersion(frameworkPackageName,installationMetadata);if(!cliVersion||!frameworkVersion||semver.eq(cliVersion,frameworkVersion))return;messages.push(`${chalk12.bold("Attention:")} There seems to be a mismatch between your Storybook package versions. This can result in a broken Storybook installation.`);let versionToCompare,packageToDisplay;semver.lt(cliVersion,frameworkVersion)?(versionToCompare=frameworkVersion,packageToDisplay=frameworkPackageName):(versionToCompare=cliVersion,packageToDisplay="storybook"),messages.push(`The version of your storybook core packages should align with ${chalk12.yellow(versionToCompare)} (from the ${chalk12.cyan(packageToDisplay)} package) or higher.`);let filteredDependencies=Object.entries(installationMetadata?.dependencies||[]).filter(([name,packages])=>Object.keys(versions_default).includes(name)?packages[0].version!==versionToCompare:!1);if(filteredDependencies.length>0){let packageJsonSuffix="(in your package.json)";messages.push("Based on your lockfile, these dependencies should be upgraded:",filteredDependencies.map(([name,dep])=>`${chalk12.hex("#ff9800")(name)}: ${dep[0].version} ${allDependencies?.[name]?packageJsonSuffix:""}`).sort((a,b)=>(b.includes(packageJsonSuffix)?1:0)-(a.includes(packageJsonSuffix)?1:0)).join(`
485
510
  `));}return messages.push(`You can run ${chalk12.cyan("npx storybook@latest upgrade")} to upgrade all of your Storybook packages to the latest version.
486
511
 
487
512
  Alternatively you can try manually changing the versions to match in your package.json. We also recommend regenerating your lockfile, or running the following command to possibly deduplicate your Storybook package versions: ${chalk12.cyan(installationMetadata?.dedupeCommand)}`),messages.join(`
@@ -490,12 +515,12 @@ yarn storybook`):`Recreate your setup, then ${chalk12.yellow("npx storybook@late
490
515
  [Storybook doctor] ❌ Unable to determine Storybook version so the command will not proceed.
491
516
  🤔 Are you running storybook doctor from your project directory? Please specify your Storybook config directory with the --config-dir flag.
492
517
  `),process.exit(1));let incompatibleAddonList=await getIncompatibleAddons(mainConfig);incompatibleAddonList.length>0&&diagnosticMessages.push(incompatibleAddons.prompt({incompatibleAddonList}));let installationMetadata=await packageManager.findInstallations(["@storybook/*","storybook"]),allDependencies=await packageManager.getAllDependencies(),mismatchingVersionMessage=getMismatchingVersionsWarnings(installationMetadata,allDependencies);mismatchingVersionMessage?diagnosticMessages.push(mismatchingVersionMessage):diagnosticMessages.push(getDuplicatedDepsWarnings(installationMetadata)?.join(`
493
- `)),logger28.info();let finalMessages=diagnosticMessages.filter(Boolean);finalMessages.length>0?(finalMessages.push(`You can find the full logs in ${chalk12.cyan(LOG_FILE_PATH2)}`),logger28.info((0, import_boxen5.default)(finalMessages.join(`
518
+ `)),logger28.info();let finalMessages=diagnosticMessages.filter(Boolean);finalMessages.length>0?(finalMessages.push(`You can find the full logs in ${chalk12.cyan(LOG_FILE_PATH2)}`),logger28.info((0, import_boxen6.default)(finalMessages.join(`
494
519
 
495
520
  -------
496
521
 
497
- `),{borderStyle:"round",padding:1,title:"Diagnostics",borderColor:"red"})),await move(TEMP_LOG_FILE_PATH2,join(process.cwd(),LOG_FILE_NAME2),{overwrite:!0})):(logger28.info("\u{1F973} Your Storybook project looks good!"),await remove(TEMP_LOG_FILE_PATH2)),logger28.info(),cleanup2();};addToGlobalContext("cliVersion",versions_default.storybook);var pkg=sync({cwd:__dirname}).packageJson,consoleLogger=console,command=name=>program.command(name).option("--disable-telemetry","disable sending telemetry data",process.env.STORYBOOK_DISABLE_TELEMETRY&&process.env.STORYBOOK_DISABLE_TELEMETRY!=="false").option("--debug","Get more logs in debug mode",!1).option("--enable-crash-reports","enable sending crash reports to telemetry data");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(()=>process.exit(1));});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));command("babelrc").description("generate the default storybook babel config into your current working directory").action(()=>generateStorybookBabelConfigInCWD());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").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").action(async options=>upgrade(options).catch(()=>process.exit(1)));command("info").description("Prints debugging information about the local environment").action(async()=>{consoleLogger.log(chalk12.bold(`
498
- Storybook Environment Info:`));let activePackageManager=(await JsPackageManagerFactory.getPackageManager()).type.replace(/\d/,""),output=await envinfo.run({System:["OS","CPU","Shell"],Binaries:["Node","Yarn","npm","pnpm"],Browsers:["Chrome","Edge","Firefox","Safari"],npmPackages:"{@storybook/*,*storybook*,sb,chromatic}",npmGlobalPackages:"{@storybook/*,*storybook*,sb,chromatic}"}),activePackageManagerLine=output.match(new RegExp(`${activePackageManager}:.*`,"i"));consoleLogger.log(output.replace(activePackageManagerLine,chalk12.bold(`${activePackageManagerLine} <----- active`)));});command("migrate [migration]").description("Run a Storybook codemod migration on your source files").option("-l --list","List available migrations").option("-g --glob <glob>","Glob for files upon which to apply the migration","**/*.js").option("-p --parser <babel | babylon | flow | ts | tsx>","jscodeshift parser").option("-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:glob2,dryRun,list,rename,parser})=>{migrate(migration,{configDir,glob:glob2,dryRun,list,rename,parser,logger:consoleLogger}).catch(err=>{logger.error(err),process.exit(1);});});command("extract [location] [output]").description("extract stories.json from a built version").action((location="storybook-static",output=path8.join(location,"stories.json"))=>extract(location,output).catch(e=>{logger.error(e),process.exit(1);}));command("sandbox [filterValue]").alias("repro").description("Create a sandbox 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)=>sandbox({filterValue,...options}).catch(e=>{logger.error(e),process.exit(1);}));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=>{logger.error(e),process.exit(1);}));command("automigrate [fixId]").description("Check storybook for incompatibilities or migrations and apply fixes").option("-y --yes","Skip prompting the user").option("-n --dry-run","Only check for fixes, do not actually run them").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager").option("-N --use-npm","Use npm as package manager (deprecated)").option("-l --list","List available migrations").option("-c, --config-dir <dir-name>","Directory of Storybook configurations to migrate").option("-s --skip-install","Skip installing deps").option("--renderer <renderer-pkg-name>","The renderer package for the framework Storybook is using.").action(async(fixId,options)=>{await automigrate({fixId,...options}).catch(e=>{logger.error(e),process.exit(1);});});command("doctor").description("Check Storybook for known problems and provide suggestions or fixes").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager").option("-c, --config-dir <dir-name>","Directory of Storybook configuration").action(async options=>{await doctor(options).catch(e=>{logger.error(e),process.exit(1);});});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("--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("--initial-path [path]","URL path to be appended when visiting Storybook for the first time").action(async options=>{logger.setLevel(program.loglevel),consoleLogger.log(chalk12.bold(`${pkg.name} v${pkg.version}`)+chalk12.reset(`
522
+ `),{borderStyle:"round",padding:1,title:"Diagnostics",borderColor:"red"})),await move(TEMP_LOG_FILE_PATH2,join(process.cwd(),LOG_FILE_NAME2),{overwrite:!0})):(logger28.info("\u{1F973} Your Storybook project looks good!"),await remove(TEMP_LOG_FILE_PATH2)),logger28.info(),cleanup2();};addToGlobalContext("cliVersion",versions_default.storybook);var pkg=sync({cwd:__dirname}).packageJson,consoleLogger=console,command=name=>program.command(name).option("--disable-telemetry","disable sending telemetry data",process.env.STORYBOOK_DISABLE_TELEMETRY&&process.env.STORYBOOK_DISABLE_TELEMETRY!=="false").option("--debug","Get more logs in debug mode",!1).option("--enable-crash-reports","enable sending crash reports to telemetry data");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).catch(()=>process.exit(1));});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));command("babelrc").description("generate the default storybook babel config into your current working directory").action(()=>generateStorybookBabelConfigInCWD());command("upgrade").description(`Upgrade your Storybook packages to v${versions_default.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("-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) (deprecated)").option("-p --prerelease","Upgrade to the pre-release packages (deprecated)").option("-s --skip-check","Skip postinstall version and automigration checks").option("-c, --config-dir <dir-name>","Directory where to load Storybook configurations from").action(async options=>upgrade(options).catch(()=>process.exit(1)));command("info").description("Prints debugging information about the local environment").action(async()=>{consoleLogger.log(chalk12.bold(`
523
+ Storybook Environment Info:`));let activePackageManager=(await JsPackageManagerFactory.getPackageManager()).type.replace(/\d/,""),output=await envinfo.run({System:["OS","CPU","Shell"],Binaries:["Node","Yarn","npm","pnpm"],Browsers:["Chrome","Edge","Firefox","Safari"],npmPackages:"{@storybook/*,*storybook*,sb,chromatic}",npmGlobalPackages:"{@storybook/*,*storybook*,sb,chromatic}"}),activePackageManagerLine=output.match(new RegExp(`${activePackageManager}:.*`,"i"));consoleLogger.log(output.replace(activePackageManagerLine,chalk12.bold(`${activePackageManagerLine} <----- active`)));});command("migrate [migration]").description("Run a Storybook codemod migration on your source files").option("-l --list","List available migrations").option("-g --glob <glob>","Glob for files upon which to apply the migration","**/*.js").option("-p --parser <babel | babylon | flow | ts | tsx>","jscodeshift parser").option("-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:glob2,dryRun,list,rename,parser})=>{migrate(migration,{configDir,glob:glob2,dryRun,list,rename,parser,logger:consoleLogger}).catch(err=>{logger.error(err),process.exit(1);});});command("extract [location] [output]").description("extract stories.json from a built version").action((location="storybook-static",output=path8.join(location,"stories.json"))=>extract(location,output).catch(e=>{logger.error(e),process.exit(1);}));command("sandbox [filterValue]").alias("repro").description("Create a sandbox 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)=>sandbox({filterValue,...options},pkg).catch(e=>{logger.error(e),process.exit(1);}));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=>{logger.error(e),process.exit(1);}));command("automigrate [fixId]").description("Check storybook for incompatibilities or migrations and apply fixes").option("-y --yes","Skip prompting the user").option("-n --dry-run","Only check for fixes, do not actually run them").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager").option("-N --use-npm","Use npm as package manager (deprecated)").option("-l --list","List available migrations").option("-c, --config-dir <dir-name>","Directory of Storybook configurations to migrate").option("-s --skip-install","Skip installing deps").option("--renderer <renderer-pkg-name>","The renderer package for the framework Storybook is using.").action(async(fixId,options)=>{await automigrate({fixId,...options}).catch(e=>{logger.error(e),process.exit(1);});});command("doctor").description("Check Storybook for known problems and provide suggestions or fixes").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager").option("-c, --config-dir <dir-name>","Directory of Storybook configuration").action(async options=>{await doctor(options).catch(e=>{logger.error(e),process.exit(1);});});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("--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("--initial-path [path]","URL path to be appended when visiting Storybook for the first time").action(async options=>{logger.setLevel(program.loglevel),consoleLogger.log(chalk12.bold(`${pkg.name} v${pkg.version}`)+chalk12.reset(`
499
524
  `)),getEnvConfig(options,{port:"SBCONFIG_PORT",host:"SBCONFIG_HOSTNAME",staticDir:"SBCONFIG_STATIC_DIR",configDir:"SBCONFIG_CONFIG_DIR",ci:"CI"}),parseInt(`${options.port}`,10)&&(options.port=parseInt(`${options.port}`,10)),await dev({...options,packageJson:pkg}).catch(()=>process.exit(1));});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("--test","Build stories optimized for testing purposes.").action(async options=>{process.env.NODE_ENV=process.env.NODE_ENV||"production",logger.setLevel(program.loglevel),consoleLogger.log(chalk12.bold(`${pkg.name} v${pkg.version}
500
525
  `)),getEnvConfig(options,{staticDir:"SBCONFIG_STATIC_DIR",outputDir:"SBCONFIG_OUTPUT_DIR",configDir:"SBCONFIG_CONFIG_DIR"}),await build({...options,packageJson:pkg,test:!!options.test||process.env.SB_TESTBUILD==="true"}).catch(()=>process.exit(1));});program.on("command:*",([invalidCmd])=>{consoleLogger.error(` Invalid command: %s.
501
526
  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(`
package/dist/index.d.ts CHANGED
@@ -87,6 +87,7 @@ declare const _default: {
87
87
  '@storybook/telemetry': string;
88
88
  '@storybook/theming': string;
89
89
  '@storybook/types': string;
90
+ '@storybook/test': string;
90
91
  '@storybook/vue': string;
91
92
  '@storybook/vue-vite': string;
92
93
  '@storybook/vue-webpack5': string;
@@ -193,6 +194,11 @@ declare abstract class JsPackageManager {
193
194
  /**
194
195
  * Return an array of strings matching following format: `<package_name>@<package_latest_version>`
195
196
  *
197
+ * For packages in the storybook monorepo, when the latest version is equal to the version of the current CLI
198
+ * the version is not added to the string.
199
+ *
200
+ * When a package is in the monorepo, and the version is not equal to the CLI version, the version is taken from the versions.ts file and added to the string.
201
+ *
196
202
  * @param packages
197
203
  */
198
204
  getVersionedPackages(packages: string[]): Promise<string[]>;