@storybook/core-server 7.0.18 → 7.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -8
- package/dist/index.mjs +6 -5
- package/package.json +11 -11
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __commonJS=(cb,mod)=>function(){return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var require_dist=__commonJS({"../client-logger/dist/index.js"(exports,module2){"use strict";var __defProp2=Object.defineProperty,__getOwnPropDesc2=Object.getOwnPropertyDescriptor,__getOwnPropNames2=Object.getOwnPropertyNames,__hasOwnProp2=Object.prototype.hasOwnProperty,__export2=(target,all)=>{for(var name in all)__defProp2(target,name,{get:all[name],enumerable:!0})},__copyProps2=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames2(from))!__hasOwnProp2.call(to,key)&&key!==except&&__defProp2(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc2(from,key))||desc.enumerable});return to},__toCommonJS2=mod=>__copyProps2(__defProp2({},"__esModule",{value:!0}),mod),src_exports2={};__export2(src_exports2,{deprecate:()=>deprecate,logger:()=>logger11,once:()=>once2,pretty:()=>pretty});module2.exports=__toCommonJS2(src_exports2);var import_global3=require("@storybook/global"),{LOGLEVEL}=import_global3.global,levels={trace:1,debug:2,info:3,warn:4,error:5,silent:10},currentLogLevelString=LOGLEVEL,currentLogLevelNumber=levels[currentLogLevelString]||levels.info,logger11={trace:(message,...rest)=>{currentLogLevelNumber<=levels.trace&&console.trace(message,...rest)},debug:(message,...rest)=>{currentLogLevelNumber<=levels.debug&&console.debug(message,...rest)},info:(message,...rest)=>{currentLogLevelNumber<=levels.info&&console.info(message,...rest)},warn:(message,...rest)=>{currentLogLevelNumber<=levels.warn&&console.warn(message,...rest)},error:(message,...rest)=>{currentLogLevelNumber<=levels.error&&console.error(message,...rest)},log:(message,...rest)=>{currentLogLevelNumber<levels.silent&&console.log(message,...rest)}},logged=new Set,once2=type=>(message,...rest)=>{if(!logged.has(message))return logged.add(message),logger11[type](message,...rest)};once2.clear=()=>logged.clear();once2.trace=once2("trace");once2.debug=once2("debug");once2.info=once2("info");once2.warn=once2("warn");once2.error=once2("error");once2.log=once2("log");var deprecate=once2("warn"),pretty=type=>(...args)=>{let argArray=[];if(args.length){let startTagRe=/<span\s+style=(['"])([^'"]*)\1\s*>/gi,endTagRe=/<\/span>/gi,reResultArray;for(argArray.push(args[0].replace(startTagRe,"%c").replace(endTagRe,"%c"));reResultArray=startTagRe.exec(args[0]);)argArray.push(reResultArray[2]),argArray.push("");for(let j=1;j<args.length;j++)argArray.push(args[j])}logger11[type].apply(logger11,argArray)};pretty.trace=pretty("trace");pretty.debug=pretty("debug");pretty.info=pretty("info");pretty.warn=pretty("warn");pretty.error=pretty("error")}});var src_exports={};__export(src_exports,{build:()=>standalone_default,buildDevStandalone:()=>buildDevStandalone,buildStaticStandalone:()=>buildStaticStandalone,getPreviewBodyTemplate:()=>
|
|
1
|
+
var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty;var __commonJS=(cb,mod)=>function(){return mod||(0,cb[__getOwnPropNames(cb)[0]])((mod={exports:{}}).exports,mod),mod.exports};var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:!0})},__copyProps=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames(from))!__hasOwnProp.call(to,key)&&key!==except&&__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable});return to};var __toESM=(mod,isNodeMode,target)=>(target=mod!=null?__create(__getProtoOf(mod)):{},__copyProps(isNodeMode||!mod||!mod.__esModule?__defProp(target,"default",{value:mod,enumerable:!0}):target,mod)),__toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:!0}),mod);var require_dist=__commonJS({"../client-logger/dist/index.js"(exports,module2){"use strict";var __defProp2=Object.defineProperty,__getOwnPropDesc2=Object.getOwnPropertyDescriptor,__getOwnPropNames2=Object.getOwnPropertyNames,__hasOwnProp2=Object.prototype.hasOwnProperty,__export2=(target,all)=>{for(var name in all)__defProp2(target,name,{get:all[name],enumerable:!0})},__copyProps2=(to,from,except,desc)=>{if(from&&typeof from=="object"||typeof from=="function")for(let key of __getOwnPropNames2(from))!__hasOwnProp2.call(to,key)&&key!==except&&__defProp2(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc2(from,key))||desc.enumerable});return to},__toCommonJS2=mod=>__copyProps2(__defProp2({},"__esModule",{value:!0}),mod),src_exports2={};__export2(src_exports2,{deprecate:()=>deprecate,logger:()=>logger11,once:()=>once2,pretty:()=>pretty});module2.exports=__toCommonJS2(src_exports2);var import_global3=require("@storybook/global"),{LOGLEVEL}=import_global3.global,levels={trace:1,debug:2,info:3,warn:4,error:5,silent:10},currentLogLevelString=LOGLEVEL,currentLogLevelNumber=levels[currentLogLevelString]||levels.info,logger11={trace:(message,...rest)=>{currentLogLevelNumber<=levels.trace&&console.trace(message,...rest)},debug:(message,...rest)=>{currentLogLevelNumber<=levels.debug&&console.debug(message,...rest)},info:(message,...rest)=>{currentLogLevelNumber<=levels.info&&console.info(message,...rest)},warn:(message,...rest)=>{currentLogLevelNumber<=levels.warn&&console.warn(message,...rest)},error:(message,...rest)=>{currentLogLevelNumber<=levels.error&&console.error(message,...rest)},log:(message,...rest)=>{currentLogLevelNumber<levels.silent&&console.log(message,...rest)}},logged=new Set,once2=type=>(message,...rest)=>{if(!logged.has(message))return logged.add(message),logger11[type](message,...rest)};once2.clear=()=>logged.clear();once2.trace=once2("trace");once2.debug=once2("debug");once2.info=once2("info");once2.warn=once2("warn");once2.error=once2("error");once2.log=once2("log");var deprecate=once2("warn"),pretty=type=>(...args)=>{let argArray=[];if(args.length){let startTagRe=/<span\s+style=(['"])([^'"]*)\1\s*>/gi,endTagRe=/<\/span>/gi,reResultArray;for(argArray.push(args[0].replace(startTagRe,"%c").replace(endTagRe,"%c"));reResultArray=startTagRe.exec(args[0]);)argArray.push(reResultArray[2]),argArray.push("");for(let j=1;j<args.length;j++)argArray.push(args[j])}logger11[type].apply(logger11,argArray)};pretty.trace=pretty("trace");pretty.debug=pretty("debug");pretty.info=pretty("info");pretty.warn=pretty("warn");pretty.error=pretty("error")}});var src_exports={};__export(src_exports,{build:()=>standalone_default,buildDevStandalone:()=>buildDevStandalone,buildStaticStandalone:()=>buildStaticStandalone,getPreviewBodyTemplate:()=>import_core_common12.getPreviewBodyTemplate,getPreviewHeadTemplate:()=>import_core_common12.getPreviewHeadTemplate,sendTelemetryError:()=>sendTelemetryError,withTelemetry:()=>withTelemetry});module.exports=__toCommonJS(src_exports);var import_core_common12=require("@storybook/core-common");var import_chalk7=__toESM(require("chalk")),import_fs_extra7=require("fs-extra"),import_path9=require("path"),import_ts_dedent5=require("ts-dedent"),import_global=require("@storybook/global"),import_node_logger5=require("@storybook/node-logger"),import_telemetry2=require("@storybook/telemetry"),import_core_common6=require("@storybook/core-common"),import_isEqual2=__toESM(require("lodash/isEqual.js"));var import_json_ext=require("@discoveryjs/json-ext"),import_node_logger=require("@storybook/node-logger"),import_chalk=__toESM(require("chalk")),import_fs_extra=__toESM(require("fs-extra")),import_path=__toESM(require("path"));async function outputStats(directory,previewStats,managerStats){if(previewStats){let filePath=await writeStats(directory,"preview",previewStats);import_node_logger.logger.info(`=> preview stats written to ${import_chalk.default.cyan(filePath)}`)}if(managerStats){let filePath=await writeStats(directory,"manager",managerStats);import_node_logger.logger.info(`=> manager stats written to ${import_chalk.default.cyan(filePath)}`)}}var writeStats=async(directory,name,stats)=>{let filePath=import_path.default.join(directory,`${name}-stats.json`),{chunks,...data}=stats.toJson();return await new Promise((resolve3,reject)=>{(0,import_json_ext.stringifyStream)(data,null,2).on("error",reject).pipe(import_fs_extra.default.createWriteStream(filePath)).on("error",reject).on("finish",resolve3)}),filePath};var import_chalk3=__toESM(require("chalk")),import_fs_extra3=__toESM(require("fs-extra")),import_path4=__toESM(require("path")),import_node_logger3=require("@storybook/node-logger"),import_core_common2=require("@storybook/core-common");var import_node_logger2=require("@storybook/node-logger"),import_core_common=require("@storybook/core-common"),import_chalk2=__toESM(require("chalk")),import_express=__toESM(require("express")),import_fs_extra2=require("fs-extra"),import_path3=__toESM(require("path")),import_serve_favicon=__toESM(require("serve-favicon")),import_isEqual=__toESM(require("lodash/isEqual.js")),import_ts_dedent=require("ts-dedent");var import_path2=require("path");var defaultStaticDirs=[{from:(0,import_path2.join)((0,import_path2.dirname)(require.resolve("@storybook/manager/package.json")),"static"),to:"/sb-common-assets"}];async function useStatics(router2,options){let staticDirs=await options.presets.apply("staticDirs"),faviconPath=await options.presets.apply("favicon");if(options.staticDir&&!(0,import_isEqual.default)(staticDirs,defaultStaticDirs))throw new Error(import_ts_dedent.dedent`
|
|
2
2
|
Conflict when trying to read staticDirs:
|
|
3
3
|
* Storybook's configuration option: 'staticDirs'
|
|
4
4
|
* Storybook's CLI flag: '--staticDir' or '-s'
|
|
@@ -7,14 +7,15 @@ var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropD
|
|
|
7
7
|
`);let statics=[...staticDirs.map(dir=>typeof dir=="string"?dir:`${dir.from}:${dir.to}`),...options.staticDir||[]];statics&&statics.length>0&&await Promise.all(statics.map(async dir=>{try{let relativeDir=staticDirs?(0,import_core_common.getDirectoryFromWorkingDir)({configDir:options.configDir,workingDir:process.cwd(),directory:dir}):dir,{staticDir,staticPath,targetEndpoint}=await parseStaticDir(relativeDir);targetEndpoint.startsWith("/sb-")||import_node_logger2.logger.info(import_chalk2.default`=> Serving static files from {cyan ${staticDir}} at {cyan ${targetEndpoint}}`),router2.use(targetEndpoint,import_express.default.static(staticPath,{index:!1}))}catch(e){import_node_logger2.logger.warn(e.message)}})),router2.use((0,import_serve_favicon.default)(faviconPath))}var parseStaticDir=async arg=>{let lastColonIndex=arg.lastIndexOf(":"),isWindowsRawDirOnly=import_path3.default.win32.isAbsolute(arg)&&lastColonIndex===1,splitIndex=lastColonIndex!==-1&&!isWindowsRawDirOnly?lastColonIndex:arg.length,target=(arg.substring(splitIndex+1)||"/").split(import_path3.default.sep).join(import_path3.default.posix.sep),rawDir=arg.substring(0,splitIndex),staticDir=import_path3.default.isAbsolute(rawDir)?rawDir:`./${rawDir}`,staticPath=import_path3.default.resolve(staticDir),targetDir=target.replace(/^\/?/,"./"),targetEndpoint=targetDir.substring(1);if(!await(0,import_fs_extra2.pathExists)(staticPath))throw new Error((0,import_ts_dedent.dedent)(import_chalk2.default`
|
|
8
8
|
Failed to load static files, no such directory: {cyan ${staticPath}}
|
|
9
9
|
Make sure this directory exists, or omit the {bold -s (--static-dir)} option.
|
|
10
|
-
`));return{staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=import_path4.default.join(outputDir,targetDir);import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));await import_fs_extra3.default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})}catch(e){import_node_logger3.logger.error(e.message),process.exit(-1)}}))}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir((0,import_core_common2.getDirectoryFromWorkingDir)({configDir,workingDir,directory:staticDirAndTarget})),targetPath=import_path4.default.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await import_fs_extra3.default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})},Promise.resolve())}var import_node_url=require("url");async function getManagerBuilder(){return import("@storybook/builder-manager")}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import((0,import_node_url.pathToFileURL)(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder==null?void 0:builder.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}var import_fs_extra4=require("fs-extra"),import_debounce=__toESM(require("lodash/debounce.js")),import_core_events=require("@storybook/core-events");var import_watchpack=__toESM(require("watchpack"));function slash(path8){return/^\\\\\?\\/.test(path8)?path8:path8.replace(/\\/g,"/")}var import_fs=__toESM(require("fs")),import_path5=__toESM(require("path")),import_globby=__toESM(require("globby")),import_uniq=__toESM(require("lodash/uniq.js")),isDirectory=directory=>{try{return import_fs.default.lstatSync(directory).isDirectory()}catch{return!1}};function toImportPath(relativePath){return relativePath.startsWith(".")?relativePath:`./${relativePath}`}function watchStorySpecifiers(specifiers,options,onInvalidate){let wp=new import_watchpack.default({followSymlinks:!1,ignored:["**/.git","node_modules"]});wp.watch({directories:(0,import_uniq.default)(specifiers.map(ns=>ns.directory))});async function onChangeOrRemove(watchpackPath,removed){let importPath=slash(watchpackPath.startsWith(".")?watchpackPath:`./${watchpackPath}`),matchingSpecifier=specifiers.find(ns=>ns.importPathMatcher.exec(importPath));if(matchingSpecifier){onInvalidate(matchingSpecifier,importPath,removed);return}let absolutePath=import_path5.default.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=import_path5.default.join(options.workingDir,importPath,"**",import_path5.default.basename(specifier.files));(await(0,import_globby.default)(slash(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(import_path5.default.relative(options.workingDir,filePath).replace(/\\/g,"/"));specifier.importPathMatcher.exec(fileImportPath)&&onInvalidate(specifier,fileImportPath,removed)})}))}return wp.on("change",async(filePath,mtime,explanation)=>{await onChangeOrRemove(filePath,!mtime)}),wp.on("remove",async(filePath,explanation)=>{await onChangeOrRemove(filePath,!0)}),()=>wp.close()}var DEBOUNCE=100;async function extractStoriesJson(outputFile,initializedStoryIndexGenerator,transform){let storyIndex=await(await initializedStoryIndexGenerator).getIndex();await(0,import_fs_extra4.writeJSON)(outputFile,transform?transform(storyIndex):storyIndex)}function useStoriesJson({router:router2,initializedStoryIndexGenerator,workingDir=process.cwd(),serverChannel,normalizedStories}){let maybeInvalidate=(0,import_debounce.default)(()=>serverChannel.emit(import_core_events.STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path8,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path8,removed),maybeInvalidate()}),router2.use("/index.json",async(req,res)=>{try{let index=await(await initializedStoryIndexGenerator).getIndex();res.header("Content-Type","application/json"),res.send(JSON.stringify(index))}catch(err){res.status(500),res.send(err.toString())}}),router2.use("/stories.json",async(req,res)=>{try{let generator=await initializedStoryIndexGenerator,index=convertToIndexV3(await generator.getIndex());res.header("Content-Type","application/json"),res.send(JSON.stringify(index))}catch(err){res.status(500),res.send(err.toString())}})}var convertToIndexV3=index=>{let{entries}=index;return{v:3,stories:Object.entries(entries).reduce((acc,[id,entry])=>{let{type,...rest}=entry;return acc[id]={...rest,kind:rest.title,story:rest.name,parameters:{__id:rest.id,docsOnly:type==="docs",fileName:rest.importPath}},acc},{})}};var import_fs_extra5=require("fs-extra"),import_telemetry=require("@storybook/telemetry");async function extractStorybookMetadata(outputFile,configDir){let storybookMetadata=await(0,import_telemetry.getStorybookMetadata)(configDir);await(0,import_fs_extra5.writeJSON)(outputFile,storybookMetadata)}function useStorybookMetadata(router2,configDir){router2.use("/project.json",async(req,res)=>{let storybookMetadata=await(0,import_telemetry.getStorybookMetadata)(configDir);res.header("Content-Type","application/json"),res.send(JSON.stringify(storybookMetadata))})}var import_path7=__toESM(require("path")),import_chalk4=__toESM(require("chalk")),import_fs_extra6=__toESM(require("fs-extra")),import_globby2=__toESM(require("globby"));var import_preview_api=require("@storybook/preview-api"),
|
|
10
|
+
`));return{staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=import_path4.default.join(outputDir,targetDir);import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));await import_fs_extra3.default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})}catch(e){import_node_logger3.logger.error(e.message),process.exit(-1)}}))}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir((0,import_core_common2.getDirectoryFromWorkingDir)({configDir,workingDir,directory:staticDirAndTarget})),targetPath=import_path4.default.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await import_fs_extra3.default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})},Promise.resolve())}var import_node_url=require("url");async function getManagerBuilder(){return import("@storybook/builder-manager")}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import((0,import_node_url.pathToFileURL)(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder==null?void 0:builder.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}var import_fs_extra4=require("fs-extra"),import_debounce=__toESM(require("lodash/debounce.js")),import_core_events=require("@storybook/core-events");var import_watchpack=__toESM(require("watchpack"));function slash(path8){return/^\\\\\?\\/.test(path8)?path8:path8.replace(/\\/g,"/")}var import_fs=__toESM(require("fs")),import_path5=__toESM(require("path")),import_globby=__toESM(require("globby")),import_uniq=__toESM(require("lodash/uniq.js")),import_core_common3=require("@storybook/core-common"),isDirectory=directory=>{try{return import_fs.default.lstatSync(directory).isDirectory()}catch{return!1}};function toImportPath(relativePath){return relativePath.startsWith(".")?relativePath:`./${relativePath}`}function watchStorySpecifiers(specifiers,options,onInvalidate){let wp=new import_watchpack.default({followSymlinks:!1,ignored:["**/.git","node_modules"]});wp.watch({directories:(0,import_uniq.default)(specifiers.map(ns=>ns.directory))});async function onChangeOrRemove(watchpackPath,removed){let importPath=slash(watchpackPath.startsWith(".")?watchpackPath:`./${watchpackPath}`),matchingSpecifier=specifiers.find(ns=>ns.importPathMatcher.exec(importPath));if(matchingSpecifier){onInvalidate(matchingSpecifier,importPath,removed);return}let absolutePath=import_path5.default.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=import_path5.default.join(options.workingDir,importPath,"**",import_path5.default.basename(specifier.files));(await(0,import_globby.default)(slash(dirGlob),(0,import_core_common3.commonGlobOptions)(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(import_path5.default.relative(options.workingDir,filePath).replace(/\\/g,"/"));specifier.importPathMatcher.exec(fileImportPath)&&onInvalidate(specifier,fileImportPath,removed)})}))}return wp.on("change",async(filePath,mtime,explanation)=>{await onChangeOrRemove(filePath,!mtime)}),wp.on("remove",async(filePath,explanation)=>{await onChangeOrRemove(filePath,!0)}),()=>wp.close()}var DEBOUNCE=100;async function extractStoriesJson(outputFile,initializedStoryIndexGenerator,transform){let storyIndex=await(await initializedStoryIndexGenerator).getIndex();await(0,import_fs_extra4.writeJSON)(outputFile,transform?transform(storyIndex):storyIndex)}function useStoriesJson({router:router2,initializedStoryIndexGenerator,workingDir=process.cwd(),serverChannel,normalizedStories}){let maybeInvalidate=(0,import_debounce.default)(()=>serverChannel.emit(import_core_events.STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path8,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path8,removed),maybeInvalidate()}),router2.use("/index.json",async(req,res)=>{try{let index=await(await initializedStoryIndexGenerator).getIndex();res.header("Content-Type","application/json"),res.send(JSON.stringify(index))}catch(err){res.status(500),res.send(err.toString())}}),router2.use("/stories.json",async(req,res)=>{try{let generator=await initializedStoryIndexGenerator,index=convertToIndexV3(await generator.getIndex());res.header("Content-Type","application/json"),res.send(JSON.stringify(index))}catch(err){res.status(500),res.send(err.toString())}})}var convertToIndexV3=index=>{let{entries}=index;return{v:3,stories:Object.entries(entries).reduce((acc,[id,entry])=>{let{type,...rest}=entry;return acc[id]={...rest,kind:rest.title,story:rest.name,parameters:{__id:rest.id,docsOnly:type==="docs",fileName:rest.importPath}},acc},{})}};var import_fs_extra5=require("fs-extra"),import_telemetry=require("@storybook/telemetry");async function extractStorybookMetadata(outputFile,configDir){let storybookMetadata=await(0,import_telemetry.getStorybookMetadata)(configDir);await(0,import_fs_extra5.writeJSON)(outputFile,storybookMetadata)}function useStorybookMetadata(router2,configDir){router2.use("/project.json",async(req,res)=>{let storybookMetadata=await(0,import_telemetry.getStorybookMetadata)(configDir);res.header("Content-Type","application/json"),res.send(JSON.stringify(storybookMetadata))})}var import_path7=__toESM(require("path")),import_chalk4=__toESM(require("chalk")),import_fs_extra6=__toESM(require("fs-extra")),import_globby2=__toESM(require("globby"));var import_preview_api=require("@storybook/preview-api"),import_core_common4=require("@storybook/core-common"),import_node_logger4=require("@storybook/node-logger"),import_csf_tools=require("@storybook/csf-tools"),import_csf=require("@storybook/csf"),import_docs_mdx=require("@storybook/docs-mdx"),import_ts_dedent2=__toESM(require("ts-dedent"));var import_path6=require("path");function autoName(mdxImportPath,csfImportPath,defaultName){let mdxBasename=(0,import_path6.basename)(mdxImportPath),csfBasename=(0,import_path6.basename)(csfImportPath),[mdxFilename]=mdxBasename.split("."),[csfFilename]=csfBasename.split(".");return mdxFilename===csfFilename?defaultName:mdxFilename}var IndexingError=class extends Error{constructor(message,importPaths,stack){super();this.message=message,this.importPaths=importPaths,stack&&(this.stack=stack)}pathsString(){return this.importPaths.length===1?`${slash(this.importPaths[0])}`:`${this.importPaths.map(slash).join(",")}`}toString(){return`${this.pathsString()}: ${this.message}`}},MultipleIndexingError=class extends Error{constructor(indexingErrors){super();this.indexingErrors=indexingErrors;if(this.indexingErrors.length===0)throw new Error("Unexpected empty error list");if(this.indexingErrors.length===1){let[err]=this.indexingErrors;this.message=`Unable to index ${err.pathsString()}`}else this.message=`Unable to index files:
|
|
11
11
|
${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
12
12
|
`)}`}toString(){return this.indexingErrors.length===1?`${this.message}:
|
|
13
|
-
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return!(tags!=null&&tags.includes(AUTODOCS_TAG))&&!(tags!=null&&tags.includes(STORIES_MDX_TAG))}var makeAbsolute=(otherImport,normalizedPath,workingDir)=>otherImport.startsWith(".")?slash(import_path7.default.resolve(workingDir,(0,
|
|
13
|
+
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return!(tags!=null&&tags.includes(AUTODOCS_TAG))&&!(tags!=null&&tags.includes(STORIES_MDX_TAG))}var makeAbsolute=(otherImport,normalizedPath,workingDir)=>otherImport.startsWith(".")?slash(import_path7.default.resolve(workingDir,(0,import_core_common4.normalizeStoryPath)(import_path7.default.join(import_path7.default.dirname(normalizedPath),otherImport)))):otherImport,StoryIndexGenerator=class{constructor(specifiers,options){this.specifiers=specifiers;this.options=options;this.specifierToCache=new Map}async initialize(){(await Promise.all(this.specifiers.map(async specifier=>{let pathToSubIndex={},fullGlob=slash(import_path7.default.join(this.options.workingDir,specifier.directory,specifier.files)),files=await(0,import_globby2.default)(fullGlob,(0,import_core_common4.commonGlobOptions)(fullGlob));return files.length===0&&import_node_logger4.once.warn(`No story files found for the specified pattern: ${import_chalk4.default.blue(import_path7.default.join(specifier.directory,specifier.files))}`),files.sort().forEach(absolutePath=>{let ext=import_path7.default.extname(absolutePath);if(ext===".storyshot"){let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath);import_node_logger4.logger.info(`Skipping ${ext} file ${relativePath}`);return}pathToSubIndex[absolutePath]=!1}),[specifier,pathToSubIndex]}))).forEach(([specifier,cache4])=>this.specifierToCache.set(specifier,cache4)),await this.ensureExtracted()}async updateExtracted(updater,overwrite=!1){await Promise.all(this.specifiers.map(async specifier=>{let entry=this.specifierToCache.get(specifier);return Promise.all(Object.keys(entry).map(async absolutePath=>{if(!(entry[absolutePath]&&!overwrite))try{entry[absolutePath]=await updater(specifier,absolutePath,entry[absolutePath])}catch(err){let relativePath=`.${import_path7.default.sep}${import_path7.default.relative(this.options.workingDir,absolutePath)}`;entry[absolutePath]={type:"error",err:new IndexingError(err.message,[relativePath],err.stack)}}}))}))}isDocsMdx(absolutePath){return/(?<!\.stories)\.mdx$/i.test(absolutePath)}async ensureExtracted(){return await this.updateExtracted(async(specifier,absolutePath)=>this.isDocsMdx(absolutePath)?!1:this.extractStories(specifier,absolutePath)),await this.updateExtracted(async(specifier,absolutePath)=>this.extractDocs(specifier,absolutePath)),this.specifiers.flatMap(specifier=>{let cache4=this.specifierToCache.get(specifier);return Object.values(cache4).flatMap(entry=>entry?entry.type==="docs"?[entry]:entry.type==="error"?[entry]:entry.entries:[])})}findDependencies(absoluteImports){return[...this.specifierToCache.values()].flatMap(cache4=>Object.entries(cache4).filter(([fileName,cacheEntry])=>!cacheEntry||cacheEntry.type!=="stories"?!1:!!absoluteImports.find(storyImport=>fileName.match(new RegExp(`^${storyImport}(\\.[^.]+)?$`)))).map(([_,cacheEntry])=>cacheEntry))}async extractStories(specifier,absolutePath){let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath),entries=[],importPath=slash((0,import_core_common4.normalizeStoryPath)(relativePath)),makeTitle=userTitle=>(0,import_preview_api.userOrAutoTitleFromSpecifier)(importPath,specifier,userTitle),storyIndexer=this.options.storyIndexers.find(indexer=>indexer.test.exec(absolutePath));if(!storyIndexer)throw new Error(`No matching story indexer found for ${absolutePath}`);let csf=await storyIndexer.indexer(absolutePath,{makeTitle}),componentTags=csf.meta.tags||[];if(csf.stories.forEach(({id,name,tags:storyTags,parameters})=>{if(!(parameters!=null&¶meters.docsOnly)){let tags=[...storyTags||componentTags,"story"];entries.push({id,title:csf.meta.title,name,importPath,tags,type:"story"})}}),csf.stories.length){let{autodocs}=this.options.docs,componentAutodocs=componentTags.includes(AUTODOCS_TAG),autodocsOptedIn=autodocs===!0||autodocs==="tag"&&componentAutodocs;if(componentTags.includes(STORIES_MDX_TAG)||autodocsOptedIn){let name=this.options.docs.defaultName,id=(0,import_csf.toId)(csf.meta.title,name);entries.unshift({id,title:csf.meta.title,name,importPath,type:"docs",tags:[...componentTags,"docs",...autodocsOptedIn&&!componentAutodocs?[AUTODOCS_TAG]:[]],storiesImports:[]})}}return{entries,type:"stories",dependents:[]}}async extractDocs(specifier,absolutePath){var _a;let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath);try{if(!this.options.storyStoreV7)throw new Error("You cannot use `.mdx` files without using `storyStoreV7`.");let normalizedPath=(0,import_core_common4.normalizeStoryPath)(relativePath),importPath=slash(normalizedPath),content=await import_fs_extra6.default.readFile(absolutePath,"utf8"),result=(0,import_docs_mdx.analyze)(content);if(result.isTemplate)return!1;let absoluteImports=result.imports.map(p=>makeAbsolute(p,normalizedPath,this.options.workingDir)),dependencies=this.findDependencies(absoluteImports),sortedDependencies=dependencies,csfEntry;if(result.of){let absoluteOf=makeAbsolute(result.of,normalizedPath,this.options.workingDir);if(dependencies.forEach(dep=>{if(dep.entries.length>0){let first=dep.entries.find(e=>e.type!=="docs");import_path7.default.normalize(import_path7.default.resolve(this.options.workingDir,first.importPath)).startsWith(import_path7.default.normalize(absoluteOf))&&(csfEntry=first)}sortedDependencies=[dep,...dependencies.filter(d=>d!==dep)]}),!csfEntry)throw new Error(import_ts_dedent2.default`Could not find or load CSF file at path "${result.of}" referenced by \`of={}\` in docs file "${relativePath}".
|
|
14
14
|
|
|
15
15
|
- Does that file exist?
|
|
16
16
|
- If so, is it a CSF file (\`.stories.*\`)?
|
|
17
|
-
- If so, is it matched by the \`stories\` glob in \`main.js\`?`)}dependencies.forEach(dep=>{dep.dependents.push(absolutePath)});let title=(csfEntry==null?void 0:csfEntry.title)||(0,import_preview_api.userOrAutoTitleFromSpecifier)(importPath,specifier,result.title),{defaultName}=this.options.docs,name=result.name||(csfEntry?autoName(importPath,csfEntry.importPath,defaultName):defaultName);return{id:(0,import_csf.toId)(title,name),title,name,importPath,storiesImports:sortedDependencies.map(dep=>dep.entries[0].importPath),type:"docs",tags:[...result.tags||[],csfEntry?"attached-mdx":"unattached-mdx","docs"]}}catch(err){throw(_a=err.source)!=null&&_a.match(/mdast-util-mdx-jsx/g)&&import_node_logger4.logger.warn(`\u{1F4A1} This seems to be an MDX2 syntax error. Please refer to the MDX section in the following resource for assistance on how to fix this: ${import_chalk4.default.yellow("https://storybook.js.org/migration-guides/7.0")}`),err}}chooseDuplicate(firstEntry,secondEntry){var _a;if(firstEntry.importPath===secondEntry.importPath)return firstEntry;let firstIsBetter=!0;(secondEntry.type==="story"||isMdxEntry(secondEntry)&&firstEntry.type==="docs"&&!isMdxEntry(firstEntry))&&(firstIsBetter=!1);let betterEntry=firstIsBetter?firstEntry:secondEntry,worseEntry=firstIsBetter?secondEntry:firstEntry,changeDocsName='Use `<Meta of={} name="Other Name">` to distinguish them.';if(worseEntry.type==="story")throw new IndexingError(`Duplicate stories with id: ${firstEntry.id}`,[firstEntry.importPath,secondEntry.importPath]);if(betterEntry.type==="story"){let worseDescriptor=isMdxEntry(worseEntry)?"component docs page":"automatically generated docs page";throw betterEntry.name===this.options.docs.defaultName?new IndexingError(`You have a story for ${betterEntry.title} with the same name as your default docs entry name (${betterEntry.name}), so the docs page is being dropped. Consider changing the story name.`,[firstEntry.importPath,secondEntry.importPath]):new IndexingError(`You have a story for ${betterEntry.title} with the same name as your ${worseDescriptor} (${worseEntry.name}), so the docs page is being dropped. ${changeDocsName}`,[firstEntry.importPath,secondEntry.importPath])}else if(isMdxEntry(betterEntry)){if(isMdxEntry(worseEntry))throw new IndexingError(`You have two component docs pages with the same name ${betterEntry.title}:${betterEntry.name}. ${changeDocsName}`,[firstEntry.importPath,secondEntry.importPath]);if((_a=worseEntry.tags)!=null&&_a.includes(AUTODOCS_TAG)&&this.options.docs.autodocs!==!0)throw new IndexingError(`You created a component docs page for '${worseEntry.title}', but also tagged the CSF file with '${AUTODOCS_TAG}'. This is probably a mistake.`,[betterEntry.importPath,worseEntry.importPath])}else return{...betterEntry,storiesImports:[...betterEntry.storiesImports,worseEntry.importPath,...worseEntry.storiesImports]};return betterEntry}async sortStories(entries){let sortableStories=Object.values(entries);if(this.options.storyStoreV7){let storySortParameter=await this.getStorySortParameter(),fileNameOrder=this.storyFileNames();(0,import_preview_api.sortStoriesV7)(sortableStories,storySortParameter,fileNameOrder)}return sortableStories.reduce((acc,item)=>(acc[item.id]=item,acc),{})}async getIndex(){if(this.lastIndex)return this.lastIndex;if(this.lastError)throw this.lastError;let storiesList=await this.ensureExtracted();try{let errorEntries=storiesList.filter(entry=>entry.type==="error");if(errorEntries.length)throw new MultipleIndexingError(errorEntries.map(entry=>entry.err));let duplicateErrors=[],indexEntries={};if(storiesList.forEach(entry=>{try{let existing=indexEntries[entry.id];existing?indexEntries[entry.id]=this.chooseDuplicate(existing,entry):indexEntries[entry.id]=entry}catch(err){duplicateErrors.push(err)}}),duplicateErrors.length)throw new MultipleIndexingError(duplicateErrors);let sorted=await this.sortStories(indexEntries),compat=sorted;if(this.options.storiesV2Compatibility){let titleToStoryCount=Object.values(sorted).reduce((acc,story)=>(acc[story.title]=(acc[story.title]||0)+1,acc),{});compat=Object.entries(sorted).reduce((acc,entry)=>{let[id,story]=entry;return story.type==="docs"||(acc[id]={...story,kind:story.title,story:story.name,parameters:{__id:story.id,docsOnly:titleToStoryCount[story.title]===1&&story.name==="Page",fileName:story.importPath}}),acc},{})}return this.lastIndex={v:4,entries:compat},this.lastIndex}catch(err){throw this.lastError=err,import_node_logger4.logger.warn(`\u{1F6A8} ${this.lastError.toString()}`),this.lastError}}invalidate(specifier,importPath,removed){let absolutePath=slash(import_path7.default.resolve(this.options.workingDir,importPath)),cache4=this.specifierToCache.get(specifier),cacheEntry=cache4[absolutePath];if(cacheEntry&&cacheEntry.type==="stories"){let{dependents}=cacheEntry,invalidated=new Set;this.specifierToCache.forEach(otherCache=>{dependents.forEach(dep=>{otherCache[dep]&&(invalidated.add(dep),otherCache[dep]=!1)})})}if(removed){if(cacheEntry&&cacheEntry.type==="docs"){let absoluteImports=cacheEntry.storiesImports.map(p=>import_path7.default.resolve(this.options.workingDir,p));this.findDependencies(absoluteImports).forEach(dep=>dep.dependents.splice(dep.dependents.indexOf(absolutePath),1))}delete cache4[absolutePath]}else cache4[absolutePath]=!1;this.lastIndex=null,this.lastError=null}async getStorySortParameter(){let previewFile=["js","jsx","ts","tsx","mjs","cjs"].map(ext=>import_path7.default.join(this.options.configDir,`preview.${ext}`)).find(fname=>import_fs_extra6.default.existsSync(fname)),storySortParameter;if(previewFile){let previewCode=(await import_fs_extra6.default.readFile(previewFile,"utf-8")).toString();storySortParameter=await(0,import_csf_tools.getStorySortParameter)(previewCode)}return storySortParameter}storyFileNames(){return Array.from(this.specifierToCache.values()).flatMap(r=>Object.keys(r))}};var PAGE_REGEX=/(page|screen)/i,isPageStory=storyId=>PAGE_REGEX.test(storyId),isExampleEntry=entry=>["example-introduction--docs","example-button--docs","example-button--primary","example-button--secondary","example-button--large","example-button--small","example-header--docs","example-header--logged-in","example-header--logged-out","example-page--logged-in","example-page--logged-out"].includes(entry.id);function summarizeIndex(storyIndex){let storyCount=0,componentTitles=new Set,exampleStoryCount=0,exampleDocsCount=0,pageStoryCount=0,playStoryCount=0,autodocsCount=0,storiesMdxCount=0,mdxCount=0;Object.values(storyIndex.entries).forEach(entry=>{var _a,_b,_c;isExampleEntry(entry)?(entry.type==="story"&&(exampleStoryCount+=1),entry.type==="docs"&&(exampleDocsCount+=1)):entry.type==="story"?(storyCount+=1,componentTitles.add(entry.title),isPageStory(entry.title)&&(pageStoryCount+=1),(_a=entry.tags)!=null&&_a.includes(PLAY_FN_TAG)&&(playStoryCount+=1)):entry.type==="docs"&&(isMdxEntry(entry)?mdxCount+=1:(_b=entry.tags)!=null&&_b.includes(STORIES_MDX_TAG)?storiesMdxCount+=1:(_c=entry.tags)!=null&&_c.includes(AUTODOCS_TAG)&&(autodocsCount+=1))});let componentCount=componentTitles.size;return{storyCount,componentCount,pageStoryCount,playStoryCount,autodocsCount,storiesMdxCount,mdxCount,exampleStoryCount,exampleDocsCount,version:storyIndex.v}}var import_client_logger=__toESM(require_dist()),import_chalk6=__toESM(require("chalk")),import_ts_dedent4=__toESM(require("ts-dedent"));var import_semver2=__toESM(require("semver"));var fs5=__toESM(require("fs-extra")),import_path8=__toESM(require("path")),getActualPackageVersions=async packages=>Promise.all(packages.map(getActualPackageVersion)),getActualPackageVersion=async packageName=>{try{let packageJson=await getActualPackageJson(packageName);return{name:packageName,version:packageJson.version}}catch{return{name:packageName,version:null}}},getActualPackageJson=async packageName=>{let resolvedPackageJson=require.resolve(import_path8.default.join(packageName,"package.json"),{paths:[process.cwd()]});return await fs5.readJson(resolvedPackageJson)};var import_core_common4=require("@storybook/core-common"),import_csf_tools2=require("@storybook/csf-tools"),import_chalk5=__toESM(require("chalk")),import_semver=__toESM(require("semver")),import_ts_dedent3=__toESM(require("ts-dedent"));var 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(Boolean);var getIncompatibleAddons=async mainConfig=>{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);if(addons.length===0)return[];let addonVersions=await getActualPackageVersions(addons),incompatibleAddons=[];return addonVersions.forEach(({name,version:installedVersion})=>{if(installedVersion===null)return;let addonVersion=incompatibleList[name];try{import_semver2.default.lte(import_semver2.default.coerce(installedVersion),import_semver2.default.coerce(addonVersion))&&incompatibleAddons.push({name,version:installedVersion})}catch{}}),incompatibleAddons};var warnOnIncompatibleAddons=async config=>{let incompatibleAddons=await getIncompatibleAddons(config);incompatibleAddons.length>0&&import_client_logger.logger.warn(import_ts_dedent4.default`
|
|
17
|
+
- If so, is it matched by the \`stories\` glob in \`main.js\`?
|
|
18
|
+
- If so, has the file successfully loaded in Storybook and are its stories visible?`)}dependencies.forEach(dep=>{dep.dependents.push(absolutePath)});let title=(csfEntry==null?void 0:csfEntry.title)||(0,import_preview_api.userOrAutoTitleFromSpecifier)(importPath,specifier,result.title),{defaultName}=this.options.docs,name=result.name||(csfEntry?autoName(importPath,csfEntry.importPath,defaultName):defaultName);return{id:(0,import_csf.toId)(title,name),title,name,importPath,storiesImports:sortedDependencies.map(dep=>dep.entries[0].importPath),type:"docs",tags:[...result.tags||[],csfEntry?"attached-mdx":"unattached-mdx","docs"]}}catch(err){throw(_a=err.source)!=null&&_a.match(/mdast-util-mdx-jsx/g)&&import_node_logger4.logger.warn(`\u{1F4A1} This seems to be an MDX2 syntax error. Please refer to the MDX section in the following resource for assistance on how to fix this: ${import_chalk4.default.yellow("https://storybook.js.org/migration-guides/7.0")}`),err}}chooseDuplicate(firstEntry,secondEntry){var _a;if(firstEntry.importPath===secondEntry.importPath)return firstEntry;let firstIsBetter=!0;(secondEntry.type==="story"||isMdxEntry(secondEntry)&&firstEntry.type==="docs"&&!isMdxEntry(firstEntry))&&(firstIsBetter=!1);let betterEntry=firstIsBetter?firstEntry:secondEntry,worseEntry=firstIsBetter?secondEntry:firstEntry,changeDocsName='Use `<Meta of={} name="Other Name">` to distinguish them.';if(worseEntry.type==="story")throw new IndexingError(`Duplicate stories with id: ${firstEntry.id}`,[firstEntry.importPath,secondEntry.importPath]);if(betterEntry.type==="story"){let worseDescriptor=isMdxEntry(worseEntry)?"component docs page":"automatically generated docs page";throw betterEntry.name===this.options.docs.defaultName?new IndexingError(`You have a story for ${betterEntry.title} with the same name as your default docs entry name (${betterEntry.name}), so the docs page is being dropped. Consider changing the story name.`,[firstEntry.importPath,secondEntry.importPath]):new IndexingError(`You have a story for ${betterEntry.title} with the same name as your ${worseDescriptor} (${worseEntry.name}), so the docs page is being dropped. ${changeDocsName}`,[firstEntry.importPath,secondEntry.importPath])}else if(isMdxEntry(betterEntry)){if(isMdxEntry(worseEntry))throw new IndexingError(`You have two component docs pages with the same name ${betterEntry.title}:${betterEntry.name}. ${changeDocsName}`,[firstEntry.importPath,secondEntry.importPath]);if((_a=worseEntry.tags)!=null&&_a.includes(AUTODOCS_TAG)&&this.options.docs.autodocs!==!0)throw new IndexingError(`You created a component docs page for '${worseEntry.title}', but also tagged the CSF file with '${AUTODOCS_TAG}'. This is probably a mistake.`,[betterEntry.importPath,worseEntry.importPath])}else return{...betterEntry,storiesImports:[...betterEntry.storiesImports,worseEntry.importPath,...worseEntry.storiesImports]};return betterEntry}async sortStories(entries){let sortableStories=Object.values(entries);if(this.options.storyStoreV7){let storySortParameter=await this.getStorySortParameter(),fileNameOrder=this.storyFileNames();(0,import_preview_api.sortStoriesV7)(sortableStories,storySortParameter,fileNameOrder)}return sortableStories.reduce((acc,item)=>(acc[item.id]=item,acc),{})}async getIndex(){if(this.lastIndex)return this.lastIndex;if(this.lastError)throw this.lastError;let storiesList=await this.ensureExtracted();try{let errorEntries=storiesList.filter(entry=>entry.type==="error");if(errorEntries.length)throw new MultipleIndexingError(errorEntries.map(entry=>entry.err));let duplicateErrors=[],indexEntries={};if(storiesList.forEach(entry=>{try{let existing=indexEntries[entry.id];existing?indexEntries[entry.id]=this.chooseDuplicate(existing,entry):indexEntries[entry.id]=entry}catch(err){duplicateErrors.push(err)}}),duplicateErrors.length)throw new MultipleIndexingError(duplicateErrors);let sorted=await this.sortStories(indexEntries),compat=sorted;if(this.options.storiesV2Compatibility){let titleToStoryCount=Object.values(sorted).reduce((acc,story)=>(acc[story.title]=(acc[story.title]||0)+1,acc),{});compat=Object.entries(sorted).reduce((acc,entry)=>{let[id,story]=entry;return story.type==="docs"||(acc[id]={...story,kind:story.title,story:story.name,parameters:{__id:story.id,docsOnly:titleToStoryCount[story.title]===1&&story.name==="Page",fileName:story.importPath}}),acc},{})}return this.lastIndex={v:4,entries:compat},this.lastIndex}catch(err){throw this.lastError=err,import_node_logger4.logger.warn(`\u{1F6A8} ${this.lastError.toString()}`),this.lastError}}invalidate(specifier,importPath,removed){let absolutePath=slash(import_path7.default.resolve(this.options.workingDir,importPath)),cache4=this.specifierToCache.get(specifier),cacheEntry=cache4[absolutePath];if(cacheEntry&&cacheEntry.type==="stories"){let{dependents}=cacheEntry,invalidated=new Set;this.specifierToCache.forEach(otherCache=>{dependents.forEach(dep=>{otherCache[dep]&&(invalidated.add(dep),otherCache[dep]=!1)})})}if(removed){if(cacheEntry&&cacheEntry.type==="docs"){let absoluteImports=cacheEntry.storiesImports.map(p=>import_path7.default.resolve(this.options.workingDir,p));this.findDependencies(absoluteImports).forEach(dep=>dep.dependents.splice(dep.dependents.indexOf(absolutePath),1))}delete cache4[absolutePath]}else cache4[absolutePath]=!1;this.lastIndex=null,this.lastError=null}async getStorySortParameter(){let previewFile=["js","jsx","ts","tsx","mjs","cjs"].map(ext=>import_path7.default.join(this.options.configDir,`preview.${ext}`)).find(fname=>import_fs_extra6.default.existsSync(fname)),storySortParameter;if(previewFile){let previewCode=(await import_fs_extra6.default.readFile(previewFile,"utf-8")).toString();storySortParameter=await(0,import_csf_tools.getStorySortParameter)(previewCode)}return storySortParameter}storyFileNames(){return Array.from(this.specifierToCache.values()).flatMap(r=>Object.keys(r))}};var PAGE_REGEX=/(page|screen)/i,isPageStory=storyId=>PAGE_REGEX.test(storyId),isExampleEntry=entry=>["example-introduction--docs","example-button--docs","example-button--primary","example-button--secondary","example-button--large","example-button--small","example-header--docs","example-header--logged-in","example-header--logged-out","example-page--logged-in","example-page--logged-out"].includes(entry.id);function summarizeIndex(storyIndex){let storyCount=0,componentTitles=new Set,exampleStoryCount=0,exampleDocsCount=0,pageStoryCount=0,playStoryCount=0,autodocsCount=0,storiesMdxCount=0,mdxCount=0;Object.values(storyIndex.entries).forEach(entry=>{var _a,_b,_c;isExampleEntry(entry)?(entry.type==="story"&&(exampleStoryCount+=1),entry.type==="docs"&&(exampleDocsCount+=1)):entry.type==="story"?(storyCount+=1,componentTitles.add(entry.title),isPageStory(entry.title)&&(pageStoryCount+=1),(_a=entry.tags)!=null&&_a.includes(PLAY_FN_TAG)&&(playStoryCount+=1)):entry.type==="docs"&&(isMdxEntry(entry)?mdxCount+=1:(_b=entry.tags)!=null&&_b.includes(STORIES_MDX_TAG)?storiesMdxCount+=1:(_c=entry.tags)!=null&&_c.includes(AUTODOCS_TAG)&&(autodocsCount+=1))});let componentCount=componentTitles.size;return{storyCount,componentCount,pageStoryCount,playStoryCount,autodocsCount,storiesMdxCount,mdxCount,exampleStoryCount,exampleDocsCount,version:storyIndex.v}}var import_client_logger=__toESM(require_dist()),import_chalk6=__toESM(require("chalk")),import_ts_dedent4=__toESM(require("ts-dedent"));var import_semver2=__toESM(require("semver"));var fs5=__toESM(require("fs-extra")),import_path8=__toESM(require("path")),getActualPackageVersions=async packages=>Promise.all(packages.map(getActualPackageVersion)),getActualPackageVersion=async packageName=>{try{let packageJson=await getActualPackageJson(packageName);return{name:packageName,version:packageJson.version}}catch{return{name:packageName,version:null}}},getActualPackageJson=async packageName=>{let resolvedPackageJson=require.resolve(import_path8.default.join(packageName,"package.json"),{paths:[process.cwd()]});return await fs5.readJson(resolvedPackageJson)};var import_core_common5=require("@storybook/core-common"),import_csf_tools2=require("@storybook/csf-tools"),import_chalk5=__toESM(require("chalk")),import_semver=__toESM(require("semver")),import_ts_dedent3=__toESM(require("ts-dedent"));var 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(Boolean);var getIncompatibleAddons=async mainConfig=>{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);if(addons.length===0)return[];let addonVersions=await getActualPackageVersions(addons),incompatibleAddons=[];return addonVersions.forEach(({name,version:installedVersion})=>{if(installedVersion===null)return;let addonVersion=incompatibleList[name];try{import_semver2.default.lte(import_semver2.default.coerce(installedVersion),import_semver2.default.coerce(addonVersion))&&incompatibleAddons.push({name,version:installedVersion})}catch{}}),incompatibleAddons};var warnOnIncompatibleAddons=async config=>{let incompatibleAddons=await getIncompatibleAddons(config);incompatibleAddons.length>0&&import_client_logger.logger.warn(import_ts_dedent4.default`
|
|
18
19
|
${import_chalk6.default.bold(import_chalk6.default.red("Attention"))}: We've detected that you're using the following addons in versions which are known to be incompatible with Storybook 7:
|
|
19
20
|
|
|
20
21
|
${incompatibleAddons.map(({name,version})=>`- ${import_chalk6.default.cyan(`${name}@${version}`)}`).join(`
|
|
@@ -22,17 +23,17 @@ ${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
|
22
23
|
|
|
23
24
|
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:
|
|
24
25
|
${import_chalk6.default.yellow("https://github.com/storybookjs/storybook/issues/20529")}
|
|
25
|
-
`)};async function buildStaticStandalone(options){var _a;if(options.configType="PRODUCTION",options.outputDir==="")throw new Error("Won't remove current directory. Check your outputDir!");if((_a=options.staticDir)!=null&&_a.includes("/"))throw new Error("Won't copy root directory. Check your staticDirs!");if(options.outputDir=(0,import_path9.isAbsolute)(options.outputDir)?options.outputDir:(0,import_path9.join)(process.cwd(),options.outputDir),options.configDir=(0,import_path9.resolve)(options.configDir),import_node_logger5.logger.info(import_chalk7.default`=> Cleaning outputDir: {cyan ${options.outputDir.replace(process.cwd(),"")}}`),options.outputDir==="/")throw new Error("Won't remove directory '/'. Check your outputDir!");await(0,import_fs_extra7.emptyDir)(options.outputDir),await(0,import_fs_extra7.ensureDir)(options.outputDir);let config=await(0,
|
|
26
|
+
`)};async function buildStaticStandalone(options){var _a;if(options.configType="PRODUCTION",options.outputDir==="")throw new Error("Won't remove current directory. Check your outputDir!");if((_a=options.staticDir)!=null&&_a.includes("/"))throw new Error("Won't copy root directory. Check your staticDirs!");if(options.outputDir=(0,import_path9.isAbsolute)(options.outputDir)?options.outputDir:(0,import_path9.join)(process.cwd(),options.outputDir),options.configDir=(0,import_path9.resolve)(options.configDir),import_node_logger5.logger.info(import_chalk7.default`=> Cleaning outputDir: {cyan ${options.outputDir.replace(process.cwd(),"")}}`),options.outputDir==="/")throw new Error("Won't remove directory '/'. Check your outputDir!");await(0,import_fs_extra7.emptyDir)(options.outputDir),await(0,import_fs_extra7.ensureDir)(options.outputDir);let config=await(0,import_core_common6.loadMainConfig)(options),{framework}=config,corePresets=[],frameworkName=typeof framework=="string"?framework:framework==null?void 0:framework.name;frameworkName?corePresets.push((0,import_path9.join)(frameworkName,"preset")):import_node_logger5.logger.warn(`you have not specified a framework in your ${options.configDir}/main.js`),await warnOnIncompatibleAddons(config),import_node_logger5.logger.info("=> Loading presets");let presets=await(0,import_core_common6.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...corePresets],overridePresets:[],...options}),[previewBuilder,managerBuilder]=await getBuilders({...options,presets}),{renderer}=await presets.apply("core",{});presets=await(0,import_core_common6.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...managerBuilder.corePresets||[],...previewBuilder.corePresets||[],...renderer?[(0,import_core_common6.resolveAddonName)(options.configDir,renderer,options)]:[],...corePresets,require.resolve("@storybook/core-server/dist/presets/babel-cache-preset")],overridePresets:previewBuilder.overridePresets||[],...options});let[features,core,staticDirs,storyIndexers,stories,docsOptions]=await Promise.all([presets.apply("features"),presets.apply("core"),presets.apply("staticDirs"),presets.apply("storyIndexers",[]),presets.apply("stories"),presets.apply("docs",{})]),fullOptions={...options,presets,features};if(options.staticDir&&!(0,import_isEqual2.default)(staticDirs,defaultStaticDirs))throw new Error(import_ts_dedent5.dedent`
|
|
26
27
|
Conflict when trying to read staticDirs:
|
|
27
28
|
* Storybook's configuration option: 'staticDirs'
|
|
28
29
|
* Storybook's CLI flag: '--staticDir' or '-s'
|
|
29
30
|
|
|
30
31
|
Choose one of them, but not both.
|
|
31
|
-
`);let effects=[];import_global.global.FEATURES=features,await managerBuilder.build({startTime:process.hrtime(),options:fullOptions}),staticDirs&&effects.push(copyAllStaticFilesRelativeToMain(staticDirs,options.outputDir,options.configDir)),options.staticDir&&effects.push(copyAllStaticFiles(options.staticDir,options.outputDir));let coreServerPublicDir=(0,import_path9.join)((0,import_path9.dirname)(require.resolve("@storybook/core-server/package.json")),"public");effects.push((0,import_fs_extra7.copy)(coreServerPublicDir,options.outputDir));let initializedStoryIndexGenerator=Promise.resolve(void 0);if((features!=null&&features.buildStoriesJson||features!=null&&features.storyStoreV7)&&!options.ignorePreview){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},normalizedStories=(0,
|
|
32
|
+
`);let effects=[];import_global.global.FEATURES=features,await managerBuilder.build({startTime:process.hrtime(),options:fullOptions}),staticDirs&&effects.push(copyAllStaticFilesRelativeToMain(staticDirs,options.outputDir,options.configDir)),options.staticDir&&effects.push(copyAllStaticFiles(options.staticDir,options.outputDir));let coreServerPublicDir=(0,import_path9.join)((0,import_path9.dirname)(require.resolve("@storybook/core-server/package.json")),"public");effects.push((0,import_fs_extra7.copy)(coreServerPublicDir,options.outputDir));let initializedStoryIndexGenerator=Promise.resolve(void 0);if((features!=null&&features.buildStoriesJson||features!=null&&features.storyStoreV7)&&!options.ignorePreview){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},normalizedStories=(0,import_core_common6.normalizeStories)(stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,storyIndexers,docs:docsOptions,storiesV2Compatibility:!(features!=null&&features.storyStoreV7),storyStoreV7:!!(features!=null&&features.storyStoreV7)});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),effects.push(extractStoriesJson((0,import_path9.join)(options.outputDir,"stories.json"),initializedStoryIndexGenerator,convertToIndexV3)),effects.push(extractStoriesJson((0,import_path9.join)(options.outputDir,"index.json"),initializedStoryIndexGenerator))}core!=null&&core.disableProjectJson||effects.push(extractStorybookMetadata((0,import_path9.join)(options.outputDir,"project.json"),options.configDir)),options.debugWebpack&&(0,import_core_common6.logConfig)("Preview webpack config",await previewBuilder.getConfig(fullOptions)),options.ignorePreview&&import_node_logger5.logger.info("=> Not building preview"),await Promise.all([...options.ignorePreview?[]:[previewBuilder.build({startTime:process.hrtime(),options:fullOptions}).then(async previewStats=>{if(options.webpackStatsJson){let target=options.webpackStatsJson===!0?options.outputDir:options.webpackStatsJson;await outputStats(target,previewStats)}})],...effects]),core!=null&&core.disableTelemetry||effects.push(initializedStoryIndexGenerator.then(async generator=>{let storyIndex=await(generator==null?void 0:generator.getIndex()),payload={precedingUpgrade:await(0,import_telemetry2.getPrecedingUpgrade)()};storyIndex&&Object.assign(payload,{storyIndex:summarizeIndex(storyIndex)}),await(0,import_telemetry2.telemetry)("build",payload,{configDir:options.configDir})})),import_node_logger5.logger.info(`=> Output directory: ${options.outputDir}`)}var import_core_common11=require("@storybook/core-common"),import_prompts2=__toESM(require("prompts")),import_global2=require("@storybook/global"),import_telemetry5=require("@storybook/telemetry"),import_path11=require("path");var import_express3=__toESM(require("express")),import_compression=__toESM(require("compression")),import_core_common9=require("@storybook/core-common");var import_path10=__toESM(require("path")),import_fs2=__toESM(require("fs")),fileExists=basename2=>[".js",".cjs"].reduce((found,ext)=>{let filename=`${basename2}${ext}`;return!found&&import_fs2.default.existsSync(filename)?filename:found},"");function getMiddleware(configDir){let middlewarePath=fileExists(import_path10.default.resolve(configDir,"middleware"));if(middlewarePath){let middlewareModule=require(middlewarePath);return middlewareModule.__esModule&&(middlewareModule=middlewareModule.default),middlewareModule}return()=>{}}var import_ip=__toESM(require("ip")),import_node_logger6=require("@storybook/node-logger"),import_detect_port=__toESM(require("detect-port"));function getServerAddresses(port,host,proto){return{address:`${proto}://localhost:${port}/`,networkAddress:`${proto}://${host||import_ip.default.address()}:${port}/`}}var getServerPort=port=>(0,import_detect_port.default)(port).catch(error=>{import_node_logger6.logger.error(error),process.exit(-1)}),getServerChannelUrl=(port,{https:https2})=>`${https2?"wss":"ws"}://localhost:${port}/storybook-server-channel`;var import_node_logger7=require("@storybook/node-logger"),import_fs_extra8=require("fs-extra"),import_http=__toESM(require("http")),import_https=__toESM(require("https"));async function getServer(app,options){if(!options.https)return import_http.default.createServer(app);options.sslCert||(import_node_logger7.logger.error("Error: --ssl-cert is required with --https"),process.exit(-1)),options.sslKey||(import_node_logger7.logger.error("Error: --ssl-key is required with --https"),process.exit(-1));let sslOptions={ca:await Promise.all((options.sslCa||[]).map(ca=>(0,import_fs_extra8.readFile)(ca,"utf-8"))),cert:await(0,import_fs_extra8.readFile)(options.sslCert,"utf-8"),key:await(0,import_fs_extra8.readFile)(options.sslKey,"utf-8")};return import_https.default.createServer(sslOptions,app)}var import_ws=__toESM(require("ws")),import_telejson=require("telejson"),ServerChannel=class{constructor(server){this.webSocketServer=new import_ws.WebSocketServer({noServer:!0}),server.on("upgrade",(request,socket,head)=>{request.url==="/storybook-server-channel"&&this.webSocketServer.handleUpgrade(request,socket,head,ws=>{this.webSocketServer.emit("connection",ws,request)})})}emit(type,args=[]){let data=(0,import_telejson.stringify)({type,args},{maxDepth:15,allowFunction:!0});Array.from(this.webSocketServer.clients).filter(c=>c.readyState===import_ws.default.OPEN).forEach(client=>client.send(data))}};function getServerChannel(server){return new ServerChannel(server)}var import_node_logger8=require("@storybook/node-logger"),import_better_opn=__toESM(require("better-opn")),import_open=__toESM(require("open")),import_x_default_browser=__toESM(require("@aw-web-design/x-default-browser")),import_ts_dedent6=require("ts-dedent");function openInBrowser(address){(0,import_x_default_browser.default)(async(err,res)=>{try{res&&(res.isChrome||res.isChromium||res.identity==="com.brave.browser")?(0,import_better_opn.default)(address):await(0,import_open.default)(address)}catch{import_node_logger8.logger.error(import_ts_dedent6.dedent`
|
|
32
33
|
Could not open ${address} inside a browser. If you're running this command inside a
|
|
33
34
|
docker container or on a CI, you need to pass the '--ci' flag to prevent opening a
|
|
34
35
|
browser by default.
|
|
35
|
-
`)}})}var import_core_common6=require("@storybook/core-common");var import_express2=require("express"),router=new import_express2.Router;async function getStoryIndexGenerator(features,options,serverChannel){let initializedStoryIndexGenerator=Promise.resolve(void 0);if(features!=null&&features.buildStoriesJson||features!=null&&features.storyStoreV7){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},stories=options.presets.apply("stories"),storyIndexers=options.presets.apply("storyIndexers",[]),docsOptions=options.presets.apply("docs",{}),normalizedStories=(0,import_core_common6.normalizeStories)(await stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,storyIndexers:await storyIndexers,docs:await docsOptions,workingDir,storiesV2Compatibility:!(features!=null&&features.storyStoreV7),storyStoreV7:features==null?void 0:features.storyStoreV7});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),useStoriesJson({router,initializedStoryIndexGenerator,normalizedStories,serverChannel,workingDir})}return initializedStoryIndexGenerator}var import_telemetry4=require("@storybook/telemetry");var versionStatus=versionCheck=>versionCheck.error?"error":versionCheck.cached?"cached":"success";var import_prompts=__toESM(require("prompts")),import_core_common7=require("@storybook/core-common"),import_telemetry3=require("@storybook/telemetry"),import_node_logger9=require("@storybook/node-logger"),promptCrashReports=async()=>{if(process.env.CI&&process.env.NODE_ENV!=="test")return;let{enableCrashReports}=await(0,import_prompts.default)({type:"confirm",name:"enableCrashReports",message:"Would you like to help improve Storybook by sending anonymous crash reports?",initial:!0});return await import_core_common7.cache.set("enableCrashReports",enableCrashReports),enableCrashReports};async function getErrorLevel({cliOptions,presetOptions}){if(cliOptions.disableTelemetry)return"none";if(!presetOptions)return"full";let core=await(await(0,import_core_common7.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset")],overridePresets:[],...presetOptions})).apply("core");if((core==null?void 0:core.enableCrashReports)!==void 0)return core.enableCrashReports?"full":"error";if(core!=null&&core.disableTelemetry)return"none";let valueFromCache=await import_core_common7.cache.get("enableCrashReports")??await import_core_common7.cache.get("enableCrashreports");if(valueFromCache!==void 0)return valueFromCache?"full":"error";let valueFromPrompt=await promptCrashReports();return valueFromPrompt!==void 0?valueFromPrompt?"full":"error":"full"}async function sendTelemetryError(error,eventType,options){var _a;try{let errorLevel="error";try{errorLevel=await getErrorLevel(options)}catch{}if(errorLevel!=="none"){let precedingUpgrade=await(0,import_telemetry3.getPrecedingUpgrade)();await(0,import_telemetry3.telemetry)("error",{eventType,precedingUpgrade,error:errorLevel==="full"?error:void 0,errorHash:(0,import_telemetry3.oneWayHash)(error.message||"")},{immediate:!0,configDir:options.cliOptions.configDir||((_a=options.presetOptions)==null?void 0:_a.configDir),enableCrashReports:errorLevel==="full"})}}catch{}}async function withTelemetry(eventType,options,run){eventType==="init"&&process.on("SIGINT",async()=>{options.cliOptions.disableTelemetry||await(0,import_telemetry3.telemetry)("canceled",{eventType},{stripMetadata:!0,immediate:!0}),process.exit(0)}),options.cliOptions.disableTelemetry||(0,import_telemetry3.telemetry)("boot",{eventType},{stripMetadata:!0});try{return await run()}catch(error){if((error==null?void 0:error.message)==="Canceled by the user")return;let{printError=import_node_logger9.logger.error}=options;throw printError(error),await sendTelemetryError(error,eventType,options),error}}async function doTelemetry(core,initializedStoryIndexGenerator,options){core!=null&&core.disableTelemetry||initializedStoryIndexGenerator.then(async generator=>{let storyIndex;try{storyIndex=await(generator==null?void 0:generator.getIndex())}catch(err){sendTelemetryError(err,"dev",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]}});return}let{versionCheck,versionUpdates}=options,payload={precedingUpgrade:await(0,import_telemetry4.getPrecedingUpgrade)()};storyIndex&&Object.assign(payload,{versionStatus:versionUpdates?versionStatus(versionCheck):"disabled",storyIndex:summarizeIndex(storyIndex)}),(0,import_telemetry4.telemetry)("dev",payload,{configDir:options.configDir})}),core!=null&&core.disableProjectJson||useStorybookMetadata(router,options.configDir)}function getAccessControlMiddleware(crossOriginIsolated){return(req,res,next)=>{res.header("Access-Control-Allow-Origin","*"),res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"),crossOriginIsolated&&(res.header("Cross-Origin-Opener-Policy","same-origin"),res.header("Cross-Origin-Embedder-Policy","require-corp")),next()}}function getCachingMiddleware(){return(req,res,next)=>{res.header("Cache-Control","no-store"),next()}}async function storybookDevServer(options){var _a;let app=(0,import_express3.default)(),[server,features,core]=await Promise.all([getServer(app,options),options.presets.apply("features"),options.presets.apply("core")]),serverChannel=getServerChannel(server),indexError,initializedStoryIndexGenerator=getStoryIndexGenerator(features,options,serverChannel).catch(err=>{indexError=err});app.use((0,import_compression.default)({level:1})),typeof options.extendServer=="function"&&options.extendServer(server),app.use(getAccessControlMiddleware(core==null?void 0:core.crossOriginIsolated)),app.use(getCachingMiddleware()),getMiddleware(options.configDir)(router),app.use(router);let{port,host}=options,proto=options.https?"https":"http",{address,networkAddress}=getServerAddresses(port,host,proto),listening=new Promise((resolve3,reject)=>{server.listen({port,host},error=>error?reject(error):resolve3())}),builderName=typeof(core==null?void 0:core.builder)=="string"?core.builder:(_a=core==null?void 0:core.builder)==null?void 0:_a.name,[previewBuilder,managerBuilder]=await Promise.all([getPreviewBuilder(builderName,options.configDir),getManagerBuilder(),useStatics(router,options)]);options.debugWebpack&&(0,import_core_common8.logConfig)("Preview webpack config",await previewBuilder.getConfig(options));let managerResult=await managerBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}),previewStarted=Promise.resolve();if(options.ignorePreview||(previewStarted=previewBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}).catch(async e=>{throw await(managerBuilder==null?void 0:managerBuilder.bail().catch()),await(previewBuilder==null?void 0:previewBuilder.bail().catch()),e})),router.get("/iframe.html",(req,res,next)=>{previewStarted.catch(()=>{}).then(()=>next())}),await Promise.all([initializedStoryIndexGenerator,listening]).then(async([indexGenerator])=>{indexGenerator&&!options.ci&&!options.smokeTest&&options.open&&openInBrowser(host?networkAddress:address)}),indexError)throw await(managerBuilder==null?void 0:managerBuilder.bail().catch()),await(previewBuilder==null?void 0:previewBuilder.bail().catch()),indexError;let previewResult=await previewStarted;return doTelemetry(core,initializedStoryIndexGenerator,options),{previewResult,managerResult,address,networkAddress}}var import_semver3=__toESM(require("semver")),getReleaseNotesVersion=version=>{let{major,minor}=import_semver3.default.parse(version),{version:releaseNotesVersion}=import_semver3.default.coerce(`${major}.${minor}`);return releaseNotesVersion},getReleaseNotesFailedState=version=>({success:!1,currentVersion:getReleaseNotesVersion(version),showOnFirstLaunch:!1});var getReleaseNotesData=async(currentVersionToParse,fileSystemCache)=>{let result;try{let fromCache=await fileSystemCache.get("releaseNotesData",[]).catch(()=>{})||[],releaseNotesVersion=getReleaseNotesVersion(currentVersionToParse),versionHasNotBeenSeen=!fromCache.includes(releaseNotesVersion);versionHasNotBeenSeen&&await fileSystemCache.set("releaseNotesData",[...fromCache,releaseNotesVersion]);let highestVersionSeenInThePast=import_semver3.default.sort(fromCache).slice(-1)[0],isUpgrading=!1,isMajorOrMinorDiff=!1;if(highestVersionSeenInThePast){isUpgrading=import_semver3.default.gt(releaseNotesVersion,highestVersionSeenInThePast);let versionDiff=import_semver3.default.diff(releaseNotesVersion,highestVersionSeenInThePast);isMajorOrMinorDiff=versionDiff==="major"||versionDiff==="minor"}result={success:!0,showOnFirstLaunch:versionHasNotBeenSeen&&!!highestVersionSeenInThePast&&isUpgrading&&isMajorOrMinorDiff,currentVersion:releaseNotesVersion}}catch{result=getReleaseNotesFailedState(currentVersionToParse)}return result};var import_chalk9=__toESM(require("chalk")),import_node_logger11=require("@storybook/node-logger"),import_boxen=__toESM(require("boxen")),import_ts_dedent8=require("ts-dedent"),import_cli_table3=__toESM(require("cli-table3")),import_pretty_hrtime=__toESM(require("pretty-hrtime"));var import_node_fetch=__toESM(require("node-fetch")),import_chalk8=__toESM(require("chalk")),import_node_logger10=require("@storybook/node-logger"),import_semver4=__toESM(require("semver")),import_ts_dedent7=require("ts-dedent"),import_core_common9=require("@storybook/core-common"),{STORYBOOK_VERSION_BASE="https://storybook.js.org",CI}=process.env,updateCheck=async version=>{let result,time=Date.now();try{let fromCache=await import_core_common9.cache.get("lastUpdateCheck",{success:!1,time:0});time-864e5>fromCache.time&&!CI?(result={success:!0,cached:!1,data:await(await Promise.race([(0,import_node_fetch.default)(`${STORYBOOK_VERSION_BASE}/versions.json?current=${version}`),new Promise((res,rej)=>global.setTimeout(rej,1500))])).json(),time},await import_core_common9.cache.set("lastUpdateCheck",result)):result={...fromCache,cached:!0}}catch(error){result={success:!1,cached:!1,error,time}}return result};function createUpdateMessage(updateInfo,version){let updateMessage;try{let upgradeCommand=`npx storybook@latest upgrade ${import_semver4.default.prerelease(updateInfo.data.latest.version)?"--prerelease":""}`.trim();updateMessage=updateInfo.success&&import_semver4.default.lt(version,updateInfo.data.latest.version)?import_ts_dedent7.dedent`
|
|
36
|
+
`)}})}var import_core_common7=require("@storybook/core-common");var import_express2=require("express"),router=new import_express2.Router;async function getStoryIndexGenerator(features,options,serverChannel){let initializedStoryIndexGenerator=Promise.resolve(void 0);if(features!=null&&features.buildStoriesJson||features!=null&&features.storyStoreV7){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},stories=options.presets.apply("stories"),storyIndexers=options.presets.apply("storyIndexers",[]),docsOptions=options.presets.apply("docs",{}),normalizedStories=(0,import_core_common7.normalizeStories)(await stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,storyIndexers:await storyIndexers,docs:await docsOptions,workingDir,storiesV2Compatibility:!(features!=null&&features.storyStoreV7),storyStoreV7:features==null?void 0:features.storyStoreV7});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),useStoriesJson({router,initializedStoryIndexGenerator,normalizedStories,serverChannel,workingDir})}return initializedStoryIndexGenerator}var import_telemetry4=require("@storybook/telemetry");var versionStatus=versionCheck=>versionCheck.error?"error":versionCheck.cached?"cached":"success";var import_prompts=__toESM(require("prompts")),import_core_common8=require("@storybook/core-common"),import_telemetry3=require("@storybook/telemetry"),import_node_logger9=require("@storybook/node-logger"),promptCrashReports=async()=>{if(process.env.CI&&process.env.NODE_ENV!=="test")return;let{enableCrashReports}=await(0,import_prompts.default)({type:"confirm",name:"enableCrashReports",message:"Would you like to help improve Storybook by sending anonymous crash reports?",initial:!0});return await import_core_common8.cache.set("enableCrashReports",enableCrashReports),enableCrashReports};async function getErrorLevel({cliOptions,presetOptions}){if(cliOptions.disableTelemetry)return"none";if(!presetOptions)return"full";let core=await(await(0,import_core_common8.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset")],overridePresets:[],...presetOptions})).apply("core");if((core==null?void 0:core.enableCrashReports)!==void 0)return core.enableCrashReports?"full":"error";if(core!=null&&core.disableTelemetry)return"none";let valueFromCache=await import_core_common8.cache.get("enableCrashReports")??await import_core_common8.cache.get("enableCrashreports");if(valueFromCache!==void 0)return valueFromCache?"full":"error";let valueFromPrompt=await promptCrashReports();return valueFromPrompt!==void 0?valueFromPrompt?"full":"error":"full"}async function sendTelemetryError(error,eventType,options){var _a;try{let errorLevel="error";try{errorLevel=await getErrorLevel(options)}catch{}if(errorLevel!=="none"){let precedingUpgrade=await(0,import_telemetry3.getPrecedingUpgrade)();await(0,import_telemetry3.telemetry)("error",{eventType,precedingUpgrade,error:errorLevel==="full"?error:void 0,errorHash:(0,import_telemetry3.oneWayHash)(error.message||"")},{immediate:!0,configDir:options.cliOptions.configDir||((_a=options.presetOptions)==null?void 0:_a.configDir),enableCrashReports:errorLevel==="full"})}}catch{}}async function withTelemetry(eventType,options,run){eventType==="init"&&process.on("SIGINT",async()=>{options.cliOptions.disableTelemetry||await(0,import_telemetry3.telemetry)("canceled",{eventType},{stripMetadata:!0,immediate:!0}),process.exit(0)}),options.cliOptions.disableTelemetry||(0,import_telemetry3.telemetry)("boot",{eventType},{stripMetadata:!0});try{return await run()}catch(error){if((error==null?void 0:error.message)==="Canceled by the user")return;let{printError=import_node_logger9.logger.error}=options;throw printError(error),await sendTelemetryError(error,eventType,options),error}}async function doTelemetry(core,initializedStoryIndexGenerator,options){core!=null&&core.disableTelemetry||initializedStoryIndexGenerator.then(async generator=>{let storyIndex;try{storyIndex=await(generator==null?void 0:generator.getIndex())}catch(err){sendTelemetryError(err,"dev",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]}});return}let{versionCheck,versionUpdates}=options,payload={precedingUpgrade:await(0,import_telemetry4.getPrecedingUpgrade)()};storyIndex&&Object.assign(payload,{versionStatus:versionUpdates?versionStatus(versionCheck):"disabled",storyIndex:summarizeIndex(storyIndex)}),(0,import_telemetry4.telemetry)("dev",payload,{configDir:options.configDir})}),core!=null&&core.disableProjectJson||useStorybookMetadata(router,options.configDir)}function getAccessControlMiddleware(crossOriginIsolated){return(req,res,next)=>{res.header("Access-Control-Allow-Origin","*"),res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"),crossOriginIsolated&&(res.header("Cross-Origin-Opener-Policy","same-origin"),res.header("Cross-Origin-Embedder-Policy","require-corp")),next()}}function getCachingMiddleware(){return(req,res,next)=>{res.header("Cache-Control","no-store"),next()}}async function storybookDevServer(options){var _a;let app=(0,import_express3.default)(),[server,features,core]=await Promise.all([getServer(app,options),options.presets.apply("features"),options.presets.apply("core")]),serverChannel=getServerChannel(server),indexError,initializedStoryIndexGenerator=getStoryIndexGenerator(features,options,serverChannel).catch(err=>{indexError=err});app.use((0,import_compression.default)({level:1})),typeof options.extendServer=="function"&&options.extendServer(server),app.use(getAccessControlMiddleware(core==null?void 0:core.crossOriginIsolated)),app.use(getCachingMiddleware()),getMiddleware(options.configDir)(router),app.use(router);let{port,host}=options,proto=options.https?"https":"http",{address,networkAddress}=getServerAddresses(port,host,proto),listening=new Promise((resolve3,reject)=>{server.listen({port,host},error=>error?reject(error):resolve3())}),builderName=typeof(core==null?void 0:core.builder)=="string"?core.builder:(_a=core==null?void 0:core.builder)==null?void 0:_a.name,[previewBuilder,managerBuilder]=await Promise.all([getPreviewBuilder(builderName,options.configDir),getManagerBuilder(),useStatics(router,options)]);options.debugWebpack&&(0,import_core_common9.logConfig)("Preview webpack config",await previewBuilder.getConfig(options));let managerResult=await managerBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}),previewStarted=Promise.resolve();if(options.ignorePreview||(previewStarted=previewBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}).catch(async e=>{throw await(managerBuilder==null?void 0:managerBuilder.bail().catch()),await(previewBuilder==null?void 0:previewBuilder.bail().catch()),e})),router.get("/iframe.html",(req,res,next)=>{previewStarted.catch(()=>{}).then(()=>next())}),await Promise.all([initializedStoryIndexGenerator,listening]).then(async([indexGenerator])=>{indexGenerator&&!options.ci&&!options.smokeTest&&options.open&&openInBrowser(host?networkAddress:address)}),indexError)throw await(managerBuilder==null?void 0:managerBuilder.bail().catch()),await(previewBuilder==null?void 0:previewBuilder.bail().catch()),indexError;let previewResult=await previewStarted;return doTelemetry(core,initializedStoryIndexGenerator,options),{previewResult,managerResult,address,networkAddress}}var import_semver3=__toESM(require("semver")),getReleaseNotesVersion=version=>{let{major,minor}=import_semver3.default.parse(version),{version:releaseNotesVersion}=import_semver3.default.coerce(`${major}.${minor}`);return releaseNotesVersion},getReleaseNotesFailedState=version=>({success:!1,currentVersion:getReleaseNotesVersion(version),showOnFirstLaunch:!1});var getReleaseNotesData=async(currentVersionToParse,fileSystemCache)=>{let result;try{let fromCache=await fileSystemCache.get("releaseNotesData",[]).catch(()=>{})||[],releaseNotesVersion=getReleaseNotesVersion(currentVersionToParse),versionHasNotBeenSeen=!fromCache.includes(releaseNotesVersion);versionHasNotBeenSeen&&await fileSystemCache.set("releaseNotesData",[...fromCache,releaseNotesVersion]);let highestVersionSeenInThePast=import_semver3.default.sort(fromCache).slice(-1)[0],isUpgrading=!1,isMajorOrMinorDiff=!1;if(highestVersionSeenInThePast){isUpgrading=import_semver3.default.gt(releaseNotesVersion,highestVersionSeenInThePast);let versionDiff=import_semver3.default.diff(releaseNotesVersion,highestVersionSeenInThePast);isMajorOrMinorDiff=versionDiff==="major"||versionDiff==="minor"}result={success:!0,showOnFirstLaunch:versionHasNotBeenSeen&&!!highestVersionSeenInThePast&&isUpgrading&&isMajorOrMinorDiff,currentVersion:releaseNotesVersion}}catch{result=getReleaseNotesFailedState(currentVersionToParse)}return result};var import_chalk9=__toESM(require("chalk")),import_node_logger11=require("@storybook/node-logger"),import_boxen=__toESM(require("boxen")),import_ts_dedent8=require("ts-dedent"),import_cli_table3=__toESM(require("cli-table3")),import_pretty_hrtime=__toESM(require("pretty-hrtime"));var import_node_fetch=__toESM(require("node-fetch")),import_chalk8=__toESM(require("chalk")),import_node_logger10=require("@storybook/node-logger"),import_semver4=__toESM(require("semver")),import_ts_dedent7=require("ts-dedent"),import_core_common10=require("@storybook/core-common"),{STORYBOOK_VERSION_BASE="https://storybook.js.org",CI}=process.env,updateCheck=async version=>{let result,time=Date.now();try{let fromCache=await import_core_common10.cache.get("lastUpdateCheck",{success:!1,time:0});time-864e5>fromCache.time&&!CI?(result={success:!0,cached:!1,data:await(await Promise.race([(0,import_node_fetch.default)(`${STORYBOOK_VERSION_BASE}/versions.json?current=${version}`),new Promise((res,rej)=>global.setTimeout(rej,1500))])).json(),time},await import_core_common10.cache.set("lastUpdateCheck",result)):result={...fromCache,cached:!0}}catch(error){result={success:!1,cached:!1,error,time}}return result};function createUpdateMessage(updateInfo,version){let updateMessage;try{let upgradeCommand=`npx storybook${import_semver4.default.prerelease(updateInfo.data.latest.version)?"@next upgrade --prerelease":"@latest upgrade"}`;updateMessage=updateInfo.success&&import_semver4.default.lt(version,updateInfo.data.latest.version)?import_ts_dedent7.dedent`
|
|
36
37
|
${import_node_logger10.colors.orange(`A new version (${import_chalk8.default.bold(updateInfo.data.latest.version)}) is available!`)}
|
|
37
38
|
|
|
38
39
|
${import_chalk8.default.gray("Upgrade now:")} ${import_node_logger10.colors.green(upgradeCommand)}
|
|
@@ -45,4 +46,4 @@ ${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
|
45
46
|
${serveMessage.toString()}${updateMessage?`
|
|
46
47
|
|
|
47
48
|
${updateMessage}`:""}
|
|
48
|
-
`,{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}async function buildDevStandalone(options){var _a,_b;let{packageJson,versionUpdates,releaseNotes}=options,{version}=packageJson,[port,versionCheck,releaseNotesData]=await Promise.all([getServerPort(options.port),versionUpdates?updateCheck(version):Promise.resolve({success:!1,cached:!1,data:{},time:Date.now()}),releaseNotes?getReleaseNotesData(version,
|
|
49
|
+
`,{borderStyle:"round",padding:1,borderColor:"#F1618C"}))}async function buildDevStandalone(options){var _a,_b;let{packageJson,versionUpdates,releaseNotes}=options,{version}=packageJson,[port,versionCheck,releaseNotesData]=await Promise.all([getServerPort(options.port),versionUpdates?updateCheck(version):Promise.resolve({success:!1,cached:!1,data:{},time:Date.now()}),releaseNotes?getReleaseNotesData(version,import_core_common11.cache):Promise.resolve(getReleaseNotesFailedState(version))]);if(!options.ci&&!options.smokeTest&&options.port!=null&&port!==options.port){let{shouldChangePort}=await(0,import_prompts2.default)({type:"confirm",initial:!0,name:"shouldChangePort",message:`Port ${options.port} is not available. Would you like to run Storybook on port ${port} instead?`});shouldChangePort||process.exit(1)}options.port=port,options.versionCheck=versionCheck,options.releaseNotesData=releaseNotesData,options.configType="DEVELOPMENT",options.configDir=(0,import_path11.resolve)(options.configDir),options.outputDir=options.smokeTest?(0,import_core_common11.resolvePathInStorybookCache)("public"):(0,import_path11.resolve)(options.outputDir||(0,import_core_common11.resolvePathInStorybookCache)("public")),options.serverChannelUrl=getServerChannelUrl(port,options);let config=await(0,import_core_common11.loadMainConfig)(options),{framework}=config,corePresets=[],frameworkName=typeof framework=="string"?framework:framework==null?void 0:framework.name;(0,import_core_common11.validateFrameworkName)(frameworkName),corePresets.push((0,import_path11.join)(frameworkName,"preset")),await warnOnIncompatibleAddons(config);let presets=await(0,import_core_common11.loadAllPresets)({corePresets,overridePresets:[],...options}),{renderer,builder,disableTelemetry}=await presets.apply("core",{});!options.disableTelemetry&&!disableTelemetry&&versionCheck.success&&!versionCheck.cached&&(0,import_telemetry5.telemetry)("version-update");let builderName=typeof builder=="string"?builder:builder==null?void 0:builder.name,[previewBuilder,managerBuilder]=await Promise.all([getPreviewBuilder(builderName,options.configDir),getManagerBuilder()]);presets=await(0,import_core_common11.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...managerBuilder.corePresets||[],...previewBuilder.corePresets||[],...renderer?[(0,import_core_common11.resolveAddonName)(options.configDir,renderer,options)]:[],...corePresets,require.resolve("@storybook/core-server/dist/presets/babel-cache-preset")],overridePresets:previewBuilder.overridePresets,...options});let features=await presets.apply("features");import_global2.global.FEATURES=features;let fullOptions={...options,presets,features},{address,networkAddress,managerResult,previewResult}=await storybookDevServer(fullOptions),previewTotalTime=previewResult&&previewResult.totalTime,managerTotalTime=managerResult&&managerResult.totalTime,previewStats=previewResult&&previewResult.stats,managerStats=managerResult&&managerResult.stats;if(options.webpackStatsJson){let target=options.webpackStatsJson===!0?options.outputDir:options.webpackStatsJson;await outputStats(target,previewStats)}if(options.smokeTest){let warnings=[];warnings.push(...((_a=managerStats==null?void 0:managerStats.toJson())==null?void 0:_a.warnings)||[]),warnings.push(...((_b=previewStats==null?void 0:previewStats.toJson())==null?void 0:_b.warnings)||[]);let problems=warnings.filter(warning=>!warning.message.includes("export 'useInsertionEffect'")).filter(warning=>!warning.message.includes("compilation but it's unused")).filter(warning=>!warning.message.includes("Conflicting values for 'process.env.NODE_ENV'"));console.log(problems.map(p=>p.stack)),process.exit(problems.length>0?1:0)}else{let name=frameworkName.split("@storybook/").length>1?frameworkName.split("@storybook/")[1]:frameworkName;outputStartupInformation({updateInfo:versionCheck,version,name,address,networkAddress,managerTotalTime,previewTotalTime})}return{port,address,networkAddress}}var import_read_pkg_up=require("read-pkg-up");async function build(options={},frameworkOptions={}){let{mode="dev"}=options,{packageJson}=(0,import_read_pkg_up.sync)({cwd:__dirname}),commonOptions={...options,...frameworkOptions,frameworkPresets:[...options.frameworkPresets||[],...frameworkOptions.frameworkPresets||[]],packageJson};if(mode==="dev")return buildDevStandalone(commonOptions);if(mode==="static")return buildStaticStandalone(commonOptions);throw new Error("'mode' parameter should be either 'dev' or 'static'")}var standalone_default=build;0&&(module.exports={build,buildDevStandalone,buildStaticStandalone,getPreviewBodyTemplate,getPreviewHeadTemplate,sendTelemetryError,withTelemetry});
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { loadMainConfig, loadAllPresets, resolveAddonName, normalizeStories, logConfig, resolvePathInStorybookCache, validateFrameworkName, getDirectoryFromWorkingDir, normalizeStoryPath, cache } from '@storybook/core-common';
|
|
1
|
+
import { loadMainConfig, loadAllPresets, resolveAddonName, normalizeStories, logConfig, resolvePathInStorybookCache, validateFrameworkName, getDirectoryFromWorkingDir, commonGlobOptions, normalizeStoryPath, cache } from '@storybook/core-common';
|
|
2
2
|
export { getPreviewBodyTemplate, getPreviewHeadTemplate } from '@storybook/core-common';
|
|
3
3
|
import chalk9 from 'chalk';
|
|
4
4
|
import * as fs4 from 'fs-extra';
|
|
@@ -50,14 +50,15 @@ var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropD
|
|
|
50
50
|
`);let statics=[...staticDirs.map(dir=>typeof dir=="string"?dir:`${dir.from}:${dir.to}`),...options.staticDir||[]];statics&&statics.length>0&&await Promise.all(statics.map(async dir=>{try{let relativeDir=staticDirs?getDirectoryFromWorkingDir({configDir:options.configDir,workingDir:process.cwd(),directory:dir}):dir,{staticDir,staticPath,targetEndpoint}=await parseStaticDir(relativeDir);targetEndpoint.startsWith("/sb-")||logger.info(chalk9`=> Serving static files from {cyan ${staticDir}} at {cyan ${targetEndpoint}}`),router2.use(targetEndpoint,express.static(staticPath,{index:!1}));}catch(e){logger.warn(e.message);}})),router2.use(favicon(faviconPath));}var parseStaticDir=async arg=>{let lastColonIndex=arg.lastIndexOf(":"),isWindowsRawDirOnly=path5.win32.isAbsolute(arg)&&lastColonIndex===1,splitIndex=lastColonIndex!==-1&&!isWindowsRawDirOnly?lastColonIndex:arg.length,target=(arg.substring(splitIndex+1)||"/").split(path5.sep).join(path5.posix.sep),rawDir=arg.substring(0,splitIndex),staticDir=path5.isAbsolute(rawDir)?rawDir:`./${rawDir}`,staticPath=path5.resolve(staticDir),targetDir=target.replace(/^\/?/,"./"),targetEndpoint=targetDir.substring(1);if(!await pathExists(staticPath))throw new Error(dedent(chalk9`
|
|
51
51
|
Failed to load static files, no such directory: {cyan ${staticPath}}
|
|
52
52
|
Make sure this directory exists, or omit the {bold -s (--static-dir)} option.
|
|
53
|
-
`));return {staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=path5.join(outputDir,targetDir);logger.info(chalk9`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));await fs4__default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});}catch(e){logger.error(e.message),process.exit(-1);}}));}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir(getDirectoryFromWorkingDir({configDir,workingDir,directory:staticDirAndTarget})),targetPath=path5.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));logger.info(chalk9`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await fs4__default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});},Promise.resolve())}async function getManagerBuilder(){return import('@storybook/builder-manager')}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=__require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import(pathToFileURL(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder?.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}function slash(path8){return /^\\\\\?\\/.test(path8)?path8:path8.replace(/\\/g,"/")}var isDirectory=directory=>{try{return fs3.lstatSync(directory).isDirectory()}catch{return !1}};function toImportPath(relativePath){return relativePath.startsWith(".")?relativePath:`./${relativePath}`}function watchStorySpecifiers(specifiers,options,onInvalidate){let wp=new Watchpack({followSymlinks:!1,ignored:["**/.git","node_modules"]});wp.watch({directories:uniq(specifiers.map(ns=>ns.directory))});async function onChangeOrRemove(watchpackPath,removed){let importPath=slash(watchpackPath.startsWith(".")?watchpackPath:`./${watchpackPath}`),matchingSpecifier=specifiers.find(ns=>ns.importPathMatcher.exec(importPath));if(matchingSpecifier){onInvalidate(matchingSpecifier,importPath,removed);return}let absolutePath=path5.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=path5.join(options.workingDir,importPath,"**",path5.basename(specifier.files));(await glob(slash(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(path5.relative(options.workingDir,filePath).replace(/\\/g,"/"));specifier.importPathMatcher.exec(fileImportPath)&&onInvalidate(specifier,fileImportPath,removed);});}));}return wp.on("change",async(filePath,mtime,explanation)=>{await onChangeOrRemove(filePath,!mtime);}),wp.on("remove",async(filePath,explanation)=>{await onChangeOrRemove(filePath,!0);}),()=>wp.close()}var DEBOUNCE=100;async function extractStoriesJson(outputFile,initializedStoryIndexGenerator,transform){let storyIndex=await(await initializedStoryIndexGenerator).getIndex();await writeJSON(outputFile,transform?transform(storyIndex):storyIndex);}function useStoriesJson({router:router2,initializedStoryIndexGenerator,workingDir=process.cwd(),serverChannel,normalizedStories}){let maybeInvalidate=debounce(()=>serverChannel.emit(STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path8,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path8,removed),maybeInvalidate();}),router2.use("/index.json",async(req,res)=>{try{let index=await(await initializedStoryIndexGenerator).getIndex();res.header("Content-Type","application/json"),res.send(JSON.stringify(index));}catch(err){res.status(500),res.send(err.toString());}}),router2.use("/stories.json",async(req,res)=>{try{let generator=await initializedStoryIndexGenerator,index=convertToIndexV3(await generator.getIndex());res.header("Content-Type","application/json"),res.send(JSON.stringify(index));}catch(err){res.status(500),res.send(err.toString());}});}var convertToIndexV3=index=>{let{entries}=index;return {v:3,stories:Object.entries(entries).reduce((acc,[id,entry])=>{let{type,...rest}=entry;return acc[id]={...rest,kind:rest.title,story:rest.name,parameters:{__id:rest.id,docsOnly:type==="docs",fileName:rest.importPath}},acc},{})}};async function extractStorybookMetadata(outputFile,configDir){let storybookMetadata=await getStorybookMetadata(configDir);await writeJSON(outputFile,storybookMetadata);}function useStorybookMetadata(router2,configDir){router2.use("/project.json",async(req,res)=>{let storybookMetadata=await getStorybookMetadata(configDir);res.header("Content-Type","application/json"),res.send(JSON.stringify(storybookMetadata));});}function autoName(mdxImportPath,csfImportPath,defaultName){let mdxBasename=basename(mdxImportPath),csfBasename=basename(csfImportPath),[mdxFilename]=mdxBasename.split("."),[csfFilename]=csfBasename.split(".");return mdxFilename===csfFilename?defaultName:mdxFilename}var IndexingError=class extends Error{constructor(message,importPaths,stack){super();this.message=message,this.importPaths=importPaths,stack&&(this.stack=stack);}pathsString(){return this.importPaths.length===1?`${slash(this.importPaths[0])}`:`${this.importPaths.map(slash).join(",")}`}toString(){return `${this.pathsString()}: ${this.message}`}},MultipleIndexingError=class extends Error{constructor(indexingErrors){super();this.indexingErrors=indexingErrors;if(this.indexingErrors.length===0)throw new Error("Unexpected empty error list");if(this.indexingErrors.length===1){let[err]=this.indexingErrors;this.message=`Unable to index ${err.pathsString()}`;}else this.message=`Unable to index files:
|
|
53
|
+
`));return {staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=path5.join(outputDir,targetDir);logger.info(chalk9`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));await fs4__default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});}catch(e){logger.error(e.message),process.exit(-1);}}));}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir(getDirectoryFromWorkingDir({configDir,workingDir,directory:staticDirAndTarget})),targetPath=path5.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));logger.info(chalk9`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await fs4__default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});},Promise.resolve())}async function getManagerBuilder(){return import('@storybook/builder-manager')}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=__require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import(pathToFileURL(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder?.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}function slash(path8){return /^\\\\\?\\/.test(path8)?path8:path8.replace(/\\/g,"/")}var isDirectory=directory=>{try{return fs3.lstatSync(directory).isDirectory()}catch{return !1}};function toImportPath(relativePath){return relativePath.startsWith(".")?relativePath:`./${relativePath}`}function watchStorySpecifiers(specifiers,options,onInvalidate){let wp=new Watchpack({followSymlinks:!1,ignored:["**/.git","node_modules"]});wp.watch({directories:uniq(specifiers.map(ns=>ns.directory))});async function onChangeOrRemove(watchpackPath,removed){let importPath=slash(watchpackPath.startsWith(".")?watchpackPath:`./${watchpackPath}`),matchingSpecifier=specifiers.find(ns=>ns.importPathMatcher.exec(importPath));if(matchingSpecifier){onInvalidate(matchingSpecifier,importPath,removed);return}let absolutePath=path5.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=path5.join(options.workingDir,importPath,"**",path5.basename(specifier.files));(await glob(slash(dirGlob),commonGlobOptions(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(path5.relative(options.workingDir,filePath).replace(/\\/g,"/"));specifier.importPathMatcher.exec(fileImportPath)&&onInvalidate(specifier,fileImportPath,removed);});}));}return wp.on("change",async(filePath,mtime,explanation)=>{await onChangeOrRemove(filePath,!mtime);}),wp.on("remove",async(filePath,explanation)=>{await onChangeOrRemove(filePath,!0);}),()=>wp.close()}var DEBOUNCE=100;async function extractStoriesJson(outputFile,initializedStoryIndexGenerator,transform){let storyIndex=await(await initializedStoryIndexGenerator).getIndex();await writeJSON(outputFile,transform?transform(storyIndex):storyIndex);}function useStoriesJson({router:router2,initializedStoryIndexGenerator,workingDir=process.cwd(),serverChannel,normalizedStories}){let maybeInvalidate=debounce(()=>serverChannel.emit(STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path8,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path8,removed),maybeInvalidate();}),router2.use("/index.json",async(req,res)=>{try{let index=await(await initializedStoryIndexGenerator).getIndex();res.header("Content-Type","application/json"),res.send(JSON.stringify(index));}catch(err){res.status(500),res.send(err.toString());}}),router2.use("/stories.json",async(req,res)=>{try{let generator=await initializedStoryIndexGenerator,index=convertToIndexV3(await generator.getIndex());res.header("Content-Type","application/json"),res.send(JSON.stringify(index));}catch(err){res.status(500),res.send(err.toString());}});}var convertToIndexV3=index=>{let{entries}=index;return {v:3,stories:Object.entries(entries).reduce((acc,[id,entry])=>{let{type,...rest}=entry;return acc[id]={...rest,kind:rest.title,story:rest.name,parameters:{__id:rest.id,docsOnly:type==="docs",fileName:rest.importPath}},acc},{})}};async function extractStorybookMetadata(outputFile,configDir){let storybookMetadata=await getStorybookMetadata(configDir);await writeJSON(outputFile,storybookMetadata);}function useStorybookMetadata(router2,configDir){router2.use("/project.json",async(req,res)=>{let storybookMetadata=await getStorybookMetadata(configDir);res.header("Content-Type","application/json"),res.send(JSON.stringify(storybookMetadata));});}function autoName(mdxImportPath,csfImportPath,defaultName){let mdxBasename=basename(mdxImportPath),csfBasename=basename(csfImportPath),[mdxFilename]=mdxBasename.split("."),[csfFilename]=csfBasename.split(".");return mdxFilename===csfFilename?defaultName:mdxFilename}var IndexingError=class extends Error{constructor(message,importPaths,stack){super();this.message=message,this.importPaths=importPaths,stack&&(this.stack=stack);}pathsString(){return this.importPaths.length===1?`${slash(this.importPaths[0])}`:`${this.importPaths.map(slash).join(",")}`}toString(){return `${this.pathsString()}: ${this.message}`}},MultipleIndexingError=class extends Error{constructor(indexingErrors){super();this.indexingErrors=indexingErrors;if(this.indexingErrors.length===0)throw new Error("Unexpected empty error list");if(this.indexingErrors.length===1){let[err]=this.indexingErrors;this.message=`Unable to index ${err.pathsString()}`;}else this.message=`Unable to index files:
|
|
54
54
|
${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
55
55
|
`)}`;}toString(){return this.indexingErrors.length===1?`${this.message}:
|
|
56
|
-
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return !tags?.includes(AUTODOCS_TAG)&&!tags?.includes(STORIES_MDX_TAG)}var makeAbsolute=(otherImport,normalizedPath,workingDir)=>otherImport.startsWith(".")?slash(path5.resolve(workingDir,normalizeStoryPath(path5.join(path5.dirname(normalizedPath),otherImport)))):otherImport,StoryIndexGenerator=class{constructor(specifiers,options){this.specifiers=specifiers;this.options=options;this.specifierToCache=new Map;}async initialize(){(await Promise.all(this.specifiers.map(async specifier=>{let pathToSubIndex={},fullGlob=slash(path5.join(this.options.workingDir,specifier.directory,specifier.files)),files=await glob(fullGlob);return files.length===0&&once.warn(`No story files found for the specified pattern: ${chalk9.blue(path5.join(specifier.directory,specifier.files))}`),files.sort().forEach(absolutePath=>{let ext=path5.extname(absolutePath);if(ext===".storyshot"){let relativePath=path5.relative(this.options.workingDir,absolutePath);logger.info(`Skipping ${ext} file ${relativePath}`);return}pathToSubIndex[absolutePath]=!1;}),[specifier,pathToSubIndex]}))).forEach(([specifier,cache4])=>this.specifierToCache.set(specifier,cache4)),await this.ensureExtracted();}async updateExtracted(updater,overwrite=!1){await Promise.all(this.specifiers.map(async specifier=>{let entry=this.specifierToCache.get(specifier);return Promise.all(Object.keys(entry).map(async absolutePath=>{if(!(entry[absolutePath]&&!overwrite))try{entry[absolutePath]=await updater(specifier,absolutePath,entry[absolutePath]);}catch(err){let relativePath=`.${path5.sep}${path5.relative(this.options.workingDir,absolutePath)}`;entry[absolutePath]={type:"error",err:new IndexingError(err.message,[relativePath],err.stack)};}}))}));}isDocsMdx(absolutePath){return /(?<!\.stories)\.mdx$/i.test(absolutePath)}async ensureExtracted(){return await this.updateExtracted(async(specifier,absolutePath)=>this.isDocsMdx(absolutePath)?!1:this.extractStories(specifier,absolutePath)),await this.updateExtracted(async(specifier,absolutePath)=>this.extractDocs(specifier,absolutePath)),this.specifiers.flatMap(specifier=>{let cache4=this.specifierToCache.get(specifier);return Object.values(cache4).flatMap(entry=>entry?entry.type==="docs"?[entry]:entry.type==="error"?[entry]:entry.entries:[])})}findDependencies(absoluteImports){return [...this.specifierToCache.values()].flatMap(cache4=>Object.entries(cache4).filter(([fileName,cacheEntry])=>!cacheEntry||cacheEntry.type!=="stories"?!1:!!absoluteImports.find(storyImport=>fileName.match(new RegExp(`^${storyImport}(\\.[^.]+)?$`)))).map(([_,cacheEntry])=>cacheEntry))}async extractStories(specifier,absolutePath){let relativePath=path5.relative(this.options.workingDir,absolutePath),entries=[],importPath=slash(normalizeStoryPath(relativePath)),makeTitle=userTitle=>userOrAutoTitleFromSpecifier(importPath,specifier,userTitle),storyIndexer=this.options.storyIndexers.find(indexer=>indexer.test.exec(absolutePath));if(!storyIndexer)throw new Error(`No matching story indexer found for ${absolutePath}`);let csf=await storyIndexer.indexer(absolutePath,{makeTitle}),componentTags=csf.meta.tags||[];if(csf.stories.forEach(({id,name,tags:storyTags,parameters})=>{if(!parameters?.docsOnly){let tags=[...storyTags||componentTags,"story"];entries.push({id,title:csf.meta.title,name,importPath,tags,type:"story"});}}),csf.stories.length){let{autodocs}=this.options.docs,componentAutodocs=componentTags.includes(AUTODOCS_TAG),autodocsOptedIn=autodocs===!0||autodocs==="tag"&&componentAutodocs;if(componentTags.includes(STORIES_MDX_TAG)||autodocsOptedIn){let name=this.options.docs.defaultName,id=toId(csf.meta.title,name);entries.unshift({id,title:csf.meta.title,name,importPath,type:"docs",tags:[...componentTags,"docs",...autodocsOptedIn&&!componentAutodocs?[AUTODOCS_TAG]:[]],storiesImports:[]});}}return {entries,type:"stories",dependents:[]}}async extractDocs(specifier,absolutePath){let relativePath=path5.relative(this.options.workingDir,absolutePath);try{if(!this.options.storyStoreV7)throw new Error("You cannot use `.mdx` files without using `storyStoreV7`.");let normalizedPath=normalizeStoryPath(relativePath),importPath=slash(normalizedPath),content=await fs4__default.readFile(absolutePath,"utf8"),result=analyze(content);if(result.isTemplate)return !1;let absoluteImports=result.imports.map(p=>makeAbsolute(p,normalizedPath,this.options.workingDir)),dependencies=this.findDependencies(absoluteImports),sortedDependencies=dependencies,csfEntry;if(result.of){let absoluteOf=makeAbsolute(result.of,normalizedPath,this.options.workingDir);if(dependencies.forEach(dep=>{if(dep.entries.length>0){let first=dep.entries.find(e=>e.type!=="docs");path5.normalize(path5.resolve(this.options.workingDir,first.importPath)).startsWith(path5.normalize(absoluteOf))&&(csfEntry=first);}sortedDependencies=[dep,...dependencies.filter(d=>d!==dep)];}),!csfEntry)throw new Error(dedent2`Could not find CSF file at path "${result.of}" referenced by \`of={}\` in docs file "${relativePath}".
|
|
56
|
+
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return !tags?.includes(AUTODOCS_TAG)&&!tags?.includes(STORIES_MDX_TAG)}var makeAbsolute=(otherImport,normalizedPath,workingDir)=>otherImport.startsWith(".")?slash(path5.resolve(workingDir,normalizeStoryPath(path5.join(path5.dirname(normalizedPath),otherImport)))):otherImport,StoryIndexGenerator=class{constructor(specifiers,options){this.specifiers=specifiers;this.options=options;this.specifierToCache=new Map;}async initialize(){(await Promise.all(this.specifiers.map(async specifier=>{let pathToSubIndex={},fullGlob=slash(path5.join(this.options.workingDir,specifier.directory,specifier.files)),files=await glob(fullGlob,commonGlobOptions(fullGlob));return files.length===0&&once.warn(`No story files found for the specified pattern: ${chalk9.blue(path5.join(specifier.directory,specifier.files))}`),files.sort().forEach(absolutePath=>{let ext=path5.extname(absolutePath);if(ext===".storyshot"){let relativePath=path5.relative(this.options.workingDir,absolutePath);logger.info(`Skipping ${ext} file ${relativePath}`);return}pathToSubIndex[absolutePath]=!1;}),[specifier,pathToSubIndex]}))).forEach(([specifier,cache4])=>this.specifierToCache.set(specifier,cache4)),await this.ensureExtracted();}async updateExtracted(updater,overwrite=!1){await Promise.all(this.specifiers.map(async specifier=>{let entry=this.specifierToCache.get(specifier);return Promise.all(Object.keys(entry).map(async absolutePath=>{if(!(entry[absolutePath]&&!overwrite))try{entry[absolutePath]=await updater(specifier,absolutePath,entry[absolutePath]);}catch(err){let relativePath=`.${path5.sep}${path5.relative(this.options.workingDir,absolutePath)}`;entry[absolutePath]={type:"error",err:new IndexingError(err.message,[relativePath],err.stack)};}}))}));}isDocsMdx(absolutePath){return /(?<!\.stories)\.mdx$/i.test(absolutePath)}async ensureExtracted(){return await this.updateExtracted(async(specifier,absolutePath)=>this.isDocsMdx(absolutePath)?!1:this.extractStories(specifier,absolutePath)),await this.updateExtracted(async(specifier,absolutePath)=>this.extractDocs(specifier,absolutePath)),this.specifiers.flatMap(specifier=>{let cache4=this.specifierToCache.get(specifier);return Object.values(cache4).flatMap(entry=>entry?entry.type==="docs"?[entry]:entry.type==="error"?[entry]:entry.entries:[])})}findDependencies(absoluteImports){return [...this.specifierToCache.values()].flatMap(cache4=>Object.entries(cache4).filter(([fileName,cacheEntry])=>!cacheEntry||cacheEntry.type!=="stories"?!1:!!absoluteImports.find(storyImport=>fileName.match(new RegExp(`^${storyImport}(\\.[^.]+)?$`)))).map(([_,cacheEntry])=>cacheEntry))}async extractStories(specifier,absolutePath){let relativePath=path5.relative(this.options.workingDir,absolutePath),entries=[],importPath=slash(normalizeStoryPath(relativePath)),makeTitle=userTitle=>userOrAutoTitleFromSpecifier(importPath,specifier,userTitle),storyIndexer=this.options.storyIndexers.find(indexer=>indexer.test.exec(absolutePath));if(!storyIndexer)throw new Error(`No matching story indexer found for ${absolutePath}`);let csf=await storyIndexer.indexer(absolutePath,{makeTitle}),componentTags=csf.meta.tags||[];if(csf.stories.forEach(({id,name,tags:storyTags,parameters})=>{if(!parameters?.docsOnly){let tags=[...storyTags||componentTags,"story"];entries.push({id,title:csf.meta.title,name,importPath,tags,type:"story"});}}),csf.stories.length){let{autodocs}=this.options.docs,componentAutodocs=componentTags.includes(AUTODOCS_TAG),autodocsOptedIn=autodocs===!0||autodocs==="tag"&&componentAutodocs;if(componentTags.includes(STORIES_MDX_TAG)||autodocsOptedIn){let name=this.options.docs.defaultName,id=toId(csf.meta.title,name);entries.unshift({id,title:csf.meta.title,name,importPath,type:"docs",tags:[...componentTags,"docs",...autodocsOptedIn&&!componentAutodocs?[AUTODOCS_TAG]:[]],storiesImports:[]});}}return {entries,type:"stories",dependents:[]}}async extractDocs(specifier,absolutePath){let relativePath=path5.relative(this.options.workingDir,absolutePath);try{if(!this.options.storyStoreV7)throw new Error("You cannot use `.mdx` files without using `storyStoreV7`.");let normalizedPath=normalizeStoryPath(relativePath),importPath=slash(normalizedPath),content=await fs4__default.readFile(absolutePath,"utf8"),result=analyze(content);if(result.isTemplate)return !1;let absoluteImports=result.imports.map(p=>makeAbsolute(p,normalizedPath,this.options.workingDir)),dependencies=this.findDependencies(absoluteImports),sortedDependencies=dependencies,csfEntry;if(result.of){let absoluteOf=makeAbsolute(result.of,normalizedPath,this.options.workingDir);if(dependencies.forEach(dep=>{if(dep.entries.length>0){let first=dep.entries.find(e=>e.type!=="docs");path5.normalize(path5.resolve(this.options.workingDir,first.importPath)).startsWith(path5.normalize(absoluteOf))&&(csfEntry=first);}sortedDependencies=[dep,...dependencies.filter(d=>d!==dep)];}),!csfEntry)throw new Error(dedent2`Could not find or load CSF file at path "${result.of}" referenced by \`of={}\` in docs file "${relativePath}".
|
|
57
57
|
|
|
58
58
|
- Does that file exist?
|
|
59
59
|
- If so, is it a CSF file (\`.stories.*\`)?
|
|
60
|
-
- If so, is it matched by the \`stories\` glob in \`main.js
|
|
60
|
+
- If so, is it matched by the \`stories\` glob in \`main.js\`?
|
|
61
|
+
- If so, has the file successfully loaded in Storybook and are its stories visible?`)}dependencies.forEach(dep=>{dep.dependents.push(absolutePath);});let title=csfEntry?.title||userOrAutoTitleFromSpecifier(importPath,specifier,result.title),{defaultName}=this.options.docs,name=result.name||(csfEntry?autoName(importPath,csfEntry.importPath,defaultName):defaultName);return {id:toId(title,name),title,name,importPath,storiesImports:sortedDependencies.map(dep=>dep.entries[0].importPath),type:"docs",tags:[...result.tags||[],csfEntry?"attached-mdx":"unattached-mdx","docs"]}}catch(err){throw err.source?.match(/mdast-util-mdx-jsx/g)&&logger.warn(`\u{1F4A1} This seems to be an MDX2 syntax error. Please refer to the MDX section in the following resource for assistance on how to fix this: ${chalk9.yellow("https://storybook.js.org/migration-guides/7.0")}`),err}}chooseDuplicate(firstEntry,secondEntry){if(firstEntry.importPath===secondEntry.importPath)return firstEntry;let firstIsBetter=!0;(secondEntry.type==="story"||isMdxEntry(secondEntry)&&firstEntry.type==="docs"&&!isMdxEntry(firstEntry))&&(firstIsBetter=!1);let betterEntry=firstIsBetter?firstEntry:secondEntry,worseEntry=firstIsBetter?secondEntry:firstEntry,changeDocsName='Use `<Meta of={} name="Other Name">` to distinguish them.';if(worseEntry.type==="story")throw new IndexingError(`Duplicate stories with id: ${firstEntry.id}`,[firstEntry.importPath,secondEntry.importPath]);if(betterEntry.type==="story"){let worseDescriptor=isMdxEntry(worseEntry)?"component docs page":"automatically generated docs page";throw betterEntry.name===this.options.docs.defaultName?new IndexingError(`You have a story for ${betterEntry.title} with the same name as your default docs entry name (${betterEntry.name}), so the docs page is being dropped. Consider changing the story name.`,[firstEntry.importPath,secondEntry.importPath]):new IndexingError(`You have a story for ${betterEntry.title} with the same name as your ${worseDescriptor} (${worseEntry.name}), so the docs page is being dropped. ${changeDocsName}`,[firstEntry.importPath,secondEntry.importPath])}else if(isMdxEntry(betterEntry)){if(isMdxEntry(worseEntry))throw new IndexingError(`You have two component docs pages with the same name ${betterEntry.title}:${betterEntry.name}. ${changeDocsName}`,[firstEntry.importPath,secondEntry.importPath]);if(worseEntry.tags?.includes(AUTODOCS_TAG)&&this.options.docs.autodocs!==!0)throw new IndexingError(`You created a component docs page for '${worseEntry.title}', but also tagged the CSF file with '${AUTODOCS_TAG}'. This is probably a mistake.`,[betterEntry.importPath,worseEntry.importPath])}else return {...betterEntry,storiesImports:[...betterEntry.storiesImports,worseEntry.importPath,...worseEntry.storiesImports]};return betterEntry}async sortStories(entries){let sortableStories=Object.values(entries);if(this.options.storyStoreV7){let storySortParameter=await this.getStorySortParameter(),fileNameOrder=this.storyFileNames();sortStoriesV7(sortableStories,storySortParameter,fileNameOrder);}return sortableStories.reduce((acc,item)=>(acc[item.id]=item,acc),{})}async getIndex(){if(this.lastIndex)return this.lastIndex;if(this.lastError)throw this.lastError;let storiesList=await this.ensureExtracted();try{let errorEntries=storiesList.filter(entry=>entry.type==="error");if(errorEntries.length)throw new MultipleIndexingError(errorEntries.map(entry=>entry.err));let duplicateErrors=[],indexEntries={};if(storiesList.forEach(entry=>{try{let existing=indexEntries[entry.id];existing?indexEntries[entry.id]=this.chooseDuplicate(existing,entry):indexEntries[entry.id]=entry;}catch(err){duplicateErrors.push(err);}}),duplicateErrors.length)throw new MultipleIndexingError(duplicateErrors);let sorted=await this.sortStories(indexEntries),compat=sorted;if(this.options.storiesV2Compatibility){let titleToStoryCount=Object.values(sorted).reduce((acc,story)=>(acc[story.title]=(acc[story.title]||0)+1,acc),{});compat=Object.entries(sorted).reduce((acc,entry)=>{let[id,story]=entry;return story.type==="docs"||(acc[id]={...story,kind:story.title,story:story.name,parameters:{__id:story.id,docsOnly:titleToStoryCount[story.title]===1&&story.name==="Page",fileName:story.importPath}}),acc},{});}return this.lastIndex={v:4,entries:compat},this.lastIndex}catch(err){throw this.lastError=err,logger.warn(`\u{1F6A8} ${this.lastError.toString()}`),this.lastError}}invalidate(specifier,importPath,removed){let absolutePath=slash(path5.resolve(this.options.workingDir,importPath)),cache4=this.specifierToCache.get(specifier),cacheEntry=cache4[absolutePath];if(cacheEntry&&cacheEntry.type==="stories"){let{dependents}=cacheEntry,invalidated=new Set;this.specifierToCache.forEach(otherCache=>{dependents.forEach(dep=>{otherCache[dep]&&(invalidated.add(dep),otherCache[dep]=!1);});});}if(removed){if(cacheEntry&&cacheEntry.type==="docs"){let absoluteImports=cacheEntry.storiesImports.map(p=>path5.resolve(this.options.workingDir,p));this.findDependencies(absoluteImports).forEach(dep=>dep.dependents.splice(dep.dependents.indexOf(absolutePath),1));}delete cache4[absolutePath];}else cache4[absolutePath]=!1;this.lastIndex=null,this.lastError=null;}async getStorySortParameter(){let previewFile=["js","jsx","ts","tsx","mjs","cjs"].map(ext=>path5.join(this.options.configDir,`preview.${ext}`)).find(fname=>fs4__default.existsSync(fname)),storySortParameter;if(previewFile){let previewCode=(await fs4__default.readFile(previewFile,"utf-8")).toString();storySortParameter=await getStorySortParameter(previewCode);}return storySortParameter}storyFileNames(){return Array.from(this.specifierToCache.values()).flatMap(r=>Object.keys(r))}};var PAGE_REGEX=/(page|screen)/i,isPageStory=storyId=>PAGE_REGEX.test(storyId),isExampleEntry=entry=>["example-introduction--docs","example-button--docs","example-button--primary","example-button--secondary","example-button--large","example-button--small","example-header--docs","example-header--logged-in","example-header--logged-out","example-page--logged-in","example-page--logged-out"].includes(entry.id);function summarizeIndex(storyIndex){let storyCount=0,componentTitles=new Set,exampleStoryCount=0,exampleDocsCount=0,pageStoryCount=0,playStoryCount=0,autodocsCount=0,storiesMdxCount=0,mdxCount=0;Object.values(storyIndex.entries).forEach(entry=>{isExampleEntry(entry)?(entry.type==="story"&&(exampleStoryCount+=1),entry.type==="docs"&&(exampleDocsCount+=1)):entry.type==="story"?(storyCount+=1,componentTitles.add(entry.title),isPageStory(entry.title)&&(pageStoryCount+=1),entry.tags?.includes(PLAY_FN_TAG)&&(playStoryCount+=1)):entry.type==="docs"&&(isMdxEntry(entry)?mdxCount+=1:entry.tags?.includes(STORIES_MDX_TAG)?storiesMdxCount+=1:entry.tags?.includes(AUTODOCS_TAG)&&(autodocsCount+=1));});let componentCount=componentTitles.size;return {storyCount,componentCount,pageStoryCount,playStoryCount,autodocsCount,storiesMdxCount,mdxCount,exampleStoryCount,exampleDocsCount,version:storyIndex.v}}var import_client_logger=__toESM(require_dist());var getActualPackageVersions=async packages=>Promise.all(packages.map(getActualPackageVersion)),getActualPackageVersion=async packageName=>{try{let packageJson=await getActualPackageJson(packageName);return {name:packageName,version:packageJson.version}}catch{return {name:packageName,version:null}}},getActualPackageJson=async packageName=>{let resolvedPackageJson=__require.resolve(path5.join(packageName,"package.json"),{paths:[process.cwd()]});return await fs4.readJson(resolvedPackageJson)};var 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(Boolean);var getIncompatibleAddons=async mainConfig=>{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);if(addons.length===0)return [];let addonVersions=await getActualPackageVersions(addons),incompatibleAddons=[];return addonVersions.forEach(({name,version:installedVersion})=>{if(installedVersion===null)return;let addonVersion=incompatibleList[name];try{semver3.lte(semver3.coerce(installedVersion),semver3.coerce(addonVersion))&&incompatibleAddons.push({name,version:installedVersion});}catch{}}),incompatibleAddons};var warnOnIncompatibleAddons=async config=>{let incompatibleAddons=await getIncompatibleAddons(config);incompatibleAddons.length>0&&import_client_logger.logger.warn(dedent2`
|
|
61
62
|
${chalk9.bold(chalk9.red("Attention"))}: We've detected that you're using the following addons in versions which are known to be incompatible with Storybook 7:
|
|
62
63
|
|
|
63
64
|
${incompatibleAddons.map(({name,version})=>`- ${chalk9.cyan(`${name}@${version}`)}`).join(`
|
|
@@ -75,7 +76,7 @@ ${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
|
75
76
|
Could not open ${address} inside a browser. If you're running this command inside a
|
|
76
77
|
docker container or on a CI, you need to pass the '--ci' flag to prevent opening a
|
|
77
78
|
browser by default.
|
|
78
|
-
`);}});}var router=new Router;async function getStoryIndexGenerator(features,options,serverChannel){let initializedStoryIndexGenerator=Promise.resolve(void 0);if(features?.buildStoriesJson||features?.storyStoreV7){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},stories=options.presets.apply("stories"),storyIndexers=options.presets.apply("storyIndexers",[]),docsOptions=options.presets.apply("docs",{}),normalizedStories=normalizeStories(await stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,storyIndexers:await storyIndexers,docs:await docsOptions,workingDir,storiesV2Compatibility:!features?.storyStoreV7,storyStoreV7:features?.storyStoreV7});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),useStoriesJson({router,initializedStoryIndexGenerator,normalizedStories,serverChannel,workingDir});}return initializedStoryIndexGenerator}var versionStatus=versionCheck=>versionCheck.error?"error":versionCheck.cached?"cached":"success";var promptCrashReports=async()=>{if(process.env.CI&&process.env.NODE_ENV!=="test")return;let{enableCrashReports}=await prompts({type:"confirm",name:"enableCrashReports",message:"Would you like to help improve Storybook by sending anonymous crash reports?",initial:!0});return await cache.set("enableCrashReports",enableCrashReports),enableCrashReports};async function getErrorLevel({cliOptions,presetOptions}){if(cliOptions.disableTelemetry)return "none";if(!presetOptions)return "full";let core=await(await loadAllPresets({corePresets:[__require.resolve("@storybook/core-server/dist/presets/common-preset")],overridePresets:[],...presetOptions})).apply("core");if(core?.enableCrashReports!==void 0)return core.enableCrashReports?"full":"error";if(core?.disableTelemetry)return "none";let valueFromCache=await cache.get("enableCrashReports")??await cache.get("enableCrashreports");if(valueFromCache!==void 0)return valueFromCache?"full":"error";let valueFromPrompt=await promptCrashReports();return valueFromPrompt!==void 0?valueFromPrompt?"full":"error":"full"}async function sendTelemetryError(error,eventType,options){try{let errorLevel="error";try{errorLevel=await getErrorLevel(options);}catch{}if(errorLevel!=="none"){let precedingUpgrade=await getPrecedingUpgrade();await telemetry("error",{eventType,precedingUpgrade,error:errorLevel==="full"?error:void 0,errorHash:oneWayHash(error.message||"")},{immediate:!0,configDir:options.cliOptions.configDir||options.presetOptions?.configDir,enableCrashReports:errorLevel==="full"});}}catch{}}async function withTelemetry(eventType,options,run){eventType==="init"&&process.on("SIGINT",async()=>{options.cliOptions.disableTelemetry||await telemetry("canceled",{eventType},{stripMetadata:!0,immediate:!0}),process.exit(0);}),options.cliOptions.disableTelemetry||telemetry("boot",{eventType},{stripMetadata:!0});try{return await run()}catch(error){if(error?.message==="Canceled by the user")return;let{printError=logger.error}=options;throw printError(error),await sendTelemetryError(error,eventType,options),error}}async function doTelemetry(core,initializedStoryIndexGenerator,options){core?.disableTelemetry||initializedStoryIndexGenerator.then(async generator=>{let storyIndex;try{storyIndex=await generator?.getIndex();}catch(err){sendTelemetryError(err,"dev",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]}});return}let{versionCheck,versionUpdates}=options,payload={precedingUpgrade:await getPrecedingUpgrade()};storyIndex&&Object.assign(payload,{versionStatus:versionUpdates?versionStatus(versionCheck):"disabled",storyIndex:summarizeIndex(storyIndex)}),telemetry("dev",payload,{configDir:options.configDir});}),core?.disableProjectJson||useStorybookMetadata(router,options.configDir);}function getAccessControlMiddleware(crossOriginIsolated){return (req,res,next)=>{res.header("Access-Control-Allow-Origin","*"),res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"),crossOriginIsolated&&(res.header("Cross-Origin-Opener-Policy","same-origin"),res.header("Cross-Origin-Embedder-Policy","require-corp")),next();}}function getCachingMiddleware(){return (req,res,next)=>{res.header("Cache-Control","no-store"),next();}}async function storybookDevServer(options){let app=express(),[server,features,core]=await Promise.all([getServer(app,options),options.presets.apply("features"),options.presets.apply("core")]),serverChannel=getServerChannel(server),indexError,initializedStoryIndexGenerator=getStoryIndexGenerator(features,options,serverChannel).catch(err=>{indexError=err;});app.use(compression({level:1})),typeof options.extendServer=="function"&&options.extendServer(server),app.use(getAccessControlMiddleware(core?.crossOriginIsolated)),app.use(getCachingMiddleware()),getMiddleware(options.configDir)(router),app.use(router);let{port,host}=options,proto=options.https?"https":"http",{address,networkAddress}=getServerAddresses(port,host,proto),listening=new Promise((resolve3,reject)=>{server.listen({port,host},error=>error?reject(error):resolve3());}),builderName=typeof core?.builder=="string"?core.builder:core?.builder?.name,[previewBuilder,managerBuilder]=await Promise.all([getPreviewBuilder(builderName,options.configDir),getManagerBuilder(),useStatics(router,options)]);options.debugWebpack&&logConfig("Preview webpack config",await previewBuilder.getConfig(options));let managerResult=await managerBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}),previewStarted=Promise.resolve();if(options.ignorePreview||(previewStarted=previewBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}).catch(async e=>{throw await managerBuilder?.bail().catch(),await previewBuilder?.bail().catch(),e})),router.get("/iframe.html",(req,res,next)=>{previewStarted.catch(()=>{}).then(()=>next());}),await Promise.all([initializedStoryIndexGenerator,listening]).then(async([indexGenerator])=>{indexGenerator&&!options.ci&&!options.smokeTest&&options.open&&openInBrowser(host?networkAddress:address);}),indexError)throw await managerBuilder?.bail().catch(),await previewBuilder?.bail().catch(),indexError;let previewResult=await previewStarted;return doTelemetry(core,initializedStoryIndexGenerator,options),{previewResult,managerResult,address,networkAddress}}var getReleaseNotesVersion=version=>{let{major,minor}=semver3.parse(version),{version:releaseNotesVersion}=semver3.coerce(`${major}.${minor}`);return releaseNotesVersion},getReleaseNotesFailedState=version=>({success:!1,currentVersion:getReleaseNotesVersion(version),showOnFirstLaunch:!1});var getReleaseNotesData=async(currentVersionToParse,fileSystemCache)=>{let result;try{let fromCache=await fileSystemCache.get("releaseNotesData",[]).catch(()=>{})||[],releaseNotesVersion=getReleaseNotesVersion(currentVersionToParse),versionHasNotBeenSeen=!fromCache.includes(releaseNotesVersion);versionHasNotBeenSeen&&await fileSystemCache.set("releaseNotesData",[...fromCache,releaseNotesVersion]);let highestVersionSeenInThePast=semver3.sort(fromCache).slice(-1)[0],isUpgrading=!1,isMajorOrMinorDiff=!1;if(highestVersionSeenInThePast){isUpgrading=semver3.gt(releaseNotesVersion,highestVersionSeenInThePast);let versionDiff=semver3.diff(releaseNotesVersion,highestVersionSeenInThePast);isMajorOrMinorDiff=versionDiff==="major"||versionDiff==="minor";}result={success:!0,showOnFirstLaunch:versionHasNotBeenSeen&&!!highestVersionSeenInThePast&&isUpgrading&&isMajorOrMinorDiff,currentVersion:releaseNotesVersion};}catch{result=getReleaseNotesFailedState(currentVersionToParse);}return result};var{STORYBOOK_VERSION_BASE="https://storybook.js.org",CI}=process.env,updateCheck=async version=>{let result,time=Date.now();try{let fromCache=await cache.get("lastUpdateCheck",{success:!1,time:0});time-864e5>fromCache.time&&!CI?(result={success:!0,cached:!1,data:await(await Promise.race([fetch(`${STORYBOOK_VERSION_BASE}/versions.json?current=${version}`),new Promise((res,rej)=>global.setTimeout(rej,1500))])).json(),time},await cache.set("lastUpdateCheck",result)):result={...fromCache,cached:!0};}catch(error){result={success:!1,cached:!1,error,time};}return result};function createUpdateMessage(updateInfo,version){let updateMessage;try{let upgradeCommand=`npx storybook
|
|
79
|
+
`);}});}var router=new Router;async function getStoryIndexGenerator(features,options,serverChannel){let initializedStoryIndexGenerator=Promise.resolve(void 0);if(features?.buildStoriesJson||features?.storyStoreV7){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},stories=options.presets.apply("stories"),storyIndexers=options.presets.apply("storyIndexers",[]),docsOptions=options.presets.apply("docs",{}),normalizedStories=normalizeStories(await stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,storyIndexers:await storyIndexers,docs:await docsOptions,workingDir,storiesV2Compatibility:!features?.storyStoreV7,storyStoreV7:features?.storyStoreV7});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),useStoriesJson({router,initializedStoryIndexGenerator,normalizedStories,serverChannel,workingDir});}return initializedStoryIndexGenerator}var versionStatus=versionCheck=>versionCheck.error?"error":versionCheck.cached?"cached":"success";var promptCrashReports=async()=>{if(process.env.CI&&process.env.NODE_ENV!=="test")return;let{enableCrashReports}=await prompts({type:"confirm",name:"enableCrashReports",message:"Would you like to help improve Storybook by sending anonymous crash reports?",initial:!0});return await cache.set("enableCrashReports",enableCrashReports),enableCrashReports};async function getErrorLevel({cliOptions,presetOptions}){if(cliOptions.disableTelemetry)return "none";if(!presetOptions)return "full";let core=await(await loadAllPresets({corePresets:[__require.resolve("@storybook/core-server/dist/presets/common-preset")],overridePresets:[],...presetOptions})).apply("core");if(core?.enableCrashReports!==void 0)return core.enableCrashReports?"full":"error";if(core?.disableTelemetry)return "none";let valueFromCache=await cache.get("enableCrashReports")??await cache.get("enableCrashreports");if(valueFromCache!==void 0)return valueFromCache?"full":"error";let valueFromPrompt=await promptCrashReports();return valueFromPrompt!==void 0?valueFromPrompt?"full":"error":"full"}async function sendTelemetryError(error,eventType,options){try{let errorLevel="error";try{errorLevel=await getErrorLevel(options);}catch{}if(errorLevel!=="none"){let precedingUpgrade=await getPrecedingUpgrade();await telemetry("error",{eventType,precedingUpgrade,error:errorLevel==="full"?error:void 0,errorHash:oneWayHash(error.message||"")},{immediate:!0,configDir:options.cliOptions.configDir||options.presetOptions?.configDir,enableCrashReports:errorLevel==="full"});}}catch{}}async function withTelemetry(eventType,options,run){eventType==="init"&&process.on("SIGINT",async()=>{options.cliOptions.disableTelemetry||await telemetry("canceled",{eventType},{stripMetadata:!0,immediate:!0}),process.exit(0);}),options.cliOptions.disableTelemetry||telemetry("boot",{eventType},{stripMetadata:!0});try{return await run()}catch(error){if(error?.message==="Canceled by the user")return;let{printError=logger.error}=options;throw printError(error),await sendTelemetryError(error,eventType,options),error}}async function doTelemetry(core,initializedStoryIndexGenerator,options){core?.disableTelemetry||initializedStoryIndexGenerator.then(async generator=>{let storyIndex;try{storyIndex=await generator?.getIndex();}catch(err){sendTelemetryError(err,"dev",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]}});return}let{versionCheck,versionUpdates}=options,payload={precedingUpgrade:await getPrecedingUpgrade()};storyIndex&&Object.assign(payload,{versionStatus:versionUpdates?versionStatus(versionCheck):"disabled",storyIndex:summarizeIndex(storyIndex)}),telemetry("dev",payload,{configDir:options.configDir});}),core?.disableProjectJson||useStorybookMetadata(router,options.configDir);}function getAccessControlMiddleware(crossOriginIsolated){return (req,res,next)=>{res.header("Access-Control-Allow-Origin","*"),res.header("Access-Control-Allow-Headers","Origin, X-Requested-With, Content-Type, Accept"),crossOriginIsolated&&(res.header("Cross-Origin-Opener-Policy","same-origin"),res.header("Cross-Origin-Embedder-Policy","require-corp")),next();}}function getCachingMiddleware(){return (req,res,next)=>{res.header("Cache-Control","no-store"),next();}}async function storybookDevServer(options){let app=express(),[server,features,core]=await Promise.all([getServer(app,options),options.presets.apply("features"),options.presets.apply("core")]),serverChannel=getServerChannel(server),indexError,initializedStoryIndexGenerator=getStoryIndexGenerator(features,options,serverChannel).catch(err=>{indexError=err;});app.use(compression({level:1})),typeof options.extendServer=="function"&&options.extendServer(server),app.use(getAccessControlMiddleware(core?.crossOriginIsolated)),app.use(getCachingMiddleware()),getMiddleware(options.configDir)(router),app.use(router);let{port,host}=options,proto=options.https?"https":"http",{address,networkAddress}=getServerAddresses(port,host,proto),listening=new Promise((resolve3,reject)=>{server.listen({port,host},error=>error?reject(error):resolve3());}),builderName=typeof core?.builder=="string"?core.builder:core?.builder?.name,[previewBuilder,managerBuilder]=await Promise.all([getPreviewBuilder(builderName,options.configDir),getManagerBuilder(),useStatics(router,options)]);options.debugWebpack&&logConfig("Preview webpack config",await previewBuilder.getConfig(options));let managerResult=await managerBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}),previewStarted=Promise.resolve();if(options.ignorePreview||(previewStarted=previewBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}).catch(async e=>{throw await managerBuilder?.bail().catch(),await previewBuilder?.bail().catch(),e})),router.get("/iframe.html",(req,res,next)=>{previewStarted.catch(()=>{}).then(()=>next());}),await Promise.all([initializedStoryIndexGenerator,listening]).then(async([indexGenerator])=>{indexGenerator&&!options.ci&&!options.smokeTest&&options.open&&openInBrowser(host?networkAddress:address);}),indexError)throw await managerBuilder?.bail().catch(),await previewBuilder?.bail().catch(),indexError;let previewResult=await previewStarted;return doTelemetry(core,initializedStoryIndexGenerator,options),{previewResult,managerResult,address,networkAddress}}var getReleaseNotesVersion=version=>{let{major,minor}=semver3.parse(version),{version:releaseNotesVersion}=semver3.coerce(`${major}.${minor}`);return releaseNotesVersion},getReleaseNotesFailedState=version=>({success:!1,currentVersion:getReleaseNotesVersion(version),showOnFirstLaunch:!1});var getReleaseNotesData=async(currentVersionToParse,fileSystemCache)=>{let result;try{let fromCache=await fileSystemCache.get("releaseNotesData",[]).catch(()=>{})||[],releaseNotesVersion=getReleaseNotesVersion(currentVersionToParse),versionHasNotBeenSeen=!fromCache.includes(releaseNotesVersion);versionHasNotBeenSeen&&await fileSystemCache.set("releaseNotesData",[...fromCache,releaseNotesVersion]);let highestVersionSeenInThePast=semver3.sort(fromCache).slice(-1)[0],isUpgrading=!1,isMajorOrMinorDiff=!1;if(highestVersionSeenInThePast){isUpgrading=semver3.gt(releaseNotesVersion,highestVersionSeenInThePast);let versionDiff=semver3.diff(releaseNotesVersion,highestVersionSeenInThePast);isMajorOrMinorDiff=versionDiff==="major"||versionDiff==="minor";}result={success:!0,showOnFirstLaunch:versionHasNotBeenSeen&&!!highestVersionSeenInThePast&&isUpgrading&&isMajorOrMinorDiff,currentVersion:releaseNotesVersion};}catch{result=getReleaseNotesFailedState(currentVersionToParse);}return result};var{STORYBOOK_VERSION_BASE="https://storybook.js.org",CI}=process.env,updateCheck=async version=>{let result,time=Date.now();try{let fromCache=await cache.get("lastUpdateCheck",{success:!1,time:0});time-864e5>fromCache.time&&!CI?(result={success:!0,cached:!1,data:await(await Promise.race([fetch(`${STORYBOOK_VERSION_BASE}/versions.json?current=${version}`),new Promise((res,rej)=>global.setTimeout(rej,1500))])).json(),time},await cache.set("lastUpdateCheck",result)):result={...fromCache,cached:!0};}catch(error){result={success:!1,cached:!1,error,time};}return result};function createUpdateMessage(updateInfo,version){let updateMessage;try{let upgradeCommand=`npx storybook${semver3.prerelease(updateInfo.data.latest.version)?"@next upgrade --prerelease":"@latest upgrade"}`;updateMessage=updateInfo.success&&semver3.lt(version,updateInfo.data.latest.version)?dedent`
|
|
79
80
|
${colors.orange(`A new version (${chalk9.bold(updateInfo.data.latest.version)}) is available!`)}
|
|
80
81
|
|
|
81
82
|
${chalk9.gray("Upgrade now:")} ${colors.green(upgradeCommand)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook/core-server",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.20",
|
|
4
4
|
"description": "Storybook framework-agnostic API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook"
|
|
@@ -56,18 +56,18 @@
|
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@aw-web-design/x-default-browser": "1.4.88",
|
|
58
58
|
"@discoveryjs/json-ext": "^0.5.3",
|
|
59
|
-
"@storybook/builder-manager": "7.0.
|
|
60
|
-
"@storybook/core-common": "7.0.
|
|
61
|
-
"@storybook/core-events": "7.0.
|
|
59
|
+
"@storybook/builder-manager": "7.0.20",
|
|
60
|
+
"@storybook/core-common": "7.0.20",
|
|
61
|
+
"@storybook/core-events": "7.0.20",
|
|
62
62
|
"@storybook/csf": "^0.1.0",
|
|
63
|
-
"@storybook/csf-tools": "7.0.
|
|
63
|
+
"@storybook/csf-tools": "7.0.20",
|
|
64
64
|
"@storybook/docs-mdx": "^0.1.0",
|
|
65
65
|
"@storybook/global": "^5.0.0",
|
|
66
|
-
"@storybook/manager": "7.0.
|
|
67
|
-
"@storybook/node-logger": "7.0.
|
|
68
|
-
"@storybook/preview-api": "7.0.
|
|
69
|
-
"@storybook/telemetry": "7.0.
|
|
70
|
-
"@storybook/types": "7.0.
|
|
66
|
+
"@storybook/manager": "7.0.20",
|
|
67
|
+
"@storybook/node-logger": "7.0.20",
|
|
68
|
+
"@storybook/preview-api": "7.0.20",
|
|
69
|
+
"@storybook/telemetry": "7.0.20",
|
|
70
|
+
"@storybook/types": "7.0.20",
|
|
71
71
|
"@types/detect-port": "^1.3.0",
|
|
72
72
|
"@types/node": "^16.0.0",
|
|
73
73
|
"@types/node-fetch": "^2.5.7",
|
|
@@ -118,5 +118,5 @@
|
|
|
118
118
|
],
|
|
119
119
|
"platform": "node"
|
|
120
120
|
},
|
|
121
|
-
"gitHead": "
|
|
121
|
+
"gitHead": "9fb2573aa274f3f69d3358050e8df9c903e8245f"
|
|
122
122
|
}
|