From 5d1ffcf413aa475dad2bdf975e907e2958615342 Mon Sep 17 00:00:00 2001 From: Yuki Ishii Date: Tue, 7 Oct 2025 23:27:30 +0900 Subject: [PATCH] fix: allow await in if block consequent and alternate (#16890) Closes #16885 --- .changeset/kind-tigers-retire.md | 5 +++++ .../phases/3-transform/server/visitors/IfBlock.js | 6 +++++- .../samples/async-if-const/_expected.html | 1 + .../samples/async-if-const/main.svelte | 10 ++++++++++ 4 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 .changeset/kind-tigers-retire.md create mode 100644 packages/svelte/tests/server-side-rendering/samples/async-if-const/_expected.html create mode 100644 packages/svelte/tests/server-side-rendering/samples/async-if-const/main.svelte diff --git a/.changeset/kind-tigers-retire.md b/.changeset/kind-tigers-retire.md new file mode 100644 index 0000000000..432ff1858b --- /dev/null +++ b/.changeset/kind-tigers-retire.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: allow await in if block consequent and alternate diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js index 798cb02e49..a869a8edf1 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/IfBlock.js @@ -23,7 +23,11 @@ export function IfBlock(node, context) { /** @type {Statement} */ let statement = b.if(test, consequent, alternate); - if (node.metadata.expression.has_await) { + if ( + node.metadata.expression.has_await || + node.consequent.metadata.has_await || + node.alternate?.metadata.has_await + ) { statement = create_async_block(b.block([statement])); } diff --git a/packages/svelte/tests/server-side-rendering/samples/async-if-const/_expected.html b/packages/svelte/tests/server-side-rendering/samples/async-if-const/_expected.html new file mode 100644 index 0000000000..e440e5c842 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/async-if-const/_expected.html @@ -0,0 +1 @@ +3 \ No newline at end of file diff --git a/packages/svelte/tests/server-side-rendering/samples/async-if-const/main.svelte b/packages/svelte/tests/server-side-rendering/samples/async-if-const/main.svelte new file mode 100644 index 0000000000..1437ac8f14 --- /dev/null +++ b/packages/svelte/tests/server-side-rendering/samples/async-if-const/main.svelte @@ -0,0 +1,10 @@ +{#if false} + {@const one = await 1} + {one} +{:else if false} + {@const two = await 2} + {two} +{:else} + {@const three = await 3} + {three} +{/if}