Skip to content

Commit 58820a6

Browse files
committed
fix
1 parent 4d5a28f commit 58820a6

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

packages/svelte/src/internal/client/constants.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ export const HEAD_EFFECT = 1 << 19;
2222
export const EFFECT_HAS_DERIVED = 1 << 20;
2323
export const EFFECT_IS_UPDATING = 1 << 21;
2424

25+
export const PROXY_PRESERVE_PATH = 1 << 1;
26+
export const PROXY_CHANGE_PATH = 1 << 2;
27+
export const PROXY_REMOVE_PATH = 1 << 3;
28+
2529
export const STATE_SYMBOL = Symbol('$state');
2630
export const LEGACY_PROPS = Symbol('legacy props');
2731
export const LOADING_ATTR_SYMBOL = Symbol('');
28-
export const PROXY_PATH_SYMBOL = Symbol('proxy path');
32+
export const PROXY_PATH_SYMBOL = Symbol('proxy path');

packages/svelte/src/internal/client/proxy.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,13 @@ import {
99
object_prototype
1010
} from '../shared/utils.js';
1111
import { state as source, set } from './reactivity/sources.js';
12-
import { PROXY_PATH_SYMBOL, STATE_SYMBOL } from '#client/constants';
12+
import {
13+
PROXY_CHANGE_PATH,
14+
PROXY_PATH_SYMBOL,
15+
PROXY_PRESERVE_PATH,
16+
PROXY_REMOVE_PATH,
17+
STATE_SYMBOL
18+
} from '#client/constants';
1319
import { UNINITIALIZED } from '../../constants.js';
1420
import * as e from './errors.js';
1521
import { get_stack, tag_source } from './dev/tracing.js';
@@ -19,20 +25,20 @@ import { tracing_mode_flag } from '../flags/index.js';
1925
* @template T
2026
* @param {T} value
2127
* @param {string} [path]
22-
* @param {boolean} [preserve_path]
28+
* @param {number} [path_preservation]
2329
* @returns {T}
2430
*/
25-
export function proxy(value, path, preserve_path = true) {
31+
export function proxy(value, path, path_preservation = PROXY_PRESERVE_PATH) {
2632
// if `DEV`, change the proxy `path` since we don't know if its still "owned" by its original source
2733
if (
2834
DEV &&
29-
!preserve_path &&
35+
(path_preservation & PROXY_PRESERVE_PATH) === 0 &&
3036
typeof value === 'object' &&
3137
value !== null &&
3238
STATE_SYMBOL in value &&
3339
PROXY_PATH_SYMBOL in value
3440
) {
35-
value[PROXY_PATH_SYMBOL] = '[$state proxy]';
41+
value[PROXY_PATH_SYMBOL] = (path_preservation & PROXY_CHANGE_PATH) === 0 ? '[$state proxy]' : path;
3642
}
3743
// if non-proxyable, or is already a proxy, return `value`
3844
if (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {
@@ -257,15 +263,15 @@ export function proxy(value, path, preserve_path = true) {
257263
s = DEV ? tag_source(s, to_trace_name(prop)) : s;
258264
set(
259265
s,
260-
with_parent(() => proxy(value, to_trace_name(prop)))
266+
with_parent(() => proxy(value, to_trace_name(prop), PROXY_CHANGE_PATH))
261267
);
262268
sources.set(prop, s);
263269
}
264270
} else {
265271
has = s.v !== UNINITIALIZED;
266272
set(
267273
s,
268-
with_parent(() => proxy(value, to_trace_name(prop)))
274+
with_parent(() => proxy(value, to_trace_name(prop), PROXY_CHANGE_PATH))
269275
);
270276
}
271277

packages/svelte/src/internal/client/reactivity/sources.js

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ import {
2727
UNOWNED,
2828
MAYBE_DIRTY,
2929
BLOCK_EFFECT,
30-
ROOT_EFFECT
30+
ROOT_EFFECT,
31+
PROXY_REMOVE_PATH
3132
} from '#client/constants';
3233
import * as e from '../errors.js';
3334
import { legacy_mode_flag, tracing_mode_flag } from '../../flags/index.js';
@@ -139,7 +140,9 @@ export function set(source, value, should_proxy = false) {
139140
e.state_unsafe_mutation();
140141
}
141142

142-
let new_value = should_proxy ? proxy(value, DEV ? source.trace_name : undefined, DEV ? false : undefined) : value;
143+
let new_value = should_proxy
144+
? proxy(value, DEV ? source.trace_name : undefined, DEV ? PROXY_REMOVE_PATH : undefined)
145+
: value;
143146

144147
return internal_set(source, new_value);
145148
}

0 commit comments

Comments
 (0)