From 9905a6b8fd0bafd1f03499f1f13a4189dfda5a04 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 20 Jul 2025 22:33:14 -0700 Subject: [PATCH] fix: correctly transform `{@const foo = await ...}` --- .changeset/fluffy-ducks-happen.md | 5 +++++ .../phases/3-transform/client/visitors/ConstTag.js | 7 ++++--- 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 .changeset/fluffy-ducks-happen.md diff --git a/.changeset/fluffy-ducks-happen.md b/.changeset/fluffy-ducks-happen.md new file mode 100644 index 0000000000..0fc6fefc9e --- /dev/null +++ b/.changeset/fluffy-ducks-happen.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: correctly transform `{@const foo = await ...}` diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/ConstTag.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/ConstTag.js index 34acdd6bb9..ff1dde1130 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/ConstTag.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/ConstTag.js @@ -2,7 +2,7 @@ /** @import { AST } from '#compiler' */ /** @import { ComponentContext } from '../types' */ import { dev } from '../../../../state.js'; -import { extract_identifiers } from '../../../../utils/ast.js'; +import { extract_identifiers, is_expression_async } from '../../../../utils/ast.js'; import * as b from '#compiler/builders'; import { create_derived } from '../utils.js'; import { get_value } from './shared/declarations.js'; @@ -17,7 +17,7 @@ export function ConstTag(node, context) { // TODO we can almost certainly share some code with $derived(...) if (declaration.id.type === 'Identifier') { const init = build_expression(context, declaration.init, node.metadata.expression); - let expression = create_derived(context.state, b.thunk(init)); + let expression = create_derived(context.state, b.thunk(init, is_expression_async(init))); if (dev) { expression = b.call('$.tag', expression, b.literal(declaration.id.name)); @@ -58,7 +58,8 @@ export function ConstTag(node, context) { b.block([ b.const(/** @type {Pattern} */ (context.visit(declaration.id, child_state)), init), b.return(b.object(identifiers.map((node) => b.prop('init', node, node)))) - ]) + ]), + is_expression_async(init) ); let expression = create_derived(context.state, fn);