diff --git a/.changeset/kind-tigers-retire.md b/.changeset/kind-tigers-retire.md new file mode 100644 index 000000000000..432ff1858b4d --- /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 798cb02e49db..a869a8edf1ac 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 000000000000..e440e5c84258 --- /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 000000000000..1437ac8f14bd --- /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}