From 7e0ac2fcb84c3d1e9e524aa382d85188141cba9b Mon Sep 17 00:00:00 2001 From: yuki0418 Date: Sat, 27 Sep 2025 18:23:16 +0900 Subject: [PATCH 1/3] fix: allow await in svelte boundary without pending --- .changeset/poor-flies-serve.md | 5 +++++ .../3-transform/server/visitors/SvelteBoundary.js | 13 +++++++++++-- .../samples/async-svelte-boundary/_expected.html | 1 + .../samples/async-svelte-boundary/main.svelte | 4 ++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 .changeset/poor-flies-serve.md create mode 100644 packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/_expected.html create mode 100644 packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/main.svelte diff --git a/.changeset/poor-flies-serve.md b/.changeset/poor-flies-serve.md new file mode 100644 index 000000000000..7837e55dda00 --- /dev/null +++ b/.changeset/poor-flies-serve.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: allow await in svelte boundary without pending 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 b914c96f4e31..eaa594591ded 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 @@ -2,7 +2,13 @@ /** @import { AST } from '#compiler' */ /** @import { ComponentContext } from '../types' */ import * as b from '#compiler/builders'; -import { block_close, block_open, block_open_else, build_attribute_value } from './shared/utils.js'; +import { + block_close, + block_open, + block_open_else, + build_attribute_value, + create_async_block +} from './shared/utils.js'; /** * @param {AST.SvelteBoundary} node @@ -37,6 +43,9 @@ export function SvelteBoundary(node, context) { context.state.template.push(block_open_else, pending, block_close); } else { const block = /** @type {BlockStatement} */ (context.visit(node.fragment)); - context.state.template.push(block_open, block, block_close); + const statement = node.fragment.metadata.has_await + ? create_async_block(b.block([block])) + : block; + context.state.template.push(block_open, statement, block_close); } } diff --git a/packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/_expected.html b/packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/_expected.html new file mode 100644 index 000000000000..5be0be37f235 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/_expected.html @@ -0,0 +1 @@ +
this should work
\ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/main.svelte b/packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/main.svelte new file mode 100644 index 000000000000..c4cde60119c0 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/async-svelte-boundary/main.svelte @@ -0,0 +1,4 @@ + + {@const x = await 'this should work'} +
{x}
+
\ No newline at end of file From e9ad72a431d94df332c9597af98084f2a637d208 Mon Sep 17 00:00:00 2001 From: yuki0418 Date: Sat, 27 Sep 2025 18:25:04 +0900 Subject: [PATCH 2/3] fix changeset comment --- .changeset/poor-flies-serve.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/poor-flies-serve.md b/.changeset/poor-flies-serve.md index 7837e55dda00..1ac13a88abea 100644 --- a/.changeset/poor-flies-serve.md +++ b/.changeset/poor-flies-serve.md @@ -2,4 +2,4 @@ 'svelte': patch --- -fix: allow await in svelte boundary without pending +fix: allow await in svelte:boundary without pending From bde563b85827169ce240f369afc704164ce69f90 Mon Sep 17 00:00:00 2001 From: yuki0418 Date: Mon, 29 Sep 2025 09:24:36 +0900 Subject: [PATCH 3/3] fix format --- .../phases/3-transform/server/visitors/SvelteBoundary.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 eaa594591ded..39e6912be07d 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,7 +43,7 @@ export function SvelteBoundary(node, context) { context.state.template.push(block_open_else, pending, block_close); } else { const block = /** @type {BlockStatement} */ (context.visit(node.fragment)); - const statement = node.fragment.metadata.has_await + const statement = node.fragment.metadata.has_await ? create_async_block(b.block([block])) : block; context.state.template.push(block_open, statement, block_close);