@storybook/core-server 8.1.0-alpha.8 → 8.1.0-beta.1
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 +7 -7
- package/dist/index.mjs +6 -6
- package/dist/presets/common-manager.js +1 -1
- package/dist/presets/common-manager.mjs +1 -1
- package/package.json +15 -15
package/dist/index.js
CHANGED
|
@@ -10,22 +10,22 @@ Content-Type: ${v.type||"application/octet-stream"}\r
|
|
|
10
10
|
`,v,`\r
|
|
11
11
|
`)),c.push(`--${b}--`),new B(c,{type:"multipart/form-data; boundary="+b})}var t,i,h,r,m,f,e,x,FormData,init_esm_min=__esm({"../../node_modules/formdata-polyfill/esm.min.js"(){"use strict";init_fetch_blob();init_file();({toStringTag:t,iterator:i,hasInstance:h}=Symbol),r=Math.random,m="append,set,get,getAll,delete,keys,values,entries,forEach,constructor".split(","),f=(a,b,c)=>(a+="",/^(Blob|File)$/.test(b&&b[t])?[(c=c!==void 0?c+"":b[t]=="File"?b.name:"blob",a),b.name!==c||b[t]=="blob"?new file_default([b],c,b):b]:[a,b+""]),e=(c,f3)=>(f3?c:c.replace(/\r?\n|\r/g,`\r
|
|
12
12
|
`)).replace(/\n/g,"%0A").replace(/\r/g,"%0D").replace(/"/g,"%22"),x=(n,a,e2)=>{if(a.length<e2)throw new TypeError(`Failed to execute '${n}' on 'FormData': ${e2} arguments required, but only ${a.length} present.`)},FormData=class{#d=[];constructor(...a){if(a.length)throw new TypeError("Failed to construct 'FormData': parameter 1 is not of type 'HTMLFormElement'.")}get[t](){return"FormData"}[i](){return this.entries()}static[h](o){return o&&typeof o=="object"&&o[t]==="FormData"&&!m.some(m2=>typeof o[m2]!="function")}append(...a){x("append",arguments,2),this.#d.push(f(...a))}delete(a){x("delete",arguments,1),a+="",this.#d=this.#d.filter(([b])=>b!==a)}get(a){x("get",arguments,1),a+="";for(var b=this.#d,l=b.length,c=0;c<l;c++)if(b[c][0]===a)return b[c][1];return null}getAll(a,b){return x("getAll",arguments,1),b=[],a+="",this.#d.forEach(c=>c[0]===a&&b.push(c[1])),b}has(a){return x("has",arguments,1),a+="",this.#d.some(b=>b[0]===a)}forEach(a,b){x("forEach",arguments,1);for(var[c,d]of this)a.call(b,d,c,this)}set(...a){x("set",arguments,2);var b=[],c=!0;a=f(...a),this.#d.forEach(d=>{d[0]===a[0]?c&&(c=!b.push(a)):b.push(d)}),c&&b.push(a),this.#d=b}*entries(){yield*this.#d}*keys(){for(var[a]of this)yield a}*values(){for(var[,a]of this)yield a}}}});var require_node_domexception=__commonJS({"../../node_modules/node-domexception/index.js"(exports2,module2){"use strict";if(!globalThis.DOMException)try{let{MessageChannel}=require("worker_threads"),port=new MessageChannel().port1,ab=new ArrayBuffer;port.postMessage(ab,[ab,ab])}catch(err){err.constructor.name==="DOMException"&&(globalThis.DOMException=err.constructor)}module2.exports=globalThis.DOMException}});var import_node_fs,import_node_path,import_node_domexception,stat,init_from=__esm({"../../node_modules/fetch-blob/from.js"(){"use strict";import_node_fs=require("fs"),import_node_path=require("path"),import_node_domexception=__toESM(require_node_domexception(),1);init_file();init_fetch_blob();({stat}=import_node_fs.promises)}});var multipart_parser_exports={};__export(multipart_parser_exports,{toFormData:()=>toFormData});function _fileName(headerValue){let m2=headerValue.match(/\bfilename=("(.*?)"|([^()<>@,;:\\"/[\]?={}\s\t]+))($|;\s)/i);if(!m2)return;let match=m2[2]||m2[3]||"",filename=match.slice(match.lastIndexOf("\\")+1);return filename=filename.replace(/%22/g,'"'),filename=filename.replace(/&#(\d{4});/g,(m3,code)=>String.fromCharCode(code)),filename}async function toFormData(Body2,ct){if(!/multipart/i.test(ct))throw new TypeError("Failed to fetch");let m2=ct.match(/boundary=(?:"([^"]+)"|([^;]+))/i);if(!m2)throw new TypeError("no or bad content-type header, no multipart boundary");let parser=new MultipartParser(m2[1]||m2[2]),headerField,headerValue,entryValue,entryName,contentType,filename,entryChunks=[],formData=new FormData,onPartData=ui8a=>{entryValue+=decoder.decode(ui8a,{stream:!0})},appendToFile=ui8a=>{entryChunks.push(ui8a)},appendFileToFormData=()=>{let file=new file_default(entryChunks,filename,{type:contentType});formData.append(entryName,file)},appendEntryToFormData=()=>{formData.append(entryName,entryValue)},decoder=new TextDecoder("utf-8");decoder.decode(),parser.onPartBegin=function(){parser.onPartData=onPartData,parser.onPartEnd=appendEntryToFormData,headerField="",headerValue="",entryValue="",entryName="",contentType="",filename=null,entryChunks.length=0},parser.onHeaderField=function(ui8a){headerField+=decoder.decode(ui8a,{stream:!0})},parser.onHeaderValue=function(ui8a){headerValue+=decoder.decode(ui8a,{stream:!0})},parser.onHeaderEnd=function(){if(headerValue+=decoder.decode(),headerField=headerField.toLowerCase(),headerField==="content-disposition"){let m3=headerValue.match(/\bname=("([^"]*)"|([^()<>@,;:\\"/[\]?={}\s\t]+))/i);m3&&(entryName=m3[2]||m3[3]||""),filename=_fileName(headerValue),filename&&(parser.onPartData=appendToFile,parser.onPartEnd=appendFileToFormData)}else headerField==="content-type"&&(contentType=headerValue);headerValue="",headerField=""};for await(let chunk of Body2)parser.write(chunk);return parser.end(),formData}var s,S,f2,F,LF,CR,SPACE,HYPHEN,COLON,A,Z,lower,noop,MultipartParser,init_multipart_parser=__esm({"node_modules/node-fetch/src/utils/multipart-parser.js"(){"use strict";init_from();init_esm_min();s=0,S={START_BOUNDARY:s++,HEADER_FIELD_START:s++,HEADER_FIELD:s++,HEADER_VALUE_START:s++,HEADER_VALUE:s++,HEADER_VALUE_ALMOST_DONE:s++,HEADERS_ALMOST_DONE:s++,PART_DATA_START:s++,PART_DATA:s++,END:s++},f2=1,F={PART_BOUNDARY:f2,LAST_BOUNDARY:f2*=2},LF=10,CR=13,SPACE=32,HYPHEN=45,COLON=58,A=97,Z=122,lower=c=>c|32,noop=()=>{},MultipartParser=class{constructor(boundary){this.index=0,this.flags=0,this.onHeaderEnd=noop,this.onHeaderField=noop,this.onHeadersEnd=noop,this.onHeaderValue=noop,this.onPartBegin=noop,this.onPartData=noop,this.onPartEnd=noop,this.boundaryChars={},boundary=`\r
|
|
13
|
-
--`+boundary;let ui8a=new Uint8Array(boundary.length);for(let i2=0;i2<boundary.length;i2++)ui8a[i2]=boundary.charCodeAt(i2),this.boundaryChars[ui8a[i2]]=!0;this.boundary=ui8a,this.lookbehind=new Uint8Array(this.boundary.length+8),this.state=S.START_BOUNDARY}write(data){let i2=0,length_=data.length,previousIndex=this.index,{lookbehind,boundary,boundaryChars,index,state,flags}=this,boundaryLength=this.boundary.length,boundaryEnd=boundaryLength-1,bufferLength=data.length,c,cl,mark=name=>{this[name+"Mark"]=i2},clear=name=>{delete this[name+"Mark"]},callback=(callbackSymbol,start,end,ui8a)=>{(start===void 0||start!==end)&&this[callbackSymbol](ui8a&&ui8a.subarray(start,end))},dataCallback=(name,clear2)=>{let markSymbol=name+"Mark";markSymbol in this&&(clear2?(callback(name,this[markSymbol],i2,data),delete this[markSymbol]):(callback(name,this[markSymbol],data.length,data),this[markSymbol]=0))};for(i2=0;i2<length_;i2++)switch(c=data[i2],state){case S.START_BOUNDARY:if(index===boundary.length-2){if(c===HYPHEN)flags|=F.LAST_BOUNDARY;else if(c!==CR)return;index++;break}else if(index-1===boundary.length-2){if(flags&F.LAST_BOUNDARY&&c===HYPHEN)state=S.END,flags=0;else if(!(flags&F.LAST_BOUNDARY)&&c===LF)index=0,callback("onPartBegin"),state=S.HEADER_FIELD_START;else return;break}c!==boundary[index+2]&&(index=-2),c===boundary[index+2]&&index++;break;case S.HEADER_FIELD_START:state=S.HEADER_FIELD,mark("onHeaderField"),index=0;case S.HEADER_FIELD:if(c===CR){clear("onHeaderField"),state=S.HEADERS_ALMOST_DONE;break}if(index++,c===HYPHEN)break;if(c===COLON){if(index===1)return;dataCallback("onHeaderField",!0),state=S.HEADER_VALUE_START;break}if(cl=lower(c),cl<A||cl>Z)return;break;case S.HEADER_VALUE_START:if(c===SPACE)break;mark("onHeaderValue"),state=S.HEADER_VALUE;case S.HEADER_VALUE:c===CR&&(dataCallback("onHeaderValue",!0),callback("onHeaderEnd"),state=S.HEADER_VALUE_ALMOST_DONE);break;case S.HEADER_VALUE_ALMOST_DONE:if(c!==LF)return;state=S.HEADER_FIELD_START;break;case S.HEADERS_ALMOST_DONE:if(c!==LF)return;callback("onHeadersEnd"),state=S.PART_DATA_START;break;case S.PART_DATA_START:state=S.PART_DATA,mark("onPartData");case S.PART_DATA:if(previousIndex=index,index===0){for(i2+=boundaryEnd;i2<bufferLength&&!(data[i2]in boundaryChars);)i2+=boundaryLength;i2-=boundaryEnd,c=data[i2]}if(index<boundary.length)boundary[index]===c?(index===0&&dataCallback("onPartData",!0),index++):index=0;else if(index===boundary.length)index++,c===CR?flags|=F.PART_BOUNDARY:c===HYPHEN?flags|=F.LAST_BOUNDARY:index=0;else if(index-1===boundary.length)if(flags&F.PART_BOUNDARY){if(index=0,c===LF){flags&=~F.PART_BOUNDARY,callback("onPartEnd"),callback("onPartBegin"),state=S.HEADER_FIELD_START;break}}else flags&F.LAST_BOUNDARY&&c===HYPHEN?(callback("onPartEnd"),state=S.END,flags=0):index=0;if(index>0)lookbehind[index-1]=c;else if(previousIndex>0){let _lookbehind=new Uint8Array(lookbehind.buffer,lookbehind.byteOffset,lookbehind.byteLength);callback("onPartData",0,previousIndex,_lookbehind),previousIndex=0,mark("onPartData"),i2--}break;case S.END:break;default:throw new Error(`Unexpected state entered: ${state}`)}dataCallback("onHeaderField"),dataCallback("onHeaderValue"),dataCallback("onPartData"),this.index=index,this.state=state,this.flags=flags}end(){if(this.state===S.HEADER_FIELD_START&&this.index===0||this.state===S.PART_DATA&&this.index===this.boundary.length)this.onPartEnd();else if(this.state!==S.END)throw new Error("MultipartParser.end(): stream ended unexpectedly")}}}});var src_exports={};__export(src_exports,{build:()=>standalone_default,buildDevStandalone:()=>buildDevStandalone,buildStaticStandalone:()=>buildStaticStandalone,getErrorLevel:()=>getErrorLevel,getPreviewBodyTemplate:()=>import_core_common13.getPreviewBodyTemplate,getPreviewHeadTemplate:()=>import_core_common13.getPreviewHeadTemplate,sendTelemetryError:()=>sendTelemetryError,withTelemetry:()=>withTelemetry});module.exports=__toCommonJS(src_exports);var import_core_common13=require("@storybook/core-common");var import_chalk5=__toESM(require("chalk")),import_fs_extra7=require("fs-extra"),
|
|
13
|
+
--`+boundary;let ui8a=new Uint8Array(boundary.length);for(let i2=0;i2<boundary.length;i2++)ui8a[i2]=boundary.charCodeAt(i2),this.boundaryChars[ui8a[i2]]=!0;this.boundary=ui8a,this.lookbehind=new Uint8Array(this.boundary.length+8),this.state=S.START_BOUNDARY}write(data){let i2=0,length_=data.length,previousIndex=this.index,{lookbehind,boundary,boundaryChars,index,state,flags}=this,boundaryLength=this.boundary.length,boundaryEnd=boundaryLength-1,bufferLength=data.length,c,cl,mark=name=>{this[name+"Mark"]=i2},clear=name=>{delete this[name+"Mark"]},callback=(callbackSymbol,start,end,ui8a)=>{(start===void 0||start!==end)&&this[callbackSymbol](ui8a&&ui8a.subarray(start,end))},dataCallback=(name,clear2)=>{let markSymbol=name+"Mark";markSymbol in this&&(clear2?(callback(name,this[markSymbol],i2,data),delete this[markSymbol]):(callback(name,this[markSymbol],data.length,data),this[markSymbol]=0))};for(i2=0;i2<length_;i2++)switch(c=data[i2],state){case S.START_BOUNDARY:if(index===boundary.length-2){if(c===HYPHEN)flags|=F.LAST_BOUNDARY;else if(c!==CR)return;index++;break}else if(index-1===boundary.length-2){if(flags&F.LAST_BOUNDARY&&c===HYPHEN)state=S.END,flags=0;else if(!(flags&F.LAST_BOUNDARY)&&c===LF)index=0,callback("onPartBegin"),state=S.HEADER_FIELD_START;else return;break}c!==boundary[index+2]&&(index=-2),c===boundary[index+2]&&index++;break;case S.HEADER_FIELD_START:state=S.HEADER_FIELD,mark("onHeaderField"),index=0;case S.HEADER_FIELD:if(c===CR){clear("onHeaderField"),state=S.HEADERS_ALMOST_DONE;break}if(index++,c===HYPHEN)break;if(c===COLON){if(index===1)return;dataCallback("onHeaderField",!0),state=S.HEADER_VALUE_START;break}if(cl=lower(c),cl<A||cl>Z)return;break;case S.HEADER_VALUE_START:if(c===SPACE)break;mark("onHeaderValue"),state=S.HEADER_VALUE;case S.HEADER_VALUE:c===CR&&(dataCallback("onHeaderValue",!0),callback("onHeaderEnd"),state=S.HEADER_VALUE_ALMOST_DONE);break;case S.HEADER_VALUE_ALMOST_DONE:if(c!==LF)return;state=S.HEADER_FIELD_START;break;case S.HEADERS_ALMOST_DONE:if(c!==LF)return;callback("onHeadersEnd"),state=S.PART_DATA_START;break;case S.PART_DATA_START:state=S.PART_DATA,mark("onPartData");case S.PART_DATA:if(previousIndex=index,index===0){for(i2+=boundaryEnd;i2<bufferLength&&!(data[i2]in boundaryChars);)i2+=boundaryLength;i2-=boundaryEnd,c=data[i2]}if(index<boundary.length)boundary[index]===c?(index===0&&dataCallback("onPartData",!0),index++):index=0;else if(index===boundary.length)index++,c===CR?flags|=F.PART_BOUNDARY:c===HYPHEN?flags|=F.LAST_BOUNDARY:index=0;else if(index-1===boundary.length)if(flags&F.PART_BOUNDARY){if(index=0,c===LF){flags&=~F.PART_BOUNDARY,callback("onPartEnd"),callback("onPartBegin"),state=S.HEADER_FIELD_START;break}}else flags&F.LAST_BOUNDARY&&c===HYPHEN?(callback("onPartEnd"),state=S.END,flags=0):index=0;if(index>0)lookbehind[index-1]=c;else if(previousIndex>0){let _lookbehind=new Uint8Array(lookbehind.buffer,lookbehind.byteOffset,lookbehind.byteLength);callback("onPartData",0,previousIndex,_lookbehind),previousIndex=0,mark("onPartData"),i2--}break;case S.END:break;default:throw new Error(`Unexpected state entered: ${state}`)}dataCallback("onHeaderField"),dataCallback("onHeaderValue"),dataCallback("onPartData"),this.index=index,this.state=state,this.flags=flags}end(){if(this.state===S.HEADER_FIELD_START&&this.index===0||this.state===S.PART_DATA&&this.index===this.boundary.length)this.onPartEnd();else if(this.state!==S.END)throw new Error("MultipartParser.end(): stream ended unexpectedly")}}}});var src_exports={};__export(src_exports,{build:()=>standalone_default,buildDevStandalone:()=>buildDevStandalone,buildStaticStandalone:()=>buildStaticStandalone,getErrorLevel:()=>getErrorLevel,getPreviewBodyTemplate:()=>import_core_common13.getPreviewBodyTemplate,getPreviewHeadTemplate:()=>import_core_common13.getPreviewHeadTemplate,sendTelemetryError:()=>sendTelemetryError,withTelemetry:()=>withTelemetry});module.exports=__toCommonJS(src_exports);var import_core_common13=require("@storybook/core-common");var import_chalk5=__toESM(require("chalk")),import_fs_extra7=require("fs-extra"),import_path8=require("path"),import_global=require("@storybook/global"),import_node_logger5=require("@storybook/node-logger"),import_telemetry2=require("@storybook/telemetry"),import_core_common5=require("@storybook/core-common");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_path3=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_path2=__toESM(require("path")),import_ts_dedent=require("ts-dedent");async function useStatics(router2,options){let staticDirs=await options.presets.apply("staticDirs")??[],faviconPath=await options.presets.apply("favicon"),statics=[...staticDirs.map(dir=>typeof dir=="string"?dir:`${dir.from}:${dir.to}`)];statics&&statics.length>0&&await Promise.all(statics.map(async dir=>{try{let normalizedDir=staticDirs&&!(0,import_path2.isAbsolute)(dir)?(0,import_core_common.getDirectoryFromWorkingDir)({configDir:options.configDir,workingDir:process.cwd(),directory:dir}):dir,{staticDir,staticPath,targetEndpoint}=await parseStaticDir(normalizedDir);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(e2){e2 instanceof Error&&import_node_logger2.logger.warn(e2.message)}})),router2.get(`/${(0,import_path2.basename)(faviconPath)}`,(req,res)=>res.sendFile(faviconPath))}var parseStaticDir=async arg=>{let lastColonIndex=arg.lastIndexOf(":"),isWindowsRawDirOnly=import_path2.default.win32.isAbsolute(arg)&&lastColonIndex===1,splitIndex=lastColonIndex!==-1&&!isWindowsRawDirOnly?lastColonIndex:arg.length,target=(arg.substring(splitIndex+1)||"/").split(import_path2.default.sep).join(import_path2.default.posix.sep),rawDir=arg.substring(0,splitIndex),staticDir=import_path2.default.isAbsolute(rawDir)?rawDir:`./${rawDir}`,staticPath=import_path2.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`
|
|
14
14
|
Failed to load static files, no such directory: {cyan ${staticPath}}
|
|
15
15
|
Make sure this directory exists.
|
|
16
|
-
`));return{staticDir,staticPath,targetDir,targetEndpoint}};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=(0,import_path3.join)(outputDir,to),skipPaths=["index.html","iframe.html"].map(f3=>(0,import_path3.join)(targetPath,f3));from.includes("node_modules")||import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${print(from)}} at {cyan ${print(targetPath)}}`),await import_fs_extra3.default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})},Promise.resolve())}function print(p){return(0,import_path3.relative)(process.cwd(),p)}var import_server_errors=require("@storybook/core-events/server-errors"),import_node_url=require("url");async function getManagerBuilder(){return import("@storybook/builder-manager")}async function getPreviewBuilder(builderName,configDir){let builderPackage=require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});return await import((0,import_node_url.pathToFileURL)(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{});if(!builder)throw new import_server_errors.MissingBuilderError;let builderName=typeof builder=="string"?builder: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(path6){return path6.startsWith("\\\\?\\")?path6:path6.replace(/\\/g,"/")}var import_fs=__toESM(require("fs")),import_path4=__toESM(require("path")),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_path4.default.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=import_path4.default.join(options.workingDir,importPath,"**",import_path4.default.basename(specifier.files)),{globby}=await import("globby");(await globby(slash(dirGlob),(0,import_core_common3.commonGlobOptions)(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(import_path4.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,path6,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path6,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 instanceof Error?err.toString():String(err))}})}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
|
|
16
|
+
`));return{staticDir,staticPath,targetDir,targetEndpoint}};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=(0,import_path3.join)(outputDir,to),skipPaths=["index.html","iframe.html"].map(f3=>(0,import_path3.join)(targetPath,f3));from.includes("node_modules")||import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${print(from)}} at {cyan ${print(targetPath)}}`),await import_fs_extra3.default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})},Promise.resolve())}function print(p){return(0,import_path3.relative)(process.cwd(),p)}var import_server_errors=require("@storybook/core-events/server-errors"),import_node_url=require("url");async function getManagerBuilder(){return import("@storybook/builder-manager")}async function getPreviewBuilder(builderName,configDir){let builderPackage=require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});return await import((0,import_node_url.pathToFileURL)(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{});if(!builder)throw new import_server_errors.MissingBuilderError;let builderName=typeof builder=="string"?builder:builder.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}var import_path5=require("path"),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(path6){return path6.startsWith("\\\\?\\")?path6:path6.replace(/\\/g,"/")}var import_fs=__toESM(require("fs")),import_path4=__toESM(require("path")),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_path4.default.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=import_path4.default.join(options.workingDir,importPath,"**",import_path4.default.basename(specifier.files)),{globby}=await import("globby");(await globby(slash(dirGlob),(0,import_core_common3.commonGlobOptions)(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(import_path4.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 import_watchpack2=__toESM(require("watchpack"));function watchConfig(configDir,onInvalidate){let wp=new import_watchpack2.default({followSymlinks:!1,ignored:["**/.git","**/node_modules"]});return wp.watch({directories:[configDir]}),wp.on("change",async(filePath,mtime,explanation)=>{await onInvalidate(filePath,!mtime)}),wp.on("remove",async(filePath,explanation)=>{await onInvalidate(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(),configDir,serverChannel,normalizedStories}){let maybeInvalidate=(0,import_debounce.default)(()=>serverChannel.emit(import_core_events.STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path6,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path6,removed),maybeInvalidate()}),configDir&&watchConfig(configDir,async filePath=>{(0,import_path5.basename)(filePath).startsWith("preview")&&((await initializedStoryIndexGenerator).invalidateAll(),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 instanceof Error?err.toString():String(err))}})}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"));var import_tiny_invariant=__toESM(require("tiny-invariant")),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:
|
|
17
17
|
${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
18
18
|
`)}`}toString(){return this.indexingErrors.length===1?`${this.message}:
|
|
19
|
-
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return
|
|
19
|
+
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",UNATTACHED_MDX_TAG="unattached-mdx",ATTACHED_MDX_TAG="attached-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return tags?.includes(UNATTACHED_MDX_TAG)||tags?.includes(ATTACHED_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)),{globby}=await import("globby"),files=await globby(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,cache3])=>this.specifierToCache.set(specifier,cache3));let previewCode=await this.getPreviewCode(),projectTags=this.getProjectTags(previewCode);await this.ensureExtracted({projectTags})}async updateExtracted(updater,overwrite=!1){await Promise.all(this.specifiers.map(async specifier=>{let entry=this.specifierToCache.get(specifier);return(0,import_tiny_invariant.default)(entry,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`),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 instanceof Error?err.message:String(err),[relativePath],err instanceof Error?err.stack:void 0)}}}))}))}isDocsMdx(absolutePath){return/(?<!\.stories)\.mdx$/i.test(absolutePath)}async ensureExtracted({projectTags}){return await this.updateExtracted(async(specifier,absolutePath)=>this.isDocsMdx(absolutePath)?!1:this.extractStories(specifier,absolutePath,projectTags)),await this.updateExtracted(async(specifier,absolutePath)=>this.extractDocs(specifier,absolutePath,projectTags)),this.specifiers.flatMap(specifier=>{let cache3=this.specifierToCache.get(specifier);return(0,import_tiny_invariant.default)(cache3,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`),Object.values(cache3).flatMap(entry=>entry?entry.type==="docs"?[entry]:entry.type==="error"?[entry]:entry.entries.map(item=>{if(item.type==="docs")return item;let{metaId,...existing}=item;return existing}):[])})}findDependencies(absoluteImports){return[...this.specifierToCache.values()].flatMap(cache3=>Object.entries(cache3).filter(([fileName,cacheEntry])=>!cacheEntry||cacheEntry.type!=="stories"?!1:!!absoluteImports.find(storyImport=>fileName.match(new RegExp(`^${storyImport.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(\\.[^.]+)?$`)))).map(([_,cacheEntry])=>cacheEntry))}async extractStories(specifier,absolutePath,projectTags=[]){let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath),importPath=slash((0,import_core_common4.normalizeStoryPath)(relativePath)),defaultMakeTitle=userTitle=>{let title=(0,import_preview_api.userOrAutoTitleFromSpecifier)(importPath,specifier,userTitle);return(0,import_tiny_invariant.default)(title,"makeTitle created an undefined title. This happens when the fileName doesn't match any specifier from main.js"),title},indexer=this.options.indexers.find(ind=>ind.test.exec(absolutePath));(0,import_tiny_invariant.default)(indexer,`No matching indexer found for ${absolutePath}`);let indexInputs=await indexer.createIndex(absolutePath,{makeTitle:defaultMakeTitle}),entries=indexInputs.map(input=>{let name=input.name??(0,import_csf.storyNameFromExport)(input.exportName),title=input.title??defaultMakeTitle(),id=input.__id??(0,import_csf.toId)(input.metaId??title,(0,import_csf.storyNameFromExport)(input.exportName)),tags=(0,import_csf.combineTags)(...projectTags,...input.tags??[]);return{type:"story",id,metaId:input.metaId,name,title,importPath,tags}}),hasAutodocsTag=entries.some(entry=>entry.tags.includes(AUTODOCS_TAG)),isStoriesMdx=entries.some(entry=>entry.tags.includes(STORIES_MDX_TAG));if((hasAutodocsTag&&this.options.docs.autodocs!==!1||isStoriesMdx)&&this.options.build?.test?.disableAutoDocs!==!0){let name=this.options.docs.defaultName??"Docs",{metaId}=indexInputs[0],{title}=entries[0],id=(0,import_csf.toId)(metaId??title,name),tags=(0,import_csf.combineTags)(...projectTags,...indexInputs[0].tags??[]);entries.unshift({id,title,name,importPath,type:"docs",tags,storiesImports:[]})}return{entries:entries.filter(entry=>!(entry.type==="story"&&entry.tags.includes("stories-mdx-docsOnly"))),dependents:[],type:"stories"}}async extractDocs(specifier,absolutePath,projectTags=[]){let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath);try{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);dependencies.forEach(dep=>{if(dep.entries.length>0){let first=dep.entries.find(e2=>e2.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)]}),(0,import_tiny_invariant.default)(csfEntry,import_ts_dedent2.default`Could not find or load CSF file at path "${result.of}" referenced by \`of={}\` in docs file "${relativePath}".
|
|
20
20
|
|
|
21
21
|
- Does that file exist?
|
|
22
22
|
- If so, is it a CSF file (\`.stories.*\`)?
|
|
23
23
|
- If so, is it matched by the \`stories\` glob in \`main.js\`?
|
|
24
|
-
- 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||(0,import_preview_api.userOrAutoTitleFromSpecifier)(importPath,specifier,result.title);(0,import_tiny_invariant.default)(title,"makeTitle created an undefined title. This happens when a specifier's doesn't have any matches in its fileName");let defaultName=this.options.docs.defaultName??"Docs",name=result.name||(csfEntry?autoName(importPath,csfEntry.importPath,defaultName):defaultName);return{id:(0,import_csf.toId)(csfEntry?.metaId||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&&err.source?.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){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),storySortParameter=await this.getStorySortParameter(),fileNameOrder=this.storyFileNames();return(0,import_preview_api.sortStoriesV7)(sortableStories,storySortParameter,fileNameOrder),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){err instanceof IndexingError&&duplicateErrors.push(err)}}),duplicateErrors.length)throw new MultipleIndexingError(duplicateErrors);let sorted=await this.sortStories(indexEntries);return this.lastIndex={v:4,entries:sorted},this.lastIndex}catch(err){throw this.lastError=err==null||err instanceof Error?err:void 0,(0,import_tiny_invariant.default)(this.lastError),import_node_logger4.logger.warn(`\u{1F6A8} ${this.lastError.toString()}`),this.lastError}}invalidate(specifier,importPath,removed){let absolutePath=slash(import_path6.default.resolve(this.options.workingDir,importPath)),cache3=this.specifierToCache.get(specifier);(0,import_tiny_invariant.default)(cache3,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`);let cacheEntry=cache3[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_path6.default.resolve(this.options.workingDir,p));this.findDependencies(absoluteImports).forEach(dep=>dep.dependents.splice(dep.dependents.indexOf(absolutePath),1))}delete cache3[absolutePath]}else cache3[absolutePath]=!1;this.lastIndex=null,this.lastError=null}async getStorySortParameter(){let previewFile=["js","jsx","ts","tsx","mjs","cjs"].map(ext=>import_path6.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(r2=>Object.keys(r2))}};var PAGE_REGEX=/(page|screen)/i,isPageStory=storyId=>PAGE_REGEX.test(storyId),isCLIExampleEntry=entry=>["example-introduction--docs","configure-your-project--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),isAnyExampleEntry=entry=>entry.id.startsWith("example-button--")||entry.id.startsWith("example-header--")||entry.id.startsWith("example-page--");function summarizeIndex(storyIndex){let storyCount=0,componentTitles=new Set,exampleStoryCount=0,onboardingStoryCount=0,onboardingDocsCount=0,exampleDocsCount=0,pageStoryCount=0,playStoryCount=0,autodocsCount=0,storiesMdxCount=0,mdxCount=0;Object.values(storyIndex.entries).forEach(entry=>{isCLIExampleEntry(entry)?(entry.type==="story"&&(exampleStoryCount+=1),entry.type==="docs"&&(exampleDocsCount+=1)):isAnyExampleEntry(entry)?(entry.type==="story"&&(onboardingStoryCount+=1),entry.type==="docs"&&(onboardingDocsCount+=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,onboardingStoryCount,onboardingDocsCount,version:storyIndex.v}}var import_server_errors2=require("@storybook/core-events/server-errors");async function buildOrThrow(callback){try{return await callback()}catch(err){let builderErrors=err.errors;throw builderErrors&&builderErrors.find(er=>er.text?.includes("No matching export"))?new import_server_errors2.NoMatchingExportError(err):err}}async function buildStaticStandalone(options){if(options.configType="PRODUCTION",options.outputDir==="")throw new Error("Won't remove current directory. Check your outputDir!");if(options.outputDir=(0,import_path7.resolve)(options.outputDir),options.configDir=(0,import_path7.resolve)(options.configDir),import_node_logger5.logger.info(import_chalk5.default`=> Cleaning outputDir: {cyan ${(0,import_path7.relative)(process.cwd(),options.outputDir)}}`),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_common5.loadMainConfig)(options),{framework}=config,corePresets=[],frameworkName=typeof framework=="string"?framework:framework?.name;frameworkName?corePresets.push((0,import_path7.join)(frameworkName,"preset")):options.ignorePreview||import_node_logger5.logger.warn(`you have not specified a framework in your ${options.configDir}/main.js`),import_node_logger5.logger.info("=> Loading presets");let presets=await(0,import_core_common5.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...corePresets],overridePresets:[require.resolve("@storybook/core-server/dist/presets/common-override-preset")],isCritical:!0,...options}),{renderer}=await presets.apply("core",{}),build2=await presets.apply("build",{}),[previewBuilder,managerBuilder]=await getBuilders({...options,presets,build:build2}),resolvedRenderer=renderer?(0,import_core_common5.resolveAddonName)(options.configDir,renderer,options):void 0;presets=await(0,import_core_common5.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...managerBuilder.corePresets||[],...previewBuilder.corePresets||[],...resolvedRenderer?[resolvedRenderer]:[],...corePresets],overridePresets:[...previewBuilder.overridePresets||[],require.resolve("@storybook/core-server/dist/presets/common-override-preset")],...options,build:build2});let[features,core,staticDirs,indexers,stories,docsOptions]=await Promise.all([presets.apply("features"),presets.apply("core"),presets.apply("staticDirs"),presets.apply("experimental_indexers",[]),presets.apply("stories"),presets.apply("docs",{})]),fullOptions={...options,presets,features,build:build2},effects=[];import_global.global.FEATURES=features,await buildOrThrow(async()=>managerBuilder.build({startTime:process.hrtime(),options:fullOptions})),staticDirs&&effects.push(copyAllStaticFilesRelativeToMain(staticDirs,options.outputDir,options.configDir));let coreServerPublicDir=(0,import_path7.join)((0,import_path7.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(!options.ignorePreview){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},normalizedStories=(0,import_core_common5.normalizeStories)(stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,indexers,docs:docsOptions,build:build2});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),effects.push(extractStoriesJson((0,import_path7.join)(options.outputDir,"index.json"),initializedStoryIndexGenerator))}core?.disableProjectJson||effects.push(extractStorybookMetadata((0,import_path7.join)(options.outputDir,"project.json"),options.configDir)),options.debugWebpack&&(0,import_core_common5.logConfig)("Preview webpack config",await previewBuilder.getConfig(fullOptions)),options.ignorePreview?import_node_logger5.logger.info("=> Not building preview"):import_node_logger5.logger.info("=> Building preview..");let startTime=process.hrtime();await Promise.all([...options.ignorePreview?[]:[previewBuilder.build({startTime,options:fullOptions}).then(async previewStats=>{import_node_logger5.logger.trace({message:"=> Preview built",time:process.hrtime(startTime)});let statsOption=options.webpackStatsJson||options.statsJson;if(statsOption){let target=statsOption===!0?options.outputDir:statsOption;await outputStats(target,previewStats)}}).catch(error=>{throw import_node_logger5.logger.error("=> Failed to build the preview"),process.exitCode=1,error})],...effects]),core?.disableTelemetry||effects.push(initializedStoryIndexGenerator.then(async generator=>{let storyIndex=await 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_common12=require("@storybook/core-common"),import_prompts2=__toESM(require("prompts")),import_tiny_invariant4=__toESM(require("tiny-invariant")),import_global2=require("@storybook/global"),import_telemetry5=require("@storybook/telemetry"),import_path9=require("path"),import_node_logger14=require("@storybook/node-logger"),import_ts_dedent7=require("ts-dedent"),import_fs_extra10=require("fs-extra"),import_server_errors4=require("@storybook/core-events/server-errors");var import_express3=__toESM(require("express")),import_compression=__toESM(require("compression")),import_tiny_invariant3=__toESM(require("tiny-invariant")),import_core_common8=require("@storybook/core-common"),import_node_logger10=require("@storybook/node-logger"),import_server_errors3=require("@storybook/core-events/server-errors");var import_path8=__toESM(require("path")),import_fs2=__toESM(require("fs")),fileExists=basename4=>[".js",".cjs"].reduce((found,ext)=>{let filename=`${basename4}${ext}`;return!found&&import_fs2.default.existsSync(filename)?filename:found},"");function getMiddleware(configDir){let middlewarePath=fileExists(import_path8.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,initialPath){let address=new URL(`${proto}://localhost:${port}/`),networkAddress=new URL(`${proto}://${host||import_ip.default.address()}:${port}/`);if(initialPath){let searchParams=`?path=${decodeURIComponent(initialPath.startsWith("/")?initialPath:`/${initialPath}`)}`;address.search=searchParams,networkAddress.search=searchParams}return{address:address.href,networkAddress:networkAddress.href}}var getServerPort=(port,{exactPort}={})=>(0,import_detect_port.default)(port).then(freePort=>(freePort!==port&&exactPort&&process.exit(-1),freePort)).catch(error=>{import_node_logger6.logger.error(error),process.exit(-1)}),getServerChannelUrl=(port,{https:https3})=>`${https3?"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"),import_channels=require("@storybook/channels"),ServerChannelTransport=class{constructor(server){this.socket=new import_ws.WebSocketServer({noServer:!0}),server.on("upgrade",(request,socket,head)=>{request.url==="/storybook-server-channel"&&this.socket.handleUpgrade(request,socket,head,ws=>{this.socket.emit("connection",ws,request)})}),this.socket.on("connection",wss=>{wss.on("message",raw=>{let data=raw.toString(),event=typeof data=="string"&&(0,import_telejson.isJSON)(data)?(0,import_telejson.parse)(data,{allowFunction:!1,allowClass:!1}):data;this.handler?.(event)})})}setHandler(handler){this.handler=handler}send(event){let data=(0,import_telejson.stringify)(event,{maxDepth:15,allowFunction:!1,allowClass:!1});Array.from(this.socket.clients).filter(c=>c.readyState===import_ws.default.OPEN).forEach(client=>client.send(data))}};function getServerChannel(server){let transports=[new ServerChannelTransport(server)];return new import_channels.Channel({transports,async:!0})}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_dedent3=require("ts-dedent");function openInBrowser(address){let browserEnvVar=process.env.BROWSER,userBrowserIsChrome=browserEnvVar==="chrome"||browserEnvVar==="chromium"||browserEnvVar==="brave"||browserEnvVar==="com.brave.browser",openOptions=browserEnvVar?{app:{name:browserEnvVar}}:{};(0,import_x_default_browser.default)(async(err,res)=>{try{res&&(res.isChrome||res.isChromium||res.identity==="com.brave.browser"||userBrowserIsChrome)?await(0,import_better_opn.default)(address):await(0,import_open.default)(address,openOptions)}catch{import_node_logger8.logger.error(import_ts_dedent3.dedent`
|
|
24
|
+
- 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||(0,import_preview_api.userOrAutoTitleFromSpecifier)(importPath,specifier,result.title);(0,import_tiny_invariant.default)(title,"makeTitle created an undefined title. This happens when a specifier's doesn't have any matches in its fileName");let defaultName=this.options.docs.defaultName??"Docs",name=result.name||(csfEntry?autoName(importPath,csfEntry.importPath,defaultName):defaultName),id=(0,import_csf.toId)(csfEntry?.metaId||title,name),tags=(0,import_csf.combineTags)(...projectTags,...csfEntry?.tags??[],...result.metaTags??[],csfEntry?"attached-mdx":"unattached-mdx");return{id,title,name,importPath,storiesImports:sortedDependencies.map(dep=>dep.entries[0].importPath),type:"docs",tags}}catch(err){throw err&&err.source?.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){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,storySortParameter){let sortableStories=Object.values(entries),fileNameOrder=this.storyFileNames();return(0,import_preview_api.sortStoriesV7)(sortableStories,storySortParameter,fileNameOrder),sortableStories.reduce((acc,item)=>(acc[item.id]=item,acc),{})}async getIndex(){if(this.lastIndex)return this.lastIndex;if(this.lastError)throw this.lastError;let previewCode=await this.getPreviewCode(),projectTags=this.getProjectTags(previewCode),storiesList=await this.ensureExtracted({projectTags});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){err instanceof IndexingError&&duplicateErrors.push(err)}}),duplicateErrors.length)throw new MultipleIndexingError(duplicateErrors);let sorted=await this.sortStories(indexEntries,previewCode&&(0,import_csf_tools.getStorySortParameter)(previewCode));return this.lastIndex={v:4,entries:sorted},this.lastIndex}catch(err){throw this.lastError=err==null||err instanceof Error?err:void 0,(0,import_tiny_invariant.default)(this.lastError),import_node_logger4.logger.warn(`\u{1F6A8} ${this.lastError.toString()}`),this.lastError}}invalidateAll(){this.specifierToCache.forEach(cache3=>{Object.keys(cache3).forEach(key=>{cache3[key]=!1})}),this.lastIndex=null,this.lastError=null}invalidate(specifier,importPath,removed){let absolutePath=slash(import_path7.default.resolve(this.options.workingDir,importPath)),cache3=this.specifierToCache.get(specifier);(0,import_tiny_invariant.default)(cache3,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`);let cacheEntry=cache3[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 cache3[absolutePath]}else cache3[absolutePath]=!1;this.lastIndex=null,this.lastError=null}async getPreviewCode(){let previewFile=["js","jsx","ts","tsx","mjs","cjs","mts"].map(ext=>import_path7.default.join(this.options.configDir,`preview.${ext}`)).find(fname=>import_fs_extra6.default.existsSync(fname));return previewFile&&(await import_fs_extra6.default.readFile(previewFile,"utf-8")).toString()}getProjectTags(previewCode){let projectTags=[],defaultTags=["dev","test"],extraTags=this.options.docs.autodocs===!0?[AUTODOCS_TAG]:[];return previewCode&&(projectTags=(0,import_csf_tools.loadConfig)(previewCode).parse().getFieldValue(["tags"])??[]),[...defaultTags,...projectTags,...extraTags]}storyFileNames(){return Array.from(this.specifierToCache.values()).flatMap(r2=>Object.keys(r2))}};var PAGE_REGEX=/(page|screen)/i,isPageStory=storyId=>PAGE_REGEX.test(storyId),isCLIExampleEntry=entry=>["example-introduction--docs","configure-your-project--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),isAnyExampleEntry=entry=>entry.id.startsWith("example-button--")||entry.id.startsWith("example-header--")||entry.id.startsWith("example-page--");function summarizeIndex(storyIndex){let storyCount=0,componentTitles=new Set,exampleStoryCount=0,onboardingStoryCount=0,onboardingDocsCount=0,exampleDocsCount=0,pageStoryCount=0,playStoryCount=0,autodocsCount=0,storiesMdxCount=0,mdxCount=0;Object.values(storyIndex.entries).forEach(entry=>{isCLIExampleEntry(entry)?(entry.type==="story"&&(exampleStoryCount+=1),entry.type==="docs"&&(exampleDocsCount+=1)):isAnyExampleEntry(entry)?(entry.type==="story"&&(onboardingStoryCount+=1),entry.type==="docs"&&(onboardingDocsCount+=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,onboardingStoryCount,onboardingDocsCount,version:storyIndex.v}}var import_server_errors2=require("@storybook/core-events/server-errors");async function buildOrThrow(callback){try{return await callback()}catch(err){let builderErrors=err.errors;throw builderErrors&&builderErrors.find(er=>er.text?.includes("No matching export"))?new import_server_errors2.NoMatchingExportError(err):err}}async function buildStaticStandalone(options){if(options.configType="PRODUCTION",options.outputDir==="")throw new Error("Won't remove current directory. Check your outputDir!");if(options.outputDir=(0,import_path8.resolve)(options.outputDir),options.configDir=(0,import_path8.resolve)(options.configDir),import_node_logger5.logger.info(import_chalk5.default`=> Cleaning outputDir: {cyan ${(0,import_path8.relative)(process.cwd(),options.outputDir)}}`),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_common5.loadMainConfig)(options),{framework}=config,corePresets=[],frameworkName=typeof framework=="string"?framework:framework?.name;frameworkName?corePresets.push((0,import_path8.join)(frameworkName,"preset")):options.ignorePreview||import_node_logger5.logger.warn(`you have not specified a framework in your ${options.configDir}/main.js`),import_node_logger5.logger.info("=> Loading presets");let presets=await(0,import_core_common5.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...corePresets],overridePresets:[require.resolve("@storybook/core-server/dist/presets/common-override-preset")],isCritical:!0,...options}),{renderer}=await presets.apply("core",{}),build2=await presets.apply("build",{}),[previewBuilder,managerBuilder]=await getBuilders({...options,presets,build:build2}),resolvedRenderer=renderer?(0,import_core_common5.resolveAddonName)(options.configDir,renderer,options):void 0;presets=await(0,import_core_common5.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...managerBuilder.corePresets||[],...previewBuilder.corePresets||[],...resolvedRenderer?[resolvedRenderer]:[],...corePresets],overridePresets:[...previewBuilder.overridePresets||[],require.resolve("@storybook/core-server/dist/presets/common-override-preset")],...options,build:build2});let[features,core,staticDirs,indexers,stories,docsOptions]=await Promise.all([presets.apply("features"),presets.apply("core"),presets.apply("staticDirs"),presets.apply("experimental_indexers",[]),presets.apply("stories"),presets.apply("docs",{})]),fullOptions={...options,presets,features,build:build2},effects=[];import_global.global.FEATURES=features,await buildOrThrow(async()=>managerBuilder.build({startTime:process.hrtime(),options:fullOptions})),staticDirs&&effects.push(copyAllStaticFilesRelativeToMain(staticDirs,options.outputDir,options.configDir));let coreServerPublicDir=(0,import_path8.join)((0,import_path8.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(!options.ignorePreview){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},normalizedStories=(0,import_core_common5.normalizeStories)(stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,indexers,docs:docsOptions,build:build2});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),effects.push(extractStoriesJson((0,import_path8.join)(options.outputDir,"index.json"),initializedStoryIndexGenerator))}core?.disableProjectJson||effects.push(extractStorybookMetadata((0,import_path8.join)(options.outputDir,"project.json"),options.configDir)),options.debugWebpack&&(0,import_core_common5.logConfig)("Preview webpack config",await previewBuilder.getConfig(fullOptions)),options.ignorePreview?import_node_logger5.logger.info("=> Not building preview"):import_node_logger5.logger.info("=> Building preview..");let startTime=process.hrtime();await Promise.all([...options.ignorePreview?[]:[previewBuilder.build({startTime,options:fullOptions}).then(async previewStats=>{import_node_logger5.logger.trace({message:"=> Preview built",time:process.hrtime(startTime)});let statsOption=options.webpackStatsJson||options.statsJson;if(statsOption){let target=statsOption===!0?options.outputDir:statsOption;await outputStats(target,previewStats)}}).catch(error=>{throw import_node_logger5.logger.error("=> Failed to build the preview"),process.exitCode=1,error})],...effects]),core?.disableTelemetry||effects.push(initializedStoryIndexGenerator.then(async generator=>{let storyIndex=await 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_common12=require("@storybook/core-common"),import_prompts2=__toESM(require("prompts")),import_tiny_invariant4=__toESM(require("tiny-invariant")),import_global2=require("@storybook/global"),import_telemetry5=require("@storybook/telemetry"),import_path10=require("path"),import_node_logger14=require("@storybook/node-logger"),import_ts_dedent7=require("ts-dedent"),import_fs_extra10=require("fs-extra"),import_server_errors4=require("@storybook/core-events/server-errors");var import_express3=__toESM(require("express")),import_compression=__toESM(require("compression")),import_tiny_invariant3=__toESM(require("tiny-invariant")),import_core_common8=require("@storybook/core-common"),import_node_logger10=require("@storybook/node-logger"),import_server_errors3=require("@storybook/core-events/server-errors");var import_path9=__toESM(require("path")),import_fs2=__toESM(require("fs")),fileExists=basename5=>[".js",".cjs"].reduce((found,ext)=>{let filename=`${basename5}${ext}`;return!found&&import_fs2.default.existsSync(filename)?filename:found},"");function getMiddleware(configDir){let middlewarePath=fileExists(import_path9.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,initialPath){let address=new URL(`${proto}://localhost:${port}/`),networkAddress=new URL(`${proto}://${host||import_ip.default.address()}:${port}/`);if(initialPath){let searchParams=`?path=${decodeURIComponent(initialPath.startsWith("/")?initialPath:`/${initialPath}`)}`;address.search=searchParams,networkAddress.search=searchParams}return{address:address.href,networkAddress:networkAddress.href}}var getServerPort=(port,{exactPort}={})=>(0,import_detect_port.default)(port).then(freePort=>(freePort!==port&&exactPort&&process.exit(-1),freePort)).catch(error=>{import_node_logger6.logger.error(error),process.exit(-1)}),getServerChannelUrl=(port,{https:https3})=>`${https3?"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"),import_channels=require("@storybook/channels"),ServerChannelTransport=class{constructor(server){this.socket=new import_ws.WebSocketServer({noServer:!0}),server.on("upgrade",(request,socket,head)=>{request.url==="/storybook-server-channel"&&this.socket.handleUpgrade(request,socket,head,ws=>{this.socket.emit("connection",ws,request)})}),this.socket.on("connection",wss=>{wss.on("message",raw=>{let data=raw.toString(),event=typeof data=="string"&&(0,import_telejson.isJSON)(data)?(0,import_telejson.parse)(data,{allowFunction:!1,allowClass:!1}):data;this.handler?.(event)})})}setHandler(handler){this.handler=handler}send(event){let data=(0,import_telejson.stringify)(event,{maxDepth:15,allowFunction:!1,allowClass:!1});Array.from(this.socket.clients).filter(c=>c.readyState===import_ws.default.OPEN).forEach(client=>client.send(data))}};function getServerChannel(server){let transports=[new ServerChannelTransport(server)];return new import_channels.Channel({transports,async:!0})}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_dedent3=require("ts-dedent");function openInBrowser(address){let browserEnvVar=process.env.BROWSER,userBrowserIsChrome=browserEnvVar==="chrome"||browserEnvVar==="chromium"||browserEnvVar==="brave"||browserEnvVar==="com.brave.browser",openOptions=browserEnvVar?{app:{name:browserEnvVar}}:{};(0,import_x_default_browser.default)(async(err,res)=>{try{res&&(res.isChrome||res.isChromium||res.identity==="com.brave.browser"||userBrowserIsChrome)?await(0,import_better_opn.default)(address):await(0,import_open.default)(address,openOptions)}catch{import_node_logger8.logger.error(import_ts_dedent3.dedent`
|
|
25
25
|
Could not open ${address} inside a browser. If you're running this command inside a
|
|
26
26
|
docker container or on a CI, you need to pass the '--ci' flag to prevent opening a
|
|
27
27
|
browser by default.
|
|
28
|
-
`)}})}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 workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},stories=options.presets.apply("stories"),indexers=options.presets.apply("experimental_indexers",[]),docsOptions=options.presets.apply("docs",{}),normalizedStories=(0,import_core_common6.normalizeStories)(await stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,indexers:await indexers,docs:await docsOptions,workingDir}),initializedStoryIndexGenerator=generator.initialize().then(()=>generator);return useStoriesJson({router,initializedStoryIndexGenerator,normalizedStories,serverChannel,workingDir}),initializedStoryIndexGenerator}var import_tiny_invariant2=__toESM(require("tiny-invariant")),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,skipPrompt}){if(cliOptions.disableTelemetry)return"none";if(!presetOptions)return"full";let core=await(await(0,import_core_common7.loadAllPresets)(presetOptions)).apply("core");if(core?.enableCrashReports!==void 0)return core.enableCrashReports?"full":"error";if(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";if(skipPrompt)return"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(0,import_telemetry3.getPrecedingUpgrade)(),error=_error,errorHash;"message"in error?errorHash=error.message?(0,import_telemetry3.oneWayHash)(error.message):"EMPTY_MESSAGE":errorHash="NO_MESSAGE";let{code,name,category}=error;await(0,import_telemetry3.telemetry)("error",{code,name,category,eventType,precedingUpgrade,error:errorLevel==="full"?error:void 0,errorHash,isErrorInstance:error instanceof Error},{immediate:!0,configDir:options.cliOptions.configDir||options.presetOptions?.configDir,enableCrashReports:errorLevel==="full"})}}catch{}}async function withTelemetry(eventType,options,run){let enableTelemetry=!(options.cliOptions.disableTelemetry||options.cliOptions.test===!0),canceled=!1;async function cancelTelemetry(){canceled=!0,enableTelemetry&&await(0,import_telemetry3.telemetry)("canceled",{eventType},{stripMetadata:!0,immediate:!0}),process.exit(0)}eventType==="init"&&process.on("SIGINT",cancelTelemetry),enableTelemetry&&(0,import_telemetry3.telemetry)("boot",{eventType},{stripMetadata:!0});try{return await run()}catch(error){if(canceled)return;let{printError=import_node_logger9.logger.error}=options;throw printError(error),enableTelemetry&&await sendTelemetryError(error,eventType,options),error}finally{process.off("SIGINIT",cancelTelemetry)}}async function doTelemetry(core,initializedStoryIndexGenerator,options){core?.disableTelemetry||initializedStoryIndexGenerator.then(async generator=>{let storyIndex;try{storyIndex=await generator?.getIndex()}catch(err){if(!(err instanceof Error))throw new Error("encountered a non-recoverable error");sendTelemetryError(err,"dev",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]}});return}let{versionCheck,versionUpdates}=options;(0,import_tiny_invariant2.default)(!versionUpdates||versionUpdates&&versionCheck,"versionCheck should be defined when versionUpdates is true");let payload={precedingUpgrade:await(0,import_telemetry4.getPrecedingUpgrade)()};storyIndex&&Object.assign(payload,{versionStatus:versionUpdates&&versionCheck?versionStatus(versionCheck):"disabled",storyIndex:summarizeIndex(storyIndex)}),(0,import_telemetry4.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=(0,import_express3.default)(),[server,features,core]=await Promise.all([getServer(app,options),options.presets.apply("features"),options.presets.apply("core")]),serverChannel=await options.presets.apply("experimental_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?.crossOriginIsolated??!1)),app.use(getCachingMiddleware()),getMiddleware(options.configDir)(router),app.use(router);let{port,host,initialPath}=options;(0,import_tiny_invariant3.default)(port,"expected options to have a port");let proto=options.https?"https":"http",{address,networkAddress}=getServerAddresses(port,host,proto,initialPath),listening=new Promise((resolve3,reject)=>{server.listen({port,host},error=>error?reject(error):resolve3())});if(!core?.builder)throw new import_server_errors3.MissingBuilderError;let 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&&(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||(import_node_logger10.logger.info("=> Starting preview.."),previewStarted=previewBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}).catch(async e2=>{throw import_node_logger10.logger.error("=> Failed to build the preview"),process.exitCode=1,await managerBuilder?.bail().catch(),await previewBuilder?.bail().catch(),e2})),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 import_chalk8=__toESM(require("chalk")),import_node_logger12=require("@storybook/node-logger");var import_node_process=__toESM(require("process"),1);function ansiRegex({onlyFirst=!1}={}){let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}var regex=ansiRegex();function stripAnsi(string){if(typeof string!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);return string.replace(regex,"")}var import_eastasianwidth=__toESM(require_eastasianwidth(),1),import_emoji_regex=__toESM(require_emoji_regex(),1);function stringWidth(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}var import_chalk6=__toESM(require("chalk"),1);var import_eastasianwidth2=__toESM(require_eastasianwidth(),1),import_emoji_regex2=__toESM(require_emoji_regex(),1);function stringWidth2(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex2.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth2.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}function widestLine(string){let lineWidth=0;for(let line of string.split(`
|
|
28
|
+
`)}})}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 workingDir=process.cwd(),configDir=options.configDir,directories={configDir,workingDir},stories=options.presets.apply("stories"),indexers=options.presets.apply("experimental_indexers",[]),docsOptions=options.presets.apply("docs",{}),normalizedStories=(0,import_core_common6.normalizeStories)(await stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,indexers:await indexers,docs:await docsOptions,workingDir}),initializedStoryIndexGenerator=generator.initialize().then(()=>generator);return useStoriesJson({router,initializedStoryIndexGenerator,normalizedStories,serverChannel,workingDir,configDir}),initializedStoryIndexGenerator}var import_tiny_invariant2=__toESM(require("tiny-invariant")),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,skipPrompt}){if(cliOptions.disableTelemetry)return"none";if(!presetOptions)return"full";let core=await(await(0,import_core_common7.loadAllPresets)(presetOptions)).apply("core");if(core?.enableCrashReports!==void 0)return core.enableCrashReports?"full":"error";if(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";if(skipPrompt)return"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(0,import_telemetry3.getPrecedingUpgrade)(),error=_error,errorHash;"message"in error?errorHash=error.message?(0,import_telemetry3.oneWayHash)(error.message):"EMPTY_MESSAGE":errorHash="NO_MESSAGE";let{code,name,category}=error;await(0,import_telemetry3.telemetry)("error",{code,name,category,eventType,precedingUpgrade,error:errorLevel==="full"?error:void 0,errorHash,isErrorInstance:error instanceof Error},{immediate:!0,configDir:options.cliOptions.configDir||options.presetOptions?.configDir,enableCrashReports:errorLevel==="full"})}}catch{}}async function withTelemetry(eventType,options,run){let enableTelemetry=!(options.cliOptions.disableTelemetry||options.cliOptions.test===!0),canceled=!1;async function cancelTelemetry(){canceled=!0,enableTelemetry&&await(0,import_telemetry3.telemetry)("canceled",{eventType},{stripMetadata:!0,immediate:!0}),process.exit(0)}eventType==="init"&&process.on("SIGINT",cancelTelemetry),enableTelemetry&&(0,import_telemetry3.telemetry)("boot",{eventType},{stripMetadata:!0});try{return await run()}catch(error){if(canceled)return;let{printError=import_node_logger9.logger.error}=options;throw printError(error),enableTelemetry&&await sendTelemetryError(error,eventType,options),error}finally{process.off("SIGINIT",cancelTelemetry)}}async function doTelemetry(core,initializedStoryIndexGenerator,options){core?.disableTelemetry||initializedStoryIndexGenerator.then(async generator=>{let storyIndex;try{storyIndex=await generator?.getIndex()}catch(err){if(!(err instanceof Error))throw new Error("encountered a non-recoverable error");sendTelemetryError(err,"dev",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]}});return}let{versionCheck,versionUpdates}=options;(0,import_tiny_invariant2.default)(!versionUpdates||versionUpdates&&versionCheck,"versionCheck should be defined when versionUpdates is true");let payload={precedingUpgrade:await(0,import_telemetry4.getPrecedingUpgrade)()};storyIndex&&Object.assign(payload,{versionStatus:versionUpdates&&versionCheck?versionStatus(versionCheck):"disabled",storyIndex:summarizeIndex(storyIndex)}),(0,import_telemetry4.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=(0,import_express3.default)(),[server,features,core]=await Promise.all([getServer(app,options),options.presets.apply("features"),options.presets.apply("core")]),serverChannel=await options.presets.apply("experimental_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?.crossOriginIsolated??!1)),app.use(getCachingMiddleware()),getMiddleware(options.configDir)(router),app.use(router);let{port,host,initialPath}=options;(0,import_tiny_invariant3.default)(port,"expected options to have a port");let proto=options.https?"https":"http",{address,networkAddress}=getServerAddresses(port,host,proto,initialPath),listening=new Promise((resolve3,reject)=>{server.listen({port,host},error=>error?reject(error):resolve3())});if(!core?.builder)throw new import_server_errors3.MissingBuilderError;let 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&&(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||(import_node_logger10.logger.info("=> Starting preview.."),previewStarted=previewBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}).catch(async e2=>{throw import_node_logger10.logger.error("=> Failed to build the preview"),process.exitCode=1,await managerBuilder?.bail().catch(),await previewBuilder?.bail().catch(),e2})),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 import_chalk8=__toESM(require("chalk")),import_node_logger12=require("@storybook/node-logger");var import_node_process=__toESM(require("process"),1);function ansiRegex({onlyFirst=!1}={}){let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}var regex=ansiRegex();function stripAnsi(string){if(typeof string!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);return string.replace(regex,"")}var import_eastasianwidth=__toESM(require_eastasianwidth(),1),import_emoji_regex=__toESM(require_emoji_regex(),1);function stringWidth(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}var import_chalk6=__toESM(require("chalk"),1);var import_eastasianwidth2=__toESM(require_eastasianwidth(),1),import_emoji_regex2=__toESM(require_emoji_regex(),1);function stringWidth2(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex2.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth2.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}function widestLine(string){let lineWidth=0;for(let line of string.split(`
|
|
29
29
|
`))lineWidth=Math.max(lineWidth,stringWidth2(line));return lineWidth}var import_cli_boxes=__toESM(require_cli_boxes(),1);var UPPERCASE=/[\p{Lu}]/u,LOWERCASE=/[\p{Ll}]/u,LEADING_CAPITAL=/^[\p{Lu}](?![\p{Lu}])/gu,IDENTIFIER=/([\p{Alpha}\p{N}_]|$)/u,SEPARATORS=/[_.\- ]+/,LEADING_SEPARATORS=new RegExp("^"+SEPARATORS.source),SEPARATORS_AND_IDENTIFIER=new RegExp(SEPARATORS.source+IDENTIFIER.source,"gu"),NUMBERS_AND_IDENTIFIER=new RegExp("\\d+"+IDENTIFIER.source,"gu"),preserveCamelCase=(string,toLowerCase,toUpperCase,preserveConsecutiveUppercase2)=>{let isLastCharLower=!1,isLastCharUpper=!1,isLastLastCharUpper=!1,isLastLastCharPreserved=!1;for(let index=0;index<string.length;index++){let character=string[index];isLastLastCharPreserved=index>2?string[index-3]==="-":!0,isLastCharLower&&UPPERCASE.test(character)?(string=string.slice(0,index)+"-"+string.slice(index),isLastCharLower=!1,isLastLastCharUpper=isLastCharUpper,isLastCharUpper=!0,index++):isLastCharUpper&&isLastLastCharUpper&&LOWERCASE.test(character)&&(!isLastLastCharPreserved||preserveConsecutiveUppercase2)?(string=string.slice(0,index-1)+"-"+string.slice(index-1),isLastLastCharUpper=isLastCharUpper,isLastCharUpper=!1,isLastCharLower=!0):(isLastCharLower=toLowerCase(character)===character&&toUpperCase(character)!==character,isLastLastCharUpper=isLastCharUpper,isLastCharUpper=toUpperCase(character)===character&&toLowerCase(character)!==character)}return string},preserveConsecutiveUppercase=(input,toLowerCase)=>(LEADING_CAPITAL.lastIndex=0,input.replace(LEADING_CAPITAL,m1=>toLowerCase(m1))),postProcess=(input,toUpperCase)=>(SEPARATORS_AND_IDENTIFIER.lastIndex=0,NUMBERS_AND_IDENTIFIER.lastIndex=0,input.replace(SEPARATORS_AND_IDENTIFIER,(_,identifier)=>toUpperCase(identifier)).replace(NUMBERS_AND_IDENTIFIER,m2=>toUpperCase(m2)));function camelCase(input,options){if(!(typeof input=="string"||Array.isArray(input)))throw new TypeError("Expected the input to be `string | string[]`");if(options={pascalCase:!1,preserveConsecutiveUppercase:!1,...options},Array.isArray(input)?input=input.map(x2=>x2.trim()).filter(x2=>x2.length).join("-"):input=input.trim(),input.length===0)return"";let toLowerCase=options.locale===!1?string=>string.toLowerCase():string=>string.toLocaleLowerCase(options.locale),toUpperCase=options.locale===!1?string=>string.toUpperCase():string=>string.toLocaleUpperCase(options.locale);return input.length===1?SEPARATORS.test(input)?"":options.pascalCase?toUpperCase(input):toLowerCase(input):(input!==toLowerCase(input)&&(input=preserveCamelCase(input,toLowerCase,toUpperCase,options.preserveConsecutiveUppercase)),input=input.replace(LEADING_SEPARATORS,""),input=options.preserveConsecutiveUppercase?preserveConsecutiveUppercase(input,toLowerCase):toLowerCase(input),options.pascalCase&&(input=toUpperCase(input.charAt(0))+input.slice(1)),postProcess(input,toUpperCase))}var import_ansi_align=__toESM(require_ansi_align(),1);var import_eastasianwidth3=__toESM(require_eastasianwidth(),1),import_emoji_regex3=__toESM(require_emoji_regex(),1);function stringWidth3(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0,import_emoji_regex3.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth3.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1}}return width}var wrapAnsi16=(offset=0)=>code=>`\x1B[${code+offset}m`,wrapAnsi256=(offset=0)=>code=>`\x1B[${38+offset};5;${code}m`,wrapAnsi16m=(offset=0)=>(red,green,blue)=>`\x1B[${38+offset};2;${red};${green};${blue}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},modifierNames=Object.keys(styles.modifier),foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor),colorNames=[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){let codes=new Map;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1})}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(10),styles.bgColor.ansi256=wrapAnsi256(10),styles.bgColor.ansi16m=wrapAnsi16m(10),Object.defineProperties(styles,{rgbToAnsi256:{value:(red,green,blue)=>red===green&&green===blue?red<8?16:red>248?231:Math.round((red-8)/247*24)+232:16+36*Math.round(red/255*5)+6*Math.round(green/255*5)+Math.round(blue/255*5),enumerable:!1},hexToRgb:{value:hex=>{let matches=/[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));if(!matches)return[0,0,0];let[colorString]=matches;colorString.length===3&&(colorString=[...colorString].map(character=>character+character).join(""));let integer=Number.parseInt(colorString,16);return[integer>>16&255,integer>>8&255,integer&255]},enumerable:!1},hexToAnsi256:{value:hex=>styles.rgbToAnsi256(...styles.hexToRgb(hex)),enumerable:!1},ansi256ToAnsi:{value:code=>{if(code<8)return 30+code;if(code<16)return 90+(code-8);let red,green,blue;if(code>=232)red=((code-232)*10+8)/255,green=red,blue=red;else{code-=16;let remainder=code%36;red=Math.floor(code/36)/5,green=Math.floor(remainder/6)/5,blue=remainder%6/5}let value=Math.max(red,green,blue)*2;if(value===0)return 30;let result=30+(Math.round(blue)<<2|Math.round(green)<<1|Math.round(red));return value===2&&(result+=60),result},enumerable:!1},rgbToAnsi:{value:(red,green,blue)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(red,green,blue)),enumerable:!1},hexToAnsi:{value:hex=>styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),enumerable:!1}}),styles}var ansiStyles=assembleStyles(),ansi_styles_default=ansiStyles;var ESCAPES=new Set(["\x1B","\x9B"]),END_CODE=39,ANSI_ESCAPE_BELL="\x07",ANSI_CSI="[",ANSI_OSC="]",ANSI_SGR_TERMINATOR="m",ANSI_ESCAPE_LINK=`${ANSI_OSC}8;;`,wrapAnsiCode=code=>`${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`,wrapAnsiHyperlink=uri=>`${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`,wordLengths=string=>string.split(" ").map(character=>stringWidth3(character)),wrapWord=(rows,word,columns)=>{let characters=[...word],isInsideEscape=!1,isInsideLinkEscape=!1,visible=stringWidth3(stripAnsi(rows[rows.length-1]));for(let[index,character]of characters.entries()){let characterLength=stringWidth3(character);if(visible+characterLength<=columns?rows[rows.length-1]+=character:(rows.push(character),visible=0),ESCAPES.has(character)&&(isInsideEscape=!0,isInsideLinkEscape=characters.slice(index+1).join("").startsWith(ANSI_ESCAPE_LINK)),isInsideEscape){isInsideLinkEscape?character===ANSI_ESCAPE_BELL&&(isInsideEscape=!1,isInsideLinkEscape=!1):character===ANSI_SGR_TERMINATOR&&(isInsideEscape=!1);continue}visible+=characterLength,visible===columns&&index<characters.length-1&&(rows.push(""),visible=0)}!visible&&rows[rows.length-1].length>0&&rows.length>1&&(rows[rows.length-2]+=rows.pop())},stringVisibleTrimSpacesRight=string=>{let words=string.split(" "),last=words.length;for(;last>0&&!(stringWidth3(words[last-1])>0);)last--;return last===words.length?string:words.slice(0,last).join(" ")+words.slice(last).join("")},exec=(string,columns,options={})=>{if(options.trim!==!1&&string.trim()==="")return"";let returnValue="",escapeCode,escapeUrl,lengths=wordLengths(string),rows=[""];for(let[index,word]of string.split(" ").entries()){options.trim!==!1&&(rows[rows.length-1]=rows[rows.length-1].trimStart());let rowLength=stringWidth3(rows[rows.length-1]);if(index!==0&&(rowLength>=columns&&(options.wordWrap===!1||options.trim===!1)&&(rows.push(""),rowLength=0),(rowLength>0||options.trim===!1)&&(rows[rows.length-1]+=" ",rowLength++)),options.hard&&lengths[index]>columns){let remainingColumns=columns-rowLength,breaksStartingThisLine=1+Math.floor((lengths[index]-remainingColumns-1)/columns);Math.floor((lengths[index]-1)/columns)<breaksStartingThisLine&&rows.push(""),wrapWord(rows,word,columns);continue}if(rowLength+lengths[index]>columns&&rowLength>0&&lengths[index]>0){if(options.wordWrap===!1&&rowLength<columns){wrapWord(rows,word,columns);continue}rows.push("")}if(rowLength+lengths[index]>columns&&options.wordWrap===!1){wrapWord(rows,word,columns);continue}rows[rows.length-1]+=word}options.trim!==!1&&(rows=rows.map(row=>stringVisibleTrimSpacesRight(row)));let pre=[...rows.join(`
|
|
30
30
|
`)];for(let[index,character]of pre.entries()){if(returnValue+=character,ESCAPES.has(character)){let{groups}=new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join(""))||{groups:{}};if(groups.code!==void 0){let code2=Number.parseFloat(groups.code);escapeCode=code2===END_CODE?void 0:code2}else groups.uri!==void 0&&(escapeUrl=groups.uri.length===0?void 0:groups.uri)}let code=ansi_styles_default.codes.get(Number(escapeCode));pre[index+1]===`
|
|
31
31
|
`?(escapeUrl&&(returnValue+=wrapAnsiHyperlink("")),escapeCode&&code&&(returnValue+=wrapAnsiCode(code))):character===`
|
|
@@ -62,5 +62,5 @@ ${updateMessage}`:""}
|
|
|
62
62
|
https://storybook.js.org/docs/essentials/actions#via-storybooktest-fn-spy-function
|
|
63
63
|
|
|
64
64
|
The build used by the addon for snapshot testing doesn't take the regex into account, which can cause hard to debug problems when a snapshot depends on the presence of action props.
|
|
65
|
-
`;console.warn(message)}}})}async function buildDevStandalone(options){let{packageJson,versionUpdates}=options;(0,import_tiny_invariant4.default)(packageJson.version!==void 0,`Expected package.json#version to be defined in the "${packageJson.name}" package}`);let[port,versionCheck]=await Promise.all([getServerPort(options.port,{exactPort:options.exactPort}),versionUpdates?updateCheck(packageJson.version):Promise.resolve({success:!1,cached:!1,data:{},time:Date.now()})]);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)}let rootDir=(0,import_core_common12.getProjectRoot)(),configDir=(0,
|
|
66
|
-
- Refer to the migration guide at https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#commonjs-with-vite-is-deprecated`),mainJsPath=(0,import_core_common12.serverResolve)((0,
|
|
65
|
+
`;console.warn(message)}}})}async function buildDevStandalone(options){let{packageJson,versionUpdates}=options;(0,import_tiny_invariant4.default)(packageJson.version!==void 0,`Expected package.json#version to be defined in the "${packageJson.name}" package}`);let[port,versionCheck]=await Promise.all([getServerPort(options.port,{exactPort:options.exactPort}),versionUpdates?updateCheck(packageJson.version):Promise.resolve({success:!1,cached:!1,data:{},time:Date.now()})]);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)}let rootDir=(0,import_core_common12.getProjectRoot)(),configDir=(0,import_path10.resolve)(options.configDir),cacheKey=(0,import_telemetry5.oneWayHash)((0,import_path10.relative)(rootDir,configDir)),cacheOutputDir=(0,import_core_common12.resolvePathInStorybookCache)("public",cacheKey),outputDir=(0,import_path10.resolve)(options.outputDir||cacheOutputDir);options.smokeTest&&(outputDir=cacheOutputDir),options.port=port,options.versionCheck=versionCheck,options.configType="DEVELOPMENT",options.configDir=configDir,options.cacheKey=cacheKey,options.outputDir=outputDir,options.serverChannelUrl=getServerChannelUrl(port,options);let config=await(0,import_core_common12.loadMainConfig)(options),{framework}=config,corePresets=[],frameworkName=typeof framework=="string"?framework:framework?.name;options.ignorePreview||(0,import_core_common12.validateFrameworkName)(frameworkName),frameworkName&&corePresets.push((0,import_path10.join)(frameworkName,"preset")),frameworkName=frameworkName||"custom";try{await warnOnIncompatibleAddons(packageJson.version)}catch(e2){console.warn("Storybook failed to check addon compatibility",e2)}try{await warnWhenUsingArgTypesRegex(packageJson,configDir,config)}catch{}let presets=await(0,import_core_common12.loadAllPresets)({corePresets,overridePresets:[require.resolve("@storybook/core-server/dist/presets/common-override-preset")],...options,isCritical:!0}),{renderer,builder,disableTelemetry}=await presets.apply("core",{});if(!builder)throw new import_server_errors4.MissingBuilderError;!options.disableTelemetry&&!disableTelemetry&&versionCheck.success&&!versionCheck.cached&&(0,import_telemetry5.telemetry)("version-update");let builderName=typeof builder=="string"?builder:builder.name,[previewBuilder,managerBuilder]=await Promise.all([getPreviewBuilder(builderName,options.configDir),getManagerBuilder()]);if(builderName.includes("builder-vite")){let deprecationMessage=(0,import_ts_dedent7.dedent)(`Using CommonJS in your main configuration file is deprecated with Vite.
|
|
66
|
+
- Refer to the migration guide at https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#commonjs-with-vite-is-deprecated`),mainJsPath=(0,import_core_common12.serverResolve)((0,import_path10.resolve)(options.configDir||".storybook","main"));/\.c[jt]s$/.test(mainJsPath)&&(0,import_node_logger14.deprecate)(deprecationMessage);let mainJsContent=await(0,import_fs_extra10.readFile)(mainJsPath,"utf-8");/\bmodule\.exports\b|\bexports[.[]|\brequire\s*\(|\bObject\.(?:defineProperty|defineProperties|assign)\s*\(\s*exports\b/.test(mainJsContent)&&(0,import_node_logger14.deprecate)(deprecationMessage)}let resolvedRenderer=renderer&&(0,import_core_common12.resolveAddonName)(options.configDir,renderer,options);presets=await(0,import_core_common12.loadAllPresets)({corePresets:[require.resolve("@storybook/core-server/dist/presets/common-preset"),...managerBuilder.corePresets||[],...previewBuilder.corePresets||[],...resolvedRenderer?[resolvedRenderer]:[],...corePresets],overridePresets:[...previewBuilder.overridePresets||[],require.resolve("@storybook/core-server/dist/presets/common-override-preset")],...options});let features=await presets.apply("features");import_global2.global.FEATURES=features;let fullOptions={...options,presets,features},{address,networkAddress,managerResult,previewResult}=await buildOrThrow(async()=>storybookDevServer(fullOptions)),previewTotalTime=previewResult?.totalTime,managerTotalTime=managerResult?.totalTime,previewStats=previewResult?.stats,managerStats=managerResult?.stats,statsOption=options.webpackStatsJson||options.statsJson;if(statsOption){let target=statsOption===!0?options.outputDir:statsOption;await outputStats(target,previewStats)}if(options.smokeTest){let warnings=[];warnings.push(...managerStats?.toJson()?.warnings||[]);try{warnings.push(...previewStats?.toJson()?.warnings||[])}catch(err){if(!(err instanceof import_server_errors4.NoStatsForViteDevError))throw err}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;options.quiet||outputStartupInformation({updateInfo:versionCheck,version:packageJson.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})?.packageJson,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,getErrorLevel,getPreviewBodyTemplate,getPreviewHeadTemplate,sendTelemetryError,withTelemetry});
|
package/dist/index.mjs
CHANGED
|
@@ -19,8 +19,8 @@ import fs3 from 'fs';
|
|
|
19
19
|
import uniq from 'lodash/uniq.js';
|
|
20
20
|
import invariant from 'tiny-invariant';
|
|
21
21
|
import { userOrAutoTitleFromSpecifier, sortStoriesV7 } from '@storybook/preview-api';
|
|
22
|
-
import { getStorySortParameter, babelParse } from '@storybook/csf-tools';
|
|
23
|
-
import { storyNameFromExport, toId } from '@storybook/csf';
|
|
22
|
+
import { getStorySortParameter, loadConfig, babelParse } from '@storybook/csf-tools';
|
|
23
|
+
import { storyNameFromExport, toId, combineTags } from '@storybook/csf';
|
|
24
24
|
import { analyze } from '@storybook/docs-mdx';
|
|
25
25
|
import prompts from 'prompts';
|
|
26
26
|
import compression from 'compression';
|
|
@@ -50,19 +50,19 @@ var require_eastasianwidth=__commonJS({"../../node_modules/eastasianwidth/eastas
|
|
|
50
50
|
`,pad=opts.pad||" ",widthDiffFn=align!=="right"?halfDiff:fullDiff,returnString=!1;Array.isArray(text)||(returnString=!0,text=String(text).split(split));let width,maxWidth=0;return text=text.map(function(str){return str=String(str),width=stringWidth4(str),maxWidth=Math.max(width,maxWidth),{str,width}}).map(function(obj){return new Array(widthDiffFn(maxWidth,obj.width)+1).join(pad)+obj.str}),returnString?text.join(split):text}ansiAlign2.left=function(text){return ansiAlign2(text,{align:"left"})};ansiAlign2.center=function(text){return ansiAlign2(text,{align:"center"})};ansiAlign2.right=function(text){return ansiAlign2(text,{align:"right"})};module.exports=ansiAlign2;function halfDiff(maxWidth,curWidth){return Math.floor((maxWidth-curWidth)/2)}function fullDiff(maxWidth,curWidth){return maxWidth-curWidth}}});async function outputStats(directory,previewStats,managerStats){if(previewStats){let filePath=await writeStats(directory,"preview",previewStats);logger.info(`=> preview stats written to ${chalk8.cyan(filePath)}`);}if(managerStats){let filePath=await writeStats(directory,"manager",managerStats);logger.info(`=> manager stats written to ${chalk8.cyan(filePath)}`);}}var writeStats=async(directory,name,stats)=>{let filePath=path4.join(directory,`${name}-stats.json`),{chunks,...data}=stats.toJson();return await new Promise((resolve3,reject)=>{stringifyStream(data,null,2).on("error",reject).pipe(fs4.createWriteStream(filePath)).on("error",reject).on("finish",resolve3);}),filePath};async function useStatics(router2,options){let staticDirs=await options.presets.apply("staticDirs")??[],faviconPath=await options.presets.apply("favicon"),statics=[...staticDirs.map(dir=>typeof dir=="string"?dir:`${dir.from}:${dir.to}`)];statics&&statics.length>0&&await Promise.all(statics.map(async dir=>{try{let normalizedDir=staticDirs&&!isAbsolute(dir)?getDirectoryFromWorkingDir({configDir:options.configDir,workingDir:process.cwd(),directory:dir}):dir,{staticDir,staticPath,targetEndpoint}=await parseStaticDir(normalizedDir);targetEndpoint.startsWith("/sb-")||logger.info(chalk8`=> Serving static files from {cyan ${staticDir}} at {cyan ${targetEndpoint}}`),router2.use(targetEndpoint,express.static(staticPath,{index:!1}));}catch(e){e instanceof Error&&logger.warn(e.message);}})),router2.get(`/${basename(faviconPath)}`,(req,res)=>res.sendFile(faviconPath));}var parseStaticDir=async arg=>{let lastColonIndex=arg.lastIndexOf(":"),isWindowsRawDirOnly=path4.win32.isAbsolute(arg)&&lastColonIndex===1,splitIndex=lastColonIndex!==-1&&!isWindowsRawDirOnly?lastColonIndex:arg.length,target=(arg.substring(splitIndex+1)||"/").split(path4.sep).join(path4.posix.sep),rawDir=arg.substring(0,splitIndex),staticDir=path4.isAbsolute(rawDir)?rawDir:`./${rawDir}`,staticPath=path4.resolve(staticDir),targetDir=target.replace(/^\/?/,"./"),targetEndpoint=targetDir.substring(1);if(!await pathExists(staticPath))throw new Error(dedent(chalk8`
|
|
51
51
|
Failed to load static files, no such directory: {cyan ${staticPath}}
|
|
52
52
|
Make sure this directory exists.
|
|
53
|
-
`));return {staticDir,staticPath,targetDir,targetEndpoint}};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=join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>join(targetPath,f));from.includes("node_modules")||logger.info(chalk8`=> Copying static files: {cyan ${print(from)}} at {cyan ${print(targetPath)}}`),await fs4.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});},Promise.resolve())}function print(p){return relative(process.cwd(),p)}async function getManagerBuilder(){return import('@storybook/builder-manager')}async function getPreviewBuilder(builderName,configDir){let builderPackage=__require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});return await import(pathToFileURL(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{});if(!builder)throw new MissingBuilderError;let builderName=typeof builder=="string"?builder:builder.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}function slash(path6){return path6.startsWith("\\\\?\\")?path6:path6.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=path4.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=path4.join(options.workingDir,importPath,"**",path4.basename(specifier.files)),{globby}=await import('globby');(await globby(slash(dirGlob),commonGlobOptions(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(path4.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,path6,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path6,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 instanceof Error?err.toString():String(err));}});}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 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=join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>join(targetPath,f));from.includes("node_modules")||logger.info(chalk8`=> Copying static files: {cyan ${print(from)}} at {cyan ${print(targetPath)}}`),await fs4.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});},Promise.resolve())}function print(p){return relative(process.cwd(),p)}async function getManagerBuilder(){return import('@storybook/builder-manager')}async function getPreviewBuilder(builderName,configDir){let builderPackage=__require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});return await import(pathToFileURL(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{});if(!builder)throw new MissingBuilderError;let builderName=typeof builder=="string"?builder:builder.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}function slash(path6){return path6.startsWith("\\\\?\\")?path6:path6.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=path4.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=path4.join(options.workingDir,importPath,"**",path4.basename(specifier.files)),{globby}=await import('globby');(await globby(slash(dirGlob),commonGlobOptions(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(path4.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()}function watchConfig(configDir,onInvalidate){let wp=new Watchpack({followSymlinks:!1,ignored:["**/.git","**/node_modules"]});return wp.watch({directories:[configDir]}),wp.on("change",async(filePath,mtime,explanation)=>{await onInvalidate(filePath,!mtime);}),wp.on("remove",async(filePath,explanation)=>{await onInvalidate(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(),configDir,serverChannel,normalizedStories}){let maybeInvalidate=debounce(()=>serverChannel.emit(STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path6,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path6,removed),maybeInvalidate();}),configDir&&watchConfig(configDir,async filePath=>{basename(filePath).startsWith("preview")&&((await initializedStoryIndexGenerator).invalidateAll(),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 instanceof Error?err.toString():String(err));}});}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
|
|
56
|
+
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",UNATTACHED_MDX_TAG="unattached-mdx",ATTACHED_MDX_TAG="attached-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return tags?.includes(UNATTACHED_MDX_TAG)||tags?.includes(ATTACHED_MDX_TAG)}var makeAbsolute=(otherImport,normalizedPath,workingDir)=>otherImport.startsWith(".")?slash(path4.resolve(workingDir,normalizeStoryPath(path4.join(path4.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(path4.join(this.options.workingDir,specifier.directory,specifier.files)),{globby}=await import('globby'),files=await globby(fullGlob,commonGlobOptions(fullGlob));return files.length===0&&once.warn(`No story files found for the specified pattern: ${chalk8.blue(path4.join(specifier.directory,specifier.files))}`),files.sort().forEach(absolutePath=>{let ext=path4.extname(absolutePath);if(ext===".storyshot"){let relativePath=path4.relative(this.options.workingDir,absolutePath);logger.info(`Skipping ${ext} file ${relativePath}`);return}pathToSubIndex[absolutePath]=!1;}),[specifier,pathToSubIndex]}))).forEach(([specifier,cache3])=>this.specifierToCache.set(specifier,cache3));let previewCode=await this.getPreviewCode(),projectTags=this.getProjectTags(previewCode);await this.ensureExtracted({projectTags});}async updateExtracted(updater,overwrite=!1){await Promise.all(this.specifiers.map(async specifier=>{let entry=this.specifierToCache.get(specifier);return invariant(entry,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`),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=`.${path4.sep}${path4.relative(this.options.workingDir,absolutePath)}`;entry[absolutePath]={type:"error",err:new IndexingError(err instanceof Error?err.message:String(err),[relativePath],err instanceof Error?err.stack:void 0)};}}))}));}isDocsMdx(absolutePath){return new RegExp("(?<!\\.stories)\\.mdx$","i").test(absolutePath)}async ensureExtracted({projectTags}){return await this.updateExtracted(async(specifier,absolutePath)=>this.isDocsMdx(absolutePath)?!1:this.extractStories(specifier,absolutePath,projectTags)),await this.updateExtracted(async(specifier,absolutePath)=>this.extractDocs(specifier,absolutePath,projectTags)),this.specifiers.flatMap(specifier=>{let cache3=this.specifierToCache.get(specifier);return invariant(cache3,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`),Object.values(cache3).flatMap(entry=>entry?entry.type==="docs"?[entry]:entry.type==="error"?[entry]:entry.entries.map(item=>{if(item.type==="docs")return item;let{metaId,...existing}=item;return existing}):[])})}findDependencies(absoluteImports){return [...this.specifierToCache.values()].flatMap(cache3=>Object.entries(cache3).filter(([fileName,cacheEntry])=>!cacheEntry||cacheEntry.type!=="stories"?!1:!!absoluteImports.find(storyImport=>fileName.match(new RegExp(`^${storyImport.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}(\\.[^.]+)?$`)))).map(([_,cacheEntry])=>cacheEntry))}async extractStories(specifier,absolutePath,projectTags=[]){let relativePath=path4.relative(this.options.workingDir,absolutePath),importPath=slash(normalizeStoryPath(relativePath)),defaultMakeTitle=userTitle=>{let title=userOrAutoTitleFromSpecifier(importPath,specifier,userTitle);return invariant(title,"makeTitle created an undefined title. This happens when the fileName doesn't match any specifier from main.js"),title},indexer=this.options.indexers.find(ind=>ind.test.exec(absolutePath));invariant(indexer,`No matching indexer found for ${absolutePath}`);let indexInputs=await indexer.createIndex(absolutePath,{makeTitle:defaultMakeTitle}),entries=indexInputs.map(input=>{let name=input.name??storyNameFromExport(input.exportName),title=input.title??defaultMakeTitle(),id=input.__id??toId(input.metaId??title,storyNameFromExport(input.exportName)),tags=combineTags(...projectTags,...input.tags??[]);return {type:"story",id,metaId:input.metaId,name,title,importPath,tags}}),hasAutodocsTag=entries.some(entry=>entry.tags.includes(AUTODOCS_TAG)),isStoriesMdx=entries.some(entry=>entry.tags.includes(STORIES_MDX_TAG));if((hasAutodocsTag&&this.options.docs.autodocs!==!1||isStoriesMdx)&&this.options.build?.test?.disableAutoDocs!==!0){let name=this.options.docs.defaultName??"Docs",{metaId}=indexInputs[0],{title}=entries[0],id=toId(metaId??title,name),tags=combineTags(...projectTags,...indexInputs[0].tags??[]);entries.unshift({id,title,name,importPath,type:"docs",tags,storiesImports:[]});}return {entries:entries.filter(entry=>!(entry.type==="story"&&entry.tags.includes("stories-mdx-docsOnly"))),dependents:[],type:"stories"}}async extractDocs(specifier,absolutePath,projectTags=[]){let relativePath=path4.relative(this.options.workingDir,absolutePath);try{let normalizedPath=normalizeStoryPath(relativePath),importPath=slash(normalizedPath),content=await fs4.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);dependencies.forEach(dep=>{if(dep.entries.length>0){let first=dep.entries.find(e=>e.type!=="docs");path4.normalize(path4.resolve(this.options.workingDir,first.importPath)).startsWith(path4.normalize(absoluteOf))&&(csfEntry=first);}sortedDependencies=[dep,...dependencies.filter(d=>d!==dep)];}),invariant(csfEntry,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
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);invariant(title,"makeTitle created an undefined title. This happens when a specifier's doesn't have any matches in its fileName");let defaultName=this.options.docs.defaultName??"Docs",name=result.name||(csfEntry?autoName(importPath,csfEntry.importPath,defaultName):defaultName);return {id:toId(csfEntry?.metaId||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&&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: ${chalk8.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),storySortParameter=await this.getStorySortParameter(),fileNameOrder=this.storyFileNames();return sortStoriesV7(sortableStories,storySortParameter,fileNameOrder),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){err instanceof IndexingError&&duplicateErrors.push(err);}}),duplicateErrors.length)throw new MultipleIndexingError(duplicateErrors);let sorted=await this.sortStories(indexEntries);return this.lastIndex={v:4,entries:sorted},this.lastIndex}catch(err){throw this.lastError=err==null||err instanceof Error?err:void 0,invariant(this.lastError),logger.warn(`\u{1F6A8} ${this.lastError.toString()}`),this.lastError}}invalidate(specifier,importPath,removed){let absolutePath=slash(path4.resolve(this.options.workingDir,importPath)),cache3=this.specifierToCache.get(specifier);invariant(cache3,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`);let cacheEntry=cache3[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=>path4.resolve(this.options.workingDir,p));this.findDependencies(absoluteImports).forEach(dep=>dep.dependents.splice(dep.dependents.indexOf(absolutePath),1));}delete cache3[absolutePath];}else cache3[absolutePath]=!1;this.lastIndex=null,this.lastError=null;}async getStorySortParameter(){let previewFile=["js","jsx","ts","tsx","mjs","cjs"].map(ext=>path4.join(this.options.configDir,`preview.${ext}`)).find(fname=>fs4.existsSync(fname)),storySortParameter;if(previewFile){let previewCode=(await fs4.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),isCLIExampleEntry=entry=>["example-introduction--docs","configure-your-project--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),isAnyExampleEntry=entry=>entry.id.startsWith("example-button--")||entry.id.startsWith("example-header--")||entry.id.startsWith("example-page--");function summarizeIndex(storyIndex){let storyCount=0,componentTitles=new Set,exampleStoryCount=0,onboardingStoryCount=0,onboardingDocsCount=0,exampleDocsCount=0,pageStoryCount=0,playStoryCount=0,autodocsCount=0,storiesMdxCount=0,mdxCount=0;Object.values(storyIndex.entries).forEach(entry=>{isCLIExampleEntry(entry)?(entry.type==="story"&&(exampleStoryCount+=1),entry.type==="docs"&&(exampleDocsCount+=1)):isAnyExampleEntry(entry)?(entry.type==="story"&&(onboardingStoryCount+=1),entry.type==="docs"&&(onboardingDocsCount+=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,onboardingStoryCount,onboardingDocsCount,version:storyIndex.v}}async function buildOrThrow(callback){try{return await callback()}catch(err){let builderErrors=err.errors;throw builderErrors&&builderErrors.find(er=>er.text?.includes("No matching export"))?new NoMatchingExportError(err):err}}async function buildStaticStandalone(options){if(options.configType="PRODUCTION",options.outputDir==="")throw new Error("Won't remove current directory. Check your outputDir!");if(options.outputDir=resolve(options.outputDir),options.configDir=resolve(options.configDir),logger.info(chalk8`=> Cleaning outputDir: {cyan ${relative(process.cwd(),options.outputDir)}}`),options.outputDir==="/")throw new Error("Won't remove directory '/'. Check your outputDir!");await emptyDir(options.outputDir),await ensureDir(options.outputDir);let config=await loadMainConfig(options),{framework}=config,corePresets=[],frameworkName=typeof framework=="string"?framework:framework?.name;frameworkName?corePresets.push(join(frameworkName,"preset")):options.ignorePreview||logger.warn(`you have not specified a framework in your ${options.configDir}/main.js`),logger.info("=> Loading presets");let presets=await loadAllPresets({corePresets:[__require.resolve("@storybook/core-server/dist/presets/common-preset"),...corePresets],overridePresets:[__require.resolve("@storybook/core-server/dist/presets/common-override-preset")],isCritical:!0,...options}),{renderer}=await presets.apply("core",{}),build2=await presets.apply("build",{}),[previewBuilder,managerBuilder]=await getBuilders({...options,presets,build:build2}),resolvedRenderer=renderer?resolveAddonName(options.configDir,renderer,options):void 0;presets=await loadAllPresets({corePresets:[__require.resolve("@storybook/core-server/dist/presets/common-preset"),...managerBuilder.corePresets||[],...previewBuilder.corePresets||[],...resolvedRenderer?[resolvedRenderer]:[],...corePresets],overridePresets:[...previewBuilder.overridePresets||[],__require.resolve("@storybook/core-server/dist/presets/common-override-preset")],...options,build:build2});let[features,core,staticDirs,indexers,stories,docsOptions]=await Promise.all([presets.apply("features"),presets.apply("core"),presets.apply("staticDirs"),presets.apply("experimental_indexers",[]),presets.apply("stories"),presets.apply("docs",{})]),fullOptions={...options,presets,features,build:build2},effects=[];global$1.FEATURES=features,await buildOrThrow(async()=>managerBuilder.build({startTime:process.hrtime(),options:fullOptions})),staticDirs&&effects.push(copyAllStaticFilesRelativeToMain(staticDirs,options.outputDir,options.configDir));let coreServerPublicDir=join(dirname(__require.resolve("@storybook/core-server/package.json")),"public");effects.push(copy(coreServerPublicDir,options.outputDir));let initializedStoryIndexGenerator=Promise.resolve(void 0);if(!options.ignorePreview){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},normalizedStories=normalizeStories(stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,indexers,docs:docsOptions,build:build2});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),effects.push(extractStoriesJson(join(options.outputDir,"index.json"),initializedStoryIndexGenerator));}core?.disableProjectJson||effects.push(extractStorybookMetadata(join(options.outputDir,"project.json"),options.configDir)),options.debugWebpack&&logConfig("Preview webpack config",await previewBuilder.getConfig(fullOptions)),options.ignorePreview?logger.info("=> Not building preview"):logger.info("=> Building preview..");let startTime=process.hrtime();await Promise.all([...options.ignorePreview?[]:[previewBuilder.build({startTime,options:fullOptions}).then(async previewStats=>{logger.trace({message:"=> Preview built",time:process.hrtime(startTime)});let statsOption=options.webpackStatsJson||options.statsJson;if(statsOption){let target=statsOption===!0?options.outputDir:statsOption;await outputStats(target,previewStats);}}).catch(error=>{throw logger.error("=> Failed to build the preview"),process.exitCode=1,error})],...effects]),core?.disableTelemetry||effects.push(initializedStoryIndexGenerator.then(async generator=>{let storyIndex=await generator?.getIndex(),payload={precedingUpgrade:await getPrecedingUpgrade()};storyIndex&&Object.assign(payload,{storyIndex:summarizeIndex(storyIndex)}),await telemetry("build",payload,{configDir:options.configDir});})),logger.info(`=> Output directory: ${options.outputDir}`);}var fileExists=basename3=>[".js",".cjs"].reduce((found,ext)=>{let filename=`${basename3}${ext}`;return !found&&fs3.existsSync(filename)?filename:found},"");function getMiddleware(configDir){let middlewarePath=fileExists(path4.resolve(configDir,"middleware"));if(middlewarePath){let middlewareModule=__require(middlewarePath);return middlewareModule.__esModule&&(middlewareModule=middlewareModule.default),middlewareModule}return ()=>{}}function getServerAddresses(port,host,proto,initialPath){let address=new URL(`${proto}://localhost:${port}/`),networkAddress=new URL(`${proto}://${host||ip.address()}:${port}/`);if(initialPath){let searchParams=`?path=${decodeURIComponent(initialPath.startsWith("/")?initialPath:`/${initialPath}`)}`;address.search=searchParams,networkAddress.search=searchParams;}return {address:address.href,networkAddress:networkAddress.href}}var getServerPort=(port,{exactPort}={})=>detectFreePort(port).then(freePort=>(freePort!==port&&exactPort&&process.exit(-1),freePort)).catch(error=>{logger.error(error),process.exit(-1);}),getServerChannelUrl=(port,{https:https3})=>`${https3?"wss":"ws"}://localhost:${port}/storybook-server-channel`;async function getServer(app,options){if(!options.https)return http2.createServer(app);options.sslCert||(logger.error("Error: --ssl-cert is required with --https"),process.exit(-1)),options.sslKey||(logger.error("Error: --ssl-key is required with --https"),process.exit(-1));let sslOptions={ca:await Promise.all((options.sslCa||[]).map(ca=>readFile(ca,"utf-8"))),cert:await readFile(options.sslCert,"utf-8"),key:await readFile(options.sslKey,"utf-8")};return https.createServer(sslOptions,app)}var ServerChannelTransport=class{constructor(server){this.socket=new WebSocketServer({noServer:!0}),server.on("upgrade",(request,socket,head)=>{request.url==="/storybook-server-channel"&&this.socket.handleUpgrade(request,socket,head,ws=>{this.socket.emit("connection",ws,request);});}),this.socket.on("connection",wss=>{wss.on("message",raw=>{let data=raw.toString(),event=typeof data=="string"&&isJSON(data)?parse(data,{allowFunction:!1,allowClass:!1}):data;this.handler?.(event);});});}setHandler(handler){this.handler=handler;}send(event){let data=stringify(event,{maxDepth:15,allowFunction:!1,allowClass:!1});Array.from(this.socket.clients).filter(c=>c.readyState===WebSocket.OPEN).forEach(client=>client.send(data));}};function getServerChannel(server){let transports=[new ServerChannelTransport(server)];return new Channel({transports,async:!0})}function openInBrowser(address){let browserEnvVar=process.env.BROWSER,userBrowserIsChrome=browserEnvVar==="chrome"||browserEnvVar==="chromium"||browserEnvVar==="brave"||browserEnvVar==="com.brave.browser",openOptions=browserEnvVar?{app:{name:browserEnvVar}}:{};getDefaultBrowser(async(err,res)=>{try{res&&(res.isChrome||res.isChromium||res.identity==="com.brave.browser"||userBrowserIsChrome)?await betterOpn(address):await open(address,openOptions);}catch{logger.error(dedent`
|
|
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);invariant(title,"makeTitle created an undefined title. This happens when a specifier's doesn't have any matches in its fileName");let defaultName=this.options.docs.defaultName??"Docs",name=result.name||(csfEntry?autoName(importPath,csfEntry.importPath,defaultName):defaultName),id=toId(csfEntry?.metaId||title,name),tags=combineTags(...projectTags,...csfEntry?.tags??[],...result.metaTags??[],csfEntry?"attached-mdx":"unattached-mdx");return {id,title,name,importPath,storiesImports:sortedDependencies.map(dep=>dep.entries[0].importPath),type:"docs",tags}}catch(err){throw err&&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: ${chalk8.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,storySortParameter){let sortableStories=Object.values(entries),fileNameOrder=this.storyFileNames();return sortStoriesV7(sortableStories,storySortParameter,fileNameOrder),sortableStories.reduce((acc,item)=>(acc[item.id]=item,acc),{})}async getIndex(){if(this.lastIndex)return this.lastIndex;if(this.lastError)throw this.lastError;let previewCode=await this.getPreviewCode(),projectTags=this.getProjectTags(previewCode),storiesList=await this.ensureExtracted({projectTags});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){err instanceof IndexingError&&duplicateErrors.push(err);}}),duplicateErrors.length)throw new MultipleIndexingError(duplicateErrors);let sorted=await this.sortStories(indexEntries,previewCode&&getStorySortParameter(previewCode));return this.lastIndex={v:4,entries:sorted},this.lastIndex}catch(err){throw this.lastError=err==null||err instanceof Error?err:void 0,invariant(this.lastError),logger.warn(`\u{1F6A8} ${this.lastError.toString()}`),this.lastError}}invalidateAll(){this.specifierToCache.forEach(cache3=>{Object.keys(cache3).forEach(key=>{cache3[key]=!1;});}),this.lastIndex=null,this.lastError=null;}invalidate(specifier,importPath,removed){let absolutePath=slash(path4.resolve(this.options.workingDir,importPath)),cache3=this.specifierToCache.get(specifier);invariant(cache3,`specifier does not have a matching cache entry in specifierToCache: ${JSON.stringify(specifier)}`);let cacheEntry=cache3[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=>path4.resolve(this.options.workingDir,p));this.findDependencies(absoluteImports).forEach(dep=>dep.dependents.splice(dep.dependents.indexOf(absolutePath),1));}delete cache3[absolutePath];}else cache3[absolutePath]=!1;this.lastIndex=null,this.lastError=null;}async getPreviewCode(){let previewFile=["js","jsx","ts","tsx","mjs","cjs","mts"].map(ext=>path4.join(this.options.configDir,`preview.${ext}`)).find(fname=>fs4.existsSync(fname));return previewFile&&(await fs4.readFile(previewFile,"utf-8")).toString()}getProjectTags(previewCode){let projectTags=[],defaultTags=["dev","test"],extraTags=this.options.docs.autodocs===!0?[AUTODOCS_TAG]:[];return previewCode&&(projectTags=loadConfig(previewCode).parse().getFieldValue(["tags"])??[]),[...defaultTags,...projectTags,...extraTags]}storyFileNames(){return Array.from(this.specifierToCache.values()).flatMap(r=>Object.keys(r))}};var PAGE_REGEX=/(page|screen)/i,isPageStory=storyId=>PAGE_REGEX.test(storyId),isCLIExampleEntry=entry=>["example-introduction--docs","configure-your-project--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),isAnyExampleEntry=entry=>entry.id.startsWith("example-button--")||entry.id.startsWith("example-header--")||entry.id.startsWith("example-page--");function summarizeIndex(storyIndex){let storyCount=0,componentTitles=new Set,exampleStoryCount=0,onboardingStoryCount=0,onboardingDocsCount=0,exampleDocsCount=0,pageStoryCount=0,playStoryCount=0,autodocsCount=0,storiesMdxCount=0,mdxCount=0;Object.values(storyIndex.entries).forEach(entry=>{isCLIExampleEntry(entry)?(entry.type==="story"&&(exampleStoryCount+=1),entry.type==="docs"&&(exampleDocsCount+=1)):isAnyExampleEntry(entry)?(entry.type==="story"&&(onboardingStoryCount+=1),entry.type==="docs"&&(onboardingDocsCount+=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,onboardingStoryCount,onboardingDocsCount,version:storyIndex.v}}async function buildOrThrow(callback){try{return await callback()}catch(err){let builderErrors=err.errors;throw builderErrors&&builderErrors.find(er=>er.text?.includes("No matching export"))?new NoMatchingExportError(err):err}}async function buildStaticStandalone(options){if(options.configType="PRODUCTION",options.outputDir==="")throw new Error("Won't remove current directory. Check your outputDir!");if(options.outputDir=resolve(options.outputDir),options.configDir=resolve(options.configDir),logger.info(chalk8`=> Cleaning outputDir: {cyan ${relative(process.cwd(),options.outputDir)}}`),options.outputDir==="/")throw new Error("Won't remove directory '/'. Check your outputDir!");await emptyDir(options.outputDir),await ensureDir(options.outputDir);let config=await loadMainConfig(options),{framework}=config,corePresets=[],frameworkName=typeof framework=="string"?framework:framework?.name;frameworkName?corePresets.push(join(frameworkName,"preset")):options.ignorePreview||logger.warn(`you have not specified a framework in your ${options.configDir}/main.js`),logger.info("=> Loading presets");let presets=await loadAllPresets({corePresets:[__require.resolve("@storybook/core-server/dist/presets/common-preset"),...corePresets],overridePresets:[__require.resolve("@storybook/core-server/dist/presets/common-override-preset")],isCritical:!0,...options}),{renderer}=await presets.apply("core",{}),build2=await presets.apply("build",{}),[previewBuilder,managerBuilder]=await getBuilders({...options,presets,build:build2}),resolvedRenderer=renderer?resolveAddonName(options.configDir,renderer,options):void 0;presets=await loadAllPresets({corePresets:[__require.resolve("@storybook/core-server/dist/presets/common-preset"),...managerBuilder.corePresets||[],...previewBuilder.corePresets||[],...resolvedRenderer?[resolvedRenderer]:[],...corePresets],overridePresets:[...previewBuilder.overridePresets||[],__require.resolve("@storybook/core-server/dist/presets/common-override-preset")],...options,build:build2});let[features,core,staticDirs,indexers,stories,docsOptions]=await Promise.all([presets.apply("features"),presets.apply("core"),presets.apply("staticDirs"),presets.apply("experimental_indexers",[]),presets.apply("stories"),presets.apply("docs",{})]),fullOptions={...options,presets,features,build:build2},effects=[];global$1.FEATURES=features,await buildOrThrow(async()=>managerBuilder.build({startTime:process.hrtime(),options:fullOptions})),staticDirs&&effects.push(copyAllStaticFilesRelativeToMain(staticDirs,options.outputDir,options.configDir));let coreServerPublicDir=join(dirname(__require.resolve("@storybook/core-server/package.json")),"public");effects.push(copy(coreServerPublicDir,options.outputDir));let initializedStoryIndexGenerator=Promise.resolve(void 0);if(!options.ignorePreview){let workingDir=process.cwd(),directories={configDir:options.configDir,workingDir},normalizedStories=normalizeStories(stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,indexers,docs:docsOptions,build:build2});initializedStoryIndexGenerator=generator.initialize().then(()=>generator),effects.push(extractStoriesJson(join(options.outputDir,"index.json"),initializedStoryIndexGenerator));}core?.disableProjectJson||effects.push(extractStorybookMetadata(join(options.outputDir,"project.json"),options.configDir)),options.debugWebpack&&logConfig("Preview webpack config",await previewBuilder.getConfig(fullOptions)),options.ignorePreview?logger.info("=> Not building preview"):logger.info("=> Building preview..");let startTime=process.hrtime();await Promise.all([...options.ignorePreview?[]:[previewBuilder.build({startTime,options:fullOptions}).then(async previewStats=>{logger.trace({message:"=> Preview built",time:process.hrtime(startTime)});let statsOption=options.webpackStatsJson||options.statsJson;if(statsOption){let target=statsOption===!0?options.outputDir:statsOption;await outputStats(target,previewStats);}}).catch(error=>{throw logger.error("=> Failed to build the preview"),process.exitCode=1,error})],...effects]),core?.disableTelemetry||effects.push(initializedStoryIndexGenerator.then(async generator=>{let storyIndex=await generator?.getIndex(),payload={precedingUpgrade:await getPrecedingUpgrade()};storyIndex&&Object.assign(payload,{storyIndex:summarizeIndex(storyIndex)}),await telemetry("build",payload,{configDir:options.configDir});})),logger.info(`=> Output directory: ${options.outputDir}`);}var fileExists=basename4=>[".js",".cjs"].reduce((found,ext)=>{let filename=`${basename4}${ext}`;return !found&&fs3.existsSync(filename)?filename:found},"");function getMiddleware(configDir){let middlewarePath=fileExists(path4.resolve(configDir,"middleware"));if(middlewarePath){let middlewareModule=__require(middlewarePath);return middlewareModule.__esModule&&(middlewareModule=middlewareModule.default),middlewareModule}return ()=>{}}function getServerAddresses(port,host,proto,initialPath){let address=new URL(`${proto}://localhost:${port}/`),networkAddress=new URL(`${proto}://${host||ip.address()}:${port}/`);if(initialPath){let searchParams=`?path=${decodeURIComponent(initialPath.startsWith("/")?initialPath:`/${initialPath}`)}`;address.search=searchParams,networkAddress.search=searchParams;}return {address:address.href,networkAddress:networkAddress.href}}var getServerPort=(port,{exactPort}={})=>detectFreePort(port).then(freePort=>(freePort!==port&&exactPort&&process.exit(-1),freePort)).catch(error=>{logger.error(error),process.exit(-1);}),getServerChannelUrl=(port,{https:https3})=>`${https3?"wss":"ws"}://localhost:${port}/storybook-server-channel`;async function getServer(app,options){if(!options.https)return http2.createServer(app);options.sslCert||(logger.error("Error: --ssl-cert is required with --https"),process.exit(-1)),options.sslKey||(logger.error("Error: --ssl-key is required with --https"),process.exit(-1));let sslOptions={ca:await Promise.all((options.sslCa||[]).map(ca=>readFile(ca,"utf-8"))),cert:await readFile(options.sslCert,"utf-8"),key:await readFile(options.sslKey,"utf-8")};return https.createServer(sslOptions,app)}var ServerChannelTransport=class{constructor(server){this.socket=new WebSocketServer({noServer:!0}),server.on("upgrade",(request,socket,head)=>{request.url==="/storybook-server-channel"&&this.socket.handleUpgrade(request,socket,head,ws=>{this.socket.emit("connection",ws,request);});}),this.socket.on("connection",wss=>{wss.on("message",raw=>{let data=raw.toString(),event=typeof data=="string"&&isJSON(data)?parse(data,{allowFunction:!1,allowClass:!1}):data;this.handler?.(event);});});}setHandler(handler){this.handler=handler;}send(event){let data=stringify(event,{maxDepth:15,allowFunction:!1,allowClass:!1});Array.from(this.socket.clients).filter(c=>c.readyState===WebSocket.OPEN).forEach(client=>client.send(data));}};function getServerChannel(server){let transports=[new ServerChannelTransport(server)];return new Channel({transports,async:!0})}function openInBrowser(address){let browserEnvVar=process.env.BROWSER,userBrowserIsChrome=browserEnvVar==="chrome"||browserEnvVar==="chromium"||browserEnvVar==="brave"||browserEnvVar==="com.brave.browser",openOptions=browserEnvVar?{app:{name:browserEnvVar}}:{};getDefaultBrowser(async(err,res)=>{try{res&&(res.isChrome||res.isChromium||res.identity==="com.brave.browser"||userBrowserIsChrome)?await betterOpn(address):await open(address,openOptions);}catch{logger.error(dedent`
|
|
62
62
|
Could not open ${address} inside a browser. If you're running this command inside a
|
|
63
63
|
docker container or on a CI, you need to pass the '--ci' flag to prevent opening a
|
|
64
64
|
browser by default.
|
|
65
|
-
`);}});}var router=new Router;async function getStoryIndexGenerator(features,options,serverChannel){let workingDir=process.cwd(),
|
|
65
|
+
`);}});}var router=new Router;async function getStoryIndexGenerator(features,options,serverChannel){let workingDir=process.cwd(),configDir=options.configDir,directories={configDir,workingDir},stories=options.presets.apply("stories"),indexers=options.presets.apply("experimental_indexers",[]),docsOptions=options.presets.apply("docs",{}),normalizedStories=normalizeStories(await stories,directories),generator=new StoryIndexGenerator(normalizedStories,{...directories,indexers:await indexers,docs:await docsOptions,workingDir}),initializedStoryIndexGenerator=generator.initialize().then(()=>generator);return useStoriesJson({router,initializedStoryIndexGenerator,normalizedStories,serverChannel,workingDir,configDir}),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,skipPrompt}){if(cliOptions.disableTelemetry)return "none";if(!presetOptions)return "full";let core=await(await loadAllPresets(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";if(skipPrompt)return "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(),error=_error,errorHash;"message"in error?errorHash=error.message?oneWayHash(error.message):"EMPTY_MESSAGE":errorHash="NO_MESSAGE";let{code,name,category}=error;await telemetry("error",{code,name,category,eventType,precedingUpgrade,error:errorLevel==="full"?error:void 0,errorHash,isErrorInstance:error instanceof Error},{immediate:!0,configDir:options.cliOptions.configDir||options.presetOptions?.configDir,enableCrashReports:errorLevel==="full"});}}catch{}}async function withTelemetry(eventType,options,run){let enableTelemetry=!(options.cliOptions.disableTelemetry||options.cliOptions.test===!0),canceled=!1;async function cancelTelemetry(){canceled=!0,enableTelemetry&&await telemetry("canceled",{eventType},{stripMetadata:!0,immediate:!0}),process.exit(0);}eventType==="init"&&process.on("SIGINT",cancelTelemetry),enableTelemetry&&telemetry("boot",{eventType},{stripMetadata:!0});try{return await run()}catch(error){if(canceled)return;let{printError=logger.error}=options;throw printError(error),enableTelemetry&&await sendTelemetryError(error,eventType,options),error}finally{process.off("SIGINIT",cancelTelemetry);}}async function doTelemetry(core,initializedStoryIndexGenerator,options){core?.disableTelemetry||initializedStoryIndexGenerator.then(async generator=>{let storyIndex;try{storyIndex=await generator?.getIndex();}catch(err){if(!(err instanceof Error))throw new Error("encountered a non-recoverable error");sendTelemetryError(err,"dev",{cliOptions:options,presetOptions:{...options,corePresets:[],overridePresets:[]}});return}let{versionCheck,versionUpdates}=options;invariant(!versionUpdates||versionUpdates&&versionCheck,"versionCheck should be defined when versionUpdates is true");let payload={precedingUpgrade:await getPrecedingUpgrade()};storyIndex&&Object.assign(payload,{versionStatus:versionUpdates&&versionCheck?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=await options.presets.apply("experimental_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??!1)),app.use(getCachingMiddleware()),getMiddleware(options.configDir)(router),app.use(router);let{port,host,initialPath}=options;invariant(port,"expected options to have a port");let proto=options.https?"https":"http",{address,networkAddress}=getServerAddresses(port,host,proto,initialPath),listening=new Promise((resolve3,reject)=>{server.listen({port,host},error=>error?reject(error):resolve3());});if(!core?.builder)throw new MissingBuilderError;let 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||(logger.info("=> Starting preview.."),previewStarted=previewBuilder.start({startTime:process.hrtime(),options,router,server,channel:serverChannel}).catch(async e=>{throw logger.error("=> Failed to build the preview"),process.exitCode=1,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}}function ansiRegex({onlyFirst=!1}={}){let pattern=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(pattern,onlyFirst?void 0:"g")}var regex=ansiRegex();function stripAnsi(string){if(typeof string!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof string}\``);return string.replace(regex,"")}var import_eastasianwidth=__toESM(require_eastasianwidth(),1),import_emoji_regex=__toESM(require_emoji_regex(),1);function stringWidth(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0, import_emoji_regex.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1;}}return width}var import_eastasianwidth2=__toESM(require_eastasianwidth(),1),import_emoji_regex2=__toESM(require_emoji_regex(),1);function stringWidth2(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0, import_emoji_regex2.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth2.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1;}}return width}function widestLine(string){let lineWidth=0;for(let line of string.split(`
|
|
66
66
|
`))lineWidth=Math.max(lineWidth,stringWidth2(line));return lineWidth}var import_cli_boxes=__toESM(require_cli_boxes(),1);var UPPERCASE=/[\p{Lu}]/u,LOWERCASE=/[\p{Ll}]/u,LEADING_CAPITAL=/^[\p{Lu}](?![\p{Lu}])/gu,IDENTIFIER=/([\p{Alpha}\p{N}_]|$)/u,SEPARATORS=/[_.\- ]+/,LEADING_SEPARATORS=new RegExp("^"+SEPARATORS.source),SEPARATORS_AND_IDENTIFIER=new RegExp(SEPARATORS.source+IDENTIFIER.source,"gu"),NUMBERS_AND_IDENTIFIER=new RegExp("\\d+"+IDENTIFIER.source,"gu"),preserveCamelCase=(string,toLowerCase,toUpperCase,preserveConsecutiveUppercase2)=>{let isLastCharLower=!1,isLastCharUpper=!1,isLastLastCharUpper=!1,isLastLastCharPreserved=!1;for(let index=0;index<string.length;index++){let character=string[index];isLastLastCharPreserved=index>2?string[index-3]==="-":!0,isLastCharLower&&UPPERCASE.test(character)?(string=string.slice(0,index)+"-"+string.slice(index),isLastCharLower=!1,isLastLastCharUpper=isLastCharUpper,isLastCharUpper=!0,index++):isLastCharUpper&&isLastLastCharUpper&&LOWERCASE.test(character)&&(!isLastLastCharPreserved||preserveConsecutiveUppercase2)?(string=string.slice(0,index-1)+"-"+string.slice(index-1),isLastLastCharUpper=isLastCharUpper,isLastCharUpper=!1,isLastCharLower=!0):(isLastCharLower=toLowerCase(character)===character&&toUpperCase(character)!==character,isLastLastCharUpper=isLastCharUpper,isLastCharUpper=toUpperCase(character)===character&&toLowerCase(character)!==character);}return string},preserveConsecutiveUppercase=(input,toLowerCase)=>(LEADING_CAPITAL.lastIndex=0,input.replace(LEADING_CAPITAL,m1=>toLowerCase(m1))),postProcess=(input,toUpperCase)=>(SEPARATORS_AND_IDENTIFIER.lastIndex=0,NUMBERS_AND_IDENTIFIER.lastIndex=0,input.replace(SEPARATORS_AND_IDENTIFIER,(_,identifier)=>toUpperCase(identifier)).replace(NUMBERS_AND_IDENTIFIER,m=>toUpperCase(m)));function camelCase(input,options){if(!(typeof input=="string"||Array.isArray(input)))throw new TypeError("Expected the input to be `string | string[]`");if(options={pascalCase:!1,preserveConsecutiveUppercase:!1,...options},Array.isArray(input)?input=input.map(x=>x.trim()).filter(x=>x.length).join("-"):input=input.trim(),input.length===0)return "";let toLowerCase=options.locale===!1?string=>string.toLowerCase():string=>string.toLocaleLowerCase(options.locale),toUpperCase=options.locale===!1?string=>string.toUpperCase():string=>string.toLocaleUpperCase(options.locale);return input.length===1?SEPARATORS.test(input)?"":options.pascalCase?toUpperCase(input):toLowerCase(input):(input!==toLowerCase(input)&&(input=preserveCamelCase(input,toLowerCase,toUpperCase,options.preserveConsecutiveUppercase)),input=input.replace(LEADING_SEPARATORS,""),input=options.preserveConsecutiveUppercase?preserveConsecutiveUppercase(input,toLowerCase):toLowerCase(input),options.pascalCase&&(input=toUpperCase(input.charAt(0))+input.slice(1)),postProcess(input,toUpperCase))}var import_ansi_align=__toESM(require_ansi_align(),1);var import_eastasianwidth3=__toESM(require_eastasianwidth(),1),import_emoji_regex3=__toESM(require_emoji_regex(),1);function stringWidth3(string,options={}){if(typeof string!="string"||string.length===0||(options={ambiguousIsNarrow:!0,...options},string=stripAnsi(string),string.length===0))return 0;string=string.replace((0, import_emoji_regex3.default)()," ");let ambiguousCharacterWidth=options.ambiguousIsNarrow?1:2,width=0;for(let character of string){let codePoint=character.codePointAt(0);if(codePoint<=31||codePoint>=127&&codePoint<=159||codePoint>=768&&codePoint<=879)continue;switch(import_eastasianwidth3.default.eastAsianWidth(character)){case"F":case"W":width+=2;break;case"A":width+=ambiguousCharacterWidth;break;default:width+=1;}}return width}var wrapAnsi16=(offset=0)=>code=>`\x1B[${code+offset}m`,wrapAnsi256=(offset=0)=>code=>`\x1B[${38+offset};5;${code}m`,wrapAnsi16m=(offset=0)=>(red,green,blue)=>`\x1B[${38+offset};2;${red};${green};${blue}m`,styles={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(styles.modifier);var foregroundColorNames=Object.keys(styles.color),backgroundColorNames=Object.keys(styles.bgColor);[...foregroundColorNames,...backgroundColorNames];function assembleStyles(){let codes=new Map;for(let[groupName,group]of Object.entries(styles)){for(let[styleName,style]of Object.entries(group))styles[styleName]={open:`\x1B[${style[0]}m`,close:`\x1B[${style[1]}m`},group[styleName]=styles[styleName],codes.set(style[0],style[1]);Object.defineProperty(styles,groupName,{value:group,enumerable:!1});}return Object.defineProperty(styles,"codes",{value:codes,enumerable:!1}),styles.color.close="\x1B[39m",styles.bgColor.close="\x1B[49m",styles.color.ansi=wrapAnsi16(),styles.color.ansi256=wrapAnsi256(),styles.color.ansi16m=wrapAnsi16m(),styles.bgColor.ansi=wrapAnsi16(10),styles.bgColor.ansi256=wrapAnsi256(10),styles.bgColor.ansi16m=wrapAnsi16m(10),Object.defineProperties(styles,{rgbToAnsi256:{value:(red,green,blue)=>red===green&&green===blue?red<8?16:red>248?231:Math.round((red-8)/247*24)+232:16+36*Math.round(red/255*5)+6*Math.round(green/255*5)+Math.round(blue/255*5),enumerable:!1},hexToRgb:{value:hex=>{let matches=/[a-f\d]{6}|[a-f\d]{3}/i.exec(hex.toString(16));if(!matches)return [0,0,0];let[colorString]=matches;colorString.length===3&&(colorString=[...colorString].map(character=>character+character).join(""));let integer=Number.parseInt(colorString,16);return [integer>>16&255,integer>>8&255,integer&255]},enumerable:!1},hexToAnsi256:{value:hex=>styles.rgbToAnsi256(...styles.hexToRgb(hex)),enumerable:!1},ansi256ToAnsi:{value:code=>{if(code<8)return 30+code;if(code<16)return 90+(code-8);let red,green,blue;if(code>=232)red=((code-232)*10+8)/255,green=red,blue=red;else {code-=16;let remainder=code%36;red=Math.floor(code/36)/5,green=Math.floor(remainder/6)/5,blue=remainder%6/5;}let value=Math.max(red,green,blue)*2;if(value===0)return 30;let result=30+(Math.round(blue)<<2|Math.round(green)<<1|Math.round(red));return value===2&&(result+=60),result},enumerable:!1},rgbToAnsi:{value:(red,green,blue)=>styles.ansi256ToAnsi(styles.rgbToAnsi256(red,green,blue)),enumerable:!1},hexToAnsi:{value:hex=>styles.ansi256ToAnsi(styles.hexToAnsi256(hex)),enumerable:!1}}),styles}var ansiStyles=assembleStyles(),ansi_styles_default=ansiStyles;var ESCAPES=new Set(["\x1B","\x9B"]),END_CODE=39,ANSI_ESCAPE_BELL="\x07",ANSI_CSI="[",ANSI_OSC="]",ANSI_SGR_TERMINATOR="m",ANSI_ESCAPE_LINK=`${ANSI_OSC}8;;`,wrapAnsiCode=code=>`${ESCAPES.values().next().value}${ANSI_CSI}${code}${ANSI_SGR_TERMINATOR}`,wrapAnsiHyperlink=uri=>`${ESCAPES.values().next().value}${ANSI_ESCAPE_LINK}${uri}${ANSI_ESCAPE_BELL}`,wordLengths=string=>string.split(" ").map(character=>stringWidth3(character)),wrapWord=(rows,word,columns)=>{let characters=[...word],isInsideEscape=!1,isInsideLinkEscape=!1,visible=stringWidth3(stripAnsi(rows[rows.length-1]));for(let[index,character]of characters.entries()){let characterLength=stringWidth3(character);if(visible+characterLength<=columns?rows[rows.length-1]+=character:(rows.push(character),visible=0),ESCAPES.has(character)&&(isInsideEscape=!0,isInsideLinkEscape=characters.slice(index+1).join("").startsWith(ANSI_ESCAPE_LINK)),isInsideEscape){isInsideLinkEscape?character===ANSI_ESCAPE_BELL&&(isInsideEscape=!1,isInsideLinkEscape=!1):character===ANSI_SGR_TERMINATOR&&(isInsideEscape=!1);continue}visible+=characterLength,visible===columns&&index<characters.length-1&&(rows.push(""),visible=0);}!visible&&rows[rows.length-1].length>0&&rows.length>1&&(rows[rows.length-2]+=rows.pop());},stringVisibleTrimSpacesRight=string=>{let words=string.split(" "),last=words.length;for(;last>0&&!(stringWidth3(words[last-1])>0);)last--;return last===words.length?string:words.slice(0,last).join(" ")+words.slice(last).join("")},exec=(string,columns,options={})=>{if(options.trim!==!1&&string.trim()==="")return "";let returnValue="",escapeCode,escapeUrl,lengths=wordLengths(string),rows=[""];for(let[index,word]of string.split(" ").entries()){options.trim!==!1&&(rows[rows.length-1]=rows[rows.length-1].trimStart());let rowLength=stringWidth3(rows[rows.length-1]);if(index!==0&&(rowLength>=columns&&(options.wordWrap===!1||options.trim===!1)&&(rows.push(""),rowLength=0),(rowLength>0||options.trim===!1)&&(rows[rows.length-1]+=" ",rowLength++)),options.hard&&lengths[index]>columns){let remainingColumns=columns-rowLength,breaksStartingThisLine=1+Math.floor((lengths[index]-remainingColumns-1)/columns);Math.floor((lengths[index]-1)/columns)<breaksStartingThisLine&&rows.push(""),wrapWord(rows,word,columns);continue}if(rowLength+lengths[index]>columns&&rowLength>0&&lengths[index]>0){if(options.wordWrap===!1&&rowLength<columns){wrapWord(rows,word,columns);continue}rows.push("");}if(rowLength+lengths[index]>columns&&options.wordWrap===!1){wrapWord(rows,word,columns);continue}rows[rows.length-1]+=word;}options.trim!==!1&&(rows=rows.map(row=>stringVisibleTrimSpacesRight(row)));let pre=[...rows.join(`
|
|
67
67
|
`)];for(let[index,character]of pre.entries()){if(returnValue+=character,ESCAPES.has(character)){let{groups}=new RegExp(`(?:\\${ANSI_CSI}(?<code>\\d+)m|\\${ANSI_ESCAPE_LINK}(?<uri>.*)${ANSI_ESCAPE_BELL})`).exec(pre.slice(index).join(""))||{groups:{}};if(groups.code!==void 0){let code2=Number.parseFloat(groups.code);escapeCode=code2===END_CODE?void 0:code2;}else groups.uri!==void 0&&(escapeUrl=groups.uri.length===0?void 0:groups.uri);}let code=ansi_styles_default.codes.get(Number(escapeCode));pre[index+1]===`
|
|
68
68
|
`?(escapeUrl&&(returnValue+=wrapAnsiHyperlink("")),escapeCode&&code&&(returnValue+=wrapAnsiCode(code))):character===`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var import_manager_api=require("@storybook/manager-api"),import_global=require("@storybook/global"),STATIC_FILTER="static-filter";import_manager_api.addons.register(STATIC_FILTER,api=>{let excludeTags=Object.entries(import_global.global.TAGS_OPTIONS??{}).reduce((acc,entry)=>{let[tag,option]=entry;return option.excludeFromSidebar&&(acc[tag]=!0),acc},{});api.experimental_setFilter(STATIC_FILTER,item=>
|
|
1
|
+
"use strict";var import_manager_api=require("@storybook/manager-api"),import_global=require("@storybook/global"),STATIC_FILTER="static-filter";import_manager_api.addons.register(STATIC_FILTER,api=>{let excludeTags=Object.entries(import_global.global.TAGS_OPTIONS??{}).reduce((acc,entry)=>{let[tag,option]=entry;return option.excludeFromSidebar&&(acc[tag]=!0),acc},{});api.experimental_setFilter(STATIC_FILTER,item=>{let tags=item.tags??[];return(tags.includes("dev")||item.type==="docs")&&tags.filter(tag=>excludeTags[tag]).length===0})});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { addons } from '@storybook/manager-api';
|
|
2
2
|
import { global } from '@storybook/global';
|
|
3
3
|
|
|
4
|
-
var STATIC_FILTER="static-filter";addons.register(STATIC_FILTER,api=>{let excludeTags=Object.entries(global.TAGS_OPTIONS??{}).reduce((acc,entry)=>{let[tag,option]=entry;return option.excludeFromSidebar&&(acc[tag]=!0),acc},{});api.experimental_setFilter(STATIC_FILTER,item=>
|
|
4
|
+
var STATIC_FILTER="static-filter";addons.register(STATIC_FILTER,api=>{let excludeTags=Object.entries(global.TAGS_OPTIONS??{}).reduce((acc,entry)=>{let[tag,option]=entry;return option.excludeFromSidebar&&(acc[tag]=!0),acc},{});api.experimental_setFilter(STATIC_FILTER,item=>{let tags=item.tags??[];return (tags.includes("dev")||item.type==="docs")&&tags.filter(tag=>excludeTags[tag]).length===0});});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook/core-server",
|
|
3
|
-
"version": "8.1.0-
|
|
3
|
+
"version": "8.1.0-beta.1",
|
|
4
4
|
"description": "Storybook framework-agnostic API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook"
|
|
@@ -59,20 +59,20 @@
|
|
|
59
59
|
"@babel/core": "^7.24.4",
|
|
60
60
|
"@babel/parser": "^7.24.4",
|
|
61
61
|
"@discoveryjs/json-ext": "^0.5.3",
|
|
62
|
-
"@storybook/builder-manager": "8.1.0-
|
|
63
|
-
"@storybook/channels": "8.1.0-
|
|
64
|
-
"@storybook/core-common": "8.1.0-
|
|
65
|
-
"@storybook/core-events": "8.1.0-
|
|
66
|
-
"@storybook/csf": "^0.1.
|
|
67
|
-
"@storybook/csf-tools": "8.1.0-
|
|
68
|
-
"@storybook/docs-mdx": "3.0.0",
|
|
62
|
+
"@storybook/builder-manager": "8.1.0-beta.1",
|
|
63
|
+
"@storybook/channels": "8.1.0-beta.1",
|
|
64
|
+
"@storybook/core-common": "8.1.0-beta.1",
|
|
65
|
+
"@storybook/core-events": "8.1.0-beta.1",
|
|
66
|
+
"@storybook/csf": "^0.1.7",
|
|
67
|
+
"@storybook/csf-tools": "8.1.0-beta.1",
|
|
68
|
+
"@storybook/docs-mdx": "3.1.0-next.0",
|
|
69
69
|
"@storybook/global": "^5.0.0",
|
|
70
|
-
"@storybook/manager": "8.1.0-
|
|
71
|
-
"@storybook/manager-api": "8.1.0-
|
|
72
|
-
"@storybook/node-logger": "8.1.0-
|
|
73
|
-
"@storybook/preview-api": "8.1.0-
|
|
74
|
-
"@storybook/telemetry": "8.1.0-
|
|
75
|
-
"@storybook/types": "8.1.0-
|
|
70
|
+
"@storybook/manager": "8.1.0-beta.1",
|
|
71
|
+
"@storybook/manager-api": "8.1.0-beta.1",
|
|
72
|
+
"@storybook/node-logger": "8.1.0-beta.1",
|
|
73
|
+
"@storybook/preview-api": "8.1.0-beta.1",
|
|
74
|
+
"@storybook/telemetry": "8.1.0-beta.1",
|
|
75
|
+
"@storybook/types": "8.1.0-beta.1",
|
|
76
76
|
"@types/detect-port": "^1.3.0",
|
|
77
77
|
"@types/diff": "^5.0.9",
|
|
78
78
|
"@types/node": "^18.0.0",
|
|
@@ -103,7 +103,7 @@
|
|
|
103
103
|
"ws": "^8.2.3"
|
|
104
104
|
},
|
|
105
105
|
"devDependencies": {
|
|
106
|
-
"@storybook/addon-docs": "8.1.0-
|
|
106
|
+
"@storybook/addon-docs": "8.1.0-beta.1",
|
|
107
107
|
"@types/compression": "^1.7.0",
|
|
108
108
|
"@types/ip": "^1.1.0",
|
|
109
109
|
"@types/node-fetch": "^2.5.7",
|