From e862e5e044cb8d8cd143dfb058bdb9047c106f65 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Thu, 14 Aug 2025 11:40:39 -0700 Subject: [PATCH] try suggestion --- .../svelte/src/internal/client/dev/tracing.js | 7 ++-- packages/svelte/src/internal/client/proxy.js | 36 ++++++------------- .../src/internal/client/reactivity/sources.js | 2 +- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/packages/svelte/src/internal/client/dev/tracing.js b/packages/svelte/src/internal/client/dev/tracing.js index 06b0055cb9..673a710fac 100644 --- a/packages/svelte/src/internal/client/dev/tracing.js +++ b/packages/svelte/src/internal/client/dev/tracing.js @@ -179,7 +179,7 @@ export function get_stack(label) { */ export function tag(source, label) { source.label = label; - tag_proxy(source.v, label, source); + tag_proxy(source.v, label); return source; } @@ -187,11 +187,10 @@ export function tag(source, label) { /** * @param {unknown} value * @param {string} label - * @param {Value} source */ -export function tag_proxy(value, label, source) { +export function tag_proxy(value, label) { // @ts-expect-error - value?.[PROXY_PATH_SYMBOL]?.(label, source); + value?.[PROXY_PATH_SYMBOL]?.(label); return value; } diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index e39b8d6106..1c72ebc16f 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -34,13 +34,9 @@ const regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/; /** * @template T * @param {T} value - * @param {WeakSet} [owned_sources] * @returns {T} */ -export function proxy(value, owned_sources) { - if (DEV) { - owned_sources ??= new WeakSet(); - } +export function proxy(value) { // if non-proxyable, or is already a proxy, return `value` if (typeof value !== 'object' || value === null || STATE_SYMBOL in value) { return value; @@ -97,16 +93,11 @@ export function proxy(value, owned_sources) { /** Used in dev for $inspect.trace() */ var path = ''; - - /** - * @param {string} new_path - * @param {Source} updater the source causing the path update - */ - function update_path(new_path, updater) { - // there's a circular reference somewhere, don't update the path to avoid recursion - if (owned_sources?.has(updater)) { - return; - } + let updating = false; + /** @param {string} new_path */ + function update_path(new_path) { + if (updating) return; + updating = true; path = new_path; tag(version, `${path} version`); @@ -115,6 +106,7 @@ export function proxy(value, owned_sources) { for (const [prop, source] of sources) { tag(source, get_label(path, prop)); } + updating = false; } return new Proxy(/** @type {any} */ (value), { @@ -138,7 +130,6 @@ export function proxy(value, owned_sources) { sources.set(prop, s); if (DEV && typeof prop === 'string') { tag(s, get_label(path, prop)); - owned_sources?.add(s); } return s; }); @@ -160,7 +151,6 @@ export function proxy(value, owned_sources) { if (DEV) { tag(s, get_label(path, prop)); - owned_sources?.add(s); } } } else { @@ -186,12 +176,11 @@ export function proxy(value, owned_sources) { // 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)) { s = with_parent(() => { - var p = proxy(exists ? target[prop] : UNINITIALIZED, DEV ? owned_sources : undefined); + var p = proxy(exists ? target[prop] : UNINITIALIZED); var s = source(p, stack); if (DEV) { tag(s, get_label(path, prop)); - owned_sources?.add(s); } return s; @@ -245,12 +234,11 @@ export function proxy(value, owned_sources) { ) { if (s === undefined) { s = with_parent(() => { - var p = has ? proxy(target[prop], DEV ? owned_sources : undefined) : UNINITIALIZED; + var p = has ? proxy(target[prop]) : UNINITIALIZED; var s = source(p, stack); if (DEV) { tag(s, get_label(path, prop)); - owned_sources?.add(s); } return s; @@ -287,7 +275,6 @@ export function proxy(value, owned_sources) { if (DEV) { tag(other_s, get_label(path, i)); - owned_sources?.add(other_s); } } } @@ -300,19 +287,18 @@ export function proxy(value, owned_sources) { if (s === undefined) { if (!has || get_descriptor(target, prop)?.writable) { s = with_parent(() => source(undefined, stack)); - set(s, proxy(value, DEV ? owned_sources : undefined)); + set(s, proxy(value)); sources.set(prop, s); if (DEV) { tag(s, get_label(path, prop)); - owned_sources?.add(s); } } } else { has = s.v !== UNINITIALIZED; - var p = with_parent(() => proxy(value, DEV ? owned_sources : undefined)); + var p = with_parent(() => proxy(value)); set(s, p); } diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index 45582d4f9f..7fb3135708 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -156,7 +156,7 @@ export function set(source, value, should_proxy = false) { let new_value = should_proxy ? proxy(value) : value; if (DEV) { - tag_proxy(new_value, /** @type {string} */ (source.label), source); + tag_proxy(new_value, /** @type {string} */ (source.label)); } return internal_set(source, new_value);