@storybook-astro/framework 0.1.0-beta.9 → 1.0.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.
Files changed (92) hide show
  1. package/README.md +38 -0
  2. package/dist/base-IRZo3zgK.d.ts +23 -0
  3. package/dist/chunk-4SWPVM6R.js +96 -0
  4. package/dist/chunk-4SWPVM6R.js.map +1 -0
  5. package/dist/chunk-5EF25G5S.js +69 -0
  6. package/dist/chunk-5EF25G5S.js.map +1 -0
  7. package/dist/chunk-7GHEQUPV.js +439 -0
  8. package/dist/chunk-7GHEQUPV.js.map +1 -0
  9. package/dist/chunk-C5OH4VBR.js +492 -0
  10. package/dist/chunk-C5OH4VBR.js.map +1 -0
  11. package/dist/chunk-DNGQBPT7.js +15 -0
  12. package/dist/chunk-DNGQBPT7.js.map +1 -0
  13. package/dist/chunk-E4LB75JN.js +89 -0
  14. package/dist/chunk-E4LB75JN.js.map +1 -0
  15. package/dist/chunk-KSDXET2L.js +660 -0
  16. package/dist/chunk-KSDXET2L.js.map +1 -0
  17. package/dist/chunk-PJEDXZVN.js +240 -0
  18. package/dist/chunk-PJEDXZVN.js.map +1 -0
  19. package/dist/dist-HJOEPVRQ.js +15574 -0
  20. package/dist/dist-HJOEPVRQ.js.map +1 -0
  21. package/dist/index.d.ts +42 -0
  22. package/dist/index.js +13 -64
  23. package/dist/index.js.map +1 -1
  24. package/dist/integrations/index.d.ts +138 -0
  25. package/dist/integrations/index.js +8 -196
  26. package/dist/integrations/index.js.map +1 -1
  27. package/dist/middleware.d.ts +26 -0
  28. package/dist/middleware.js +179 -0
  29. package/dist/middleware.js.map +1 -0
  30. package/dist/portable-stories-BvdaQigq.d.ts +83 -0
  31. package/dist/preset.d.ts +14 -0
  32. package/dist/preset.js +5 -1
  33. package/dist/testing.d.ts +27 -0
  34. package/dist/testing.js +324 -15539
  35. package/dist/testing.js.map +1 -1
  36. package/dist/types-CHTsRtA7.d.ts +42 -0
  37. package/dist/viteStorybookAstroMiddlewarePlugin-NP2E52IC.js +11 -0
  38. package/dist/viteStorybookAstroMiddlewarePlugin-NP2E52IC.js.map +1 -0
  39. package/dist/vitest/index.d.ts +19 -0
  40. package/dist/vitest/index.js +229 -0
  41. package/dist/vitest/index.js.map +1 -0
  42. package/package.json +31 -17
  43. package/src/importAstroConfig.ts +11 -0
  44. package/src/index.ts +20 -6
  45. package/src/integrations/alpine.ts +5 -2
  46. package/src/integrations/base.ts +2 -2
  47. package/src/integrations/moduleResolver.ts +43 -0
  48. package/src/integrations/preact.ts +5 -2
  49. package/src/integrations/react.ts +5 -2
  50. package/src/integrations/solid.ts +5 -2
  51. package/src/integrations/svelte.ts +5 -2
  52. package/src/integrations/vue.ts +5 -2
  53. package/src/lib/sanitization.test.ts +232 -0
  54. package/src/lib/sanitization.ts +338 -0
  55. package/src/lib/ssr-load-module-with-fs-fallback.ts +29 -0
  56. package/src/middleware.test.ts +48 -0
  57. package/src/middleware.ts +204 -96
  58. package/src/module-mocks.ts +16 -0
  59. package/src/msw-helpers.ts +1 -0
  60. package/src/msw.ts +58 -0
  61. package/src/preset.ts +47 -3
  62. package/src/rules-options.test.ts +71 -0
  63. package/src/rules-options.ts +87 -0
  64. package/src/rules.test.ts +183 -0
  65. package/src/rules.ts +314 -0
  66. package/src/testing/astro-runtime.ts +219 -0
  67. package/src/testing/component-utils.ts +32 -0
  68. package/src/testing/index.ts +2 -0
  69. package/src/testing/integration-config.ts +121 -0
  70. package/src/testing/project-root.ts +185 -0
  71. package/src/testing/renderer-daemon.ts +269 -0
  72. package/src/testing/story-composition.ts +33 -0
  73. package/src/testing/types.ts +14 -0
  74. package/src/testing/working-directory.ts +28 -0
  75. package/src/testing.ts +1 -254
  76. package/src/types.ts +16 -4
  77. package/src/virtual.d.ts +2 -1
  78. package/src/vite/createVirtualModulePlugin.test.ts +80 -0
  79. package/src/vite/createVirtualModulePlugin.ts +25 -0
  80. package/src/viteAstroContainerRenderersPlugin.ts +60 -26
  81. package/src/vitePluginAstro.ts +12 -5
  82. package/src/vitePluginAstroBuildPrerender.ts +665 -204
  83. package/src/vitePluginAstroRoutesFallback.ts +37 -0
  84. package/src/vitePluginAstroVueFallback.ts +47 -0
  85. package/src/viteStorybookAstroMiddlewarePlugin.ts +88 -12
  86. package/src/viteStorybookRendererFallbackPlugin.ts +13 -23
  87. package/src/vitest/config.ts +95 -0
  88. package/src/vitest/global-setup.ts +16 -0
  89. package/src/vitest/index.ts +2 -0
  90. package/src/vitest/vite-plugins.ts +187 -0
  91. package/dist/chunk-KTGNRGDJ.js +0 -561
  92. package/dist/chunk-KTGNRGDJ.js.map +0 -1
@@ -0,0 +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 // 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":";;;;;;;;;;;;;;;;;;;;;;;;;AAGO,SAAS,oCAAoC,cAA6B;AAC/E,QAAM,mBAAmB,gBAAgB,CAAC;AAE1C,SAAO,0BAA0B;AAAA,IAC/B,YAAY;AAAA,IACZ,iBAAiB;AAAA,IACjB,OAAO;AACL,aAAO,iBACJ,OAAO,CAAC,gBAAgB,YAAY,qBAAqB,EACzD;AAAA,QACC,CAAC,gBACC,eAAe,YAAY,IAAI,UAAU,YAAY,qBAAqB;AAAA,MAC9E,EACC,KAAK,IAAI;AAAA,IACd;AAAA,EACF,CAAC;AACH;;;ACnBA,SAAS,qBAAqB;AAE9B,SAAS,OAAO,UAAU,SAAS,iBAAiB;AACpD,SAAS,eAAe;AACxB,SAAS,+BAA+B,sBAAsB;AAC9D,SAAS,cAAc,mBAA6C;AAcpE,IAAM,2BAA2B;AAuC1B,SAAS,8BAA8B,SAAmC;AAC/E,QAAM,eAAe,QAAQ,gBAAgB,CAAC;AAC9C,QAAM,cAAc,QAAQ,eAAe,QAAQ,IAAI;AACvD,QAAM,2BAA2B,2BAA2B,QAAQ,YAAY,WAAW;AAC3F,QAAM,oBAAoB,yBAAyB,YAAY;AAC/D,QAAM,uBAAuB,oBAAI,IAAoB;AACrD,QAAM,0BAA0B,oBAAI,IAAoB;AACxD,MAAI,SAAS,QAAQ,aAAa,kBAAkB;AAEpD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,OAAO;AAAA,IACP,SAAS;AAAA,IAET,eAAe,QAAQ;AACrB,eAAS,QAAQ,aAAa,OAAO,MAAM,UAAU,kBAAkB;AAAA,IACzE;AAAA,IAEA,UAAU,IAAY;AACpB,UAAI,GAAG,WAAW,8BAA8B,GAAG;AACjD,eAAO,KAAK,EAAE;AAAA,MAChB;AAEA,UAAI,GAAG,WAAW,iCAAiC,GAAG;AACpD,eAAO,KAAK,EAAE;AAAA,MAChB;AAAA,IACF;AAAA,IAEA,KAAK,IAAY;AACf,UAAI,GAAG,WAAW,gCAAgC,GAAG;AACnD,cAAM,mBAAmB,GAAG,QAAQ,kCAAkC,EAAE;AACxE,cAAM,YAAY,mBAAmB,gBAAgB;AAErD,YAAI,mBAAmB,SAAS,GAAG;AACjC,iBAAO,CAAC,4BAA4B,SAAS,MAAM,kBAAkB,SAAS,IAAI,EAAE,KAAK,IAAI;AAAA,QAC/F;AAEA,eAAO,CAAC,WAAW,SAAS,MAAM,2BAA2B,EAAE,KAAK,IAAI;AAAA,MAC1E;AAEA,UAAI,GAAG,WAAW,mCAAmC,GAAG;AACtD,cAAM,mBAAmB,GAAG,QAAQ,qCAAqC,EAAE;AAC3E,cAAM,YAAY,mBAAmB,gBAAgB;AAErD,eAAO,CAAC,4BAA4B,SAAS,MAAM,kBAAkB,SAAS,IAAI,EAAE,KAAK,IAAI;AAAA,MAC/F;AAAA,IACF;AAAA,IAEA,MAAM,aAAuC;AAC3C,mBAAa,QAAQ,CAAC,gBAAgB;AACpC,cAAM,aAAa,YAAY,SAAS,QAAQ;AAEhD,YAAI,YAAY;AACd,eAAK,aAAa,UAAU;AAAA,QAC9B;AAAA,MACF,CAAC;AAED,wBAAkB,QAAQ,CAAC,cAAc;AACvC,cAAM,kBAAkB,KAAK,SAAS;AAAA,UACpC,MAAM;AAAA,UACN,IAAI,kBAAkB,SAAS;AAAA,QACjC,CAAC;AAED,6BAAqB,IAAI,WAAW,eAAe;AAAA,MACrD,CAAC;AAED,YAAM,UAAU,QAAQ,aAAa,gBAAgB;AACrD,YAAM,aAAa,MAAM,+BAA+B,OAAO;AAE/D,iBAAW,QAAQ,CAAC,cAAc;AAChC,cAAM,kBAAkB,KAAK,SAAS;AAAA,UACpC,MAAM;AAAA,UACN,IAAI,qBAAqB,SAAS;AAAA,QACpC,CAAC;AAED,gCAAwB,IAAI,WAAW,eAAe;AAAA,MACxD,CAAC;AAAA,IACH;AAAA,IAEA,MAAM,cAAwC;AAC5C,YAAM,kBAAkB;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAEA,YAAM,UAAU,MAAM,oBAAoB,MAAM;AAEhD,UAAI,QAAQ,WAAW,GAAG;AACxB,cAAM,4BAA4B,QAAQ,CAAC,CAAC;AAE5C;AAAA,MACF;AAEA,YAAM,qBAAqB,MAAM,iBAAiB;AAAA,QAChD;AAAA,QACA;AAAA,QACA,cAAc,QAAQ;AAAA,QACtB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,YAAM,4BAA4B,QAAQ,kBAAkB;AAAA,IAC9D;AAAA,EACF;AACF;AAEA,eAAe,4BAA4B,QAAgB,SAAiC;AAC1F,QAAM,MAAM,QAAQ,EAAE,WAAW,KAAK,CAAC;AACvC,QAAM,UAAU,QAAQ,QAAQ,wBAAwB,GAAG,KAAK,UAAU,OAAO,GAAG,OAAO;AAC7F;AAEA,eAAe,iBAAiB,SAQ7B;AACD,QAAM,sBAAsB,2BAA2B,QAAQ,gBAAgB,MAAS;AACxF,QAAM,sBAAsB;AAAA,IAC1B,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,QAAM,aAAa,MAAM;AAAA,IACvB,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AACA,QAAM,oBAAoB,MAAM,sBAAsB,YAAY,QAAQ,wBAAwB;AAElG,MAAI;AACF,UAAM,YAAY,MAAM,eAAe,OAAO;AAAA,MAC5C,SAAS,OAAO,cAAc;AAC5B,cAAM,eAAe,uBAAuB,SAAS;AAErD,YAAI,cAAc;AAChB,iBAAO;AAAA,QACT;AAEA,cAAM,aAAa,oBAAoB,SAAS;AAEhD,YAAI,YAAY;AACd,iBAAO;AAAA,QACT;AAEA,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,UAAM,sBAAsB,WAAW,QAAQ,cAAc,qBAAqB,UAAU;AAE5F,UAAM,SAAiC,CAAC;AAExC,eAAW,SAAS,QAAQ,SAAS;AACnC,YAAM,gBAAgB,MAAM,iBAAiB;AAAA,QAC3C,cAAc;AAAA,QACd,gBAAgB,QAAQ;AAAA,QACxB,MAAM;AAAA,QACN,OAAO;AAAA,UACL,IAAI,MAAM;AAAA,UACV,OAAO,MAAM;AAAA,UACb,MAAM,MAAM;AAAA,QACd;AAAA,MACF,CAAC;AAED,YAAM,iBAAiB,cAAc,WAAW;AAEhD,UAAI,cAAc,YAAY,OAAO,GAAG;AACtC,mBAAW,YAAY,cAAc;AAAA,MACvC;AAEA,YAAM,OAAO,MAAM,qBAAqB,cAAc,aAAa,YAAY;AAC7E,cAAM,aAAa,kBAAkB,MAAM,YAAY,QAAQ,WAAW;AAC1E,cAAM,cAAc,MAAM,WAAW,cAAc,UAAU;AAC7D,cAAM,OAAO,SAAS,YAAY,OAAO,IAAI,YAAY,UAAU,CAAC;AACpE,cAAM,cAAc,SAAS,YAAY,MAAM,UAAU,CAAC,IAAI,YAAY,MAAM,UAAU,IAAI,CAAC;AAE/F,YAAI,OAAO,KAAK,cAAc,YAAY;AACxC,gBAAM,IAAI;AAAA,YACR,8BAA8B,MAAM,EAAE,0CAA0C,MAAM,UAAU;AAAA,UAClG;AAAA,QACF;AAEA,YAAI,YAAY,aAAa,YAAY,cAAc,KAAK,WAAW;AACrE,iBAAO;AAAA,QACT;AAEA,cAAM,aAAa,eAAe,SAAS,KAAK,IAAI,GAAG,SAAS,YAAY,IAAI,CAAC;AACjF,cAAM,EAAE,MAAM,MAAM,IAAI,cAAc,UAAU;AAChD,cAAM,gBAAgB,MAAM,qBAAqB,IAAI;AACrD,cAAM,mBAAmB;AAAA,UACvB;AAAA,YACE,MAAM;AAAA,YACN;AAAA,UACF;AAAA,UACA;AAAA,QACF;AAEA,eAAO,UAAU,eAAe,uBAAuB,KAAK,SAAS,GAAG;AAAA,UACtE,OAAO,iBAAiB;AAAA,UACxB,OAAO,iBAAiB;AAAA,QAC1B,CAAC;AAAA,MACH,CAAC;AAED,UAAI,SAAS,QAAW;AACtB,eAAO,MAAM,EAAE,IAAI;AAAA,MACrB;AAAA,IACF;AAEA,WAAO;AAAA,EACT,UAAE;AACA,UAAM,WAAW,MAAM;AAAA,EACzB;AACF;AAEA,eAAe,qBACb,cACA,mBACA,aACA;AACA,QAAM,EAAE,cAAc,IAAI,MAAM,kBAAkB,WAAW;AAC7D,QAAM,cAAc,MAAM;AAAA,IACxB,EAAE,MAAM,YAAY;AAAA,IACpB;AAAA,MACE,YAAY;AAAA,MACZ,cAAc,MAAM,QAAQ;AAAA,QAC1B,aAAa,IAAI,CAAC,gBAAgB,YAAY,gBAAgB,WAAW,CAAC;AAAA,MAC5E;AAAA,IACF;AAAA,EACF,EAAE;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,EACX,CAAC;AAED,QAAM,SAAS,YAAY,aAAa;AAAA,IACtC,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,gBAAgB;AAAA,IAClB;AAAA,IACA,SAAS;AAAA,MACP,mCAAmC,WAAW;AAAA,MAC9C,6BAA6B;AAAA,MAC7B,2BAA2B;AAAA,MAC3B,8BAA8B;AAAA,MAC9B;AAAA,QACE,MAAM;AAAA,QACN,UAAU,IAAY;AACpB,cAAI,kBAAkB,IAAI,EAAE,GAAG;AAC7B,mBAAO,2CAA2C,mBAAmB,EAAE,CAAC;AAAA,UAC1E;AAAA,QACF;AAAA,QACA,KAAK,IAAY;AACf,cAAI,GAAG,WAAW,0CAA0C,GAAG;AAC7D,mBAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,aAAa,MAAM;AAC5B;AAEA,eAAe,sBACb,YACA,gBACA;AACA,MAAI,CAAC,gBAAgB;AACnB,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,MAAM,4BAA4B,YAAY,gBAAgB;AAAA,MACnE,eAAe;AAAA,IACjB,CAAC;AAAA,EACH,SAAS,OAAO;AACd,UAAM,SAAS,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAEpE,UAAM,IAAI;AAAA,MACR,gEAAgE,cAAc,KAAK,MAAM;AAAA,IAC3F;AAAA,EACF;AACF;AAEA,eAAe,sBACb,WACA,cACA,qBACA,YACA;AACA,aAAW,eAAe,cAAc;AACtC,UAAM,iBAAiB,YAAY,SAAS;AAE5C,QAAI,gBAAgB;AAClB,YAAM,uBAAuB,MAAM,WAAW,cAAc,eAAe,UAAU;AACrF,YAAM,WAAW,qBAAqB,WAAW;AAEjD,UAAI,YAAY,SAAS,WAAW,SAAS,QAAQ,GAAG;AACtD,kBAAU,kBAAkB;AAAA,UAC1B,MAAM,eAAe;AAAA,UACrB,UAAU;AAAA,YACR,GAAG;AAAA,YACH,MAAM,eAAe;AAAA,UACvB;AAAA,QACF,CAAC;AAAA,MACH,OAAO;AACL,kBAAU,kBAAkB;AAAA,UAC1B,MAAM,eAAe;AAAA,UACrB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,UAAM,iBAAiB,YAAY,SAAS;AAE5C,QAAI,gBAAgB;AAClB,YAAM,qBACJ,oBAAoB,eAAe,UAAU,KAAK,eAAe;AAEnE,gBAAU,kBAAkB;AAAA,QAC1B,MAAM,eAAe;AAAA,QACrB,YAAY;AAAA,MACd,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,2BACP,cACA,iBACA;AACA,SAAO,SAAS,oBAAoB,WAAmB;AACrD,QAAI,OAAO,OAAO,iBAAiB,SAAS,GAAG;AAC7C,aAAO,gBAAgB,SAAS;AAAA,IAClC;AAEA,UAAM,sBAAsB,UAAU,QAAQ,OAAO,GAAG,EAAE,QAAQ,SAAS,EAAE;AAE7E,QAAI,OAAO,OAAO,iBAAiB,mBAAmB,GAAG;AACvD,aAAO,gBAAgB,mBAAmB;AAAA,IAC5C;AAEA,eAAW,eAAe,cAAc;AACtC,YAAM,aAAa,YAAY,cAAc,SAAS;AAEtD,UAAI,YAAY;AACd,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;AAEA,eAAe,oBAAoB,QAAuC;AACxE,QAAM,YAAY,QAAQ,QAAQ,YAAY;AAC9C,QAAM,WAAW,MAAM,SAAS,WAAW,OAAO;AAClD,QAAM,YAAY,KAAK,MAAM,QAAQ;AAErC,SAAO,OAAO,OAAO,UAAU,WAAW,CAAC,CAAC,EACzC,OAAO,CAAC,UAAU,MAAM,SAAS,WAAW,MAAM,eAAe,SAAS,QAAQ,CAAC,EACnF,IAAI,CAAC,UAAU;AACd,QAAI,CAAC,MAAM,MAAM,CAAC,MAAM,cAAc,CAAC,MAAM,YAAY;AACvD,YAAM,IAAI,MAAM,mDAAmD,SAAS,GAAG;AAAA,IACjF;AAEA,WAAO;AAAA,MACL,IAAI,MAAM;AAAA,MACV,YAAY,MAAM;AAAA,MAClB,YAAY,MAAM;AAAA,MAClB,OAAO,MAAM;AAAA,MACb,MAAM,MAAM;AAAA,IACd;AAAA,EACF,CAAC;AACL;AAEA,SAAS,eACP,UACA,WACA;AACA,SAAO;AAAA,IACL,GAAI,YAAY,CAAC;AAAA,IACjB,GAAI,aAAa,CAAC;AAAA,EACpB;AACF;AAEA,SAAS,cAAc,WAAoC;AACzD,QAAM,OAAO,EAAE,GAAG,UAAU;AAC5B,QAAM,iBAAiB,KAAK;AAE5B,SAAO,KAAK;AAEZ,MAAI,CAAC,SAAS,cAAc,GAAG;AAC7B,WAAO;AAAA,MACL;AAAA,MACA,OAAO,CAAC;AAAA,IACV;AAAA,EACF;AAEA,SAAO;AAAA,IACL;AAAA,IACA,OAAO;AAAA,EACT;AACF;AAEA,SAAS,kBAAkB,YAAoB,aAAqB;AAClE,MAAI,WAAW,WAAW,IAAI,GAAG;AAC/B,WAAO,QAAQ,aAAa,WAAW,MAAM,CAAC,CAAC;AAAA,EACjD;AAEA,SAAO,QAAQ,aAAa,UAAU;AACxC;AAEA,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU;AAChD;AAEA,SAAS,SAAS,OAAqD;AACrE,MAAI,CAAC,SAAS,KAAK,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,yBAAyB,cAA6B;AAC7D,QAAM,aAAa,oBAAI,IAAY,CAAC,yBAAyB,mCAAmC,CAAC;AAEjG,eAAa,QAAQ,CAAC,gBAAgB;AACpC,UAAM,aAAa,YAAY,SAAS,QAAQ;AAEhD,QAAI,YAAY;AACd,iBAAW,IAAI,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,qBACP,eACA,sBACA,yBACA;AACA,QAAM,MAA8B,CAAC;AAErC,uBAAqB,QAAQ,CAAC,iBAAiB,cAAc;AAC3D,UAAM,WAAW,cAAc,YAAY,eAAe;AAE1D,QAAI,UAAU;AACZ,UAAI,SAAS,IAAI,aAAa,QAAQ;AAAA,IACxC;AAAA,EACF,CAAC;AAED,0BAAwB,QAAQ,CAAC,iBAAiB,cAAc;AAC9D,UAAM,WAAW,cAAc,YAAY,eAAe;AAE1D,QAAI,UAAU;AACZ,UAAI,SAAS,IAAI,aAAa,QAAQ;AAAA,IACxC;AAAA,EACF,CAAC;AAED,SAAO;AACT;AAEA,SAAS,kBAAkB,WAAmB;AAC5C,SAAO,+BAA+B,mBAAmB,SAAS,CAAC;AACrE;AAEA,SAAS,qBAAqB,WAAmB;AAC/C,SAAO,kCAAkC,mBAAmB,SAAS,CAAC;AACxE;AAEA,SAAS,mBAAmB,WAAmB;AAC7C,SAAO,UAAU,WAAW,WAAW,KAAK,UAAU,SAAS,YAAY;AAC7E;AAEA,SAAS,aAAa,UAAkB;AACtC,SAAO,KAAK,QAAQ;AACtB;AAEA,eAAe,+BAA+B,SAAoC;AAChF,QAAM,UAAoB,CAAC;AAE3B,iBAAe,KAAK,WAAmB;AACrC,QAAI;AAEJ,QAAI;AACF,gBAAU,MAAM,QAAQ,WAAW,EAAE,eAAe,KAAK,CAAC;AAAA,IAC5D,QAAQ;AACN;AAAA,IACF;AAEA,UAAM,QAAQ;AAAA,MACZ,QAAQ,IAAI,OAAO,UAAU;AAC3B,cAAM,eAAe,QAAQ,WAAW,MAAM,IAAI;AAElD,YAAI,MAAM,YAAY,GAAG;AACvB,gBAAM,KAAK,YAAY;AAEvB;AAAA,QACF;AAEA,YAAI,CAAC,MAAM,OAAO,GAAG;AACnB;AAAA,QACF;AAEA,cAAM,iBAAiB,aAAa,QAAQ,OAAO,GAAG;AAEtD,YAAI,CAAC,uBAAuB,cAAc,GAAG;AAC3C;AAAA,QACF;AAEA,YAAI,0BAA0B,cAAc,GAAG;AAC7C;AAAA,QACF;AAEA,gBAAQ,KAAK,cAAc;AAAA,MAC7B,CAAC;AAAA,IACH;AAAA,EACF;AAEA,QAAM,KAAK,OAAO;AAElB,SAAO;AACT;AAEA,SAAS,uBAAuB,OAAe;AAC7C,SAAO,gCAAgC,KAAK,KAAK;AACnD;AAEA,SAAS,0BAA0B,OAAe;AAChD,SAAO,iFAAiF;AAAA,IACtF;AAAA,EACF;AACF;AAEA,SAAS,uBAAuB,WAA2C;AACzE,MAAI,OAAO,cAAc,YAAY;AACnC,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,QAAM,oBAAoB;AAC1B,QAAM,WAAW,CAAC,QAA2B,OAAgB,UAAmB;AAC9E,QAAI,UAAU,OAAO,OAAO,gBAAgB,YAAY;AACtD,YAAM,sBAAsB,OAAO;AACnC,YAAM,4BAA4B,oBAAoB,UAAU;AAEhE,aAAO,cAAc,IAAI,SAAoB;AAC3C,YAAI,KAAK,WAAW,KAAK,CAAC,2BAA2B;AACnD,iBAAO,oBAAoB,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,QAC7C;AAEA,eAAO,oBAAoB,GAAG,IAAI;AAAA,MACpC;AAAA,IACF;AAEA,WAAO,kBAAkB,QAAQ,OAAO,KAAK;AAAA,EAC/C;AAEA,UAAQ,0BAA0B,kBAAkB;AACpD,UAAQ,WAAW,kBAAkB;AACrC,UAAQ,cAAc,kBAAkB;AAExC,SAAO;AACT;AAEA,eAAe,qBACb,MACkC;AAClC,QAAM,YAAqC,CAAC;AAE5C,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,IAAI,GAAG;AAC/C,QAAI,gBAAgB,KAAK,GAAG;AAC1B,gBAAU,GAAG,IAAI,0BAA0B,KAAK;AAEhD;AAAA,IACF;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,gBAAU,GAAG,IAAI,MAAM,QAAQ;AAAA,QAC7B,MAAM,IAAI,OAAO,SAAS;AACxB,cAAI,gBAAgB,IAAI,GAAG;AACzB,mBAAO,0BAA0B,IAAI;AAAA,UACvC;AAEA,cAAI,SAAS,IAAI,GAAG;AAClB,mBAAO,qBAAqB,IAAI;AAAA,UAClC;AAEA,iBAAO;AAAA,QACT,CAAC;AAAA,MACH;AAEA;AAAA,IACF;AAEA,QAAI,SAAS,KAAK,GAAG;AACnB,gBAAU,GAAG,IAAI,MAAM,qBAAqB,KAAK;AAEjD;AAAA,IACF;AAEA,cAAU,GAAG,IAAI;AAAA,EACnB;AAEA,SAAO;AACT;AAEA,SAAS,gBAAgB,OAAkD;AACzE,SACE,SAAS,KAAK,KACd,OAAO,MAAM,QAAQ,aACpB,WAAW,SAAS,YAAY,SAAS,YAAY;AAE1D;AAEA,SAAS,0BAA0B,eAAgD;AACjF,QAAM,MAAM,cAAc;AAC1B,QAAM,SAAS,cAAc;AAE7B,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO;AAAA,EACT;AAEA,MAAI,OAAO,WAAW,UAAU;AAC9B,WAAO;AAAA,EACT;AAEA,SAAO,OAAO,aAAa;AAC7B;AAEA,SAAS,mCAAmC,aAA6B;AACvE,QAAMA,WAAU,cAAc,YAAY,GAAG;AAE7C,SAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU,IAAY;AACpB,UAAI,OAAO,WAAW,CAAC,GAAG,WAAW,QAAQ,GAAG;AAC9C,eAAO;AAAA,MACT;AAEA,UAAI;AACF,eAAOA,SAAQ,QAAQ,IAAI;AAAA,UACzB,OAAO,CAAC,WAAW;AAAA,QACrB,CAAC;AAAA,MACH,QAAQ;AACN,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;;;ACzsBA,SAAS,eAAAC,oBAAsC;AAI/C,IAAM,4DAA4D;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,eAAsB,qBACpB,QACA,eAA8B,CAAC,GAC/B,cAAc,QAAQ,IAAI,GAC1B,OAAO,eACP,UAA6B,SAC7B;AACA,QAAM,EAAE,cAAc,IAAI,MAAM,kBAAkB,WAAW;AAC7D,QAAM,mBAAmB,gBAAgB,CAAC;AAE1C,QAAM,cAAc,MAAM;AAAA,IACxB,CAAC;AAAA,IACD;AAAA,MACE,YAAY;AAAA,MACZ,cAAc,MAAM,QAAQ;AAAA,QAC1B,iBAAiB,IAAI,CAAC,gBAAgB,YAAY,gBAAgB,WAAW,CAAC;AAAA,MAChF;AAAA,IACF;AAAA,EACF,EAAE;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,kBAAkB,YACrB,QAAS,KAAK,EACd;AAAA,IACC,CAAC,WACC,UACA,UAAU,UACV,CAAC,0DAA0D,SAAS,OAAO,IAAI;AAAA,EACnF;AAEF,SAAOC,aAAY,QAAQ;AAAA,IACzB,GAAG;AAAA,IACH,SAAS;AAAA,EACX,CAAC;AACH;;;ACzDO,IAAM,OAAO;AAAA,EAClB,SAAS;AAAA,EACT,UAAU;AACZ;AAEO,IAAM,YAA8C,OAAO,QAAQ,EAAE,YAAY,QAAQ,MAAM;AACpG,QAAM,UAAU,MAAM,QAAQ,MAAwB,kBAAkB;AACxE,QAAM,EAAE,YAAY,gCAAgC,WAAW,IAC7D,MAAM,mCAAmC,OAAO;AAElD,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,UAAU,CAAC;AAAA,EACpB;AAEA,QAAM,eAAe,QAAQ,gBAAgB,CAAC;AAC9C,QAAM,cAAc,QAAQ,eAAe,QAAQ,IAAI;AACvD,QAAM,OAAO,eAAe,gBAAgB,gBAAgB;AAC5D,QAAM,UAAU,eAAe,gBAAgB,UAAU;AAEzD,6BAA2B,QAAQ,YAAY;AAE/C,SAAO,QAAQ;AAAA,IACb;AAAA,IACA,oCAAoC,YAAY;AAAA;AAAA,IAEhD,+BAA+B;AAAA;AAAA,IAE/B,8BAA8B,OAAO;AAAA,IACrC,2BAA2B;AAAA,IAC3B,GAAG,WAAW;AAAA,EAChB;AAGA,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,UAAU,CAAC;AAAA,EACpB;AACA,MAAI,CAAC,OAAO,QAAQ,OAAO;AACzB,WAAO,QAAQ,QAAQ,CAAC;AAAA,EAC1B;AAGA,QAAM,UAAU,OAAO,QAAQ;AAE/B,MAAI,CAAC,QAAQ,OAAO,GAAG;AACrB,YAAQ,OAAO,IAAI;AAAA,EACrB;AACA,MAAI,CAAC,QAAQ,WAAW,GAAG;AACzB,YAAQ,WAAW,IAAI;AAAA,EACzB;AAEA,QAAM,cAAc,MAAM,qBAAqB,QAAQ,cAAc,aAAa,MAAM,OAAO;AAK/F,MAAI,CAAC,YAAY,cAAc;AAC7B,gBAAY,eAAe,CAAC;AAAA,EAC9B;AACA,MAAI,CAAC,YAAY,aAAa,SAAS;AACrC,gBAAY,aAAa,UAAU,CAAC;AAAA,EACtC;AACA,MAAI,CAAC,YAAY,aAAa,QAAQ,SAAS,cAAc,GAAG;AAC9D,gBAAY,aAAa,QAAQ,KAAK,cAAc;AAAA,EACtD;AAOA,MAAI,CAAC,YAAY,aAAa,QAAQ,SAAS,2BAA2B,GAAG;AAC3E,gBAAY,aAAa,QAAQ,KAAK,2BAA2B;AAAA,EACnE;AAEA,MAAI,CAAC,YAAY,aAAa,gBAAgB;AAC5C,gBAAY,aAAa,iBAAiB,CAAC;AAAA,EAC7C;AACA,MAAI,CAAC,YAAY,aAAa,eAAe,UAAU;AACrD,gBAAY,aAAa,eAAe,WAAW,CAAC;AAAA,EACtD;AACA,QAAM,oBAAoB,CAAC,4BAA4B,uBAAuB;AAE9E,aAAW,OAAO,mBAAmB;AACnC,QAAI,CAAC,YAAY,aAAa,eAAe,SAAS,SAAS,GAAG,GAAG;AACnE,kBAAY,aAAa,eAAe,SAAS,KAAK,GAAG;AAAA,IAC3D;AAAA,EACF;AAEA,SAAO;AACT;","names":["require","mergeConfig","mergeConfig"]}
@@ -0,0 +1,240 @@
1
+ // src/integrations/moduleResolver.ts
2
+ import path from "path";
3
+ import { createRequire } from "module";
4
+ import { pathToFileURL } from "url";
5
+ function toFileHref(filePath) {
6
+ return pathToFileURL(filePath).href;
7
+ }
8
+ function resolveFrom(moduleName, fromDirectory) {
9
+ const fromFile = path.join(fromDirectory, "__storybook_astro_resolve__.js");
10
+ return createRequire(toFileHref(fromFile)).resolve(moduleName);
11
+ }
12
+ function resolveFromCandidates(moduleName, primaryDirectory) {
13
+ const directories = [primaryDirectory, process.env.INIT_CWD].filter(
14
+ (value) => Boolean(value)
15
+ );
16
+ const visited = /* @__PURE__ */ new Set();
17
+ let lastError;
18
+ for (const directory of directories) {
19
+ if (visited.has(directory)) {
20
+ continue;
21
+ }
22
+ visited.add(directory);
23
+ try {
24
+ return resolveFrom(moduleName, directory);
25
+ } catch (error) {
26
+ lastError = error;
27
+ }
28
+ }
29
+ throw lastError;
30
+ }
31
+ async function importModule(moduleName, resolveFrom2 = process.cwd()) {
32
+ const resolvedPath = resolveFromCandidates(moduleName, resolveFrom2);
33
+ return import(toFileHref(resolvedPath));
34
+ }
35
+
36
+ // src/integrations/alpine.ts
37
+ var AlpineIntegration = class {
38
+ name = "alpine";
39
+ dependencies = [
40
+ "@astrojs/alpinejs",
41
+ "alpinejs"
42
+ ];
43
+ options;
44
+ renderer = {};
45
+ constructor(options = {}) {
46
+ this.options = options;
47
+ }
48
+ resolveClient(_moduleName) {
49
+ }
50
+ async loadIntegration(resolveFrom2 = process.cwd()) {
51
+ const framework = await importModule("@astrojs/alpinejs", resolveFrom2);
52
+ return framework.default(this.options);
53
+ }
54
+ };
55
+
56
+ // src/integrations/preact.ts
57
+ var PreactIntegration = class {
58
+ name = "preact";
59
+ dependencies = ["@astrojs/preact", "@storybook/preact-vite", "preact"];
60
+ options;
61
+ storybookEntryPreview = "@storybook/preact/entry-preview";
62
+ renderer = {
63
+ server: {
64
+ name: "@astrojs/preact",
65
+ entrypoint: "@astrojs/preact/server.js"
66
+ },
67
+ client: {
68
+ name: "@astrojs/preact",
69
+ entrypoint: "@astrojs/preact/client.js"
70
+ }
71
+ };
72
+ constructor(options = {}) {
73
+ this.options = options;
74
+ }
75
+ resolveClient(moduleName) {
76
+ if (moduleName.startsWith("@astrojs/preact/client")) {
77
+ return `/@id/${moduleName}`;
78
+ }
79
+ }
80
+ async loadIntegration(resolveFrom2 = process.cwd()) {
81
+ const framework = await importModule("@astrojs/preact", resolveFrom2);
82
+ return framework.default(this.options);
83
+ }
84
+ };
85
+
86
+ // src/integrations/react.ts
87
+ var ReactIntegration = class {
88
+ name = "react";
89
+ dependencies = ["@astrojs/react", "@storybook/react", "react", "react-dom"];
90
+ options;
91
+ storybookEntryPreview = "@storybook/react/entry-preview";
92
+ renderer = {
93
+ server: {
94
+ name: "@astrojs/react",
95
+ entrypoint: "@astrojs/react/server.js"
96
+ },
97
+ client: {
98
+ name: "@astrojs/react",
99
+ entrypoint: "@astrojs/react/client.js"
100
+ }
101
+ };
102
+ constructor(options = {}) {
103
+ this.options = options;
104
+ }
105
+ resolveClient(moduleName) {
106
+ if (moduleName.startsWith("@astrojs/react/client")) {
107
+ return `/@id/${moduleName}`;
108
+ }
109
+ }
110
+ async loadIntegration(resolveFrom2 = process.cwd()) {
111
+ const framework = await importModule("@astrojs/react", resolveFrom2);
112
+ return framework.default(this.options);
113
+ }
114
+ };
115
+
116
+ // src/integrations/solid.ts
117
+ var SolidIntegration = class {
118
+ name = "solid";
119
+ dependencies = ["@astrojs/solid-js", "storybook-solidjs-vite", "solid-js"];
120
+ options;
121
+ storybookEntryPreview = "storybook-solidjs-vite/renderer/entry-preview";
122
+ renderer = {
123
+ server: {
124
+ name: "@astrojs/solid-js",
125
+ entrypoint: "@astrojs/solid-js/server.js"
126
+ },
127
+ client: {
128
+ name: "@astrojs/solid-js",
129
+ entrypoint: "@astrojs/solid-js/client.js"
130
+ }
131
+ };
132
+ constructor(options = {}) {
133
+ this.options = options;
134
+ }
135
+ resolveClient(moduleName) {
136
+ if (moduleName.startsWith("@astrojs/solid-js/client")) {
137
+ return `/@id/${moduleName}`;
138
+ }
139
+ }
140
+ async loadIntegration(resolveFrom2 = process.cwd()) {
141
+ const framework = await importModule("@astrojs/solid-js", resolveFrom2);
142
+ return framework.default(this.options);
143
+ }
144
+ };
145
+
146
+ // src/integrations/svelte.ts
147
+ var DEFAULT_OPTIONS = {
148
+ extensions: [".svelte"]
149
+ };
150
+ var SvelteIntegration = class {
151
+ name = "svelte";
152
+ dependencies = ["@astrojs/svelte", "@storybook/svelte", "svelte"];
153
+ options;
154
+ storybookEntryPreview = "@storybook/svelte/entry-preview";
155
+ renderer = {
156
+ server: {
157
+ entrypoint: "@astrojs/svelte/server.js",
158
+ name: "@astrojs/svelte"
159
+ },
160
+ client: {
161
+ name: "@astrojs/svelte",
162
+ entrypoint: "@astrojs/svelte/client.js"
163
+ }
164
+ };
165
+ constructor(options = DEFAULT_OPTIONS) {
166
+ this.options = options;
167
+ }
168
+ resolveClient(moduleName) {
169
+ if (moduleName.startsWith("@astrojs/svelte/client")) {
170
+ return `/@id/${moduleName}`;
171
+ }
172
+ }
173
+ async loadIntegration(resolveFrom2 = process.cwd()) {
174
+ const framework = await importModule("@astrojs/svelte", resolveFrom2);
175
+ return framework.default(this.options);
176
+ }
177
+ };
178
+
179
+ // src/integrations/vue.ts
180
+ var DEFAULT_OPTIONS2 = {
181
+ include: ["**/*.vue"]
182
+ };
183
+ var VueIntegration = class {
184
+ name = "vue";
185
+ dependencies = ["@astrojs/vue", "@storybook/vue3", "vue"];
186
+ options;
187
+ storybookEntryPreview = "@storybook/vue3/entry-preview";
188
+ renderer = {
189
+ server: {
190
+ name: "@astrojs/vue",
191
+ entrypoint: "@astrojs/vue/server.js"
192
+ },
193
+ client: {
194
+ name: "@astrojs/vue",
195
+ entrypoint: "@astrojs/vue/client.js"
196
+ }
197
+ };
198
+ constructor(options = DEFAULT_OPTIONS2) {
199
+ this.options = options;
200
+ }
201
+ resolveClient(moduleName) {
202
+ if (moduleName.startsWith("@astrojs/vue/client")) {
203
+ return `/@id/${moduleName}`;
204
+ }
205
+ }
206
+ async loadIntegration(resolveFrom2 = process.cwd()) {
207
+ const framework = await importModule("@astrojs/vue", resolveFrom2);
208
+ return framework.default(this.options);
209
+ }
210
+ };
211
+
212
+ // src/integrations/index.ts
213
+ function alpinejs(options) {
214
+ return new AlpineIntegration(options);
215
+ }
216
+ function preact(options) {
217
+ return new PreactIntegration(options);
218
+ }
219
+ function react(options) {
220
+ return new ReactIntegration(options);
221
+ }
222
+ function solid(options) {
223
+ return new SolidIntegration(options);
224
+ }
225
+ function svelte(options) {
226
+ return new SvelteIntegration(options);
227
+ }
228
+ function vue(options) {
229
+ return new VueIntegration(options);
230
+ }
231
+
232
+ export {
233
+ alpinejs,
234
+ preact,
235
+ react,
236
+ solid,
237
+ svelte,
238
+ vue
239
+ };
240
+ //# sourceMappingURL=chunk-PJEDXZVN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/integrations/moduleResolver.ts","../src/integrations/alpine.ts","../src/integrations/preact.ts","../src/integrations/react.ts","../src/integrations/solid.ts","../src/integrations/svelte.ts","../src/integrations/vue.ts","../src/integrations/index.ts"],"sourcesContent":["import path from 'node:path';\nimport { createRequire } from 'node:module';\nimport { pathToFileURL } from 'node:url';\n\nfunction toFileHref(filePath: string): string {\n return pathToFileURL(filePath).href;\n}\n\nexport function resolveFrom(moduleName: string, fromDirectory: string): string {\n const fromFile = path.join(fromDirectory, '__storybook_astro_resolve__.js');\n\n return createRequire(toFileHref(fromFile)).resolve(moduleName);\n}\n\nfunction resolveFromCandidates(moduleName: string, primaryDirectory: string): string {\n const directories = [primaryDirectory, process.env.INIT_CWD].filter(\n (value): value is string => Boolean(value)\n );\n const visited = new Set<string>();\n let lastError: unknown;\n\n for (const directory of directories) {\n if (visited.has(directory)) {\n continue;\n }\n\n visited.add(directory);\n\n try {\n return resolveFrom(moduleName, directory);\n } catch (error) {\n lastError = error;\n }\n }\n\n throw lastError;\n}\n\nexport async function importModule<T = unknown>(moduleName: string, resolveFrom = process.cwd()): Promise<T> {\n const resolvedPath = resolveFromCandidates(moduleName, resolveFrom);\n\n return import(toFileHref(resolvedPath)) as Promise<T>;\n}\n","import type { Integration } from './base.ts';\nimport { importModule } from './moduleResolver.ts';\n\nexport type Options = Record<string, unknown>;\n\nexport class AlpineIntegration implements Integration {\n readonly name = 'alpine';\n readonly dependencies = [\n '@astrojs/alpinejs',\n 'alpinejs'\n ];\n readonly options: Options;\n readonly renderer = {};\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(_moduleName: string): undefined {}\n\n async loadIntegration(resolveFrom = process.cwd()) {\n const framework = await importModule<{\n default: (options: Options) => Awaited<ReturnType<Integration['loadIntegration']>>;\n }>('@astrojs/alpinejs', resolveFrom);\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { PreactPluginOptions } from '@preact/preset-vite';\nimport { importModule } from './moduleResolver.ts';\n\nexport type Options = Pick<PreactPluginOptions, 'include' | 'exclude'> & {\n compat?: boolean;\n devtools?: boolean;\n};\n\nexport class PreactIntegration implements Integration {\n readonly name = 'preact';\n readonly dependencies = ['@astrojs/preact', '@storybook/preact-vite', 'preact'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/preact/entry-preview';\n \n readonly renderer = {\n server: {\n name: '@astrojs/preact',\n entrypoint: '@astrojs/preact/server.js'\n },\n client: {\n name: '@astrojs/preact',\n entrypoint: '@astrojs/preact/client.js'\n }\n };\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/preact/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration(resolveFrom = process.cwd()) {\n const framework = await importModule<{\n default: (options: Options) => Awaited<ReturnType<Integration['loadIntegration']>>;\n }>('@astrojs/preact', resolveFrom);\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as ViteReactPluginOptions } from '@vitejs/plugin-react';\nimport { importModule } from './moduleResolver.ts';\n\nexport type Options = Pick<ViteReactPluginOptions, 'include' | 'exclude'>;\n\nexport class ReactIntegration implements Integration {\n readonly name = 'react';\n readonly dependencies = ['@astrojs/react', '@storybook/react', 'react', 'react-dom'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/react/entry-preview';\n\n readonly renderer = {\n server: {\n name: '@astrojs/react',\n entrypoint: '@astrojs/react/server.js'\n },\n client: {\n name: '@astrojs/react',\n entrypoint: '@astrojs/react/client.js'\n }\n };\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/react/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration(resolveFrom = process.cwd()) {\n const framework = await importModule<{\n default: (options: Options) => Awaited<ReturnType<Integration['loadIntegration']>>;\n }>('@astrojs/react', resolveFrom);\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as ViteSolidPluginOptions } from 'vite-plugin-solid';\nimport { importModule } from './moduleResolver.ts';\n\nexport type Options = Pick<ViteSolidPluginOptions, 'include' | 'exclude'>;\n\nexport class SolidIntegration implements Integration {\n readonly name = 'solid';\n readonly dependencies = ['@astrojs/solid-js', 'storybook-solidjs-vite', 'solid-js'];\n readonly options: Options;\n readonly storybookEntryPreview = 'storybook-solidjs-vite/renderer/entry-preview';\n readonly renderer = {\n server: {\n name: '@astrojs/solid-js',\n entrypoint: '@astrojs/solid-js/server.js'\n },\n client: {\n name: '@astrojs/solid-js',\n entrypoint: '@astrojs/solid-js/client.js'\n }\n };\n\n constructor(options: Options = {}) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/solid-js/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration(resolveFrom = process.cwd()) {\n const framework = await importModule<{\n default: (options: Options) => Awaited<ReturnType<Integration['loadIntegration']>>;\n }>('@astrojs/solid-js', resolveFrom);\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as _foo, PluginOptions, SvelteConfig } from '@sveltejs/vite-plugin-svelte';\nimport { importModule } from './moduleResolver.ts';\n\n// Using Omit with empty string to preserve index signature\n// capabilities while maintaining the structure of the original types\nexport type Options = Omit<PluginOptions, ''> & Omit<SvelteConfig, 'vitePlugin'>;\n\nconst DEFAULT_OPTIONS: Options = {\n extensions: ['.svelte']\n};\n\nexport class SvelteIntegration implements Integration {\n readonly name = 'svelte';\n readonly dependencies = ['@astrojs/svelte', '@storybook/svelte', 'svelte'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/svelte/entry-preview';\n readonly renderer = {\n server: {\n entrypoint: '@astrojs/svelte/server.js',\n name: '@astrojs/svelte'\n },\n client: {\n name: '@astrojs/svelte',\n entrypoint: '@astrojs/svelte/client.js'\n }\n };\n\n constructor(options: Options = DEFAULT_OPTIONS) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/svelte/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration(resolveFrom = process.cwd()) {\n const framework = await importModule<{\n default: (options: Options) => Awaited<ReturnType<Integration['loadIntegration']>>;\n }>('@astrojs/svelte', resolveFrom);\n\n return framework.default(this.options);\n }\n}\n","import type { Integration } from './base.ts';\nimport type { Options as VueOptions } from '@vitejs/plugin-vue';\nimport type { Options as VueJsxOptions } from '@vitejs/plugin-vue-jsx';\nimport { importModule } from './moduleResolver.ts';\n\nexport type Options = Pick<VueOptions, 'include' | 'exclude'> & {\n jsx?: boolean | VueJsxOptions;\n};\n\nconst DEFAULT_OPTIONS: Options = {\n include: ['**/*.vue']\n};\n\nexport class VueIntegration implements Integration {\n readonly name = 'vue';\n readonly dependencies = ['@astrojs/vue', '@storybook/vue3', 'vue'];\n readonly options: Options;\n readonly storybookEntryPreview = '@storybook/vue3/entry-preview';\n\n readonly renderer = {\n server: {\n name: '@astrojs/vue',\n entrypoint: '@astrojs/vue/server.js'\n },\n client: {\n name: '@astrojs/vue',\n entrypoint: '@astrojs/vue/client.js'\n }\n };\n\n constructor(options: Options = DEFAULT_OPTIONS) {\n this.options = options;\n }\n\n resolveClient(moduleName: string): string | undefined {\n if (moduleName.startsWith('@astrojs/vue/client')) {\n return `/@id/${moduleName}`;\n }\n }\n\n async loadIntegration(resolveFrom = process.cwd()) {\n const framework = await importModule<{\n default: (options: Options) => Awaited<ReturnType<Integration['loadIntegration']>>;\n }>('@astrojs/vue', resolveFrom);\n\n return framework.default(this.options);\n }\n}\n","import { AlpineIntegration, type Options as AlpineOptions } from './alpine.ts';\nimport { PreactIntegration, type Options as PreactOptions } from './preact.ts';\nimport { ReactIntegration, type Options as ReactOptions } from './react.ts';\nimport { SolidIntegration, type Options as SolidOptions } from './solid.ts';\nimport { SvelteIntegration, type Options as SvelteOptions } from './svelte.ts';\nimport { VueIntegration, type Options as VueOptions } from './vue.ts';\n\n\nexport function alpinejs(options?: AlpineOptions) {\n return new AlpineIntegration(options);\n}\n\nexport function preact(options?: PreactOptions) {\n return new PreactIntegration(options);\n}\n\nexport function react(options?: ReactOptions) {\n return new ReactIntegration(options);\n}\n\nexport function solid(options?: SolidOptions) {\n return new SolidIntegration(options);\n}\n\nexport function svelte(options?: SvelteOptions) {\n return new SvelteIntegration(options);\n}\n\nexport function vue(options?: VueOptions) {\n return new VueIntegration(options);\n}\n\nexport type { Integration } from './base.ts';\n"],"mappings":"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","names":["resolveFrom","resolveFrom","resolveFrom","resolveFrom","resolveFrom","resolveFrom","DEFAULT_OPTIONS","resolveFrom"]}