@storybook/core-server 7.1.0-alpha.25 → 7.1.0-alpha.26
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 +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +11 -11
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropD
|
|
|
7
7
|
`);let statics=[...staticDirs.map(dir=>typeof dir=="string"?dir:`${dir.from}:${dir.to}`),...options.staticDir||[]];statics&&statics.length>0&&await Promise.all(statics.map(async dir=>{try{let relativeDir=staticDirs?(0,import_core_common.getDirectoryFromWorkingDir)({configDir:options.configDir,workingDir:process.cwd(),directory:dir}):dir,{staticDir,staticPath,targetEndpoint}=await parseStaticDir(relativeDir);targetEndpoint.startsWith("/sb-")||import_node_logger2.logger.info(import_chalk2.default`=> Serving static files from {cyan ${staticDir}} at {cyan ${targetEndpoint}}`),router2.use(targetEndpoint,import_express.default.static(staticPath,{index:!1}))}catch(e){import_node_logger2.logger.warn(e.message)}})),router2.use((0,import_serve_favicon.default)(faviconPath))}var parseStaticDir=async arg=>{let lastColonIndex=arg.lastIndexOf(":"),isWindowsRawDirOnly=import_path3.default.win32.isAbsolute(arg)&&lastColonIndex===1,splitIndex=lastColonIndex!==-1&&!isWindowsRawDirOnly?lastColonIndex:arg.length,target=(arg.substring(splitIndex+1)||"/").split(import_path3.default.sep).join(import_path3.default.posix.sep),rawDir=arg.substring(0,splitIndex),staticDir=import_path3.default.isAbsolute(rawDir)?rawDir:`./${rawDir}`,staticPath=import_path3.default.resolve(staticDir),targetDir=target.replace(/^\/?/,"./"),targetEndpoint=targetDir.substring(1);if(!await(0,import_fs_extra2.pathExists)(staticPath))throw new Error((0,import_ts_dedent.dedent)(import_chalk2.default`
|
|
8
8
|
Failed to load static files, no such directory: {cyan ${staticPath}}
|
|
9
9
|
Make sure this directory exists, or omit the {bold -s (--static-dir)} option.
|
|
10
|
-
`));return{staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=import_path4.default.join(outputDir,targetDir);import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));await import_fs_extra3.default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})}catch(e){import_node_logger3.logger.error(e.message),process.exit(-1)}}))}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir((0,import_core_common2.getDirectoryFromWorkingDir)({configDir,workingDir,directory:staticDirAndTarget})),targetPath=import_path4.default.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await import_fs_extra3.default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})},Promise.resolve())}var import_node_url=require("url");async function getManagerBuilder(){return import("@storybook/builder-manager")}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import((0,import_node_url.pathToFileURL)(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder==null?void 0:builder.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}var import_fs_extra4=require("fs-extra"),import_debounce=__toESM(require("lodash/debounce.js")),import_core_events=require("@storybook/core-events");var import_watchpack=__toESM(require("watchpack"));function slash(path8){return
|
|
10
|
+
`));return{staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=import_path4.default.join(outputDir,targetDir);import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));await import_fs_extra3.default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})}catch(e){import_node_logger3.logger.error(e.message),process.exit(-1)}}))}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir((0,import_core_common2.getDirectoryFromWorkingDir)({configDir,workingDir,directory:staticDirAndTarget})),targetPath=import_path4.default.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>import_path4.default.join(targetPath,f));import_node_logger3.logger.info(import_chalk3.default`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await import_fs_extra3.default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)})},Promise.resolve())}var import_node_url=require("url");async function getManagerBuilder(){return import("@storybook/builder-manager")}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import((0,import_node_url.pathToFileURL)(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder==null?void 0:builder.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}var import_fs_extra4=require("fs-extra"),import_debounce=__toESM(require("lodash/debounce.js")),import_core_events=require("@storybook/core-events");var import_watchpack=__toESM(require("watchpack"));function slash(path8){return path8.startsWith("\\\\?\\")?path8:path8.replace(/\\/g,"/")}var import_fs=__toESM(require("fs")),import_path5=__toESM(require("path")),import_globby=__toESM(require("globby")),import_uniq=__toESM(require("lodash/uniq.js")),isDirectory=directory=>{try{return import_fs.default.lstatSync(directory).isDirectory()}catch{return!1}};function toImportPath(relativePath){return relativePath.startsWith(".")?relativePath:`./${relativePath}`}function watchStorySpecifiers(specifiers,options,onInvalidate){let wp=new import_watchpack.default({followSymlinks:!1,ignored:["**/.git","node_modules"]});wp.watch({directories:(0,import_uniq.default)(specifiers.map(ns=>ns.directory))});async function onChangeOrRemove(watchpackPath,removed){let importPath=slash(watchpackPath.startsWith(".")?watchpackPath:`./${watchpackPath}`),matchingSpecifier=specifiers.find(ns=>ns.importPathMatcher.exec(importPath));if(matchingSpecifier){onInvalidate(matchingSpecifier,importPath,removed);return}let absolutePath=import_path5.default.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=import_path5.default.join(options.workingDir,importPath,"**",import_path5.default.basename(specifier.files));(await(0,import_globby.default)(slash(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(import_path5.default.relative(options.workingDir,filePath).replace(/\\/g,"/"));specifier.importPathMatcher.exec(fileImportPath)&&onInvalidate(specifier,fileImportPath,removed)})}))}return wp.on("change",async(filePath,mtime,explanation)=>{await onChangeOrRemove(filePath,!mtime)}),wp.on("remove",async(filePath,explanation)=>{await onChangeOrRemove(filePath,!0)}),()=>wp.close()}var DEBOUNCE=100;async function extractStoriesJson(outputFile,initializedStoryIndexGenerator,transform){let storyIndex=await(await initializedStoryIndexGenerator).getIndex();await(0,import_fs_extra4.writeJSON)(outputFile,transform?transform(storyIndex):storyIndex)}function useStoriesJson({router:router2,initializedStoryIndexGenerator,workingDir=process.cwd(),serverChannel,normalizedStories}){let maybeInvalidate=(0,import_debounce.default)(()=>serverChannel.emit(import_core_events.STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path8,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path8,removed),maybeInvalidate()}),router2.use("/index.json",async(req,res)=>{try{let index=await(await initializedStoryIndexGenerator).getIndex();res.header("Content-Type","application/json"),res.send(JSON.stringify(index))}catch(err){res.status(500),res.send(err.toString())}}),router2.use("/stories.json",async(req,res)=>{try{let generator=await initializedStoryIndexGenerator,index=convertToIndexV3(await generator.getIndex());res.header("Content-Type","application/json"),res.send(JSON.stringify(index))}catch(err){res.status(500),res.send(err.toString())}})}var convertToIndexV3=index=>{let{entries}=index;return{v:3,stories:Object.entries(entries).reduce((acc,[id,entry])=>{let{type,...rest}=entry;return acc[id]={...rest,kind:rest.title,story:rest.name,parameters:{__id:rest.id,docsOnly:type==="docs",fileName:rest.importPath}},acc},{})}};var import_fs_extra5=require("fs-extra"),import_telemetry=require("@storybook/telemetry");async function extractStorybookMetadata(outputFile,configDir){let storybookMetadata=await(0,import_telemetry.getStorybookMetadata)(configDir);await(0,import_fs_extra5.writeJSON)(outputFile,storybookMetadata)}function useStorybookMetadata(router2,configDir){router2.use("/project.json",async(req,res)=>{let storybookMetadata=await(0,import_telemetry.getStorybookMetadata)(configDir);res.header("Content-Type","application/json"),res.send(JSON.stringify(storybookMetadata))})}var import_path7=__toESM(require("path")),import_chalk4=__toESM(require("chalk")),import_fs_extra6=__toESM(require("fs-extra")),import_globby2=__toESM(require("globby"));var import_tiny_invariant=__toESM(require("tiny-invariant")),import_preview_api=require("@storybook/preview-api"),import_core_common3=require("@storybook/core-common"),import_node_logger4=require("@storybook/node-logger"),import_csf_tools=require("@storybook/csf-tools"),import_csf=require("@storybook/csf"),import_docs_mdx=require("@storybook/docs-mdx"),import_ts_dedent2=__toESM(require("ts-dedent"));var import_path6=require("path");function autoName(mdxImportPath,csfImportPath,defaultName){let mdxBasename=(0,import_path6.basename)(mdxImportPath),csfBasename=(0,import_path6.basename)(csfImportPath),[mdxFilename]=mdxBasename.split("."),[csfFilename]=csfBasename.split(".");return mdxFilename===csfFilename?defaultName:mdxFilename}var IndexingError=class extends Error{constructor(message,importPaths,stack){super();this.message=message,this.importPaths=importPaths,stack&&(this.stack=stack)}pathsString(){return this.importPaths.length===1?`${slash(this.importPaths[0])}`:`${this.importPaths.map(slash).join(",")}`}toString(){return`${this.pathsString()}: ${this.message}`}},MultipleIndexingError=class extends Error{constructor(indexingErrors){super();this.indexingErrors=indexingErrors;if(this.indexingErrors.length===0)throw new Error("Unexpected empty error list");if(this.indexingErrors.length===1){let[err]=this.indexingErrors;this.message=`Unable to index ${err.pathsString()}`}else this.message=`Unable to index files:
|
|
11
11
|
${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
12
12
|
`)}`}toString(){return this.indexingErrors.length===1?`${this.message}:
|
|
13
13
|
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return!(tags!=null&&tags.includes(AUTODOCS_TAG))&&!(tags!=null&&tags.includes(STORIES_MDX_TAG))}var makeAbsolute=(otherImport,normalizedPath,workingDir)=>otherImport.startsWith(".")?slash(import_path7.default.resolve(workingDir,(0,import_core_common3.normalizeStoryPath)(import_path7.default.join(import_path7.default.dirname(normalizedPath),otherImport)))):otherImport,StoryIndexGenerator=class{constructor(specifiers,options){this.specifiers=specifiers;this.options=options;this.specifierToCache=new Map}async initialize(){(await Promise.all(this.specifiers.map(async specifier=>{let pathToSubIndex={},fullGlob=slash(import_path7.default.join(this.options.workingDir,specifier.directory,specifier.files)),files=await(0,import_globby2.default)(fullGlob);return files.length===0&&import_node_logger4.once.warn(`No story files found for the specified pattern: ${import_chalk4.default.blue(import_path7.default.join(specifier.directory,specifier.files))}`),files.sort().forEach(absolutePath=>{let ext=import_path7.default.extname(absolutePath);if(ext===".storyshot"){let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath);import_node_logger4.logger.info(`Skipping ${ext} file ${relativePath}`);return}pathToSubIndex[absolutePath]=!1}),[specifier,pathToSubIndex]}))).forEach(([specifier,cache4])=>this.specifierToCache.set(specifier,cache4)),await this.ensureExtracted()}async updateExtracted(updater,overwrite=!1){await Promise.all(this.specifiers.map(async specifier=>{let entry=this.specifierToCache.get(specifier);return Promise.all(Object.keys(entry).map(async absolutePath=>{if(!(entry[absolutePath]&&!overwrite))try{entry[absolutePath]=await updater(specifier,absolutePath,entry[absolutePath])}catch(err){let relativePath=`.${import_path7.default.sep}${import_path7.default.relative(this.options.workingDir,absolutePath)}`;entry[absolutePath]={type:"error",err:new IndexingError(err.message,[relativePath],err.stack)}}}))}))}isDocsMdx(absolutePath){return/(?<!\.stories)\.mdx$/i.test(absolutePath)}async ensureExtracted(){return await this.updateExtracted(async(specifier,absolutePath)=>this.isDocsMdx(absolutePath)?!1:this.extractStories(specifier,absolutePath)),await this.updateExtracted(async(specifier,absolutePath)=>this.extractDocs(specifier,absolutePath)),this.specifiers.flatMap(specifier=>{let cache4=this.specifierToCache.get(specifier);return Object.values(cache4).flatMap(entry=>entry?entry.type==="docs"?[entry]:entry.type==="error"?[entry]:entry.entries:[])})}findDependencies(absoluteImports){return[...this.specifierToCache.values()].flatMap(cache4=>Object.entries(cache4).filter(([fileName,cacheEntry])=>!cacheEntry||cacheEntry.type!=="stories"?!1:!!absoluteImports.find(storyImport=>fileName.match(new RegExp(`^${storyImport}(\\.[^.]+)?$`)))).map(([_,cacheEntry])=>cacheEntry))}async extractStories(specifier,absolutePath){let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath),entries=[],importPath=slash((0,import_core_common3.normalizeStoryPath)(relativePath)),makeTitle=userTitle=>(0,import_preview_api.userOrAutoTitleFromSpecifier)(importPath,specifier,userTitle),storyIndexer=this.options.storyIndexers.find(indexer=>indexer.test.exec(absolutePath));if(!storyIndexer)throw new Error(`No matching story indexer found for ${absolutePath}`);let csf=await storyIndexer.indexer(absolutePath,{makeTitle}),componentTags=csf.meta.tags||[];if(csf.stories.forEach(({id,name,tags:storyTags,parameters})=>{if(!(parameters!=null&¶meters.docsOnly)){let tags=[...storyTags||componentTags,"story"];entries.push({id,title:csf.meta.title,name,importPath,tags,type:"story"})}}),csf.stories.length){let{autodocs}=this.options.docs,componentAutodocs=componentTags.includes(AUTODOCS_TAG),autodocsOptedIn=autodocs===!0||autodocs==="tag"&&componentAutodocs;if(componentTags.includes(STORIES_MDX_TAG)||autodocsOptedIn){let name=this.options.docs.defaultName,id=(0,import_csf.toId)(csf.meta.title,name);entries.unshift({id,title:csf.meta.title,name,importPath,type:"docs",tags:[...componentTags,"docs",...autodocsOptedIn&&!componentAutodocs?[AUTODOCS_TAG]:[]],storiesImports:[]})}}return{entries,type:"stories",dependents:[]}}async extractDocs(specifier,absolutePath){var _a;let relativePath=import_path7.default.relative(this.options.workingDir,absolutePath);try{if(!this.options.storyStoreV7)throw new Error("You cannot use `.mdx` files without using `storyStoreV7`.");let normalizedPath=(0,import_core_common3.normalizeStoryPath)(relativePath),importPath=slash(normalizedPath),content=await import_fs_extra6.default.readFile(absolutePath,"utf8"),result=(0,import_docs_mdx.analyze)(content);if(result.isTemplate)return!1;let absoluteImports=result.imports.map(p=>makeAbsolute(p,normalizedPath,this.options.workingDir)),dependencies=this.findDependencies(absoluteImports),sortedDependencies=dependencies,csfEntry;if(result.of){let absoluteOf=makeAbsolute(result.of,normalizedPath,this.options.workingDir);if(dependencies.forEach(dep=>{if(dep.entries.length>0){let first=dep.entries.find(e=>e.type!=="docs");import_path7.default.normalize(import_path7.default.resolve(this.options.workingDir,first.importPath)).startsWith(import_path7.default.normalize(absoluteOf))&&(csfEntry=first)}sortedDependencies=[dep,...dependencies.filter(d=>d!==dep)]}),!csfEntry)throw new Error(import_ts_dedent2.default`Could not find CSF file at path "${result.of}" referenced by \`of={}\` in docs file "${relativePath}".
|
package/dist/index.mjs
CHANGED
|
@@ -51,7 +51,7 @@ var __create=Object.create;var __defProp=Object.defineProperty;var __getOwnPropD
|
|
|
51
51
|
`);let statics=[...staticDirs.map(dir=>typeof dir=="string"?dir:`${dir.from}:${dir.to}`),...options.staticDir||[]];statics&&statics.length>0&&await Promise.all(statics.map(async dir=>{try{let relativeDir=staticDirs?getDirectoryFromWorkingDir({configDir:options.configDir,workingDir:process.cwd(),directory:dir}):dir,{staticDir,staticPath,targetEndpoint}=await parseStaticDir(relativeDir);targetEndpoint.startsWith("/sb-")||logger.info(chalk9`=> Serving static files from {cyan ${staticDir}} at {cyan ${targetEndpoint}}`),router2.use(targetEndpoint,express.static(staticPath,{index:!1}));}catch(e){logger.warn(e.message);}})),router2.use(favicon(faviconPath));}var parseStaticDir=async arg=>{let lastColonIndex=arg.lastIndexOf(":"),isWindowsRawDirOnly=path5.win32.isAbsolute(arg)&&lastColonIndex===1,splitIndex=lastColonIndex!==-1&&!isWindowsRawDirOnly?lastColonIndex:arg.length,target=(arg.substring(splitIndex+1)||"/").split(path5.sep).join(path5.posix.sep),rawDir=arg.substring(0,splitIndex),staticDir=path5.isAbsolute(rawDir)?rawDir:`./${rawDir}`,staticPath=path5.resolve(staticDir),targetDir=target.replace(/^\/?/,"./"),targetEndpoint=targetDir.substring(1);if(!await pathExists(staticPath))throw new Error(dedent(chalk9`
|
|
52
52
|
Failed to load static files, no such directory: {cyan ${staticPath}}
|
|
53
53
|
Make sure this directory exists, or omit the {bold -s (--static-dir)} option.
|
|
54
|
-
`));return {staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=path5.join(outputDir,targetDir);logger.info(chalk9`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));await fs4__default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});}catch(e){logger.error(e.message),process.exit(-1);}}));}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir(getDirectoryFromWorkingDir({configDir,workingDir,directory:staticDirAndTarget})),targetPath=path5.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));logger.info(chalk9`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await fs4__default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});},Promise.resolve())}async function getManagerBuilder(){return import('@storybook/builder-manager')}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=__require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import(pathToFileURL(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder?.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}function slash(path8){return
|
|
54
|
+
`));return {staticDir,staticPath,targetDir,targetEndpoint}};async function copyAllStaticFiles(staticDirs,outputDir){staticDirs&&staticDirs.length>0&&await Promise.all(staticDirs.map(async dir=>{try{let{staticDir,staticPath,targetDir}=await parseStaticDir(dir),targetPath=path5.join(outputDir,targetDir);logger.info(chalk9`=> Copying static files: {cyan ${staticDir}} => {cyan ${targetDir}}`);let skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));await fs4__default.copy(staticPath,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});}catch(e){logger.error(e.message),process.exit(-1);}}));}async function copyAllStaticFilesRelativeToMain(staticDirs,outputDir,configDir){let workingDir=process.cwd();return staticDirs.reduce(async(acc,dir)=>{await acc;let staticDirAndTarget=typeof dir=="string"?dir:`${dir.from}:${dir.to}`,{staticPath:from,targetEndpoint:to}=await parseStaticDir(getDirectoryFromWorkingDir({configDir,workingDir,directory:staticDirAndTarget})),targetPath=path5.join(outputDir,to),skipPaths=["index.html","iframe.html"].map(f=>path5.join(targetPath,f));logger.info(chalk9`=> Copying static files: {cyan ${from}} at {cyan ${targetPath}}`),await fs4__default.copy(from,targetPath,{dereference:!0,preserveTimestamps:!0,filter:(_,dest)=>!skipPaths.includes(dest)});},Promise.resolve())}async function getManagerBuilder(){return import('@storybook/builder-manager')}async function getPreviewBuilder(builderName,configDir){let builderPackage;if(builderName)builderPackage=__require.resolve(["webpack5"].includes(builderName)?`@storybook/builder-${builderName}`:builderName,{paths:[configDir]});else throw new Error("no builder configured!");return await import(pathToFileURL(builderPackage).href)}async function getBuilders({presets,configDir}){let{builder}=await presets.apply("core",{}),builderName=typeof builder=="string"?builder:builder?.name;return Promise.all([getPreviewBuilder(builderName,configDir),getManagerBuilder()])}function slash(path8){return path8.startsWith("\\\\?\\")?path8:path8.replace(/\\/g,"/")}var isDirectory=directory=>{try{return fs3.lstatSync(directory).isDirectory()}catch{return !1}};function toImportPath(relativePath){return relativePath.startsWith(".")?relativePath:`./${relativePath}`}function watchStorySpecifiers(specifiers,options,onInvalidate){let wp=new Watchpack({followSymlinks:!1,ignored:["**/.git","node_modules"]});wp.watch({directories:uniq(specifiers.map(ns=>ns.directory))});async function onChangeOrRemove(watchpackPath,removed){let importPath=slash(watchpackPath.startsWith(".")?watchpackPath:`./${watchpackPath}`),matchingSpecifier=specifiers.find(ns=>ns.importPathMatcher.exec(importPath));if(matchingSpecifier){onInvalidate(matchingSpecifier,importPath,removed);return}let absolutePath=path5.join(options.workingDir,importPath);!removed&&isDirectory(absolutePath)&&await Promise.all(specifiers.filter(specifier=>importPath.startsWith(specifier.directory)).map(async specifier=>{let dirGlob=path5.join(options.workingDir,importPath,"**",path5.basename(specifier.files));(await glob(slash(dirGlob))).forEach(filePath=>{let fileImportPath=toImportPath(path5.relative(options.workingDir,filePath).replace(/\\/g,"/"));specifier.importPathMatcher.exec(fileImportPath)&&onInvalidate(specifier,fileImportPath,removed);});}));}return wp.on("change",async(filePath,mtime,explanation)=>{await onChangeOrRemove(filePath,!mtime);}),wp.on("remove",async(filePath,explanation)=>{await onChangeOrRemove(filePath,!0);}),()=>wp.close()}var DEBOUNCE=100;async function extractStoriesJson(outputFile,initializedStoryIndexGenerator,transform){let storyIndex=await(await initializedStoryIndexGenerator).getIndex();await writeJSON(outputFile,transform?transform(storyIndex):storyIndex);}function useStoriesJson({router:router2,initializedStoryIndexGenerator,workingDir=process.cwd(),serverChannel,normalizedStories}){let maybeInvalidate=debounce(()=>serverChannel.emit(STORY_INDEX_INVALIDATED),DEBOUNCE,{leading:!0});watchStorySpecifiers(normalizedStories,{workingDir},async(specifier,path8,removed)=>{(await initializedStoryIndexGenerator).invalidate(specifier,path8,removed),maybeInvalidate();}),router2.use("/index.json",async(req,res)=>{try{let index=await(await initializedStoryIndexGenerator).getIndex();res.header("Content-Type","application/json"),res.send(JSON.stringify(index));}catch(err){res.status(500),res.send(err.toString());}}),router2.use("/stories.json",async(req,res)=>{try{let generator=await initializedStoryIndexGenerator,index=convertToIndexV3(await generator.getIndex());res.header("Content-Type","application/json"),res.send(JSON.stringify(index));}catch(err){res.status(500),res.send(err.toString());}});}var convertToIndexV3=index=>{let{entries}=index;return {v:3,stories:Object.entries(entries).reduce((acc,[id,entry])=>{let{type,...rest}=entry;return acc[id]={...rest,kind:rest.title,story:rest.name,parameters:{__id:rest.id,docsOnly:type==="docs",fileName:rest.importPath}},acc},{})}};async function extractStorybookMetadata(outputFile,configDir){let storybookMetadata=await getStorybookMetadata(configDir);await writeJSON(outputFile,storybookMetadata);}function useStorybookMetadata(router2,configDir){router2.use("/project.json",async(req,res)=>{let storybookMetadata=await getStorybookMetadata(configDir);res.header("Content-Type","application/json"),res.send(JSON.stringify(storybookMetadata));});}function autoName(mdxImportPath,csfImportPath,defaultName){let mdxBasename=basename(mdxImportPath),csfBasename=basename(csfImportPath),[mdxFilename]=mdxBasename.split("."),[csfFilename]=csfBasename.split(".");return mdxFilename===csfFilename?defaultName:mdxFilename}var IndexingError=class extends Error{constructor(message,importPaths,stack){super();this.message=message,this.importPaths=importPaths,stack&&(this.stack=stack);}pathsString(){return this.importPaths.length===1?`${slash(this.importPaths[0])}`:`${this.importPaths.map(slash).join(",")}`}toString(){return `${this.pathsString()}: ${this.message}`}},MultipleIndexingError=class extends Error{constructor(indexingErrors){super();this.indexingErrors=indexingErrors;if(this.indexingErrors.length===0)throw new Error("Unexpected empty error list");if(this.indexingErrors.length===1){let[err]=this.indexingErrors;this.message=`Unable to index ${err.pathsString()}`;}else this.message=`Unable to index files:
|
|
55
55
|
${this.indexingErrors.map(err=>`- ${err}`).join(`
|
|
56
56
|
`)}`;}toString(){return this.indexingErrors.length===1?`${this.message}:
|
|
57
57
|
${this.indexingErrors[0].stack}`:this.message}};var AUTODOCS_TAG="autodocs",STORIES_MDX_TAG="stories-mdx",PLAY_FN_TAG="play-fn";function isMdxEntry({tags}){return !tags?.includes(AUTODOCS_TAG)&&!tags?.includes(STORIES_MDX_TAG)}var makeAbsolute=(otherImport,normalizedPath,workingDir)=>otherImport.startsWith(".")?slash(path5.resolve(workingDir,normalizeStoryPath(path5.join(path5.dirname(normalizedPath),otherImport)))):otherImport,StoryIndexGenerator=class{constructor(specifiers,options){this.specifiers=specifiers;this.options=options;this.specifierToCache=new Map;}async initialize(){(await Promise.all(this.specifiers.map(async specifier=>{let pathToSubIndex={},fullGlob=slash(path5.join(this.options.workingDir,specifier.directory,specifier.files)),files=await glob(fullGlob);return files.length===0&&once.warn(`No story files found for the specified pattern: ${chalk9.blue(path5.join(specifier.directory,specifier.files))}`),files.sort().forEach(absolutePath=>{let ext=path5.extname(absolutePath);if(ext===".storyshot"){let relativePath=path5.relative(this.options.workingDir,absolutePath);logger.info(`Skipping ${ext} file ${relativePath}`);return}pathToSubIndex[absolutePath]=!1;}),[specifier,pathToSubIndex]}))).forEach(([specifier,cache4])=>this.specifierToCache.set(specifier,cache4)),await this.ensureExtracted();}async updateExtracted(updater,overwrite=!1){await Promise.all(this.specifiers.map(async specifier=>{let entry=this.specifierToCache.get(specifier);return Promise.all(Object.keys(entry).map(async absolutePath=>{if(!(entry[absolutePath]&&!overwrite))try{entry[absolutePath]=await updater(specifier,absolutePath,entry[absolutePath]);}catch(err){let relativePath=`.${path5.sep}${path5.relative(this.options.workingDir,absolutePath)}`;entry[absolutePath]={type:"error",err:new IndexingError(err.message,[relativePath],err.stack)};}}))}));}isDocsMdx(absolutePath){return /(?<!\.stories)\.mdx$/i.test(absolutePath)}async ensureExtracted(){return await this.updateExtracted(async(specifier,absolutePath)=>this.isDocsMdx(absolutePath)?!1:this.extractStories(specifier,absolutePath)),await this.updateExtracted(async(specifier,absolutePath)=>this.extractDocs(specifier,absolutePath)),this.specifiers.flatMap(specifier=>{let cache4=this.specifierToCache.get(specifier);return Object.values(cache4).flatMap(entry=>entry?entry.type==="docs"?[entry]:entry.type==="error"?[entry]:entry.entries:[])})}findDependencies(absoluteImports){return [...this.specifierToCache.values()].flatMap(cache4=>Object.entries(cache4).filter(([fileName,cacheEntry])=>!cacheEntry||cacheEntry.type!=="stories"?!1:!!absoluteImports.find(storyImport=>fileName.match(new RegExp(`^${storyImport}(\\.[^.]+)?$`)))).map(([_,cacheEntry])=>cacheEntry))}async extractStories(specifier,absolutePath){let relativePath=path5.relative(this.options.workingDir,absolutePath),entries=[],importPath=slash(normalizeStoryPath(relativePath)),makeTitle=userTitle=>userOrAutoTitleFromSpecifier(importPath,specifier,userTitle),storyIndexer=this.options.storyIndexers.find(indexer=>indexer.test.exec(absolutePath));if(!storyIndexer)throw new Error(`No matching story indexer found for ${absolutePath}`);let csf=await storyIndexer.indexer(absolutePath,{makeTitle}),componentTags=csf.meta.tags||[];if(csf.stories.forEach(({id,name,tags:storyTags,parameters})=>{if(!parameters?.docsOnly){let tags=[...storyTags||componentTags,"story"];entries.push({id,title:csf.meta.title,name,importPath,tags,type:"story"});}}),csf.stories.length){let{autodocs}=this.options.docs,componentAutodocs=componentTags.includes(AUTODOCS_TAG),autodocsOptedIn=autodocs===!0||autodocs==="tag"&&componentAutodocs;if(componentTags.includes(STORIES_MDX_TAG)||autodocsOptedIn){let name=this.options.docs.defaultName,id=toId(csf.meta.title,name);entries.unshift({id,title:csf.meta.title,name,importPath,type:"docs",tags:[...componentTags,"docs",...autodocsOptedIn&&!componentAutodocs?[AUTODOCS_TAG]:[]],storiesImports:[]});}}return {entries,type:"stories",dependents:[]}}async extractDocs(specifier,absolutePath){let relativePath=path5.relative(this.options.workingDir,absolutePath);try{if(!this.options.storyStoreV7)throw new Error("You cannot use `.mdx` files without using `storyStoreV7`.");let normalizedPath=normalizeStoryPath(relativePath),importPath=slash(normalizedPath),content=await fs4__default.readFile(absolutePath,"utf8"),result=analyze(content);if(result.isTemplate)return !1;let absoluteImports=result.imports.map(p=>makeAbsolute(p,normalizedPath,this.options.workingDir)),dependencies=this.findDependencies(absoluteImports),sortedDependencies=dependencies,csfEntry;if(result.of){let absoluteOf=makeAbsolute(result.of,normalizedPath,this.options.workingDir);if(dependencies.forEach(dep=>{if(dep.entries.length>0){let first=dep.entries.find(e=>e.type!=="docs");path5.normalize(path5.resolve(this.options.workingDir,first.importPath)).startsWith(path5.normalize(absoluteOf))&&(csfEntry=first);}sortedDependencies=[dep,...dependencies.filter(d=>d!==dep)];}),!csfEntry)throw new Error(dedent2`Could not find CSF file at path "${result.of}" referenced by \`of={}\` in docs file "${relativePath}".
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook/core-server",
|
|
3
|
-
"version": "7.1.0-alpha.
|
|
3
|
+
"version": "7.1.0-alpha.26",
|
|
4
4
|
"description": "Storybook framework-agnostic API",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"storybook"
|
|
@@ -56,18 +56,18 @@
|
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@aw-web-design/x-default-browser": "1.4.88",
|
|
58
58
|
"@discoveryjs/json-ext": "^0.5.3",
|
|
59
|
-
"@storybook/builder-manager": "7.1.0-alpha.
|
|
60
|
-
"@storybook/core-common": "7.1.0-alpha.
|
|
61
|
-
"@storybook/core-events": "7.1.0-alpha.
|
|
59
|
+
"@storybook/builder-manager": "7.1.0-alpha.26",
|
|
60
|
+
"@storybook/core-common": "7.1.0-alpha.26",
|
|
61
|
+
"@storybook/core-events": "7.1.0-alpha.26",
|
|
62
62
|
"@storybook/csf": "^0.1.0",
|
|
63
|
-
"@storybook/csf-tools": "7.1.0-alpha.
|
|
63
|
+
"@storybook/csf-tools": "7.1.0-alpha.26",
|
|
64
64
|
"@storybook/docs-mdx": "^0.1.0",
|
|
65
65
|
"@storybook/global": "^5.0.0",
|
|
66
|
-
"@storybook/manager": "7.1.0-alpha.
|
|
67
|
-
"@storybook/node-logger": "7.1.0-alpha.
|
|
68
|
-
"@storybook/preview-api": "7.1.0-alpha.
|
|
69
|
-
"@storybook/telemetry": "7.1.0-alpha.
|
|
70
|
-
"@storybook/types": "7.1.0-alpha.
|
|
66
|
+
"@storybook/manager": "7.1.0-alpha.26",
|
|
67
|
+
"@storybook/node-logger": "7.1.0-alpha.26",
|
|
68
|
+
"@storybook/preview-api": "7.1.0-alpha.26",
|
|
69
|
+
"@storybook/telemetry": "7.1.0-alpha.26",
|
|
70
|
+
"@storybook/types": "7.1.0-alpha.26",
|
|
71
71
|
"@types/detect-port": "^1.3.0",
|
|
72
72
|
"@types/node": "^16.0.0",
|
|
73
73
|
"@types/node-fetch": "^2.5.7",
|
|
@@ -119,5 +119,5 @@
|
|
|
119
119
|
],
|
|
120
120
|
"platform": "node"
|
|
121
121
|
},
|
|
122
|
-
"gitHead": "
|
|
122
|
+
"gitHead": "515abaa55abc8ad20f906e4ce46cde3d3850991e"
|
|
123
123
|
}
|