diff --git a/.changeset/nervous-adults-sell.md b/.changeset/nervous-adults-sell.md new file mode 100644 index 0000000000..a7bad9bda8 --- /dev/null +++ b/.changeset/nervous-adults-sell.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: ensure `$store` reads are properly transformed diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js index dc30255a1a..f6fae339aa 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/Program.js @@ -42,11 +42,11 @@ export function Program(_, context) { for (const [name, binding] of context.state.scope.declarations) { if (binding.kind === 'store_sub') { - const store = /** @type {Expression} */ (context.visit(b.id(name.slice(1)))); + const get_store = () => /** @type {Expression} */ (context.visit(b.id(name.slice(1)))); context.state.transform[name] = { read: b.call, - assign: (_, value) => b.call('$.store_set', store, value), + assign: (_, value) => b.call('$.store_set', get_store(), value), mutate: (node, mutation) => { // We need to untrack the store read, for consistency with Svelte 4 const untracked = b.call('$.untrack', node); @@ -70,7 +70,7 @@ export function Program(_, context) { return b.call( '$.store_mutate', - store, + get_store(), b.assignment( mutation.operator, /** @type {MemberExpression} */ (