From c056f887780404bca2ea664c286b6f6768929fbf Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 8 Jul 2024 15:18:44 -0400 Subject: [PATCH] make all proxies immutable --- packages/svelte/src/internal/client/proxy.js | 15 ++++++--------- packages/svelte/src/internal/client/types.d.ts | 2 -- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/packages/svelte/src/internal/client/proxy.js b/packages/svelte/src/internal/client/proxy.js index 78d835dec4..2aebc35d6d 100644 --- a/packages/svelte/src/internal/client/proxy.js +++ b/packages/svelte/src/internal/client/proxy.js @@ -11,7 +11,7 @@ import { object_prototype } from './utils.js'; import { check_ownership, widen_ownership } from './dev/ownership.js'; -import { mutable_source, source, set } from './reactivity/sources.js'; +import { source, set } from './reactivity/sources.js'; import { STATE_FROZEN_SYMBOL, STATE_SYMBOL } from './constants.js'; import { UNINITIALIZED } from '../../constants.js'; import * as e from './errors.js'; @@ -19,7 +19,7 @@ import * as e from './errors.js'; /** * @template T * @param {T} value - * @param {boolean} [immutable] + * @param {true} [immutable] * @param {import('#client').ProxyMetadata | null} [parent] * @param {import('#client').Source} [prev] dev mode only * @returns {import('#client').ProxyStateObject | T} @@ -59,7 +59,6 @@ export function proxy(value, immutable = true, parent = null, prev) { s: new Map(), v: source(0), a: is_array(value), - i: immutable, p: proxy, t: value }), @@ -169,7 +168,7 @@ const state_proxy_handler = { const metadata = target[STATE_SYMBOL]; const s = metadata.s.get(prop); - if (s !== undefined) set(s, proxy(descriptor.value, metadata.i, metadata)); + if (s !== undefined) set(s, proxy(descriptor.value, true, metadata)); } return Reflect.defineProperty(target, prop, descriptor); @@ -215,7 +214,7 @@ const state_proxy_handler = { // create a source, but only if it's an own property and not a prototype property if (s === undefined && (!(prop in target) || get_descriptor(target, prop)?.writable)) { - s = (metadata.i ? source : mutable_source)(proxy(target[prop], metadata.i, metadata)); + s = source(proxy(target[prop], true, metadata)); metadata.s.set(prop, s); } @@ -256,9 +255,7 @@ const state_proxy_handler = { (current_effect !== null && (!has || get_descriptor(target, prop)?.writable)) ) { if (s === undefined) { - s = (metadata.i ? source : mutable_source)( - has ? proxy(target[prop], metadata.i, metadata) : UNINITIALIZED - ); + s = source(has ? proxy(target[prop], true, metadata) : UNINITIALIZED); metadata.s.set(prop, s); } const value = get(s); @@ -283,7 +280,7 @@ const state_proxy_handler = { s = metadata.s.get(prop); } if (s !== undefined) { - set(s, proxy(value, metadata.i, metadata)); + set(s, proxy(value, true, metadata)); } const is_array = metadata.a; const not_has = !(prop in target); diff --git a/packages/svelte/src/internal/client/types.d.ts b/packages/svelte/src/internal/client/types.d.ts index 0d2d5a29c2..78b1d8d6fd 100644 --- a/packages/svelte/src/internal/client/types.d.ts +++ b/packages/svelte/src/internal/client/types.d.ts @@ -180,8 +180,6 @@ export interface ProxyMetadata> { v: Source; /** `true` if the proxified object is an array */ a: boolean; - /** Immutable: Whether to use a source or mutable source under the hood */ - i: boolean; /** The associated proxy */ p: ProxyStateObject; /** The original target this proxy was created for */