diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index 806f9a324a..c09784d2c2 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -90,7 +90,7 @@ export function proxy(value, onchange) { if (is_proxied_array) { // We need to create the length source eagerly to ensure that // mutations to the array are properly synced with our proxy - sources.set('length', source(/** @type {any[]} */ (value).length, onchange, stack)); + sources.set('length', source(/** @type {any[]} */ (value).length, stack)); } return new Proxy(/** @type {any} */ (value), { @@ -111,7 +111,7 @@ export function proxy(value, onchange) { var s = sources.get(prop); if (s === undefined) { - s = with_parent(() => source(descriptor.value, onchange, stack)); + s = with_parent(() => source(descriptor.value, stack)); sources.set(prop, s); } else { set( @@ -130,7 +130,7 @@ export function proxy(value, onchange) { if (prop in target) { sources.set( prop, - with_parent(() => source(UNINITIALIZED, onchange, stack)) + with_parent(() => source(UNINITIALIZED, stack)) ); } } else { @@ -182,9 +182,8 @@ export function proxy(value, onchange) { // create a source, but only if it's an own property and not a prototype property if (s === undefined && (!exists || get_descriptor(target, prop)?.writable)) { - let opt = onchange; s = with_parent(() => - source(proxy(exists ? target[prop] : UNINITIALIZED, opt), opt, stack) + source(proxy(exists ? target[prop] : UNINITIALIZED, onchange), stack) ); sources.set(prop, s); } @@ -243,8 +242,7 @@ export function proxy(value, onchange) { (active_effect !== null && (!has || get_descriptor(target, prop)?.writable)) ) { if (s === undefined) { - let opt = onchange; - s = with_parent(() => source(has ? proxy(target[prop], opt) : UNINITIALIZED, opt, stack)); + s = with_parent(() => source(has ? proxy(target[prop], onchange) : UNINITIALIZED, stack)); sources.set(prop, s); } @@ -283,7 +281,7 @@ export function proxy(value, onchange) { // If the item exists in the original, we need to create a uninitialized source, // else a later read of the property would result in a source being created with // the value of the original item at that index. - other_s = with_parent(() => source(UNINITIALIZED, onchange, stack)); + other_s = with_parent(() => source(UNINITIALIZED, stack)); sources.set(i + '', other_s); } } @@ -295,7 +293,7 @@ export function proxy(value, onchange) { // object property before writing to that property. if (s === undefined) { if (!has || get_descriptor(target, prop)?.writable) { - s = with_parent(() => source(undefined, onchange, stack)); + s = with_parent(() => source(undefined, stack)); sources.set(prop, s); } } else { diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index ef6d0405ec..6fc459c843 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -76,12 +76,11 @@ export function batch_onchange(fn) { /** * @template V * @param {V} v - * @param {() => void} [o] * @param {Error | null} [stack] * @returns {Source} */ // TODO rename this to `state` throughout the codebase -export function source(v, o, stack) { +export function source(v, stack) { /** @type {Value} */ var signal = { f: 0, // TODO ideally we could skip this altogether, but it causes type errors @@ -89,8 +88,7 @@ export function source(v, o, stack) { reactions: null, equals, rv: 0, - wv: 0, - o + wv: 0 }; if (DEV && tracing_mode_flag) { @@ -109,7 +107,8 @@ export function source(v, o, stack) { */ /*#__NO_SIDE_EFFECTS__*/ export function state(v, o, stack) { - const s = source(v, o, stack); + const s = source(v, stack); + if (o) s.o = o; push_reaction_value(s);