diff --git a/.changeset/gorgeous-experts-perform.md b/.changeset/gorgeous-experts-perform.md new file mode 100644 index 000000000000..9c4673a341bc --- /dev/null +++ b/.changeset/gorgeous-experts-perform.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +fix: use `transform.read` for `ownership_validator.mutation` array diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js index bc79b760431c..3e255141af86 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/shared/utils.js @@ -324,15 +324,18 @@ export function validate_mutation(node, context, expression) { const state = /** @type {ComponentClientTransformState} */ (context.state); state.analysis.needs_mutation_validation = true; - /** @type {Array} */ + /** @type {Array} */ const path = []; while (left.type === 'MemberExpression') { if (left.property.type === 'Literal') { path.unshift(left.property); } else if (left.property.type === 'Identifier') { + const transform = Object.hasOwn(context.state.transform, left.property.name) + ? context.state.transform[left.property.name] + : null; if (left.computed) { - path.unshift(left.property); + path.unshift(transform?.read ? transform.read(left.property) : left.property); } else { path.unshift(b.literal(left.property.name)); } diff --git a/packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/_config.js b/packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/_config.js new file mode 100644 index 000000000000..95556f473784 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/_config.js @@ -0,0 +1,10 @@ +import { test } from '../../test'; + +export default test({ + compileOptions: { + dev: true + }, + async test({ assert, errors }) { + assert.deepEqual(errors, []); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/main.svelte b/packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/main.svelte new file mode 100644 index 000000000000..d834551221a1 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/ownership-invalid-mutation-use-transform/main.svelte @@ -0,0 +1,5 @@ + +