tweak implementation

pull/16126/head
Rich Harris 3 months ago
parent 9307ad5e11
commit 016f02b721

@ -22,15 +22,9 @@ const regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;
* @template T * @template T
* @param {T} value * @param {T} value
* @param {string} [path] * @param {string} [path]
* @param {boolean} change_path
* @returns {T} * @returns {T}
*/ */
export function proxy(value, path, change_path = false) { export function proxy(value, path) {
if (DEV && change_path) {
// @ts-expect-error
value?.[PROXY_PATH_SYMBOL]?.(path);
}
// if non-proxyable, or is already a proxy, return `value` // if non-proxyable, or is already a proxy, return `value`
if (typeof value !== 'object' || value === null || STATE_SYMBOL in value) { if (typeof value !== 'object' || value === null || STATE_SYMBOL in value) {
return value; return value;
@ -261,19 +255,28 @@ export function proxy(value, path, change_path = false) {
if (s === undefined) { if (s === undefined) {
if (!has || get_descriptor(target, prop)?.writable) { if (!has || get_descriptor(target, prop)?.writable) {
s = with_parent(() => source(undefined, stack)); s = with_parent(() => source(undefined, stack));
s = DEV ? tag(s, to_trace_name(prop)) : s; var p = with_parent(() => proxy(value, to_trace_name(prop)));
set(
s, if (DEV) {
with_parent(() => proxy(value, to_trace_name(prop), true)) var label = to_trace_name(prop);
); tag(s, label);
p?.[PROXY_PATH_SYMBOL]?.(label);
}
set(s, p);
sources.set(prop, s); sources.set(prop, s);
} }
} else { } else {
has = s.v !== UNINITIALIZED; has = s.v !== UNINITIALIZED;
set(
s, p = with_parent(() => proxy(value, to_trace_name(prop)));
with_parent(() => proxy(value, to_trace_name(prop), true))
); if (DEV) {
label = to_trace_name(prop);
p?.[PROXY_PATH_SYMBOL]?.(label);
}
set(s, p);
} }
var descriptor = Reflect.getOwnPropertyDescriptor(target, prop); var descriptor = Reflect.getOwnPropertyDescriptor(target, prop);

Loading…
Cancel
Save