From 2aa2f578344fee1ba937c063e8b07f00caaa996a Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 3 Dec 2024 14:47:30 -0500 Subject: [PATCH] fix --- .../client/visitors/AssignmentExpression.js | 10 +++++----- .../_config.js | 15 +++------------ .../main.svelte | 18 ------------------ 3 files changed, 8 insertions(+), 35 deletions(-) diff --git a/packages/svelte/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js b/packages/svelte/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js index c2528fa143..967e577ae2 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/visitors/AssignmentExpression.js @@ -83,6 +83,10 @@ function build_assignment(operator, left, right, context) { const path = context.path.map((node) => node.type); const is_primitive = path.at(-1) === 'BindDirective' && path.at(-2) === 'RegularElement'; + let value = /** @type {Expression} */ ( + context.visit(build_assignment_value(operator, left, right)) + ); + if ( !is_primitive && binding.kind !== 'prop' && @@ -93,13 +97,9 @@ function build_assignment(operator, left, right, context) { // other operators result in coercion ['=', '||=', '&&=', '??='].includes(operator) ) { - right = build_proxy_reassignment(right, object); + value = build_proxy_reassignment(value, object); } - let value = /** @type {Expression} */ ( - context.visit(build_assignment_value(operator, left, right)) - ); - return transform.assign(object, value); } diff --git a/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/_config.js b/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/_config.js index b1c60a1b5a..99d957e980 100644 --- a/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/_config.js @@ -2,24 +2,15 @@ import { flushSync } from 'svelte'; import { test } from '../../test'; export default test({ - html: ``, + html: ``, test({ assert, target }) { const [btn1, btn2] = target.querySelectorAll('button'); flushSync(() => btn1.click()); - assert.htmlEqual(target.innerHTML, ``); + assert.htmlEqual(target.innerHTML, ``); flushSync(() => btn1.click()); - assert.htmlEqual(target.innerHTML, ``); - - flushSync(() => btn2.click()); - assert.htmlEqual(target.innerHTML, ``); - - flushSync(() => btn2.click()); - assert.htmlEqual( - target.innerHTML, - `` - ); + assert.htmlEqual(target.innerHTML, ``); } }); diff --git a/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/main.svelte b/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/main.svelte index caa50d6ca4..84c1c32c5c 100644 --- a/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/proxy-nullish-coalescing-assignment/main.svelte @@ -1,25 +1,7 @@ - -