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 f896562431..9f43c57158 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js +++ b/packages/svelte/src/compiler/phases/2-analyze/visitors/AwaitExpression.js @@ -2,6 +2,7 @@ /** @import { Context } from '../types' */ import * as e from '../../../errors.js'; import * as b from '#compiler/builders'; +import { filename } from '../../../state.js'; /** * @param {AwaitExpression} node @@ -17,14 +18,12 @@ export function AwaitExpression(node, context) { context.state.fragment.metadata.has_await = true; } - if (context.state.async_hoist_boundary) { - const len = context.state.async_hoist_boundary.metadata.hoisted_promises.promises.push( - node.argument - ); + if (context.state.fragment) { + 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.async_hoist_boundary.metadata.hoisted_promises.name), + b.id(context.state.fragment.metadata.hoisted_promises.name), b.literal(len - 1), 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 1c9e76edbb..86664f7d2f 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 @@ -192,6 +192,15 @@ export function RegularElement(node, context) { ) ); } else { + if (node.fragment.metadata.hoisted_promises.promises.length > 0) { + state.template.push( + b.const( + node.fragment.metadata.hoisted_promises.name, + b.array(node.fragment.metadata.hoisted_promises.promises) + ) + ); + } + process_children(trimmed, { ...context, state }); } diff --git a/packages/svelte/src/compiler/phases/3-transform/server/visitors/TitleElement.js b/packages/svelte/src/compiler/phases/3-transform/server/visitors/TitleElement.js index 71e1cf4dae..531a7bf7d3 100644 --- a/packages/svelte/src/compiler/phases/3-transform/server/visitors/TitleElement.js +++ b/packages/svelte/src/compiler/phases/3-transform/server/visitors/TitleElement.js @@ -8,6 +8,15 @@ import { process_children, build_template, call_child_payload } from './shared/u * @param {ComponentContext} context */ export function TitleElement(node, context) { + if (node.fragment.metadata.hoisted_promises.promises.length > 0) { + context.state.init.push( + b.const( + node.fragment.metadata.hoisted_promises.name, + b.array(node.fragment.metadata.hoisted_promises.promises) + ) + ); + } + // title is guaranteed to contain only text/expression tag children const template = [b.literal('')]; process_children(node.fragment.nodes, { ...context, state: { ...context.state, template } });