@storybook-astro/framework 1.0.0 → 1.0.2

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.
@@ -635,6 +635,9 @@ var viteFinal = async (config, { configType, presets }) => {
635
635
  if (!finalConfig.optimizeDeps.exclude.includes("@astrojs/vue")) {
636
636
  finalConfig.optimizeDeps.exclude.push("@astrojs/vue");
637
637
  }
638
+ if (!finalConfig.optimizeDeps.exclude.includes("@storybook-astro/renderer")) {
639
+ finalConfig.optimizeDeps.exclude.push("@storybook-astro/renderer");
640
+ }
638
641
  if (!finalConfig.optimizeDeps.esbuildOptions) {
639
642
  finalConfig.optimizeDeps.esbuildOptions = {};
640
643
  }
@@ -654,4 +657,4 @@ export {
654
657
  core,
655
658
  viteFinal
656
659
  };
657
- //# sourceMappingURL=chunk-UK43WNEA.js.map
660
+ //# sourceMappingURL=chunk-KSDXET2L.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/viteStorybookRendererFallbackPlugin.ts","../src/vitePluginAstroBuildPrerender.ts","../src/vitePluginAstro.ts","../src/preset.ts"],"sourcesContent":["import type { Integration } from './integrations/index.ts';\nimport { createVirtualModulePlugin } from './vite/createVirtualModulePlugin.ts';\n\nexport function viteStorybookRendererFallbackPlugin(integrations: Integration[]) {\n const safeIntegrations = integrations ?? [];\n\n return createVirtualModulePlugin({\n pluginName: 'storybook-renderer-fallback',\n virtualModuleId: 'virtual:storybook-renderer-fallback',\n load() {\n return safeIntegrations\n .filter((integration) => integration.storybookEntryPreview)\n .map(\n (integration) =>\n `export * as ${integration.name} from '${integration.storybookEntryPreview}';`\n )\n .join('\\n');\n }\n });\n}\n","import { createRequire } from 'node:module';\nimport type { Dirent } from 'node:fs';\nimport { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { experimental_AstroContainer as AstroContainer } from 'astro/container';\nimport { createServer, mergeConfig, type Plugin, type Rollup } from 'vite';\nimport { importAstroConfig } from './importAstroConfig.ts';\nimport type { Integration } from './integrations/index.ts';\nimport { ssrLoadModuleWithFsFallback } from './lib/ssr-load-module-with-fs-fallback.ts';\nimport { resolveSanitizationOptions, sanitizeRenderPayload } from './lib/sanitization.ts';\nimport { resolveStoryModuleMock, withStoryModuleMocks } from './module-mocks.ts';\nimport { applyMswHandlers } from './msw.ts';\nimport { resolveRulesConfigFilePath } from './rules-options.ts';\nimport { selectStoryRules } from './rules.ts';\nimport type { FrameworkOptions } from './types.ts';\nimport { vitePluginAstroFontsFallback } from './vitePluginAstroFontsFallback.ts';\nimport { vitePluginAstroRoutesFallback } from './vitePluginAstroRoutesFallback.ts';\nimport { vitePluginAstroVueFallback } from './vitePluginAstroVueFallback.ts';\n\nconst PRERENDERED_STORIES_FILE = 'astro-prerendered-stories.json';\n\ntype StoryIndex = {\n entries?: Record<\n string,\n {\n type?: string;\n id?: string;\n importPath?: string;\n exportName?: string;\n componentPath?: string;\n title?: string;\n name?: string;\n }\n >;\n};\n\ntype StoryEntry = {\n id: string;\n importPath: string;\n exportName: string;\n title?: string;\n name?: string;\n};\n\ntype AstroCreateResult = {\n createAstro?: (...args: unknown[]) => unknown;\n};\n\ntype AstroComponentFactory = ((\n result: AstroCreateResult,\n props: unknown,\n slots: unknown\n) => unknown) & {\n isAstroComponentFactory?: boolean;\n moduleId?: string;\n propagation?: unknown;\n};\n\nexport function vitePluginAstroBuildPrerender(options: FrameworkOptions): Plugin {\n const integrations = options.integrations ?? [];\n const resolveFrom = options.resolveFrom ?? process.cwd();\n const storyRulesConfigFilePath = resolveRulesConfigFilePath(options.storyRules, resolveFrom);\n const trackedSpecifiers = collectTrackedSpecifiers(integrations);\n const staticEntrypointRefs = new Map<string, string>();\n const componentEntrypointRefs = new Map<string, string>();\n let outDir = resolve(resolveFrom, 'storybook-static');\n\n return {\n name: 'storybook-astro:build-prerender',\n apply: 'build',\n enforce: 'post',\n\n configResolved(config) {\n outDir = resolve(resolveFrom, config.build.outDir ?? 'storybook-static');\n },\n\n resolveId(id: string) {\n if (id.startsWith('virtual:astro-static-module/')) {\n return `\\0${id}`;\n }\n\n if (id.startsWith('virtual:astro-component-module/')) {\n return `\\0${id}`;\n }\n },\n\n load(id: string) {\n if (id.startsWith('\\0virtual:astro-static-module/')) {\n const encodedSpecifier = id.replace('\\0virtual:astro-static-module/', '');\n const specifier = decodeURIComponent(encodedSpecifier);\n\n if (isClientEntrypoint(specifier)) {\n return [`export { default } from '${specifier}';`, `export * from '${specifier}';`].join('\\n');\n }\n\n return [`import '${specifier}';`, 'export default undefined;'].join('\\n');\n }\n\n if (id.startsWith('\\0virtual:astro-component-module/')) {\n const encodedSpecifier = id.replace('\\0virtual:astro-component-module/', '');\n const specifier = decodeURIComponent(encodedSpecifier);\n\n return [`export { default } from '${specifier}';`, `export * from '${specifier}';`].join('\\n');\n }\n },\n\n async buildStart(this: Rollup.PluginContext) {\n integrations.forEach((integration) => {\n const entrypoint = integration.renderer.client?.entrypoint;\n\n if (entrypoint) {\n this.addWatchFile(entrypoint);\n }\n });\n\n trackedSpecifiers.forEach((specifier) => {\n const fileReferenceId = this.emitFile({\n type: 'chunk',\n id: toStaticVirtualId(specifier)\n });\n\n staticEntrypointRefs.set(specifier, fileReferenceId);\n });\n\n const srcRoot = resolve(resolveFrom, 'src/components');\n const specifiers = await collectHydratableSourceModules(srcRoot);\n\n specifiers.forEach((specifier) => {\n const fileReferenceId = this.emitFile({\n type: 'chunk',\n id: toComponentVirtualId(specifier)\n });\n\n componentEntrypointRefs.set(specifier, fileReferenceId);\n });\n },\n\n async writeBundle(this: Rollup.PluginContext) {\n const staticModuleMap = buildStaticModuleMap(\n this,\n staticEntrypointRefs,\n componentEntrypointRefs\n );\n\n const stories = await collectAstroStories(outDir);\n\n if (stories.length === 0) {\n await writePrerenderedStoriesFile(outDir, {});\n\n return;\n }\n\n const prerenderedStories = await prerenderStories({\n stories,\n integrations,\n sanitization: options.sanitization,\n storyRulesConfigFilePath,\n staticModuleMap,\n trackedSpecifiers,\n resolveFrom\n });\n\n await writePrerenderedStoriesFile(outDir, prerenderedStories);\n }\n };\n}\n\nasync function writePrerenderedStoriesFile(outDir: string, payload: Record<string, string>) {\n await mkdir(outDir, { recursive: true });\n await writeFile(resolve(outDir, PRERENDERED_STORIES_FILE), JSON.stringify(payload), 'utf-8');\n}\n\nasync function prerenderStories(options: {\n stories: StoryEntry[];\n integrations: Integration[];\n sanitization?: FrameworkOptions['sanitization'];\n storyRulesConfigFilePath?: string;\n staticModuleMap: Record<string, string>;\n trackedSpecifiers: Set<string>;\n resolveFrom: string;\n}) {\n const sanitizationOptions = resolveSanitizationOptions(options.sanitization ?? undefined);\n const resolveClientModule = createClientModuleResolver(\n options.integrations,\n options.staticModuleMap\n );\n const viteServer = await createStorySsrServer(\n options.integrations,\n options.trackedSpecifiers,\n options.resolveFrom\n );\n const rulesConfigModule = await loadRulesConfigModule(viteServer, options.storyRulesConfigFilePath);\n\n try {\n const container = await AstroContainer.create({\n resolve: async (specifier) => {\n const mockedModule = resolveStoryModuleMock(specifier);\n\n if (mockedModule) {\n return mockedModule;\n }\n\n const resolution = resolveClientModule(specifier);\n\n if (resolution) {\n return resolution;\n }\n\n return specifier;\n }\n });\n\n await addContainerRenderers(container, options.integrations, resolveClientModule, viteServer);\n\n const output: Record<string, string> = {};\n\n for (const story of options.stories) {\n const selectedRules = await selectStoryRules({\n configModule: rulesConfigModule,\n configFilePath: options.storyRulesConfigFilePath,\n mode: 'production',\n story: {\n id: story.id,\n title: story.title,\n name: story.name\n }\n });\n\n await applyMswHandlers(selectedRules.mswHandlers);\n\n if (selectedRules.moduleMocks.size > 0) {\n viteServer.moduleGraph.invalidateAll();\n }\n\n const html = await withStoryModuleMocks(selectedRules.moduleMocks, async () => {\n const modulePath = resolveImportPath(story.importPath, options.resolveFrom);\n const storyModule = await viteServer.ssrLoadModule(modulePath);\n const meta = isRecord(storyModule.default) ? storyModule.default : {};\n const storyExport = isRecord(storyModule[story.exportName]) ? storyModule[story.exportName] : {};\n\n if (typeof meta.component !== 'function') {\n throw new Error(\n `Unable to prerender story \"${story.id}\". Missing default export component in ${story.importPath}.`\n );\n }\n\n if (storyExport.component && storyExport.component !== meta.component) {\n return undefined;\n }\n\n const mergedArgs = mergeStoryArgs(toRecord(meta.args), toRecord(storyExport.args));\n const { args, slots } = separateSlots(mergedArgs);\n const processedArgs = await processImageMetadata(args);\n const sanitizedPayload = sanitizeRenderPayload(\n {\n args: processedArgs,\n slots\n },\n sanitizationOptions\n );\n\n return container.renderToString(patchCreateAstroCompat(meta.component), {\n props: sanitizedPayload.args,\n slots: sanitizedPayload.slots\n });\n });\n\n if (html !== undefined) {\n output[story.id] = html;\n }\n }\n\n return output;\n } finally {\n await viteServer.close();\n }\n}\n\nasync function createStorySsrServer(\n integrations: Integration[],\n trackedSpecifiers: Set<string>,\n resolveFrom: string\n) {\n const { getViteConfig } = await importAstroConfig(resolveFrom);\n const astroConfig = await getViteConfig(\n { root: resolveFrom },\n {\n configFile: false,\n integrations: await Promise.all(\n integrations.map((integration) => integration.loadIntegration(resolveFrom))\n )\n }\n )({\n mode: 'production',\n command: 'serve'\n });\n\n const config = mergeConfig(astroConfig, {\n appType: 'custom',\n server: {\n middlewareMode: true\n },\n plugins: [\n createProjectAstroResolutionPlugin(resolveFrom),\n vitePluginAstroFontsFallback(),\n vitePluginAstroVueFallback(),\n vitePluginAstroRoutesFallback(),\n {\n name: 'storybook-astro:static-prerender-ssr-stubs',\n resolveId(id: string) {\n if (trackedSpecifiers.has(id)) {\n return `\\0storybook-astro-static-prerender-stub:${encodeURIComponent(id)}`;\n }\n },\n load(id: string) {\n if (id.startsWith('\\0storybook-astro-static-prerender-stub:')) {\n return 'export default undefined;';\n }\n }\n }\n ]\n });\n\n return createServer(config);\n}\n\nasync function loadRulesConfigModule(\n viteServer: Awaited<ReturnType<typeof createStorySsrServer>>,\n configFilePath?: string\n) {\n if (!configFilePath) {\n return undefined;\n }\n\n try {\n return await ssrLoadModuleWithFsFallback(viteServer, configFilePath, {\n fixStacktrace: true\n });\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n\n throw new Error(\n `Unable to load framework.options.storyRules config module at ${configFilePath}: ${reason}`\n );\n }\n}\n\nasync function addContainerRenderers(\n container: Awaited<ReturnType<typeof AstroContainer.create>>,\n integrations: Integration[],\n resolveClientModule: (specifier: string) => string | undefined,\n viteServer: Awaited<ReturnType<typeof createStorySsrServer>>\n) {\n for (const integration of integrations) {\n const serverRenderer = integration.renderer.server;\n\n if (serverRenderer) {\n const serverRendererModule = await viteServer.ssrLoadModule(serverRenderer.entrypoint);\n const renderer = serverRendererModule.default ?? serverRendererModule;\n\n if (integration.name === 'solid' && isRecord(renderer)) {\n container.addServerRenderer({\n name: serverRenderer.name,\n renderer: {\n ...renderer,\n name: serverRenderer.name\n }\n });\n } else {\n container.addServerRenderer({\n name: serverRenderer.name,\n renderer\n });\n }\n }\n\n const clientRenderer = integration.renderer.client;\n\n if (clientRenderer) {\n const resolvedEntrypoint =\n resolveClientModule(clientRenderer.entrypoint) ?? clientRenderer.entrypoint;\n\n container.addClientRenderer({\n name: clientRenderer.name,\n entrypoint: resolvedEntrypoint\n });\n }\n }\n}\n\nfunction createClientModuleResolver(\n integrations: Integration[],\n staticModuleMap: Record<string, string>\n) {\n return function resolveClientModule(specifier: string) {\n if (Object.hasOwn(staticModuleMap, specifier)) {\n return staticModuleMap[specifier];\n }\n\n const normalizedSpecifier = specifier.replace(/\\\\/g, '/').replace(/\\?.*$/, '');\n\n if (Object.hasOwn(staticModuleMap, normalizedSpecifier)) {\n return staticModuleMap[normalizedSpecifier];\n }\n\n for (const integration of integrations) {\n const resolution = integration.resolveClient(specifier);\n\n if (resolution) {\n return resolution;\n }\n }\n };\n}\n\nasync function collectAstroStories(outDir: string): Promise<StoryEntry[]> {\n const indexFile = resolve(outDir, 'index.json');\n const indexRaw = await readFile(indexFile, 'utf-8');\n const indexJson = JSON.parse(indexRaw) as StoryIndex;\n\n return Object.values(indexJson.entries ?? {})\n .filter((entry) => entry.type === 'story' && entry.componentPath?.endsWith('.astro'))\n .map((entry) => {\n if (!entry.id || !entry.importPath || !entry.exportName) {\n throw new Error(`Encountered an invalid Storybook index entry in ${indexFile}.`);\n }\n\n return {\n id: entry.id,\n importPath: entry.importPath,\n exportName: entry.exportName,\n title: entry.title,\n name: entry.name\n };\n });\n}\n\nfunction mergeStoryArgs(\n metaArgs: Record<string, unknown> | undefined,\n storyArgs: Record<string, unknown> | undefined\n) {\n return {\n ...(metaArgs ?? {}),\n ...(storyArgs ?? {})\n };\n}\n\nfunction separateSlots(inputArgs: Record<string, unknown>) {\n const args = { ...inputArgs };\n const slotsCandidate = args.slots;\n\n delete args.slots;\n\n if (!isRecord(slotsCandidate)) {\n return {\n args,\n slots: {}\n };\n }\n\n return {\n args,\n slots: slotsCandidate as Record<string, string>\n };\n}\n\nfunction resolveImportPath(importPath: string, resolveFrom: string) {\n if (importPath.startsWith('./')) {\n return resolve(resolveFrom, importPath.slice(2));\n }\n\n return resolve(resolveFrom, importPath);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return value;\n}\n\nfunction collectTrackedSpecifiers(integrations: Integration[]) {\n const specifiers = new Set<string>(['astro:scripts/page.js', 'astro:scripts/before-hydration.js']);\n\n integrations.forEach((integration) => {\n const entrypoint = integration.renderer.client?.entrypoint;\n\n if (entrypoint) {\n specifiers.add(entrypoint);\n }\n });\n\n return specifiers;\n}\n\nfunction buildStaticModuleMap(\n pluginContext: Rollup.PluginContext,\n staticEntrypointRefs: Map<string, string>,\n componentEntrypointRefs: Map<string, string>\n) {\n const map: Record<string, string> = {};\n\n staticEntrypointRefs.forEach((fileReferenceId, specifier) => {\n const fileName = pluginContext.getFileName(fileReferenceId);\n\n if (fileName) {\n map[specifier] = toPublicPath(fileName);\n }\n });\n\n componentEntrypointRefs.forEach((fileReferenceId, specifier) => {\n const fileName = pluginContext.getFileName(fileReferenceId);\n\n if (fileName) {\n map[specifier] = toPublicPath(fileName);\n }\n });\n\n return map;\n}\n\nfunction toStaticVirtualId(specifier: string) {\n return `virtual:astro-static-module/${encodeURIComponent(specifier)}`;\n}\n\nfunction toComponentVirtualId(specifier: string) {\n return `virtual:astro-component-module/${encodeURIComponent(specifier)}`;\n}\n\nfunction isClientEntrypoint(specifier: string) {\n return specifier.startsWith('@astrojs/') && specifier.endsWith('/client.js');\n}\n\nfunction toPublicPath(fileName: string) {\n return `./${fileName}`;\n}\n\nasync function collectHydratableSourceModules(srcRoot: string): Promise<string[]> {\n const modules: string[] = [];\n\n async function walk(directory: string) {\n let entries: Dirent[];\n\n try {\n entries = await readdir(directory, { withFileTypes: true });\n } catch {\n return;\n }\n\n await Promise.all(\n entries.map(async (entry) => {\n const absolutePath = resolve(directory, entry.name);\n\n if (entry.isDirectory()) {\n await walk(absolutePath);\n\n return;\n }\n\n if (!entry.isFile()) {\n return;\n }\n\n const normalizedPath = absolutePath.replace(/\\\\/g, '/');\n\n if (!isHydratableSourceFile(normalizedPath)) {\n return;\n }\n\n if (isNonHydratableSourceFile(normalizedPath)) {\n return;\n }\n\n modules.push(normalizedPath);\n })\n );\n }\n\n await walk(srcRoot);\n\n return modules;\n}\n\nfunction isHydratableSourceFile(input: string) {\n return /\\.(jsx|tsx|vue|svelte|js|ts)$/.test(input);\n}\n\nfunction isNonHydratableSourceFile(input: string) {\n return /\\.stories\\.[jt]sx?$|\\.stories\\.vue$|\\.stories\\.svelte$|\\.(spec|test)\\.[jt]sx?$/.test(\n input\n );\n}\n\nfunction patchCreateAstroCompat(component: unknown): AstroComponentFactory {\n if (typeof component !== 'function') {\n throw new Error('Expected Astro component factory to be a function.');\n }\n\n const originalComponent = component as AstroComponentFactory;\n const wrapped = ((result: AstroCreateResult, props: unknown, slots: unknown) => {\n if (result && typeof result.createAstro === 'function') {\n const originalCreateAstro = result.createAstro;\n const runtimeExpectsAstroGlobal = originalCreateAstro.length >= 3;\n\n result.createAstro = (...args: unknown[]) => {\n if (args.length === 3 && !runtimeExpectsAstroGlobal) {\n return originalCreateAstro(args[1], args[2]);\n }\n\n return originalCreateAstro(...args);\n };\n }\n\n return originalComponent(result, props, slots);\n }) as AstroComponentFactory;\n\n wrapped.isAstroComponentFactory = originalComponent.isAstroComponentFactory;\n wrapped.moduleId = originalComponent.moduleId;\n wrapped.propagation = originalComponent.propagation;\n\n return wrapped;\n}\n\nasync function processImageMetadata(\n args: Record<string, unknown>\n): Promise<Record<string, unknown>> {\n const processed: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(args)) {\n if (isImageMetadata(value)) {\n processed[key] = convertImageMetadataToUrl(value);\n\n continue;\n }\n\n if (Array.isArray(value)) {\n processed[key] = await Promise.all(\n value.map(async (item) => {\n if (isImageMetadata(item)) {\n return convertImageMetadataToUrl(item);\n }\n\n if (isRecord(item)) {\n return processImageMetadata(item);\n }\n\n return item;\n })\n );\n\n continue;\n }\n\n if (isRecord(value)) {\n processed[key] = await processImageMetadata(value);\n\n continue;\n }\n\n processed[key] = value;\n }\n\n return processed;\n}\n\nfunction isImageMetadata(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n typeof value.src === 'string' &&\n ('width' in value || 'height' in value || 'format' in value)\n );\n}\n\nfunction convertImageMetadataToUrl(imageMetadata: Record<string, unknown>): string {\n const src = imageMetadata.src;\n const fsPath = imageMetadata.fsPath;\n\n if (typeof src === 'string') {\n return src;\n }\n\n if (typeof fsPath === 'string') {\n return fsPath;\n }\n\n return String(imageMetadata);\n}\n\nfunction createProjectAstroResolutionPlugin(resolveFrom: string): Plugin {\n const require = createRequire(import.meta.url);\n\n return {\n name: 'storybook-astro:resolve-project-astro-prerender',\n enforce: 'pre',\n resolveId(id: string) {\n if (id !== 'astro' && !id.startsWith('astro/')) {\n return null;\n }\n\n try {\n return require.resolve(id, {\n paths: [resolveFrom]\n });\n } catch {\n return null;\n }\n }\n };\n}\n","import { mergeConfig, type InlineConfig } from 'vite';\nimport type { Integration } from './integrations/index.ts';\nimport { importAstroConfig } from './importAstroConfig.ts';\n\nconst ASTRO_PLUGINS_THAT_ARE_SUPPOSEDLY_NOT_NEEDED_IN_STORYBOOK = [\n '@astro/plugin-actions',\n '@astrojs/vite-plugin-astro-ssr-manifest',\n 'astro-content-virtual-mod-plugin',\n 'astro:actions',\n 'astro:build:normal',\n 'astro:container',\n 'astro:content-asset-propagation',\n 'astro:content-imports',\n 'astro:content-listen',\n 'astro:dev-toolbar',\n 'astro:head-metadata',\n 'astro:html',\n 'astro:i18n',\n 'astro:integration-container',\n 'astro:jsx',\n 'astro:markdown',\n 'astro:postprocess',\n 'astro:prefetch',\n 'astro:scanner',\n 'astro:scripts:page-ssr',\n 'astro:server',\n 'astro:vite-plugin-env',\n 'astro:vite-plugin-file-url'\n];\n\nexport async function mergeWithAstroConfig(\n config: InlineConfig,\n integrations: Integration[] = [],\n resolveFrom = process.cwd(),\n mode = 'development',\n command: 'build' | 'serve' = 'serve'\n) {\n const { getViteConfig } = await importAstroConfig(resolveFrom);\n const safeIntegrations = integrations ?? [];\n\n const astroConfig = await getViteConfig(\n {},\n {\n configFile: false,\n integrations: await Promise.all(\n safeIntegrations.map((integration) => integration.loadIntegration(resolveFrom))\n )\n }\n )({\n mode,\n command\n });\n\n const filteredPlugins = astroConfig\n .plugins!.flat()\n .filter(\n (plugin) =>\n plugin &&\n 'name' in plugin &&\n !ASTRO_PLUGINS_THAT_ARE_SUPPOSEDLY_NOT_NEEDED_IN_STORYBOOK.includes(plugin.name)\n );\n\n return mergeConfig(config, {\n ...astroConfig,\n plugins: filteredPlugins\n });\n}\n","import type { StorybookConfigVite, FrameworkOptions } from './types.ts';\nimport { vitePluginStorybookAstroMiddleware } from './viteStorybookAstroMiddlewarePlugin.ts';\nimport { viteStorybookRendererFallbackPlugin } from './viteStorybookRendererFallbackPlugin.ts';\nimport { vitePluginAstroComponentMarker } from './vitePluginAstroComponentMarker.ts';\nimport { vitePluginAstroBuildPrerender } from './vitePluginAstroBuildPrerender.ts';\nimport { vitePluginAstroVueFallback } from './vitePluginAstroVueFallback.ts';\nimport { resolveSanitizationOptions } from './lib/sanitization.ts';\nimport { mergeWithAstroConfig } from './vitePluginAstro.ts';\n\nexport const core = {\n builder: '@storybook/builder-vite',\n renderer: '@storybook-astro/renderer'\n};\n\nexport const viteFinal: StorybookConfigVite['viteFinal'] = async (config, { configType, presets }) => {\n const options = await presets.apply<FrameworkOptions>('frameworkOptions');\n const { vitePlugin: storybookAstroMiddlewarePlugin, viteConfig } =\n await vitePluginStorybookAstroMiddleware(options);\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const integrations = options.integrations ?? [];\n const resolveFrom = options.resolveFrom ?? process.cwd();\n const mode = configType === 'DEVELOPMENT' ? 'development' : 'production';\n const command = configType === 'DEVELOPMENT' ? 'serve' : 'build';\n\n resolveSanitizationOptions(options.sanitization);\n\n config.plugins.push(\n storybookAstroMiddlewarePlugin,\n viteStorybookRendererFallbackPlugin(integrations),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n vitePluginAstroComponentMarker() as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n vitePluginAstroBuildPrerender(options) as any,\n vitePluginAstroVueFallback(),\n ...viteConfig.plugins\n );\n\n // Add React/ReactDOM aliases for storybook-solidjs compatibility\n if (!config.resolve) {\n config.resolve = {};\n }\n if (!config.resolve.alias) {\n config.resolve.alias = {};\n }\n \n // Ensure React is available for storybook-solidjs\n const aliases = config.resolve.alias as Record<string, string>;\n\n if (!aliases['react']) {\n aliases['react'] = 'react';\n }\n if (!aliases['react-dom']) {\n aliases['react-dom'] = 'react-dom';\n }\n\n const finalConfig = await mergeWithAstroConfig(config, integrations, resolveFrom, mode, command);\n\n // Exclude @astrojs/vue from dependency optimization because it imports\n // virtual modules that esbuild cannot resolve (virtual:@astrojs/vue/app).\n // This must be done after mergeWithAstroConfig to avoid being overwritten.\n if (!finalConfig.optimizeDeps) {\n finalConfig.optimizeDeps = {};\n }\n if (!finalConfig.optimizeDeps.exclude) {\n finalConfig.optimizeDeps.exclude = [];\n }\n if (!finalConfig.optimizeDeps.exclude.includes('@astrojs/vue')) {\n finalConfig.optimizeDeps.exclude.push('@astrojs/vue');\n }\n // Mark Vue virtual modules as external so esbuild doesn't try to resolve them\n if (!finalConfig.optimizeDeps.esbuildOptions) {\n finalConfig.optimizeDeps.esbuildOptions = {};\n }\n if (!finalConfig.optimizeDeps.esbuildOptions.external) {\n finalConfig.optimizeDeps.esbuildOptions.external = [];\n }\n const vueVirtualModules = ['virtual:@astrojs/vue/app', 'virtual:astro:vue-app'];\n\n for (const mod of vueVirtualModules) {\n if (!finalConfig.optimizeDeps.esbuildOptions.external.includes(mod)) {\n finalConfig.optimizeDeps.esbuildOptions.external.push(mod);\n }\n }\n\n return finalConfig;\n};\n"],"mappings":"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","names":["require","mergeConfig","mergeConfig"]}
1
+ {"version":3,"sources":["../src/viteStorybookRendererFallbackPlugin.ts","../src/vitePluginAstroBuildPrerender.ts","../src/vitePluginAstro.ts","../src/preset.ts"],"sourcesContent":["import type { Integration } from './integrations/index.ts';\nimport { createVirtualModulePlugin } from './vite/createVirtualModulePlugin.ts';\n\nexport function viteStorybookRendererFallbackPlugin(integrations: Integration[]) {\n const safeIntegrations = integrations ?? [];\n\n return createVirtualModulePlugin({\n pluginName: 'storybook-renderer-fallback',\n virtualModuleId: 'virtual:storybook-renderer-fallback',\n load() {\n return safeIntegrations\n .filter((integration) => integration.storybookEntryPreview)\n .map(\n (integration) =>\n `export * as ${integration.name} from '${integration.storybookEntryPreview}';`\n )\n .join('\\n');\n }\n });\n}\n","import { createRequire } from 'node:module';\nimport type { Dirent } from 'node:fs';\nimport { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { resolve } from 'node:path';\nimport { experimental_AstroContainer as AstroContainer } from 'astro/container';\nimport { createServer, mergeConfig, type Plugin, type Rollup } from 'vite';\nimport { importAstroConfig } from './importAstroConfig.ts';\nimport type { Integration } from './integrations/index.ts';\nimport { ssrLoadModuleWithFsFallback } from './lib/ssr-load-module-with-fs-fallback.ts';\nimport { resolveSanitizationOptions, sanitizeRenderPayload } from './lib/sanitization.ts';\nimport { resolveStoryModuleMock, withStoryModuleMocks } from './module-mocks.ts';\nimport { applyMswHandlers } from './msw.ts';\nimport { resolveRulesConfigFilePath } from './rules-options.ts';\nimport { selectStoryRules } from './rules.ts';\nimport type { FrameworkOptions } from './types.ts';\nimport { vitePluginAstroFontsFallback } from './vitePluginAstroFontsFallback.ts';\nimport { vitePluginAstroRoutesFallback } from './vitePluginAstroRoutesFallback.ts';\nimport { vitePluginAstroVueFallback } from './vitePluginAstroVueFallback.ts';\n\nconst PRERENDERED_STORIES_FILE = 'astro-prerendered-stories.json';\n\ntype StoryIndex = {\n entries?: Record<\n string,\n {\n type?: string;\n id?: string;\n importPath?: string;\n exportName?: string;\n componentPath?: string;\n title?: string;\n name?: string;\n }\n >;\n};\n\ntype StoryEntry = {\n id: string;\n importPath: string;\n exportName: string;\n title?: string;\n name?: string;\n};\n\ntype AstroCreateResult = {\n createAstro?: (...args: unknown[]) => unknown;\n};\n\ntype AstroComponentFactory = ((\n result: AstroCreateResult,\n props: unknown,\n slots: unknown\n) => unknown) & {\n isAstroComponentFactory?: boolean;\n moduleId?: string;\n propagation?: unknown;\n};\n\nexport function vitePluginAstroBuildPrerender(options: FrameworkOptions): Plugin {\n const integrations = options.integrations ?? [];\n const resolveFrom = options.resolveFrom ?? process.cwd();\n const storyRulesConfigFilePath = resolveRulesConfigFilePath(options.storyRules, resolveFrom);\n const trackedSpecifiers = collectTrackedSpecifiers(integrations);\n const staticEntrypointRefs = new Map<string, string>();\n const componentEntrypointRefs = new Map<string, string>();\n let outDir = resolve(resolveFrom, 'storybook-static');\n\n return {\n name: 'storybook-astro:build-prerender',\n apply: 'build',\n enforce: 'post',\n\n configResolved(config) {\n outDir = resolve(resolveFrom, config.build.outDir ?? 'storybook-static');\n },\n\n resolveId(id: string) {\n if (id.startsWith('virtual:astro-static-module/')) {\n return `\\0${id}`;\n }\n\n if (id.startsWith('virtual:astro-component-module/')) {\n return `\\0${id}`;\n }\n },\n\n load(id: string) {\n if (id.startsWith('\\0virtual:astro-static-module/')) {\n const encodedSpecifier = id.replace('\\0virtual:astro-static-module/', '');\n const specifier = decodeURIComponent(encodedSpecifier);\n\n if (isClientEntrypoint(specifier)) {\n return [`export { default } from '${specifier}';`, `export * from '${specifier}';`].join('\\n');\n }\n\n return [`import '${specifier}';`, 'export default undefined;'].join('\\n');\n }\n\n if (id.startsWith('\\0virtual:astro-component-module/')) {\n const encodedSpecifier = id.replace('\\0virtual:astro-component-module/', '');\n const specifier = decodeURIComponent(encodedSpecifier);\n\n return [`export { default } from '${specifier}';`, `export * from '${specifier}';`].join('\\n');\n }\n },\n\n async buildStart(this: Rollup.PluginContext) {\n integrations.forEach((integration) => {\n const entrypoint = integration.renderer.client?.entrypoint;\n\n if (entrypoint) {\n this.addWatchFile(entrypoint);\n }\n });\n\n trackedSpecifiers.forEach((specifier) => {\n const fileReferenceId = this.emitFile({\n type: 'chunk',\n id: toStaticVirtualId(specifier)\n });\n\n staticEntrypointRefs.set(specifier, fileReferenceId);\n });\n\n const srcRoot = resolve(resolveFrom, 'src/components');\n const specifiers = await collectHydratableSourceModules(srcRoot);\n\n specifiers.forEach((specifier) => {\n const fileReferenceId = this.emitFile({\n type: 'chunk',\n id: toComponentVirtualId(specifier)\n });\n\n componentEntrypointRefs.set(specifier, fileReferenceId);\n });\n },\n\n async writeBundle(this: Rollup.PluginContext) {\n const staticModuleMap = buildStaticModuleMap(\n this,\n staticEntrypointRefs,\n componentEntrypointRefs\n );\n\n const stories = await collectAstroStories(outDir);\n\n if (stories.length === 0) {\n await writePrerenderedStoriesFile(outDir, {});\n\n return;\n }\n\n const prerenderedStories = await prerenderStories({\n stories,\n integrations,\n sanitization: options.sanitization,\n storyRulesConfigFilePath,\n staticModuleMap,\n trackedSpecifiers,\n resolveFrom\n });\n\n await writePrerenderedStoriesFile(outDir, prerenderedStories);\n }\n };\n}\n\nasync function writePrerenderedStoriesFile(outDir: string, payload: Record<string, string>) {\n await mkdir(outDir, { recursive: true });\n await writeFile(resolve(outDir, PRERENDERED_STORIES_FILE), JSON.stringify(payload), 'utf-8');\n}\n\nasync function prerenderStories(options: {\n stories: StoryEntry[];\n integrations: Integration[];\n sanitization?: FrameworkOptions['sanitization'];\n storyRulesConfigFilePath?: string;\n staticModuleMap: Record<string, string>;\n trackedSpecifiers: Set<string>;\n resolveFrom: string;\n}) {\n const sanitizationOptions = resolveSanitizationOptions(options.sanitization ?? undefined);\n const resolveClientModule = createClientModuleResolver(\n options.integrations,\n options.staticModuleMap\n );\n const viteServer = await createStorySsrServer(\n options.integrations,\n options.trackedSpecifiers,\n options.resolveFrom\n );\n const rulesConfigModule = await loadRulesConfigModule(viteServer, options.storyRulesConfigFilePath);\n\n try {\n const container = await AstroContainer.create({\n resolve: async (specifier) => {\n const mockedModule = resolveStoryModuleMock(specifier);\n\n if (mockedModule) {\n return mockedModule;\n }\n\n const resolution = resolveClientModule(specifier);\n\n if (resolution) {\n return resolution;\n }\n\n return specifier;\n }\n });\n\n await addContainerRenderers(container, options.integrations, resolveClientModule, viteServer);\n\n const output: Record<string, string> = {};\n\n for (const story of options.stories) {\n const selectedRules = await selectStoryRules({\n configModule: rulesConfigModule,\n configFilePath: options.storyRulesConfigFilePath,\n mode: 'production',\n story: {\n id: story.id,\n title: story.title,\n name: story.name\n }\n });\n\n await applyMswHandlers(selectedRules.mswHandlers);\n\n if (selectedRules.moduleMocks.size > 0) {\n viteServer.moduleGraph.invalidateAll();\n }\n\n const html = await withStoryModuleMocks(selectedRules.moduleMocks, async () => {\n const modulePath = resolveImportPath(story.importPath, options.resolveFrom);\n const storyModule = await viteServer.ssrLoadModule(modulePath);\n const meta = isRecord(storyModule.default) ? storyModule.default : {};\n const storyExport = isRecord(storyModule[story.exportName]) ? storyModule[story.exportName] : {};\n\n if (typeof meta.component !== 'function') {\n throw new Error(\n `Unable to prerender story \"${story.id}\". Missing default export component in ${story.importPath}.`\n );\n }\n\n if (storyExport.component && storyExport.component !== meta.component) {\n return undefined;\n }\n\n const mergedArgs = mergeStoryArgs(toRecord(meta.args), toRecord(storyExport.args));\n const { args, slots } = separateSlots(mergedArgs);\n const processedArgs = await processImageMetadata(args);\n const sanitizedPayload = sanitizeRenderPayload(\n {\n args: processedArgs,\n slots\n },\n sanitizationOptions\n );\n\n return container.renderToString(patchCreateAstroCompat(meta.component), {\n props: sanitizedPayload.args,\n slots: sanitizedPayload.slots\n });\n });\n\n if (html !== undefined) {\n output[story.id] = html;\n }\n }\n\n return output;\n } finally {\n await viteServer.close();\n }\n}\n\nasync function createStorySsrServer(\n integrations: Integration[],\n trackedSpecifiers: Set<string>,\n resolveFrom: string\n) {\n const { getViteConfig } = await importAstroConfig(resolveFrom);\n const astroConfig = await getViteConfig(\n { root: resolveFrom },\n {\n configFile: false,\n integrations: await Promise.all(\n integrations.map((integration) => integration.loadIntegration(resolveFrom))\n )\n }\n )({\n mode: 'production',\n command: 'serve'\n });\n\n const config = mergeConfig(astroConfig, {\n appType: 'custom',\n server: {\n middlewareMode: true\n },\n plugins: [\n createProjectAstroResolutionPlugin(resolveFrom),\n vitePluginAstroFontsFallback(),\n vitePluginAstroVueFallback(),\n vitePluginAstroRoutesFallback(),\n {\n name: 'storybook-astro:static-prerender-ssr-stubs',\n resolveId(id: string) {\n if (trackedSpecifiers.has(id)) {\n return `\\0storybook-astro-static-prerender-stub:${encodeURIComponent(id)}`;\n }\n },\n load(id: string) {\n if (id.startsWith('\\0storybook-astro-static-prerender-stub:')) {\n return 'export default undefined;';\n }\n }\n }\n ]\n });\n\n return createServer(config);\n}\n\nasync function loadRulesConfigModule(\n viteServer: Awaited<ReturnType<typeof createStorySsrServer>>,\n configFilePath?: string\n) {\n if (!configFilePath) {\n return undefined;\n }\n\n try {\n return await ssrLoadModuleWithFsFallback(viteServer, configFilePath, {\n fixStacktrace: true\n });\n } catch (error) {\n const reason = error instanceof Error ? error.message : String(error);\n\n throw new Error(\n `Unable to load framework.options.storyRules config module at ${configFilePath}: ${reason}`\n );\n }\n}\n\nasync function addContainerRenderers(\n container: Awaited<ReturnType<typeof AstroContainer.create>>,\n integrations: Integration[],\n resolveClientModule: (specifier: string) => string | undefined,\n viteServer: Awaited<ReturnType<typeof createStorySsrServer>>\n) {\n for (const integration of integrations) {\n const serverRenderer = integration.renderer.server;\n\n if (serverRenderer) {\n const serverRendererModule = await viteServer.ssrLoadModule(serverRenderer.entrypoint);\n const renderer = serverRendererModule.default ?? serverRendererModule;\n\n if (integration.name === 'solid' && isRecord(renderer)) {\n container.addServerRenderer({\n name: serverRenderer.name,\n renderer: {\n ...renderer,\n name: serverRenderer.name\n }\n });\n } else {\n container.addServerRenderer({\n name: serverRenderer.name,\n renderer\n });\n }\n }\n\n const clientRenderer = integration.renderer.client;\n\n if (clientRenderer) {\n const resolvedEntrypoint =\n resolveClientModule(clientRenderer.entrypoint) ?? clientRenderer.entrypoint;\n\n container.addClientRenderer({\n name: clientRenderer.name,\n entrypoint: resolvedEntrypoint\n });\n }\n }\n}\n\nfunction createClientModuleResolver(\n integrations: Integration[],\n staticModuleMap: Record<string, string>\n) {\n return function resolveClientModule(specifier: string) {\n if (Object.hasOwn(staticModuleMap, specifier)) {\n return staticModuleMap[specifier];\n }\n\n const normalizedSpecifier = specifier.replace(/\\\\/g, '/').replace(/\\?.*$/, '');\n\n if (Object.hasOwn(staticModuleMap, normalizedSpecifier)) {\n return staticModuleMap[normalizedSpecifier];\n }\n\n for (const integration of integrations) {\n const resolution = integration.resolveClient(specifier);\n\n if (resolution) {\n return resolution;\n }\n }\n };\n}\n\nasync function collectAstroStories(outDir: string): Promise<StoryEntry[]> {\n const indexFile = resolve(outDir, 'index.json');\n const indexRaw = await readFile(indexFile, 'utf-8');\n const indexJson = JSON.parse(indexRaw) as StoryIndex;\n\n return Object.values(indexJson.entries ?? {})\n .filter((entry) => entry.type === 'story' && entry.componentPath?.endsWith('.astro'))\n .map((entry) => {\n if (!entry.id || !entry.importPath || !entry.exportName) {\n throw new Error(`Encountered an invalid Storybook index entry in ${indexFile}.`);\n }\n\n return {\n id: entry.id,\n importPath: entry.importPath,\n exportName: entry.exportName,\n title: entry.title,\n name: entry.name\n };\n });\n}\n\nfunction mergeStoryArgs(\n metaArgs: Record<string, unknown> | undefined,\n storyArgs: Record<string, unknown> | undefined\n) {\n return {\n ...(metaArgs ?? {}),\n ...(storyArgs ?? {})\n };\n}\n\nfunction separateSlots(inputArgs: Record<string, unknown>) {\n const args = { ...inputArgs };\n const slotsCandidate = args.slots;\n\n delete args.slots;\n\n if (!isRecord(slotsCandidate)) {\n return {\n args,\n slots: {}\n };\n }\n\n return {\n args,\n slots: slotsCandidate as Record<string, string>\n };\n}\n\nfunction resolveImportPath(importPath: string, resolveFrom: string) {\n if (importPath.startsWith('./')) {\n return resolve(resolveFrom, importPath.slice(2));\n }\n\n return resolve(resolveFrom, importPath);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction toRecord(value: unknown): Record<string, unknown> | undefined {\n if (!isRecord(value)) {\n return undefined;\n }\n\n return value;\n}\n\nfunction collectTrackedSpecifiers(integrations: Integration[]) {\n const specifiers = new Set<string>(['astro:scripts/page.js', 'astro:scripts/before-hydration.js']);\n\n integrations.forEach((integration) => {\n const entrypoint = integration.renderer.client?.entrypoint;\n\n if (entrypoint) {\n specifiers.add(entrypoint);\n }\n });\n\n return specifiers;\n}\n\nfunction buildStaticModuleMap(\n pluginContext: Rollup.PluginContext,\n staticEntrypointRefs: Map<string, string>,\n componentEntrypointRefs: Map<string, string>\n) {\n const map: Record<string, string> = {};\n\n staticEntrypointRefs.forEach((fileReferenceId, specifier) => {\n const fileName = pluginContext.getFileName(fileReferenceId);\n\n if (fileName) {\n map[specifier] = toPublicPath(fileName);\n }\n });\n\n componentEntrypointRefs.forEach((fileReferenceId, specifier) => {\n const fileName = pluginContext.getFileName(fileReferenceId);\n\n if (fileName) {\n map[specifier] = toPublicPath(fileName);\n }\n });\n\n return map;\n}\n\nfunction toStaticVirtualId(specifier: string) {\n return `virtual:astro-static-module/${encodeURIComponent(specifier)}`;\n}\n\nfunction toComponentVirtualId(specifier: string) {\n return `virtual:astro-component-module/${encodeURIComponent(specifier)}`;\n}\n\nfunction isClientEntrypoint(specifier: string) {\n return specifier.startsWith('@astrojs/') && specifier.endsWith('/client.js');\n}\n\nfunction toPublicPath(fileName: string) {\n return `./${fileName}`;\n}\n\nasync function collectHydratableSourceModules(srcRoot: string): Promise<string[]> {\n const modules: string[] = [];\n\n async function walk(directory: string) {\n let entries: Dirent[];\n\n try {\n entries = await readdir(directory, { withFileTypes: true });\n } catch {\n return;\n }\n\n await Promise.all(\n entries.map(async (entry) => {\n const absolutePath = resolve(directory, entry.name);\n\n if (entry.isDirectory()) {\n await walk(absolutePath);\n\n return;\n }\n\n if (!entry.isFile()) {\n return;\n }\n\n const normalizedPath = absolutePath.replace(/\\\\/g, '/');\n\n if (!isHydratableSourceFile(normalizedPath)) {\n return;\n }\n\n if (isNonHydratableSourceFile(normalizedPath)) {\n return;\n }\n\n modules.push(normalizedPath);\n })\n );\n }\n\n await walk(srcRoot);\n\n return modules;\n}\n\nfunction isHydratableSourceFile(input: string) {\n return /\\.(jsx|tsx|vue|svelte|js|ts)$/.test(input);\n}\n\nfunction isNonHydratableSourceFile(input: string) {\n return /\\.stories\\.[jt]sx?$|\\.stories\\.vue$|\\.stories\\.svelte$|\\.(spec|test)\\.[jt]sx?$/.test(\n input\n );\n}\n\nfunction patchCreateAstroCompat(component: unknown): AstroComponentFactory {\n if (typeof component !== 'function') {\n throw new Error('Expected Astro component factory to be a function.');\n }\n\n const originalComponent = component as AstroComponentFactory;\n const wrapped = ((result: AstroCreateResult, props: unknown, slots: unknown) => {\n if (result && typeof result.createAstro === 'function') {\n const originalCreateAstro = result.createAstro;\n const runtimeExpectsAstroGlobal = originalCreateAstro.length >= 3;\n\n result.createAstro = (...args: unknown[]) => {\n if (args.length === 3 && !runtimeExpectsAstroGlobal) {\n return originalCreateAstro(args[1], args[2]);\n }\n\n return originalCreateAstro(...args);\n };\n }\n\n return originalComponent(result, props, slots);\n }) as AstroComponentFactory;\n\n wrapped.isAstroComponentFactory = originalComponent.isAstroComponentFactory;\n wrapped.moduleId = originalComponent.moduleId;\n wrapped.propagation = originalComponent.propagation;\n\n return wrapped;\n}\n\nasync function processImageMetadata(\n args: Record<string, unknown>\n): Promise<Record<string, unknown>> {\n const processed: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(args)) {\n if (isImageMetadata(value)) {\n processed[key] = convertImageMetadataToUrl(value);\n\n continue;\n }\n\n if (Array.isArray(value)) {\n processed[key] = await Promise.all(\n value.map(async (item) => {\n if (isImageMetadata(item)) {\n return convertImageMetadataToUrl(item);\n }\n\n if (isRecord(item)) {\n return processImageMetadata(item);\n }\n\n return item;\n })\n );\n\n continue;\n }\n\n if (isRecord(value)) {\n processed[key] = await processImageMetadata(value);\n\n continue;\n }\n\n processed[key] = value;\n }\n\n return processed;\n}\n\nfunction isImageMetadata(value: unknown): value is Record<string, unknown> {\n return (\n isRecord(value) &&\n typeof value.src === 'string' &&\n ('width' in value || 'height' in value || 'format' in value)\n );\n}\n\nfunction convertImageMetadataToUrl(imageMetadata: Record<string, unknown>): string {\n const src = imageMetadata.src;\n const fsPath = imageMetadata.fsPath;\n\n if (typeof src === 'string') {\n return src;\n }\n\n if (typeof fsPath === 'string') {\n return fsPath;\n }\n\n return String(imageMetadata);\n}\n\nfunction createProjectAstroResolutionPlugin(resolveFrom: string): Plugin {\n const require = createRequire(import.meta.url);\n\n return {\n name: 'storybook-astro:resolve-project-astro-prerender',\n enforce: 'pre',\n resolveId(id: string) {\n if (id !== 'astro' && !id.startsWith('astro/')) {\n return null;\n }\n\n try {\n return require.resolve(id, {\n paths: [resolveFrom]\n });\n } catch {\n return null;\n }\n }\n };\n}\n","import { mergeConfig, type InlineConfig } from 'vite';\nimport type { Integration } from './integrations/index.ts';\nimport { importAstroConfig } from './importAstroConfig.ts';\n\nconst ASTRO_PLUGINS_THAT_ARE_SUPPOSEDLY_NOT_NEEDED_IN_STORYBOOK = [\n '@astro/plugin-actions',\n '@astrojs/vite-plugin-astro-ssr-manifest',\n 'astro-content-virtual-mod-plugin',\n 'astro:actions',\n 'astro:build:normal',\n 'astro:container',\n 'astro:content-asset-propagation',\n 'astro:content-imports',\n 'astro:content-listen',\n 'astro:dev-toolbar',\n 'astro:head-metadata',\n 'astro:html',\n 'astro:i18n',\n 'astro:integration-container',\n 'astro:jsx',\n 'astro:markdown',\n 'astro:postprocess',\n 'astro:prefetch',\n 'astro:scanner',\n 'astro:scripts:page-ssr',\n 'astro:server',\n 'astro:vite-plugin-env',\n 'astro:vite-plugin-file-url'\n];\n\nexport async function mergeWithAstroConfig(\n config: InlineConfig,\n integrations: Integration[] = [],\n resolveFrom = process.cwd(),\n mode = 'development',\n command: 'build' | 'serve' = 'serve'\n) {\n const { getViteConfig } = await importAstroConfig(resolveFrom);\n const safeIntegrations = integrations ?? [];\n\n const astroConfig = await getViteConfig(\n {},\n {\n configFile: false,\n integrations: await Promise.all(\n safeIntegrations.map((integration) => integration.loadIntegration(resolveFrom))\n )\n }\n )({\n mode,\n command\n });\n\n const filteredPlugins = astroConfig\n .plugins!.flat()\n .filter(\n (plugin) =>\n plugin &&\n 'name' in plugin &&\n !ASTRO_PLUGINS_THAT_ARE_SUPPOSEDLY_NOT_NEEDED_IN_STORYBOOK.includes(plugin.name)\n );\n\n return mergeConfig(config, {\n ...astroConfig,\n plugins: filteredPlugins\n });\n}\n","import type { StorybookConfigVite, FrameworkOptions } from './types.ts';\nimport { vitePluginStorybookAstroMiddleware } from './viteStorybookAstroMiddlewarePlugin.ts';\nimport { viteStorybookRendererFallbackPlugin } from './viteStorybookRendererFallbackPlugin.ts';\nimport { vitePluginAstroComponentMarker } from './vitePluginAstroComponentMarker.ts';\nimport { vitePluginAstroBuildPrerender } from './vitePluginAstroBuildPrerender.ts';\nimport { vitePluginAstroVueFallback } from './vitePluginAstroVueFallback.ts';\nimport { resolveSanitizationOptions } from './lib/sanitization.ts';\nimport { mergeWithAstroConfig } from './vitePluginAstro.ts';\n\nexport const core = {\n builder: '@storybook/builder-vite',\n renderer: '@storybook-astro/renderer'\n};\n\nexport const viteFinal: StorybookConfigVite['viteFinal'] = async (config, { configType, presets }) => {\n const options = await presets.apply<FrameworkOptions>('frameworkOptions');\n const { vitePlugin: storybookAstroMiddlewarePlugin, viteConfig } =\n await vitePluginStorybookAstroMiddleware(options);\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const integrations = options.integrations ?? [];\n const resolveFrom = options.resolveFrom ?? process.cwd();\n const mode = configType === 'DEVELOPMENT' ? 'development' : 'production';\n const command = configType === 'DEVELOPMENT' ? 'serve' : 'build';\n\n resolveSanitizationOptions(options.sanitization);\n\n config.plugins.push(\n storybookAstroMiddlewarePlugin,\n viteStorybookRendererFallbackPlugin(integrations),\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n vitePluginAstroComponentMarker() as any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n vitePluginAstroBuildPrerender(options) as any,\n vitePluginAstroVueFallback(),\n ...viteConfig.plugins\n );\n\n // Add React/ReactDOM aliases for storybook-solidjs compatibility\n if (!config.resolve) {\n config.resolve = {};\n }\n if (!config.resolve.alias) {\n config.resolve.alias = {};\n }\n \n // Ensure React is available for storybook-solidjs\n const aliases = config.resolve.alias as Record<string, string>;\n\n if (!aliases['react']) {\n aliases['react'] = 'react';\n }\n if (!aliases['react-dom']) {\n aliases['react-dom'] = 'react-dom';\n }\n\n const finalConfig = await mergeWithAstroConfig(config, integrations, resolveFrom, mode, command);\n\n // Exclude @astrojs/vue from dependency optimization because it imports\n // virtual modules that esbuild cannot resolve (virtual:@astrojs/vue/app).\n // This must be done after mergeWithAstroConfig to avoid being overwritten.\n if (!finalConfig.optimizeDeps) {\n finalConfig.optimizeDeps = {};\n }\n if (!finalConfig.optimizeDeps.exclude) {\n finalConfig.optimizeDeps.exclude = [];\n }\n if (!finalConfig.optimizeDeps.exclude.includes('@astrojs/vue')) {\n finalConfig.optimizeDeps.exclude.push('@astrojs/vue');\n }\n // Exclude the renderer from Vite's esbuild pre-bundler so that\n // import.meta.hot is preserved in the preview iframe. When installed\n // via npm (not workspace:*), Vite would otherwise pre-bundle the\n // renderer with esbuild, which strips import.meta.hot and causes the\n // renderer to fall back to fetching astro-prerendered-stories.json\n // (a 404 in dev mode) rather than using the Vite HMR channel.\n if (!finalConfig.optimizeDeps.exclude.includes('@storybook-astro/renderer')) {\n finalConfig.optimizeDeps.exclude.push('@storybook-astro/renderer');\n }\n // Mark Vue virtual modules as external so esbuild doesn't try to resolve them\n if (!finalConfig.optimizeDeps.esbuildOptions) {\n finalConfig.optimizeDeps.esbuildOptions = {};\n }\n if (!finalConfig.optimizeDeps.esbuildOptions.external) {\n finalConfig.optimizeDeps.esbuildOptions.external = [];\n }\n const vueVirtualModules = ['virtual:@astrojs/vue/app', 'virtual:astro:vue-app'];\n\n for (const mod of vueVirtualModules) {\n if (!finalConfig.optimizeDeps.esbuildOptions.external.includes(mod)) {\n finalConfig.optimizeDeps.esbuildOptions.external.push(mod);\n }\n }\n\n return finalConfig;\n};\n"],"mappings":"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","names":["require","mergeConfig","mergeConfig"]}
package/dist/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  core,
3
3
  viteFinal
4
- } from "./chunk-UK43WNEA.js";
4
+ } from "./chunk-KSDXET2L.js";
5
5
  import {
6
6
  defineStoryRules
7
7
  } from "./chunk-C5OH4VBR.js";
package/dist/preset.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  core,
3
3
  viteFinal
4
- } from "./chunk-UK43WNEA.js";
4
+ } from "./chunk-KSDXET2L.js";
5
5
  import "./chunk-C5OH4VBR.js";
6
6
  import "./chunk-E4LB75JN.js";
7
7
  import "./chunk-7GHEQUPV.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@storybook-astro/framework",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Community-supported Storybook framework for Astro 5 & 6 components",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -112,7 +112,7 @@
112
112
  "astro": "^5.5.3 || ^6.0.0",
113
113
  "storybook": "^10.0.0",
114
114
  "storybook-solidjs": "^1.0.0-beta.7",
115
- "vite": "^6.2.5 || ^7.0.0 || ^8.0.0"
115
+ "vite": "^5.4.0 || ^6.2.5 || ^7.0.0 || ^8.0.0"
116
116
  },
117
117
  "peerDependenciesMeta": {
118
118
  "@astrojs/alpinejs": {
@@ -159,9 +159,9 @@
159
159
  }
160
160
  },
161
161
  "dependencies": {
162
- "@storybook-astro/renderer": "1.0.0",
162
+ "@storybook-astro/renderer": "1.0.2",
163
163
  "msw": "^2.12.10",
164
164
  "sanitize-html": "^2.17.0",
165
- "vite": "^6.2.5 || ^7.0.0 || ^8.0.0"
165
+ "vite": "^5.4.0 || ^6.2.5 || ^7.0.0 || ^8.0.0"
166
166
  }
167
167
  }
package/src/preset.ts CHANGED
@@ -71,6 +71,15 @@ export const viteFinal: StorybookConfigVite['viteFinal'] = async (config, { conf
71
71
  if (!finalConfig.optimizeDeps.exclude.includes('@astrojs/vue')) {
72
72
  finalConfig.optimizeDeps.exclude.push('@astrojs/vue');
73
73
  }
74
+ // Exclude the renderer from Vite's esbuild pre-bundler so that
75
+ // import.meta.hot is preserved in the preview iframe. When installed
76
+ // via npm (not workspace:*), Vite would otherwise pre-bundle the
77
+ // renderer with esbuild, which strips import.meta.hot and causes the
78
+ // renderer to fall back to fetching astro-prerendered-stories.json
79
+ // (a 404 in dev mode) rather than using the Vite HMR channel.
80
+ if (!finalConfig.optimizeDeps.exclude.includes('@storybook-astro/renderer')) {
81
+ finalConfig.optimizeDeps.exclude.push('@storybook-astro/renderer');
82
+ }
74
83
  // Mark Vue virtual modules as external so esbuild doesn't try to resolve them
75
84
  if (!finalConfig.optimizeDeps.esbuildOptions) {
76
85
  finalConfig.optimizeDeps.esbuildOptions = {};