From 58820a67c8a061ebf2be2a49b0f37fa953c54b73 Mon Sep 17 00:00:00 2001 From: ComputerGuy <63362464+Ocean-OS@users.noreply.github.com> Date: Sun, 1 Jun 2025 13:18:29 -0700 Subject: [PATCH] fix --- .../svelte/src/internal/client/constants.js | 6 +++++- packages/svelte/src/internal/client/proxy.js | 20 ++++++++++++------- .../src/internal/client/reactivity/sources.js | 7 +++++-- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/packages/svelte/src/internal/client/constants.js b/packages/svelte/src/internal/client/constants.js index 98cef658bf..0dcda13dbf 100644 --- a/packages/svelte/src/internal/client/constants.js +++ b/packages/svelte/src/internal/client/constants.js @@ -22,7 +22,11 @@ export const HEAD_EFFECT = 1 << 19; export const EFFECT_HAS_DERIVED = 1 << 20; export const EFFECT_IS_UPDATING = 1 << 21; +export const PROXY_PRESERVE_PATH = 1 << 1; +export const PROXY_CHANGE_PATH = 1 << 2; +export const PROXY_REMOVE_PATH = 1 << 3; + export const STATE_SYMBOL = Symbol('$state'); export const LEGACY_PROPS = Symbol('legacy props'); export const LOADING_ATTR_SYMBOL = Symbol(''); -export const PROXY_PATH_SYMBOL = Symbol('proxy path'); +export const PROXY_PATH_SYMBOL = Symbol('proxy path'); \ No newline at end of file diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index cc866a513a..33386777b7 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -9,7 +9,13 @@ import { object_prototype } from '../shared/utils.js'; import { state as source, set } from './reactivity/sources.js'; -import { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants'; +import { + PROXY_CHANGE_PATH, + PROXY_PATH_SYMBOL, + PROXY_PRESERVE_PATH, + PROXY_REMOVE_PATH, + STATE_SYMBOL +} from '#client/constants'; import { UNINITIALIZED } from '../../constants.js'; import * as e from './errors.js'; import { get_stack, tag_source } from './dev/tracing.js'; @@ -19,20 +25,20 @@ import { tracing_mode_flag } from '../flags/index.js'; * @template T * @param {T} value * @param {string} [path] - * @param {boolean} [preserve_path] + * @param {number} [path_preservation] * @returns {T} */ -export function proxy(value, path, preserve_path = true) { +export function proxy(value, path, path_preservation = PROXY_PRESERVE_PATH) { // if `DEV`, change the proxy `path` since we don't know if its still "owned" by its original source if ( DEV && - !preserve_path && + (path_preservation & PROXY_PRESERVE_PATH) === 0 && typeof value === 'object' && value !== null && STATE_SYMBOL in value && PROXY_PATH_SYMBOL in value ) { - value[PROXY_PATH_SYMBOL] = '[$state proxy]'; + value[PROXY_PATH_SYMBOL] = (path_preservation & PROXY_CHANGE_PATH) === 0 ? '[$state proxy]' : path; } // if non-proxyable, or is already a proxy, return `value` if (typeof value !== 'object' || value === null || STATE_SYMBOL in value) { @@ -257,7 +263,7 @@ export function proxy(value, path, preserve_path = true) { s = DEV ? tag_source(s, to_trace_name(prop)) : s; set( s, - with_parent(() => proxy(value, to_trace_name(prop))) + with_parent(() => proxy(value, to_trace_name(prop), PROXY_CHANGE_PATH)) ); sources.set(prop, s); } @@ -265,7 +271,7 @@ export function proxy(value, path, preserve_path = true) { has = s.v !== UNINITIALIZED; set( s, - with_parent(() => proxy(value, to_trace_name(prop))) + with_parent(() => proxy(value, to_trace_name(prop), PROXY_CHANGE_PATH)) ); } diff --git a/packages/svelte/src/internal/client/reactivity/sources.js b/packages/svelte/src/internal/client/reactivity/sources.js index 23a0e913f1..847f14d2ec 100644 --- a/packages/svelte/src/internal/client/reactivity/sources.js +++ b/packages/svelte/src/internal/client/reactivity/sources.js @@ -27,7 +27,8 @@ import { UNOWNED, MAYBE_DIRTY, BLOCK_EFFECT, - ROOT_EFFECT + ROOT_EFFECT, + PROXY_REMOVE_PATH } from '#client/constants'; import * as e from '../errors.js'; import { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js'; @@ -139,7 +140,9 @@ export function set(source, value, should_proxy = false) { e.state_unsafe_mutation(); } - let new_value = should_proxy ? proxy(value, DEV ? source.trace_name : undefined, DEV ? false : undefined) : value; + let new_value = should_proxy + ? proxy(value, DEV ? source.trace_name : undefined, DEV ? PROXY_REMOVE_PATH : undefined) + : value; return internal_set(source, new_value); }