@storybook-astro/framework 1.4.0-canary.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +28 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +57 -2
- package/src/renderer-entry-preview.d.ts +17 -0
package/dist/index.js
CHANGED
|
@@ -7,8 +7,35 @@ import "./chunk-G3PMV62Z.js";
|
|
|
7
7
|
|
|
8
8
|
// src/index.ts
|
|
9
9
|
import { definePreview as definePreviewBase } from "storybook/internal/csf";
|
|
10
|
+
var rendererImpl;
|
|
11
|
+
var rendererLoadPromise;
|
|
12
|
+
function loadRendererEntryPreview() {
|
|
13
|
+
rendererLoadPromise ??= import("@storybook-astro/renderer/entry-preview").then((mod) => {
|
|
14
|
+
rendererImpl = mod;
|
|
15
|
+
return mod;
|
|
16
|
+
});
|
|
17
|
+
return rendererLoadPromise;
|
|
18
|
+
}
|
|
19
|
+
var composedRender = (args, context) => {
|
|
20
|
+
if (!rendererImpl) {
|
|
21
|
+
throw new Error(
|
|
22
|
+
"@storybook-astro: renderer not ready when `render` was called. This should be reached only after `definePreview()` has kicked off the renderer load. If you see this in tests, import the renderer module yourself or render via portable stories."
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
return rendererImpl.render(args, context);
|
|
26
|
+
};
|
|
27
|
+
var composedRenderToCanvas = async (context, canvasElement) => {
|
|
28
|
+
const impl = await loadRendererEntryPreview();
|
|
29
|
+
return impl.renderToCanvas(context, canvasElement);
|
|
30
|
+
};
|
|
10
31
|
function definePreview(input) {
|
|
11
|
-
|
|
32
|
+
void loadRendererEntryPreview();
|
|
33
|
+
return definePreviewBase({
|
|
34
|
+
...input,
|
|
35
|
+
parameters: { renderer: "astro", ...input.parameters },
|
|
36
|
+
render: input.render ?? composedRender,
|
|
37
|
+
renderToCanvas: input.renderToCanvas ?? composedRenderToCanvas
|
|
38
|
+
});
|
|
12
39
|
}
|
|
13
40
|
export {
|
|
14
41
|
composeStories,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Re-export types from storybook internal\nexport type {\n Args,\n ArgTypes,\n Parameters,\n ProjectAnnotations,\n StrictArgs\n} from 'storybook/internal/types';\n\nimport { definePreview as definePreviewBase, type PreviewAddon, type InferTypes, type Preview as CsfPreview } from 'storybook/internal/csf';\nimport type { ProjectAnnotations } from 'storybook/internal/types';\nimport type { AstroRenderer } from './portable-stories.ts';\n\n/**\n * Preview configuration type for `.storybook/preview.ts` in Astro projects.\n * Reflects the full type returned by `definePreview`, including addon type extensions.\n * Use this to annotate your preview module when needed:\n *\n * ```ts\n * import type { Preview } from '@storybook-astro/framework';\n * const preview: Preview = { ... };\n * export default preview;\n * ```\n */\nexport type Preview<Addons extends PreviewAddon<never>[] = []> = CsfPreview<AstroRenderer & InferTypes<Addons>>;\n\n// Export portable stories functionality\nexport {\n composeStories,\n composeStory,\n setProjectAnnotations,\n type AstroRenderer\n} from './portable-stories.ts';\n\n// Export framework types\nexport type {\n FrameworkOptions,\n RenderMode,\n RenderStoryInput,\n ServerBuildOptions,\n SanitizationOptions,\n StoryRulesOptions,\n StorybookConfig\n} from './types.ts';\n\n// Preview configuration helper\nexport function definePreview<Addons extends PreviewAddon<never>[] = []>(\n input: ProjectAnnotations<AstroRenderer> & { addons?: Addons }\n): CsfPreview<AstroRenderer & InferTypes<Addons>> {\n return definePreviewBase<AstroRenderer, Addons>(input);\n}\n"],"mappings":";;;;;;;;AASA,SAAS,iBAAiB,yBAAyF;
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["// Re-export types from storybook internal\nexport type {\n Args,\n ArgTypes,\n Parameters,\n ProjectAnnotations,\n StrictArgs\n} from 'storybook/internal/types';\n\nimport { definePreview as definePreviewBase, type PreviewAddon, type InferTypes, type Preview as CsfPreview } from 'storybook/internal/csf';\nimport type { ArgsStoryFn, ProjectAnnotations, RenderContext, Renderer } from 'storybook/internal/types';\nimport type { AstroRenderer } from './portable-stories.ts';\n\n// CSF4 consumers reach `definePreview` from the preview iframe; Node test setup\n// files (e.g. `vitest.setup.ts`) only import the type helpers and\n// `setProjectAnnotations`. Loading `@storybook-astro/renderer/entry-preview` at\n// module scope here would pull `render.tsx`'s virtual-module chain — including\n// the configured framework integrations like Alpine.js — into the Node test\n// process, which has no `MutationObserver` etc. The dynamic import below keeps\n// that load inside `definePreview` so test setups don't pay for it.\n// Types come from src/renderer-entry-preview.d.ts; entry-preview.ts itself\n// isn't dts-built because it imports Vite virtual modules.\nimport type * as RendererEntryPreviewModule from '@storybook-astro/renderer/entry-preview';\n\ntype RendererEntryPreview = typeof RendererEntryPreviewModule;\nlet rendererImpl: RendererEntryPreview | undefined;\nlet rendererLoadPromise: Promise<RendererEntryPreview> | undefined;\n\nfunction loadRendererEntryPreview(): Promise<RendererEntryPreview> {\n rendererLoadPromise ??= import('@storybook-astro/renderer/entry-preview').then((mod) => {\n rendererImpl = mod;\n\n return mod;\n });\n\n return rendererLoadPromise;\n}\n\nconst composedRender: ArgsStoryFn<AstroRenderer> = (args, context) => {\n if (!rendererImpl) {\n throw new Error(\n '@storybook-astro: renderer not ready when `render` was called. ' +\n 'This should be reached only after `definePreview()` has kicked off the renderer load. ' +\n 'If you see this in tests, import the renderer module yourself or render via portable stories.'\n );\n }\n\n return rendererImpl.render(args, context);\n};\n\nconst composedRenderToCanvas = async (\n context: RenderContext<Renderer>,\n canvasElement: HTMLElement\n): Promise<void> => {\n const impl = await loadRendererEntryPreview();\n\n return impl.renderToCanvas(context, canvasElement);\n};\n\n/**\n * Preview configuration type for `.storybook/preview.ts` in Astro projects.\n * Reflects the full type returned by `definePreview`, including addon type extensions.\n * Use this to annotate your preview module when needed:\n *\n * ```ts\n * import type { Preview } from '@storybook-astro/framework';\n * const preview: Preview = { ... };\n * export default preview;\n * ```\n */\nexport type Preview<Addons extends PreviewAddon<never>[] = []> = CsfPreview<AstroRenderer & InferTypes<Addons>>;\n\n// Export portable stories functionality\nexport {\n composeStories,\n composeStory,\n setProjectAnnotations,\n type AstroRenderer\n} from './portable-stories.ts';\n\n// Export framework types\nexport type {\n FrameworkOptions,\n RenderMode,\n RenderStoryInput,\n ServerBuildOptions,\n SanitizationOptions,\n StoryRulesOptions,\n StorybookConfig\n} from './types.ts';\n\n// Preview configuration helper\nexport function definePreview<Addons extends PreviewAddon<never>[] = []>(\n input: ProjectAnnotations<AstroRenderer> & { addons?: Addons }\n): CsfPreview<AstroRenderer & InferTypes<Addons>> {\n // Kick off the renderer load eagerly so the impl is ready by the time\n // Storybook calls renderToCanvas — but don't await, so this stays sync.\n void loadRendererEntryPreview();\n\n return definePreviewBase<AstroRenderer, Addons>({\n ...input,\n parameters: { renderer: 'astro' as const, ...input.parameters },\n render: input.render ?? composedRender,\n renderToCanvas: input.renderToCanvas ?? composedRenderToCanvas\n });\n}\n"],"mappings":";;;;;;;;AASA,SAAS,iBAAiB,yBAAyF;AAgBnH,IAAI;AACJ,IAAI;AAEJ,SAAS,2BAA0D;AACjE,0BAAwB,OAAO,yCAAyC,EAAE,KAAK,CAAC,QAAQ;AACtF,mBAAe;AAEf,WAAO;AAAA,EACT,CAAC;AAED,SAAO;AACT;AAEA,IAAM,iBAA6C,CAAC,MAAM,YAAY;AACpE,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI;AAAA,MACR;AAAA,IAGF;AAAA,EACF;AAEA,SAAO,aAAa,OAAO,MAAM,OAAO;AAC1C;AAEA,IAAM,yBAAyB,OAC7B,SACA,kBACkB;AAClB,QAAM,OAAO,MAAM,yBAAyB;AAE5C,SAAO,KAAK,eAAe,SAAS,aAAa;AACnD;AAmCO,SAAS,cACd,OACgD;AAGhD,OAAK,yBAAyB;AAE9B,SAAO,kBAAyC;AAAA,IAC9C,GAAG;AAAA,IACH,YAAY,EAAE,UAAU,SAAkB,GAAG,MAAM,WAAW;AAAA,IAC9D,QAAQ,MAAM,UAAU;AAAA,IACxB,gBAAgB,MAAM,kBAAkB;AAAA,EAC1C,CAAC;AACH;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storybook-astro/framework",
|
|
3
|
-
"version": "1.4.0
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "Community-supported Storybook framework for Astro 5 & 6 components",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -142,7 +142,7 @@
|
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
144
|
"dependencies": {
|
|
145
|
-
"@storybook-astro/renderer": "1.4.0
|
|
145
|
+
"@storybook-astro/renderer": "1.4.0",
|
|
146
146
|
"hono": "^4.11.12",
|
|
147
147
|
"sanitize-html": "^2.17.0",
|
|
148
148
|
"tsconfck": "^3.1.6",
|
package/src/index.ts
CHANGED
|
@@ -8,9 +8,55 @@ export type {
|
|
|
8
8
|
} from 'storybook/internal/types';
|
|
9
9
|
|
|
10
10
|
import { definePreview as definePreviewBase, type PreviewAddon, type InferTypes, type Preview as CsfPreview } from 'storybook/internal/csf';
|
|
11
|
-
import type { ProjectAnnotations } from 'storybook/internal/types';
|
|
11
|
+
import type { ArgsStoryFn, ProjectAnnotations, RenderContext, Renderer } from 'storybook/internal/types';
|
|
12
12
|
import type { AstroRenderer } from './portable-stories.ts';
|
|
13
13
|
|
|
14
|
+
// CSF4 consumers reach `definePreview` from the preview iframe; Node test setup
|
|
15
|
+
// files (e.g. `vitest.setup.ts`) only import the type helpers and
|
|
16
|
+
// `setProjectAnnotations`. Loading `@storybook-astro/renderer/entry-preview` at
|
|
17
|
+
// module scope here would pull `render.tsx`'s virtual-module chain — including
|
|
18
|
+
// the configured framework integrations like Alpine.js — into the Node test
|
|
19
|
+
// process, which has no `MutationObserver` etc. The dynamic import below keeps
|
|
20
|
+
// that load inside `definePreview` so test setups don't pay for it.
|
|
21
|
+
// Types come from src/renderer-entry-preview.d.ts; entry-preview.ts itself
|
|
22
|
+
// isn't dts-built because it imports Vite virtual modules.
|
|
23
|
+
import type * as RendererEntryPreviewModule from '@storybook-astro/renderer/entry-preview';
|
|
24
|
+
|
|
25
|
+
type RendererEntryPreview = typeof RendererEntryPreviewModule;
|
|
26
|
+
let rendererImpl: RendererEntryPreview | undefined;
|
|
27
|
+
let rendererLoadPromise: Promise<RendererEntryPreview> | undefined;
|
|
28
|
+
|
|
29
|
+
function loadRendererEntryPreview(): Promise<RendererEntryPreview> {
|
|
30
|
+
rendererLoadPromise ??= import('@storybook-astro/renderer/entry-preview').then((mod) => {
|
|
31
|
+
rendererImpl = mod;
|
|
32
|
+
|
|
33
|
+
return mod;
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
return rendererLoadPromise;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const composedRender: ArgsStoryFn<AstroRenderer> = (args, context) => {
|
|
40
|
+
if (!rendererImpl) {
|
|
41
|
+
throw new Error(
|
|
42
|
+
'@storybook-astro: renderer not ready when `render` was called. ' +
|
|
43
|
+
'This should be reached only after `definePreview()` has kicked off the renderer load. ' +
|
|
44
|
+
'If you see this in tests, import the renderer module yourself or render via portable stories.'
|
|
45
|
+
);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return rendererImpl.render(args, context);
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const composedRenderToCanvas = async (
|
|
52
|
+
context: RenderContext<Renderer>,
|
|
53
|
+
canvasElement: HTMLElement
|
|
54
|
+
): Promise<void> => {
|
|
55
|
+
const impl = await loadRendererEntryPreview();
|
|
56
|
+
|
|
57
|
+
return impl.renderToCanvas(context, canvasElement);
|
|
58
|
+
};
|
|
59
|
+
|
|
14
60
|
/**
|
|
15
61
|
* Preview configuration type for `.storybook/preview.ts` in Astro projects.
|
|
16
62
|
* Reflects the full type returned by `definePreview`, including addon type extensions.
|
|
@@ -47,5 +93,14 @@ export type {
|
|
|
47
93
|
export function definePreview<Addons extends PreviewAddon<never>[] = []>(
|
|
48
94
|
input: ProjectAnnotations<AstroRenderer> & { addons?: Addons }
|
|
49
95
|
): CsfPreview<AstroRenderer & InferTypes<Addons>> {
|
|
50
|
-
|
|
96
|
+
// Kick off the renderer load eagerly so the impl is ready by the time
|
|
97
|
+
// Storybook calls renderToCanvas — but don't await, so this stays sync.
|
|
98
|
+
void loadRendererEntryPreview();
|
|
99
|
+
|
|
100
|
+
return definePreviewBase<AstroRenderer, Addons>({
|
|
101
|
+
...input,
|
|
102
|
+
parameters: { renderer: 'astro' as const, ...input.parameters },
|
|
103
|
+
render: input.render ?? composedRender,
|
|
104
|
+
renderToCanvas: input.renderToCanvas ?? composedRenderToCanvas
|
|
105
|
+
});
|
|
51
106
|
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// Ambient declaration for the renderer's runtime-only entry-preview module.
|
|
2
|
+
//
|
|
3
|
+
// `@storybook-astro/renderer/entry-preview` is built into JS but no .d.ts is
|
|
4
|
+
// emitted, because the source imports Vite virtual modules that fail isolated
|
|
5
|
+
// DTS compilation. We import the runtime values from `definePreview` so the
|
|
6
|
+
// renderer's `renderToCanvas`, `render`, and `parameters` end up composed into
|
|
7
|
+
// CSF4 previews — see src/index.ts for the why.
|
|
8
|
+
declare module '@storybook-astro/renderer/entry-preview' {
|
|
9
|
+
import type { ArgsStoryFn, Renderer, RenderContext } from 'storybook/internal/types';
|
|
10
|
+
|
|
11
|
+
export const parameters: { renderer: 'astro' };
|
|
12
|
+
export const render: ArgsStoryFn<Renderer>;
|
|
13
|
+
export const renderToCanvas: (
|
|
14
|
+
context: RenderContext<Renderer>,
|
|
15
|
+
canvasElement: HTMLElement
|
|
16
|
+
) => void | Promise<void>;
|
|
17
|
+
}
|