Skip to content

Commit 6954b85

Browse files
authored
Merge pull request #245 from storybookjs/source-template-literal
fix: Support for legacy `source` prop when value is `TemplateLiteral`
2 parents d54d4b5 + 0baf4bc commit 6954b85

File tree

3 files changed

+54
-5
lines changed

3 files changed

+54
-5
lines changed

src/compiler/pre-transform/codemods/legacy-story.test.ts

+36-3
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,7 @@ describe(transformLegacyStory.name, () => {
280280
`);
281281
});
282282

283-
it("leaves existing Story parameters untouched", async ({
284-
expect,
285-
}) => {
283+
it('leaves existing Story parameters untouched', async ({ expect }) => {
286284
const code = `
287285
<script context="module">
288286
import { Story } from "@storybook/addon-svelte-csf";
@@ -334,4 +332,39 @@ describe(transformLegacyStory.name, () => {
334332
</Story>"
335333
`);
336334
});
335+
336+
it('legacy `source` prop with template literal value is supported _(moved to parameters)_', async ({
337+
expect,
338+
}) => {
339+
const code = `
340+
<script context="module">
341+
import { Story } from "@storybook/addon-svelte-csf";
342+
</script>
343+
344+
<Story
345+
name="Default"
346+
source={\`
347+
<Foo bar />
348+
\`}
349+
>
350+
<h1>{"Test"}</h1>
351+
</Story>
352+
`;
353+
const component = await parseAndExtractSvelteNode<SvelteAST.Component>(code, 'Component');
354+
355+
expect(
356+
print(
357+
transformLegacyStory({
358+
component,
359+
state: { componentIdentifierName: {} },
360+
})
361+
)
362+
).toMatchInlineSnapshot(`
363+
"<Story name="Default" parameters={{
364+
docs: { source: { code: "\\n <Foo bar />\\n " } }
365+
}}>
366+
<h1>{"Test"}</h1>
367+
</Story>"
368+
`);
369+
});
337370
});

src/compiler/pre-transform/codemods/legacy-story.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -222,8 +222,14 @@ function getSourceValue(attribute: SvelteAST.Attribute): string | undefined {
222222
return;
223223
}
224224

225-
if (!Array.isArray(value) && value.expression.type === 'Literal') {
226-
return value.expression.value as string;
225+
if (!Array.isArray(value)) {
226+
if (value.expression.type === 'Literal' && typeof value.expression.value === 'string') {
227+
return value.expression.value;
228+
}
229+
230+
if (value.expression.type === 'TemplateLiteral') {
231+
return value.expression.quasis.map((q) => q.value.cooked).join('');
232+
}
227233
}
228234

229235
if (value[0].type === 'Text') {

tests/stories/LegacyStory.stories.svelte

+10
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,13 @@
5151
<Story name="Square" source args={{ rounded: false }}>
5252
{'Test'}
5353
</Story>
54+
55+
<Story
56+
name="TemplateLiterals"
57+
source={`
58+
<LegacyStory rounded={false} />
59+
`}
60+
args={{ rounded: false }}
61+
>
62+
{'Test'}
63+
</Story>

0 commit comments

Comments
 (0)