@storybook/cli 0.0.0-pr-26077-sha-aea7ea3d → 0.0.0-pr-26067-sha-847cb0b0

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,6 +1,6 @@
1
1
  import { __commonJS, __toESM, __require } from './chunk-3BMY5HTZ.mjs';
2
2
  import program from 'commander';
3
- import chalk16 from 'chalk';
3
+ import chalk15 from 'chalk';
4
4
  import envinfo from 'envinfo';
5
5
  import leven from 'leven';
6
6
  import { sync } from 'read-pkg-up';
@@ -8,16 +8,16 @@ import invariant5 from 'tiny-invariant';
8
8
  import { logger, instance } from '@storybook/node-logger';
9
9
  import { addToGlobalContext, telemetry } from '@storybook/telemetry';
10
10
  import { versions, removeAddon, JsPackageManagerFactory, parseList, getEnvConfig, getStorybookInfo, isCorePackage, getCoercedStorybookVersion, cache, commandLog, paddedLog, HandledError, serverRequire, loadMainConfig, frameworkPackages, rendererPackages, commonGlobOptions, builderPackages, getPackageDetails } from '@storybook/core-common';
11
- import { withTelemetry, buildDevStandalone, buildStaticStandalone } from '@storybook/core-server';
12
11
  import prompts5 from 'prompts';
12
+ import { withTelemetry, buildDevStandalone, buildStaticStandalone } from '@storybook/core-server';
13
13
  import { UpgradeStorybookToLowerVersionError, UpgradeStorybookToSameVersionError, GenerateNewProjectOnInitError, NxProjectDetectedError, MissingAngularJsonError } from '@storybook/core-events/server-errors';
14
- import dedent21, { dedent } from 'ts-dedent';
14
+ import dedent20, { dedent } from 'ts-dedent';
15
15
  import process2 from 'process';
16
16
  import semver, { prerelease, lt, eq, validRange, minVersion, satisfies } from 'semver';
17
17
  import * as fs2 from 'fs';
18
18
  import fs2__default, { existsSync as existsSync$1 } from 'fs';
19
19
  import findUp2 from 'find-up';
20
- import path7, { join, isAbsolute, resolve, basename, dirname } from 'path';
20
+ import path7, { join, isAbsolute, resolve, dirname } from 'path';
21
21
  import fse, { move, remove, existsSync, readdir, createWriteStream, readdirSync, readFile, readJson, writeJson } from 'fs-extra';
22
22
  import 'strip-json-comments';
23
23
  import downloadTarball from '@ndelangen/get-tarball';
@@ -46,7 +46,7 @@ var require_eastasianwidth=__commonJS({"../../node_modules/eastasianwidth/eastas
46
46
  `).map(line=>exec(line,columns,options)).join(`
47
47
  `)}__toESM(require_cli_boxes(),1);var NEWLINE=`
48
48
  `,PAD=" ",NONE="none",terminalColumns=()=>{let{env,stdout,stderr}=process2;return stdout?.columns?stdout.columns: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},getBorderWidth=borderStyle=>borderStyle===NONE?0:2,getBorderChars=borderStyle=>{let sides=["topLeft","topRight","bottomRight","bottomLeft","left","right","top","bottom"],characters;if(borderStyle===NONE){borderStyle={};for(let side of sides)borderStyle[side]="";}if(typeof borderStyle=="string"){if(characters=import_cli_boxes.default[borderStyle],!characters)throw new TypeError(`Invalid border style: ${borderStyle}`)}else {typeof borderStyle?.vertical=="string"&&(borderStyle.left=borderStyle.vertical,borderStyle.right=borderStyle.vertical),typeof borderStyle?.horizontal=="string"&&(borderStyle.top=borderStyle.horizontal,borderStyle.bottom=borderStyle.horizontal);for(let side of sides)if(borderStyle[side]===null||typeof borderStyle[side]!="string")throw new TypeError(`Invalid border style: ${side}`);characters=borderStyle;}return characters},makeTitle=(text,horizontal,alignment)=>{let title="",textWidth=stringWidth(text);switch(alignment){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,width,textAlignment,height})=>{text=(0, import_ansi_align.default)(text,{align:textAlignment});let lines=text.split(NEWLINE),textWidth=widestLine(text),max=width-padding.left-padding.right;if(textWidth>max){let newLines=[];for(let line of lines){let createdLines=wrapAnsi(line,max,{hard:!0}),alignedLinesArray=(0, import_ansi_align.default)(createdLines,{align:textAlignment}).split(`
49
- `),longestLength=Math.max(...alignedLinesArray.map(s=>stringWidth(s)));for(let alignedLine of alignedLinesArray){let paddedLine;switch(textAlignment){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;}textAlignment==="center"&&textWidth<max?lines=lines.map(line=>PAD.repeat((max-textWidth)/2)+line):textAlignment==="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(width-stringWidth(line)>0)switch(textAlignment){case"center":return line+PAD.repeat(width-stringWidth(line));case"right":return line+PAD.repeat(width-stringWidth(line));default:return line+PAD.repeat(width-stringWidth(line))}return line}),padding.top>0&&(lines=[...Array.from({length:padding.top}).fill(PAD.repeat(width)),...lines]),padding.bottom>0&&(lines=[...lines,...Array.from({length:padding.bottom}).fill(PAD.repeat(width))]),height&&lines.length>height?lines=lines.slice(0,height):height&&lines.length<height&&(lines=[...lines,...Array.from({length:height-lines.length}).fill(PAD.repeat(width))]),lines.join(NEWLINE)},boxContent=(content,contentWidth,options)=>{let colorizeBorder=border=>{let newBorder=options.borderColor?getColorFn(options.borderColor)(border):border;return options.dimBorder?chalk16.dim(newBorder):newBorder},colorizeContent=content2=>options.backgroundColor?getBGColorFn(options.backgroundColor)(content2):content2,chars=getBorderChars(options.borderStyle),columns=terminalColumns(),marginLeft=PAD.repeat(options.margin.left);if(options.float==="center"){let marginWidth=Math.max((columns-contentWidth-getBorderWidth(options.borderStyle))/2,0);marginLeft=PAD.repeat(marginWidth);}else if(options.float==="right"){let marginWidth=Math.max(columns-contentWidth-options.margin.right-getBorderWidth(options.borderStyle),0);marginLeft=PAD.repeat(marginWidth);}let result="";options.margin.top&&(result+=NEWLINE.repeat(options.margin.top)),(options.borderStyle!==NONE||options.title)&&(result+=colorizeBorder(marginLeft+chars.topLeft+(options.title?makeTitle(options.title,chars.top.repeat(contentWidth),options.titleAlignment):chars.top.repeat(contentWidth))+chars.topRight)+NEWLINE);let lines=content.split(NEWLINE);return result+=lines.map(line=>marginLeft+colorizeBorder(chars.left)+colorizeContent(line)+colorizeBorder(chars.right)).join(NEWLINE),options.borderStyle!==NONE&&(result+=NEWLINE+colorizeBorder(marginLeft+chars.bottomLeft+chars.bottom.repeat(contentWidth)+chars.bottomRight)),options.margin.bottom&&(result+=NEWLINE.repeat(options.margin.bottom)),result},sanitizeOptions=options=>{if(options.fullscreen&&process2?.stdout){let newDimensions=[process2.stdout.columns,process2.stdout.rows];typeof options.fullscreen=="function"&&(newDimensions=options.fullscreen(...newDimensions)),options.width||(options.width=newDimensions[0]),options.height||(options.height=newDimensions[1]);}return options.width&&(options.width=Math.max(1,options.width-getBorderWidth(options.borderStyle))),options.height&&(options.height=Math.max(1,options.height-getBorderWidth(options.borderStyle))),options},formatTitle=(title,borderStyle)=>borderStyle===NONE?title:` ${title} `,determineDimensions=(text,options)=>{options=sanitizeOptions(options);let widthOverride=options.width!==void 0,columns=terminalColumns(),borderWidth=getBorderWidth(options.borderStyle),maxWidth=columns-options.margin.left-options.margin.right-borderWidth,widest=widestLine(wrapAnsi(text,columns-borderWidth,{hard:!0,trim:!1}))+options.padding.left+options.padding.right;if(options.title&&widthOverride?(options.title=options.title.slice(0,Math.max(0,options.width-2)),options.title&&(options.title=formatTitle(options.title,options.borderStyle))):options.title&&(options.title=options.title.slice(0,Math.max(0,maxWidth-2)),options.title&&(options.title=formatTitle(options.title,options.borderStyle),stringWidth(options.title)>widest&&(options.width=stringWidth(options.title)))),options.width=options.width?options.width:widest,!widthOverride){if(options.margin.left&&options.margin.right&&options.width>maxWidth){let multiplier=(columns-options.width-borderWidth)/(options.margin.left+options.margin.right);options.margin.left=Math.max(0,Math.floor(options.margin.left*multiplier)),options.margin.right=Math.max(0,Math.floor(options.margin.right*multiplier));}options.width=Math.min(options.width,columns-borderWidth-options.margin.left-options.margin.right);}return options.width-(options.padding.left+options.padding.right)<=0&&(options.padding.left=0,options.padding.right=0),options.height&&options.height-(options.padding.top+options.padding.bottom)<=0&&(options.padding.top=0,options.padding.bottom=0),options},isHex=color=>color.match(/^#(?:[0-f]{3}){1,2}$/i),isColorValid=color=>typeof color=="string"&&(chalk16[color]??isHex(color)),getColorFn=color=>isHex(color)?chalk16.hex(color):chalk16[color],getBGColorFn=color=>isHex(color)?chalk16.bgHex(color):chalk16[camelCase(["bg",color])];function boxen(text,options){if(options={padding:0,borderStyle:"single",dimBorder:!1,textAlignment:"left",float:"left",titleAlignment:"left",...options},options.align&&(options.textAlignment=options.align),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`);return options.padding=getObject(options.padding),options.margin=getObject(options.margin),options=determineDimensions(text,options),text=makeContentText(text,options),boxContent(text,options.width,options)}function eqMajor(versionRange,major){return validRange(versionRange)?minVersion(versionRange)?.major===major:!1}var externalFrameworks=[{name:"qwik",packageName:"storybook-framework-qwik"},{name:"solid",frameworks:["storybook-solidjs-vite"],renderer:"storybook-solidjs"}];var ProjectType=(ProjectType2=>(ProjectType2.UNDETECTED="UNDETECTED",ProjectType2.UNSUPPORTED="UNSUPPORTED",ProjectType2.REACT="REACT",ProjectType2.REACT_SCRIPTS="REACT_SCRIPTS",ProjectType2.REACT_NATIVE="REACT_NATIVE",ProjectType2.REACT_PROJECT="REACT_PROJECT",ProjectType2.WEBPACK_REACT="WEBPACK_REACT",ProjectType2.NEXTJS="NEXTJS",ProjectType2.VUE3="VUE3",ProjectType2.ANGULAR="ANGULAR",ProjectType2.EMBER="EMBER",ProjectType2.WEB_COMPONENTS="WEB_COMPONENTS",ProjectType2.HTML="HTML",ProjectType2.QWIK="QWIK",ProjectType2.PREACT="PREACT",ProjectType2.SVELTE="SVELTE",ProjectType2.SVELTEKIT="SVELTEKIT",ProjectType2.SERVER="SERVER",ProjectType2.NX="NX",ProjectType2.SOLID="SOLID",ProjectType2))(ProjectType||{});var supportedTemplates=[{preset:"VUE3",dependencies:{vue:versionRange=>versionRange==="next"||eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},{preset:"EMBER",dependencies:["ember-cli"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"NEXTJS",dependencies:["next"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"QWIK",dependencies:["@builder.io/qwik"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"REACT_PROJECT",peerDependencies:["react"],matcherFunction:({peerDependencies})=>peerDependencies?.every(Boolean)??!0},{preset:"REACT_NATIVE",dependencies:["react-native","react-native-scripts"],matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},{preset:"REACT_SCRIPTS",files:["/node_modules/.bin/react-scripts"],dependencies:["react-scripts"],matcherFunction:({dependencies,files})=>(dependencies?.every(Boolean)||files?.every(Boolean))??!1},{preset:"ANGULAR",dependencies:["@angular/core"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"WEB_COMPONENTS",dependencies:["lit-element","lit-html","lit"],matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},{preset:"PREACT",dependencies:["preact"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"SVELTEKIT",dependencies:["@sveltejs/kit"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"SVELTE",dependencies:["svelte"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"SOLID",dependencies:["solid-js"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"WEBPACK_REACT",dependencies:["react","webpack"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"REACT",dependencies:["react"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0}],unsupportedTemplate={preset:"UNSUPPORTED",dependencies:{nuxt:versionRange=>eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},notInstallableProjectTypes=["UNDETECTED","UNSUPPORTED","NX"],installableProjectTypes=Object.values(ProjectType).filter(type=>!notInstallableProjectTypes.includes(type)).map(type=>type.toLowerCase());function getCliDir(){return dirname(__require.resolve("@storybook/cli/package.json"))}var resolveUsingBranchInstall=async(packageManager,request)=>{let tempDirectory=tempy.directory(),version=versions[request]||await packageManager.latestVersion(request),url=getNpmTarballUrl(request,version,{registry:await packageManager.getRegistryURL()});return await downloadTarball({url,dir:tempDirectory}),join(tempDirectory,"package")};async function getRendererDir(packageManager,renderer){let externalFramework=externalFrameworks.find(framework=>framework.name===renderer),frameworkPackageName=externalFramework?.renderer||externalFramework?.packageName||`@storybook/${renderer}`,packageJsonPath=join(frameworkPackageName,"package.json"),errors=[];try{return dirname(__require.resolve(packageJsonPath,{paths:[process.cwd()]}))}catch(e){invariant5(e instanceof Error),errors.push(e);}try{return await resolveUsingBranchInstall(packageManager,frameworkPackageName)}catch(e){invariant5(e instanceof Error),errors.push(e);}throw new Error(`Cannot find ${packageJsonPath}, ${errors.map(e=>e.stack).join(`
49
+ `),longestLength=Math.max(...alignedLinesArray.map(s=>stringWidth(s)));for(let alignedLine of alignedLinesArray){let paddedLine;switch(textAlignment){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;}textAlignment==="center"&&textWidth<max?lines=lines.map(line=>PAD.repeat((max-textWidth)/2)+line):textAlignment==="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(width-stringWidth(line)>0)switch(textAlignment){case"center":return line+PAD.repeat(width-stringWidth(line));case"right":return line+PAD.repeat(width-stringWidth(line));default:return line+PAD.repeat(width-stringWidth(line))}return line}),padding.top>0&&(lines=[...Array.from({length:padding.top}).fill(PAD.repeat(width)),...lines]),padding.bottom>0&&(lines=[...lines,...Array.from({length:padding.bottom}).fill(PAD.repeat(width))]),height&&lines.length>height?lines=lines.slice(0,height):height&&lines.length<height&&(lines=[...lines,...Array.from({length:height-lines.length}).fill(PAD.repeat(width))]),lines.join(NEWLINE)},boxContent=(content,contentWidth,options)=>{let colorizeBorder=border=>{let newBorder=options.borderColor?getColorFn(options.borderColor)(border):border;return options.dimBorder?chalk15.dim(newBorder):newBorder},colorizeContent=content2=>options.backgroundColor?getBGColorFn(options.backgroundColor)(content2):content2,chars=getBorderChars(options.borderStyle),columns=terminalColumns(),marginLeft=PAD.repeat(options.margin.left);if(options.float==="center"){let marginWidth=Math.max((columns-contentWidth-getBorderWidth(options.borderStyle))/2,0);marginLeft=PAD.repeat(marginWidth);}else if(options.float==="right"){let marginWidth=Math.max(columns-contentWidth-options.margin.right-getBorderWidth(options.borderStyle),0);marginLeft=PAD.repeat(marginWidth);}let result="";options.margin.top&&(result+=NEWLINE.repeat(options.margin.top)),(options.borderStyle!==NONE||options.title)&&(result+=colorizeBorder(marginLeft+chars.topLeft+(options.title?makeTitle(options.title,chars.top.repeat(contentWidth),options.titleAlignment):chars.top.repeat(contentWidth))+chars.topRight)+NEWLINE);let lines=content.split(NEWLINE);return result+=lines.map(line=>marginLeft+colorizeBorder(chars.left)+colorizeContent(line)+colorizeBorder(chars.right)).join(NEWLINE),options.borderStyle!==NONE&&(result+=NEWLINE+colorizeBorder(marginLeft+chars.bottomLeft+chars.bottom.repeat(contentWidth)+chars.bottomRight)),options.margin.bottom&&(result+=NEWLINE.repeat(options.margin.bottom)),result},sanitizeOptions=options=>{if(options.fullscreen&&process2?.stdout){let newDimensions=[process2.stdout.columns,process2.stdout.rows];typeof options.fullscreen=="function"&&(newDimensions=options.fullscreen(...newDimensions)),options.width||(options.width=newDimensions[0]),options.height||(options.height=newDimensions[1]);}return options.width&&(options.width=Math.max(1,options.width-getBorderWidth(options.borderStyle))),options.height&&(options.height=Math.max(1,options.height-getBorderWidth(options.borderStyle))),options},formatTitle=(title,borderStyle)=>borderStyle===NONE?title:` ${title} `,determineDimensions=(text,options)=>{options=sanitizeOptions(options);let widthOverride=options.width!==void 0,columns=terminalColumns(),borderWidth=getBorderWidth(options.borderStyle),maxWidth=columns-options.margin.left-options.margin.right-borderWidth,widest=widestLine(wrapAnsi(text,columns-borderWidth,{hard:!0,trim:!1}))+options.padding.left+options.padding.right;if(options.title&&widthOverride?(options.title=options.title.slice(0,Math.max(0,options.width-2)),options.title&&(options.title=formatTitle(options.title,options.borderStyle))):options.title&&(options.title=options.title.slice(0,Math.max(0,maxWidth-2)),options.title&&(options.title=formatTitle(options.title,options.borderStyle),stringWidth(options.title)>widest&&(options.width=stringWidth(options.title)))),options.width=options.width?options.width:widest,!widthOverride){if(options.margin.left&&options.margin.right&&options.width>maxWidth){let multiplier=(columns-options.width-borderWidth)/(options.margin.left+options.margin.right);options.margin.left=Math.max(0,Math.floor(options.margin.left*multiplier)),options.margin.right=Math.max(0,Math.floor(options.margin.right*multiplier));}options.width=Math.min(options.width,columns-borderWidth-options.margin.left-options.margin.right);}return options.width-(options.padding.left+options.padding.right)<=0&&(options.padding.left=0,options.padding.right=0),options.height&&options.height-(options.padding.top+options.padding.bottom)<=0&&(options.padding.top=0,options.padding.bottom=0),options},isHex=color=>color.match(/^#(?:[0-f]{3}){1,2}$/i),isColorValid=color=>typeof color=="string"&&(chalk15[color]??isHex(color)),getColorFn=color=>isHex(color)?chalk15.hex(color):chalk15[color],getBGColorFn=color=>isHex(color)?chalk15.bgHex(color):chalk15[camelCase(["bg",color])];function boxen(text,options){if(options={padding:0,borderStyle:"single",dimBorder:!1,textAlignment:"left",float:"left",titleAlignment:"left",...options},options.align&&(options.textAlignment=options.align),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`);return options.padding=getObject(options.padding),options.margin=getObject(options.margin),options=determineDimensions(text,options),text=makeContentText(text,options),boxContent(text,options.width,options)}function eqMajor(versionRange,major){return validRange(versionRange)?minVersion(versionRange)?.major===major:!1}var externalFrameworks=[{name:"qwik",packageName:"storybook-framework-qwik"},{name:"solid",frameworks:["storybook-solidjs-vite"],renderer:"storybook-solidjs"}];var ProjectType=(ProjectType2=>(ProjectType2.UNDETECTED="UNDETECTED",ProjectType2.UNSUPPORTED="UNSUPPORTED",ProjectType2.REACT="REACT",ProjectType2.REACT_SCRIPTS="REACT_SCRIPTS",ProjectType2.REACT_NATIVE="REACT_NATIVE",ProjectType2.REACT_PROJECT="REACT_PROJECT",ProjectType2.WEBPACK_REACT="WEBPACK_REACT",ProjectType2.NEXTJS="NEXTJS",ProjectType2.VUE3="VUE3",ProjectType2.ANGULAR="ANGULAR",ProjectType2.EMBER="EMBER",ProjectType2.WEB_COMPONENTS="WEB_COMPONENTS",ProjectType2.HTML="HTML",ProjectType2.QWIK="QWIK",ProjectType2.PREACT="PREACT",ProjectType2.SVELTE="SVELTE",ProjectType2.SVELTEKIT="SVELTEKIT",ProjectType2.SERVER="SERVER",ProjectType2.NX="NX",ProjectType2.SOLID="SOLID",ProjectType2))(ProjectType||{});var supportedTemplates=[{preset:"VUE3",dependencies:{vue:versionRange=>versionRange==="next"||eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},{preset:"EMBER",dependencies:["ember-cli"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"NEXTJS",dependencies:["next"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"QWIK",dependencies:["@builder.io/qwik"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"REACT_PROJECT",peerDependencies:["react"],matcherFunction:({peerDependencies})=>peerDependencies?.every(Boolean)??!0},{preset:"REACT_NATIVE",dependencies:["react-native","react-native-scripts"],matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},{preset:"REACT_SCRIPTS",files:["/node_modules/.bin/react-scripts"],dependencies:["react-scripts"],matcherFunction:({dependencies,files})=>(dependencies?.every(Boolean)||files?.every(Boolean))??!1},{preset:"ANGULAR",dependencies:["@angular/core"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"WEB_COMPONENTS",dependencies:["lit-element","lit-html","lit"],matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},{preset:"PREACT",dependencies:["preact"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"SVELTEKIT",dependencies:["@sveltejs/kit"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"SVELTE",dependencies:["svelte"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"SOLID",dependencies:["solid-js"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"WEBPACK_REACT",dependencies:["react","webpack"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0},{preset:"REACT",dependencies:["react"],matcherFunction:({dependencies})=>dependencies?.every(Boolean)??!0}],unsupportedTemplate={preset:"UNSUPPORTED",dependencies:{nuxt:versionRange=>eqMajor(versionRange,3)},matcherFunction:({dependencies})=>dependencies?.some(Boolean)??!1},notInstallableProjectTypes=["UNDETECTED","UNSUPPORTED","NX"],installableProjectTypes=Object.values(ProjectType).filter(type=>!notInstallableProjectTypes.includes(type)).map(type=>type.toLowerCase());function getCliDir(){return dirname(__require.resolve("@storybook/cli/package.json"))}var resolveUsingBranchInstall=async(packageManager,request)=>{let tempDirectory=tempy.directory(),version=versions[request]||await packageManager.latestVersion(request),url=getNpmTarballUrl(request,version,{registry:await packageManager.getRegistryURL()});return await downloadTarball({url,dir:tempDirectory}),join(tempDirectory,"package")};async function getRendererDir(packageManager,renderer){let externalFramework=externalFrameworks.find(framework=>framework.name===renderer),frameworkPackageName=externalFramework?.renderer||externalFramework?.packageName||`@storybook/${renderer}`,packageJsonPath=join(frameworkPackageName,"package.json"),errors=[];try{return dirname(__require.resolve(packageJsonPath,{paths:[process.cwd()]}))}catch(e){invariant5(e instanceof Error),errors.push(e);}try{return await resolveUsingBranchInstall(packageManager,frameworkPackageName)}catch(e){invariant5(e instanceof Error),errors.push(e);}throw new Error(`Cannot find ${packageJsonPath}, ${errors.map(e=>e.stack).join(`
50
50
 
51
51
  `)}`)}async function getBabelDependencies(packageManager,packageJson){let dependenciesToAdd=[],babelLoaderVersion="^8.0.0-0",babelCoreVersion=packageJson.dependencies["babel-core"]||packageJson.devDependencies["babel-core"];if(babelCoreVersion){let latestCompatibleBabelVersion=await packageManager.latestVersion("babel-core",babelCoreVersion);satisfies(latestCompatibleBabelVersion,"^6.0.0")&&(babelLoaderVersion="^7.0.0");}else if(!packageJson.dependencies["@babel/core"]&&!packageJson.devDependencies["@babel/core"]){let babelCoreInstallVersion=await packageManager.getVersion("@babel/core");dependenciesToAdd.push(`@babel/core@${babelCoreInstallVersion}`);}if(!packageJson.dependencies["babel-loader"]&&!packageJson.devDependencies["babel-loader"]){let babelLoaderInstallVersion=await packageManager.getVersion("babel-loader",babelLoaderVersion);dependenciesToAdd.push(`babel-loader@${babelLoaderInstallVersion}`);}return dependenciesToAdd}function copyTemplate(templateRoot,destination="."){let templateDir=path7.resolve(templateRoot,"template-csf/");if(!fs2__default.existsSync(templateDir))throw new Error("Couldn't find template dir");fse.copySync(templateDir,destination,{overwrite:!0});}var frameworkToRenderer={angular:"angular",ember:"ember",html:"html",nextjs:"react",preact:"preact",qwik:"qwik",react:"react","react-native":"react",server:"react",solid:"solid",svelte:"svelte",sveltekit:"svelte",vue3:"vue","web-components":"web-components"};async function copyTemplateFiles({packageManager,renderer,language,destination,includeCommonAssets=!0}){let languageFolderMapping={typescript:"ts",javascript:"js","typescript-3-8":"ts-3-8","typescript-4-9":"ts-4-9"},templatePath=async()=>{let baseDir=await getRendererDir(packageManager,renderer),assetsDir=join(baseDir,"template","cli"),assetsLanguage=join(assetsDir,languageFolderMapping[language]),assetsJS=join(assetsDir,languageFolderMapping.javascript),assetsTS=join(assetsDir,languageFolderMapping.typescript),assetsTS38=join(assetsDir,languageFolderMapping["typescript-3-8"]);if(await fse.pathExists(assetsLanguage))return assetsLanguage;if(language==="typescript-4-9"&&await fse.pathExists(assetsTS38))return assetsTS38;if(await fse.pathExists(assetsTS))return assetsTS;if(await fse.pathExists(assetsJS))return assetsJS;if(await fse.pathExists(assetsDir))return assetsDir;throw new Error(`Unsupported renderer: ${renderer} (${baseDir})`)},destinationPath=destination??await(async()=>await fse.pathExists("./src")?"./src/stories":"./stories")();if(includeCommonAssets&&await fse.copy(join(getCliDir(),"rendererAssets","common"),destinationPath,{overwrite:!0}),await fse.copy(await templatePath(),destinationPath,{overwrite:!0}),includeCommonAssets){let rendererType=frameworkToRenderer[renderer]||"react";await adjustTemplate(join(destinationPath,"Configure.mdx"),{renderer:rendererType});}}async function adjustTemplate(templatePath,templateData){let template=await fse.readFile(templatePath,"utf8");Object.keys(templateData).forEach(key=>{template=template.replaceAll(`{{${key}}}`,`${templateData[key]}`);}),await fse.writeFile(templatePath,template);}function getStorybookVersionSpecifier(packageJson){let allDeps={...packageJson.dependencies,...packageJson.devDependencies,...packageJson.optionalDependencies},storybookPackage=Object.keys(allDeps).find(name=>versions[name]);if(!storybookPackage)throw new Error("Couldn't find any official storybook packages in package.json");return allDeps[storybookPackage]}async function isNxProject(){return findUp2.sync("nx.json")}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=>fs2.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=findUp2.sync(viteConfigFiles),webpackConfig=findUp2.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"REACT_SCRIPTS":case"ANGULAR":case"REACT_NATIVE":case"NEXTJS":case"EMBER":return "webpack5";default:let{builder}=await prompts5({type:"select",name:"builder",message:`
52
52
  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 fs2.existsSync(configDir)}async function detectPnp(){return !!findUp2.sync([".pnp.js",".pnp.cjs"])}async function detectLanguage(packageManager){let language="javascript";if(fs2.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=path7.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>>;
@@ -94,7 +94,7 @@ We were not able to detect the right builder for your project. Please select one
94
94
  */
95
95
  function getAbsolutePath(value: string): any {
96
96
  return dirname(require.resolve(join(value, 'package.json')))
97
- }`]:[];await configureMain({framework:{name:frameworkInclude,options:options.framework||{}},prefixes,storybookConfigFolder,docs:{autodocs:"tag"},addons:shouldApplyRequireWrapperOnPackageNames?addons.map(addon=>applyRequireWrapper(addon)):addons,extensions,language,...staticDir?{staticDirs:[path7.join("..",staticDir)]}:null,...extraMain,...type!=="framework"?{core:{builder:builderInclude}}:{}});}if(await configurePreview({frameworkPreviewParts,storybookConfigFolder,language,rendererId}),addScripts&&await packageManager.addStorybookCommandInScripts({port:6006}),addComponents){let templateLocation=hasFrameworkTemplates(framework)?framework:rendererId;if(!templateLocation)throw new Error(`Could not find template location for ${framework} or ${rendererId}`);await copyTemplateFiles({renderer:templateLocation,packageManager,language,destination:componentsDestinationPath});}}var ANGULAR_JSON_PATH="angular.json",compoDocPreviewPrefix=dedent21`
97
+ }`]:[];await configureMain({framework:{name:frameworkInclude,options:options.framework||{}},prefixes,storybookConfigFolder,docs:{autodocs:"tag"},addons:shouldApplyRequireWrapperOnPackageNames?addons.map(addon=>applyRequireWrapper(addon)):addons,extensions,language,...staticDir?{staticDirs:[path7.join("..",staticDir)]}:null,...extraMain,...type!=="framework"?{core:{builder:builderInclude}}:{}});}if(await configurePreview({frameworkPreviewParts,storybookConfigFolder,language,rendererId}),addScripts&&await packageManager.addStorybookCommandInScripts({port:6006}),addComponents){let templateLocation=hasFrameworkTemplates(framework)?framework:rendererId;if(!templateLocation)throw new Error(`Could not find template location for ${framework} or ${rendererId}`);await copyTemplateFiles({renderer:templateLocation,packageManager,language,destination:componentsDestinationPath});}}var ANGULAR_JSON_PATH="angular.json",compoDocPreviewPrefix=dedent20`
98
98
  import { setCompodocJson } from "@storybook/addon-docs/angular";
99
99
  import docJson from "../documentation.json";
100
100
  setCompodocJson(docJson);
@@ -107,134 +107,129 @@ We were not able to detect the right builder for your project. Please select one
107
107
  });
108
108
  return config;
109
109
  }
110
- %%`}:{},craVersion=await packageManager.getPackageVersion("react-scripts");if(craVersion===null)throw new Error(dedent21`
110
+ %%`}:{},craVersion=await packageManager.getPackageVersion("react-scripts");if(craVersion===null)throw new Error(dedent20`
111
111
  It looks like you're trying to initialize Storybook in a CRA project that does not have react-scripts installed.
112
112
  Please install it and make sure it's of version 5 or higher, which are the versions supported by Storybook 7.0+.
113
- `);if(!craVersion&&semver.gte(craVersion,"5.0.0"))throw new Error(dedent21`
113
+ `);if(!craVersion&&semver.gte(craVersion,"5.0.0"))throw new Error(dedent20`
114
114
  Storybook 7.0+ doesn't support react-scripts@<5.0.0.
115
115
 
116
116
  https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#create-react-app-dropped-cra4-support
117
- `);let extraPackages=[];extraPackages.push("webpack"),extraPackages.push("prop-types");let extraAddons=[`@storybook/preset-create-react-app@${versions["@storybook/preset-create-react-app"]}`,"@storybook/addon-onboarding"];await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{webpackCompiler:()=>{},extraAddons,extraPackages,staticDir:fs2__default.existsSync(path7.resolve("./public"))?"public":void 0,extraMain});},REACT_SCRIPTS_default=generator5;var generator6=async(packageManager,npmOptions,options)=>{let staticDir;existsSync$1(join(process.cwd(),"public"))&&(staticDir="public"),await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{staticDir,extraAddons:["@storybook/addon-onboarding@^1.0.0"],webpackCompiler:({builder})=>{}},"nextjs");},NEXTJS_default=generator6;var generator7=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"]:[],webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},VUE3_default=generator7;var generator8=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react",{extraAddons:["@storybook/addon-onboarding@^1.0.0"],webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},WEBPACK_REACT_default=generator8;var generator9=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"html",{webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},HTML_default=generator9;var generator10=async(packageManager,npmOptions,options)=>baseGenerator(packageManager,npmOptions,options,"web-components",{extraPackages:["lit"],webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0}),WEB_COMPONENTS_default=generator10;var generator11=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"preact",{webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},PREACT_default=generator11;var generator12=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"svelte",{extensions:["js","jsx","ts","tsx","svelte"]});},SVELTE_default=generator12;var generator13=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"qwik",{},"qwik");},QWIK_default=generator13;var generator14=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"svelte",void 0,"sveltekit");},SVELTEKIT_default=generator14;var generator15=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"solid",{},"solid");},SOLID_default=generator15;var generator16=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"server",{webpackCompiler:()=>"swc",extensions:["json","yaml","yml"]});},SERVER_default=generator16;var SUPPORTED_PROJECTS={"react-vite-ts":{displayName:{type:"React",builder:"Vite",language:"TS"},createScript:{npm:"npm create vite@latest . -- --template react-ts",yarn:"yarn create vite@latest . --template react-ts",pnpm:"pnpm create vite@latest . --template react-ts"}},"nextjs-ts":{displayName:{type:"Next.js",language:"TS"},createScript:{npm:'npm create next-app . -- --typescript --use-npm --eslint --tailwind --no-app --import-alias="@/*" --src-dir',yarn:'yarn create next-app . --typescript --use-yarn --eslint --tailwind --no-app --import-alias="@/*" --src-dir',pnpm:'pnpm create next-app . --typescript --use-pnpm --eslint --tailwind --no-app --import-alias="@/*" --src-dir'}},"vue-vite-ts":{displayName:{type:"Vue 3",builder:"Vite",language:"TS"},createScript:{npm:"npm create vite@latest . -- --template vue-ts",yarn:"yarn create vite@latest . --template vue-ts",pnpm:"pnpm create vite@latest . --template vue-ts"}},"angular-cli":{displayName:{type:"Angular",language:"TS"},createScript:{npm:"npx -p @angular/cli@latest ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install",yarn:"yarn dlx -p @angular/cli ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --package-manager=yarn --skip-install && touch yarn.lock && yarn set version berry && yarn config set nodeLinker node-modules",pnpm:"pnpm --package @angular/cli dlx ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --package-manager=pnpm --skip-install"}},"lit-vite-ts":{displayName:{type:"Lit",builder:"Vite",language:"TS"},createScript:{npm:"npm create vite@latest . -- --template lit-ts",yarn:"yarn create vite@latest . --template lit-ts && touch yarn.lock && yarn set version berry && yarn config set nodeLinker pnp",pnpm:"pnpm create vite@latest . --template lit-ts"}}},packageManagerToCoercedName=packageManager=>{switch(packageManager){case"npm":return "npm";case"pnpm":return "pnpm";default:return "yarn"}},buildProjectDisplayNameForPrint=({displayName})=>{let{type,builder,language}=displayName;return `${chalk16.bold.blue(type)} ${builder?`+ ${builder} `:""}(${language})`},scaffoldNewProject=async(packageManager,{disableTelemetry})=>{let packageManagerName=packageManagerToCoercedName(packageManager);logger.plain(boxen(dedent21`
117
+ `);let extraPackages=[];extraPackages.push("webpack"),extraPackages.push("prop-types");let extraAddons=[`@storybook/preset-create-react-app@${versions["@storybook/preset-create-react-app"]}`,"@storybook/addon-onboarding"];await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{webpackCompiler:()=>{},extraAddons,extraPackages,staticDir:fs2__default.existsSync(path7.resolve("./public"))?"public":void 0,extraMain});},REACT_SCRIPTS_default=generator5;var generator6=async(packageManager,npmOptions,options)=>{let staticDir;existsSync$1(join(process.cwd(),"public"))&&(staticDir="public"),await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"react",{staticDir,extraAddons:["@storybook/addon-onboarding@^1.0.0"],webpackCompiler:({builder})=>{}},"nextjs");},NEXTJS_default=generator6;var generator7=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"]:[],webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},VUE3_default=generator7;var generator8=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"react",{extraAddons:["@storybook/addon-onboarding@^1.0.0"],webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},WEBPACK_REACT_default=generator8;var generator9=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"html",{webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},HTML_default=generator9;var generator10=async(packageManager,npmOptions,options)=>baseGenerator(packageManager,npmOptions,options,"web-components",{extraPackages:["lit"],webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0}),WEB_COMPONENTS_default=generator10;var generator11=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"preact",{webpackCompiler:({builder})=>builder==="webpack5"?"swc":void 0});},PREACT_default=generator11;var generator12=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"svelte",{extensions:["js","jsx","ts","tsx","svelte"]});},SVELTE_default=generator12;var generator13=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,options,"qwik",{},"qwik");},QWIK_default=generator13;var generator14=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"svelte",void 0,"sveltekit");},SVELTEKIT_default=generator14;var generator15=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"vite"},"solid",{},"solid");},SOLID_default=generator15;var generator16=async(packageManager,npmOptions,options)=>{await baseGenerator(packageManager,npmOptions,{...options,builder:"webpack5"},"server",{webpackCompiler:()=>"swc",extensions:["json","yaml","yml"]});},SERVER_default=generator16;var SUPPORTED_PROJECTS={"react-vite-ts":{displayName:{type:"React",builder:"Vite",language:"TS"},createScript:{npm:"npm create vite@latest . -- --template react-ts",yarn:"yarn create vite@latest . --template react-ts",pnpm:"pnpm create vite@latest . --template react-ts"}},"nextjs-ts":{displayName:{type:"Next.js",language:"TS"},createScript:{npm:'npm create next-app . -- --typescript --use-npm --eslint --tailwind --no-app --import-alias="@/*" --src-dir',yarn:'yarn create next-app . --typescript --use-yarn --eslint --tailwind --no-app --import-alias="@/*" --src-dir',pnpm:'pnpm create next-app . --typescript --use-pnpm --eslint --tailwind --no-app --import-alias="@/*" --src-dir'}},"vue-vite-ts":{displayName:{type:"Vue 3",builder:"Vite",language:"TS"},createScript:{npm:"npm create vite@latest . -- --template vue-ts",yarn:"yarn create vite@latest . --template vue-ts",pnpm:"pnpm create vite@latest . --template vue-ts"}},"angular-cli":{displayName:{type:"Angular",language:"TS"},createScript:{npm:"npx -p @angular/cli@latest ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --skip-install",yarn:"yarn dlx -p @angular/cli ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --package-manager=yarn --skip-install && touch yarn.lock && yarn set version berry && yarn config set nodeLinker node-modules",pnpm:"pnpm --package @angular/cli dlx ng new angular-latest --directory . --routing=true --minimal=true --style=scss --strict --skip-git --package-manager=pnpm --skip-install"}},"lit-vite-ts":{displayName:{type:"Lit",builder:"Vite",language:"TS"},createScript:{npm:"npm create vite@latest . -- --template lit-ts",yarn:"yarn create vite@latest . --template lit-ts && touch yarn.lock && yarn set version berry && yarn config set nodeLinker pnp",pnpm:"pnpm create vite@latest . --template lit-ts"}}},packageManagerToCoercedName=packageManager=>{switch(packageManager){case"npm":return "npm";case"pnpm":return "pnpm";default:return "yarn"}},buildProjectDisplayNameForPrint=({displayName})=>{let{type,builder,language}=displayName;return `${chalk15.bold.blue(type)} ${builder?`+ ${builder} `:""}(${language})`},scaffoldNewProject=async(packageManager,{disableTelemetry})=>{let packageManagerName=packageManagerToCoercedName(packageManager);logger.plain(boxen(dedent20`
118
118
  Would you like to generate a new project from the following list?
119
119
 
120
- ${chalk16.bold("Note:")}
120
+ ${chalk15.bold("Note:")}
121
121
  Storybook supports many more frameworks and bundlers than listed below. If you don't see your
122
122
  preferred setup, you can still generate a project then rerun this command to add Storybook.
123
123
 
124
- ${chalk16.bold("Press ^C at any time to quit.")}
125
- `,{title:chalk16.bold("\u{1F50E} Empty directory detected"),padding:1,borderStyle:"double",borderColor:"yellow"})),logger.line(1);let projectStrategy;if(process.env.STORYBOOK_INIT_EMPTY_TYPE&&(projectStrategy=process.env.STORYBOOK_INIT_EMPTY_TYPE),!projectStrategy){let{project}=await prompts5({type:"select",name:"project",message:"Choose a project template",choices:Object.entries(SUPPORTED_PROJECTS).map(([key,value])=>({title:buildProjectDisplayNameForPrint(value),value:key}))},{onCancel:()=>process.exit(0)});projectStrategy=project;}let projectStrategyConfig=SUPPORTED_PROJECTS[projectStrategy],projectDisplayName=buildProjectDisplayNameForPrint(projectStrategyConfig),createScript=projectStrategyConfig.createScript[packageManagerName];logger.line(1),logger.plain(`Creating a new "${projectDisplayName}" project with ${chalk16.bold(packageManagerName)}...`),logger.line(1);let targetDir=process.cwd();try{await remove(`${targetDir}/.cache`),await execa.command(createScript,{stdio:"pipe",shell:!0,cwd:targetDir,cleanup:!0});}catch(e){throw new GenerateNewProjectOnInitError({error:e,packageManager:packageManagerName,projectType:projectStrategy})}disableTelemetry||telemetry("scaffolded-empty",{packageManager:packageManagerName,projectType:projectStrategy}),logger.plain(boxen(dedent21`
126
- "${projectDisplayName}" project with ${chalk16.bold(packageManagerName)} created successfully!
124
+ ${chalk15.bold("Press ^C at any time to quit.")}
125
+ `,{title:chalk15.bold("\u{1F50E} Empty directory detected"),padding:1,borderStyle:"double",borderColor:"yellow"})),logger.line(1);let projectStrategy;if(process.env.STORYBOOK_INIT_EMPTY_TYPE&&(projectStrategy=process.env.STORYBOOK_INIT_EMPTY_TYPE),!projectStrategy){let{project}=await prompts5({type:"select",name:"project",message:"Choose a project template",choices:Object.entries(SUPPORTED_PROJECTS).map(([key,value])=>({title:buildProjectDisplayNameForPrint(value),value:key}))},{onCancel:()=>process.exit(0)});projectStrategy=project;}let projectStrategyConfig=SUPPORTED_PROJECTS[projectStrategy],projectDisplayName=buildProjectDisplayNameForPrint(projectStrategyConfig),createScript=projectStrategyConfig.createScript[packageManagerName];logger.line(1),logger.plain(`Creating a new "${projectDisplayName}" project with ${chalk15.bold(packageManagerName)}...`),logger.line(1);let targetDir=process.cwd();try{await remove(`${targetDir}/.cache`),await execa.command(createScript,{stdio:"pipe",shell:!0,cwd:targetDir,cleanup:!0});}catch(e){throw new GenerateNewProjectOnInitError({error:e,packageManager:packageManagerName,projectType:projectStrategy})}disableTelemetry||telemetry("scaffolded-empty",{packageManager:packageManagerName,projectType:projectStrategy}),logger.plain(boxen(dedent20`
126
+ "${projectDisplayName}" project with ${chalk15.bold(packageManagerName)} created successfully!
127
127
 
128
128
  Continuing with Storybook installation...
129
- `,{title:chalk16.bold("\u2705 Success!"),padding:1,borderStyle:"double",borderColor:"green"})),logger.line(1);},BASE_IGNORED_FILES=[".git",".gitignore",".DS_Store",".cache"],IGNORED_FILES_BY_PACKAGE_MANAGER={npm:[...BASE_IGNORED_FILES],yarn:[...BASE_IGNORED_FILES,".yarnrc.yml",".yarn"],pnpm:[...BASE_IGNORED_FILES]},currentDirectoryIsEmpty=packageManager=>{let packageManagerName=packageManagerToCoercedName(packageManager),cwdFolderEntries=readdirSync(process.cwd()),filesToIgnore=IGNORED_FILES_BY_PACKAGE_MANAGER[packageManagerName];return cwdFolderEntries.length===0||cwdFolderEntries.every(entry=>filesToIgnore.includes(entry))};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"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(`
130
- ${chalk16.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);};async function doInitiate(options,pkg2){let{packageManager:pkgMgr}=options,packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),latestVersion=await packageManager.latestVersion("@storybook/cli"),currentVersion=versions["@storybook/cli"],isPrerelease=prerelease(currentVersion),isOutdated=lt(currentVersion,latestVersion),borderColor=isOutdated?"#FC521F":"#F1618C",messages={welcome:`Adding Storybook version ${chalk16.bold(currentVersion)} to your project..`,notLatest:chalk16.red(dedent21`
131
- This version is behind the latest release, which is: ${chalk16.bold(latestVersion)}!
129
+ `,{title:chalk15.bold("\u2705 Success!"),padding:1,borderStyle:"double",borderColor:"green"})),logger.line(1);},BASE_IGNORED_FILES=[".git",".gitignore",".DS_Store",".cache"],IGNORED_FILES_BY_PACKAGE_MANAGER={npm:[...BASE_IGNORED_FILES],yarn:[...BASE_IGNORED_FILES,".yarnrc.yml",".yarn"],pnpm:[...BASE_IGNORED_FILES]},currentDirectoryIsEmpty=packageManager=>{let packageManagerName=packageManagerToCoercedName(packageManager),cwdFolderEntries=readdirSync(process.cwd()),filesToIgnore=IGNORED_FILES_BY_PACKAGE_MANAGER[packageManagerName];return cwdFolderEntries.length===0||cwdFolderEntries.every(entry=>filesToIgnore.includes(entry))};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"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(`
130
+ ${chalk15.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);};async function doInitiate(options,pkg2){let{packageManager:pkgMgr}=options,packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),latestVersion=await packageManager.latestVersion("@storybook/cli"),currentVersion=versions["@storybook/cli"],isPrerelease=prerelease(currentVersion),isOutdated=lt(currentVersion,latestVersion),borderColor=isOutdated?"#FC521F":"#F1618C",messages={welcome:`Adding Storybook version ${chalk15.bold(currentVersion)} to your project..`,notLatest:chalk15.red(dedent20`
131
+ This version is behind the latest release, which is: ${chalk15.bold(latestVersion)}!
132
132
  You likely ran the init command through npx, which can use a locally cached version, to get the latest please run:
133
- ${chalk16.bold("npx storybook@latest init")}
133
+ ${chalk15.bold("npx storybook@latest init")}
134
134
 
135
135
  You may want to CTRL+C to stop, and run with the latest version instead.
136
- `),prelease:chalk16.yellow("This is a pre-release version.")};logger5.log(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(isPrerelease?[messages.prelease]:[]).join(`
136
+ `),prelease:chalk15.yellow("This is a pre-release version.")};logger5.log(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(isPrerelease?[messages.prelease]:[]).join(`
137
137
  `),{borderStyle:"round",padding:1,borderColor})),options.force!==!0&&currentDirectoryIsEmpty(packageManager.type)&&(await scaffoldNewProject(packageManager.type,options),(process.env.IN_STORYBOOK_SANDBOX==="true"||process.env.CI==="true")&&packageManager.addPackageResolutions({"@storybook/telemetry":versions["@storybook/telemetry"]}));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(`
138
138
  The project types currently supported by Storybook are:
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(String(err)),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(dedent21`
140
- ${chalk16.yellow("NOTE: installation is not 100% automated.")}
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(String(err)),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(dedent20`
140
+ ${chalk15.yellow("NOTE: installation is not 100% automated.")}
141
141
 
142
142
  To run Storybook, you will need to:
143
143
 
144
144
  1. Replace the contents of your app entry with the following
145
145
 
146
- ${chalk16.inverse(" export {default} from './.storybook'; ")}
146
+ ${chalk15.inverse(" export {default} from './.storybook'; ")}
147
147
 
148
148
  2. Enable transformer.unstable_allowRequireContext in your metro config
149
149
 
150
150
  For a more detailed guide go to:
151
- ${chalk16.cyan("https://github.com/storybookjs/react-native#existing-project")}
151
+ ${chalk15.cyan("https://github.com/storybookjs/react-native#existing-project")}
152
152
 
153
153
  Then to run your Storybook, type:
154
154
 
155
- ${chalk16.inverse(" "+packageManager.getRunCommand("start")+" ")}
155
+ ${chalk15.inverse(" "+packageManager.getRunCommand("start")+" ")}
156
156
 
157
- `),{shouldRunDev:!1};let storybookCommand=projectType==="ANGULAR"?`ng run ${installResult.projectName}:storybook`:packageManager.getRunStorybookCommand();return logger5.log(boxen(dedent21`
157
+ `),{shouldRunDev:!1};let storybookCommand=projectType==="ANGULAR"?`ng run ${installResult.projectName}:storybook`:packageManager.getRunStorybookCommand();return logger5.log(boxen(dedent20`
158
158
  Storybook was successfully installed in your project! 🎉
159
- To run Storybook manually, run ${chalk16.yellow(chalk16.bold(storybookCommand))}. CTRL+C to stop.
159
+ To run Storybook manually, run ${chalk15.yellow(chalk15.bold(storybookCommand))}. CTRL+C to stop.
160
160
 
161
- Wanna know more about Storybook? Check out ${chalk16.cyan("https://storybook.js.org/")}
162
- Having trouble or want to chat? Join us at ${chalk16.cyan("https://discord.gg/storybook/")}
161
+ Wanna know more about Storybook? Check out ${chalk15.cyan("https://storybook.js.org/")}
162
+ Having trouble or want to chat? Join us at ${chalk15.cyan("https://discord.gg/storybook/")}
163
163
  `,{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(`
164
- 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[0],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,packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),packageJson=await packageManager.retrievePackageJson(),{mainConfig,configDir}=getStorybookInfo(packageJson);if(typeof configDir>"u")throw new Error(dedent21`
164
+ 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[0],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,packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),packageJson=await packageManager.retrievePackageJson(),{mainConfig,configDir}=getStorybookInfo(packageJson);if(typeof configDir>"u")throw new Error(dedent20`
165
165
  Unable to find storybook config directory
166
- `);if(checkInstalled(addon,requireMain(configDir)))throw new Error(dedent21`
166
+ `);if(checkInstalled(addon,requireMain(configDir)))throw new Error(dedent20`
167
167
  Addon ${addon} is already installed; we skipped adding it to your ${mainConfig}.
168
- `);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 getCoercedStorybookVersion(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 logger7=console,getFrameworkPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.framework=="string"?mainConfig.framework:mainConfig?.framework?.name;if(!packageNameOrPath)return null;let normalizedPath=path7.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=path7.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 getCoercedStorybookVersion(packageManager),configDir=userDefinedConfigDir||configDirFromScript||".storybook",mainConfig;try{mainConfig=await loadMainConfig({configDir,noCache:!0});}catch(err){throw new Error(dedent21`Unable to find or evaluate ${chalk16.blue(mainConfigPath)}: ${String(err)}`)}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 ${chalk16.blue(mainConfigPath)} on your behalf because of the following error:
168
+ `);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 getCoercedStorybookVersion(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 logger7=console,getFrameworkPackageName=mainConfig=>{let packageNameOrPath=typeof mainConfig?.framework=="string"?mainConfig.framework:mainConfig?.framework?.name;if(!packageNameOrPath)return null;let normalizedPath=path7.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=path7.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 getCoercedStorybookVersion(packageManager),configDir=userDefinedConfigDir||configDirFromScript||".storybook",mainConfig;try{mainConfig=await loadMainConfig({configDir,noCache:!0});}catch(err){throw new Error(dedent20`Unable to find or evaluate ${chalk15.blue(mainConfigPath)}: ${String(err)}`)}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 ${chalk15.blue(mainConfigPath)} on your behalf because of the following error:
169
169
  ${e}
170
- `),logger7.info(`\u26A0\uFE0F Storybook automigrations are based on AST parsing and it's possible that your ${chalk16.blue(mainConfigPath)} file contains a non-standard format (e.g. your export is not an object) or that there was an error when parsing dynamic values (e.g. "require" calls, or usage of environment variables). When your main config is non-standard, automigrations are unfortunately not possible. Please follow the instructions given previously and follow the documentation to make the updates manually.`);}},getAddonNames=mainConfig=>(mainConfig.addons||[]).map(addon=>{let name="";if(typeof addon=="string"?name=addon:typeof addon=="object"&&(name=addon.name),!name.startsWith("."))return name.replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,"")}).filter(item=>item!=null);var logger8=console,checkWebpack5Builder=async({mainConfig,storybookVersion})=>{if(semver.lt(storybookVersion,"6.3.0"))return logger8.warn(dedent21`
170
+ `),logger7.info(`\u26A0\uFE0F Storybook automigrations are based on AST parsing and it's possible that your ${chalk15.blue(mainConfigPath)} file contains a non-standard format (e.g. your export is not an object) or that there was an error when parsing dynamic values (e.g. "require" calls, or usage of environment variables). When your main config is non-standard, automigrations are unfortunately not possible. Please follow the instructions given previously and follow the documentation to make the updates manually.`);}},getAddonNames=mainConfig=>(mainConfig.addons||[]).map(addon=>{let name="";if(typeof addon=="string"?name=addon:typeof addon=="object"&&(name=addon.name),!name.startsWith("."))return name.replace(/\/dist\/.*/,"").replace(/\.[mc]?[tj]?s[x]?$/,"").replace(/\/register$/,"").replace(/\/manager$/,"").replace(/\/preset$/,"")}).filter(item=>item!=null);var logger8=console,checkWebpack5Builder=async({mainConfig,storybookVersion})=>{if(semver.lt(storybookVersion,"6.3.0"))return logger8.warn(dedent20`
171
171
  Detected SB 6.3 or below, please upgrade storybook to use webpack5.
172
172
 
173
173
  To upgrade to the latest stable release, run this from your project directory:
174
174
 
175
- ${chalk16.cyan("npx storybook@latest upgrade")}
175
+ ${chalk15.cyan("npx storybook@latest upgrade")}
176
176
 
177
177
  To upgrade to the latest pre-release, run this from your project directory:
178
178
 
179
- ${chalk16.cyan("npx storybook@next upgrade")}
180
- `.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=chalk16.cyan(`webpack ${webpackVersion}`);return dedent`
179
+ ${chalk15.cyan("npx storybook@next upgrade")}
180
+ `.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",versionRange:["<7",">=7"],async check({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=chalk15.cyan(`webpack ${webpackVersion}`);return dedent`
181
181
  We've detected you're running ${webpackFormatted}.
182
182
  Your Storybook's main.js files specifies webpack4, which is incompatible.
183
183
 
184
- To run Storybook in webpack5-mode, we can install Storybook's ${chalk16.cyan("@storybook/builder-webpack5")} for you.
184
+ To run Storybook in webpack5-mode, we can install Storybook's ${chalk15.cyan("@storybook/builder-webpack5")} for you.
185
185
 
186
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack-5-manager-build")}
187
- `},async run({result:{storybookVersion,webpackVersion},packageManager,dryRun,mainConfigPath}){let deps=[`@storybook/builder-webpack5@${storybookVersion}`];webpackVersion||deps.push("webpack@5"),logger9.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0},deps),logger9.info("\u2705 Setting `core.builder` to `@storybook/builder-webpack5` in main.js"),dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{main.setFieldValue(["core","builder"],"@storybook/builder-webpack5");});}};var cra5={id:"cra5",async check({packageManager,mainConfig,storybookVersion}){let craVersion=await packageManager.getPackageVersion("react-scripts");if(!craVersion||semver.lt(craVersion,"5.0.0"))return null;let builderInfo=await checkWebpack5Builder({mainConfig,storybookVersion});return builderInfo?{craVersion,...builderInfo}:null},prompt({craVersion}){let craFormatted=chalk16.cyan(`Create React App (CRA) ${craVersion}`);return dedent`
186
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack-5-manager-build")}
187
+ `},async run({result:{storybookVersion,webpackVersion},packageManager,dryRun,mainConfigPath}){let deps=[`@storybook/builder-webpack5@${storybookVersion}`];webpackVersion||deps.push("webpack@5"),logger9.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0},deps),logger9.info("\u2705 Setting `core.builder` to `@storybook/builder-webpack5` in main.js"),dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{main.setFieldValue(["core","builder"],"@storybook/builder-webpack5");});}};var cra5={id:"cra5",versionRange:["<7",">=7"],async check({packageManager,mainConfig,storybookVersion}){let craVersion=await packageManager.getPackageVersion("react-scripts");if(!craVersion||semver.lt(craVersion,"5.0.0"))return null;let builderInfo=await checkWebpack5Builder({mainConfig,storybookVersion});return builderInfo?{craVersion,...builderInfo}:null},prompt({craVersion}){let craFormatted=chalk15.cyan(`Create React App (CRA) ${craVersion}`);return dedent`
188
188
  We've detected you are running ${craFormatted} which is powered by webpack5.
189
189
  Your Storybook's main.js files specifies webpack4, which is incompatible.
190
190
 
191
- In order to work with your version of CRA, we need to install Storybook's ${chalk16.cyan("@storybook/builder-webpack5")}.
191
+ In order to work with your version of CRA, we need to install Storybook's ${chalk15.cyan("@storybook/builder-webpack5")}.
192
192
 
193
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#cra5-upgrade")}
194
- `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};var logger10=console,vite4={id:"vite4",async check({packageManager}){let viteVersion=await packageManager.getPackageVersion("vite");return !viteVersion||semver.gt(viteVersion,"4.0.0")?null:{viteVersion}},prompt({viteVersion}){let viteFormatted=chalk16.cyan(`${viteVersion}`);return dedent`
195
- We've detected your version of Vite is outdated (${viteFormatted}).
196
-
197
- Storybook 8.0.0 will require Vite 4.0.0 or later.
198
- Do you want us to upgrade Vite for you?
199
- `},async run({packageManager,dryRun}){let deps=["vite"];logger10.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0},deps);}};var vue3={id:"vue3",async check({packageManager,mainConfig,storybookVersion}){let vueVersion=await packageManager.getPackageVersion("vue");if(!vueVersion||semver.lt(vueVersion,"3.0.0"))return null;let builderInfo=await checkWebpack5Builder({mainConfig,storybookVersion});return builderInfo?{vueVersion,...builderInfo}:null},prompt({vueVersion,storybookVersion}){let vueFormatted=chalk16.cyan(`Vue ${vueVersion}`),sbFormatted=chalk16.cyan(`Storybook ${storybookVersion}`);return dedent`
193
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#cra5-upgrade")}
194
+ `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};var vue3={id:"vue3",versionRange:["<7",">=7"],async check({packageManager,mainConfig,storybookVersion}){let vueVersion=await packageManager.getPackageVersion("vue");if(!vueVersion||semver.lt(vueVersion,"3.0.0"))return null;let builderInfo=await checkWebpack5Builder({mainConfig,storybookVersion});return builderInfo?{vueVersion,...builderInfo}:null},prompt({vueVersion,storybookVersion}){let vueFormatted=chalk15.cyan(`Vue ${vueVersion}`),sbFormatted=chalk15.cyan(`Storybook ${storybookVersion}`);return dedent`
200
195
  We've detected you are running ${vueFormatted} with Storybook.
201
196
  ${sbFormatted} runs webpack4 by default, which is incompatible.
202
197
 
203
- In order to work with your version of Vue, we need to install Storybook's ${chalk16.cyan("webpack5 builder")}.
198
+ In order to work with your version of Vue, we need to install Storybook's ${chalk15.cyan("webpack5 builder")}.
204
199
 
205
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vue3-upgrade")}
206
- `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};function slash(path8){return path8.startsWith("\\\\?\\")?path8:path8.replace(/\\/g,"/")}var logger11=console,mdxgfm={id:"github-flavored-markdown-mdx",async check({configDir,mainConfig,storybookVersion}){if(!semver.gte(storybookVersion,"7.0.0"))return null;let hasMDXFiles=await mainConfig?.stories?.reduce(async(acc,item)=>{if(await acc===!0)return !0;let pattern;if(typeof configDir>"u")return !1;if(typeof item=="string")pattern=slash(join(configDir,item));else if(typeof item=="object"){let directory2=item.directory||"..",files2=item.files||"**/*.@(mdx|stories.@(mdx|js|jsx|mjs|ts|tsx))";pattern=slash(join(configDir,directory2,files2));}return pattern?(await glob(pattern,commonGlobOptions(pattern))).some(f=>f.endsWith(".mdx")):!1},Promise.resolve(!1));return mainConfig?.features?.legacyMdx1===!0||!1||!hasMDXFiles||!!mainConfig.addons?.find(item=>item==="@storybook/addon-mdx-gfm"?!0:typeof item=="string"?!1:item.name==="@storybook/addon-docs"?item.options?.mdxPluginOptions?.mdxCompileOptions?.remarkPlugins?.length>0:!1)?null:{}},prompt(){return dedent`
200
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vue3-upgrade")}
201
+ `},async run(options){return webpack5.run({...options,result:{webpackVersion:null,...options.result}})}};function slash(path8){return path8.startsWith("\\\\?\\")?path8:path8.replace(/\\/g,"/")}var logger10=console,mdxgfm={id:"github-flavored-markdown-mdx",versionRange:["<7",">=7"],async check({configDir,mainConfig}){let hasMDXFiles=await mainConfig?.stories?.reduce(async(acc,item)=>{if(await acc===!0)return !0;let pattern;if(typeof configDir>"u")return !1;if(typeof item=="string")pattern=slash(join(configDir,item));else if(typeof item=="object"){let directory2=item.directory||"..",files2=item.files||"**/*.@(mdx|stories.@(mdx|js|jsx|mjs|ts|tsx))";pattern=slash(join(configDir,directory2,files2));}return pattern?(await glob(pattern,commonGlobOptions(pattern))).some(f=>f.endsWith(".mdx")):!1},Promise.resolve(!1));return mainConfig?.features?.legacyMdx1===!0||!1||!hasMDXFiles||!!mainConfig.addons?.find(item=>item==="@storybook/addon-mdx-gfm"?!0:typeof item=="string"?!1:item.name==="@storybook/addon-docs"?item.options?.mdxPluginOptions?.mdxCompileOptions?.remarkPlugins?.length>0:!1)?null:{}},prompt(){return dedent`
207
202
  In MDX1 you had the option of using GitHub flavored markdown.
208
203
 
209
- Storybook 8.0 uses MDX3 for compiling MDX, and thus no longer supports GFM out of the box.
204
+ Storybook >= 8.0 uses MDX3 for compiling MDX, and thus no longer supports GFM out of the box.
210
205
  Because of this you need to explicitly add the GFM plugin in the addon-docs options:
211
206
  https://storybook.js.org/docs/react/writing-docs/mdx#lack-of-github-flavored-markdown-gfm
212
207
 
213
- We recommend you follow the guide on the link above, however we can add a temporary storybook addon that helps make this migration easier.
208
+ We recommend you follow the guide on the link above, however we can add a temporary Storybook addon that helps make this migration easier.
214
209
  We'll install the addon and add it to your storybook config.
215
- `},async run({packageManager,dryRun,mainConfigPath,skipInstall}){if(!dryRun){let packageJson=await packageManager.retrievePackageJson(),versionToInstall=getStorybookVersionSpecifier(await packageManager.retrievePackageJson());await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall,packageJson},[`@storybook/addon-mdx-gfm@${versionToInstall}`]),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{logger11.info('\u2705 Adding "@storybook/addon-mdx-gfm" addon'),dryRun||main.appendValueToArray(["addons"],"@storybook/addon-mdx-gfm");});}}};var logger12=console,eslintPlugin={id:"eslintPlugin",async check({packageManager}){let{hasEslint,isStorybookPluginInstalled}=await extractEslintInfo(packageManager);if(isStorybookPluginInstalled||!hasEslint)return null;let eslintFile=null,unsupportedExtension;try{eslintFile=findEslintFile();}catch(err){unsupportedExtension=String(err);}return !eslintFile||!unsupportedExtension?(logger12.warn("Unable to find .eslintrc config file, skipping"),null):{eslintFile,unsupportedExtension}},prompt(){return dedent`
210
+ `},async run({packageManager,dryRun,mainConfigPath,skipInstall}){if(!dryRun){let packageJson=await packageManager.retrievePackageJson(),versionToInstall=getStorybookVersionSpecifier(await packageManager.retrievePackageJson());await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall,packageJson},[`@storybook/addon-mdx-gfm@${versionToInstall}`]),await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{logger10.info('\u2705 Adding "@storybook/addon-mdx-gfm" addon'),dryRun||main.appendValueToArray(["addons"],"@storybook/addon-mdx-gfm");});}}};var logger11=console,eslintPlugin={id:"eslintPlugin",versionRange:["<8",">=7"],async check({packageManager}){let{hasEslint,isStorybookPluginInstalled}=await extractEslintInfo(packageManager);if(isStorybookPluginInstalled||!hasEslint)return null;let eslintFile=null,unsupportedExtension;try{eslintFile=findEslintFile();}catch(err){unsupportedExtension=String(err);}return !eslintFile||!unsupportedExtension?(logger11.warn("Unable to find .eslintrc config file, skipping"),null):{eslintFile,unsupportedExtension}},prompt(){return dedent`
216
211
  We've detected you are not using our eslint-plugin.
217
212
 
218
213
  In order to have the best experience with Storybook and follow best practices, we advise you to install eslint-plugin-storybook.
219
214
 
220
- More info: ${chalk16.yellow("https://github.com/storybookjs/eslint-plugin-storybook#readme")}
221
- `},async run({result:{eslintFile,unsupportedExtension},packageManager,dryRun,skipInstall}){let deps=["eslint-plugin-storybook"];if(logger12.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall},deps),!dryRun&&unsupportedExtension){logger12.info(dedent`
215
+ More info: ${chalk15.yellow("https://github.com/storybookjs/eslint-plugin-storybook#readme")}
216
+ `},async run({result:{eslintFile,unsupportedExtension},packageManager,dryRun,skipInstall}){let deps=["eslint-plugin-storybook"];if(logger11.info(`\u2705 Adding dependencies: ${deps}`),dryRun||await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall},deps),!dryRun&&unsupportedExtension){logger11.info(dedent`
222
217
  ⚠️ The plugin was successfully installed but failed to configure.
223
218
 
224
219
  Found an eslint config file with an unsupported automigration format: .eslintrc.${unsupportedExtension}.
225
220
  The supported formats for this automigration are: ${SUPPORTED_ESLINT_EXTENSIONS.join(", ")}.
226
221
 
227
222
  Please refer to https://github.com/storybookjs/eslint-plugin-storybook#usage to finish setting up the plugin manually.
228
- `);return}dryRun||await configureEslintPlugin(eslintFile,packageManager);}};var logger13=console,builderVite={id:"builder-vite",async check({packageManager,mainConfig}){let packageJson=await packageManager.retrievePackageJson(),builder=mainConfig.core?.builder;return (typeof builder=="string"?builder:builder?.name)!=="storybook-builder-vite"?null:{builder,packageJson}},prompt({builder}){let builderFormatted=chalk16.cyan(JSON.stringify(builder,null,2));return dedent`
223
+ `);return}dryRun||await configureEslintPlugin(eslintFile,packageManager);}};var logger12=console,builderVite={id:"builder-vite",versionRange:["<7",">=7"],async check({packageManager,mainConfig}){let packageJson=await packageManager.retrievePackageJson(),builder=mainConfig.core?.builder;return (typeof builder=="string"?builder:builder?.name)!=="storybook-builder-vite"?null:{builder,packageJson}},prompt({builder}){let builderFormatted=chalk15.cyan(JSON.stringify(builder,null,2));return dedent`
229
224
  We've detected you're using the community vite builder: ${builderFormatted}
230
225
 
231
- 'storybook-builder-vite' is deprecated and now located at ${chalk16.cyan("@storybook/builder-vite")}.
226
+ 'storybook-builder-vite' is deprecated and now located at ${chalk15.cyan("@storybook/builder-vite")}.
232
227
 
233
228
  We can upgrade your project to use the new builder automatically.
234
229
 
235
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-renamed")}
236
- `},async run({result:{builder,packageJson},packageManager,dryRun,mainConfigPath}){let{dependencies={},devDependencies={}}=packageJson;if(logger13.info("\u2705 Removing existing 'storybook-builder-vite' dependency"),dryRun||(delete dependencies["storybook-builder-vite"],delete devDependencies["storybook-builder-vite"],await packageManager.writePackageJson(packageJson)),logger13.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}`]);}logger13.info("\u2705 Updating main.js to use vite builder"),dryRun||await updateMainConfig({dryRun:!!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 viteConfigFile={id:"viteConfigFile",async check({mainConfig,packageManager}){let viteConfigPath=await findUp2(["vite.config.js","vite.config.mjs","vite.config.cjs","vite.config.ts"]),rendererToVitePluginMap={preact:"@preact/preset-vite",qwik:"vite-plugin-qwik",react:"@vitejs/plugin-react",solid:"vite-plugin-solid",svelte:"@sveltejs/vite-plugin-svelte",sveltekit:"@sveltejs/kit/vite",vue:"@vitejs/plugin-vue"},frameworkPackageName=getFrameworkPackageName(mainConfig);if(!frameworkPackageName)return null;let frameworkName=frameworkPackages[frameworkPackageName],isUsingViteBuilder=mainConfig.core?.builder==="vite"||frameworkPackageName?.includes("vite")||frameworkPackageName==="qwik"||frameworkPackageName==="solid"||frameworkPackageName==="sveltekit",rendererName=frameworkToRenderer[frameworkName];if(!viteConfigPath&&isUsingViteBuilder){let plugins=[];return rendererToVitePluginMap[rendererName]&&plugins.push(rendererToVitePluginMap[rendererName]),{plugins,existed:!!viteConfigPath}}let plugin=rendererToVitePluginMap[rendererName];if(!plugin)return null;let pluginVersion=await packageManager.getPackageVersion(plugin);if(viteConfigPath&&isUsingViteBuilder&&!pluginVersion){let plugins=[];return plugin&&plugins.push(plugin),{plugins,existed:!viteConfigPath}}return null},prompt({existed,plugins}){return existed?dedent`
237
- Storybook 8.0.0 no longer ships with a Vite config build-in.
230
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-renamed")}
231
+ `},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:!!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 viteConfigFile={id:"viteConfigFile",versionRange:["<8.0.0-beta.3",">=8.0.0-beta.3"],async check({mainConfig,packageManager}){let viteConfigPath=await findUp2(["vite.config.js","vite.config.mjs","vite.config.cjs","vite.config.ts"]),rendererToVitePluginMap={preact:"@preact/preset-vite",qwik:"vite-plugin-qwik",react:"@vitejs/plugin-react",solid:"vite-plugin-solid",svelte:"@sveltejs/vite-plugin-svelte",sveltekit:"@sveltejs/kit/vite",vue:"@vitejs/plugin-vue"},frameworkPackageName=getFrameworkPackageName(mainConfig);if(!frameworkPackageName)return null;let frameworkName=frameworkPackages[frameworkPackageName],isUsingViteBuilder=mainConfig.core?.builder==="vite"||frameworkPackageName?.includes("vite")||frameworkPackageName==="qwik"||frameworkPackageName==="solid"||frameworkPackageName==="sveltekit",rendererName=frameworkToRenderer[frameworkName];if(!viteConfigPath&&isUsingViteBuilder){let plugins=[];return rendererToVitePluginMap[rendererName]&&plugins.push(rendererToVitePluginMap[rendererName]),{plugins,existed:!!viteConfigPath}}let plugin=rendererToVitePluginMap[rendererName];if(!plugin)return null;let pluginVersion=await packageManager.getPackageVersion(plugin);if(viteConfigPath&&isUsingViteBuilder&&!pluginVersion){let plugins=[];return plugin&&plugins.push(plugin),{plugins,existed:!viteConfigPath}}return null},prompt({existed,plugins}){return existed?dedent`
232
+ Since version 8.0.0, Storybook no longer ships with a Vite config build-in.
238
233
  We've detected you do have a Vite config, but you may be missing the following plugins in it.
239
234
 
240
235
  ${plugins.map(plugin=>` - ${plugin}`).join(`
@@ -247,108 +242,98 @@ Running Storybook`);try{let isReactWebProject=projectType==="REACT_SCRIPTS"||pro
247
242
 
248
243
  This change was necessary to support newer versions of Vite.
249
244
  `:dedent`
250
- Storybook 8.0.0 no longer ships with a Vite config build-in.
245
+ Since version 8.0.0, Storybook no longer ships with a Vite config build-in.
251
246
  Please add a vite.config.js file to your project root.
252
247
 
253
248
  You can find more information on how to do this here:
254
249
  https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#framework-specific-vite-plugins-have-to-be-explicitly-added
255
250
 
256
251
  This change was necessary to support newer versions of Vite.
257
- `}};var logger14=console,getStorybookScripts=allScripts=>Object.keys(allScripts).reduce((acc,key)=>{let currentScript=allScripts[key];if(currentScript==null)return acc;let isStorybookScript=!1,allWordsFromScript=currentScript.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:currentScript,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=chalk16.cyan(`Storybook ${storybookVersion}`),newScriptsMessage=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc.push([chalk16.bold(scriptKey),"from:",chalk16.cyan(storybookScripts[scriptKey].before),"to:",chalk16.cyan(storybookScripts[scriptKey].after)].join(`
252
+ `}};var logger13=console,getStorybookScripts=allScripts=>Object.keys(allScripts).reduce((acc,key)=>{let currentScript=allScripts[key];if(currentScript==null)return acc;let isStorybookScript=!1,allWordsFromScript=currentScript.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:currentScript,after:newScript}),acc},{}),sbScripts={id:"sb-scripts",versionRange:["<7",">=7"],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=chalk15.cyan(`Storybook ${storybookVersion}`),newScriptsMessage=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc.push([chalk15.bold(scriptKey),"from:",chalk15.cyan(storybookScripts[scriptKey].before),"to:",chalk15.cyan(storybookScripts[scriptKey].after)].join(`
258
253
  `)),acc),[]);return dedent`
259
254
  We've detected you are using ${sbFormatted} with scripts from previous versions of Storybook.
260
- Starting in Storybook 7, the ${chalk16.yellow("start-storybook")} and ${chalk16.yellow("build-storybook")} binaries have changed to ${chalk16.magenta("storybook dev")} and ${chalk16.magenta("storybook build")} respectively.
255
+ Starting in Storybook 7, the ${chalk15.yellow("start-storybook")} and ${chalk15.yellow("build-storybook")} binaries have changed to ${chalk15.magenta("storybook dev")} and ${chalk15.magenta("storybook build")} respectively.
261
256
  In order to work with ${sbFormatted}, your storybook scripts have to be adjusted to use the binary. We can adjust them for you:
262
257
 
263
258
  ${newScriptsMessage.join(`
264
259
 
265
260
  `)}
266
261
 
267
- In case this migration did not cover all of your scripts, or you'd like more info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#start-storybook--build-storybook-binaries-removed")}
268
- `},async run({result:{storybookScripts},packageManager,dryRun}){if(logger14.info("\u2705 Updating scripts in package.json"),logger14.log(),!dryRun){let newScripts=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc[scriptKey]=storybookScripts[scriptKey].after,acc),{});logger14.log(),await packageManager.addScripts(newScripts);}}};var logger15=console,sbBinary={id:"storybook-binary",async check({packageManager,storybookVersion}){let packageJson=await packageManager.retrievePackageJson(),nrwlStorybookVersion=await packageManager.getPackageVersion("@nrwl/storybook"),sbBinaryVersion=await packageManager.getPackageVersion("sb"),storybookBinaryVersion=await packageManager.getPackageVersion("storybook");if(nrwlStorybookVersion||semver.lt(storybookVersion,"7.0.0"))return null;let hasSbBinary=!!sbBinaryVersion,hasStorybookBinary=!!storybookBinaryVersion;return !hasSbBinary&&hasStorybookBinary?null:{hasSbBinary,hasStorybookBinary,storybookVersion,packageJson}},prompt({storybookVersion,hasSbBinary,hasStorybookBinary}){let sbFormatted=chalk16.cyan(`Storybook ${storybookVersion}`),storybookBinaryMessage=hasStorybookBinary?"":`We've detected you are using ${sbFormatted} without Storybook's ${chalk16.magenta("storybook")} binary. Starting in Storybook 7.0, it has to be installed.`;return dedent`
262
+ In case this migration did not cover all of your scripts, or you'd like more info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#start-storybook--build-storybook-binaries-removed")}
263
+ `},async run({result:{storybookScripts},packageManager,dryRun}){if(logger13.info("\u2705 Updating scripts in package.json"),logger13.log(),!dryRun){let newScripts=Object.keys(storybookScripts).reduce((acc,scriptKey)=>(acc[scriptKey]=storybookScripts[scriptKey].after,acc),{});logger13.log(),await packageManager.addScripts(newScripts);}}};var logger14=console,sbBinary={id:"storybook-binary",versionRange:["<7",">=7"],async check({packageManager,storybookVersion}){let packageJson=await packageManager.retrievePackageJson(),nrwlStorybookVersion=await packageManager.getPackageVersion("@nrwl/storybook"),sbBinaryVersion=await packageManager.getPackageVersion("sb"),storybookBinaryVersion=await packageManager.getPackageVersion("storybook");if(nrwlStorybookVersion)return null;let hasSbBinary=!!sbBinaryVersion,hasStorybookBinary=!!storybookBinaryVersion;return !hasSbBinary&&hasStorybookBinary?null:{hasSbBinary,hasStorybookBinary,storybookVersion,packageJson}},prompt({storybookVersion,hasSbBinary,hasStorybookBinary}){let sbFormatted=chalk15.cyan(`Storybook ${storybookVersion}`),storybookBinaryMessage=hasStorybookBinary?"":`We've detected you are using ${sbFormatted} without Storybook's ${chalk15.magenta("storybook")} binary. Starting in Storybook 7.0, it has to be installed.`;return dedent`
269
264
  ${storybookBinaryMessage}
270
265
  ${hasSbBinary?`You're using the 'sb' binary and it should be replaced, as 'storybook' is the recommended way to run Storybook.
271
266
  `:""}
272
267
 
273
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#start-storybook--build-storybook-binaries-removed")}
274
- `},async run({result:{packageJson,hasSbBinary,hasStorybookBinary},packageManager,dryRun,skipInstall}){if(hasSbBinary&&(logger15.info("\u2705 Removing 'sb' dependency"),dryRun||await packageManager.removeDependencies({skipInstall:skipInstall||!hasStorybookBinary,packageJson},["sb"])),!hasStorybookBinary&&(logger15.log(),logger15.info("\u2705 Adding 'storybook' as dev dependency"),logger15.log(),!dryRun)){let versionToInstall=getStorybookVersionSpecifier(packageJson);await packageManager.addDependencies({installAsDevDependencies:!0,packageJson,skipInstall},[`storybook@${versionToInstall}`]);}}};var logger16=console,packagesMap={"@storybook/react":{webpack5:"@storybook/react-webpack5",vite:"@storybook/react-vite"},"@storybook/preact":{webpack5:"@storybook/preact-webpack5",vite:"@storybook/preact-vite"},"@storybook/server":{webpack5:"@storybook/server-webpack5"},"@storybook/ember":{webpack5:"@storybook/ember"},"@storybook/angular":{webpack5:"@storybook/angular"},"@storybook/vue3":{webpack5:"@storybook/vue3-webpack5",vite:"@storybook/vue3-vite"},"@storybook/svelte":{webpack5:"@storybook/svelte-webpack5",vite:"@storybook/svelte-vite"},"@storybook/web-components":{webpack5:"@storybook/web-components-webpack5",vite:"@storybook/web-components-vite"},"@storybook/html":{webpack5:"@storybook/html-webpack5",vite:"@storybook/html-vite"}},communityFrameworks={vite:["storybook-framework-qwik","storybook-solidjs-vite"],webpack5:[]},viteConfigFiles2=["vite.config.js","vite.config.cjs","vite.config.mjs","vite.config.ts"],webpackConfigFiles2=["webpack.config.js","webpack.config.cjs","webpack.config.mjs","webpack.config.ts"],detectBuilderInfo=async({mainConfig,configDir,packageManager})=>{let builderName,builderOrFrameworkName,{core={},framework}=mainConfig,{builder}=core,builderPackageName=getBuilderPackageName(mainConfig),frameworkPackageName=getFrameworkPackageName(mainConfig),builderOptions=typeof builder!="string"?builder?.options??{}:{};if(builderPackageName?builderOrFrameworkName=builderPackageName:framework&&Object.keys(frameworkPackages).includes(frameworkPackageName)&&(builderOrFrameworkName=frameworkPackageName,builderOptions=typeof framework=="object"?framework.options?.builder??{}:{}),!builderOrFrameworkName){let viteConfigFile2=await findUp2(viteConfigFiles2,{cwd:configDir});if(viteConfigFile2)logger16.info(`No builder or framework field, detected Storybook builder via: ${viteConfigFile2}`),builderOrFrameworkName="vite";else {let webpackConfigFile=await findUp2(webpackConfigFiles2,{cwd:configDir});webpackConfigFile&&(logger16.info(`No builder or framework field, detected Storybook builder via: ${webpackConfigFile}`),builderOrFrameworkName="webpack5");}}if(!builderOrFrameworkName){let storybookBuilderViteVersion=await packageManager.getPackageVersion("@storybook/builder-vite"),storybookBuilderVite2Version=await packageManager.getPackageVersion("storybook-builder-vite"),storybookBuilderWebpack5Version=await packageManager.getPackageVersion("@storybook/builder-webpack5"),storybookBuilderManagerWebpack5Version=await packageManager.getPackageVersion("@storybook/manager-webpack5");storybookBuilderViteVersion||storybookBuilderVite2Version?builderOrFrameworkName="vite":(storybookBuilderWebpack5Version||storybookBuilderManagerWebpack5Version)&&(builderOrFrameworkName="webpack5");}return builderOrFrameworkName?.includes("vite")||builderOrFrameworkName&&communityFrameworks.vite.includes(builderOrFrameworkName)?builderName="vite":(builderOrFrameworkName?.includes("webpack")||builderOrFrameworkName&&communityFrameworks.webpack5.includes(builderOrFrameworkName),builderName="webpack5"),{name:builderName,options:builderOptions}},getNextjsAddonOptions=addons=>{let nextjsAddon=addons?.find(addon=>typeof addon=="string"?addon==="storybook-addon-next":addon.name==="storybook-addon-next");return !nextjsAddon||typeof nextjsAddon=="string"?{}:nextjsAddon.options||{}};var detectRenderer=async packageJson=>{let allDependencies={...packageJson.dependencies,...packageJson.devDependencies,...packageJson.peerDependencies},matches=Object.keys(rendererPackages).filter(pkg2=>!!allDependencies[pkg2]),[rendererPackage]=matches;return matches.length>1&&(rendererPackage=(await prompts5([{type:"select",name:"rendererPackage",hint:"> - Use arrow-keys. Return to submit. To automate this next time, you can pass the renderer to the CLI via the --renderer flag",message:"Tried to detect a Storybook renderer in your project but found multiple. This could happen in monorepos, when projects contain multiple Storybook packages in package.json. Please select the correct one:",choices:matches.map(type=>({title:type,value:type}))}])).rendererPackage),rendererPackage};var logger17=console,newFrameworks={id:"new-frameworks",async check({configDir,packageManager,storybookVersion,mainConfig,mainConfigPath,rendererPackage}){if(!semver.gte(storybookVersion,"7.0.0")||typeof configDir>"u")return null;let packageJson=await packageManager.retrievePackageJson(),frameworkPackageName=getFrameworkPackageName(mainConfig),rendererPackageName=rendererPackage??await getRendererPackageNameFromFramework(frameworkPackageName)??await detectRenderer(packageJson),hasFrameworkInMainConfig=!!frameworkPackageName;frameworkPackageName&&Object.values(rendererPackages).includes(frameworkPackageName)&&(hasFrameworkInMainConfig=!1);let builderConfig=mainConfig.core?.builder;if(!Object.keys(packagesMap).includes(rendererPackageName))return null;let allDependencies=await packageManager.getAllDependencies(),builderInfo=await detectBuilderInfo({mainConfig,configDir,packageManager}),newFrameworkPackage=Object.keys(frameworkPackages).find(pkg2=>pkg2===frameworkPackageName);if(newFrameworkPackage||(newFrameworkPackage=packagesMap[rendererPackageName]?.[builderInfo.name]),!newFrameworkPackage)return null;let renderer=rendererPackages[rendererPackageName],rendererOptions=mainConfig[`${renderer}Options`]||{},frameworkOptions=typeof mainConfig.framework=="string"?{}:mainConfig.framework?.options,dependenciesToRemove=["@storybook/builder-webpack5","@storybook/manager-webpack5","@storybook/builder-webpack4","@storybook/manager-webpack4","@storybook/builder-vite","storybook-builder-vite"],addonsToRemove=[],addonOptions={},metaFramework,nextVersion=await packageManager.getPackageVersion("next"),svelteKitVersion=await packageManager.getPackageVersion("@sveltejs/kit"),viteVersion=await packageManager.getPackageVersion("vite");if(rendererPackageName==="@storybook/react"&&nextVersion){let nextAddonOptions=getNextjsAddonOptions(mainConfig.addons);(nextVersion&&semver.gte(nextVersion,"12.0.0")||Object.keys(nextAddonOptions).length>0)&&(metaFramework="nextjs",(newFrameworkPackage==="@storybook/react-webpack5"||newFrameworkPackage==="@storybook/nextjs")&&(newFrameworkPackage="@storybook/nextjs",addonsToRemove=["storybook-addon-next","storybook-addon-next-router"].filter(dep=>allDependencies[dep]||mainConfig.addons?.find(addon=>typeof addon=="string"?dep===addon:dep===addon.name)),addonOptions=nextAddonOptions,dependenciesToRemove.push("@storybook/react-webpack5","storybook-addon-next","storybook-addon-next-router")));}else rendererPackageName==="@storybook/svelte"&&svelteKitVersion&&semver.gte(svelteKitVersion,"1.0.0")&&(metaFramework="sveltekit",newFrameworkPackage==="@storybook/svelte-vite"&&(newFrameworkPackage="@storybook/sveltekit",rendererOptions={},dependenciesToRemove.push("@storybook/svelte-vite")));let dependenciesToAdd=[newFrameworkPackage].filter(dep=>!allDependencies[dep]).filter(Boolean);if(dependenciesToRemove=dependenciesToRemove.filter(dep=>allDependencies[dep]).filter(Boolean),hasFrameworkInMainConfig&&!builderConfig&&!Object.keys(rendererOptions).length&&!Object.keys(addonOptions).length&&!dependenciesToRemove.length&&!dependenciesToAdd.length)return null;if(viteVersion&&semver.lt(viteVersion,"3.0.0"))throw new Error(dedent21`
275
- ❌ Your project should be upgraded to use the framework package ${chalk16.bold(newFrameworkPackage)}, but we detected that you are using Vite ${chalk16.bold(viteVersion)}, which is unsupported in ${chalk16.bold("Storybook 7.0")}. Please upgrade Vite to ${chalk16.bold("3.0.0 or higher")} and rerun this migration.
268
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#start-storybook--build-storybook-binaries-removed")}
269
+ `},async run({result:{packageJson,hasSbBinary,hasStorybookBinary},packageManager,dryRun,skipInstall}){if(hasSbBinary&&(logger14.info("\u2705 Removing 'sb' dependency"),dryRun||await packageManager.removeDependencies({skipInstall:skipInstall||!hasStorybookBinary,packageJson},["sb"])),!hasStorybookBinary&&(logger14.log(),logger14.info("\u2705 Adding 'storybook' as dev dependency"),logger14.log(),!dryRun)){let versionToInstall=getStorybookVersionSpecifier(packageJson);await packageManager.addDependencies({installAsDevDependencies:!0,packageJson,skipInstall},[`storybook@${versionToInstall}`]);}}};var logger15=console,packagesMap={"@storybook/react":{webpack5:"@storybook/react-webpack5",vite:"@storybook/react-vite"},"@storybook/preact":{webpack5:"@storybook/preact-webpack5",vite:"@storybook/preact-vite"},"@storybook/server":{webpack5:"@storybook/server-webpack5"},"@storybook/ember":{webpack5:"@storybook/ember"},"@storybook/angular":{webpack5:"@storybook/angular"},"@storybook/vue3":{webpack5:"@storybook/vue3-webpack5",vite:"@storybook/vue3-vite"},"@storybook/svelte":{webpack5:"@storybook/svelte-webpack5",vite:"@storybook/svelte-vite"},"@storybook/web-components":{webpack5:"@storybook/web-components-webpack5",vite:"@storybook/web-components-vite"},"@storybook/html":{webpack5:"@storybook/html-webpack5",vite:"@storybook/html-vite"}},communityFrameworks={vite:["storybook-framework-qwik","storybook-solidjs-vite"],webpack5:[]},viteConfigFiles2=["vite.config.js","vite.config.cjs","vite.config.mjs","vite.config.ts"],webpackConfigFiles2=["webpack.config.js","webpack.config.cjs","webpack.config.mjs","webpack.config.ts"],detectBuilderInfo=async({mainConfig,configDir,packageManager})=>{let builderName,builderOrFrameworkName,{core={},framework}=mainConfig,{builder}=core,builderPackageName=getBuilderPackageName(mainConfig),frameworkPackageName=getFrameworkPackageName(mainConfig),builderOptions=typeof builder!="string"?builder?.options??{}:{};if(builderPackageName?builderOrFrameworkName=builderPackageName:framework&&Object.keys(frameworkPackages).includes(frameworkPackageName)&&(builderOrFrameworkName=frameworkPackageName,builderOptions=typeof framework=="object"?framework.options?.builder??{}:{}),!builderOrFrameworkName){let viteConfigFile2=await findUp2(viteConfigFiles2,{cwd:configDir});if(viteConfigFile2)logger15.info(`No builder or framework field, detected Storybook builder via: ${viteConfigFile2}`),builderOrFrameworkName="vite";else {let webpackConfigFile=await findUp2(webpackConfigFiles2,{cwd:configDir});webpackConfigFile&&(logger15.info(`No builder or framework field, detected Storybook builder via: ${webpackConfigFile}`),builderOrFrameworkName="webpack5");}}if(!builderOrFrameworkName){let storybookBuilderViteVersion=await packageManager.getPackageVersion("@storybook/builder-vite"),storybookBuilderVite2Version=await packageManager.getPackageVersion("storybook-builder-vite"),storybookBuilderWebpack5Version=await packageManager.getPackageVersion("@storybook/builder-webpack5"),storybookBuilderManagerWebpack5Version=await packageManager.getPackageVersion("@storybook/manager-webpack5");storybookBuilderViteVersion||storybookBuilderVite2Version?builderOrFrameworkName="vite":(storybookBuilderWebpack5Version||storybookBuilderManagerWebpack5Version)&&(builderOrFrameworkName="webpack5");}return builderOrFrameworkName?.includes("vite")||builderOrFrameworkName&&communityFrameworks.vite.includes(builderOrFrameworkName)?builderName="vite":(builderOrFrameworkName?.includes("webpack")||builderOrFrameworkName&&communityFrameworks.webpack5.includes(builderOrFrameworkName),builderName="webpack5"),{name:builderName,options:builderOptions}},getNextjsAddonOptions=addons=>{let nextjsAddon=addons?.find(addon=>typeof addon=="string"?addon==="storybook-addon-next":addon.name==="storybook-addon-next");return !nextjsAddon||typeof nextjsAddon=="string"?{}:nextjsAddon.options||{}};var detectRenderer=async packageJson=>{let allDependencies={...packageJson.dependencies,...packageJson.devDependencies,...packageJson.peerDependencies},matches=Object.keys(rendererPackages).filter(pkg2=>!!allDependencies[pkg2]),[rendererPackage]=matches;return matches.length>1&&(rendererPackage=(await prompts5([{type:"select",name:"rendererPackage",hint:"> - Use arrow-keys. Return to submit. To automate this next time, you can pass the renderer to the CLI via the --renderer flag",message:"Tried to detect a Storybook renderer in your project but found multiple. This could happen in monorepos, when projects contain multiple Storybook packages in package.json. Please select the correct one:",choices:matches.map(type=>({title:type,value:type}))}])).rendererPackage),rendererPackage};var logger16=console,newFrameworks={id:"new-frameworks",versionRange:["<7",">=7"],async check({configDir,packageManager,mainConfig,mainConfigPath,rendererPackage}){if(typeof configDir>"u")return null;let packageJson=await packageManager.retrievePackageJson(),frameworkPackageName=getFrameworkPackageName(mainConfig),rendererPackageName=rendererPackage??await getRendererPackageNameFromFramework(frameworkPackageName)??await detectRenderer(packageJson),hasFrameworkInMainConfig=!!frameworkPackageName;frameworkPackageName&&Object.values(rendererPackages).includes(frameworkPackageName)&&(hasFrameworkInMainConfig=!1);let builderConfig=mainConfig.core?.builder;if(!Object.keys(packagesMap).includes(rendererPackageName))return null;let allDependencies=await packageManager.getAllDependencies(),builderInfo=await detectBuilderInfo({mainConfig,configDir,packageManager}),newFrameworkPackage=Object.keys(frameworkPackages).find(pkg2=>pkg2===frameworkPackageName);if(newFrameworkPackage||(newFrameworkPackage=packagesMap[rendererPackageName]?.[builderInfo.name]),!newFrameworkPackage)return null;let renderer=rendererPackages[rendererPackageName],rendererOptions=mainConfig[`${renderer}Options`]||{},frameworkOptions=typeof mainConfig.framework=="string"?{}:mainConfig.framework?.options,dependenciesToRemove=["@storybook/builder-webpack5","@storybook/manager-webpack5","@storybook/builder-webpack4","@storybook/manager-webpack4","@storybook/builder-vite","storybook-builder-vite"],addonsToRemove=[],addonOptions={},metaFramework,nextVersion=await packageManager.getPackageVersion("next"),svelteKitVersion=await packageManager.getPackageVersion("@sveltejs/kit"),viteVersion=await packageManager.getPackageVersion("vite");if(rendererPackageName==="@storybook/react"&&nextVersion){let nextAddonOptions=getNextjsAddonOptions(mainConfig.addons);(nextVersion&&semver.gte(nextVersion,"12.0.0")||Object.keys(nextAddonOptions).length>0)&&(metaFramework="nextjs",(newFrameworkPackage==="@storybook/react-webpack5"||newFrameworkPackage==="@storybook/nextjs")&&(newFrameworkPackage="@storybook/nextjs",addonsToRemove=["storybook-addon-next","storybook-addon-next-router"].filter(dep=>allDependencies[dep]||mainConfig.addons?.find(addon=>typeof addon=="string"?dep===addon:dep===addon.name)),addonOptions=nextAddonOptions,dependenciesToRemove.push("@storybook/react-webpack5","storybook-addon-next","storybook-addon-next-router")));}else rendererPackageName==="@storybook/svelte"&&svelteKitVersion&&semver.gte(svelteKitVersion,"1.0.0")&&(metaFramework="sveltekit",newFrameworkPackage==="@storybook/svelte-vite"&&(newFrameworkPackage="@storybook/sveltekit",rendererOptions={},dependenciesToRemove.push("@storybook/svelte-vite")));let dependenciesToAdd=[newFrameworkPackage].filter(dep=>!allDependencies[dep]).filter(Boolean);if(dependenciesToRemove=dependenciesToRemove.filter(dep=>allDependencies[dep]).filter(Boolean),hasFrameworkInMainConfig&&!builderConfig&&!Object.keys(rendererOptions).length&&!Object.keys(addonOptions).length&&!dependenciesToRemove.length&&!dependenciesToAdd.length)return null;if(viteVersion&&semver.lt(viteVersion,"3.0.0"))throw new Error(dedent20`
270
+ ❌ Your project should be upgraded to use the framework package ${chalk15.bold(newFrameworkPackage)}, but we detected that you are using Vite ${chalk15.bold(viteVersion)}, which is unsupported since ${chalk15.bold("Storybook 7.0")}. Please upgrade Vite to ${chalk15.bold("3.0.0 or higher")} and rerun this migration.
276
271
  `);return invariant5(mainConfigPath,"Missing main config path."),{mainConfigPath,dependenciesToAdd,dependenciesToRemove,frameworkPackage:newFrameworkPackage,hasFrameworkInMainConfig,frameworkOptions:{...frameworkOptions,...rendererOptions,...addonOptions},rendererOptions,addonOptions,addonsToRemove,builderInfo,renderer,builderConfig,metaFramework}},prompt({dependenciesToRemove,dependenciesToAdd,hasFrameworkInMainConfig,mainConfigPath,frameworkPackage,addonOptions,renderer,rendererOptions,builderConfig,addonsToRemove,metaFramework}){let disclaimer="",migrationSteps="";return dependenciesToRemove.length>0&&(migrationSteps+=`- Remove the following dependencies:
277
- ${dependenciesToRemove.map(dep=>`- * ${chalk16.cyan(dep)}`).join(`
272
+ ${dependenciesToRemove.map(dep=>`- * ${chalk15.cyan(dep)}`).join(`
278
273
  `)}
279
274
  `),dependenciesToAdd.length>0&&(migrationSteps+=`- Add the following dependencies:
280
- ${dependenciesToAdd.map(dep=>`- * ${chalk16.cyan(dep)}`).join(`
275
+ ${dependenciesToAdd.map(dep=>`- * ${chalk15.cyan(dep)}`).join(`
281
276
  `)}
282
- `),hasFrameworkInMainConfig||(migrationSteps+=`- Update or specify the ${chalk16.yellow("framework")} field in ${chalk16.blue(mainConfigPath)} with the value of "${chalk16.cyan(frameworkPackage)}".
283
- `),Object.keys(rendererOptions).length>0&&(migrationSteps+=`- Move the ${chalk16.yellow(`${renderer}Options`)} field in ${chalk16.blue(mainConfigPath)} to ${chalk16.yellow("framework.options")}, and remove that field entirely.
284
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#frameworkoptions-renamed")}
285
- `),addonsToRemove.length>0&&(migrationSteps+=`- Remove the following addons from your ${chalk16.blue(mainConfigPath)}, as the new framework also supports features provided by them:
286
- ${addonsToRemove.map(dep=>`- * ${chalk16.cyan(dep)}`).join(`
277
+ `),hasFrameworkInMainConfig||(migrationSteps+=`- Update or specify the ${chalk15.yellow("framework")} field in ${chalk15.blue(mainConfigPath)} with the value of "${chalk15.cyan(frameworkPackage)}".
278
+ `),Object.keys(rendererOptions).length>0&&(migrationSteps+=`- Move the ${chalk15.yellow(`${renderer}Options`)} field in ${chalk15.blue(mainConfigPath)} to ${chalk15.yellow("framework.options")}, and remove that field entirely.
279
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#frameworkoptions-renamed")}
280
+ `),addonsToRemove.length>0&&(migrationSteps+=`- Remove the following addons from your ${chalk15.blue(mainConfigPath)}, as the new framework also supports features provided by them:
281
+ ${addonsToRemove.map(dep=>`- * ${chalk15.cyan(dep)}`).join(`
287
282
  `)}
288
- `),Object.keys(addonOptions).length>0&&(migrationSteps+=`- Move the addon options "${chalk16.yellow(Object.keys(addonOptions).join(", "))}" in ${chalk16.blue(mainConfigPath)} to the ${chalk16.yellow("framework.options")} field.
289
- `),builderConfig&&(typeof builderConfig=="object"&&Object.keys(builderConfig.options||{}).length>0&&(migrationSteps+=`- Move the ${chalk16.yellow("core.builder.options")} field in ${chalk16.blue(mainConfigPath)} to ${chalk16.yellow("framework.options.builder")}
290
- `),migrationSteps+=`- Remove the ${chalk16.yellow("core.builder")} field in ${chalk16.blue(mainConfigPath)}.
291
- `),(dependenciesToRemove.includes("@storybook/builder-webpack4")||dependenciesToRemove.includes("@storybook/manager-webpack4"))&&(disclaimer=dedent21`\n\n
292
- ${chalk16.underline(chalk16.bold(chalk16.cyan("Webpack 4 users")))}
283
+ `),Object.keys(addonOptions).length>0&&(migrationSteps+=`- Move the addon options "${chalk15.yellow(Object.keys(addonOptions).join(", "))}" in ${chalk15.blue(mainConfigPath)} to the ${chalk15.yellow("framework.options")} field.
284
+ `),builderConfig&&(typeof builderConfig=="object"&&Object.keys(builderConfig.options||{}).length>0&&(migrationSteps+=`- Move the ${chalk15.yellow("core.builder.options")} field in ${chalk15.blue(mainConfigPath)} to ${chalk15.yellow("framework.options.builder")}
285
+ `),migrationSteps+=`- Remove the ${chalk15.yellow("core.builder")} field in ${chalk15.blue(mainConfigPath)}.
286
+ `),(dependenciesToRemove.includes("@storybook/builder-webpack4")||dependenciesToRemove.includes("@storybook/manager-webpack4"))&&(disclaimer=dedent20`\n\n
287
+ ${chalk15.underline(chalk15.bold(chalk15.cyan("Webpack 4 users")))}
293
288
 
294
289
  Unless you're using Storybook's Vite builder, this automigration will install a Webpack 5 based framework.
295
290
 
296
291
  Given you were using Storybook's Webpack 4 builder (default in 6.x, discontinued in 7.0), this could be a breaking change -- especially if your project has a custom webpack configuration.
297
292
 
298
- To learn more about migrating from Webpack4, see: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack4-support-discontinued")}`),metaFramework==="nextjs"&&(dependenciesToRemove.includes("storybook-addon-next-router")&&(migrationSteps+=`- Migrate the usage of the ${chalk16.cyan("storybook-addon-next-router")} addon to use the APIs from the ${chalk16.magenta("@storybook/nextjs")} framework package instead. Follow the instructions below.`),frameworkPackage==="@storybook/react-vite"?disclaimer=dedent21`\n\n
299
- ${chalk16.bold("Important")}: We've detected you are using Storybook in a Next.js project.
293
+ To learn more about migrating from Webpack4, see: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#webpack4-support-discontinued")}`),metaFramework==="nextjs"&&(dependenciesToRemove.includes("storybook-addon-next-router")&&(migrationSteps+=`- Migrate the usage of the ${chalk15.cyan("storybook-addon-next-router")} addon to use the APIs from the ${chalk15.magenta("@storybook/nextjs")} framework package instead. Follow the instructions below.`),frameworkPackage==="@storybook/react-vite"?disclaimer=dedent20`\n\n
294
+ ${chalk15.bold("Important")}: We've detected you are using Storybook in a Next.js project.
300
295
 
301
- This migration is set to update your project to use the ${chalk16.magenta("@storybook/react-vite")} framework, but Storybook provides a framework package specifically for Next.js projects: ${chalk16.magenta("@storybook/nextjs")}.
296
+ This migration is set to update your project to use the ${chalk15.magenta("@storybook/react-vite")} framework, but Storybook provides a framework package specifically for Next.js projects: ${chalk15.magenta("@storybook/nextjs")}.
302
297
 
303
298
  This package provides a better, out of the box experience for Next.js users, however it is only compatible with the Webpack 5 builder, so we can't automigrate for you, as you are using the Vite builder. If you switch this project to use Webpack 5 and rerun this migration, we can update your project.
304
299
 
305
- If you are interested in using this package, see: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md")}
306
- `:frameworkPackage==="@storybook/nextjs"&&(disclaimer=dedent21`\n\n
307
- The ${chalk16.magenta("@storybook/nextjs")} package provides great user experience for Next.js users, and we highly recommend you to read more about it at ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md")}
308
- `)),metaFramework==="sveltekit"&&(frameworkPackage==="@storybook/svelte-webpack5"?disclaimer=dedent21`\n\n
309
- ${chalk16.bold("Important")}: We've detected you are using Storybook in a SvelteKit project.
300
+ If you are interested in using this package, see: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md")}
301
+ `:frameworkPackage==="@storybook/nextjs"&&(disclaimer=dedent20`\n\n
302
+ The ${chalk15.magenta("@storybook/nextjs")} package provides great user experience for Next.js users, and we highly recommend you to read more about it at ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/nextjs/README.md")}
303
+ `)),metaFramework==="sveltekit"&&(frameworkPackage==="@storybook/svelte-webpack5"?disclaimer=dedent20`\n\n
304
+ ${chalk15.bold("Important")}: We've detected you are using Storybook in a SvelteKit project.
310
305
 
311
- This migration is set to update your project to use the ${chalk16.magenta("@storybook/svelte-webpack5")} framework, but Storybook provides a framework package specifically for SvelteKit projects: ${chalk16.magenta("@storybook/sveltekit")}.
306
+ This migration is set to update your project to use the ${chalk15.magenta("@storybook/svelte-webpack5")} framework, but Storybook provides a framework package specifically for SvelteKit projects: ${chalk15.magenta("@storybook/sveltekit")}.
312
307
 
313
308
  This package provides a better experience for SvelteKit users, however it is only compatible with the Vite builder, so we can't automigrate for you, as you are using the Webpack builder.
314
309
 
315
- If you are interested in using this package, see: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/sveltekit/README.md")}
316
- `:(migrationSteps+=`- Remove the ${chalk16.yellow(`${renderer}Options`)} field from ${chalk16.blue(mainConfigPath)}.
317
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-uses-vite-config-automatically")}
318
- `,disclaimer=dedent21`\n\n
319
- The ${chalk16.magenta("@storybook/sveltekit")} package provides great user experience for SvelteKit users, and we highly recommend you to read more about it at ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/sveltekit/README.md")}
320
- `)),dedent21`
321
- We've detected your project is not fully setup with Storybook's 7 new framework format.
310
+ If you are interested in using this package, see: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/sveltekit/README.md")}
311
+ `:(migrationSteps+=`- Remove the ${chalk15.yellow(`${renderer}Options`)} field from ${chalk15.blue(mainConfigPath)}.
312
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#vite-builder-uses-vite-config-automatically")}
313
+ `,disclaimer=dedent20`\n\n
314
+ The ${chalk15.magenta("@storybook/sveltekit")} package provides great user experience for SvelteKit users, and we highly recommend you to read more about it at ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/code/frameworks/sveltekit/README.md")}
315
+ `)),dedent20`
316
+ We've detected your project is not fully setup with the new framework format, which was introduced in Storybook 7.
322
317
 
323
318
  Storybook 7 introduced the concept of frameworks, which abstracts configuration for renderers (e.g. React, Vue), builders (e.g. Webpack, Vite) and defaults to make integrations easier.
324
319
 
325
- Your project should be updated to use Storybook's framework: ${chalk16.magenta(frameworkPackage)}. We can attempt to do this for you automatically.
320
+ Your project should be updated to use Storybook's framework: ${chalk15.magenta(frameworkPackage)}. We can attempt to do this for you automatically.
326
321
 
327
322
  Here are the steps this migration will do to migrate your project:
328
323
  ${migrationSteps}
329
324
 
330
- To learn more about the new framework format, see: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#new-framework-api")}${disclaimer}
331
- `},async run({result:{dependenciesToAdd,dependenciesToRemove,frameworkPackage,frameworkOptions,builderInfo,renderer,addonsToRemove},packageManager,dryRun,mainConfigPath,skipInstall}){let packageJson=await packageManager.retrievePackageJson();if(dependenciesToRemove.length>0&&(logger17.info(`\u2705 Removing dependencies: ${dependenciesToRemove.join(", ")}`),dryRun||await packageManager.removeDependencies({skipInstall:skipInstall||dependenciesToAdd.length>0,packageJson},dependenciesToRemove)),dependenciesToAdd.length>0&&(logger17.info(`\u2705 Installing new dependencies: ${dependenciesToAdd.join(", ")}`),!dryRun)){let versionToInstall=getStorybookVersionSpecifier(packageJson),depsToAdd=dependenciesToAdd.map(dep=>`${dep}@${versionToInstall}`);await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall,packageJson},depsToAdd);}await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{logger17.info("\u2705 Updating main.js"),logger17.info('\u2705 Updating "framework" field'),dryRun||main.setFieldValue(["framework","name"],frameworkPackage),dryRun||main.setFieldValue(["framework","options"],frameworkOptions),main.getFieldNode([`${renderer}Options`])&&(logger17.info(`\u2705 Moving "${renderer}Options" to "framework.options"`),dryRun||main.removeField([`${renderer}Options`])),main.getFieldNode(["core","builder"])&&(logger17.info('\u2705 Removing "core.builder" field'),dryRun||main.removeField(["core","builder"])),Object.keys(builderInfo.options).length>0&&(logger17.info('\u2705 Moving "core.builder.options" into "framework.options.builder"'),dryRun||main.setFieldValue(["framework","options","builder"],builderInfo.options));let currentCore=main.getFieldValue(["core"]);if(currentCore&&Object.keys(currentCore).length===0&&(logger17.info('\u2705 Removing "core" field'),dryRun||main.removeField(["core"])),addonsToRemove.length>0){let updatedAddons=main.getFieldValue(["addons"]).filter(addon=>typeof addon=="string"?!addonsToRemove.includes(addon):addon.name?!addonsToRemove.includes(addon.name):!1);logger17.info("\u2705 Removing unnecessary addons"),dryRun||main.setFieldValue(["addons"],updatedAddons);}});}};var RemovedAPIs=(RemovedAPIs2=>(RemovedAPIs2.addDecorator="addDecorator",RemovedAPIs2.addParameters="addParameters",RemovedAPIs2.addLoader="addLoader",RemovedAPIs2.getStorybook="getStorybook",RemovedAPIs2.setAddon="setAddon",RemovedAPIs2.clearDecorators="clearDecorators",RemovedAPIs2))(RemovedAPIs||{}),removedGlobalClientAPIs={id:"removedglobalclientapis",promptOnly:!0,async check({previewConfigPath}){if(previewConfigPath){let contents=await readFile(previewConfigPath,"utf8"),usedAPIs=Object.values(RemovedAPIs).reduce((acc,item)=>(contents.includes(item)&&acc.push(item),acc),[]);if(usedAPIs.length)return {usedAPIs,previewPath:previewConfigPath}}return null},prompt({usedAPIs,previewPath}){return dedent21`
332
- ${chalk16.bold(chalk16.red("Attention"))}: We could not automatically make this change. You'll need to do it manually.
325
+ To learn more about the new framework format, see: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#new-framework-api")}${disclaimer}
326
+ `},async run({result:{dependenciesToAdd,dependenciesToRemove,frameworkPackage,frameworkOptions,builderInfo,renderer,addonsToRemove},packageManager,dryRun,mainConfigPath,skipInstall}){let packageJson=await packageManager.retrievePackageJson();if(dependenciesToRemove.length>0&&(logger16.info(`\u2705 Removing dependencies: ${dependenciesToRemove.join(", ")}`),dryRun||await packageManager.removeDependencies({skipInstall:skipInstall||dependenciesToAdd.length>0,packageJson},dependenciesToRemove)),dependenciesToAdd.length>0&&(logger16.info(`\u2705 Installing new dependencies: ${dependenciesToAdd.join(", ")}`),!dryRun)){let versionToInstall=getStorybookVersionSpecifier(packageJson),depsToAdd=dependenciesToAdd.map(dep=>`${dep}@${versionToInstall}`);await packageManager.addDependencies({installAsDevDependencies:!0,skipInstall,packageJson},depsToAdd);}await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{logger16.info("\u2705 Updating main.js"),logger16.info('\u2705 Updating "framework" field'),dryRun||main.setFieldValue(["framework","name"],frameworkPackage),dryRun||main.setFieldValue(["framework","options"],frameworkOptions),main.getFieldNode([`${renderer}Options`])&&(logger16.info(`\u2705 Moving "${renderer}Options" to "framework.options"`),dryRun||main.removeField([`${renderer}Options`])),main.getFieldNode(["core","builder"])&&(logger16.info('\u2705 Removing "core.builder" field'),dryRun||main.removeField(["core","builder"])),Object.keys(builderInfo.options).length>0&&(logger16.info('\u2705 Moving "core.builder.options" into "framework.options.builder"'),dryRun||main.setFieldValue(["framework","options","builder"],builderInfo.options));let currentCore=main.getFieldValue(["core"]);if(currentCore&&Object.keys(currentCore).length===0&&(logger16.info('\u2705 Removing "core" field'),dryRun||main.removeField(["core"])),addonsToRemove.length>0){let updatedAddons=main.getFieldValue(["addons"]).filter(addon=>typeof addon=="string"?!addonsToRemove.includes(addon):addon.name?!addonsToRemove.includes(addon.name):!1);logger16.info("\u2705 Removing unnecessary addons"),dryRun||main.setFieldValue(["addons"],updatedAddons);}});}};var RemovedAPIs=(RemovedAPIs2=>(RemovedAPIs2.addDecorator="addDecorator",RemovedAPIs2.addParameters="addParameters",RemovedAPIs2.addLoader="addLoader",RemovedAPIs2.getStorybook="getStorybook",RemovedAPIs2.setAddon="setAddon",RemovedAPIs2.clearDecorators="clearDecorators",RemovedAPIs2))(RemovedAPIs||{}),removedGlobalClientAPIs={id:"removedglobalclientapis",promptOnly:!0,versionRange:["<7",">=7"],async check({previewConfigPath}){if(previewConfigPath){let contents=await readFile(previewConfigPath,"utf8"),usedAPIs=Object.values(RemovedAPIs).reduce((acc,item)=>(contents.includes(item)&&acc.push(item),acc),[]);if(usedAPIs.length)return {usedAPIs,previewPath:previewConfigPath}}return null},prompt({usedAPIs,previewPath}){return dedent20`
327
+ ${chalk15.bold(chalk15.red("Attention"))}: We could not automatically make this change. You'll need to do it manually.
333
328
 
334
- The following APIs (used in "${chalk16.yellow(previewPath)}") have been removed from Storybook:
329
+ The following APIs (used in "${chalk15.yellow(previewPath)}") have been removed from Storybook:
335
330
 
336
- ${usedAPIs.map(api=>`- ${chalk16.cyan(api)}`).join(`
331
+ ${usedAPIs.map(api=>`- ${chalk15.cyan(api)}`).join(`
337
332
  `)}
338
333
 
339
334
  Please see the migration guide for more information:
340
- ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#removed-global-client-apis")}
341
- `}};var MDX1_STYLE_START=/<style>{`/g,MDX1_STYLE_END=/`}<\/style>/g,MDX1_COMMENT=/<!--(.+)-->/g,MDX1_CODEBLOCK=/(?:\n~~~(?:\n|.)*?\n~~~)|(?:\n```(?:\n|.)*?\n```)/g,fixMdxStyleTags=mdx=>mdx.replace(MDX1_STYLE_START,"<style>\n {`").replace(MDX1_STYLE_END," `}\n</style>"),fixMdxComments=mdx=>{let codeblocks=mdx.matchAll(MDX1_CODEBLOCK);return mdx.split(MDX1_CODEBLOCK).map(v=>v.replace(MDX1_COMMENT,(original,group)=>`{/*${group}*/}`)).reduce((acc,item,i)=>{let next=codeblocks.next();return next.done?acc+item:acc+item+next.value[0]},"")},logger18=console,mdx1to2={id:"mdx1to2",async check(){let storiesMdxFiles=await glob("./!(node_modules)**/*.(story|stories).mdx");return storiesMdxFiles.length?{storiesMdxFiles}:null},prompt({storiesMdxFiles}){return dedent`
342
- We've found ${chalk16.yellow(storiesMdxFiles.length)} '.stories.mdx' files in your project.
343
-
344
- Storybook has upgraded to MDX2 (https://mdxjs.com/blog/v2/), which contains breaking changes from MDX1.
345
- We can try to automatically upgrade your MDX files to MDX2 format using some common patterns.
346
-
347
- After this install completes, and before you start Storybook, we strongly recommend reading the MDX2 section
348
- of the 7.0 migration guide. It contains useful tools for detecting and fixing any remaining issues.
349
-
350
- ${chalk16.cyan("https://storybook.js.org/migration-guides/7.0")}
351
- `},async run({result:{storiesMdxFiles},dryRun}){await Promise.all([...storiesMdxFiles.map(async fname=>{let contents=await fse.readFile(fname,"utf-8"),updated=fixMdxComments(fixMdxStyleTags(contents));updated===contents?logger18.info(`\u{1F197} Unmodified ${basename(fname)}`):(logger18.info(`\u2705 Modified ${basename(fname)}`),dryRun||await fse.writeFile(fname,updated));})]);}};var logger19=console,autodocsTrue={id:"autodocsTrue",async check({mainConfig}){let{docs}=mainConfig,docsPageToAutodocsMapping={true:"tag",automatic:!0,false:!1};if(docs?.docsPage){let oldValue=docs?.docsPage.toString();if(!(oldValue in docsPageToAutodocsMapping))throw new Error(`Unexpected value for docs.docsPage: ${oldValue}`);return {value:docsPageToAutodocsMapping[oldValue]}}return docs?.autodocs===void 0?{value:!0}:null},prompt({value}){let autodocsFormatted=chalk16.cyan(`docs: { autodocs: ${JSON.stringify(value??!0)} }`),tagWarning=dedent`
335
+ ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#removed-global-client-apis")}
336
+ `}};var logger17=console,autodocsTrue={id:"autodocsTrue",versionRange:["<7",">=7"],async check({mainConfig}){let{docs}=mainConfig,docsPageToAutodocsMapping={true:"tag",automatic:!0,false:!1};if(docs?.docsPage){let oldValue=docs?.docsPage.toString();if(!(oldValue in docsPageToAutodocsMapping))throw new Error(`Unexpected value for docs.docsPage: ${oldValue}`);return {value:docsPageToAutodocsMapping[oldValue]}}return docs?.autodocs===void 0?{value:!0}:null},prompt({value}){let autodocsFormatted=chalk15.cyan(`docs: { autodocs: ${JSON.stringify(value??!0)} }`),tagWarning=dedent`
352
337
  NOTE: if you're upgrading from an older 7.0-beta using the 'docsPage' tag,
353
338
  please update your story files to use the 'autodocs' tag instead.
354
339
  `;return value?dedent`
@@ -361,7 +346,7 @@ Running Storybook`);try{let isReactWebProject=projectType==="REACT_SCRIPTS"||pro
361
346
 
362
347
  ${autodocsFormatted}
363
348
  ${value==="tag"?tagWarning:""}
364
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#autodocs-changes")}
349
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#autodocs-changes")}
365
350
  `:dedent`
366
351
  We've detected that your main.js configuration file has not configured autodocs. In 6.x we
367
352
  we defaulted to having a autodocs for every story, in 7.x you need to opt in per-component.
@@ -369,41 +354,30 @@ Running Storybook`);try{let isReactWebProject=projectType==="REACT_SCRIPTS"||pro
369
354
 
370
355
  ${autodocsFormatted}
371
356
 
372
- More info: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#autodocs-changes")}
373
- `},async run({result:{value},dryRun,mainConfigPath}){logger19.info("\u2705 Setting 'docs.autodocs' to true in main.js"),dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{main.removeField(["docs","docsPage"]),main.setFieldValue(["docs","autodocs"],value??!0);});}};var angularBuilders={id:"angular-builders",async check({packageManager,mainConfig}){let angularVersion=await packageManager.getPackageVersion("@angular/core"),framewworkPackageName=getFrameworkPackageName(mainConfig);if(!angularVersion||await isNxProject()||framewworkPackageName!=="@storybook/angular")return null;if(semver.lt(angularVersion,"15.0.0"))throw new Error(dedent`
374
- ❌ Your project uses Angular < 15.0.0. Storybook 8.0 for Angular requires Angular 15.0.0 or higher.
375
- Please upgrade your Angular version to at least version 15.0.0 to use Storybook 8.0 in your project.
376
- `);let angularJSON=new AngularJSON,{hasStorybookBuilder}=angularJSON;return hasStorybookBuilder||!angularJSON.rootProject&&Object.keys(angularJSON.projects).length>1?null:{mainConfig,packageManager}},prompt(){return dedent`
357
+ More info: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#autodocs-changes")}
358
+ `},async run({result:{value},dryRun,mainConfigPath}){logger17.info("\u2705 Setting 'docs.autodocs' to true in main.js"),dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{main.removeField(["docs","docsPage"]),main.setFieldValue(["docs","autodocs"],value??!0);});}};var angularBuilders={id:"angular-builders",versionRange:["<7",">=7"],async check({packageManager,mainConfig}){let angularVersion=await packageManager.getPackageVersion("@angular/core"),framewworkPackageName=getFrameworkPackageName(mainConfig);if(!angularVersion||await isNxProject()||framewworkPackageName!=="@storybook/angular")return null;let angularJSON=new AngularJSON,{hasStorybookBuilder}=angularJSON;return hasStorybookBuilder||!angularJSON.rootProject&&Object.keys(angularJSON.projects).length>1?null:{mainConfig,packageManager}},prompt(){return dedent`
377
359
  We have detected that your project does not use the Storybook Angular builder yet. In Storybook 6.4 we deprecated calling Storybook directly (npm run storybook) for Angular. In Storybook 7.0, we've removed it entirely.
378
360
 
379
361
  In order to use the Storybook Angular builder, we need to add a few entries to your angular.json file. Additionally, we will add the @compodoc/compodoc package to your devDependencies if you want and we will add a few scripts to your package.json file.
380
362
 
381
363
  Also feel free to remove the Compodoc script from your package.json file if you don't use it apart from Storybook anymore. Storybook uses Compodoc internally and you don't have to call in separately anymore.
382
364
 
383
- Read more about the Angular builder here: ${chalk16.yellow("https://github.com/storybookjs/storybook/tree/next/code/frameworks/angular#how-do-i-migrate-to-an-angular-storybook-builder")}
384
- `},async run({result}){let angularJSON=new AngularJSON,{packageManager}=result,{useCompoDoc}=await prompts5({type:"confirm",name:"useCompoDoc",message:"Have you set up compodoc in Storybook previously?"}),angularProjectName=await angularJSON.getProjectName();angularJSON.addStorybookEntries({angularProjectName,storybookFolder:".storybook",useCompodoc:useCompoDoc,root:"."}),angularJSON.write(),await packageManager.addScripts({storybook:`ng run ${angularProjectName}:storybook`,"build-storybook":`ng run ${angularProjectName}:build-storybook`});}};var getIncompatibleAddons=async(mainConfig,packageManager=JsPackageManagerFactory.getPackageManager())=>{let incompatibleList={"@storybook/addon-knobs":"6.4.0","@storybook/addon-postcss":"2.0.0","storybook-addon-next-router":"4.0.2","storybook-addon-outline":"1.4.2","@storybook/addon-info":"5.3.21","storybook-addon-designs":"6.3.1","storybook-addon-next":"1.7.0","storybook-docs-toc":"1.7.0","@storybook/addon-google-analytics":"6.2.9","storybook-addon-pseudo-states":"1.15.5","storybook-dark-mode":"2.1.1","storybook-addon-gatsby":"0.0.5","@etchteam/storybook-addon-css-variables-theme":"1.4.0","@storybook/addon-cssresources":"6.2.9","storybook-addon-grid":"0.3.1","storybook-multilevel-sort":"1.2.0","storybook-addon-i18next":"1.3.0","storybook-source-link":"2.0.8","babel-plugin-storybook-csf-title":"2.1.0","@urql/storybook-addon":"2.0.1","storybook-addon-intl":"2.4.1","storybook-addon-mock":"3.2.0","@chakra-ui/storybook-addon":"4.0.16","storybook-mobile-addon":"1.0.2","@storybook/addon-queryparams":"6.2.9"},addons=getAddonNames(mainConfig).filter(addon=>addon in incompatibleList),dependencies=await packageManager.getAllDependencies(),storybookPackages=Object.keys(dependencies).filter(dep=>dep.includes("storybook")),packagesToCheck=[...new Set([...addons,...storybookPackages])],addonVersions=await Promise.all(packagesToCheck.map(async addon=>({name:addon,version:await packageManager.getPackageVersion(addon)})));if(addonVersions.length===0)return [];let incompatibleAddons2=[];return addonVersions.forEach(({name,version:installedVersion})=>{if(installedVersion===null)return;let addonVersion=incompatibleList[name];try{semver.lte(semver.coerce(installedVersion),semver.coerce(addonVersion))&&incompatibleAddons2.push({name,version:installedVersion});}catch{}}),incompatibleAddons2};var incompatibleAddons={id:"incompatible-addons",promptOnly:!0,async check({mainConfig,packageManager}){let incompatibleAddonList=await getIncompatibleAddons(mainConfig,packageManager);return incompatibleAddonList.length>0?{incompatibleAddonList}:null},prompt({incompatibleAddonList}){return dedent21`
385
- ${chalk16.bold("Attention")}: We've detected that you're using the following addons in versions which are known to be incompatible with Storybook 7:
386
-
387
- ${incompatibleAddonList.map(({name,version})=>`- ${chalk16.cyan(`${name}@${version}`)}`).join(`
388
- `)}
389
-
390
- Please be aware they might not work in Storybook 7. Reach out to their maintainers for updates and check the following Github issue for more information:
391
- ${chalk16.yellow("https://github.com/storybookjs/storybook/issues/20529")}
392
- `}};var angularBuildersMultiproject={id:"angular-builders-multiproject",promptOnly:!0,async check({packageManager,mainConfig}){let angularVersion=await packageManager.getPackageVersion("@angular/core"),frameworkPackageName=getFrameworkPackageName(mainConfig);if(await isNxProject()||frameworkPackageName!=="@storybook/angular"||!angularVersion||semver.lt(angularVersion,"14.0.0"))return null;let angularJSON=new AngularJSON,{hasStorybookBuilder}=angularJSON;return hasStorybookBuilder||angularJSON.rootProject||Object.keys(angularJSON.projects).length===1?null:{}},prompt(){return dedent`
393
- In Storybook 6.4 we have deprecated calling Storybook directly (npm run storybook) for Angular. In Storybook 7.0, we've removed it entirely. Instead you have to set up the Storybook builder in your ${chalk16.yellow("angular.json")} and execute ${chalk16.yellow("ng run <your-project>:storybook")} to start Storybook.
365
+ Read more about the Angular builder here: ${chalk15.yellow("https://github.com/storybookjs/storybook/tree/next/code/frameworks/angular#how-do-i-migrate-to-an-angular-storybook-builder")}
366
+ `},async run({result}){let angularJSON=new AngularJSON,{packageManager}=result,{useCompoDoc}=await prompts5({type:"confirm",name:"useCompoDoc",message:"Have you set up compodoc in Storybook previously?"}),angularProjectName=await angularJSON.getProjectName();angularJSON.addStorybookEntries({angularProjectName,storybookFolder:".storybook",useCompodoc:useCompoDoc,root:"."}),angularJSON.write(),await packageManager.addScripts({storybook:`ng run ${angularProjectName}:storybook`,"build-storybook":`ng run ${angularProjectName}:build-storybook`});}};var angularBuildersMultiproject={id:"angular-builders-multiproject",promptOnly:!0,versionRange:["<7",">=7"],async check({packageManager,mainConfig}){let angularVersion=await packageManager.getPackageVersion("@angular/core"),frameworkPackageName=getFrameworkPackageName(mainConfig);if(await isNxProject()||frameworkPackageName!=="@storybook/angular"||!angularVersion||semver.lt(angularVersion,"14.0.0"))return null;let angularJSON=new AngularJSON,{hasStorybookBuilder}=angularJSON;return hasStorybookBuilder||angularJSON.rootProject||Object.keys(angularJSON.projects).length===1?null:{}},prompt(){return dedent`
367
+ In Storybook 6.4 we have deprecated calling Storybook directly (npm run storybook) for Angular. In Storybook 7.0, we've removed it entirely. Instead you have to set up the Storybook builder in your ${chalk15.yellow("angular.json")} and execute ${chalk15.yellow("ng run <your-project>:storybook")} to start Storybook.
394
368
 
395
- ❌ Your Angular workspace uses multiple projects defined in the ${chalk16.yellow("angular.json")} file and we were not able to detect a root project. Therefore we are not able to automigrate to use Angular Storybook builder. Instead, please visit ${chalk16.yellow("https://github.com/storybookjs/storybook/tree/next/code/frameworks/angular")} to do the migration manually.
369
+ ❌ Your Angular workspace uses multiple projects defined in the ${chalk15.yellow("angular.json")} file and we were not able to detect a root project. Therefore we are not able to automigrate to use Angular Storybook builder. Instead, please visit ${chalk15.yellow("https://github.com/storybookjs/storybook/tree/next/code/frameworks/angular")} to do the migration manually.
396
370
  `}};var defaultRequireWrapperName="getAbsolutePath";function doesVariableOrFunctionDeclarationExist(node,name){return t.isVariableDeclaration(node)&&node.declarations.length===1&&t.isVariableDeclarator(node.declarations[0])&&t.isIdentifier(node.declarations[0].id)&&node.declarations[0].id?.name===name||t.isFunctionDeclaration(node)&&t.isIdentifier(node.id)&&node.id.name===name}function getReferenceToRequireWrapper(config,value){return t.callExpression(t.identifier(getRequireWrapperName(config)??defaultRequireWrapperName),[t.stringLiteral(value)])}function getRequireWrapperName(config){let declarationName=config.getBodyDeclarations().flatMap(node=>doesVariableOrFunctionDeclarationExist(node,"wrapForPnp")?["wrapForPnp"]:doesVariableOrFunctionDeclarationExist(node,defaultRequireWrapperName)?[defaultRequireWrapperName]:[]);return declarationName.length?declarationName[0]:null}function isRequireWrapperNecessary(node,cb=()=>{}){if(t.isStringLiteral(node))return cb(node),!0;if(t.isObjectExpression(node)){let nameProperty=node.properties.find(property=>t.isObjectProperty(property)&&t.isIdentifier(property.key)&&property.key.name==="name");if(nameProperty&&t.isStringLiteral(nameProperty.value))return cb(nameProperty),!0}return t.isArrayExpression(node)&&node.elements.some(element=>element&&isRequireWrapperNecessary(element))?(cb(node),!0):!1}function getFieldsForRequireWrapper(config){let frameworkNode=config.getFieldNode(["framework"]),builderNode=config.getFieldNode(["core","builder"]),rendererNode=config.getFieldNode(["core","renderer"]),addons=config.getFieldNode(["addons"]);return [...frameworkNode?[frameworkNode]:[],...builderNode?[builderNode]:[],...rendererNode?[rendererNode]:[],...addons&&t.isArrayExpression(addons)?[addons]:[]]}function getRequireWrapperAsCallExpression(isConfigTypescript){let functionDeclaration2={...t.functionDeclaration(t.identifier(defaultRequireWrapperName),[{...t.identifier("value"),...isConfigTypescript?{typeAnnotation:t.tsTypeAnnotation(t.tSStringKeyword())}:{}}],t.blockStatement([t.returnStatement(t.callExpression(t.identifier("dirname"),[t.callExpression(t.memberExpression(t.identifier("require"),t.identifier("resolve")),[t.callExpression(t.identifier("join"),[t.identifier("value"),t.stringLiteral("package.json")])])]))])),...isConfigTypescript?{returnType:t.tSTypeAnnotation(t.tsAnyKeyword())}:{}};return t.addComment(functionDeclaration2,"leading",`*
397
371
  * This function is used to resolve the absolute path of a package.
398
372
  * It is needed in projects that use Yarn PnP or are set up within a monorepo.
399
- `),functionDeclaration2}function wrapValueWithRequireWrapper(config,node){isRequireWrapperNecessary(node,n=>{if(t.isStringLiteral(n)){let wrapperNode=getReferenceToRequireWrapper(config,n.value);Object.keys(n).forEach(k=>{delete n[k];}),Object.keys(wrapperNode).forEach(k=>{n[k]=wrapperNode[k];});}t.isObjectProperty(n)&&t.isStringLiteral(n.value)&&(n.value=getReferenceToRequireWrapper(config,n.value.value)),t.isArrayExpression(n)&&n.elements.forEach((element,index,elements)=>{t.isStringLiteral(element)&&(elements[index]=getReferenceToRequireWrapper(config,element.value));});});}var wrapRequire={id:"wrap-require",async check({packageManager,storybookVersion,mainConfigPath}){let isStorybookInMonorepo=await packageManager.isStorybookInMonorepo(),isPnp=await detectPnp();if(!mainConfigPath)return null;let config=await readConfig(mainConfigPath);if(!isStorybookInMonorepo&&!isPnp||!getFieldsForRequireWrapper(config).some(node=>isRequireWrapperNecessary(node)))return null;let isConfigTypescript=mainConfigPath.endsWith(".ts")||mainConfigPath.endsWith(".tsx");return {storybookVersion,isStorybookInMonorepo,isPnp,isConfigTypescript}},prompt({storybookVersion,isStorybookInMonorepo}){let sbFormatted=chalk16.cyan(`Storybook ${storybookVersion}`);return dedent`We have detected that you're using ${sbFormatted} in a ${isStorybookInMonorepo?"monorepo":"PnP"} project.
373
+ `),functionDeclaration2}function wrapValueWithRequireWrapper(config,node){isRequireWrapperNecessary(node,n=>{if(t.isStringLiteral(n)){let wrapperNode=getReferenceToRequireWrapper(config,n.value);Object.keys(n).forEach(k=>{delete n[k];}),Object.keys(wrapperNode).forEach(k=>{n[k]=wrapperNode[k];});}t.isObjectProperty(n)&&t.isStringLiteral(n.value)&&(n.value=getReferenceToRequireWrapper(config,n.value.value)),t.isArrayExpression(n)&&n.elements.forEach((element,index,elements)=>{t.isStringLiteral(element)&&(elements[index]=getReferenceToRequireWrapper(config,element.value));});});}var wrapRequire={id:"wrap-require",versionRange:["<7.2.0-rc.0",">=7.2.0-rc.0"],async check({packageManager,storybookVersion,mainConfigPath}){let isStorybookInMonorepo=await packageManager.isStorybookInMonorepo(),isPnp=await detectPnp();if(!mainConfigPath)return null;let config=await readConfig(mainConfigPath);if(!isStorybookInMonorepo&&!isPnp||!getFieldsForRequireWrapper(config).some(node=>isRequireWrapperNecessary(node)))return null;let isConfigTypescript=mainConfigPath.endsWith(".ts")||mainConfigPath.endsWith(".tsx");return {storybookVersion,isStorybookInMonorepo,isPnp,isConfigTypescript}},prompt({storybookVersion,isStorybookInMonorepo}){let sbFormatted=chalk15.cyan(`Storybook ${storybookVersion}`);return dedent`We have detected that you're using ${sbFormatted} in a ${isStorybookInMonorepo?"monorepo":"PnP"} project.
400
374
  For Storybook to work correctly, some fields in your main config must be updated. We can do this for you automatically.
401
375
 
402
- More info: https://storybook.js.org/docs/react/faq#how-do-i-fix-module-resolution-in-special-environments`},async run({dryRun,mainConfigPath,result}){return new Promise((resolve2,reject)=>{updateMainConfig({dryRun:!!dryRun,mainConfigPath},mainConfig=>{try{getFieldsForRequireWrapper(mainConfig).forEach(node=>{wrapValueWithRequireWrapper(mainConfig,node);}),getRequireWrapperName(mainConfig)===null&&(mainConfig?.fileName?.endsWith(".cjs")||mainConfig?.fileName?.endsWith(".cts")||mainConfig?.fileName?.endsWith(".cjsx")||mainConfig?.fileName?.endsWith(".ctsx")?mainConfig.setRequireImport(["dirname","join"],"path"):mainConfig.setImport(["dirname","join"],"path"),mainConfig.setBodyDeclaration(getRequireWrapperAsCallExpression(result.isConfigTypescript))),resolve2();}catch(e){reject(e);}});})}};var logger20=console,reactDocgen={id:"react-docgen",async check({mainConfig}){let{reactDocgenTypescriptOptions}=mainConfig.typescript||{};return reactDocgenTypescriptOptions?{reactDocgenTypescriptOptions}:null},prompt(){return dedent`
376
+ More info: https://storybook.js.org/docs/react/faq#how-do-i-fix-module-resolution-in-special-environments`},async run({dryRun,mainConfigPath,result}){return new Promise((resolve2,reject)=>{updateMainConfig({dryRun:!!dryRun,mainConfigPath},mainConfig=>{try{getFieldsForRequireWrapper(mainConfig).forEach(node=>{wrapValueWithRequireWrapper(mainConfig,node);}),getRequireWrapperName(mainConfig)===null&&(mainConfig?.fileName?.endsWith(".cjs")||mainConfig?.fileName?.endsWith(".cts")||mainConfig?.fileName?.endsWith(".cjsx")||mainConfig?.fileName?.endsWith(".ctsx")?mainConfig.setRequireImport(["dirname","join"],"path"):mainConfig.setImport(["dirname","join"],"path"),mainConfig.setBodyDeclaration(getRequireWrapperAsCallExpression(result.isConfigTypescript))),resolve2();}catch(e){reject(e);}});})}};var logger18=console,reactDocgen={id:"react-docgen",versionRange:["<8.0.0-alpha.1",">=8.0.0-alpha.1"],async check({mainConfig}){let{reactDocgenTypescriptOptions}=mainConfig.typescript||{};return reactDocgenTypescriptOptions?{reactDocgenTypescriptOptions}:null},prompt(){return dedent`
403
377
  You have "typescript.reactDocgenTypescriptOptions" configured in your main.js,
404
378
  but "typescript.reactDocgen" is unset.
405
379
 
406
- In Storybook 8.0, we changed the default React docgen analysis from
380
+ Since Storybook 8.0, we changed the default React docgen analysis from
407
381
  "react-docgen-typescript" to "react-docgen". We recommend "react-docgen"
408
382
  for most projects, since it is dramatically faster. However, it doesn't
409
383
  handle all TypeScript constructs, and may generate different results
@@ -412,170 +386,176 @@ Running Storybook`);try{let isReactWebProject=projectType==="REACT_SCRIPTS"||pro
412
386
  Should we update your config to continue to use "react-docgen-typescript"?
413
387
 
414
388
  https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#react-docgen-component-analysis-by-default
415
- `},async run({dryRun,mainConfigPath}){dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{logger20.info("\u2705 Setting typescript.reactDocgen"),dryRun||main.setFieldValue(["typescript","reactDocgen"],"react-docgen-typescript");});}};var removeReactDependency={id:"remove-react-dependency",promptOnly:!0,async check({packageManager,mainConfig,storybookVersion}){let frameworkPackageName=getFrameworkPackageName(mainConfig);if(frameworkPackageName?.includes("react")||frameworkPackageName?.includes("nextjs"))return null;let packageJson=await packageManager.retrievePackageJson();return !packageJson?.dependencies?.react&&!packageJson?.peerDependencies?.react&&!packageJson?.devDependencies?.react||!semver.gte(storybookVersion,"8.0.0")?null:!0},prompt(){return dedent21`
389
+ `},async run({dryRun,mainConfigPath}){dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{logger18.info("\u2705 Setting typescript.reactDocgen"),dryRun||main.setFieldValue(["typescript","reactDocgen"],"react-docgen-typescript");});}};var minimumStorybookVersion="8.0.0-alpha.4",removeReactDependency={id:"remove-react-dependency",promptOnly:!0,versionRange:[">=7 <8.0.0-alpha.4",`>=${minimumStorybookVersion}`],async check({packageManager,mainConfig,storybookVersion}){let frameworkPackageName=getFrameworkPackageName(mainConfig);if(frameworkPackageName?.includes("react")||frameworkPackageName?.includes("nextjs"))return null;let packageJson=await packageManager.retrievePackageJson();return !packageJson?.dependencies?.react&&!packageJson?.peerDependencies?.react&&!packageJson?.devDependencies?.react||!semver.gte(storybookVersion,minimumStorybookVersion)?null:!0},prompt(){return dedent20`
416
390
  We detected that your project has a dependency for "react" that it might not need.
417
391
  Nothing breaks by having it, you can safely ignore this message, if you wish.
418
392
 
419
- Storybook asked you to add "react" as a direct dependency in the past.
393
+ Storybook asked you to add "react" as a direct dependency in the past when upgrading from Storybook 6 to 7.
420
394
  However, since version 8.0, Storybook no longer requires you to provide "react" as a dependency.
421
395
  Some community addons might still wrongfully list "react" and "react-dom" as required peer dependencies, but since Storybook 7.6 it should not be needed in the majority of cases.
422
396
 
423
397
  If you know you are not using React outside of Storybook, it should be safe to remove the "react" and "react-dom" dependencies from your project's package.json.
424
398
  Storybook cannot do this automatically as removing it might break your project, so it should be done manually with care.
425
- `}};var storyshotsMigration={id:"storyshots-migration",promptOnly:!0,async check({mainConfig,packageManager}){return ((await packageManager.getAllDependencies())["@storybook/addon-storyshots"]||mainConfig.addons?.find(addon=>(typeof addon=="string"?addon:addon.name).includes("@storybook/addon-storyshots")))??null},prompt(){return dedent21`
426
- ${chalk16.bold("Attention")}: Storyshots is now officially deprecated, is no longer being maintained, and was removed in Storybook 8.
399
+ `}};var storyshotsMigration={id:"storyshots-migration",versionRange:["<8.0.0-alpha.0",">=8.0.0-alpha.0"],promptOnly:!0,async check({mainConfig,packageManager}){return ((await packageManager.getAllDependencies())["@storybook/addon-storyshots"]||mainConfig.addons?.find(addon=>(typeof addon=="string"?addon:addon.name).includes("@storybook/addon-storyshots")))??null},prompt(){return dedent20`
400
+ ${chalk15.bold("Attention")}: Storyshots is now officially deprecated, is no longer being maintained, and was removed in Storybook 8.
427
401
 
428
402
  We recommend following the migration guide we've prepared to help you during this transition period:
429
- ${chalk16.yellow("https://storybook.js.org/docs/writing-tests/storyshots-migration-guide")}
430
- `}};var removeJestTestingLibrary={id:"remove-jest-testing-library",promptOnly:!0,async check({mainConfig,packageManager}){let deps=await packageManager.getAllDependencies(),incompatiblePackages=Object.keys(deps).filter(it=>it==="@storybook/jest"||it==="@storybook/testing-library");return incompatiblePackages.length?{incompatiblePackages}:null},prompt({incompatiblePackages}){return dedent21`
431
- ${chalk16.bold("Attention")}: We've detected that you're using the following packages which are known to be incompatible with Storybook 8:
403
+ ${chalk15.yellow("https://storybook.js.org/docs/writing-tests/storyshots-migration-guide")}
404
+ `}};var removeJestTestingLibrary={id:"remove-jest-testing-library",versionRange:["<8.0.0-alpha.0",">=8.0.0-alpha.0"],promptOnly:!0,async check({packageManager}){let deps=await packageManager.getAllDependencies(),incompatiblePackages=Object.keys(deps).filter(it=>it==="@storybook/jest"||it==="@storybook/testing-library");return incompatiblePackages.length?{incompatiblePackages}:null},prompt({incompatiblePackages}){return dedent20`
405
+ ${chalk15.bold("Attention")}: We've detected that you're using the following packages which are known to be incompatible since Storybook 8:
432
406
 
433
- ${incompatiblePackages.map(name=>`- ${chalk16.cyan(`${name}`)}`).join(`
407
+ ${incompatiblePackages.map(name=>`- ${chalk15.cyan(`${name}`)}`).join(`
434
408
  `)}
435
409
 
436
- Install the replacement for those packages: ${chalk16.cyan("@storybook/test")}
410
+ Install the replacement for those packages: ${chalk15.cyan("@storybook/test")}
437
411
 
438
412
  And run the following codemod:
439
- ${chalk16.cyan('npx storybook migrate migrate-to-test-package --glob="**/*.stories.@(js|jsx|ts|tsx)"')}
440
- `}};var allFixes=[newFrameworks,cra5,webpack5,vue3,vite4,viteConfigFile,eslintPlugin,builderVite,sbBinary,sbScripts,incompatibleAddons,removeJestTestingLibrary,removedGlobalClientAPIs,mdx1to2,mdxgfm,autodocsTrue,angularBuildersMultiproject,angularBuilders,wrapRequire,reactDocgen,storyshotsMigration,removeReactDependency];var ansiRegex4=({onlyFirst=!1}={})=>{let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")},cleanLog=str=>str.replace(ansiRegex4(),"").replace(/╮│/g,`\u256E
413
+ ${chalk15.cyan('npx storybook migrate migrate-to-test-package --glob="**/*.stories.@(js|jsx|ts|tsx)"')}
414
+ `}};var allFixes=[newFrameworks,cra5,webpack5,vue3,viteConfigFile,eslintPlugin,builderVite,sbBinary,sbScripts,removeJestTestingLibrary,removedGlobalClientAPIs,mdxgfm,autodocsTrue,angularBuildersMultiproject,angularBuilders,wrapRequire,reactDocgen,storyshotsMigration,removeReactDependency];var ansiRegex4=({onlyFirst=!1}={})=>{let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")},cleanLog=str=>str.replace(ansiRegex4(),"").replace(/╮│/g,`\u256E
441
415
  \u2502`).replace(/││/g,`\u2502
442
416
  \u2502`).replace(/│╰/g,`\u2502
443
417
  \u2570`).replace(/⚠️ {2}failed to check/g,`${EOL}\u26A0\uFE0F failed to check`);function hasMultipleVersions(versions7){return versions7.find(v=>{let major=semver.major(v);if(major===0){let minor=semver.minor(v);if(minor===0){let patch=semver.patch(v);return versions7.some(v2=>semver.patch(v2)!==patch)}return versions7.some(v2=>semver.minor(v2)!==minor)}return versions7.some(v2=>semver.major(v2)!==major)})}var messageDivider=`
444
418
 
445
- `,allowList=["@storybook/csf","@storybook/addons","@storybook/channel-postmessage","@storybook/channel-websocket","@storybook/client-api","@storybook/client-logger","@storybook/core-client","@storybook/preview-web","@storybook/preview-api","@storybook/store","@storybook/components","@storybook/router","@storybook/theming","@storybook/api","@storybook/manager-api"],disallowList=[Object.keys(rendererPackages),Object.keys(frameworkPackages),"@storybook/core-events","@storybook/instrumenter","@storybook/core-common","@storybook/core-server","@storybook/manager","@storybook/preview"];function getDuplicatedDepsWarnings(installationMetadata){try{if(!installationMetadata||!installationMetadata?.duplicatedDependencies||Object.keys(installationMetadata.duplicatedDependencies).length===0)return;let messages=[],{critical,trivial}=Object.entries(installationMetadata?.duplicatedDependencies).reduce((acc,[dep,packageVersions2])=>{if(allowList.includes(dep))return acc;let hasMultipleMajorVersions=hasMultipleVersions(packageVersions2);return disallowList.includes(dep)&&hasMultipleMajorVersions?acc.critical.push(`${chalk16.redBright(dep)}:
446
- ${packageVersions2.join(", ")}`):acc.trivial.push(`${chalk16.hex("#ff9800")(dep)}:
447
- ${packageVersions2.join(", ")}`),acc},{critical:[],trivial:[]});return critical.length===0&&trivial.length===0||(critical.length>0&&(messages.push(`${chalk16.bold("Critical:")} The following dependencies are duplicated and WILL cause unexpected behavior:`),messages.push(critical.join(messageDivider),`
448
- `)),trivial.length>0&&(messages.push(`${chalk16.bold("Attention:")} The following dependencies are duplicated which might cause unexpected behavior:`),messages.push(trivial.join(messageDivider))),messages.push(`
449
- `,`You can find more information for a given dependency by running ${chalk16.cyan(`${installationMetadata.infoCommand} <package-name>`)}`),messages.push(`
450
- `,`Please try de-duplicating these dependencies by running ${chalk16.cyan(`${installationMetadata.dedupeCommand}`)}`)),messages}catch{return}}var messageDivider2=`
419
+ `,allowList=["@storybook/csf","@storybook/addons","@storybook/channel-postmessage","@storybook/channel-websocket","@storybook/client-api","@storybook/client-logger","@storybook/core-client","@storybook/preview-web","@storybook/preview-api","@storybook/store","@storybook/components","@storybook/router","@storybook/theming","@storybook/api","@storybook/manager-api"],disallowList=[Object.keys(rendererPackages),Object.keys(frameworkPackages),"@storybook/core-events","@storybook/instrumenter","@storybook/core-common","@storybook/core-server","@storybook/manager","@storybook/preview"];function getDuplicatedDepsWarnings(installationMetadata){try{if(!installationMetadata||!installationMetadata?.duplicatedDependencies||Object.keys(installationMetadata.duplicatedDependencies).length===0)return;let messages=[],{critical,trivial}=Object.entries(installationMetadata?.duplicatedDependencies).reduce((acc,[dep,packageVersions2])=>{if(allowList.includes(dep))return acc;let hasMultipleMajorVersions=hasMultipleVersions(packageVersions2);return disallowList.includes(dep)&&hasMultipleMajorVersions?acc.critical.push(`${chalk15.redBright(dep)}:
420
+ ${packageVersions2.join(", ")}`):acc.trivial.push(`${chalk15.hex("#ff9800")(dep)}:
421
+ ${packageVersions2.join(", ")}`),acc},{critical:[],trivial:[]});return critical.length===0&&trivial.length===0||(critical.length>0&&(messages.push(`${chalk15.bold("Critical:")} The following dependencies are duplicated and WILL cause unexpected behavior:`),messages.push(critical.join(messageDivider),`
422
+ `)),trivial.length>0&&(messages.push(`${chalk15.bold("Attention:")} The following dependencies are duplicated which might cause unexpected behavior:`),messages.push(trivial.join(messageDivider))),messages.push(`
423
+ `,`You can find more information for a given dependency by running ${chalk15.cyan(`${installationMetadata.infoCommand} <package-name>`)}`),messages.push(`
424
+ `,`Please try de-duplicating these dependencies by running ${chalk15.cyan(`${installationMetadata.dedupeCommand}`)}`)),messages}catch{return}}var messageDivider2=`
451
425
 
452
426
  `,segmentDivider=`
453
427
 
454
428
  \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500
455
429
 
456
- `;function getGlossaryMessages(fixSummary,fixResults,logFile){let messages=[];return fixSummary.succeeded.length>0&&(messages.push(chalk16.bold("Successful migrations:")),messages.push(fixSummary.succeeded.map(m=>chalk16.green(m)).join(", "))),Object.keys(fixSummary.failed).length>0&&(messages.push(chalk16.bold("Failed migrations:")),messages.push(Object.entries(fixSummary.failed).map(([id,error])=>`${chalk16.redBright(id)}:
430
+ `;function getGlossaryMessages(fixSummary,fixResults,logFile){let messages=[];return fixSummary.succeeded.length>0&&(messages.push(chalk15.bold("Successful migrations:")),messages.push(fixSummary.succeeded.map(m=>chalk15.green(m)).join(", "))),Object.keys(fixSummary.failed).length>0&&(messages.push(chalk15.bold("Failed migrations:")),messages.push(Object.entries(fixSummary.failed).map(([id,error])=>`${chalk15.redBright(id)}:
457
431
  ${error}`).join(`
458
- `)),messages.push(`You can find the full logs in ${chalk16.cyan(logFile)}`)),fixSummary.manual.length>0&&(messages.push(chalk16.bold("Manual migrations:")),messages.push(fixSummary.manual.map(m=>fixResults[m]==="manual_succeeded"?chalk16.green(m):chalk16.blue(m)).join(", "))),fixSummary.skipped.length>0&&(messages.push(chalk16.bold("Skipped migrations:")),messages.push(fixSummary.skipped.map(m=>chalk16.cyan(m)).join(", "))),messages}function getMigrationSummary({fixResults,fixSummary,logFile,installationMetadata}){let messages=[];messages.push(getGlossaryMessages(fixSummary,fixResults,logFile).join(messageDivider2)),messages.push(dedent21`If you'd like to run the migrations again, you can do so by running '${chalk16.cyan("npx storybook@next automigrate")}'
432
+ `)),messages.push(`You can find the full logs in ${chalk15.cyan(logFile)}`)),fixSummary.manual.length>0&&(messages.push(chalk15.bold("Manual migrations:")),messages.push(fixSummary.manual.map(m=>fixResults[m]==="manual_succeeded"?chalk15.green(m):chalk15.blue(m)).join(", "))),fixSummary.skipped.length>0&&(messages.push(chalk15.bold("Skipped migrations:")),messages.push(fixSummary.skipped.map(m=>chalk15.cyan(m)).join(", "))),messages}function getMigrationSummary({fixResults,fixSummary,logFile,installationMetadata}){let messages=[];messages.push(getGlossaryMessages(fixSummary,fixResults,logFile).join(messageDivider2)),messages.push(dedent20`If you'd like to run the migrations again, you can do so by running '${chalk15.cyan("npx storybook@next automigrate")}'
459
433
 
460
434
  The automigrations try to migrate common patterns in your project, but might not contain everything needed to migrate to the latest version of Storybook.
461
435
 
462
- Please check the changelog and migration guide for manual migrations and more information: ${chalk16.yellow("https://storybook.js.org/migration-guides/7.0")}
463
- And reach out on Discord if you need help: ${chalk16.yellow("https://discord.gg/storybook")}
464
- `);let duplicatedDepsMessage=installationMetadata?getDuplicatedDepsWarnings(installationMetadata):getDuplicatedDepsWarnings();duplicatedDepsMessage&&messages.push(duplicatedDepsMessage.join(messageDivider2));let hasNoFixes=Object.values(fixResults).every(r=>r==="unnecessary"),hasFailures=Object.values(fixResults).some(r=>r==="failed"||r==="check_failed"),title=hasNoFixes?"No migrations were applicable to your project":hasFailures?"Migration check ran with failures":"Migration check ran successfully";return boxen(messages.filter(Boolean).join(segmentDivider),{borderStyle:"round",padding:1,title,borderColor:hasFailures?"red":"green"})}var logger21=console,LOG_FILE_NAME="migration-storybook.log",LOG_FILE_PATH=join(process.cwd(),LOG_FILE_NAME),TEMP_LOG_FILE_PATH="",originalStdOutWrite=process.stdout.write.bind(process.stdout),originalStdErrWrite=process.stderr.write.bind(process.stdout),augmentLogsToFile=()=>{TEMP_LOG_FILE_PATH=tempy__default.file({name:LOG_FILE_NAME});let logStream=createWriteStream(TEMP_LOG_FILE_PATH);process.stdout.write=d=>(originalStdOutWrite(d),logStream.write(cleanLog(d))),process.stderr.write=d=>logStream.write(cleanLog(d));},cleanup=()=>{process.stdout.write=originalStdOutWrite,process.stderr.write=originalStdErrWrite;},logAvailableMigrations=()=>{let availableFixes=allFixes.map(f=>chalk16.yellow(f.id)).join(", ");logger21.info(`
465
- The following migrations are available: ${availableFixes}`);},doAutomigrate=async options=>{let packageManager=JsPackageManagerFactory.getPackageManager({force:options.packageManager}),[packageJson,storybookVersion]=await Promise.all([packageManager.retrievePackageJson(),getCoercedStorybookVersion(packageManager)]),{configDir:inferredConfigDir,mainConfig:mainConfigPath}=getStorybookInfo(packageJson,options.configDir),configDir=options.configDir||inferredConfigDir||".storybook";if(!storybookVersion)throw new Error("Could not determine Storybook version");if(!mainConfigPath)throw new Error("Could not determine main config path");return automigrate({...options,packageManager,storybookVersion,mainConfigPath,configDir})},automigrate=async({fixId,fixes:inputFixes,dryRun,yes,packageManager,list,configDir,mainConfigPath,storybookVersion,renderer:rendererPackage,skipInstall,hideMigrationSummary=!1})=>{if(list)return logAvailableMigrations(),null;let selectedFixes=inputFixes||allFixes,fixes=fixId?selectedFixes.filter(f=>f.id===fixId):selectedFixes;if(fixId&&fixes.length===0)return logger21.info(`\u{1F4ED} No migrations found for ${chalk16.magenta(fixId)}.`),logAvailableMigrations(),null;augmentLogsToFile(),logger21.info("\u{1F50E} checking possible migrations..");let{fixResults,fixSummary,preCheckFailure}=await runFixes({fixes,packageManager,rendererPackage,skipInstall,configDir,mainConfigPath,storybookVersion,dryRun,yes});if(Object.values(fixResults).some(r=>r==="failed"||r==="check_failed")?await move(TEMP_LOG_FILE_PATH,join(process.cwd(),LOG_FILE_NAME),{overwrite:!0}):await remove(TEMP_LOG_FILE_PATH),!hideMigrationSummary){let installationMetadata=await packageManager.findInstallations(["@storybook/*","storybook"]);logger21.info(),logger21.info(getMigrationSummary({fixResults,fixSummary,logFile:LOG_FILE_PATH,installationMetadata})),logger21.info();}return cleanup(),{fixResults,preCheckFailure}};async function runFixes({fixes,dryRun,yes,rendererPackage,skipInstall,configDir,packageManager,mainConfigPath,storybookVersion}){let fixResults={},fixSummary={succeeded:[],failed:{},manual:[],skipped:[]};for(let i=0;i<fixes.length;i+=1){let f=fixes[i],result;try{let{mainConfig,previewConfigPath}=await getStorybookData({configDir,packageManager});result=await f.check({packageManager,configDir,rendererPackage,mainConfig,storybookVersion,previewConfigPath,mainConfigPath});}catch(error){logger21.info(`\u26A0\uFE0F failed to check fix ${chalk16.bold(f.id)}`),error instanceof Error&&(logger21.error(`
466
- ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_failed";}if(result){logger21.info(`
467
- \u{1F50E} found a '${chalk16.cyan(f.id)}' migration:`);let message=f.prompt(result);logger21.info(boxen(message,{borderStyle:"round",padding:1,borderColor:"#F1618C",title:f.promptOnly?"Manual migration detected":"Automigration detected"}));let runAnswer;try{if(dryRun)runAnswer={fix:!1};else if(yes)runAnswer={fix:!0},f.promptOnly&&(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id));else if(f.promptOnly){fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id),logger21.info();let{shouldContinue}=await prompts5({type:"toggle",name:"shouldContinue",message:"Select continue once you have made the required changes, or quit to exit the migration process",initial:!0,active:"continue",inactive:"quit"},{onCancel:()=>{throw new Error}});if(!shouldContinue){fixResults[f.id]="manual_skipped";break}}else runAnswer=await prompts5({type:"confirm",name:"fix",message:`Do you want to run the '${chalk16.cyan(f.id)}' migration on your project?`,initial:!0},{onCancel:()=>{throw new Error}});}catch{break}if(!f.promptOnly)if(invariant5(runAnswer,"runAnswer must be defined if not promptOnly"),runAnswer.fix)try{invariant5(typeof f.run=="function","run method should be available in fix."),invariant5(mainConfigPath,"Main config path should be defined to run migration."),await f.run({result,packageManager,dryRun,mainConfigPath,skipInstall}),logger21.info(`\u2705 ran ${chalk16.cyan(f.id)} migration`),fixResults[f.id]="succeeded",fixSummary.succeeded.push(f.id);}catch(error){fixResults[f.id]="failed",fixSummary.failed[f.id]=error instanceof Error?error.message:"Failed to run migration",logger21.info(`\u274C error when running ${chalk16.cyan(f.id)} migration`),logger21.info(error),logger21.info();}else fixResults[f.id]="skipped",fixSummary.skipped.push(f.id);}else fixResults[f.id]=fixResults[f.id]||"unnecessary";}return {fixResults,fixSummary}}var logger22=console,getNextGlob=glob2=>{let extGlobsRegex=new RegExp(/(.*\.)(stories\.@.*)(\|mdx|mdx\|)(.*)$/i);if(glob2.match(extGlobsRegex))return glob2.replace(extGlobsRegex,"$1@(mdx|$2$4)");let allStoriesExtensionsRegex=new RegExp(/(.*\.)(stories\.\*)$/i);return glob2.match(allStoriesExtensionsRegex)?glob2.replace(allStoriesExtensionsRegex,"$1@(mdx|$2)"):glob2.replaceAll(".stories.mdx",".mdx")},bareMdxStoriesGlob={id:"bare-mdx-stories-glob",async check({storybookVersion,mainConfig}){if(!semver.gte(storybookVersion,"7.0.0"))return null;let existingStoriesEntries=mainConfig.stories;if(!existingStoriesEntries)throw new Error(dedent21`
468
- ❌ Unable to determine Storybook stories globs in ${chalk16.blue(mainConfig)}, skipping ${chalk16.cyan(this.id)} fix.
436
+ Please check the changelog and migration guide for manual migrations and more information: ${chalk15.yellow("https://storybook.js.org/migration-guides/7.0")}
437
+ And reach out on Discord if you need help: ${chalk15.yellow("https://discord.gg/storybook")}
438
+ `);let duplicatedDepsMessage=installationMetadata?getDuplicatedDepsWarnings(installationMetadata):getDuplicatedDepsWarnings();duplicatedDepsMessage&&messages.push(duplicatedDepsMessage.join(messageDivider2));let hasNoFixes=Object.values(fixResults).every(r=>r==="unnecessary"),hasFailures=Object.values(fixResults).some(r=>r==="failed"||r==="check_failed"),title=hasNoFixes?"No migrations were applicable to your project":hasFailures?"Migration check ran with failures":"Migration check ran successfully";return boxen(messages.filter(Boolean).join(segmentDivider),{borderStyle:"round",padding:1,title,borderColor:hasFailures?"red":"green"})}var logger19=console,LOG_FILE_NAME="migration-storybook.log",LOG_FILE_PATH=join(process.cwd(),LOG_FILE_NAME),TEMP_LOG_FILE_PATH="",originalStdOutWrite=process.stdout.write.bind(process.stdout),originalStdErrWrite=process.stderr.write.bind(process.stdout),augmentLogsToFile=()=>{TEMP_LOG_FILE_PATH=tempy__default.file({name:LOG_FILE_NAME});let logStream=createWriteStream(TEMP_LOG_FILE_PATH);process.stdout.write=d=>(originalStdOutWrite(d),logStream.write(cleanLog(d))),process.stderr.write=d=>logStream.write(cleanLog(d));},cleanup=()=>{process.stdout.write=originalStdOutWrite,process.stderr.write=originalStdErrWrite;},logAvailableMigrations=()=>{let availableFixes=allFixes.map(f=>chalk15.yellow(f.id)).join(", ");logger19.info(`
439
+ The following migrations are available: ${availableFixes}`);},doAutomigrate=async options=>{let packageManager=JsPackageManagerFactory.getPackageManager({force:options.packageManager}),[packageJson,storybookVersion]=await Promise.all([packageManager.retrievePackageJson(),getCoercedStorybookVersion(packageManager)]),{configDir:inferredConfigDir,mainConfig:mainConfigPath}=getStorybookInfo(packageJson,options.configDir),configDir=options.configDir||inferredConfigDir||".storybook";if(!storybookVersion)throw new Error("Could not determine Storybook version");if(!mainConfigPath)throw new Error("Could not determine main config path");return automigrate({...options,packageManager,storybookVersion,beforeVersion:storybookVersion,mainConfigPath,configDir,isUpgrade:!1})},automigrate=async({fixId,fixes:inputFixes,dryRun,yes,packageManager,list,configDir,mainConfigPath,storybookVersion,beforeVersion,renderer:rendererPackage,skipInstall,hideMigrationSummary=!1,isUpgrade})=>{if(list)return logAvailableMigrations(),null;let selectedFixes=inputFixes||allFixes,fixes=fixId?selectedFixes.filter(f=>f.id===fixId):selectedFixes;if(fixId&&fixes.length===0)return logger19.info(`\u{1F4ED} No migrations found for ${chalk15.magenta(fixId)}.`),logAvailableMigrations(),null;augmentLogsToFile(),logger19.info("\u{1F50E} checking possible migrations..");let{fixResults,fixSummary,preCheckFailure}=await runFixes({fixes,packageManager,rendererPackage,skipInstall,configDir,mainConfigPath,storybookVersion,beforeVersion,dryRun,yes});if(Object.values(fixResults).some(r=>r==="failed"||r==="check_failed")?await move(TEMP_LOG_FILE_PATH,join(process.cwd(),LOG_FILE_NAME),{overwrite:!0}):await remove(TEMP_LOG_FILE_PATH),!hideMigrationSummary){let installationMetadata=await packageManager.findInstallations(["@storybook/*","storybook"]);logger19.info(),logger19.info(getMigrationSummary({fixResults,fixSummary,logFile:LOG_FILE_PATH,installationMetadata})),logger19.info();}return cleanup(),{fixResults,preCheckFailure}};async function runFixes({fixes,dryRun,yes,rendererPackage,skipInstall,configDir,packageManager,mainConfigPath,storybookVersion,beforeVersion,isUpgrade}){let fixResults={},fixSummary={succeeded:[],failed:{},manual:[],skipped:[]};for(let i=0;i<fixes.length;i+=1){let f=fixes[i],result;try{let{mainConfig,previewConfigPath}=await getStorybookData({configDir,packageManager});(isUpgrade&&semver.satisfies(beforeVersion,f.versionRange[0],{includePrerelease:!0})&&semver.satisfies(storybookVersion,f.versionRange[1],{includePrerelease:!0})||!isUpgrade)&&(result=await f.check({packageManager,configDir,rendererPackage,mainConfig,storybookVersion,previewConfigPath,mainConfigPath}));}catch(error){logger19.info(`\u26A0\uFE0F failed to check fix ${chalk15.bold(f.id)}`),error instanceof Error&&(logger19.error(`
440
+ ${error.stack}`),fixSummary.failed[f.id]=error.message),fixResults[f.id]="check_failed";}if(result){logger19.info(`
441
+ \u{1F50E} found a '${chalk15.cyan(f.id)}' migration:`);let message=f.prompt(result);logger19.info(boxen(message,{borderStyle:"round",padding:1,borderColor:"#F1618C",title:f.promptOnly?"Manual migration detected":"Automigration detected"}));let runAnswer;try{if(dryRun)runAnswer={fix:!1};else if(yes)runAnswer={fix:!0},f.promptOnly&&(fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id));else if(f.promptOnly){fixResults[f.id]="manual_succeeded",fixSummary.manual.push(f.id),logger19.info();let{shouldContinue}=await prompts5({type:"toggle",name:"shouldContinue",message:"Select continue once you have made the required changes, or quit to exit the migration process",initial:!0,active:"continue",inactive:"quit"},{onCancel:()=>{throw new Error}});if(!shouldContinue){fixResults[f.id]="manual_skipped";break}}else runAnswer=await prompts5({type:"confirm",name:"fix",message:`Do you want to run the '${chalk15.cyan(f.id)}' migration on your project?`,initial:!0},{onCancel:()=>{throw new Error}});}catch{break}if(!f.promptOnly)if(invariant5(runAnswer,"runAnswer must be defined if not promptOnly"),runAnswer.fix)try{invariant5(typeof f.run=="function","run method should be available in fix."),invariant5(mainConfigPath,"Main config path should be defined to run migration."),await f.run({result,packageManager,dryRun,mainConfigPath,skipInstall}),logger19.info(`\u2705 ran ${chalk15.cyan(f.id)} migration`),fixResults[f.id]="succeeded",fixSummary.succeeded.push(f.id);}catch(error){fixResults[f.id]="failed",fixSummary.failed[f.id]=error instanceof Error?error.message:"Failed to run migration",logger19.info(`\u274C error when running ${chalk15.cyan(f.id)} migration`),logger19.info(error),logger19.info();}else fixResults[f.id]="skipped",fixSummary.skipped.push(f.id);}else fixResults[f.id]=fixResults[f.id]||"unnecessary";}return {fixResults,fixSummary}}var logger20=console,getNextGlob=glob2=>{let extGlobsRegex=new RegExp(/(.*\.)(stories\.@.*)(\|mdx|mdx\|)(.*)$/i);if(glob2.match(extGlobsRegex))return glob2.replace(extGlobsRegex,"$1@(mdx|$2$4)");let allStoriesExtensionsRegex=new RegExp(/(.*\.)(stories\.\*)$/i);return glob2.match(allStoriesExtensionsRegex)?glob2.replace(allStoriesExtensionsRegex,"$1@(mdx|$2)"):glob2.replaceAll(".stories.mdx",".mdx")},bareMdxStoriesGlob={id:"bare-mdx-stories-glob",versionRange:["<7",">=7"],async check({mainConfig}){let existingStoriesEntries=mainConfig.stories;if(!existingStoriesEntries)throw new Error(dedent20`
442
+ ❌ Unable to determine Storybook stories globs in ${chalk15.blue(mainConfig)}, skipping ${chalk15.cyan(this.id)} fix.
469
443
 
470
444
  In Storybook 7, we have deprecated defining stories in MDX files, and consequently have changed the suffix to simply .mdx.
471
-
445
+ Now, since Storybook 8.0, we have removed support for .stories.mdx files.
472
446
  We were unable to automatically migrate your 'stories' config to include any .mdx file instead of just .stories.mdx.
473
447
  We suggest you make this change manually.
474
-
475
- To learn more about this change, see: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mdx-docs-files")}
448
+ To learn more about this change, see: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mdx-docs-files")}
476
449
  `);let nextStoriesEntries=existingStoriesEntries.map(entry=>{let isSpecifier=typeof entry!="string",glob2=isSpecifier?entry.files:entry;if(!glob2)return entry;let nextGlob=getNextGlob(glob2);return isSpecifier?{...entry,files:nextGlob}:nextGlob});return existingStoriesEntries.length===nextStoriesEntries.length&&existingStoriesEntries.every((entry,index)=>{let nextEntry=nextStoriesEntries[index];return typeof entry=="string"?entry===nextEntry:typeof nextEntry=="string"?!1:entry.files===nextEntry.files})?null:{existingStoriesEntries,nextStoriesEntries}},prompt({existingStoriesEntries,nextStoriesEntries}){let prettyExistingStoriesEntries=existingStoriesEntries.map(entry=>JSON.stringify(entry,null,2)).join(`
477
450
  `),prettyNextStoriesEntries=nextStoriesEntries.map(entry=>JSON.stringify(entry,null,2)).join(`
478
- `);return dedent21`
451
+ `);return dedent20`
479
452
  We've detected your project has one or more globs in your 'stories' config that matches .stories.mdx files:
480
- ${chalk16.cyan(prettyExistingStoriesEntries)}
453
+ ${chalk15.cyan(prettyExistingStoriesEntries)}
481
454
 
482
455
  In Storybook 7, we have deprecated defining stories in MDX files, and consequently have changed the suffix to simply .mdx.
483
-
456
+ Now, since Storybook 8.0, we have removed support for .stories.mdx files.
484
457
  We can automatically migrate your 'stories' config to include any .mdx file instead of just .stories.mdx.
485
458
  That would result in the following 'stories' config:
486
- ${chalk16.cyan(prettyNextStoriesEntries)}
487
-
488
- To learn more about this change, see: ${chalk16.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mdx-docs-files")}
489
- `},async run({dryRun,mainConfigPath,result:{nextStoriesEntries}}){logger22.info(dedent21`✅ Setting 'stories' config:
490
- ${JSON.stringify(nextStoriesEntries,null,2)}`),dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{main.setFieldValue(["stories"],nextStoriesEntries);});}};var logger23=console;async function migrate(migration,{glob:glob2,dryRun,list,rename,parser}){if(list)listCodemods().forEach(key=>logger23.log(key));else if(migration){if(migration==="mdx-to-csf"&&!dryRun){let packageManager=JsPackageManagerFactory.getPackageManager(),[packageJson,storybookVersion]=await Promise.all([packageManager.retrievePackageJson(),getCoercedStorybookVersion(packageManager)]),{configDir:inferredConfigDir,mainConfig:mainConfigPath}=getStorybookInfo(packageJson),configDir=inferredConfigDir||".storybook";if(!storybookVersion)throw new Error("Could not determine Storybook version");if(!mainConfigPath)throw new Error("Could not determine main config path");await runFixes({fixes:[bareMdxStoriesGlob],configDir,mainConfigPath,packageManager,storybookVersion}),await addStorybookBlocksPackage();}await runCodemod(migration,{glob:glob2,dryRun,logger:logger23,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());logger23.info('\u2705 Adding "@storybook/blocks" package'),await packageManager.addDependencies({installAsDevDependencies:!0,packageJson},[`@storybook/blocks@${versionToInstall}`]);}var excludesFalse=x=>x!==!1,blockers=()=>[import('./block-storystorev6-74U7EOHJ.mjs'),import('./block-stories-mdx-KIDIPEUC.mjs'),import('./block-dependencies-versions-U5TG6QX5.mjs'),import('./block-node-version-OW6AXHF4.mjs')],autoblock=async(options,list=blockers())=>{if(list.length===0)return null;logger.info("Checking for upgrade blockers...");let faults=(await Promise.all(list.map(async i=>{let{blocker}=await i,result=await blocker.check(options);return result?{id:blocker.id,value:!0,message:blocker.message(options,result),log:blocker.log(options,result)}:!1}))).filter(excludesFalse);if(faults.length>0){let LOG_FILE_NAME3="migration-storybook.log",messages={welcome:"Blocking your upgrade because of the following issues:",reminder:chalk16.yellow("Fix the above issues and try running the upgrade command again."),logfile:chalk16.yellow(`You can find more details in ./${LOG_FILE_NAME3}.`)},borderColor="#FC521F";return logger.plain("Oh no.."),logger.plain(boxen([messages.welcome].concat(faults.map(i=>i.message)).concat([messages.reminder]).concat([messages.logfile]).join(`
459
+ ${chalk15.cyan(prettyNextStoriesEntries)}
460
+ To learn more about this change, see: ${chalk15.yellow("https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#mdx-docs-files")}
461
+ `},async run({dryRun,mainConfigPath,result:{nextStoriesEntries}}){logger20.info(dedent20`✅ Setting 'stories' config:
462
+ ${JSON.stringify(nextStoriesEntries,null,2)}`),dryRun||await updateMainConfig({mainConfigPath,dryRun:!!dryRun},async main=>{main.setFieldValue(["stories"],nextStoriesEntries);});}};var logger21=console;async function migrate(migration,{glob:glob2,dryRun,list,rename,parser}){if(list)listCodemods().forEach(key=>logger21.log(key));else if(migration){if(migration==="mdx-to-csf"&&!dryRun){let packageManager=JsPackageManagerFactory.getPackageManager(),[packageJson,storybookVersion]=await Promise.all([packageManager.retrievePackageJson(),getCoercedStorybookVersion(packageManager)]),{configDir:inferredConfigDir,mainConfig:mainConfigPath}=getStorybookInfo(packageJson),configDir=inferredConfigDir||".storybook";if(!storybookVersion)throw new Error("Could not determine Storybook version");if(!mainConfigPath)throw new Error("Could not determine main config path");await runFixes({fixes:[bareMdxStoriesGlob],configDir,mainConfigPath,packageManager,storybookVersion,beforeVersion:storybookVersion,isUpgrade:!1}),await addStorybookBlocksPackage();}await runCodemod(migration,{glob:glob2,dryRun,logger:logger21,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());logger21.info('\u2705 Adding "@storybook/blocks" package'),await packageManager.addDependencies({installAsDevDependencies:!0,packageJson},[`@storybook/blocks@${versionToInstall}`]);}var excludesFalse=x=>x!==!1,blockers=()=>[import('./block-storystorev6-74U7EOHJ.mjs'),import('./block-stories-mdx-KIDIPEUC.mjs'),import('./block-dependencies-versions-H4IKS6D6.mjs'),import('./block-node-version-OW6AXHF4.mjs')],autoblock=async(options,list=blockers())=>{if(list.length===0)return null;logger.info("Checking for upgrade blockers...");let faults=(await Promise.all(list.map(async i=>{let{blocker}=await i,result=await blocker.check(options);return result?{id:blocker.id,value:!0,message:blocker.message(options,result),log:blocker.log(options,result)}:!1}))).filter(excludesFalse);if(faults.length>0){let LOG_FILE_NAME3="migration-storybook.log",messages={welcome:"Blocking your upgrade because of the following issues:",reminder:chalk15.yellow("Fix the above issues and try running the upgrade command again."),logfile:chalk15.yellow(`You can find more details in ./${LOG_FILE_NAME3}.`)},borderColor="#FC521F";return logger.plain("Oh no.."),logger.plain(boxen([messages.welcome].concat(faults.map(i=>i.message)).concat([messages.reminder]).concat([messages.logfile]).join(`
491
463
 
492
464
  `),{borderStyle:"round",padding:1,borderColor})),await writeFile(LOG_FILE_NAME3,faults.map(i=>"("+i.id+`):
493
465
  `+i.log).join(`
494
466
 
495
467
  ----
496
468
 
497
- `),{encoding:"utf-8"}),faults[0].id}return logger.plain("No blockers found."),logger.line(),null};var versionRegex=/(@storybook\/[^@]+)@(\S+)/,getStorybookVersion=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]}},getInstalledStorybookVersion=async packageManager=>{let installations=await packageManager.findInstallations(["storybook","@storybook/cli"]);if(!installations)return;let cliVersion=installations.dependencies["@storybook/cli"]?.[0].version;return cliVersion||installations.dependencies.storybook?.[0].version},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(`
498
- `).map(getStorybookVersion).filter(item=>!!item).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:minVersion2,url,deprecations})=>{if(semver.gte(latestVersion,minVersion2)){let deprecated=storybookPackages.filter(pkg2=>deprecations.includes(pkg2.package));deprecated.length>0&&(logger.warn(`Found ${deprecated.length} deprecated packages since ${minVersion2}`),logger.warn(`See ${url}`),warnPackages(deprecated));}});},doUpgrade=async({skipCheck,packageManager:packageManagerName,dryRun,configDir:userSpecifiedConfigDir,yes,...options})=>{let packageManager=JsPackageManagerFactory.getPackageManager({force:packageManagerName}),beforeVersion=await getInstalledStorybookVersion(packageManager)??"0.0.0",currentVersion=versions["@storybook/cli"],isCanary=currentVersion.startsWith("0.0.0")||beforeVersion.startsWith("portal:")||beforeVersion.startsWith("workspace:");if(!isCanary&&lt(currentVersion,beforeVersion))throw new UpgradeStorybookToLowerVersionError({beforeVersion,currentVersion});if(!isCanary&&eq(currentVersion,beforeVersion))throw new UpgradeStorybookToSameVersionError({beforeVersion});let[latestVersion,packageJson,storybookVersion]=await Promise.all([packageManager.latestVersion("@storybook/cli"),packageManager.retrievePackageJson(),getCoercedStorybookVersion(packageManager)]),isOutdated=lt(currentVersion,latestVersion),isPrerelease=prerelease(currentVersion)!==null,borderColor=isOutdated?"#FC521F":"#F1618C",messages={welcome:`Upgrading Storybook from version ${chalk16.bold(beforeVersion)} to version ${chalk16.bold(currentVersion)}..`,notLatest:chalk16.red(dedent21`
499
- This version is behind the latest release, which is: ${chalk16.bold(latestVersion)}!
469
+ `),{encoding:"utf-8"}),faults[0].id}return logger.plain("No blockers found."),logger.line(),null};var versionRegex=/(@storybook\/[^@]+)@(\S+)/,getStorybookVersion=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]}},getInstalledStorybookVersion=async packageManager=>{let installations=await packageManager.findInstallations(["@storybook/cli","@storybook/core","@storybook/core-common"]);if(installations)return Object.entries(installations.dependencies)[0]?.[1]?.[0].version},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(`
470
+ `).map(getStorybookVersion).filter(item=>!!item).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:minVersion2,url,deprecations})=>{if(semver.gte(latestVersion,minVersion2)){let deprecated=storybookPackages.filter(pkg2=>deprecations.includes(pkg2.package));deprecated.length>0&&(logger.warn(`Found ${deprecated.length} deprecated packages since ${minVersion2}`),logger.warn(`See ${url}`),warnPackages(deprecated));}});},doUpgrade=async({skipCheck,packageManager:packageManagerName,dryRun,configDir:userSpecifiedConfigDir,yes,...options})=>{let packageManager=JsPackageManagerFactory.getPackageManager({force:packageManagerName}),beforeVersion=await getInstalledStorybookVersion(packageManager)??"0.0.0",currentVersion=versions["@storybook/cli"],isCanary=currentVersion.startsWith("0.0.0")||beforeVersion.startsWith("portal:")||beforeVersion.startsWith("workspace:");if(!isCanary&&lt(currentVersion,beforeVersion))throw new UpgradeStorybookToLowerVersionError({beforeVersion,currentVersion});if(!isCanary&&eq(currentVersion,beforeVersion))throw new UpgradeStorybookToSameVersionError({beforeVersion});let[latestVersion,packageJson]=await Promise.all([packageManager.latestVersion("@storybook/cli"),packageManager.retrievePackageJson()]),isOutdated=lt(currentVersion,latestVersion),isPrerelease=prerelease(currentVersion)!==null,borderColor=isOutdated?"#FC521F":"#F1618C",messages={welcome:`Upgrading Storybook from version ${chalk15.bold(beforeVersion)} to version ${chalk15.bold(currentVersion)}..`,notLatest:chalk15.red(dedent20`
471
+ This version is behind the latest release, which is: ${chalk15.bold(latestVersion)}!
500
472
  You likely ran the upgrade command through npx, which can use a locally cached version, to upgrade to the latest version please run:
501
- ${chalk16.bold("npx storybook@latest upgrade")}
473
+ ${chalk15.bold("npx storybook@latest upgrade")}
502
474
 
503
475
  You may want to CTRL+C to stop, and run with the latest version instead.
504
- `),prelease:chalk16.yellow("This is a pre-release version.")};logger.plain(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(isPrerelease?[messages.prelease]:[]).join(`
505
- `),{borderStyle:"round",padding:1,borderColor}));let results,{configDir:inferredConfigDir,mainConfig:mainConfigPath}=getStorybookInfo(packageJson,userSpecifiedConfigDir),configDir=userSpecifiedConfigDir||inferredConfigDir||".storybook",mainConfigLoadingError="",mainConfig=await loadMainConfig({configDir}).catch(err=>(mainConfigLoadingError=String(err),!1));if(storybookVersion?typeof mainConfigPath>"u"||mainConfigLoadingError.includes("No configuration files have been found")?(logger.info(mainjsNotFoundMessage(configDir)),results={preCheckFailure:"mainjs_not_found"}):typeof mainConfig=="boolean"&&(logger.info(mainjsExecutionFailureMessage(mainConfigPath,mainConfigLoadingError)),results={preCheckFailure:"mainjs_evaluation_error"}):(logger.info(missingStorybookVersionMessage()),results={preCheckFailure:"undetected_sb_version"}),!results&&typeof mainConfig!="boolean"&&typeof mainConfigPath<"u"&&!options.force){let blockResult=await autoblock({packageManager,configDir,packageJson,mainConfig,mainConfigPath});blockResult&&(results={preCheckFailure:blockResult});}if(!dryRun&&!results){let toUpgradedDependencies=deps=>Object.keys(deps||{}).filter(dependency=>dependency in versions).map(dependency=>`${dependency}@${(!isOutdated||isPrerelease)&&!isCanary?"^":""}${versions[dependency]}`),upgradedDependencies=toUpgradedDependencies(packageJson.dependencies),upgradedDevDependencies=toUpgradedDependencies(packageJson.devDependencies);logger.info(`Updating dependencies in ${chalk16.cyan("package.json")}..`),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();}if(!skipCheck&&!results&&mainConfigPath&&storybookVersion&&(checkVersionConsistency(),results=await automigrate({dryRun,yes,packageManager,configDir,mainConfigPath,storybookVersion})),!options.disableTelemetry){let{preCheckFailure,fixResults}=results||{};await telemetry("upgrade",{beforeVersion,afterVersion:currentVersion,...{automigrationResults:preCheckFailure?null:fixResults,automigrationPreCheckFailure:preCheckFailure||null}});}};function missingStorybookVersionMessage(){return dedent21`
476
+ `),prelease:chalk15.yellow("This is a pre-release version.")};logger.plain(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(isPrerelease?[messages.prelease]:[]).join(`
477
+ `),{borderStyle:"round",padding:1,borderColor}));let results,{configDir:inferredConfigDir,mainConfig:mainConfigPath}=getStorybookInfo(packageJson,userSpecifiedConfigDir),configDir=userSpecifiedConfigDir||inferredConfigDir||".storybook",mainConfigLoadingError="",mainConfig=await loadMainConfig({configDir}).catch(err=>(mainConfigLoadingError=String(err),!1));if(beforeVersion?typeof mainConfigPath>"u"||mainConfigLoadingError.includes("No configuration files have been found")?(logger.info(mainjsNotFoundMessage(configDir)),results={preCheckFailure:"mainjs_not_found"}):typeof mainConfig=="boolean"&&(logger.info(mainjsExecutionFailureMessage(mainConfigPath,mainConfigLoadingError)),results={preCheckFailure:"mainjs_evaluation_error"}):(logger.info(missingStorybookVersionMessage()),results={preCheckFailure:"undetected_sb_version"}),!results&&typeof mainConfig!="boolean"&&typeof mainConfigPath<"u"&&!options.force){let blockResult=await autoblock({packageManager,configDir,packageJson,mainConfig,mainConfigPath});blockResult&&(results={preCheckFailure:blockResult});}if(!dryRun&&!results){let toUpgradedDependencies=deps=>Object.keys(deps||{}).filter(dependency=>dependency in versions).map(dependency=>`${dependency}@${(!isOutdated||isPrerelease)&&!isCanary?"^":""}${versions[dependency]}`),upgradedDependencies=toUpgradedDependencies(packageJson.dependencies),upgradedDevDependencies=toUpgradedDependencies(packageJson.devDependencies);logger.info(`Updating dependencies in ${chalk15.cyan("package.json")}..`),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();}if(!skipCheck&&!results&&mainConfigPath&&(checkVersionConsistency(),results=await automigrate({dryRun,yes,packageManager,configDir,mainConfigPath,beforeVersion,storybookVersion:currentVersion,isUpgrade:!0})),!options.disableTelemetry){let{preCheckFailure,fixResults}=results||{};await telemetry("upgrade",{beforeVersion,afterVersion:currentVersion,...{automigrationResults:preCheckFailure?null:fixResults,automigrationPreCheckFailure:preCheckFailure||null}});}};function missingStorybookVersionMessage(){return dedent20`
506
478
  [Storybook automigrate] ❌ Unable to determine Storybook version so that the automigrations will be skipped.
507
479
  🤔 Are you running automigrate from your project directory? Please specify your Storybook config directory with the --config-dir flag.
508
- `}function mainjsExecutionFailureMessage(mainConfigPath,mainConfigLoadingError){return dedent21`
509
- [Storybook automigrate] ❌ Failed trying to evaluate ${chalk16.blue(mainConfigPath)} with the following error: ${mainConfigLoadingError}
480
+ `}function mainjsExecutionFailureMessage(mainConfigPath,mainConfigLoadingError){return dedent20`
481
+ [Storybook automigrate] ❌ Failed trying to evaluate ${chalk15.blue(mainConfigPath)} with the following error: ${mainConfigLoadingError}
510
482
 
511
483
  Please fix the error and try again.
512
- `}function mainjsNotFoundMessage(configDir){return dedent21`[Storybook automigrate] Could not find or evaluate your Storybook main.js config directory at ${chalk16.blue(configDir)} so the automigrations will be skipped. You might be running this command in a monorepo or a non-standard project structure. If that is the case, please rerun this command by specifying the path to your Storybook config directory via the --config-dir option.`}async function upgrade(options){await withTelemetry("upgrade",{cliOptions:options},()=>doUpgrade(options));}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/13-ts":{name:"Next.js v13.5 (Webpack | TypeScript)",script:'yarn create next-app {{beforeDir}} -e https://github.com/vercel/next.js/tree/next-13/examples/hello-world && cd {{beforeDir}} && npm pkg set "dependencies.next"="^13.5.6" && yarn && git add . && git commit --amend --no-edit && cd ..',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},skipTasks:["e2e-tests-dev","bench"]},"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"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},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"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},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"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},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"]},"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"]},"svelte-kit/prerelease-ts":{name:"SvelteKit Prerelease (Vite | TypeScript)",script:"yarn create svelte-with-args --name=svelte-kit/prerelease-ts --directory={{beforeDir}} --template=skeleton --types=typescript --no-prettier --no-eslint --no-playwright --no-vitest --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-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"]},"ember/3-js":{name:"Ember v3 (Webpack | JavaScript)",script:"npx --package ember-cli@3.28.1 ember new {{beforeDir}}",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}},"ember/default-js":{name:"Ember v4 (Webpack | JavaScript)",script:"npx --package ember-cli@4.12.1 ember new {{beforeDir}} --yarn && cd {{beforeDir}} && yarn add --dev @storybook/ember-cli-storybook && yarn build",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}}},internalTemplates={"internal/react18-webpack-babel":{name:"React with Babel Latest (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{extraDependencies:["@storybook/addon-webpack5-compiler-babel"],editAddons:addons=>[...addons,"@storybook/addon-webpack5-compiler-babel"].filter(a=>a!=="@storybook/addon-webpack5-compiler-swc")},isInternal:!0,skipTasks:["e2e-tests-dev","bench"]},"internal/react16-webpack":{name:"React 16 (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}} --version-react=16 --version-react-dom=16 --version-@types/react=16 --version-@types/react-dom=16",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"],isInternal:!0},"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 logger26=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["@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 ${chalk16.bold(currentVersion)} sandbox..`,notLatest:chalk16.red(dedent`
513
- This version is behind the latest release, which is: ${chalk16.bold(latestVersion)}!
484
+ `}function mainjsNotFoundMessage(configDir){return dedent20`[Storybook automigrate] Could not find or evaluate your Storybook main.js config directory at ${chalk15.blue(configDir)} so the automigrations will be skipped. You might be running this command in a monorepo or a non-standard project structure. If that is the case, please rerun this command by specifying the path to your Storybook config directory via the --config-dir option.`}async function upgrade(options){await withTelemetry("upgrade",{cliOptions:options},()=>doUpgrade(options));}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/13-ts":{name:"Next.js v13.5 (Webpack | TypeScript)",script:'yarn create next-app {{beforeDir}} -e https://github.com/vercel/next.js/tree/next-13/examples/hello-world && cd {{beforeDir}} && npm pkg set "dependencies.next"="^13.5.6" && yarn && git add . && git commit --amend --no-edit && cd ..',expected:{framework:"@storybook/nextjs",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},skipTasks:["e2e-tests-dev","bench"]},"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"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},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"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},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"},modifications:{mainConfig:{features:{experimentalRSC:!0}},extraDependencies:["server-only"]},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"]},"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"]},"svelte-kit/prerelease-ts":{name:"SvelteKit Prerelease (Vite | TypeScript)",script:"yarn create svelte-with-args --name=svelte-kit/prerelease-ts --directory={{beforeDir}} --template=skeleton --types=typescript --no-prettier --no-eslint --no-playwright --no-vitest --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-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"]},"ember/3-js":{name:"Ember v3 (Webpack | JavaScript)",script:"npx --package ember-cli@3.28.1 ember new {{beforeDir}}",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}},"ember/default-js":{name:"Ember v4 (Webpack | JavaScript)",script:"npx --package ember-cli@4.12.1 ember new {{beforeDir}} --yarn && cd {{beforeDir}} && yarn add --dev @storybook/ember-cli-storybook && yarn build",inDevelopment:!0,expected:{framework:"@storybook/ember",renderer:"@storybook/ember",builder:"@storybook/builder-webpack5"}}},internalTemplates={"internal/react18-webpack-babel":{name:"React with Babel Latest (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}}",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},modifications:{extraDependencies:["@storybook/addon-webpack5-compiler-babel"],editAddons:addons=>[...addons,"@storybook/addon-webpack5-compiler-babel"].filter(a=>a!=="@storybook/addon-webpack5-compiler-swc")},isInternal:!0,skipTasks:["e2e-tests-dev","bench"]},"internal/react16-webpack":{name:"React 16 (Webpack | TypeScript)",script:"yarn create webpack5-react {{beforeDir}} --version-react=16 --version-react-dom=16 --version-@types/react=16 --version-@types/react-dom=16",expected:{framework:"@storybook/react-webpack5",renderer:"@storybook/react",builder:"@storybook/builder-webpack5"},skipTasks:["e2e-tests-dev","bench"],isInternal:!0},"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 logger24=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["@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 ${chalk15.bold(currentVersion)} sandbox..`,notLatest:chalk15.red(dedent`
485
+ This version is behind the latest release, which is: ${chalk15.bold(latestVersion)}!
514
486
  You likely ran the init command through npx, which can use a locally cached version, to get the latest please run:
515
- ${chalk16.bold("npx storybook@latest sandbox")}
487
+ ${chalk15.bold("npx storybook@latest sandbox")}
516
488
 
517
489
  You may want to CTRL+C to stop, and run with the latest version instead.
518
- `),longInitTime:chalk16.yellow("The creation of the sandbox will take longer, because we will need to run init."),prerelease:chalk16.yellow("This is a pre-release version.")};if(logger26.log(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(init&&(isOutdated||isPrerelease)?[messages.longInitTime]:[]).concat(isPrerelease?[messages.prerelease]:[]).join(`
519
- `),{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&&(logger26.info(boxen(dedent`
490
+ `),longInitTime:chalk15.yellow("The creation of the sandbox will take longer, because we will need to run init."),prerelease:chalk15.yellow("This is a pre-release version.")};if(logger24.log(boxen([messages.welcome].concat(isOutdated&&!isPrerelease?[messages.notLatest]:[]).concat(init&&(isOutdated||isPrerelease)?[messages.longInitTime]:[]).concat(isPrerelease?[messages.prerelease]:[]).join(`
491
+ `),{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&&(logger24.info(boxen(dedent`
520
492
  🔎 You filtered out all templates. 🔍
521
493
 
522
- After filtering all the templates with "${chalk16.yellow(filterValue)}", we found no results. Please try again with a different filter.
494
+ After filtering all the templates with "${chalk15.yellow(filterValue)}", we found no results. Please try again with a different filter.
523
495
 
524
496
  Available templates:
525
- ${keys.map(key=>chalk16.blue`- ${key}`).join(`
497
+ ${keys.map(key=>chalk15.blue`- ${key}`).join(`
526
498
  `)}
527
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1)),choices.length===1?[templateId]=choices:(logger26.info(boxen(dedent`
528
- 🤗 Welcome to ${chalk16.yellow("sb sandbox")}! 🤗
499
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),process.exit(1)),choices.length===1?[templateId]=choices:(logger24.info(boxen(dedent`
500
+ 🤗 Welcome to ${chalk15.yellow("sb sandbox")}! 🤗
529
501
 
530
- Create a ${chalk16.green("new project")} to minimally reproduce Storybook issues.
502
+ Create a ${chalk15.green("new project")} to minimally reproduce Storybook issues.
531
503
 
532
504
  1. select an environment that most closely matches your project setup.
533
505
  2. select a location for the reproduction, outside of your project.
534
506
 
535
507
  After the reproduction is ready, we'll guide you through the next steps.
536
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),templateId=await promptSelectedTemplate(choices)),!!!(templateId??null)){logger26.error("Somehow we got no templates. Please rerun this command!");return}if(selectedConfig=templateId?allTemplates[templateId]:void 0,!selectedConfig)throw new Error("\u{1F6A8} Sandbox: please specify a valid template type")}let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||templateId;if(selectedDirectory&&existsSync(`${selectedDirectory}`)&&logger26.info(`\u26A0\uFE0F ${selectedDirectory} already exists! Overwriting...`),!selectedDirectory){let{directory:directory2}=await prompts5({type:"text",message:"Enter the output directory",name:"directory",initial:outputDirectoryName??void 0,validate:async directoryName=>existsSync(directoryName)?`${directoryName} already exists. Please choose another name.`:!0},{onCancel:()=>{logger26.log("Command cancelled by the user. Exiting..."),process.exit(1);}});selectedDirectory=directory2;}invariant5(selectedDirectory);try{let templateDestination=path7.isAbsolute(selectedDirectory)?selectedDirectory:path7.join(process.cwd(),selectedDirectory);logger26.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger26.log(`\u{1F4E6} Downloading sandbox template (${chalk16.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=chalk16.yellow(templateId);throw new Error(dedent`
537
- Template downloaded from ${chalk16.blue(gitPath)} is empty.
508
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"})),templateId=await promptSelectedTemplate(choices)),!!!(templateId??null)){logger24.error("Somehow we got no templates. Please rerun this command!");return}if(selectedConfig=templateId?allTemplates[templateId]:void 0,!selectedConfig)throw new Error("\u{1F6A8} Sandbox: please specify a valid template type")}let selectedDirectory=outputDirectory,outputDirectoryName=outputDirectory||templateId;if(selectedDirectory&&existsSync(`${selectedDirectory}`)&&logger24.info(`\u26A0\uFE0F ${selectedDirectory} already exists! Overwriting...`),!selectedDirectory){let{directory:directory2}=await prompts5({type:"text",message:"Enter the output directory",name:"directory",initial:outputDirectoryName??void 0,validate:async directoryName=>existsSync(directoryName)?`${directoryName} already exists. Please choose another name.`:!0},{onCancel:()=>{logger24.log("Command cancelled by the user. Exiting..."),process.exit(1);}});selectedDirectory=directory2;}invariant5(selectedDirectory);try{let templateDestination=path7.isAbsolute(selectedDirectory)?selectedDirectory:path7.join(process.cwd(),selectedDirectory);logger24.info(`\u{1F3C3} Adding ${selectedConfig.name} into ${templateDestination}`),logger24.log(`\u{1F4E6} Downloading sandbox template (${chalk15.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=chalk15.yellow(templateId);throw new Error(dedent`
509
+ Template downloaded from ${chalk15.blue(gitPath)} is empty.
538
510
  Are you use it exists? Or did you want to set ${selected} to inDevelopment first?
539
- `)}if(downloadType==="before-storybook"&&init){let before=process.cwd();process.chdir(templateDestination),await doInitiate({...options},pkg2),process.chdir(before);}}catch(err){throw logger26.error(`\u{1F6A8} Failed to download sandbox template: ${String(err)}`),err}let initMessage=init?chalk16.yellow(dedent`
511
+ `)}if(downloadType==="before-storybook"&&init){let before=process.cwd();process.chdir(templateDestination),await doInitiate({...options},pkg2),process.chdir(before);}}catch(err){throw logger24.error(`\u{1F6A8} Failed to download sandbox template: ${String(err)}`),err}let initMessage=init?chalk15.yellow(dedent`
540
512
  yarn install
541
513
  yarn storybook
542
- `):`Recreate your setup, then ${chalk16.yellow("npx storybook@latest init")}`;logger26.info(boxen(dedent`
514
+ `):`Recreate your setup, then ${chalk15.yellow("npx storybook@latest init")}`;logger24.info(boxen(dedent`
543
515
  🎉 Your Storybook reproduction project is ready to use! 🎉
544
516
 
545
- ${chalk16.yellow(`cd ${selectedDirectory}`)}
517
+ ${chalk15.yellow(`cd ${selectedDirectory}`)}
546
518
  ${initMessage}
547
519
 
548
520
  Once you've recreated the problem you're experiencing, please:
549
521
 
550
- 1. Document any additional steps in ${chalk16.cyan("README.md")}
522
+ 1. Document any additional steps in ${chalk15.cyan("README.md")}
551
523
  2. Publish the repository to github
552
524
  3. Link to the repro repository in your issue
553
525
 
554
526
  Having a clean repro helps us solve your issue faster! 🙏
555
- `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}));}catch(error){throw logger26.error("\u{1F6A8} Failed to create sandbox"),error}};async function promptSelectedTemplate(choices){let{template}=await prompts5({type:"select",message:"\u{1F308} Select the template",name:"template",choices:choices.map(toChoices)},{onCancel:()=>{logger26.log("Command cancelled by the user. Exiting..."),process.exit(1);}});return template||null}var exec2=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&logger.info(startMessage),dryRun){logger.info(`
527
+ `.trim(),{borderStyle:"round",padding:1,borderColor:"#F1618C"}));}catch(error){throw logger24.error("\u{1F6A8} Failed to create sandbox"),error}};async function promptSelectedTemplate(choices){let{template}=await prompts5({type:"select",message:"\u{1F308} Select the template",name:"template",choices:choices.map(toChoices)},{onCancel:()=>{logger24.log("Command cancelled by the user. Exiting..."),process.exit(1);}});return template||null}var exec2=async(command2,options={},{startMessage,errorMessage,dryRun}={})=>{if(startMessage&&logger.info(startMessage),dryRun){logger.info(`
556
528
  > ${command2}
557
- `);return}return logger.info(command2),new Promise((resolve2,reject)=>{let child=spawn(command2,{...options,shell:!0,stdio:"pipe"});child.stderr.pipe(process.stdout),child.stdout.pipe(process.stdout),child.on("exit",code=>{code===0?resolve2(void 0):(logger.error(chalk16.red(`An error occurred while executing: \`${command2}\``)),errorMessage&&logger.info(errorMessage),reject(new Error(`command exited with code: ${code}: `)));});})},link=async({target,local,start})=>{let storybookDir=process.cwd();try{if((await fse.readJSON("package.json")).name!=="@storybook/root")throw new Error}catch{throw new Error("Expected to run link from the root of the storybook monorepo")}let reproDir=target,reproName=path7.basename(target);if(!local){let reprosDir=path7.join(storybookDir,"../storybook-repros");logger.info(`Ensuring directory ${reprosDir}`),await fse.ensureDir(reprosDir),logger.info(`Cloning ${target}`),await exec2(`git clone ${target}`,{cwd:reprosDir}),reproName=path7.basename(target,path7.extname(target)),reproDir=path7.join(reprosDir,reproName);}let reproPackageJson=await fse.readJSON(path7.join(reproDir,"package.json")),version=sync$1("yarn",["--version"],{cwd:reproDir,stdio:"pipe",shell:!0}).stdout.toString();if(!/^[2-4]\./.test(version)){logger.warn(`\u{1F6A8} Expected yarn 2 or higher in ${reproDir}!`),logger.warn(""),logger.warn("Please set it up with `yarn set version berry`,"),logger.warn(`then link '${reproDir}' with the '--local' flag.`);return}logger.info(`Linking ${reproDir}`),await exec2(`yarn link --all ${storybookDir}`,{cwd:reproDir}),logger.info(`Installing ${reproName}`),await exec2("yarn install",{cwd:reproDir}),reproPackageJson.devDependencies?.vite||await exec2("yarn add -D webpack-hot-middleware",{cwd:reproDir}),await exec2("yarn add @types/node@18",{cwd:reproDir}),start&&(logger.info(`Running ${reproName} storybook`),await exec2("yarn run storybook",{cwd:reproDir}));};function printError(error){instance.heading="",error instanceof Error?error.error?logger.error(error.error):error.stats&&error.stats.compilation.errors?error.stats.compilation.errors.forEach(e=>logger.plain(e)):logger.error(error):error.compilation?.errors&&error.compilation.errors.forEach(e=>logger.plain(e)),logger.line(),logger.warn(error.close?dedent`
529
+ `);return}return logger.info(command2),new Promise((resolve2,reject)=>{let child=spawn(command2,{...options,shell:!0,stdio:"pipe"});child.stderr.pipe(process.stdout),child.stdout.pipe(process.stdout),child.on("exit",code=>{code===0?resolve2(void 0):(logger.error(chalk15.red(`An error occurred while executing: \`${command2}\``)),errorMessage&&logger.info(errorMessage),reject(new Error(`command exited with code: ${code}: `)));});})},link=async({target,local,start})=>{let storybookDir=process.cwd();try{if((await fse.readJSON("package.json")).name!=="@storybook/root")throw new Error}catch{throw new Error("Expected to run link from the root of the storybook monorepo")}let reproDir=target,reproName=path7.basename(target);if(!local){let reprosDir=path7.join(storybookDir,"../storybook-repros");logger.info(`Ensuring directory ${reprosDir}`),await fse.ensureDir(reprosDir),logger.info(`Cloning ${target}`),await exec2(`git clone ${target}`,{cwd:reprosDir}),reproName=path7.basename(target,path7.extname(target)),reproDir=path7.join(reprosDir,reproName);}let reproPackageJson=await fse.readJSON(path7.join(reproDir,"package.json")),version=sync$1("yarn",["--version"],{cwd:reproDir,stdio:"pipe",shell:!0}).stdout.toString();if(!/^[2-4]\./.test(version)){logger.warn(`\u{1F6A8} Expected yarn 2 or higher in ${reproDir}!`),logger.warn(""),logger.warn("Please set it up with `yarn set version berry`,"),logger.warn(`then link '${reproDir}' with the '--local' flag.`);return}logger.info(`Linking ${reproDir}`),await exec2(`yarn link --all ${storybookDir}`,{cwd:reproDir}),logger.info(`Installing ${reproName}`),await exec2("yarn install",{cwd:reproDir}),reproPackageJson.devDependencies?.vite||await exec2("yarn add -D webpack-hot-middleware",{cwd:reproDir}),await exec2("yarn add @types/node@18",{cwd:reproDir}),start&&(logger.info(`Running ${reproName} storybook`),await exec2("yarn run storybook",{cwd:reproDir}));};function printError(error){instance.heading="",error instanceof Error?error.error?logger.error(error.error):error.stats&&error.stats.compilation.errors?error.stats.compilation.errors.forEach(e=>logger.plain(e)):logger.error(error):error.compilation?.errors&&error.compilation.errors.forEach(e=>logger.plain(e)),logger.line(),logger.warn(error.close?dedent`
558
530
  FATAL broken build!, will close the process,
559
531
  Fix the error below and restart storybook.
560
532
  `:dedent`
561
533
  Broken build, fix the error above.
562
534
  You may need to refresh the browser.
563
- `),logger.line();}var dev=async cliOptions=>{process.env.NODE_ENV=process.env.NODE_ENV||"development";let readUpResult2=sync({cwd:__dirname});invariant5(readUpResult2,"Failed to find the closest package.json file.");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 readUpResult2=sync({cwd:__dirname});invariant5(readUpResult2,"Failed to find the closest package.json file.");let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",outputDir:cliOptions.outputDir||"./storybook-static",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,configType:"PRODUCTION",cache:cache,packageJson:readUpResult2.packageJson};await withTelemetry("build",{cliOptions,presetOptions:options},()=>buildStaticStandalone(options));};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(`${chalk16.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 ${chalk16.yellow(versionToCompare)} (from the ${chalk16.cyan(packageToDisplay)} package) or higher.`);let filteredDependencies=Object.entries(installationMetadata?.dependencies||[]).filter(([name,packages])=>Object.keys(versions).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])=>`${chalk16.hex("#ff9800")(name)}: ${dep[0].version} ${allDependencies?.[name]?packageJsonSuffix:""}`).sort((a,b)=>(b.includes(packageJsonSuffix)?1:0)-(a.includes(packageJsonSuffix)?1:0)).join(`
564
- `));}return messages.push(`You can run ${chalk16.cyan("npx storybook@latest upgrade")} to upgrade all of your Storybook packages to the latest version.
535
+ `),logger.line();}var dev=async cliOptions=>{process.env.NODE_ENV=process.env.NODE_ENV||"development";let readUpResult2=sync({cwd:__dirname});invariant5(readUpResult2,"Failed to find the closest package.json file.");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 readUpResult2=sync({cwd:__dirname});invariant5(readUpResult2,"Failed to find the closest package.json file.");let options={...cliOptions,configDir:cliOptions.configDir||"./.storybook",outputDir:cliOptions.outputDir||"./storybook-static",ignorePreview:!!cliOptions.previewUrl&&!cliOptions.forceBuildPreview,configType:"PRODUCTION",cache:cache,packageJson:readUpResult2.packageJson};await withTelemetry("build",{cliOptions,presetOptions:options},()=>buildStaticStandalone(options));};var getIncompatibleAddons=async(mainConfig,packageManager=JsPackageManagerFactory.getPackageManager())=>{let incompatibleList={"@storybook/addon-knobs":"6.4.0","@storybook/addon-postcss":"2.0.0","storybook-addon-next-router":"4.0.2","storybook-addon-outline":"1.4.2","@storybook/addon-info":"5.3.21","storybook-addon-designs":"6.3.1","storybook-addon-next":"1.7.0","storybook-docs-toc":"1.7.0","@storybook/addon-google-analytics":"6.2.9","storybook-addon-pseudo-states":"1.15.5","storybook-dark-mode":"2.1.1","storybook-addon-gatsby":"0.0.5","@etchteam/storybook-addon-css-variables-theme":"1.4.0","@storybook/addon-cssresources":"6.2.9","storybook-addon-grid":"0.3.1","storybook-multilevel-sort":"1.2.0","storybook-addon-i18next":"1.3.0","storybook-source-link":"2.0.8","babel-plugin-storybook-csf-title":"2.1.0","@urql/storybook-addon":"2.0.1","storybook-addon-intl":"2.4.1","storybook-addon-mock":"3.2.0","@chakra-ui/storybook-addon":"4.0.16","storybook-mobile-addon":"1.0.2","@storybook/addon-queryparams":"6.2.9"},addons=getAddonNames(mainConfig).filter(addon=>addon in incompatibleList),dependencies=await packageManager.getAllDependencies(),storybookPackages=Object.keys(dependencies).filter(dep=>dep.includes("storybook")),packagesToCheck=[...new Set([...addons,...storybookPackages])],addonVersions=await Promise.all(packagesToCheck.map(async addon=>({name:addon,version:await packageManager.getPackageVersion(addon)})));if(addonVersions.length===0)return [];let incompatibleAddons2=[];return addonVersions.forEach(({name,version:installedVersion})=>{if(installedVersion===null)return;let addonVersion=incompatibleList[name];try{semver.lte(semver.coerce(installedVersion),semver.coerce(addonVersion))&&incompatibleAddons2.push({name,version:installedVersion});}catch{}}),incompatibleAddons2};var incompatibleAddons={id:"incompatible-addons",promptOnly:!0,versionRange:["*","*"],async check({mainConfig,packageManager}){let incompatibleAddonList=await getIncompatibleAddons(mainConfig,packageManager);return incompatibleAddonList.length>0?{incompatibleAddonList}:null},prompt({incompatibleAddonList}){return dedent20`
536
+ ${chalk15.bold("Attention")}: We've detected that you're using the following addons in versions which are known to be incompatible with Storybook 8:
537
+
538
+ ${incompatibleAddonList.map(({name,version})=>`- ${chalk15.cyan(`${name}@${version}`)}`).join(`
539
+ `)}
540
+
541
+ Please be aware they might not work in Storybook 8. Reach out to their maintainers for updates and check the following Github issue for more information:
542
+ ${chalk15.yellow("https://github.com/storybookjs/storybook/issues/26031")}
543
+ `}};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(`${chalk15.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 ${chalk15.yellow(versionToCompare)} (from the ${chalk15.cyan(packageToDisplay)} package) or higher.`);let filteredDependencies=Object.entries(installationMetadata?.dependencies||[]).filter(([name,packages])=>Object.keys(versions).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])=>`${chalk15.hex("#ff9800")(name)}: ${dep[0].version} ${allDependencies?.[name]?packageJsonSuffix:""}`).sort((a,b)=>(b.includes(packageJsonSuffix)?1:0)-(a.includes(packageJsonSuffix)?1:0)).join(`
544
+ `));}return messages.push(`You can run ${chalk15.cyan("npx storybook@latest upgrade")} to upgrade all of your Storybook packages to the latest version.
565
545
 
566
- 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: ${chalk16.cyan(installationMetadata?.dedupeCommand)}`),messages.join(`
546
+ 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: ${chalk15.cyan(installationMetadata?.dedupeCommand)}`),messages.join(`
567
547
 
568
- `)}catch{return}}var logger29=console,LOG_FILE_NAME2="doctor-storybook.log",LOG_FILE_PATH2=join(process.cwd(),LOG_FILE_NAME2),TEMP_LOG_FILE_PATH2="",originalStdOutWrite2=process.stdout.write.bind(process.stdout),originalStdErrWrite2=process.stderr.write.bind(process.stdout),augmentLogsToFile2=()=>{TEMP_LOG_FILE_PATH2=tempy__default.file({name:LOG_FILE_NAME2});let logStream=createWriteStream(TEMP_LOG_FILE_PATH2);process.stdout.write=d=>(originalStdOutWrite2(d),logStream.write(cleanLog(d))),process.stderr.write=d=>logStream.write(cleanLog(d));},cleanup2=()=>{process.stdout.write=originalStdOutWrite2,process.stderr.write=originalStdErrWrite2;},doctor=async({configDir:userSpecifiedConfigDir,packageManager:pkgMgr}={})=>{augmentLogsToFile2();let diagnosticMessages=[];logger29.info("\u{1FA7A} checking the health of your Storybook..");let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),storybookVersion,mainConfig;try{let storybookData=await getStorybookData({configDir:userSpecifiedConfigDir,packageManager});storybookVersion=storybookData.storybookVersion,mainConfig=storybookData.mainConfig;}catch(err){err.message.includes("No configuration files have been found")&&logger29.info(dedent21`[Storybook doctor] Could not find or evaluate your Storybook main.js config directory at ${chalk16.blue(userSpecifiedConfigDir||".storybook")} so the doctor command cannot proceed. You might be running this command in a monorepo or a non-standard project structure. If that is the case, please rerun this command by specifying the path to your Storybook config directory via the --config-dir option.`),logger29.info(dedent21`[Storybook doctor] ❌ ${err.message}`),logger29.info("Please fix the error and try again.");}if(storybookVersion||(logger29.info(dedent21`
548
+ `)}catch{return}}var logger27=console,LOG_FILE_NAME2="doctor-storybook.log",LOG_FILE_PATH2=join(process.cwd(),LOG_FILE_NAME2),TEMP_LOG_FILE_PATH2="",originalStdOutWrite2=process.stdout.write.bind(process.stdout),originalStdErrWrite2=process.stderr.write.bind(process.stdout),augmentLogsToFile2=()=>{TEMP_LOG_FILE_PATH2=tempy__default.file({name:LOG_FILE_NAME2});let logStream=createWriteStream(TEMP_LOG_FILE_PATH2);process.stdout.write=d=>(originalStdOutWrite2(d),logStream.write(cleanLog(d))),process.stderr.write=d=>logStream.write(cleanLog(d));},cleanup2=()=>{process.stdout.write=originalStdOutWrite2,process.stderr.write=originalStdErrWrite2;},doctor=async({configDir:userSpecifiedConfigDir,packageManager:pkgMgr}={})=>{augmentLogsToFile2();let diagnosticMessages=[];logger27.info("\u{1FA7A} checking the health of your Storybook..");let packageManager=JsPackageManagerFactory.getPackageManager({force:pkgMgr}),storybookVersion,mainConfig;try{let storybookData=await getStorybookData({configDir:userSpecifiedConfigDir,packageManager});storybookVersion=storybookData.storybookVersion,mainConfig=storybookData.mainConfig;}catch(err){err.message.includes("No configuration files have been found")&&logger27.info(dedent20`[Storybook doctor] Could not find or evaluate your Storybook main.js config directory at ${chalk15.blue(userSpecifiedConfigDir||".storybook")} so the doctor command cannot proceed. You might be running this command in a monorepo or a non-standard project structure. If that is the case, please rerun this command by specifying the path to your Storybook config directory via the --config-dir option.`),logger27.info(dedent20`[Storybook doctor] ❌ ${err.message}`),logger27.info("Please fix the error and try again.");}if(storybookVersion||(logger27.info(dedent20`
569
549
  [Storybook doctor] ❌ Unable to determine Storybook version so the command will not proceed.
570
550
  🤔 Are you running storybook doctor from your project directory? Please specify your Storybook config directory with the --config-dir flag.
571
551
  `),process.exit(1)),!mainConfig)throw new Error("mainConfig is undefined");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);if(mismatchingVersionMessage)diagnosticMessages.push(mismatchingVersionMessage);else {let list=installationMetadata?getDuplicatedDepsWarnings(installationMetadata):getDuplicatedDepsWarnings();list&&diagnosticMessages.push(list?.join(`
572
- `));}logger29.info();let finalMessages=diagnosticMessages.filter(Boolean);finalMessages.length>0?(finalMessages.push(`You can find the full logs in ${chalk16.cyan(LOG_FILE_PATH2)}`),logger29.info(boxen(finalMessages.join(`
552
+ `));}logger27.info();let finalMessages=diagnosticMessages.filter(Boolean);finalMessages.length>0?(finalMessages.push(`You can find the full logs in ${chalk15.cyan(LOG_FILE_PATH2)}`),logger27.info(boxen(finalMessages.join(`
573
553
 
574
554
  -------
575
555
 
576
- `),{borderStyle:"round",padding:1,title:"Diagnostics",borderColor:"red"})),await move(TEMP_LOG_FILE_PATH2,join(process.cwd(),LOG_FILE_NAME2),{overwrite:!0})):(logger29.info("\u{1F973} Your Storybook project looks good!"),await remove(TEMP_LOG_FILE_PATH2)),logger29.info(),cleanup2();};addToGlobalContext("cliVersion",versions.storybook);var readUpResult=sync({cwd:__dirname});invariant5(readUpResult,"Failed to find the closest package.json file.");var pkg=readUpResult.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("--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("-s --skip-postinstall","Skip package specific postinstall config modifications").action((addonName,options)=>add(addonName,options));command("remove <addon>").description("Remove an addon from your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").action((addonName,options)=>withTelemetry("remove",{cliOptions:options},async()=>{await removeAddon(addonName,options),options.disableTelemetry||await telemetry("remove",{addon:addonName,source:"cli"});}));command("upgrade").description(`Upgrade your Storybook packages to v${versions.storybook}`).option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").option("-y --yes","Skip prompting the user").option("-f --force","force the upgrade, skipping autoblockers").option("-n --dry-run","Only check for upgrades, do not install").option("-s --skip-check","Skip postinstall version and automigration checks").option("-c, --config-dir <dir-name>","Directory 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(chalk16.bold(`
577
- 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,chalk16.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("sandbox [filterValue]").alias("repro").description("Create a sandbox from a set of possible templates").option("-o --output <outDir>","Define an output directory").option("--no-init","Whether to download a template without an initialized Storybook",!1).action((filterValue,options)=>sandbox({filterValue,...options},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("-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 doAutomigrate({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("-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("--exact-port","Exit early if the desired port is not available").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(chalk16.bold(`${pkg.name} v${pkg.version}`)+chalk16.reset(`
578
- `)),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("-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(chalk16.bold(`${pkg.name} v${pkg.version}
556
+ `),{borderStyle:"round",padding:1,title:"Diagnostics",borderColor:"red"})),await move(TEMP_LOG_FILE_PATH2,join(process.cwd(),LOG_FILE_NAME2),{overwrite:!0})):(logger27.info("\u{1F973} Your Storybook project looks good!"),await remove(TEMP_LOG_FILE_PATH2)),logger27.info(),cleanup2();};addToGlobalContext("cliVersion",versions.storybook);var readUpResult=sync({cwd:__dirname});invariant5(readUpResult,"Failed to find the closest package.json file.");var pkg=readUpResult.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("--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("-s --skip-postinstall","Skip package specific postinstall config modifications").action((addonName,options)=>add(addonName,options));command("remove <addon>").description("Remove an addon from your Storybook").option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").action((addonName,options)=>removeAddon(addonName,options));command("upgrade").description(`Upgrade your Storybook packages to v${versions.storybook}`).option("--package-manager <npm|pnpm|yarn1|yarn2>","Force package manager for installing dependencies").option("-y --yes","Skip prompting the user").option("-f --force","force the upgrade, skipping autoblockers").option("-n --dry-run","Only check for upgrades, do not install").option("-s --skip-check","Skip postinstall version and automigration checks").option("-c, --config-dir <dir-name>","Directory 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(chalk15.bold(`
557
+ 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,chalk15.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("sandbox [filterValue]").alias("repro").description("Create a sandbox from a set of possible templates").option("-o --output <outDir>","Define an output directory").option("--no-init","Whether to download a template without an initialized Storybook",!1).action((filterValue,options)=>sandbox({filterValue,...options},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("-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 doAutomigrate({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("-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("--exact-port","Exit early if the desired port is not available").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(chalk15.bold(`${pkg.name} v${pkg.version}`)+chalk15.reset(`
558
+ `)),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("-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(chalk15.bold(`${pkg.name} v${pkg.version}
579
559
  `)),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.
580
560
  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(`
581
561
  Did you mean ${suggestion}?`),process.exit(1);});program.usage("<command> [options]").version(pkg.version).parse(process.argv);