diff --git a/.changeset/poor-flies-serve.md b/.changeset/poor-flies-serve.md new file mode 100644 index 000000000000..1ac13a88abea --- /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..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 @@ -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