From 8faa178cd7fa1751e7c4890ad1869d9c66160fea Mon Sep 17 00:00:00 2001 From: Paolo Ricciuti Date: Fri, 6 Jun 2025 23:02:07 +0200 Subject: [PATCH] fix: visit expression when destructuring state declarations (#16081) --- .changeset/hip-penguins-unite.md | 5 +++++ .../3-transform/client/visitors/VariableDeclaration.js | 2 +- .../samples/destructure-state-from-props/Child.svelte | 6 ++++++ .../samples/destructure-state-from-props/_config.js | 5 +++++ .../samples/destructure-state-from-props/main.svelte | 5 +++++ 5 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 .changeset/hip-penguins-unite.md create mode 100644 packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/Child.svelte create mode 100644 packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/main.svelte diff --git a/.changeset/hip-penguins-unite.md b/.changeset/hip-penguins-unite.md new file mode 100644 index 0000000000..79fd69c24a --- /dev/null +++ b/.changeset/hip-penguins-unite.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: visit expression when destructuring state declarations diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/VariableDeclaration.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/VariableDeclaration.js index e717077917..b8d692698d 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/VariableDeclaration.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/VariableDeclaration.js @@ -148,7 +148,7 @@ export function VariableDeclaration(node, context) { const { inserts, paths } = extract_paths(declarator.id, tmp); declarations.push( - b.declarator(tmp, value), + b.declarator(tmp, /** @type {Expression} */ (context.visit(value))), ...inserts.map(({ id, value }) => { id.name = context.state.scope.generate('$$array'); context.state.transform[id.name] = { read: get_value }; diff --git a/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/Child.svelte b/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/Child.svelte new file mode 100644 index 0000000000..0996a02b60 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/Child.svelte @@ -0,0 +1,6 @@ + + +{foo} \ No newline at end of file diff --git a/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/_config.js b/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/_config.js new file mode 100644 index 0000000000..345654535b --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/_config.js @@ -0,0 +1,5 @@ +import { test } from '../../test'; + +export default test({ + html: `bar` +}); diff --git a/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/main.svelte b/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/main.svelte new file mode 100644 index 0000000000..518f733144 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/destructure-state-from-props/main.svelte @@ -0,0 +1,5 @@ + + + \ No newline at end of file