From b2191c3657f45c4e5caee445f8f418a068b6924e Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Thu, 29 Jan 2026 19:28:36 -0500 Subject: [PATCH] fix: only create async functions in SSR output when necessary (#17593) * fix: only create async functions in SSR output when necessary * actually... * simplify generated code a bit more * simplify --- .changeset/hot-insects-stare.md | 5 +++++ .../server/visitors/RegularElement.js | 20 +++++++++---------- .../server/visitors/SvelteElement.js | 2 +- .../server/visitors/shared/utils.js | 5 ++--- 4 files changed, 18 insertions(+), 14 deletions(-) create mode 100644 .changeset/hot-insects-stare.md diff --git a/.changeset/hot-insects-stare.md b/.changeset/hot-insects-stare.md new file mode 100644 index 0000000000..fb4109c35e --- /dev/null +++ b/.changeset/hot-insects-stare.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: only create async functions in SSR output when necessary diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/RegularElement.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/RegularElement.js index 79858b95d9..5b905752f4 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/RegularElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/RegularElement.js @@ -70,8 +70,7 @@ export function RegularElement(node, context) { if (optimiser.expressions.length > 0) { context.state.template.push( create_child_block( - b.block([optimiser.apply(), ...state.init, ...build_template(state.template)]), - true + b.block([optimiser.apply(), ...state.init, ...build_template(state.template)]) ) ); } else { @@ -133,7 +132,7 @@ export function RegularElement(node, context) { if (optimiser.expressions.length > 0) { context.state.template.push( - create_child_block(b.block([optimiser.apply(), ...state.init, statement]), true) + create_child_block(b.block([optimiser.apply(), ...state.init, statement])) ); } else { context.state.template.push(...state.init, statement); @@ -186,7 +185,7 @@ export function RegularElement(node, context) { if (optimiser.expressions.length > 0) { context.state.template.push( - create_child_block(b.block([optimiser.apply(), ...state.init, statement]), true) + create_child_block(b.block([optimiser.apply(), ...state.init, statement])) ); } else { context.state.template.push(...state.init, statement); @@ -236,18 +235,19 @@ export function RegularElement(node, context) { } if (optimiser.is_async()) { - let statement = create_child_block( - b.block([optimiser.apply(), ...state.init, ...build_template(state.template)]), - true - ); + let statements = [...state.init, ...build_template(state.template)]; + + if (optimiser.has_await) { + statements = [create_child_block(b.block([optimiser.apply(), ...statements]))]; + } const blockers = optimiser.blockers(); if (blockers.elements.length > 0) { - statement = create_async_block(b.block([statement]), blockers, false, false); + statements = [create_async_block(b.block(statements), blockers, false, false)]; } - context.state.template.push(statement); + context.state.template.push(...statements); } else { context.state.init.push(...state.init); context.state.template.push(...state.template); diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js index 1ac15893f2..75ba323e20 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/SvelteElement.js @@ -79,7 +79,7 @@ export function SvelteElement(node, context) { ); if (optimiser.expressions.length > 0) { - statement = create_child_block(b.block([optimiser.apply(), statement]), true); + statement = create_child_block(b.block([optimiser.apply(), statement])); } statements.push(statement); diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js index 4736a7c5da..b02a935ed2 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/shared/utils.js @@ -264,11 +264,10 @@ export function build_getter(node, state) { /** * Creates a `$$renderer.child(...)` expression statement * @param {BlockStatement | Expression} body - * @param {boolean} async * @returns {Statement} */ -export function create_child_block(body, async) { - return b.stmt(b.call('$$renderer.child', b.arrow([b.id('$$renderer')], body, async))); +export function create_child_block(body) { + return b.stmt(b.call('$$renderer.child', b.arrow([b.id('$$renderer')], body, true))); } /**