From 87f7e979635baa46acb594ecc7f2822920cb7aaf Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Mon, 29 Sep 2025 08:05:13 -0700 Subject: [PATCH] fix: wrap async `children` in `$$renderer.async` (#16862) --- .changeset/rude-terms-confess.md | 5 +++++ .../phases/3-transform/server/visitors/shared/component.js | 7 ++++++- .../samples/async-children/_expected.html | 1 + .../samples/async-children/component.svelte | 4 ++++ .../samples/async-children/main.svelte | 7 +++++++ 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 .changeset/rude-terms-confess.md create mode 100644 packages/svelte/tests/server-side-rendering/samples/async-children/_expected.html create mode 100644 packages/svelte/tests/server-side-rendering/samples/async-children/component.svelte create mode 100644 packages/svelte/tests/server-side-rendering/samples/async-children/main.svelte diff --git a/.changeset/rude-terms-confess.md b/.changeset/rude-terms-confess.md new file mode 100644 index 0000000000..a24774952e --- /dev/null +++ b/.changeset/rude-terms-confess.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: wrap async `children` in `$$renderer.async` 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 d0de750c0e..e463ea785a 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 @@ -242,7 +242,12 @@ export function build_inline_component(node, expression, context) { params.push(pattern); } - const slot_fn = b.arrow(params, b.block(block.body)); + const slot_fn = b.arrow( + params, + node.fragment.metadata.has_await + ? b.block([create_async_block(b.block(block.body))]) + : b.block(block.body) + ); if (slot_name === 'default' && !has_children_prop) { if ( diff --git a/packages/svelte/tests/server-side-rendering/samples/async-children/_expected.html b/packages/svelte/tests/server-side-rendering/samples/async-children/_expected.html new file mode 100644 index 0000000000..04d9709792 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/async-children/_expected.html @@ -0,0 +1 @@ +1 \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/async-children/component.svelte b/packages/svelte/tests/server-side-rendering/samples/async-children/component.svelte new file mode 100644 index 0000000000..73b5a2f823 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/async-children/component.svelte @@ -0,0 +1,4 @@ + +{@render children()} \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/async-children/main.svelte b/packages/svelte/tests/server-side-rendering/samples/async-children/main.svelte new file mode 100644 index 0000000000..ae0fc571b3 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/async-children/main.svelte @@ -0,0 +1,7 @@ + + + {@const one = await 1} + {one} + \ No newline at end of file