@storybook/builder-vite 9.0.0-beta.9 → 9.0.0-rc.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 CHANGED
@@ -21,7 +21,7 @@ globstar while`,file,fr,pattern,pr,swallowee),this.matchOne(file.slice(fr),patte
21
21
  export async function importFn(path) {
22
22
  return await importers[path]();
23
23
  }
24
- `}async function generateImportFnScriptCode(options){let stories=await listStories(options);return await toImportFn(stories)}var import_common3=require("storybook/internal/common"),import_csf_tools=require("storybook/internal/csf-tools");var normalizedAliasSymbol=Symbol.for("pathe:normalizedAlias");var FILENAME_RE=/(^|[/\\])([^/\\]+?)(?=(\.[^.]+)?$)/;function filename(path3){return path3.match(FILENAME_RE)?.[2]}var import_ts_dedent2=require("ts-dedent");function processPreviewAnnotation(path3,projectRoot){return typeof path3=="object"?path3.bare!=null&&path3.absolute===""?path3.bare:normalize(path3.absolute):isAbsolute(path3)?normalize(path3):normalize(resolve(projectRoot,path3))}var SB_VIRTUAL_FILES={VIRTUAL_APP_FILE:"virtual:/@storybook/builder-vite/vite-app.js",VIRTUAL_STORIES_FILE:"virtual:/@storybook/builder-vite/storybook-stories.js",VIRTUAL_PREVIEW_FILE:"virtual:/@storybook/builder-vite/preview-entry.js",VIRTUAL_ADDON_SETUP_FILE:"virtual:/@storybook/builder-vite/setup-addons.js"};function getResolvedVirtualModuleId(virtualModuleId){return`\0${virtualModuleId}`}function getOriginalVirtualModuleId(resolvedVirtualModuleId){return resolvedVirtualModuleId.slice(1)}async function generateModernIframeScriptCode(options,projectRoot){let{presets,configDir}=options,frameworkName=await(0,import_common3.getFrameworkName)(options),previewOrConfigFile=(0,import_common3.loadPreviewOrConfigFile)({configDir}),previewConfig=previewOrConfigFile?await(0,import_csf_tools.readConfig)(previewOrConfigFile):void 0,isCsf4=previewConfig?(0,import_csf_tools.isCsfFactoryPreview)(previewConfig):!1,previewAnnotations=await presets.apply("previewAnnotations",[],options);return generateModernIframeScriptCodeFromPreviews({previewAnnotations:[...previewAnnotations,previewOrConfigFile],projectRoot,frameworkName,isCsf4})}async function generateModernIframeScriptCodeFromPreviews(options){let{projectRoot,frameworkName}=options,previewAnnotationURLs=options.previewAnnotations.filter(path3=>path3!==void 0).map(path3=>processPreviewAnnotation(path3,projectRoot)),variables=[],imports=[];for(let previewAnnotation of previewAnnotationURLs){let variable=genSafeVariableName(filename(previewAnnotation)).replace(/_(45|46|47)/g,"_")+"_"+hash(previewAnnotation);variables.push(variable),imports.push(genImport(previewAnnotation,{name:"*",as:variable}))}let previewFileURL=previewAnnotationURLs[previewAnnotationURLs.length-1],previewFileVariable=variables[variables.length-1],previewFileImport=imports[imports.length-1],getPreviewAnnotationsFunction=options.isCsf4?import_ts_dedent2.dedent`
24
+ `}async function generateImportFnScriptCode(options){let stories=await listStories(options);return await toImportFn(stories)}var import_common3=require("storybook/internal/common"),import_core_events=require("storybook/internal/core-events"),import_csf_tools=require("storybook/internal/csf-tools");var normalizedAliasSymbol=Symbol.for("pathe:normalizedAlias");var FILENAME_RE=/(^|[/\\])([^/\\]+?)(?=(\.[^.]+)?$)/;function filename(path3){return path3.match(FILENAME_RE)?.[2]}var import_ts_dedent2=require("ts-dedent");function processPreviewAnnotation(path3,projectRoot){return typeof path3=="object"?path3.bare!=null&&path3.absolute===""?path3.bare:normalize(path3.absolute):isAbsolute(path3)?normalize(path3):normalize(resolve(projectRoot,path3))}var SB_VIRTUAL_FILES={VIRTUAL_APP_FILE:"virtual:/@storybook/builder-vite/vite-app.js",VIRTUAL_STORIES_FILE:"virtual:/@storybook/builder-vite/storybook-stories.js",VIRTUAL_PREVIEW_FILE:"virtual:/@storybook/builder-vite/preview-entry.js",VIRTUAL_ADDON_SETUP_FILE:"virtual:/@storybook/builder-vite/setup-addons.js"};function getResolvedVirtualModuleId(virtualModuleId){return`\0${virtualModuleId}`}function getOriginalVirtualModuleId(resolvedVirtualModuleId){return resolvedVirtualModuleId.slice(1)}async function generateModernIframeScriptCode(options,projectRoot){let{presets,configDir}=options,frameworkName=await(0,import_common3.getFrameworkName)(options),previewOrConfigFile=(0,import_common3.loadPreviewOrConfigFile)({configDir}),previewConfig=previewOrConfigFile?await(0,import_csf_tools.readConfig)(previewOrConfigFile):void 0,isCsf4=previewConfig?(0,import_csf_tools.isCsfFactoryPreview)(previewConfig):!1,previewAnnotations=await presets.apply("previewAnnotations",[],options);return generateModernIframeScriptCodeFromPreviews({previewAnnotations:[...previewAnnotations,previewOrConfigFile],projectRoot,frameworkName,isCsf4})}async function generateModernIframeScriptCodeFromPreviews(options){let{projectRoot,frameworkName}=options,previewAnnotationURLs=options.previewAnnotations.filter(path3=>path3!==void 0).map(path3=>processPreviewAnnotation(path3,projectRoot)),variables=[],imports=[];for(let previewAnnotation of previewAnnotationURLs){let variable=genSafeVariableName(filename(previewAnnotation)).replace(/_(45|46|47)/g,"_")+"_"+hash(previewAnnotation);variables.push(variable),imports.push(genImport(previewAnnotation,{name:"*",as:variable}))}let previewFileURL=previewAnnotationURLs[previewAnnotationURLs.length-1],previewFileVariable=variables[variables.length-1],previewFileImport=imports[imports.length-1],getPreviewAnnotationsFunction=options.isCsf4?import_ts_dedent2.dedent`
25
25
  const getProjectAnnotations = (hmrPreviewAnnotationModules = []) => {
26
26
  const preview = hmrPreviewAnnotationModules[0] ?? ${previewFileVariable};
27
27
  return preview.default.composed;
@@ -34,6 +34,10 @@ globstar while`,file,fr,pattern,pr,swallowee),this.matchOne(file.slice(fr),patte
34
34
  import.meta.hot.decline();
35
35
  }`.trim():import_ts_dedent2.dedent`
36
36
  if (import.meta.hot) {
37
+ import.meta.hot.on('vite:afterUpdate', () => {
38
+ window.__STORYBOOK_PREVIEW__.channel.emit('${import_core_events.STORY_HOT_UPDATED}');
39
+ });
40
+
37
41
  import.meta.hot.accept('${SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE}', (newModule) => {
38
42
  // importFn has changed so we need to patch the new one in
39
43
  window.__STORYBOOK_PREVIEW__.onStoriesChanged({ importFn: newModule.importFn });
@@ -49,19 +53,19 @@ globstar while`,file,fr,pattern,pr,swallowee),this.matchOne(file.slice(fr),patte
49
53
  import '${SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE}';
50
54
 
51
55
  setup();
52
-
56
+
53
57
  import { composeConfigs, PreviewWeb } from 'storybook/preview-api';
54
58
  import { isPreview } from 'storybook/internal/csf';
55
59
  import { importFn } from '${SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE}';
56
-
60
+
57
61
  ${options.isCsf4?previewFileImport:imports.join(`
58
62
  `)}
59
63
  ${getPreviewAnnotationsFunction}
60
64
 
61
65
  window.__STORYBOOK_PREVIEW__ = window.__STORYBOOK_PREVIEW__ || new PreviewWeb(importFn, getProjectAnnotations);
62
-
66
+
63
67
  window.__STORYBOOK_STORY_STORE__ = window.__STORYBOOK_STORY_STORE__ || window.__STORYBOOK_PREVIEW__.storyStore;
64
-
68
+
65
69
  ${generateHMRHandler()};
66
70
  `.trim()}function hash(value){return value.split("").reduce((acc,char)=>acc+char.charCodeAt(0),0)}async function generateAddonSetupCode(){return`
67
71
  import { createBrowserChannel } from 'storybook/internal/channels';
@@ -74,7 +78,7 @@ globstar while`,file,fr,pattern,pr,swallowee),this.matchOne(file.slice(fr),patte
74
78
  if (window.CONFIG_TYPE === 'DEVELOPMENT'){
75
79
  window.__STORYBOOK_SERVER_CHANNEL__ = channel;
76
80
  }
77
- `.trim()}var import_common4=require("storybook/internal/common");async function transformIframeHtml(html,options){let{configType,features,presets}=options,build3=await presets.apply("build"),frameworkOptions=await presets.apply("frameworkOptions"),headHtmlSnippet=await presets.apply("previewHead"),bodyHtmlSnippet=await presets.apply("previewBody"),logLevel=await presets.apply("logLevel",void 0),docsOptions=await presets.apply("docs"),tagsOptions=await presets.apply("tags"),coreOptions=await presets.apply("core"),stories=(0,import_common4.normalizeStories)(await options.presets.apply("stories",[],options),{configDir:options.configDir,workingDir:process.cwd()}).map(specifier=>({...specifier,importPathMatcher:specifier.importPathMatcher.source})),otherGlobals={...build3?.test?.disableBlocks?{__STORYBOOK_BLOCKS_EMPTY_MODULE__:{}}:{}},transformedHtml=html.replace("[CONFIG_TYPE HERE]",configType||"").replace("[LOGLEVEL HERE]",logLevel||"").replace("'[FRAMEWORK_OPTIONS HERE]'",JSON.stringify(frameworkOptions)).replace("('OTHER_GLOBALS HERE');",Object.entries(otherGlobals).map(([k,v])=>`window["${k}"] = ${JSON.stringify(v)};`).join("")).replace("'[CHANNEL_OPTIONS HERE]'",JSON.stringify(coreOptions&&coreOptions.channelOptions?coreOptions.channelOptions:{})).replace("'[FEATURES HERE]'",JSON.stringify(features||{})).replace("'[STORIES HERE]'",JSON.stringify(stories||{})).replace("'[DOCS_OPTIONS HERE]'",JSON.stringify(docsOptions||{})).replace("'[TAGS_OPTIONS HERE]'",JSON.stringify(tagsOptions||{})).replace("<!-- [HEAD HTML SNIPPET HERE] -->",headHtmlSnippet||"").replace("<!-- [BODY HTML SNIPPET HERE] -->",bodyHtmlSnippet||"");return configType==="DEVELOPMENT"?transformedHtml.replace("virtual:/@storybook/builder-vite/vite-app.js",`/@id/__x00__${SB_VIRTUAL_FILES.VIRTUAL_APP_FILE}`):transformedHtml}function codeGeneratorPlugin(options){let iframePath=require.resolve("@storybook/builder-vite/input/iframe.html"),iframeId,projectRoot;return{name:"storybook:code-generator-plugin",enforce:"pre",configureServer(server2){server2.watcher.on("change",()=>{let appModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE));appModule&&server2.moduleGraph.invalidateModule(appModule);let storiesModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE));storiesModule&&server2.moduleGraph.invalidateModule(storiesModule)}),server2.watcher.on("add",path3=>{(/\.stories\.([tj])sx?$/.test(path3)||/\.mdx$/.test(path3))&&server2.watcher.emit("change",getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE))})},config(config,{command}){command==="build"&&(config.build||(config.build={}),config.build.rollupOptions={...config.build.rollupOptions,input:iframePath})},configResolved(config){projectRoot=config.root,iframeId=`${config.root}/iframe.html`},resolveId(source){if(source===SB_VIRTUAL_FILES.VIRTUAL_APP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE);if(source===iframePath)return iframeId;if(source===SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)},async load(id,config){if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE))return generateImportFnScriptCode(options);if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE))return generateAddonSetupCode();if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE))return generateModernIframeScriptCode(options,projectRoot);if(id===iframeId)return(0,import_node_fs.readFileSync)(require.resolve("@storybook/builder-vite/input/iframe.html"),"utf-8")},async transformIndexHtml(html,ctx){if(ctx.path==="/iframe.html")return transformIframeHtml(html,options)}}}var import_csf_plugin=require("@storybook/csf-plugin");async function csfPlugin(config){let{presets}=config,docsOptions=(await presets.apply("addons",[])).find(a=>[a,a.name].includes("@storybook/addon-docs"))?.options??{};return(0,import_csf_plugin.vite)(docsOptions?.csfPluginOptions)}var import_node_fs2=require("fs"),import_promises2=require("fs/promises"),import_node_path3=require("path");var import_find_cache_dir=__toESM(require_find_cache_dir());var escapeKeys=key=>key.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),defaultImportRegExp="import ([^*{}]+) from",replacementMap=new Map([["import ","const "],["import{","const {"],["* as ",""],[" as ",": "],[" from "," = "],["}from","} ="]]);async function externalGlobalsPlugin(externals){await init;let{mergeAlias}=await import("vite");return{name:"storybook:external-globals-plugin",enforce:"post",async config(config,{command}){if(command!=="serve")return;let newAlias=mergeAlias([],config.resolve?.alias),cachePath=(0,import_find_cache_dir.default)({name:"sb-vite-plugin-externals",create:!0});return await Promise.all(Object.keys(externals).map(async externalKey=>{let externalCachePath=(0,import_node_path3.join)(cachePath,`${externalKey}.js`);if(newAlias.push({find:new RegExp(`^${externalKey}$`),replacement:externalCachePath}),!(0,import_node_fs2.existsSync)(externalCachePath)){let directory=(0,import_node_path3.dirname)(externalCachePath);await(0,import_promises2.mkdir)(directory,{recursive:!0})}await(0,import_promises2.writeFile)(externalCachePath,`module.exports = ${externals[externalKey]};`)})),{resolve:{alias:newAlias}}},async transform(code,id){let globalsList=Object.keys(externals);if(globalsList.every(glob2=>!code.includes(glob2)))return;let[imports]=parse(code),src=new MagicString(code);return imports.forEach(({n:path3,ss:startPosition,se:endPosition})=>{let packageName=path3;if(packageName&&globalsList.includes(packageName)){let importStatement=src.slice(startPosition,endPosition),transformedImport=rewriteImport(importStatement,externals,packageName);src.update(startPosition,endPosition,transformedImport)}}),{code:src.toString(),map:null}}}}function getDefaultImportReplacement(match2){let matched=match2.match(defaultImportRegExp);return matched&&`const {default: ${matched[1]}} =`}function getSearchRegExp(packageName){let staticKeys=[...replacementMap.keys()].map(escapeKeys),packageNameLiteral=`.${packageName}.`,dynamicImportExpression=`await import\\(.${packageName}.\\)`,lookup=[defaultImportRegExp,...staticKeys,packageNameLiteral,dynamicImportExpression];return new RegExp(`(${lookup.join("|")})`,"g")}function rewriteImport(importStatement,globs,packageName){let search=getSearchRegExp(packageName);return importStatement.replace(search,match2=>replacementMap.get(match2)??getDefaultImportReplacement(match2)??globs[packageName])}var import_node_path4=require("path");function stripQueryParams(filePath){return filePath.split("?")[0]}function isUserCode(moduleName){return moduleName?Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(moduleName))?!0:!moduleName.startsWith("vite/")&&!moduleName.startsWith("\0")&&moduleName!=="react/jsx-runtime":!1}function pluginWebpackStats({workingDir}){function normalize3(filename2){if(filename2.startsWith("virtual:"))return`/${filename2}`;if(Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(filename2)))return`/${getOriginalVirtualModuleId(filename2)}`;{let relativePath=(0,import_node_path4.relative)(workingDir,stripQueryParams(filename2));return`./${slash(relativePath)}`}}function createReasons(importers){return(importers||[]).map(i=>({moduleName:normalize3(i)}))}function createStatsMapModule(filename2,importers){return{id:filename2,name:filename2,reasons:createReasons(importers)}}let statsMap=new Map;return{name:"storybook:rollup-plugin-webpack-stats",enforce:"post",moduleParsed:function(mod){isUserCode(mod.id)&&mod.importedIds.concat(mod.dynamicallyImportedIds).filter(name=>isUserCode(name)).forEach(depIdUnsafe=>{let depId=normalize3(depIdUnsafe);if(!statsMap.has(depId)){statsMap.set(depId,createStatsMapModule(depId,[mod.id]));return}let m=statsMap.get(depId);m&&(m.reasons=(m.reasons??[]).concat(createReasons([mod.id])).filter(r=>r.moduleName!==depId),statsMap.set(depId,m))})},storybookGetStats(){let stats={modules:Array.from(statsMap.values())};return{...stats,toJson:()=>stats}}}}var configEnvServe={mode:"development",command:"serve",isSsrBuild:!1},configEnvBuild={mode:"production",command:"build",isSsrBuild:!1};async function commonConfig(options,_type){let configEnv=_type==="development"?configEnvServe:configEnvBuild,{loadConfigFromFile,mergeConfig,defaultClientConditions=[]}=await import("vite"),{viteConfigPath}=await(0,import_common5.getBuilderOptions)(options),projectRoot=(0,import_node_path5.resolve)(options.configDir,".."),{config:{build:buildProperty=void 0,...userConfig}={}}=await loadConfigFromFile(configEnv,viteConfigPath,projectRoot)??{},sbConfig={configFile:!1,cacheDir:(0,import_common5.resolvePathInStorybookCache)("sb-vite",options.cacheKey),root:projectRoot,base:"./",plugins:await pluginConfig(options),resolve:{conditions:["storybook","stories","test",...defaultClientConditions],preserveSymlinks:(0,import_common5.isPreservingSymlinks)(),alias:{assert:require.resolve("browser-assert")}},envPrefix:userConfig.envPrefix?["STORYBOOK_"]:["VITE_","STORYBOOK_"],build:{target:buildProperty?.target}};return mergeConfig(userConfig,sbConfig)}async function pluginConfig(options){let frameworkName=await(0,import_common5.getFrameworkName)(options),build3=await options.presets.apply("build"),externals=import_globals.globalsNameReferenceMap;return build3?.test?.disableBlocks&&(externals["@storybook/addon-docs/blocks"]="__STORYBOOK_BLOCKS_EMPTY_MODULE__"),[codeGeneratorPlugin(options),await csfPlugin(options),await injectExportOrderPlugin(),await stripStoryHMRBoundary(),{name:"storybook:allow-storybook-dir",enforce:"post",config(config){config?.server?.fs?.allow&&config.server.fs.allow.push(".storybook")}},await externalGlobalsPlugin(externals),pluginWebpackStats({workingDir:process.cwd()})]}function findPlugin(config,name){return config.plugins?.find(p=>p&&"name"in p&&p.name===name)}async function build(options){let{build:viteBuild,mergeConfig}=await import("vite"),{presets}=options,config=await commonConfig(options,"build");config.build=mergeConfig(config,{build:{outDir:options.outputDir,emptyOutDir:!1,rollupOptions:{external:[/\.\/sb-common-assets\/.*\.woff2/]},...options.test?{reportCompressedSize:!1,sourcemap:!options.build?.test?.disableSourcemaps,target:"esnext",treeshake:!options.build?.test?.disableTreeShaking}:{}}}).build;let finalConfig=await presets.apply("viteFinal",config,options);options.features?.developmentModeForBuild&&finalConfig.plugins?.push({name:"storybook:define-env",config:()=>({define:{"process.env.NODE_ENV":JSON.stringify("development")}})});let turbosnapPluginName="rollup-plugin-turbosnap";return finalConfig.plugins&&await hasVitePlugins(finalConfig.plugins,[turbosnapPluginName])&&(import_node_logger.logger.warn(import_ts_dedent3.dedent`Found '${turbosnapPluginName}' which is now included by default in Storybook 8.
81
+ `.trim()}var import_common4=require("storybook/internal/common");async function transformIframeHtml(html,options){let{configType,features,presets}=options,build3=await presets.apply("build"),frameworkOptions=await presets.apply("frameworkOptions"),headHtmlSnippet=await presets.apply("previewHead"),bodyHtmlSnippet=await presets.apply("previewBody"),logLevel=await presets.apply("logLevel",void 0),docsOptions=await presets.apply("docs"),tagsOptions=await presets.apply("tags"),coreOptions=await presets.apply("core"),stories=(0,import_common4.normalizeStories)(await options.presets.apply("stories",[],options),{configDir:options.configDir,workingDir:process.cwd()}).map(specifier=>({...specifier,importPathMatcher:specifier.importPathMatcher.source})),otherGlobals={...build3?.test?.disableBlocks?{__STORYBOOK_BLOCKS_EMPTY_MODULE__:{}}:{}},transformedHtml=html.replace("[CONFIG_TYPE HERE]",configType||"").replace("[LOGLEVEL HERE]",logLevel||"").replace("'[FRAMEWORK_OPTIONS HERE]'",JSON.stringify(frameworkOptions)).replace("('OTHER_GLOBALS HERE');",Object.entries(otherGlobals).map(([k,v])=>`window["${k}"] = ${JSON.stringify(v)};`).join("")).replace("'[CHANNEL_OPTIONS HERE]'",JSON.stringify(coreOptions&&coreOptions.channelOptions?coreOptions.channelOptions:{})).replace("'[FEATURES HERE]'",JSON.stringify(features||{})).replace("'[STORIES HERE]'",JSON.stringify(stories||{})).replace("'[DOCS_OPTIONS HERE]'",JSON.stringify(docsOptions||{})).replace("'[TAGS_OPTIONS HERE]'",JSON.stringify(tagsOptions||{})).replace("<!-- [HEAD HTML SNIPPET HERE] -->",headHtmlSnippet||"").replace("<!-- [BODY HTML SNIPPET HERE] -->",bodyHtmlSnippet||"");return configType==="DEVELOPMENT"?transformedHtml.replace("virtual:/@storybook/builder-vite/vite-app.js",`/@id/__x00__${SB_VIRTUAL_FILES.VIRTUAL_APP_FILE}`):transformedHtml}function codeGeneratorPlugin(options){let iframePath=require.resolve("@storybook/builder-vite/input/iframe.html"),iframeId,projectRoot;return{name:"storybook:code-generator-plugin",enforce:"pre",configureServer(server2){server2.watcher.on("change",()=>{let appModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE));appModule&&server2.moduleGraph.invalidateModule(appModule);let storiesModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE));storiesModule&&server2.moduleGraph.invalidateModule(storiesModule)}),server2.watcher.on("add",path3=>{(/\.stories\.([tj])sx?$/.test(path3)||/\.mdx$/.test(path3))&&server2.watcher.emit("change",getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE))})},config(config,{command}){command==="build"&&(config.build||(config.build={}),config.build.rollupOptions={...config.build.rollupOptions,input:iframePath})},configResolved(config){projectRoot=config.root,iframeId=`${config.root}/iframe.html`},resolveId(source){if(source===SB_VIRTUAL_FILES.VIRTUAL_APP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE);if(source===iframePath)return iframeId;if(source===SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)},async load(id,config){if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE))return generateImportFnScriptCode(options);if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE))return generateAddonSetupCode();if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE))return generateModernIframeScriptCode(options,projectRoot);if(id===iframeId)return(0,import_node_fs.readFileSync)(require.resolve("@storybook/builder-vite/input/iframe.html"),"utf-8")},async transformIndexHtml(html,ctx){if(ctx.path==="/iframe.html")return transformIframeHtml(html,options)}}}var import_csf_plugin=require("@storybook/csf-plugin");async function csfPlugin(config){let{presets}=config,docsOptions=(await presets.apply("addons",[])).find(a=>[a,a.name].includes("@storybook/addon-docs"))?.options??{};return(0,import_csf_plugin.vite)(docsOptions?.csfPluginOptions)}var import_node_fs2=require("fs"),import_promises2=require("fs/promises"),import_node_path3=require("path");var import_find_cache_dir=__toESM(require_find_cache_dir());var escapeKeys=key=>key.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),defaultImportRegExp="import ([^*{}]+) from",replacementMap=new Map([["import ","const "],["import{","const {"],["* as ",""],[" as ",": "],[" from "," = "],["}from","} ="]]);async function externalGlobalsPlugin(externals){await init;let{mergeAlias}=await import("vite");return{name:"storybook:external-globals-plugin",enforce:"post",async config(config,{command}){if(command!=="serve")return;let newAlias=mergeAlias([],config.resolve?.alias),cachePath=(0,import_find_cache_dir.default)({name:"sb-vite-plugin-externals",create:!0});return await Promise.all(Object.keys(externals).map(async externalKey=>{let externalCachePath=(0,import_node_path3.join)(cachePath,`${externalKey}.js`);if(newAlias.push({find:new RegExp(`^${externalKey}$`),replacement:externalCachePath}),!(0,import_node_fs2.existsSync)(externalCachePath)){let directory=(0,import_node_path3.dirname)(externalCachePath);await(0,import_promises2.mkdir)(directory,{recursive:!0})}await(0,import_promises2.writeFile)(externalCachePath,`module.exports = ${externals[externalKey]};`)})),{resolve:{alias:newAlias}}},async transform(code,id){let globalsList=Object.keys(externals);if(globalsList.every(glob2=>!code.includes(glob2)))return;let[imports]=parse(code),src=new MagicString(code);return imports.forEach(({n:path3,ss:startPosition,se:endPosition})=>{let packageName=path3;if(packageName&&globalsList.includes(packageName)){let importStatement=src.slice(startPosition,endPosition),transformedImport=rewriteImport(importStatement,externals,packageName);src.update(startPosition,endPosition,transformedImport)}}),{code:src.toString(),map:null}}}}function getDefaultImportReplacement(match2){let matched=match2.match(defaultImportRegExp);return matched&&`const {default: ${matched[1]}} =`}function getSearchRegExp(packageName){let staticKeys=[...replacementMap.keys()].map(escapeKeys),packageNameLiteral=`.${packageName}.`,dynamicImportExpression=`await import\\(.${packageName}.\\)`,lookup=[defaultImportRegExp,...staticKeys,packageNameLiteral,dynamicImportExpression];return new RegExp(`(${lookup.join("|")})`,"g")}function rewriteImport(importStatement,globs,packageName){let search=getSearchRegExp(packageName);return importStatement.replace(search,match2=>replacementMap.get(match2)??getDefaultImportReplacement(match2)??globs[packageName])}var import_node_path4=require("path");function stripQueryParams(filePath){return filePath.split("?")[0]}function isUserCode(moduleName){return moduleName?Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(moduleName))?!0:!moduleName.startsWith("vite/")&&!moduleName.startsWith("\0")&&moduleName!=="react/jsx-runtime":!1}function pluginWebpackStats({workingDir}){function normalize3(filename2){if(filename2.startsWith("virtual:"))return`/${filename2}`;if(Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(filename2)))return`/${getOriginalVirtualModuleId(filename2)}`;{let relativePath=(0,import_node_path4.relative)(workingDir,stripQueryParams(filename2));return`./${slash(relativePath)}`}}function createReasons(importers){return(importers||[]).map(i=>({moduleName:normalize3(i)}))}function createStatsMapModule(filename2,importers){return{id:filename2,name:filename2,reasons:createReasons(importers)}}let statsMap=new Map;return{name:"storybook:rollup-plugin-webpack-stats",enforce:"post",moduleParsed:function(mod){isUserCode(mod.id)&&mod.importedIds.concat(mod.dynamicallyImportedIds).filter(name=>isUserCode(name)).forEach(depIdUnsafe=>{let depId=normalize3(depIdUnsafe);if(!statsMap.has(depId)){statsMap.set(depId,createStatsMapModule(depId,[mod.id]));return}let m=statsMap.get(depId);m&&(m.reasons=(m.reasons??[]).concat(createReasons([mod.id])).filter(r=>r.moduleName!==depId),statsMap.set(depId,m))})},storybookGetStats(){let stats={modules:Array.from(statsMap.values())};return{...stats,toJson:()=>stats}}}}var configEnvServe={mode:"development",command:"serve",isSsrBuild:!1},configEnvBuild={mode:"production",command:"build",isSsrBuild:!1};async function commonConfig(options,_type){let configEnv=_type==="development"?configEnvServe:configEnvBuild,{loadConfigFromFile,mergeConfig,defaultClientConditions=[]}=await import("vite"),{viteConfigPath}=await(0,import_common5.getBuilderOptions)(options),projectRoot=(0,import_node_path5.resolve)(options.configDir,".."),{config:{build:buildProperty=void 0,...userConfig}={}}=await loadConfigFromFile(configEnv,viteConfigPath,projectRoot)??{},sbConfig={configFile:!1,cacheDir:(0,import_common5.resolvePathInStorybookCache)("sb-vite",options.cacheKey),root:projectRoot,base:"./",plugins:await pluginConfig(options),resolve:{conditions:["storybook","stories","test",...defaultClientConditions],preserveSymlinks:(0,import_common5.isPreservingSymlinks)()},envPrefix:userConfig.envPrefix?["STORYBOOK_"]:["VITE_","STORYBOOK_"],build:{target:buildProperty?.target}};return mergeConfig(userConfig,sbConfig)}async function pluginConfig(options){let frameworkName=await(0,import_common5.getFrameworkName)(options),build3=await options.presets.apply("build"),externals=import_globals.globalsNameReferenceMap;return build3?.test?.disableBlocks&&(externals["@storybook/addon-docs/blocks"]="__STORYBOOK_BLOCKS_EMPTY_MODULE__"),[codeGeneratorPlugin(options),await csfPlugin(options),await injectExportOrderPlugin(),await stripStoryHMRBoundary(),{name:"storybook:allow-storybook-dir",enforce:"post",config(config){config?.server?.fs?.allow&&config.server.fs.allow.push(".storybook")}},await externalGlobalsPlugin(externals),pluginWebpackStats({workingDir:process.cwd()})]}function findPlugin(config,name){return config.plugins?.find(p=>p&&"name"in p&&p.name===name)}async function build(options){let{build:viteBuild,mergeConfig}=await import("vite"),{presets}=options,config=await commonConfig(options,"build");config.build=mergeConfig(config,{build:{outDir:options.outputDir,emptyOutDir:!1,rollupOptions:{external:[/\.\/sb-common-assets\/.*\.woff2/]},...options.test?{reportCompressedSize:!1,sourcemap:!options.build?.test?.disableSourcemaps,target:"esnext",treeshake:!options.build?.test?.disableTreeShaking}:{}}}).build;let finalConfig=await presets.apply("viteFinal",config,options);options.features?.developmentModeForBuild&&finalConfig.plugins?.push({name:"storybook:define-env",config:()=>({define:{"process.env.NODE_ENV":JSON.stringify("development")}})});let turbosnapPluginName="rollup-plugin-turbosnap";return finalConfig.plugins&&await hasVitePlugins(finalConfig.plugins,[turbosnapPluginName])&&(import_node_logger.logger.warn(import_ts_dedent3.dedent`Found '${turbosnapPluginName}' which is now included by default in Storybook 8.
78
82
  Removing from your plugins list. Ensure you pass \`--stats-json\` to generate stats.
79
83
 
80
84
  For more information, see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#turbosnap-vite-plugin-is-no-longer-needed`),finalConfig.plugins=await withoutVitePlugins(finalConfig.plugins,[turbosnapPluginName])),await viteBuild(await sanitizeEnvVars(options,finalConfig)),findPlugin(finalConfig,"storybook:rollup-plugin-webpack-stats")?.storybookGetStats()}var import_node_path6=require("path");var INCLUDE_CANDIDATES=["@ampproject/remapping","@base2/pretty-print-object","@emotion/core","@emotion/is-prop-valid","@emotion/styled","@jridgewell/sourcemap-codec","@storybook/addon-a11y/preview","@storybook/addon-designs/blocks","@storybook/addon-docs/preview","@storybook/addon-links/preview","@storybook/addon-themes","@storybook/addon-themes/preview","@storybook/addon-docs/blocks","@storybook/nextjs-vite/dist/preview.mjs","@storybook/html","@storybook/html/dist/entry-preview-docs.mjs","@storybook/html/dist/entry-preview.mjs","@storybook/preact","@storybook/preact/dist/entry-preview-docs.mjs","@storybook/preact/dist/entry-preview.mjs","@storybook/react > acorn-jsx","@storybook/react","@storybook/react/dist/entry-preview-docs.mjs","@storybook/react/dist/entry-preview-rsc.mjs","@storybook/react/dist/entry-preview.mjs","@storybook/svelte","@storybook/svelte/dist/entry-preview-docs.mjs","@storybook/svelte/dist/entry-preview.mjs","@storybook/vue3","@storybook/vue3/dist/entry-preview-docs.mjs","@storybook/vue3/dist/entry-preview.mjs","@storybook/web-components","@storybook/web-components/dist/entry-preview-docs.mjs","@storybook/web-components/dist/entry-preview.mjs","storybook/viewport","acorn-jsx","acorn-walk","acorn","airbnb-js-shims","ansi-to-html","aria-query","axe-core","axobject-query","chromatic/isChromatic","color-convert","deep-object-diff","doctrine","emotion-theming","escodegen","estraverse","fast-deep-equal","html-tags","isobject","loader-utils","lodash/camelCase.js","lodash/camelCase","lodash/cloneDeep.js","lodash/cloneDeep","lodash/countBy.js","lodash/countBy","lodash/debounce.js","lodash/debounce","lodash/isEqual.js","lodash/isEqual","lodash/isFunction.js","lodash/isFunction","lodash/isPlainObject.js","lodash/isPlainObject","lodash/isString.js","lodash/isString","lodash/kebabCase.js","lodash/kebabCase","lodash/mapKeys.js","lodash/mapKeys","lodash/mapValues.js","lodash/mapValues","lodash/merge.js","lodash/merge","lodash/mergeWith.js","lodash/mergeWith","lodash/pick.js","lodash/pick","lodash/pickBy.js","lodash/pickBy","lodash/startCase.js","lodash/startCase","lodash/throttle.js","lodash/throttle","lodash/uniq.js","lodash/uniq","lodash/upperFirst.js","lodash/upperFirst","memoizerific","mockdate","msw-storybook-addon","overlayscrollbars","polished","prettier/parser-babel","prettier/parser-flow","prettier/parser-typescript","prop-types","qs","react-dom","react-dom/client","react-dom/test-utils","react-fast-compare","react-is","react-textarea-autosize","react","react/jsx-runtime","react/jsx-dev-runtime","refractor/core","refractor/lang/bash.js","refractor/lang/css.js","refractor/lang/graphql.js","refractor/lang/js-extras.js","refractor/lang/json.js","refractor/lang/jsx.js","refractor/lang/markdown.js","refractor/lang/markup.js","refractor/lang/tsx.js","refractor/lang/typescript.js","refractor/lang/yaml.js","regenerator-runtime/runtime.js","semver","sb-original/default-loader","sb-original/image-context","slash","store2","storybook/internal/preview/runtime","storybook/internal/csf","synchronous-promise","telejson","ts-dedent","unfetch","util-deprecate","vue","warning"],asyncFilter=async(arr,predicate)=>Promise.all(arr.map(predicate)).then(results=>arr.filter((_v,index)=>results[index]));async function getOptimizeDeps(config,options){let extraOptimizeDeps=await options.presets.apply("optimizeViteDeps",[]),{root=process.cwd()}=config,{normalizePath,resolveConfig}=await import("vite"),stories=(await listStories(options)).map(storyPath=>normalizePath((0,import_node_path6.relative)(root,storyPath))),resolve3=(await resolveConfig(config,"serve","development")).createResolver({asSrc:!1}),include=await asyncFilter(Array.from(new Set([...INCLUDE_CANDIDATES,...extraOptimizeDeps])),async id=>!!await resolve3(id));return{...config.optimizeDeps,entries:stories,include:[...include,...config.optimizeDeps?.include||[]]}}async function createViteServer(options,devServer){let{presets}=options,commonCfg=await commonConfig(options,"development"),config={...commonCfg,server:{middlewareMode:!0,hmr:{port:options.port,server:devServer},fs:{strict:!0}},appType:"custom",optimizeDeps:await getOptimizeDeps(commonCfg,options)},ipRegex=/^(?:\d{1,3}\.){3}\d{1,3}$|^(?:[a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}$/;!config.server.allowedHosts?.length&&options.host&&!ipRegex.test(options.host)&&(config.server.allowedHosts=[options.host.toLowerCase()]);let finalConfig=await presets.apply("viteFinal",config,options),{createServer}=await import("vite");return createServer(await sanitizeEnvVars(options,finalConfig))}function iframeHandler(options,server2){return async(req,res)=>{let indexHtml=await(0,import_promises3.readFile)(require.resolve("@storybook/builder-vite/input/iframe.html"),{encoding:"utf8"}),transformed=await server2.transformIndexHtml("/iframe.html",indexHtml);res.setHeader("Content-Type","text/html"),res.statusCode=200,res.write(transformed),res.end()}}var server;async function bail(){return server?.close()}var start=async({startTime,options,router,server:devServer})=>(server=await createViteServer(options,devServer),router.get("/iframe.html",iframeHandler(options,server)),router.use(server.middlewares),{bail,stats:{toJson:()=>{throw new import_server_errors.NoStatsForViteDevError}},totalTime:process.hrtime(startTime)}),build2=async({options})=>build(options);0&&(module.exports={bail,build,hasVitePlugins,start,withoutVitePlugins});
package/dist/index.mjs CHANGED
@@ -12,6 +12,7 @@ import { realpathSync as realpathSync$1, lstatSync, readdir, readdirSync, readli
12
12
  import { EventEmitter } from 'node:events';
13
13
  import Stream from 'node:stream';
14
14
  import { StringDecoder } from 'node:string_decoder';
15
+ import { STORY_HOT_UPDATED } from 'storybook/internal/core-events';
15
16
  import { readConfig, isCsfFactoryPreview } from 'storybook/internal/csf-tools';
16
17
  import { vite } from '@storybook/csf-plugin';
17
18
 
@@ -51,6 +52,10 @@ globstar while`,file,fr,pattern,pr,swallowee),this.matchOne(file.slice(fr),patte
51
52
  import.meta.hot.decline();
52
53
  }`.trim():dedent`
53
54
  if (import.meta.hot) {
55
+ import.meta.hot.on('vite:afterUpdate', () => {
56
+ window.__STORYBOOK_PREVIEW__.channel.emit('${STORY_HOT_UPDATED}');
57
+ });
58
+
54
59
  import.meta.hot.accept('${SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE}', (newModule) => {
55
60
  // importFn has changed so we need to patch the new one in
56
61
  window.__STORYBOOK_PREVIEW__.onStoriesChanged({ importFn: newModule.importFn });
@@ -66,19 +71,19 @@ globstar while`,file,fr,pattern,pr,swallowee),this.matchOne(file.slice(fr),patte
66
71
  import '${SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE}';
67
72
 
68
73
  setup();
69
-
74
+
70
75
  import { composeConfigs, PreviewWeb } from 'storybook/preview-api';
71
76
  import { isPreview } from 'storybook/internal/csf';
72
77
  import { importFn } from '${SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE}';
73
-
78
+
74
79
  ${options.isCsf4?previewFileImport:imports.join(`
75
80
  `)}
76
81
  ${getPreviewAnnotationsFunction}
77
82
 
78
83
  window.__STORYBOOK_PREVIEW__ = window.__STORYBOOK_PREVIEW__ || new PreviewWeb(importFn, getProjectAnnotations);
79
-
84
+
80
85
  window.__STORYBOOK_STORY_STORE__ = window.__STORYBOOK_STORY_STORE__ || window.__STORYBOOK_PREVIEW__.storyStore;
81
-
86
+
82
87
  ${generateHMRHandler()};
83
88
  `.trim()}function hash(value){return value.split("").reduce((acc,char)=>acc+char.charCodeAt(0),0)}async function generateAddonSetupCode(){return `
84
89
  import { createBrowserChannel } from 'storybook/internal/channels';
@@ -91,7 +96,7 @@ globstar while`,file,fr,pattern,pr,swallowee),this.matchOne(file.slice(fr),patte
91
96
  if (window.CONFIG_TYPE === 'DEVELOPMENT'){
92
97
  window.__STORYBOOK_SERVER_CHANNEL__ = channel;
93
98
  }
94
- `.trim()}async function transformIframeHtml(html,options){let{configType,features,presets}=options,build3=await presets.apply("build"),frameworkOptions=await presets.apply("frameworkOptions"),headHtmlSnippet=await presets.apply("previewHead"),bodyHtmlSnippet=await presets.apply("previewBody"),logLevel=await presets.apply("logLevel",void 0),docsOptions=await presets.apply("docs"),tagsOptions=await presets.apply("tags"),coreOptions=await presets.apply("core"),stories=normalizeStories(await options.presets.apply("stories",[],options),{configDir:options.configDir,workingDir:process.cwd()}).map(specifier=>({...specifier,importPathMatcher:specifier.importPathMatcher.source})),otherGlobals={...build3?.test?.disableBlocks?{__STORYBOOK_BLOCKS_EMPTY_MODULE__:{}}:{}},transformedHtml=html.replace("[CONFIG_TYPE HERE]",configType||"").replace("[LOGLEVEL HERE]",logLevel||"").replace("'[FRAMEWORK_OPTIONS HERE]'",JSON.stringify(frameworkOptions)).replace("('OTHER_GLOBALS HERE');",Object.entries(otherGlobals).map(([k,v])=>`window["${k}"] = ${JSON.stringify(v)};`).join("")).replace("'[CHANNEL_OPTIONS HERE]'",JSON.stringify(coreOptions&&coreOptions.channelOptions?coreOptions.channelOptions:{})).replace("'[FEATURES HERE]'",JSON.stringify(features||{})).replace("'[STORIES HERE]'",JSON.stringify(stories||{})).replace("'[DOCS_OPTIONS HERE]'",JSON.stringify(docsOptions||{})).replace("'[TAGS_OPTIONS HERE]'",JSON.stringify(tagsOptions||{})).replace("<!-- [HEAD HTML SNIPPET HERE] -->",headHtmlSnippet||"").replace("<!-- [BODY HTML SNIPPET HERE] -->",bodyHtmlSnippet||"");return configType==="DEVELOPMENT"?transformedHtml.replace("virtual:/@storybook/builder-vite/vite-app.js",`/@id/__x00__${SB_VIRTUAL_FILES.VIRTUAL_APP_FILE}`):transformedHtml}function codeGeneratorPlugin(options){let iframePath=__require.resolve("@storybook/builder-vite/input/iframe.html"),iframeId,projectRoot;return {name:"storybook:code-generator-plugin",enforce:"pre",configureServer(server2){server2.watcher.on("change",()=>{let appModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE));appModule&&server2.moduleGraph.invalidateModule(appModule);let storiesModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE));storiesModule&&server2.moduleGraph.invalidateModule(storiesModule);}),server2.watcher.on("add",path3=>{(/\.stories\.([tj])sx?$/.test(path3)||/\.mdx$/.test(path3))&&server2.watcher.emit("change",getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE));});},config(config,{command}){command==="build"&&(config.build||(config.build={}),config.build.rollupOptions={...config.build.rollupOptions,input:iframePath});},configResolved(config){projectRoot=config.root,iframeId=`${config.root}/iframe.html`;},resolveId(source){if(source===SB_VIRTUAL_FILES.VIRTUAL_APP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE);if(source===iframePath)return iframeId;if(source===SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)},async load(id,config){if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE))return generateImportFnScriptCode(options);if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE))return generateAddonSetupCode();if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE))return generateModernIframeScriptCode(options,projectRoot);if(id===iframeId)return readFileSync(__require.resolve("@storybook/builder-vite/input/iframe.html"),"utf-8")},async transformIndexHtml(html,ctx){if(ctx.path==="/iframe.html")return transformIframeHtml(html,options)}}}async function csfPlugin(config){let{presets}=config,docsOptions=(await presets.apply("addons",[])).find(a=>[a,a.name].includes("@storybook/addon-docs"))?.options??{};return vite(docsOptions?.csfPluginOptions)}var import_find_cache_dir=__toESM(require_find_cache_dir());var escapeKeys=key=>key.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),defaultImportRegExp="import ([^*{}]+) from",replacementMap=new Map([["import ","const "],["import{","const {"],["* as ",""],[" as ",": "],[" from "," = "],["}from","} ="]]);async function externalGlobalsPlugin(externals){await init;let{mergeAlias}=await import('vite');return {name:"storybook:external-globals-plugin",enforce:"post",async config(config,{command}){if(command!=="serve")return;let newAlias=mergeAlias([],config.resolve?.alias),cachePath=(0, import_find_cache_dir.default)({name:"sb-vite-plugin-externals",create:!0});return await Promise.all(Object.keys(externals).map(async externalKey=>{let externalCachePath=join(cachePath,`${externalKey}.js`);if(newAlias.push({find:new RegExp(`^${externalKey}$`),replacement:externalCachePath}),!existsSync(externalCachePath)){let directory=dirname(externalCachePath);await mkdir(directory,{recursive:!0});}await writeFile(externalCachePath,`module.exports = ${externals[externalKey]};`);})),{resolve:{alias:newAlias}}},async transform(code,id){let globalsList=Object.keys(externals);if(globalsList.every(glob2=>!code.includes(glob2)))return;let[imports]=parse(code),src=new MagicString(code);return imports.forEach(({n:path3,ss:startPosition,se:endPosition})=>{let packageName=path3;if(packageName&&globalsList.includes(packageName)){let importStatement=src.slice(startPosition,endPosition),transformedImport=rewriteImport(importStatement,externals,packageName);src.update(startPosition,endPosition,transformedImport);}}),{code:src.toString(),map:null}}}}function getDefaultImportReplacement(match2){let matched=match2.match(defaultImportRegExp);return matched&&`const {default: ${matched[1]}} =`}function getSearchRegExp(packageName){let staticKeys=[...replacementMap.keys()].map(escapeKeys),packageNameLiteral=`.${packageName}.`,dynamicImportExpression=`await import\\(.${packageName}.\\)`,lookup=[defaultImportRegExp,...staticKeys,packageNameLiteral,dynamicImportExpression];return new RegExp(`(${lookup.join("|")})`,"g")}function rewriteImport(importStatement,globs,packageName){let search=getSearchRegExp(packageName);return importStatement.replace(search,match2=>replacementMap.get(match2)??getDefaultImportReplacement(match2)??globs[packageName])}function stripQueryParams(filePath){return filePath.split("?")[0]}function isUserCode(moduleName){return moduleName?Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(moduleName))?!0:!moduleName.startsWith("vite/")&&!moduleName.startsWith("\0")&&moduleName!=="react/jsx-runtime":!1}function pluginWebpackStats({workingDir}){function normalize3(filename2){if(filename2.startsWith("virtual:"))return `/${filename2}`;if(Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(filename2)))return `/${getOriginalVirtualModuleId(filename2)}`;{let relativePath=relative$1(workingDir,stripQueryParams(filename2));return `./${slash(relativePath)}`}}function createReasons(importers){return (importers||[]).map(i=>({moduleName:normalize3(i)}))}function createStatsMapModule(filename2,importers){return {id:filename2,name:filename2,reasons:createReasons(importers)}}let statsMap=new Map;return {name:"storybook:rollup-plugin-webpack-stats",enforce:"post",moduleParsed:function(mod){isUserCode(mod.id)&&mod.importedIds.concat(mod.dynamicallyImportedIds).filter(name=>isUserCode(name)).forEach(depIdUnsafe=>{let depId=normalize3(depIdUnsafe);if(!statsMap.has(depId)){statsMap.set(depId,createStatsMapModule(depId,[mod.id]));return}let m=statsMap.get(depId);m&&(m.reasons=(m.reasons??[]).concat(createReasons([mod.id])).filter(r=>r.moduleName!==depId),statsMap.set(depId,m));});},storybookGetStats(){let stats={modules:Array.from(statsMap.values())};return {...stats,toJson:()=>stats}}}}var configEnvServe={mode:"development",command:"serve",isSsrBuild:!1},configEnvBuild={mode:"production",command:"build",isSsrBuild:!1};async function commonConfig(options,_type){let configEnv=_type==="development"?configEnvServe:configEnvBuild,{loadConfigFromFile,mergeConfig,defaultClientConditions=[]}=await import('vite'),{viteConfigPath}=await getBuilderOptions(options),projectRoot=resolve$1(options.configDir,".."),{config:{build:buildProperty=void 0,...userConfig}={}}=await loadConfigFromFile(configEnv,viteConfigPath,projectRoot)??{},sbConfig={configFile:!1,cacheDir:resolvePathInStorybookCache("sb-vite",options.cacheKey),root:projectRoot,base:"./",plugins:await pluginConfig(options),resolve:{conditions:["storybook","stories","test",...defaultClientConditions],preserveSymlinks:isPreservingSymlinks(),alias:{assert:__require.resolve("browser-assert")}},envPrefix:userConfig.envPrefix?["STORYBOOK_"]:["VITE_","STORYBOOK_"],build:{target:buildProperty?.target}};return mergeConfig(userConfig,sbConfig)}async function pluginConfig(options){await getFrameworkName(options);let build3=await options.presets.apply("build"),externals=globalsNameReferenceMap;return build3?.test?.disableBlocks&&(externals["@storybook/addon-docs/blocks"]="__STORYBOOK_BLOCKS_EMPTY_MODULE__"),[codeGeneratorPlugin(options),await csfPlugin(options),await injectExportOrderPlugin(),await stripStoryHMRBoundary(),{name:"storybook:allow-storybook-dir",enforce:"post",config(config){config?.server?.fs?.allow&&config.server.fs.allow.push(".storybook");}},await externalGlobalsPlugin(externals),pluginWebpackStats({workingDir:process.cwd()})]}function findPlugin(config,name){return config.plugins?.find(p=>p&&"name"in p&&p.name===name)}async function build(options){let{build:viteBuild,mergeConfig}=await import('vite'),{presets}=options,config=await commonConfig(options,"build");config.build=mergeConfig(config,{build:{outDir:options.outputDir,emptyOutDir:!1,rollupOptions:{external:[/\.\/sb-common-assets\/.*\.woff2/]},...options.test?{reportCompressedSize:!1,sourcemap:!options.build?.test?.disableSourcemaps,target:"esnext",treeshake:!options.build?.test?.disableTreeShaking}:{}}}).build;let finalConfig=await presets.apply("viteFinal",config,options);options.features?.developmentModeForBuild&&finalConfig.plugins?.push({name:"storybook:define-env",config:()=>({define:{"process.env.NODE_ENV":JSON.stringify("development")}})});let turbosnapPluginName="rollup-plugin-turbosnap";return finalConfig.plugins&&await hasVitePlugins(finalConfig.plugins,[turbosnapPluginName])&&(logger.warn(dedent`Found '${turbosnapPluginName}' which is now included by default in Storybook 8.
99
+ `.trim()}async function transformIframeHtml(html,options){let{configType,features,presets}=options,build3=await presets.apply("build"),frameworkOptions=await presets.apply("frameworkOptions"),headHtmlSnippet=await presets.apply("previewHead"),bodyHtmlSnippet=await presets.apply("previewBody"),logLevel=await presets.apply("logLevel",void 0),docsOptions=await presets.apply("docs"),tagsOptions=await presets.apply("tags"),coreOptions=await presets.apply("core"),stories=normalizeStories(await options.presets.apply("stories",[],options),{configDir:options.configDir,workingDir:process.cwd()}).map(specifier=>({...specifier,importPathMatcher:specifier.importPathMatcher.source})),otherGlobals={...build3?.test?.disableBlocks?{__STORYBOOK_BLOCKS_EMPTY_MODULE__:{}}:{}},transformedHtml=html.replace("[CONFIG_TYPE HERE]",configType||"").replace("[LOGLEVEL HERE]",logLevel||"").replace("'[FRAMEWORK_OPTIONS HERE]'",JSON.stringify(frameworkOptions)).replace("('OTHER_GLOBALS HERE');",Object.entries(otherGlobals).map(([k,v])=>`window["${k}"] = ${JSON.stringify(v)};`).join("")).replace("'[CHANNEL_OPTIONS HERE]'",JSON.stringify(coreOptions&&coreOptions.channelOptions?coreOptions.channelOptions:{})).replace("'[FEATURES HERE]'",JSON.stringify(features||{})).replace("'[STORIES HERE]'",JSON.stringify(stories||{})).replace("'[DOCS_OPTIONS HERE]'",JSON.stringify(docsOptions||{})).replace("'[TAGS_OPTIONS HERE]'",JSON.stringify(tagsOptions||{})).replace("<!-- [HEAD HTML SNIPPET HERE] -->",headHtmlSnippet||"").replace("<!-- [BODY HTML SNIPPET HERE] -->",bodyHtmlSnippet||"");return configType==="DEVELOPMENT"?transformedHtml.replace("virtual:/@storybook/builder-vite/vite-app.js",`/@id/__x00__${SB_VIRTUAL_FILES.VIRTUAL_APP_FILE}`):transformedHtml}function codeGeneratorPlugin(options){let iframePath=__require.resolve("@storybook/builder-vite/input/iframe.html"),iframeId,projectRoot;return {name:"storybook:code-generator-plugin",enforce:"pre",configureServer(server2){server2.watcher.on("change",()=>{let appModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE));appModule&&server2.moduleGraph.invalidateModule(appModule);let storiesModule=server2.moduleGraph.getModuleById(getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE));storiesModule&&server2.moduleGraph.invalidateModule(storiesModule);}),server2.watcher.on("add",path3=>{(/\.stories\.([tj])sx?$/.test(path3)||/\.mdx$/.test(path3))&&server2.watcher.emit("change",getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE));});},config(config,{command}){command==="build"&&(config.build||(config.build={}),config.build.rollupOptions={...config.build.rollupOptions,input:iframePath});},configResolved(config){projectRoot=config.root,iframeId=`${config.root}/iframe.html`;},resolveId(source){if(source===SB_VIRTUAL_FILES.VIRTUAL_APP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE);if(source===iframePath)return iframeId;if(source===SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_PREVIEW_FILE);if(source===SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)return getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE)},async load(id,config){if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_STORIES_FILE))return generateImportFnScriptCode(options);if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_ADDON_SETUP_FILE))return generateAddonSetupCode();if(id===getResolvedVirtualModuleId(SB_VIRTUAL_FILES.VIRTUAL_APP_FILE))return generateModernIframeScriptCode(options,projectRoot);if(id===iframeId)return readFileSync(__require.resolve("@storybook/builder-vite/input/iframe.html"),"utf-8")},async transformIndexHtml(html,ctx){if(ctx.path==="/iframe.html")return transformIframeHtml(html,options)}}}async function csfPlugin(config){let{presets}=config,docsOptions=(await presets.apply("addons",[])).find(a=>[a,a.name].includes("@storybook/addon-docs"))?.options??{};return vite(docsOptions?.csfPluginOptions)}var import_find_cache_dir=__toESM(require_find_cache_dir());var escapeKeys=key=>key.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),defaultImportRegExp="import ([^*{}]+) from",replacementMap=new Map([["import ","const "],["import{","const {"],["* as ",""],[" as ",": "],[" from "," = "],["}from","} ="]]);async function externalGlobalsPlugin(externals){await init;let{mergeAlias}=await import('vite');return {name:"storybook:external-globals-plugin",enforce:"post",async config(config,{command}){if(command!=="serve")return;let newAlias=mergeAlias([],config.resolve?.alias),cachePath=(0, import_find_cache_dir.default)({name:"sb-vite-plugin-externals",create:!0});return await Promise.all(Object.keys(externals).map(async externalKey=>{let externalCachePath=join(cachePath,`${externalKey}.js`);if(newAlias.push({find:new RegExp(`^${externalKey}$`),replacement:externalCachePath}),!existsSync(externalCachePath)){let directory=dirname(externalCachePath);await mkdir(directory,{recursive:!0});}await writeFile(externalCachePath,`module.exports = ${externals[externalKey]};`);})),{resolve:{alias:newAlias}}},async transform(code,id){let globalsList=Object.keys(externals);if(globalsList.every(glob2=>!code.includes(glob2)))return;let[imports]=parse(code),src=new MagicString(code);return imports.forEach(({n:path3,ss:startPosition,se:endPosition})=>{let packageName=path3;if(packageName&&globalsList.includes(packageName)){let importStatement=src.slice(startPosition,endPosition),transformedImport=rewriteImport(importStatement,externals,packageName);src.update(startPosition,endPosition,transformedImport);}}),{code:src.toString(),map:null}}}}function getDefaultImportReplacement(match2){let matched=match2.match(defaultImportRegExp);return matched&&`const {default: ${matched[1]}} =`}function getSearchRegExp(packageName){let staticKeys=[...replacementMap.keys()].map(escapeKeys),packageNameLiteral=`.${packageName}.`,dynamicImportExpression=`await import\\(.${packageName}.\\)`,lookup=[defaultImportRegExp,...staticKeys,packageNameLiteral,dynamicImportExpression];return new RegExp(`(${lookup.join("|")})`,"g")}function rewriteImport(importStatement,globs,packageName){let search=getSearchRegExp(packageName);return importStatement.replace(search,match2=>replacementMap.get(match2)??getDefaultImportReplacement(match2)??globs[packageName])}function stripQueryParams(filePath){return filePath.split("?")[0]}function isUserCode(moduleName){return moduleName?Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(moduleName))?!0:!moduleName.startsWith("vite/")&&!moduleName.startsWith("\0")&&moduleName!=="react/jsx-runtime":!1}function pluginWebpackStats({workingDir}){function normalize3(filename2){if(filename2.startsWith("virtual:"))return `/${filename2}`;if(Object.values(SB_VIRTUAL_FILES).includes(getOriginalVirtualModuleId(filename2)))return `/${getOriginalVirtualModuleId(filename2)}`;{let relativePath=relative$1(workingDir,stripQueryParams(filename2));return `./${slash(relativePath)}`}}function createReasons(importers){return (importers||[]).map(i=>({moduleName:normalize3(i)}))}function createStatsMapModule(filename2,importers){return {id:filename2,name:filename2,reasons:createReasons(importers)}}let statsMap=new Map;return {name:"storybook:rollup-plugin-webpack-stats",enforce:"post",moduleParsed:function(mod){isUserCode(mod.id)&&mod.importedIds.concat(mod.dynamicallyImportedIds).filter(name=>isUserCode(name)).forEach(depIdUnsafe=>{let depId=normalize3(depIdUnsafe);if(!statsMap.has(depId)){statsMap.set(depId,createStatsMapModule(depId,[mod.id]));return}let m=statsMap.get(depId);m&&(m.reasons=(m.reasons??[]).concat(createReasons([mod.id])).filter(r=>r.moduleName!==depId),statsMap.set(depId,m));});},storybookGetStats(){let stats={modules:Array.from(statsMap.values())};return {...stats,toJson:()=>stats}}}}var configEnvServe={mode:"development",command:"serve",isSsrBuild:!1},configEnvBuild={mode:"production",command:"build",isSsrBuild:!1};async function commonConfig(options,_type){let configEnv=_type==="development"?configEnvServe:configEnvBuild,{loadConfigFromFile,mergeConfig,defaultClientConditions=[]}=await import('vite'),{viteConfigPath}=await getBuilderOptions(options),projectRoot=resolve$1(options.configDir,".."),{config:{build:buildProperty=void 0,...userConfig}={}}=await loadConfigFromFile(configEnv,viteConfigPath,projectRoot)??{},sbConfig={configFile:!1,cacheDir:resolvePathInStorybookCache("sb-vite",options.cacheKey),root:projectRoot,base:"./",plugins:await pluginConfig(options),resolve:{conditions:["storybook","stories","test",...defaultClientConditions],preserveSymlinks:isPreservingSymlinks()},envPrefix:userConfig.envPrefix?["STORYBOOK_"]:["VITE_","STORYBOOK_"],build:{target:buildProperty?.target}};return mergeConfig(userConfig,sbConfig)}async function pluginConfig(options){await getFrameworkName(options);let build3=await options.presets.apply("build"),externals=globalsNameReferenceMap;return build3?.test?.disableBlocks&&(externals["@storybook/addon-docs/blocks"]="__STORYBOOK_BLOCKS_EMPTY_MODULE__"),[codeGeneratorPlugin(options),await csfPlugin(options),await injectExportOrderPlugin(),await stripStoryHMRBoundary(),{name:"storybook:allow-storybook-dir",enforce:"post",config(config){config?.server?.fs?.allow&&config.server.fs.allow.push(".storybook");}},await externalGlobalsPlugin(externals),pluginWebpackStats({workingDir:process.cwd()})]}function findPlugin(config,name){return config.plugins?.find(p=>p&&"name"in p&&p.name===name)}async function build(options){let{build:viteBuild,mergeConfig}=await import('vite'),{presets}=options,config=await commonConfig(options,"build");config.build=mergeConfig(config,{build:{outDir:options.outputDir,emptyOutDir:!1,rollupOptions:{external:[/\.\/sb-common-assets\/.*\.woff2/]},...options.test?{reportCompressedSize:!1,sourcemap:!options.build?.test?.disableSourcemaps,target:"esnext",treeshake:!options.build?.test?.disableTreeShaking}:{}}}).build;let finalConfig=await presets.apply("viteFinal",config,options);options.features?.developmentModeForBuild&&finalConfig.plugins?.push({name:"storybook:define-env",config:()=>({define:{"process.env.NODE_ENV":JSON.stringify("development")}})});let turbosnapPluginName="rollup-plugin-turbosnap";return finalConfig.plugins&&await hasVitePlugins(finalConfig.plugins,[turbosnapPluginName])&&(logger.warn(dedent`Found '${turbosnapPluginName}' which is now included by default in Storybook 8.
95
100
  Removing from your plugins list. Ensure you pass \`--stats-json\` to generate stats.
96
101
 
97
102
  For more information, see https://github.com/storybookjs/storybook/blob/next/MIGRATION.md#turbosnap-vite-plugin-is-no-longer-needed`),finalConfig.plugins=await withoutVitePlugins(finalConfig.plugins,[turbosnapPluginName])),await viteBuild(await sanitizeEnvVars(options,finalConfig)),findPlugin(finalConfig,"storybook:rollup-plugin-webpack-stats")?.storybookGetStats()}var INCLUDE_CANDIDATES=["@ampproject/remapping","@base2/pretty-print-object","@emotion/core","@emotion/is-prop-valid","@emotion/styled","@jridgewell/sourcemap-codec","@storybook/addon-a11y/preview","@storybook/addon-designs/blocks","@storybook/addon-docs/preview","@storybook/addon-links/preview","@storybook/addon-themes","@storybook/addon-themes/preview","@storybook/addon-docs/blocks","@storybook/nextjs-vite/dist/preview.mjs","@storybook/html","@storybook/html/dist/entry-preview-docs.mjs","@storybook/html/dist/entry-preview.mjs","@storybook/preact","@storybook/preact/dist/entry-preview-docs.mjs","@storybook/preact/dist/entry-preview.mjs","@storybook/react > acorn-jsx","@storybook/react","@storybook/react/dist/entry-preview-docs.mjs","@storybook/react/dist/entry-preview-rsc.mjs","@storybook/react/dist/entry-preview.mjs","@storybook/svelte","@storybook/svelte/dist/entry-preview-docs.mjs","@storybook/svelte/dist/entry-preview.mjs","@storybook/vue3","@storybook/vue3/dist/entry-preview-docs.mjs","@storybook/vue3/dist/entry-preview.mjs","@storybook/web-components","@storybook/web-components/dist/entry-preview-docs.mjs","@storybook/web-components/dist/entry-preview.mjs","storybook/viewport","acorn-jsx","acorn-walk","acorn","airbnb-js-shims","ansi-to-html","aria-query","axe-core","axobject-query","chromatic/isChromatic","color-convert","deep-object-diff","doctrine","emotion-theming","escodegen","estraverse","fast-deep-equal","html-tags","isobject","loader-utils","lodash/camelCase.js","lodash/camelCase","lodash/cloneDeep.js","lodash/cloneDeep","lodash/countBy.js","lodash/countBy","lodash/debounce.js","lodash/debounce","lodash/isEqual.js","lodash/isEqual","lodash/isFunction.js","lodash/isFunction","lodash/isPlainObject.js","lodash/isPlainObject","lodash/isString.js","lodash/isString","lodash/kebabCase.js","lodash/kebabCase","lodash/mapKeys.js","lodash/mapKeys","lodash/mapValues.js","lodash/mapValues","lodash/merge.js","lodash/merge","lodash/mergeWith.js","lodash/mergeWith","lodash/pick.js","lodash/pick","lodash/pickBy.js","lodash/pickBy","lodash/startCase.js","lodash/startCase","lodash/throttle.js","lodash/throttle","lodash/uniq.js","lodash/uniq","lodash/upperFirst.js","lodash/upperFirst","memoizerific","mockdate","msw-storybook-addon","overlayscrollbars","polished","prettier/parser-babel","prettier/parser-flow","prettier/parser-typescript","prop-types","qs","react-dom","react-dom/client","react-dom/test-utils","react-fast-compare","react-is","react-textarea-autosize","react","react/jsx-runtime","react/jsx-dev-runtime","refractor/core","refractor/lang/bash.js","refractor/lang/css.js","refractor/lang/graphql.js","refractor/lang/js-extras.js","refractor/lang/json.js","refractor/lang/jsx.js","refractor/lang/markdown.js","refractor/lang/markup.js","refractor/lang/tsx.js","refractor/lang/typescript.js","refractor/lang/yaml.js","regenerator-runtime/runtime.js","semver","sb-original/default-loader","sb-original/image-context","slash","store2","storybook/internal/preview/runtime","storybook/internal/csf","synchronous-promise","telejson","ts-dedent","unfetch","util-deprecate","vue","warning"],asyncFilter=async(arr,predicate)=>Promise.all(arr.map(predicate)).then(results=>arr.filter((_v,index)=>results[index]));async function getOptimizeDeps(config,options){let extraOptimizeDeps=await options.presets.apply("optimizeViteDeps",[]),{root=process.cwd()}=config,{normalizePath,resolveConfig}=await import('vite'),stories=(await listStories(options)).map(storyPath=>normalizePath(relative$1(root,storyPath))),resolve3=(await resolveConfig(config,"serve","development")).createResolver({asSrc:!1}),include=await asyncFilter(Array.from(new Set([...INCLUDE_CANDIDATES,...extraOptimizeDeps])),async id=>!!await resolve3(id));return {...config.optimizeDeps,entries:stories,include:[...include,...config.optimizeDeps?.include||[]]}}async function createViteServer(options,devServer){let{presets}=options,commonCfg=await commonConfig(options,"development"),config={...commonCfg,server:{middlewareMode:!0,hmr:{port:options.port,server:devServer},fs:{strict:!0}},appType:"custom",optimizeDeps:await getOptimizeDeps(commonCfg,options)},ipRegex=/^(?:\d{1,3}\.){3}\d{1,3}$|^(?:[a-fA-F0-9]{1,4}:){7}[a-fA-F0-9]{1,4}$/;!config.server.allowedHosts?.length&&options.host&&!ipRegex.test(options.host)&&(config.server.allowedHosts=[options.host.toLowerCase()]);let finalConfig=await presets.apply("viteFinal",config,options),{createServer}=await import('vite');return createServer(await sanitizeEnvVars(options,finalConfig))}function iframeHandler(options,server2){return async(req,res)=>{let indexHtml=await readFile(__require.resolve("@storybook/builder-vite/input/iframe.html"),{encoding:"utf8"}),transformed=await server2.transformIndexHtml("/iframe.html",indexHtml);res.setHeader("Content-Type","text/html"),res.statusCode=200,res.write(transformed),res.end();}}var server;async function bail(){return server?.close()}var start=async({startTime,options,router,server:devServer})=>(server=await createViteServer(options,devServer),router.get("/iframe.html",iframeHandler(options,server)),router.use(server.middlewares),{bail,stats:{toJson:()=>{throw new NoStatsForViteDevError}},totalTime:process.hrtime(startTime)}),build2=async({options})=>build(options);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook/builder-vite",
3
- "version": "9.0.0-beta.9",
3
+ "version": "9.0.0-rc.1",
4
4
  "description": "A plugin to run and build Storybooks with Vite",
5
5
  "homepage": "https://github.com/storybookjs/storybook/tree/next/code/builders/builder-vite/#readme",
6
6
  "bugs": {
@@ -43,8 +43,7 @@
43
43
  "prep": "jiti ../../../scripts/prepare/bundle.ts"
44
44
  },
45
45
  "dependencies": {
46
- "@storybook/csf-plugin": "9.0.0-beta.9",
47
- "browser-assert": "^1.2.1",
46
+ "@storybook/csf-plugin": "9.0.0-rc.1",
48
47
  "ts-dedent": "^2.0.0"
49
48
  },
50
49
  "devDependencies": {
@@ -60,7 +59,7 @@
60
59
  "vite": "^6.2.5"
61
60
  },
62
61
  "peerDependencies": {
63
- "storybook": "^9.0.0-beta.9",
62
+ "storybook": "^9.0.0-rc.1",
64
63
  "vite": "^5.0.0 || ^6.0.0"
65
64
  },
66
65
  "publishConfig": {