From 585293fc45edb829d1d14986d40f31b5a8e17d4c Mon Sep 17 00:00:00 2001 From: paoloricciuti Date: Thu, 16 Oct 2025 12:46:05 +0200 Subject: [PATCH] fix: add hydration markers in `pending` branch of SSR boundary --- .changeset/happy-numbers-stick.md | 5 +++++ .../3-transform/server/visitors/SvelteBoundary.js | 2 +- .../samples/boundary-pending-attribute/_config.js | 10 ++++++++++ .../samples/boundary-pending-attribute/_expected.html | 1 + .../samples/boundary-pending-attribute/main.svelte | 8 ++++++++ 5 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 .changeset/happy-numbers-stick.md create mode 100644 packages/svelte/tests/hydration/samples/boundary-pending-attribute/_config.js create mode 100644 packages/svelte/tests/hydration/samples/boundary-pending-attribute/_expected.html create mode 100644 packages/svelte/tests/hydration/samples/boundary-pending-attribute/main.svelte diff --git a/.changeset/happy-numbers-stick.md b/.changeset/happy-numbers-stick.md new file mode 100644 index 000000000000..12fbd68ad85d --- /dev/null +++ b/.changeset/happy-numbers-stick.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: add hydration markers in `pending` branch of SSR boundary 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 41a18cf52da6..45f1b5aad2b3 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 @@ -49,7 +49,7 @@ export function SvelteBoundary(node, context) { context.state.template.push( b.if( callee, - b.block([b.stmt(pending)]), + b.block(build_template([block_open_else, b.stmt(pending), block_close])), b.block(build_template([block_open, statement, block_close])) ) ); diff --git a/packages/svelte/tests/hydration/samples/boundary-pending-attribute/_config.js b/packages/svelte/tests/hydration/samples/boundary-pending-attribute/_config.js new file mode 100644 index 000000000000..eec39eb84cef --- /dev/null +++ b/packages/svelte/tests/hydration/samples/boundary-pending-attribute/_config.js @@ -0,0 +1,10 @@ +import { flushSync } from 'svelte'; +import { assert_ok, test } from '../../test'; + +export default test({ + compileOptions: { + experimental: { + async: true + } + } +}); diff --git a/packages/svelte/tests/hydration/samples/boundary-pending-attribute/_expected.html b/packages/svelte/tests/hydration/samples/boundary-pending-attribute/_expected.html new file mode 100644 index 000000000000..8b44c4cc91b9 --- /dev/null +++ b/packages/svelte/tests/hydration/samples/boundary-pending-attribute/_expected.html @@ -0,0 +1 @@ +loading... \ No newline at end of file diff --git a/packages/svelte/tests/hydration/samples/boundary-pending-attribute/main.svelte b/packages/svelte/tests/hydration/samples/boundary-pending-attribute/main.svelte new file mode 100644 index 000000000000..15612dd27eac --- /dev/null +++ b/packages/svelte/tests/hydration/samples/boundary-pending-attribute/main.svelte @@ -0,0 +1,8 @@ +{#snippet pending()} + loading... +{/snippet} + + + {@const data = await Promise.resolve("data")} + {data} + \ No newline at end of file