From 63e15711138f5efabdd94ca68f4204022173ca77 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 12 Sep 2025 07:42:37 -0400 Subject: [PATCH] simplify/fix --- packages/svelte/src/compiler/phases/1-parse/utils/create.js | 3 ++- .../compiler/phases/2-analyze/visitors/AwaitExpression.js | 6 +----- .../src/compiler/phases/2-analyze/visitors/Fragment.js | 4 +--- .../compiler/phases/3-transform/server/visitors/Fragment.js | 5 +---- .../phases/3-transform/server/visitors/RegularElement.js | 2 +- packages/svelte/src/compiler/types/template.d.ts | 2 +- 6 files changed, 7 insertions(+), 15 deletions(-) diff --git a/packages/svelte/src/compiler/phases/1-parse/utils/create.js b/packages/svelte/src/compiler/phases/1-parse/utils/create.js index 1a6f15aee7..0741abd7f2 100644 --- a/packages/svelte/src/compiler/phases/1-parse/utils/create.js +++ b/packages/svelte/src/compiler/phases/1-parse/utils/create.js @@ -1,4 +1,5 @@ /** @import { AST } from '#compiler' */ +import * as b from '#compiler/builders'; /** * @param {any} transparent @@ -13,7 +14,7 @@ export function create_fragment(transparent = false) { dynamic: false, has_await: false, // name is added later, after we've done scope analysis - hoisted_promises: { name: '', promises: [] } + hoisted_promises: { id: b.id('$$promises'), promises: [] } } }; } diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js index 12d78a9e44..5e449afb98 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js @@ -21,11 +21,7 @@ export function AwaitExpression(node, context) { const len = context.state.fragment.metadata.hoisted_promises.promises.push(node.argument); context.state.analysis.hoisted_promises.set( node.argument, - b.member( - b.id(context.state.fragment.metadata.hoisted_promises.name), - b.literal(len - 1), - true - ) + b.member(context.state.fragment.metadata.hoisted_promises.id, b.literal(len - 1), true) ); } diff --git a/packages/svelte/src/compiler/phases/2-analyze/visitors/Fragment.js b/packages/svelte/src/compiler/phases/2-analyze/visitors/Fragment.js index 3631468233..252936e067 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/Fragment.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/Fragment.js @@ -14,9 +14,7 @@ export function Fragment(node, context) { // and it works, so for now I'm doing it like this node.metadata.is_async = node.metadata.hoisted_promises.promises.length > 0; - if (node.metadata.hoisted_promises.promises.length > 1) { - node.metadata.hoisted_promises.name = context.state.scope.generate('promises'); - } else { + if (node.metadata.hoisted_promises.promises.length === 1) { // if there's only one promise in this fragment, we don't need to de-waterfall it context.state.analysis.hoisted_promises.delete(node.metadata.hoisted_promises.promises[0]); node.metadata.hoisted_promises.promises.length = 0; diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/Fragment.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/Fragment.js index 427a111024..5100ad34ad 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/Fragment.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/Fragment.js @@ -49,10 +49,7 @@ export function Fragment(node, context) { if (node.metadata.hoisted_promises.promises.length > 0) { return b.block([ - b.const( - node.metadata.hoisted_promises.name, - b.array(node.metadata.hoisted_promises.promises) - ), + b.const(node.metadata.hoisted_promises.id, b.array(node.metadata.hoisted_promises.promises)), ...state.init, call_child_payload(b.block(build_template(state.template)), true) ]); 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 86664f7d2f..8eaeddae99 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 @@ -195,7 +195,7 @@ export function RegularElement(node, context) { if (node.fragment.metadata.hoisted_promises.promises.length > 0) { state.template.push( b.const( - node.fragment.metadata.hoisted_promises.name, + node.fragment.metadata.hoisted_promises.id, b.array(node.fragment.metadata.hoisted_promises.promises) ) ); diff --git a/packages/svelte/src/compiler/types/template.d.ts b/packages/svelte/src/compiler/types/template.d.ts index aa989898fa..cded34688a 100644 --- a/packages/svelte/src/compiler/types/template.d.ts +++ b/packages/svelte/src/compiler/types/template.d.ts @@ -57,7 +57,7 @@ export namespace AST { */ dynamic: boolean; has_await: boolean; - hoisted_promises: { name: string; promises: Expression[] }; + hoisted_promises: { id: Identifier; promises: Expression[] }; }; }