12345678910111213141516 |
- import { __commonJS, __toESM, __require } from './chunk-3BMY5HTZ.mjs';
- import webpack, { ProgressPlugin } from 'webpack';
- import webpackDevMiddleware from 'webpack-dev-middleware';
- import webpackHotMiddleware from 'webpack-hot-middleware';
- import { logger } from '@storybook/node-logger';
- import { toImportFn, toRequireContextString, checkWebpackVersion } from '@storybook/core-webpack';
- import { join, isAbsolute, resolve, parse, dirname } from 'path';
- import express from 'express';
- import fs from 'fs-extra';
- import { PREVIEW_BUILDER_PROGRESS } from '@storybook/core-events';
- import { WebpackMissingStatsError, WebpackInvocationError, WebpackCompilationError } from '@storybook/core-events/server-errors';
- import { getBuilderOptions, normalizeStories, loadPreviewOrConfigFile, handlebars, readTemplate, getRendererName, interpolate } from '@storybook/core-common';
- var require_pretty_hrtime=__commonJS({"../../node_modules/pretty-hrtime/index.js"(exports,module){var minimalDesc=["h","min","s","ms","\u03BCs","ns"],verboseDesc=["hour","minute","second","millisecond","microsecond","nanosecond"],convert=[3600,60,1,1e6,1e3,1];module.exports=function(source,opts){var verbose,precise,i,spot,sourceAtStep,valAtStep,decimals,strAtStep,results,totalSeconds;if(verbose=!1,precise=!1,opts&&(verbose=opts.verbose||!1,precise=opts.precise||!1),!Array.isArray(source)||source.length!==2||typeof source[0]!="number"||typeof source[1]!="number")return "";for(source[1]<0&&(totalSeconds=source[0]+source[1]/1e9,source[0]=parseInt(totalSeconds),source[1]=parseFloat((totalSeconds%1).toPrecision(9))*1e9),results="",i=0;i<6&&(spot=i<3?0:1,sourceAtStep=source[spot],i!==3&&i!==0&&(sourceAtStep=sourceAtStep%convert[i-1]),i===2&&(sourceAtStep+=source[1]/1e9),valAtStep=sourceAtStep/convert[i],!(valAtStep>=1&&(verbose&&(valAtStep=Math.floor(valAtStep)),precise?strAtStep=valAtStep.toString():(decimals=valAtStep>=10?0:2,strAtStep=valAtStep.toFixed(decimals)),strAtStep.indexOf(".")>-1&&strAtStep[strAtStep.length-1]==="0"&&(strAtStep=strAtStep.replace(/\.?0+$/,"")),results&&(results+=" "),results+=strAtStep,verbose?(results+=" "+verboseDesc[i],strAtStep!=="1"&&(results+="s")):results+=" "+minimalDesc[i],!verbose)));i++);return results};}});var import_pretty_hrtime=__toESM(require_pretty_hrtime());function slash(path){return path.startsWith("\\\\?\\")?path:path.replace(/\\/g,"/")}var getVirtualModules=async options=>{let virtualModules={},builderOptions=await getBuilderOptions(options),workingDir=process.cwd(),isProd=options.configType==="PRODUCTION",nonNormalizedStories=await options.presets.apply("stories",[]),entries=[],stories=normalizeStories(nonNormalizedStories,{configDir:options.configDir,workingDir}),previewAnnotations=[...(await options.presets.apply("previewAnnotations",[],options)).map(entry=>typeof entry=="object"?entry.absolute:isAbsolute(entry)?entry:slash(entry)),loadPreviewOrConfigFile(options)].filter(Boolean);if(options.features?.storyStoreV7){let storiesFilename="storybook-stories.js",storiesPath=resolve(join(workingDir,storiesFilename)),needPipelinedImport=!!builderOptions.lazyCompilation&&!isProd;virtualModules[storiesPath]=toImportFn(stories,{needPipelinedImport});let configEntryPath=resolve(join(workingDir,"storybook-config-entry.js"));virtualModules[configEntryPath]=handlebars(await readTemplate(__require.resolve("@storybook/builder-webpack5/templates/virtualModuleModernEntry.js.handlebars")),{storiesFilename,previewAnnotations}).replace(/\\/g,"\\\\"),entries.push(configEntryPath);}else {let rendererName=await getRendererName(options),rendererInitEntry=resolve(join(workingDir,"storybook-init-renderer-entry.js"));virtualModules[rendererInitEntry]=`import '${slash(rendererName)}';`,entries.push(rendererInitEntry);let entryTemplate=await readTemplate(__require.resolve("@storybook/builder-webpack5/templates/virtualModuleEntry.template.js"));if(previewAnnotations.forEach(previewAnnotationFilename=>{if(!previewAnnotationFilename)return;let entryFilename=previewAnnotationFilename.startsWith(".")?`${previewAnnotationFilename.replace(/(\w)(\/|\\)/g,"$1-")}-generated-config-entry.js`:`${previewAnnotationFilename}-generated-config-entry.js`;virtualModules[entryFilename]=interpolate(entryTemplate,{previewAnnotationFilename}),entries.push(entryFilename);}),stories.length>0){let storyTemplate=await readTemplate(__require.resolve("@storybook/builder-webpack5/templates/virtualModuleStory.template.js")),storiesFilename=resolve(join(workingDir,"generated-stories-entry.cjs"));virtualModules[storiesFilename]=interpolate(storyTemplate,{rendererName}).replace("'{{stories}}'",stories.map(toRequireContextString).join(",")),entries.push(storiesFilename);}}return {virtualModules,entries}};var printDuration=startTime=>(0, import_pretty_hrtime.default)(process.hrtime(startTime)).replace(" ms"," milliseconds").replace(" s"," seconds").replace(" m"," minutes"),getAbsolutePath=input=>dirname(__require.resolve(join(input,"package.json"))),compilation,reject,executor={get:async options=>{let version=await options.presets.apply("webpackVersion")||"5",webpackInstance=(await options.presets.apply("webpackInstance"))?.default||webpack;return checkWebpackVersion({version},"5","builder-webpack5"),webpackInstance}},getConfig=async options=>{let{presets}=options,typescriptOptions=await presets.apply("typescript",{},options),frameworkOptions=await presets.apply("frameworkOptions");return presets.apply("webpack",{},{...options,typescriptOptions,frameworkOptions})},asyncIterator,bail=async()=>{if(asyncIterator)try{await asyncIterator.throw(new Error);}catch{}return reject&&reject(),new Promise((res,rej)=>{if(process&&compilation)try{compilation.close(()=>res()),logger.warn("Force closed preview build");}catch{logger.warn("Unable to close preview build!"),res();}else res();})},starter=async function*({startTime,options,router,channel}){let webpackInstance=await executor.get(options);yield;let config=await getConfig(options);if(config.stats==="none"||config.stats==="summary")throw new WebpackMissingStatsError;yield;let compiler=webpackInstance(config);if(!compiler)throw new WebpackInvocationError({error:new Error("Missing Webpack compiler at runtime!")});yield;let modulesCount=await options.cache?.get("modulesCount").catch(()=>{})||1e3,totalModules,value=0;new ProgressPlugin({handler:(newValue,message,arg3)=>{value=Math.max(newValue,value);let progress={value,message:message.charAt(0).toUpperCase()+message.slice(1)};if(message==="building"){let counts=arg3&&arg3.match(/(\d+)\/(\d+)/)||[],complete=parseInt(counts[1],10),total=parseInt(counts[2],10);!Number.isNaN(complete)&&!Number.isNaN(total)&&(progress.modules={complete,total},totalModules=total);}value===1&&(options.cache&&options.cache.set("modulesCount",totalModules),progress.message||(progress.message=`Completed in ${printDuration(startTime)}.`)),channel.emit(PREVIEW_BUILDER_PROGRESS,progress);},modulesCount}).apply(compiler);let middlewareOptions={publicPath:config.output?.publicPath,writeToDisk:!0,stats:"errors-only"};compilation=webpackDevMiddleware(compiler,middlewareOptions);let previewResolvedDir=getAbsolutePath("@storybook/preview"),previewDirOrigin=join(previewResolvedDir,"dist");router.use("/sb-preview",express.static(previewDirOrigin,{immutable:!0,maxAge:"5m"})),router.use(compilation),router.use(webpackHotMiddleware(compiler,{log:!1}));let stats=await new Promise((res,rej)=>{compilation?.waitUntilValid(res),reject=rej;});if(yield,!stats)throw new WebpackMissingStatsError;let{warnings,errors}=getWebpackStats({config,stats});if(warnings.length>0&&warnings?.forEach(e=>logger.warn(e.message)),errors.length>0)throw new WebpackCompilationError({errors});return {bail,stats,totalTime:process.hrtime(startTime)}};function getWebpackStats({config,stats}){let statsOptions=typeof config.stats=="string"?config.stats:{...config.stats,warnings:!0,errors:!0},{warnings=[],errors=[]}=stats?.toJson(statsOptions)||{};return {warnings,errors}}var builder=async function*({startTime,options}){let webpackInstance=await executor.get(options);yield;let config=await getConfig(options);if(config.stats==="none"||config.stats==="summary")throw new WebpackMissingStatsError;yield;let compiler=webpackInstance(config);if(!compiler)throw new WebpackInvocationError({error:new Error("Missing Webpack compiler at runtime!")});let webpackCompilation=new Promise((succeed,fail)=>{compiler.run((error,stats)=>{if(error){compiler.close(()=>fail(new WebpackInvocationError({error})));return}if(!stats)throw new WebpackMissingStatsError;let{warnings,errors}=getWebpackStats({config,stats});if(warnings.length>0&&warnings?.forEach(e=>logger.warn(e.message)),errors.length>0){errors.forEach(e=>logger.error(e.message)),compiler.close(()=>fail(new WebpackCompilationError({errors})));return}compiler.close(closeErr=>closeErr?fail(new WebpackInvocationError({error:closeErr})):succeed(stats));});}),previewResolvedDir=getAbsolutePath("@storybook/preview"),previewDirOrigin=join(previewResolvedDir,"dist"),previewDirTarget=join(options.outputDir||"","sb-preview"),previewFiles=fs.copy(previewDirOrigin,previewDirTarget,{filter:src=>{let{ext}=parse(src);return ext?ext===".js":!0}}),[webpackCompilationOutput]=await Promise.all([webpackCompilation,previewFiles]);return webpackCompilationOutput},start=async options=>{asyncIterator=starter(options);let result;do result=await asyncIterator.next();while(!result.done);return result.value},build=async options=>{asyncIterator=builder(options);let result;do result=await asyncIterator.next();while(!result.done);return result.value},corePresets=[join(__dirname,"presets/preview-preset.js")],overridePresets=[join(__dirname,"./presets/custom-webpack-preset.js")];
- export { bail, build, corePresets, executor, getConfig, getVirtualModules, overridePresets, printDuration, start };
|