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