@storybook-astro/framework 0.1.0-beta.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 (38) hide show
  1. package/dist/chunk-G3PMV62Z.js +36 -0
  2. package/dist/chunk-G3PMV62Z.js.map +1 -0
  3. package/dist/chunk-LLYYQI75.js +555 -0
  4. package/dist/chunk-LLYYQI75.js.map +1 -0
  5. package/dist/index.js +76 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/integrations/index.js +206 -0
  8. package/dist/integrations/index.js.map +1 -0
  9. package/dist/magic-string.es-T6PTLUGX.js +1309 -0
  10. package/dist/magic-string.es-T6PTLUGX.js.map +1 -0
  11. package/dist/preset.js +10 -0
  12. package/dist/preset.js.map +1 -0
  13. package/dist/testing.js +15620 -0
  14. package/dist/testing.js.map +1 -0
  15. package/package.json +148 -0
  16. package/preset.ts +1 -0
  17. package/src/index.ts +21 -0
  18. package/src/integrations/alpine.ts +25 -0
  19. package/src/integrations/base.ts +23 -0
  20. package/src/integrations/index.ts +33 -0
  21. package/src/integrations/preact.ts +41 -0
  22. package/src/integrations/react.ts +38 -0
  23. package/src/integrations/solid.ts +37 -0
  24. package/src/integrations/svelte.ts +43 -0
  25. package/src/integrations/vue.ts +45 -0
  26. package/src/middleware.ts +148 -0
  27. package/src/portable-stories.ts +185 -0
  28. package/src/preset.ts +53 -0
  29. package/src/testing.ts +254 -0
  30. package/src/types.ts +25 -0
  31. package/src/virtual.d.ts +7 -0
  32. package/src/viteAstroContainerRenderersPlugin.ts +84 -0
  33. package/src/vitePluginAstro.ts +59 -0
  34. package/src/vitePluginAstroBuildPrerender.ts +252 -0
  35. package/src/vitePluginAstroComponentMarker.ts +145 -0
  36. package/src/vitePluginAstroFontsFallback.ts +69 -0
  37. package/src/viteStorybookAstroMiddlewarePlugin.ts +123 -0
  38. package/src/viteStorybookRendererFallbackPlugin.ts +29 -0
@@ -0,0 +1,36 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
10
+ var __export = (target, all) => {
11
+ for (var name in all)
12
+ __defProp(target, name, { get: all[name], enumerable: true });
13
+ };
14
+ var __copyProps = (to, from, except, desc) => {
15
+ if (from && typeof from === "object" || typeof from === "function") {
16
+ for (let key of __getOwnPropNames(from))
17
+ if (!__hasOwnProp.call(to, key) && key !== except)
18
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
23
+ // If the importer is in node compatibility mode or this is not an ESM
24
+ // file that has been converted to a CommonJS file using a Babel-
25
+ // compatible transform (i.e. "__esModule" has not been set), then set
26
+ // "default" to the CommonJS "module.exports" for node compatibility.
27
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
28
+ mod
29
+ ));
30
+
31
+ export {
32
+ __commonJS,
33
+ __export,
34
+ __toESM
35
+ };
36
+ //# sourceMappingURL=chunk-G3PMV62Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,555 @@
1
+ // src/viteStorybookAstroMiddlewarePlugin.ts
2
+ import { fileURLToPath } from "url";
3
+ import { createServer } from "vite";
4
+
5
+ // src/viteAstroContainerRenderersPlugin.ts
6
+ function viteAstroContainerRenderersPlugin(integrations) {
7
+ const name = "astro-container-renderers";
8
+ const virtualModuleId = `virtual:${name}`;
9
+ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
10
+ return {
11
+ name,
12
+ resolveId(id) {
13
+ if (id === virtualModuleId) {
14
+ return resolvedVirtualModuleId;
15
+ }
16
+ },
17
+ load(id) {
18
+ if (id === resolvedVirtualModuleId) {
19
+ const importStatements = buildImportStatements(integrations);
20
+ const code = `
21
+ ${importStatements}
22
+ export function addRenderers(container) {
23
+ ${integrations.map((integration) => buildServerRenderer(integration) + "\n" + buildClientRenderer(integration)).join("\n")}
24
+ }
25
+ `;
26
+ return code;
27
+ }
28
+ }
29
+ };
30
+ }
31
+ function buildImportStatements(integrations) {
32
+ return integrations.filter((integration) => integration.renderer.server).map(
33
+ (integration) => `import ${integration.name}Renderer from '${integration.renderer.server?.entrypoint}';`
34
+ ).join("\n");
35
+ }
36
+ function buildServerRenderer(integration) {
37
+ const serverRenderer = integration.renderer.server;
38
+ if (!serverRenderer) {
39
+ return "";
40
+ }
41
+ if (integration.name === "solid") {
42
+ return `
43
+ container.addServerRenderer({
44
+ name: '${serverRenderer.name}',
45
+ renderer: {
46
+ ...${integration.name}Renderer,
47
+ name: '${serverRenderer.name}'
48
+ }
49
+ });
50
+ `;
51
+ }
52
+ return `
53
+ container.addServerRenderer({
54
+ name: '${serverRenderer.name}',
55
+ renderer: ${integration.name}Renderer
56
+ });
57
+ `;
58
+ }
59
+ function buildClientRenderer(integration) {
60
+ const clientRenderer = integration.renderer.client;
61
+ if (clientRenderer) {
62
+ return `
63
+ container.addClientRenderer({
64
+ name: '${clientRenderer.name}',
65
+ entrypoint: '${clientRenderer.entrypoint}'
66
+ });
67
+ `;
68
+ }
69
+ return "";
70
+ }
71
+
72
+ // src/vitePluginAstroFontsFallback.ts
73
+ var FONTS_RUNTIME_STUB = `
74
+ export const fontData = {};
75
+ export function createGetFontData(fontsMod) {
76
+ return fontsMod?.fontDataByCssVariable ?? {};
77
+ }
78
+ `;
79
+ var FONTS_INTERNAL_STUB = `
80
+ export const componentDataByCssVariable = new Map();
81
+ export const fontDataByCssVariable = {};
82
+ `;
83
+ function vitePluginAstroFontsFallback() {
84
+ const VIRTUAL_ID = "virtual:astro:assets/fonts/internal";
85
+ const RUNTIME_VIRTUAL_ID = "virtual:astro:assets/fonts/runtime";
86
+ const RESOLVED_VIRTUAL_ID = "\0" + VIRTUAL_ID;
87
+ const RESOLVED_RUNTIME_VIRTUAL_ID = "\0" + RUNTIME_VIRTUAL_ID;
88
+ const RESOLVED_FONTS_RUNTIME_ID = "\0storybook:astro-fonts-runtime";
89
+ return {
90
+ name: "storybook-astro-fonts-fallback",
91
+ // Must run before vite:resolve to intercept virtual modules
92
+ // before Vite tries to resolve them as Node package imports
93
+ enforce: "pre",
94
+ resolveId(id) {
95
+ if (id === VIRTUAL_ID) {
96
+ return RESOLVED_VIRTUAL_ID;
97
+ }
98
+ if (id === RUNTIME_VIRTUAL_ID) {
99
+ return RESOLVED_RUNTIME_VIRTUAL_ID;
100
+ }
101
+ if (id === "astro/assets/fonts/runtime" || id === "astro/assets/fonts/runtime.js") {
102
+ return RESOLVED_FONTS_RUNTIME_ID;
103
+ }
104
+ },
105
+ load(id) {
106
+ if (id === RESOLVED_VIRTUAL_ID) {
107
+ return { code: FONTS_INTERNAL_STUB };
108
+ }
109
+ if (id === RESOLVED_RUNTIME_VIRTUAL_ID || id === RESOLVED_FONTS_RUNTIME_ID) {
110
+ return { code: FONTS_RUNTIME_STUB };
111
+ }
112
+ }
113
+ };
114
+ }
115
+
116
+ // src/viteStorybookAstroMiddlewarePlugin.ts
117
+ async function vitePluginStorybookAstroMiddleware(options) {
118
+ let viteServer = null;
119
+ const vitePlugin = {
120
+ name: "storybook-astro-middleware-plugin",
121
+ async configureServer(server) {
122
+ viteServer = await createViteServer(options.integrations);
123
+ const filePath = fileURLToPath(new URL("./middleware", import.meta.url));
124
+ const middleware = await viteServer.ssrLoadModule(filePath, {
125
+ fixStacktrace: true
126
+ });
127
+ const handler = await middleware.handlerFactory(options.integrations);
128
+ server.ws.on("astro:render:request", async (data) => {
129
+ try {
130
+ const html = await handler(data);
131
+ server.ws.send("astro:render:response", {
132
+ html,
133
+ id: data.id
134
+ });
135
+ } catch (err) {
136
+ const errorMessage = err instanceof Error ? err.message : String(err);
137
+ const errorStack = err instanceof Error ? err.stack : "";
138
+ console.error("[storybook-astro] Render error:", errorMessage);
139
+ if (errorStack) {
140
+ console.error(errorStack);
141
+ }
142
+ server.ws.send("astro:render:response", {
143
+ id: data.id,
144
+ html: '<div style="background: #d73838; padding: 12px; color: #f0f0f0; font-family: monospace; border-radius: 4px"><strong>Error rendering Astro component</strong><br/><pre style="white-space: pre-wrap; margin-top: 8px; font-size: 12px">' + errorMessage.replace(/</g, "&lt;").replace(/>/g, "&gt;") + "</pre></div>"
145
+ });
146
+ }
147
+ });
148
+ }
149
+ };
150
+ const assetServingPlugin = {
151
+ name: "storybook-astro-assets",
152
+ configureServer(server) {
153
+ server.middlewares.use("/_image", (req, res, next) => {
154
+ if (!viteServer) {
155
+ next();
156
+ return;
157
+ }
158
+ viteServer.middlewares.handle(req, res, (err) => {
159
+ if (err) {
160
+ console.error("Asset serving error:", err);
161
+ next();
162
+ }
163
+ });
164
+ });
165
+ }
166
+ };
167
+ return {
168
+ vitePlugin,
169
+ viteConfig: {
170
+ plugins: [
171
+ assetServingPlugin
172
+ ].filter(Boolean)
173
+ }
174
+ };
175
+ }
176
+ async function createViteServer(integrations) {
177
+ const { getViteConfig } = await import("astro/config");
178
+ const config = await getViteConfig(
179
+ {},
180
+ {
181
+ configFile: false,
182
+ integrations: await Promise.all(
183
+ integrations.map((integration) => integration.loadIntegration())
184
+ )
185
+ }
186
+ )({ mode: "development", command: "serve" });
187
+ const viteServer = await createServer({
188
+ configFile: false,
189
+ ...config,
190
+ plugins: [
191
+ ...config.plugins?.filter(Boolean) ?? [],
192
+ viteAstroContainerRenderersPlugin(integrations),
193
+ vitePluginAstroFontsFallback()
194
+ ]
195
+ });
196
+ await viteServer.pluginContainer.buildStart({});
197
+ return viteServer;
198
+ }
199
+
200
+ // src/viteStorybookRendererFallbackPlugin.ts
201
+ function viteStorybookRendererFallbackPlugin(integrations) {
202
+ const name = "storybook-renderer-fallback";
203
+ const virtualModuleId = `virtual:${name}`;
204
+ const resolvedVirtualModuleId = `\0${virtualModuleId}`;
205
+ return {
206
+ name,
207
+ resolveId(id) {
208
+ if (id === virtualModuleId) {
209
+ return resolvedVirtualModuleId;
210
+ }
211
+ },
212
+ load(id) {
213
+ if (id === resolvedVirtualModuleId) {
214
+ return integrations.filter((integration) => integration.storybookEntryPreview).map(
215
+ (integration) => `export * as ${integration.name} from '${integration.storybookEntryPreview}';`
216
+ ).join("\n");
217
+ }
218
+ }
219
+ };
220
+ }
221
+
222
+ // src/vitePluginAstroComponentMarker.ts
223
+ import { readFileSync } from "fs";
224
+ function vitePluginAstroComponentMarker() {
225
+ let isBuild = false;
226
+ return {
227
+ name: "storybook-astro-component-marker",
228
+ enforce: "post",
229
+ configResolved(config) {
230
+ isBuild = config.command === "build";
231
+ },
232
+ transform(code, id) {
233
+ if (!id.endsWith(".astro")) {
234
+ return null;
235
+ }
236
+ if (!code.includes("Astro components cannot be used in the browser")) {
237
+ return null;
238
+ }
239
+ const moduleId = id;
240
+ const styleCode = isBuild ? generateInlineStyles(moduleId) : generateStyleImports(moduleId);
241
+ return {
242
+ code: `
243
+ ${styleCode}
244
+ const __astro_component = () => {
245
+ throw new Error('Astro components are rendered server-side by Storybook.');
246
+ };
247
+ __astro_component.isAstroComponentFactory = true;
248
+ __astro_component.moduleId = ${JSON.stringify(moduleId)};
249
+ export default __astro_component;
250
+ `,
251
+ map: null
252
+ };
253
+ }
254
+ };
255
+ }
256
+ function generateStyleImports(filePath) {
257
+ try {
258
+ const source = readFileSync(filePath, "utf-8");
259
+ const styleCount = countStyleBlocks(source);
260
+ return Array.from(
261
+ { length: styleCount },
262
+ (_, i) => `import ${JSON.stringify(`${filePath}?astro&type=style&index=${i}&lang.css`)};`
263
+ ).join("\n");
264
+ } catch {
265
+ return "";
266
+ }
267
+ }
268
+ function generateInlineStyles(filePath) {
269
+ try {
270
+ const source = readFileSync(filePath, "utf-8");
271
+ const cssBlocks = extractStyleBlocks(source);
272
+ if (cssBlocks.length === 0) {
273
+ return "";
274
+ }
275
+ return cssBlocks.map((css, i) => {
276
+ const escaped = JSON.stringify(css);
277
+ return `
278
+ (function() {
279
+ if (typeof document !== 'undefined') {
280
+ const style = document.createElement('style');
281
+ style.setAttribute('data-astro-build', ${JSON.stringify(filePath + ":" + i)});
282
+ style.textContent = ${escaped};
283
+ document.head.appendChild(style);
284
+ }
285
+ })();`;
286
+ }).join("\n");
287
+ } catch {
288
+ return "";
289
+ }
290
+ }
291
+ function extractStyleBlocks(source) {
292
+ const withoutFrontmatter = source.replace(/^---[\s\S]*?---/m, "");
293
+ const blocks = [];
294
+ const regex = /<style(?:\s[^>]*)?>([\s\S]*?)<\/style>/g;
295
+ let match;
296
+ while ((match = regex.exec(withoutFrontmatter)) !== null) {
297
+ blocks.push(match[1].trim());
298
+ }
299
+ return blocks;
300
+ }
301
+ function countStyleBlocks(source) {
302
+ const withoutFrontmatter = source.replace(/^---[\s\S]*?---/m, "");
303
+ const matches = withoutFrontmatter.match(/<style(\s|>)/g);
304
+ return matches ? matches.length : 0;
305
+ }
306
+
307
+ // src/vitePluginAstroBuildPrerender.ts
308
+ import { readFileSync as readFileSync2 } from "fs";
309
+ import { fileURLToPath as fileURLToPath2 } from "url";
310
+ import { basename } from "path";
311
+ function vitePluginAstroBuildPrerender(integrations) {
312
+ let viteServer = null;
313
+ let handler = null;
314
+ const assetRefIds = /* @__PURE__ */ new Map();
315
+ return {
316
+ name: "storybook-astro-build-prerender",
317
+ apply: "build",
318
+ enforce: "post",
319
+ async buildStart() {
320
+ try {
321
+ viteServer = await createViteServer(integrations);
322
+ const filePath = fileURLToPath2(new URL("./middleware", import.meta.url));
323
+ const middleware = await viteServer.ssrLoadModule(filePath, {
324
+ fixStacktrace: true
325
+ });
326
+ handler = await middleware.handlerFactory(integrations);
327
+ } catch (err) {
328
+ console.warn(
329
+ "[storybook-astro] Failed to create pre-render server:",
330
+ err instanceof Error ? err.message : err
331
+ );
332
+ }
333
+ },
334
+ async transform(code, id) {
335
+ if (!handler || !viteServer) {
336
+ return null;
337
+ }
338
+ if (!/\.stories\.(jsx?|tsx?|mjs)$/.test(id)) {
339
+ return null;
340
+ }
341
+ const ast = this.parse(code);
342
+ const astroImport = findFirstAstroImport(ast);
343
+ if (!astroImport) {
344
+ return null;
345
+ }
346
+ const resolved = await this.resolve(astroImport.source, id);
347
+ if (!resolved) {
348
+ return null;
349
+ }
350
+ const componentPath = resolved.id;
351
+ let storyModule;
352
+ try {
353
+ storyModule = await viteServer.ssrLoadModule(id);
354
+ } catch (err) {
355
+ console.warn(
356
+ `[storybook-astro] Failed to load story for pre-render: ${id}`,
357
+ err instanceof Error ? err.message : err
358
+ );
359
+ return null;
360
+ }
361
+ const meta = storyModule.default || {};
362
+ if (!meta.component?.isAstroComponentFactory) {
363
+ return null;
364
+ }
365
+ const storyNames = Object.keys(storyModule).filter(
366
+ (k) => k !== "default" && k !== "__esModule" && typeof storyModule[k] === "object" && storyModule[k] !== null
367
+ );
368
+ if (storyNames.length === 0) {
369
+ return null;
370
+ }
371
+ const prerendered = {};
372
+ for (const name of storyNames) {
373
+ const story = storyModule[name];
374
+ if (story.component && story.component !== meta.component) {
375
+ continue;
376
+ }
377
+ const mergedArgs = { ...meta.args, ...story.args };
378
+ const { slots = {}, ...componentArgs } = mergedArgs;
379
+ try {
380
+ const html = await handler({
381
+ component: componentPath,
382
+ args: componentArgs,
383
+ slots: slots ?? {}
384
+ });
385
+ prerendered[name] = emitAndRewriteAssetUrls(html, this, assetRefIds);
386
+ } catch (err) {
387
+ console.warn(
388
+ `[storybook-astro] Pre-render failed for "${name}" in ${id}:`,
389
+ err instanceof Error ? err.message : err
390
+ );
391
+ }
392
+ }
393
+ if (Object.keys(prerendered).length === 0) {
394
+ return null;
395
+ }
396
+ const injections = Object.entries(prerendered).map(
397
+ ([name, html]) => `if (typeof ${name} !== 'undefined' && ${name} && typeof ${name} === 'object') {
398
+ ${name}.parameters = Object.assign({}, ${name}.parameters, { __astroPrerendered: ${JSON.stringify(html)} });
399
+ }`
400
+ );
401
+ return {
402
+ code: code + "\n// Pre-rendered by storybook-astro-build-prerender\n" + injections.join("\n"),
403
+ map: null
404
+ };
405
+ },
406
+ renderChunk(code) {
407
+ if (assetRefIds.size === 0) {
408
+ return null;
409
+ }
410
+ let result = code;
411
+ let modified = false;
412
+ for (const [placeholder, refId] of assetRefIds) {
413
+ if (!result.includes(placeholder)) {
414
+ continue;
415
+ }
416
+ const fileName = this.getFileName(refId);
417
+ result = result.replaceAll(placeholder, fileName);
418
+ modified = true;
419
+ }
420
+ return modified ? { code: result, map: null } : null;
421
+ },
422
+ async buildEnd() {
423
+ if (viteServer) {
424
+ await viteServer.close();
425
+ viteServer = null;
426
+ handler = null;
427
+ }
428
+ }
429
+ };
430
+ }
431
+ function findFirstAstroImport(ast) {
432
+ for (const node of ast.body) {
433
+ if (node.type === "ImportDeclaration" && typeof node.source.value === "string" && node.source.value.endsWith(".astro")) {
434
+ const defaultSpecifier = node.specifiers?.find(
435
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
436
+ (s) => s.type === "ImportDefaultSpecifier"
437
+ );
438
+ if (defaultSpecifier) {
439
+ return {
440
+ local: defaultSpecifier.local.name,
441
+ source: node.source.value
442
+ };
443
+ }
444
+ }
445
+ }
446
+ return null;
447
+ }
448
+ function emitAndRewriteAssetUrls(html, ctx, refIds) {
449
+ return html.replace(/\/@fs([^"'>]+)/g, (fullMatch, rawPath) => {
450
+ const pathOnly = rawPath.split("?")[0];
451
+ try {
452
+ const source = readFileSync2(pathOnly);
453
+ const name = basename(pathOnly);
454
+ const refId = ctx.emitFile({ type: "asset", name, source });
455
+ const placeholder = `__ASTRO_PRERENDER_ASSET_${refId}__`;
456
+ refIds.set(placeholder, refId);
457
+ return placeholder;
458
+ } catch {
459
+ return fullMatch;
460
+ }
461
+ });
462
+ }
463
+
464
+ // src/vitePluginAstro.ts
465
+ import { mergeConfig } from "vite";
466
+ var ASTRO_PLUGINS_THAT_ARE_SUPPOSEDLY_NOT_NEEDED_IN_STORYBOOK = [
467
+ "@astro/plugin-actions",
468
+ "@astrojs/vite-plugin-astro-ssr-manifest",
469
+ "astro-content-virtual-mod-plugin",
470
+ "astro:actions",
471
+ "astro:build:normal",
472
+ "astro:container",
473
+ "astro:content-asset-propagation",
474
+ "astro:content-imports",
475
+ "astro:content-listen",
476
+ "astro:dev-toolbar",
477
+ "astro:head-metadata",
478
+ "astro:html",
479
+ "astro:i18n",
480
+ "astro:integration-container",
481
+ "astro:jsx",
482
+ "astro:markdown",
483
+ "astro:postprocess",
484
+ "astro:prefetch",
485
+ "astro:scanner",
486
+ "astro:scripts:page-ssr",
487
+ "astro:server",
488
+ "astro:vite-plugin-env",
489
+ "astro:vite-plugin-file-url"
490
+ ];
491
+ async function mergeWithAstroConfig(config, integrations) {
492
+ const { getViteConfig } = await import("astro/config");
493
+ const astroConfig = await getViteConfig(
494
+ {},
495
+ {
496
+ configFile: false,
497
+ integrations: await Promise.all(
498
+ integrations.map((integration) => integration.loadIntegration())
499
+ )
500
+ }
501
+ )({
502
+ mode: "development",
503
+ command: "serve"
504
+ });
505
+ const filteredPlugins = astroConfig.plugins.flat().filter(
506
+ (plugin) => plugin && "name" in plugin && !ASTRO_PLUGINS_THAT_ARE_SUPPOSEDLY_NOT_NEEDED_IN_STORYBOOK.includes(plugin.name)
507
+ );
508
+ return mergeConfig(config, {
509
+ ...astroConfig,
510
+ plugins: filteredPlugins
511
+ });
512
+ }
513
+
514
+ // src/preset.ts
515
+ var core = {
516
+ builder: "@storybook/builder-vite",
517
+ renderer: "@storybook-astro/renderer"
518
+ };
519
+ var viteFinal = async (config, { presets }) => {
520
+ const options = await presets.apply("frameworkOptions");
521
+ const { vitePlugin: storybookAstroMiddlewarePlugin, viteConfig } = await vitePluginStorybookAstroMiddleware(options);
522
+ if (!config.plugins) {
523
+ config.plugins = [];
524
+ }
525
+ config.plugins.push(
526
+ storybookAstroMiddlewarePlugin,
527
+ viteStorybookRendererFallbackPlugin(options.integrations),
528
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
529
+ vitePluginAstroComponentMarker(),
530
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
531
+ vitePluginAstroBuildPrerender(options.integrations),
532
+ ...viteConfig.plugins
533
+ );
534
+ if (!config.resolve) {
535
+ config.resolve = {};
536
+ }
537
+ if (!config.resolve.alias) {
538
+ config.resolve.alias = {};
539
+ }
540
+ const aliases = config.resolve.alias;
541
+ if (!aliases["react"]) {
542
+ aliases["react"] = "react";
543
+ }
544
+ if (!aliases["react-dom"]) {
545
+ aliases["react-dom"] = "react-dom";
546
+ }
547
+ const finalConfig = await mergeWithAstroConfig(config, options.integrations);
548
+ return finalConfig;
549
+ };
550
+
551
+ export {
552
+ core,
553
+ viteFinal
554
+ };
555
+ //# sourceMappingURL=chunk-LLYYQI75.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/viteStorybookAstroMiddlewarePlugin.ts","../src/viteAstroContainerRenderersPlugin.ts","../src/vitePluginAstroFontsFallback.ts","../src/viteStorybookRendererFallbackPlugin.ts","../src/vitePluginAstroComponentMarker.ts","../src/vitePluginAstroBuildPrerender.ts","../src/vitePluginAstro.ts","../src/preset.ts"],"sourcesContent":["import { fileURLToPath } from 'node:url';\nimport { createServer, type PluginOption, type ViteDevServer } from 'vite';\nimport type { RenderRequestMessage, RenderResponseMessage } from '@storybook-astro/renderer/types';\nimport type { FrameworkOptions } from './types.ts';\nimport type { Integration } from './integrations/index.ts';\nimport { viteAstroContainerRenderersPlugin } from './viteAstroContainerRenderersPlugin.ts';\nimport { vitePluginAstroFontsFallback } from './vitePluginAstroFontsFallback.ts';\n\nexport async function vitePluginStorybookAstroMiddleware(options: FrameworkOptions) {\n // The internal Vite server is created lazily inside configureServer (dev-only).\n // During builds, configureServer never fires, so no server is created.\n let viteServer: ViteDevServer | null = null;\n\n const vitePlugin = {\n name: 'storybook-astro-middleware-plugin',\n async configureServer(server) {\n viteServer = await createViteServer(options.integrations);\n\n const filePath = fileURLToPath(new URL('./middleware', import.meta.url));\n const middleware = await viteServer.ssrLoadModule(filePath, {\n fixStacktrace: true\n });\n const handler = await middleware.handlerFactory(options.integrations);\n\n server.ws.on('astro:render:request', async (data: RenderRequestMessage['data']) => {\n try {\n const html = await handler(data);\n\n server.ws.send('astro:render:response', {\n html,\n id: data.id\n } satisfies RenderResponseMessage['data']);\n } catch (err) {\n const errorMessage = err instanceof Error ? err.message : String(err);\n const errorStack = err instanceof Error ? err.stack : '';\n\n console.error('[storybook-astro] Render error:', errorMessage);\n if (errorStack) {console.error(errorStack);}\n server.ws.send('astro:render:response', {\n id: data.id,\n html:\n '<div style=\"background: #d73838; padding: 12px; color: #f0f0f0; font-family: monospace; border-radius: 4px\">' +\n '<strong>Error rendering Astro component</strong><br/>' +\n '<pre style=\"white-space: pre-wrap; margin-top: 8px; font-size: 12px\">' +\n errorMessage.replace(/</g, '&lt;').replace(/>/g, '&gt;') +\n '</pre></div>'\n } satisfies RenderResponseMessage['data']);\n }\n });\n }\n } satisfies PluginOption;\n\n // Create asset serving plugin (only active in dev when viteServer exists)\n const assetServingPlugin = {\n name: 'storybook-astro-assets',\n configureServer(server) {\n server.middlewares.use('/_image', (req, res, next) => {\n if (!viteServer) {\n next();\n \nreturn;\n }\n // Forward the request to the Astro vite server\n viteServer.middlewares.handle(req, res, (err) => {\n if (err) {\n console.error('Asset serving error:', err);\n next();\n }\n });\n });\n }\n };\n\n // The extracted CSS plugins from Astro's internal Vite server cause Vue SFC\n // <style> blocks to be double-processed (once by these plugins, once by\n // Storybook's built-in CSS plugins), resulting in PostCSS errors.\n // \n // Solution: Don't extract Astro's CSS plugins. Storybook's built-in CSS\n // plugins handle both Vue styles AND Astro style sub-modules (which are\n // standard CSS imports like `Component.astro?astro&type=style&index=0&lang.css`).\n // \n // The Astro internal server's CSS plugins are only needed for SSR rendering\n // within that server - they don't need to be shared with Storybook's server.\n return {\n vitePlugin,\n viteConfig: {\n plugins: [\n assetServingPlugin\n ].filter(Boolean)\n }\n };\n}\n\nexport async function createViteServer(integrations: Integration[]) {\n const { getViteConfig } = await import('astro/config');\n\n const config = await getViteConfig(\n {},\n {\n configFile: false,\n integrations: await Promise.all(\n integrations.map((integration) => integration.loadIntegration())\n )\n }\n )({ mode: 'development', command: 'serve' });\n\n const viteServer = await createServer({\n configFile: false,\n ...config,\n plugins: [\n ...(config.plugins?.filter(Boolean) ?? []),\n viteAstroContainerRenderersPlugin(integrations),\n vitePluginAstroFontsFallback()\n ]\n });\n\n // Initialize the server's plugin container to ensure all plugins are ready.\n // Without this, some plugins (like vite:css) may have uninitialized state\n // when ssrLoadModule is called.\n await viteServer.pluginContainer.buildStart({});\n\n return viteServer;\n}\n","import type { Integration } from './integrations/index.ts';\n\nexport function viteAstroContainerRenderersPlugin(integrations: Integration[]) {\n const name = 'astro-container-renderers';\n const virtualModuleId = `virtual:${name}`;\n const resolvedVirtualModuleId = `\\0${virtualModuleId}`;\n\n return {\n name,\n\n resolveId(id: string) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id: string) {\n if (id === resolvedVirtualModuleId) {\n const importStatements = buildImportStatements(integrations);\n\n const code = `\n ${importStatements}\n export function addRenderers(container) {\n ${integrations.map((integration) => buildServerRenderer(integration) + '\\n' + buildClientRenderer(integration)).join('\\n')}\n }\n `;\n\n return code;\n }\n }\n };\n}\n\nfunction buildImportStatements(integrations: Integration[]) {\n return integrations\n .filter((integration) => integration.renderer.server)\n .map(\n (integration) =>\n `import ${integration.name}Renderer from '${integration.renderer.server?.entrypoint}';`\n )\n .join('\\n');\n}\n\nfunction buildServerRenderer(integration: Integration) {\n const serverRenderer = integration.renderer.server;\n\n if (!serverRenderer) {\n return '';\n }\n\n if (integration.name === 'solid') {\n return `\n container.addServerRenderer({\n name: '${serverRenderer.name}',\n renderer: {\n ...${integration.name}Renderer,\n name: '${serverRenderer.name}'\n }\n });\n `;\n }\n\n return `\n container.addServerRenderer({\n name: '${serverRenderer.name}',\n renderer: ${integration.name}Renderer\n });\n `;\n}\n\nfunction buildClientRenderer(integration: Integration) {\n const clientRenderer = integration.renderer.client;\n\n if (clientRenderer) {\n return `\n container.addClientRenderer({\n name: '${clientRenderer.name}',\n entrypoint: '${clientRenderer.entrypoint}'\n });\n `;\n }\n\n return '';\n}\n","import type { Plugin } from 'vite';\n\nconst FONTS_RUNTIME_STUB = `\nexport const fontData = {};\nexport function createGetFontData(fontsMod) {\n return fontsMod?.fontDataByCssVariable ?? {};\n}\n`;\n\nconst FONTS_INTERNAL_STUB = `\nexport const componentDataByCssVariable = new Map();\nexport const fontDataByCssVariable = {};\n`;\n\n/**\n * Provides fallback resolution for Astro's font-related virtual modules\n * and package import paths in Storybook's SSR Vite server.\n *\n * In Astro 6, the `astro:assets` virtual module depends on font-related\n * modules through virtual modules and a bare `astro/assets/fonts/runtime`\n * import. In the Storybook SSR context:\n *\n * 1. The fonts plugin's filter-based `resolveId` may not trigger for\n * the virtual module IDs.\n * 2. A Vite transform rewrites the `astro:assets` module to import\n * `createGetFontData` from `astro/assets/fonts/runtime` (without\n * `.js`), which fails against Astro's package.json exports map.\n * 3. The `createGetFontData` function is injected by a runtime Vite\n * transform that doesn't run in our SSR context.\n *\n * This plugin stubs all three font module paths with no-op exports,\n * since Storybook doesn't need Astro's font system.\n */\nexport function vitePluginAstroFontsFallback(): Plugin {\n const VIRTUAL_ID = 'virtual:astro:assets/fonts/internal';\n const RUNTIME_VIRTUAL_ID = 'virtual:astro:assets/fonts/runtime';\n const RESOLVED_VIRTUAL_ID = '\\0' + VIRTUAL_ID;\n const RESOLVED_RUNTIME_VIRTUAL_ID = '\\0' + RUNTIME_VIRTUAL_ID;\n const RESOLVED_FONTS_RUNTIME_ID = '\\0storybook:astro-fonts-runtime';\n\n return {\n name: 'storybook-astro-fonts-fallback',\n // Must run before vite:resolve to intercept virtual modules\n // before Vite tries to resolve them as Node package imports\n enforce: 'pre',\n\n resolveId(id) {\n if (id === VIRTUAL_ID) {\n return RESOLVED_VIRTUAL_ID;\n }\n if (id === RUNTIME_VIRTUAL_ID) {\n return RESOLVED_RUNTIME_VIRTUAL_ID;\n }\n // Intercept the bare package import (without .js) and the .js variant\n if (id === 'astro/assets/fonts/runtime' || id === 'astro/assets/fonts/runtime.js') {\n return RESOLVED_FONTS_RUNTIME_ID;\n }\n },\n\n load(id) {\n if (id === RESOLVED_VIRTUAL_ID) {\n return { code: FONTS_INTERNAL_STUB };\n }\n if (id === RESOLVED_RUNTIME_VIRTUAL_ID || id === RESOLVED_FONTS_RUNTIME_ID) {\n return { code: FONTS_RUNTIME_STUB };\n }\n }\n };\n}\n","import type { Integration } from './integrations/index.ts';\n\nexport function viteStorybookRendererFallbackPlugin(integrations: Integration[]) {\n const name = 'storybook-renderer-fallback';\n const virtualModuleId = `virtual:${name}`;\n const resolvedVirtualModuleId = `\\0${virtualModuleId}`;\n\n return {\n name,\n\n resolveId(id: string) {\n if (id === virtualModuleId) {\n return resolvedVirtualModuleId;\n }\n },\n\n load(id: string) {\n if (id === resolvedVirtualModuleId) {\n return integrations\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}\n","import { readFileSync } from 'node:fs';\nimport type { PluginOption } from 'vite';\n\n/**\n * Vite plugin that patches Astro 6's client-side .astro file transforms for Storybook.\n *\n * In Astro 6, the client-side transform of .astro files produces a stub function that\n * throws \"Astro components cannot be used in the browser\" without setting the\n * `isAstroComponentFactory` marker. Storybook's renderer relies on this marker to detect\n * Astro components and route them to server-side rendering via the Container API.\n *\n * This plugin also preserves the component's scoped CSS by importing the style sub-modules\n * that the Astro Vite plugin exposes. Without this, the client-side stub would strip all\n * CSS since Astro 6 no longer includes style imports in client-side .astro transforms.\n *\n * During builds, Astro's compile metadata cache is not populated for client-side transforms,\n * so style sub-module imports would fail. Instead, raw CSS is extracted directly from the\n * .astro source and inlined.\n */\nexport function vitePluginAstroComponentMarker(): PluginOption {\n let isBuild = false;\n\n return {\n name: 'storybook-astro-component-marker',\n enforce: 'post',\n\n configResolved(config) {\n isBuild = config.command === 'build';\n },\n\n transform(code: string, id: string) {\n // Only process main .astro modules (not sub-modules like ?astro&type=style)\n if (!id.endsWith('.astro')) {return null;}\n\n // Detect the Astro 6 client-side stub pattern\n if (!code.includes('Astro components cannot be used in the browser')) {return null;}\n\n const moduleId = id;\n\n // In dev mode, import style sub-modules via Astro's Vite plugin (which has\n // compile metadata cached from the SSR transform).\n // In build mode, Astro's compile metadata cache is not populated for client-side\n // transforms, so sub-module imports would fail. Extract raw CSS instead.\n const styleCode = isBuild\n ? generateInlineStyles(moduleId)\n : generateStyleImports(moduleId);\n\n return {\n code: `\n${styleCode}\nconst __astro_component = () => {\n throw new Error('Astro components are rendered server-side by Storybook.');\n};\n__astro_component.isAstroComponentFactory = true;\n__astro_component.moduleId = ${JSON.stringify(moduleId)};\nexport default __astro_component;\n`,\n map: null,\n };\n },\n };\n}\n\n/**\n * Reads the original .astro source file and generates import statements\n * for each <style> block, using the Astro Vite plugin's sub-module convention.\n */\nfunction generateStyleImports(filePath: string): string {\n try {\n const source = readFileSync(filePath, 'utf-8');\n const styleCount = countStyleBlocks(source);\n\n return Array.from({ length: styleCount }, (_, i) =>\n `import ${JSON.stringify(`${filePath}?astro&type=style&index=${i}&lang.css`)};`\n ).join('\\n');\n } catch {\n return '';\n }\n}\n\n/**\n * Reads the original .astro source file and generates a JS snippet that injects\n * the raw CSS from each <style> block into the document. Used during builds where\n * Astro's compile metadata cache is unavailable.\n *\n * The CSS is unscoped (no Astro scoping transforms), which is acceptable because\n * Astro components show a fallback message in static builds.\n */\nfunction generateInlineStyles(filePath: string): string {\n try {\n const source = readFileSync(filePath, 'utf-8');\n const cssBlocks = extractStyleBlocks(source);\n\n if (cssBlocks.length === 0) {return '';}\n\n // Create a side-effect that injects styles into the document\n return cssBlocks.map((css, i) => {\n const escaped = JSON.stringify(css);\n\n \nreturn `\n(function() {\n if (typeof document !== 'undefined') {\n const style = document.createElement('style');\n style.setAttribute('data-astro-build', ${JSON.stringify(filePath + ':' + i)});\n style.textContent = ${escaped};\n document.head.appendChild(style);\n }\n})();`;\n }).join('\\n');\n } catch {\n return '';\n }\n}\n\n/**\n * Extracts the content of all top-level <style> blocks from an Astro component's source.\n * Strips frontmatter before parsing.\n */\nfunction extractStyleBlocks(source: string): string[] {\n const withoutFrontmatter = source.replace(/^---[\\s\\S]*?---/m, '');\n const blocks: string[] = [];\n const regex = /<style(?:\\s[^>]*)?>([\\s\\S]*?)<\\/style>/g;\n let match;\n\n while ((match = regex.exec(withoutFrontmatter)) !== null) {\n blocks.push(match[1].trim());\n }\n\n return blocks;\n}\n\n/**\n * Counts the number of top-level <style> blocks in an Astro component's source.\n * Only counts opening tags that are NOT inside the frontmatter fence (---).\n */\nfunction countStyleBlocks(source: string): number {\n // Strip frontmatter\n const withoutFrontmatter = source.replace(/^---[\\s\\S]*?---/m, '');\n // Match <style> opening tags (with optional attributes)\n const matches = withoutFrontmatter.match(/<style(\\s|>)/g);\n\n \nreturn matches ? matches.length : 0;\n}\n","import { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { basename } from 'node:path';\nimport type { Plugin, ViteDevServer } from 'vite';\nimport type { Integration } from './integrations/index.ts';\nimport type { HandlerProps } from './middleware.ts';\nimport { createViteServer } from './viteStorybookAstroMiddlewarePlugin.ts';\n\n/**\n * Vite plugin that pre-renders Astro component stories at build time.\n *\n * During `storybook build`, this plugin:\n * 1. Creates an internal Vite SSR server with AstroContainer\n * 2. Detects story files that import Astro components\n * 3. Loads each story module via ssrLoadModule to get fully evaluated args\n * (including imported assets, computed values, etc.)\n * 4. Renders each story variant using AstroContainer\n * 5. Injects the pre-rendered HTML as a story parameter (`__astroPrerendered`)\n *\n * The renderer checks for this parameter in static builds and uses the\n * pre-rendered HTML directly instead of showing a fallback message.\n *\n * Limitations:\n * - Controls panel changes won't update Astro components (HTML is static)\n * - Build time increases with the number of Astro stories\n * - Stories that override the meta component are skipped\n */\nexport function vitePluginAstroBuildPrerender(integrations: Integration[]): Plugin {\n let viteServer: ViteDevServer | null = null;\n let handler: ((data: HandlerProps) => Promise<string>) | null = null;\n\n // Maps placeholder strings to Rollup emitted-file reference IDs.\n // Placeholders are injected into pre-rendered HTML during transform,\n // then resolved to final asset paths in renderChunk.\n const assetRefIds = new Map<string, string>();\n\n return {\n name: 'storybook-astro-build-prerender',\n apply: 'build',\n enforce: 'post',\n\n async buildStart() {\n try {\n viteServer = await createViteServer(integrations);\n\n const filePath = fileURLToPath(new URL('./middleware', import.meta.url));\n const middleware = await viteServer.ssrLoadModule(filePath, {\n fixStacktrace: true\n });\n\n handler = await middleware.handlerFactory(integrations);\n } catch (err) {\n console.warn(\n '[storybook-astro] Failed to create pre-render server:',\n err instanceof Error ? err.message : err\n );\n }\n },\n\n async transform(code, id) {\n if (!handler || !viteServer) {return null;}\n\n // Only process story files\n if (!/\\.stories\\.(jsx?|tsx?|mjs)$/.test(id)) {return null;}\n\n // Parse AST to find .astro imports\n const ast = this.parse(code);\n const astroImport = findFirstAstroImport(ast);\n\n if (!astroImport) {return null;}\n\n // Resolve the .astro import to an absolute path\n const resolved = await this.resolve(astroImport.source, id);\n\n if (!resolved) {return null;}\n const componentPath = resolved.id;\n\n // Load the story module via SSR to get fully evaluated args\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let storyModule: Record<string, any>;\n\n try {\n storyModule = await viteServer.ssrLoadModule(id);\n } catch (err) {\n console.warn(\n `[storybook-astro] Failed to load story for pre-render: ${id}`,\n err instanceof Error ? err.message : err\n );\n \nreturn null;\n }\n\n const meta = storyModule.default || {};\n\n // Confirm the meta component is an Astro component\n if (!meta.component?.isAstroComponentFactory) {return null;}\n\n // Find all named exports that are story objects\n const storyNames = Object.keys(storyModule).filter(\n (k) =>\n k !== 'default' &&\n k !== '__esModule' &&\n typeof storyModule[k] === 'object' &&\n storyModule[k] !== null\n );\n\n if (storyNames.length === 0) {return null;}\n\n // Pre-render each story\n const prerendered: Record<string, string> = {};\n\n for (const name of storyNames) {\n const story = storyModule[name];\n\n // Skip stories that override the component — the resolved path\n // corresponds to the meta component and may not match\n if (story.component && story.component !== meta.component) {continue;}\n\n // Merge meta args with story args (story args take precedence)\n const mergedArgs = { ...meta.args, ...story.args };\n const { slots = {}, ...componentArgs } = mergedArgs;\n\n try {\n const html = await handler({\n component: componentPath,\n args: componentArgs,\n slots: (slots ?? {}) as Record<string, unknown>\n });\n // Rewrite /@fs dev-server URLs to Rollup asset placeholders.\n // The actual files are emitted via this.emitFile and the\n // placeholders are resolved to final paths in renderChunk.\n\n prerendered[name] = emitAndRewriteAssetUrls(html, this, assetRefIds);\n } catch (err) {\n console.warn(\n `[storybook-astro] Pre-render failed for \"${name}\" in ${id}:`,\n err instanceof Error ? err.message : err\n );\n }\n }\n\n if (Object.keys(prerendered).length === 0) {return null;}\n\n // Append code that injects pre-rendered HTML as story parameters.\n // This runs as module-level side effects during import, before\n // Storybook reads the story exports.\n const injections = Object.entries(prerendered).map(\n ([name, html]) =>\n `if (typeof ${name} !== 'undefined' && ${name} && typeof ${name} === 'object') {\\n` +\n ` ${name}.parameters = Object.assign({}, ${name}.parameters, ` +\n `{ __astroPrerendered: ${JSON.stringify(html)} });\\n` +\n `}`\n );\n\n return {\n code:\n code +\n '\\n// Pre-rendered by storybook-astro-build-prerender\\n' +\n injections.join('\\n'),\n map: null\n };\n },\n\n renderChunk(code) {\n if (assetRefIds.size === 0) {return null;}\n\n let result = code;\n let modified = false;\n\n for (const [placeholder, refId] of assetRefIds) {\n if (!result.includes(placeholder)) {continue;}\n const fileName = this.getFileName(refId);\n\n result = result.replaceAll(placeholder, fileName);\n modified = true;\n }\n\n return modified ? { code: result, map: null } : null;\n },\n\n async buildEnd() {\n if (viteServer) {\n await viteServer.close();\n viteServer = null;\n handler = null;\n }\n }\n };\n}\n\n/**\n * Finds the first import declaration with a .astro source in the ESTree AST.\n */\nfunction findFirstAstroImport(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ast: any\n): { local: string; source: string } | null {\n for (const node of ast.body) {\n if (\n node.type === 'ImportDeclaration' &&\n typeof node.source.value === 'string' &&\n node.source.value.endsWith('.astro')\n ) {\n const defaultSpecifier = node.specifiers?.find(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (s: any) => s.type === 'ImportDefaultSpecifier'\n );\n\n if (defaultSpecifier) {\n return {\n local: defaultSpecifier.local.name,\n source: node.source.value\n };\n }\n }\n }\n \nreturn null;\n}\n\n/**\n * Finds /@fs dev-server URLs in pre-rendered HTML, emits the referenced\n * files as Rollup assets, and replaces the URLs with placeholders that\n * are resolved to final paths in renderChunk.\n */\nfunction emitAndRewriteAssetUrls(\n html: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ctx: any,\n refIds: Map<string, string>\n): string {\n // Match /@fs URLs in HTML attribute values.\n // The URL may have a query string with HTML-encoded & (&#38;).\n // Note: file paths may contain spaces, so we match until the closing quote.\n return html.replace(/\\/@fs([^\"'>]+)/g, (fullMatch, rawPath: string) => {\n // Strip query string (may contain &#38; or &)\n const pathOnly = rawPath.split('?')[0];\n\n try {\n const source = readFileSync(pathOnly);\n const name = basename(pathOnly);\n const refId = ctx.emitFile({ type: 'asset', name, source });\n const placeholder = `__ASTRO_PRERENDER_ASSET_${refId}__`;\n\n refIds.set(placeholder, refId);\n \nreturn placeholder;\n } catch {\n return fullMatch;\n }\n });\n}\n","import { mergeConfig, type InlineConfig } from 'vite';\nimport type { Integration } from './integrations/index.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(config: InlineConfig, integrations: Integration[]) {\n const { getViteConfig } = await import('astro/config');\n\n const astroConfig = await getViteConfig(\n {},\n {\n configFile: false,\n integrations: await Promise.all(\n integrations.map((integration) => integration.loadIntegration())\n )\n }\n )({\n mode: 'development',\n command: 'serve'\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 { 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, { 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 config.plugins.push(\n storybookAstroMiddlewarePlugin,\n viteStorybookRendererFallbackPlugin(options.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.integrations) as any,\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, options.integrations);\n\n return finalConfig;\n};\n"],"mappings":"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","names":["readFileSync","fileURLToPath","fileURLToPath","readFileSync"]}