From 6651f5e236de1bc9c551ac83224b1d37f24e5ec2 Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Thu, 9 Oct 2025 10:41:19 +0200 Subject: [PATCH] fix: generate correct SSR code for the case where `pending` is an attribute --- .changeset/spicy-rabbits-drive.md | 5 +++++ .../phases/3-transform/server/visitors/SvelteBoundary.js | 7 +++++-- .../samples/boundary-pending-prop-async/_config.js | 3 +++ .../samples/boundary-pending-prop-async/_expected.html | 1 + .../samples/boundary-pending-prop-async/main.svelte | 8 ++++++++ 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 .changeset/spicy-rabbits-drive.md create mode 100644 packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_config.js create mode 100644 packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_expected.html create mode 100644 packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/main.svelte diff --git a/.changeset/spicy-rabbits-drive.md b/.changeset/spicy-rabbits-drive.md new file mode 100644 index 0000000000..01834294e1 --- /dev/null +++ b/.changeset/spicy-rabbits-drive.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: generate correct SSR code for the case where `pending` is an attribute diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteBoundary.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteBoundary.js index b272870ac3..41a18cf52d 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteBoundary.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteBoundary.js @@ -43,11 +43,14 @@ export function SvelteBoundary(node, context) { ); const pending = b.call(callee, b.id('$$renderer')); const block = /** @type {BlockStatement} */ (context.visit(node.fragment)); + const statement = node.fragment.metadata.has_await + ? create_async_block(b.block([block])) + : block; context.state.template.push( b.if( callee, - b.block(build_template([block_open_else, pending, block_close])), - b.block(build_template([block_open, block, block_close])) + b.block([b.stmt(pending)]), + b.block(build_template([block_open, statement, block_close])) ) ); } else { diff --git a/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_config.js b/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_config.js new file mode 100644 index 0000000000..f47bee71df --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_config.js @@ -0,0 +1,3 @@ +import { test } from '../../test'; + +export default test({}); diff --git a/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_expected.html b/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_expected.html new file mode 100644 index 0000000000..ac7cd985f1 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/_expected.html @@ -0,0 +1 @@ +Loading... \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/main.svelte b/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/main.svelte new file mode 100644 index 0000000000..7e0d4c62ea --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/boundary-pending-prop-async/main.svelte @@ -0,0 +1,8 @@ +{#snippet pending()} + Loading... +{/snippet} + + + {@const data = await Promise.resolve('hello')} +

{data}

+
\ No newline at end of file