Skip to content

Commit

Permalink
Merge branch 'experimental-support-svelte-v5' of github.com:storybook…
Browse files Browse the repository at this point in the history
…js/addon-svelte-csf into experimental-support-svelte-v5
  • Loading branch information
JReinhold committed Jun 6, 2024
2 parents 1cbf6ff + 6555f54 commit 99a4667
Show file tree
Hide file tree
Showing 17 changed files with 551 additions and 256 deletions.
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,8 @@
"dedent": "^1.2.0",
"estree-util-to-js": "^2.0.0",
"magic-string": "^0.30.1",
"prettier": "^3.3.1",
"prettier-plugin-svelte": "^3.2.4",
"zimmerframe": "^1.1.2"
},
"devDependencies": {
Expand Down
20 changes: 17 additions & 3 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 15 additions & 14 deletions src/compiler/plugin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export async function plugin(): Promise<Plugin> {
}

const svelteAST = getSvelteAST({ code: rawCode, filename: id });
const svelteNodes = await extractSvelteASTNodes({
const svelteASTNodes = await extractSvelteASTNodes({
ast: svelteAST,
filename: id,
});
Expand All @@ -76,19 +76,20 @@ export async function plugin(): Promise<Plugin> {
* then other nodes' `start` and `end` numbers will not be correct anymore.
* Hence the reason why reversing both arrays with stories _(svelte and compiled)_.
*/
const svelteStories = [...svelteNodes.storyComponents].reverse();
const svelteStories = [...svelteASTNodes.storyComponents].reverse();
const compiledStories = [...extractedCompiledStoriesNodes].reverse();

for (const [index, compiled] of Object.entries(compiledStories)) {
updateCompiledStoryProps({
code: magicCompiledCode,
nodes: { svelte: svelteStories[index], compiled },
setTemplateSnippetBlock: svelteNodes.setTemplateSnippetBlock,
filename: id,
originalCode: rawCode,
});
}

await Promise.all(
compiledStories.map((compiled, index) =>
updateCompiledStoryProps({
code: magicCompiledCode,
componentASTNodes: { svelte: svelteStories[index], compiled },
svelteASTNodes,
filename: id,
originalCode: rawCode,
})
)
);
await destructureMetaFromDefineMeta({
code: magicCompiledCode,
nodes: compiledNodes,
Expand All @@ -98,7 +99,7 @@ export async function plugin(): Promise<Plugin> {
code: magicCompiledCode,
nodes: {
compiled: compiledNodes,
svelte: svelteNodes,
svelte: svelteASTNodes,
},
filename: id,
});
Expand All @@ -111,7 +112,7 @@ export async function plugin(): Promise<Plugin> {
code: magicCompiledCode,
nodes: {
compiled: compiledNodes,
svelte: svelteNodes,
svelte: svelteASTNodes,
},
filename: id,
});
Expand Down
21 changes: 9 additions & 12 deletions src/compiler/transform/compiled-story-props.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,21 @@ import { insertSourceCode } from './story-props/insert-source-code.js';

import type { extractStoriesNodesFromExportDefaultFn } from '../../parser/extract/compiled/stories.js';
import type { SvelteASTNodes } from '../../parser/extract/svelte/nodes.js';
import type { extractFragmentNodes } from '../../parser/extract/svelte/fragment-nodes.js';

interface Params {
code: MagicString;
nodes: {
componentASTNodes: {
svelte: SvelteASTNodes['storyComponents'][number];
compiled: Awaited<ReturnType<typeof extractStoriesNodesFromExportDefaultFn>>[number];
};
setTemplateSnippetBlock: Awaited<
ReturnType<typeof extractFragmentNodes>
>['setTemplateSnippetBlock'];
svelteASTNodes: SvelteASTNodes;
filename: string;
originalCode: string;
}

export function updateCompiledStoryProps(params: Params) {
const { code, setTemplateSnippetBlock, nodes, filename, originalCode } = params;
const { svelte, compiled } = nodes;
export async function updateCompiledStoryProps(params: Params) {
const { code, svelteASTNodes, componentASTNodes, filename, originalCode } = params;
const { svelte, compiled } = componentASTNodes;
const { component, comment } = svelte;

const storyPropsObjectExpression = getStoryPropsObjectExpression(compiled);
Expand Down Expand Up @@ -77,17 +74,17 @@ export function updateCompiledStoryProps(params: Params) {
if (comment) {
insertDescriptionStory({ comment, currentDocsProperty });
}
insertSourceCode({
await insertSourceCode({
component,
setTemplateSnippetBlock,
svelteASTNodes,
currentDocsProperty,
filename,
originalCode,
});

return updateCompiledNode({
code,
nodes,
nodes: componentASTNodes,
metaObjectExpression: storyPropsObjectExpression,
});
}
Expand Down Expand Up @@ -137,7 +134,7 @@ function updateCompiledNode({
metaObjectExpression,
}: {
code: Params['code'];
nodes: Params['nodes'];
nodes: Params['componentASTNodes'];
metaObjectExpression: ObjectExpression;
}) {
const { compiled } = nodes;
Expand Down
16 changes: 7 additions & 9 deletions src/compiler/transform/story-props/insert-source-code.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,13 @@ import type { ObjectExpression, Property } from 'estree';
import type { Component } from 'svelte/compiler';

import { createASTObjectExpression, createASTProperty, findASTPropertyIndex } from './shared.js';
import type { extractFragmentNodes } from '../../../parser/extract/svelte/fragment-nodes.js';

import { getStoryChildrenRawSource } from '../../../parser/analyse/Story/children.js';
import type { extractSvelteASTNodes } from '../../../parser/extract/svelte/nodes.js';

interface Params {
component: Component;
setTemplateSnippetBlock: Awaited<
ReturnType<typeof extractFragmentNodes>
>['setTemplateSnippetBlock'];
svelteASTNodes: Awaited<ReturnType<typeof extractSvelteASTNodes>>;
currentDocsProperty: Property;
filename?: string;
originalCode: string;
Expand All @@ -20,9 +19,8 @@ interface Params {
* to see if the user has explicitly set a `source.code`.
* If he didn't, then it will insert to the existing ObjectExpression.
*/
export function insertSourceCode(params: Params) {
const { component, setTemplateSnippetBlock, currentDocsProperty, filename, originalCode } =
params;
export async function insertSourceCode(params: Params) {
const { component, svelteASTNodes, currentDocsProperty, filename, originalCode } = params;

if (currentDocsProperty.value.type !== 'ObjectExpression') {
throw new Error(
Expand Down Expand Up @@ -62,9 +60,9 @@ export function insertSourceCode(params: Params) {
return;
}

const value = getStoryChildrenRawSource({
const value = await getStoryChildrenRawSource({
component,
setTemplateSnippetBlock,
svelteASTNodes,
originalCode,
});

Expand Down
Loading

0 comments on commit 99a4667

Please sign in to comment.