diff --git a/.changeset/purple-guests-punch.md b/.changeset/purple-guests-punch.md new file mode 100644 index 0000000000..f18a1962d6 --- /dev/null +++ b/.changeset/purple-guests-punch.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: handle false dynamic components in SSR diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/component.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/component.js index a90b5e41df..cfd9a27d7b 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/component.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/component.js @@ -295,22 +295,18 @@ export function build_inline_component(node, expression, context) { b.array(props_and_spreads.map((p) => (Array.isArray(p) ? b.object(p) : p))) ); + const dynamic = + node.type === 'SvelteComponent' || (node.type === 'Component' && node.metadata.dynamic); + /** @type {Statement} */ let statement = b.stmt( - (node.type === 'SvelteComponent' ? b.maybe_call : b.call)( - expression, - b.id('$$renderer'), - props_expression - ) + (dynamic ? b.maybe_call : b.call)(expression, b.id('$$renderer'), props_expression) ); if (snippet_declarations.length > 0) { statement = b.block([...snippet_declarations, statement]); } - const dynamic = - node.type === 'SvelteComponent' || (node.type === 'Component' && node.metadata.dynamic); - if (custom_css_props.length > 0) { statement = b.stmt( b.call( diff --git a/packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/_expected.html b/packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/_expected.html new file mode 100644 index 0000000000..d87d3602f8 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/_expected.html @@ -0,0 +1 @@ +

Test

\ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/main.svelte b/packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/main.svelte new file mode 100644 index 0000000000..ee6dabc9aa --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/falsy-dynamic-component/main.svelte @@ -0,0 +1,6 @@ + + +

Test

+ \ No newline at end of file