@@ -34,13 +34,9 @@ const regex_is_valid_identifier = /^[a-zA-Z_$][a-zA-Z_$0-9]*$/;
3434/**
3535 * @template T
3636 * @param {T } value
37- * @param {WeakSet<Source> } [owned_sources]
3837 * @returns {T }
3938 */
40- export function proxy ( value , owned_sources ) {
41- if ( DEV ) {
42- owned_sources ??= new WeakSet ( ) ;
43- }
39+ export function proxy ( value ) {
4440 // if non-proxyable, or is already a proxy, return `value`
4541 if ( typeof value !== 'object' || value === null || STATE_SYMBOL in value ) {
4642 return value ;
@@ -97,16 +93,11 @@ export function proxy(value, owned_sources) {
9793
9894 /** Used in dev for $inspect.trace() */
9995 var path = '' ;
100-
101- /**
102- * @param {string } new_path
103- * @param {Source } updater the source causing the path update
104- */
105- function update_path ( new_path , updater ) {
106- // there's a circular reference somewhere, don't update the path to avoid recursion
107- if ( owned_sources ?. has ( updater ) ) {
108- return ;
109- }
96+ let updating = false ;
97+ /** @param {string } new_path */
98+ function update_path ( new_path ) {
99+ if ( updating ) return ;
100+ updating = true ;
110101 path = new_path ;
111102
112103 tag ( version , `${ path } version` ) ;
@@ -115,6 +106,7 @@ export function proxy(value, owned_sources) {
115106 for ( const [ prop , source ] of sources ) {
116107 tag ( source , get_label ( path , prop ) ) ;
117108 }
109+ updating = false ;
118110 }
119111
120112 return new Proxy ( /** @type {any } */ ( value ) , {
@@ -138,7 +130,6 @@ export function proxy(value, owned_sources) {
138130 sources . set ( prop , s ) ;
139131 if ( DEV && typeof prop === 'string' ) {
140132 tag ( s , get_label ( path , prop ) ) ;
141- owned_sources ?. add ( s ) ;
142133 }
143134 return s ;
144135 } ) ;
@@ -160,7 +151,6 @@ export function proxy(value, owned_sources) {
160151
161152 if ( DEV ) {
162153 tag ( s , get_label ( path , prop ) ) ;
163- owned_sources ?. add ( s ) ;
164154 }
165155 }
166156 } else {
@@ -186,12 +176,11 @@ export function proxy(value, owned_sources) {
186176 // create a source, but only if it's an own property and not a prototype property
187177 if ( s === undefined && ( ! exists || get_descriptor ( target , prop ) ?. writable ) ) {
188178 s = with_parent ( ( ) => {
189- var p = proxy ( exists ? target [ prop ] : UNINITIALIZED , DEV ? owned_sources : undefined ) ;
179+ var p = proxy ( exists ? target [ prop ] : UNINITIALIZED ) ;
190180 var s = source ( p , stack ) ;
191181
192182 if ( DEV ) {
193183 tag ( s , get_label ( path , prop ) ) ;
194- owned_sources ?. add ( s ) ;
195184 }
196185
197186 return s ;
@@ -245,12 +234,11 @@ export function proxy(value, owned_sources) {
245234 ) {
246235 if ( s === undefined ) {
247236 s = with_parent ( ( ) => {
248- var p = has ? proxy ( target [ prop ] , DEV ? owned_sources : undefined ) : UNINITIALIZED ;
237+ var p = has ? proxy ( target [ prop ] ) : UNINITIALIZED ;
249238 var s = source ( p , stack ) ;
250239
251240 if ( DEV ) {
252241 tag ( s , get_label ( path , prop ) ) ;
253- owned_sources ?. add ( s ) ;
254242 }
255243
256244 return s ;
@@ -287,7 +275,6 @@ export function proxy(value, owned_sources) {
287275
288276 if ( DEV ) {
289277 tag ( other_s , get_label ( path , i ) ) ;
290- owned_sources ?. add ( other_s ) ;
291278 }
292279 }
293280 }
@@ -300,19 +287,18 @@ export function proxy(value, owned_sources) {
300287 if ( s === undefined ) {
301288 if ( ! has || get_descriptor ( target , prop ) ?. writable ) {
302289 s = with_parent ( ( ) => source ( undefined , stack ) ) ;
303- set ( s , proxy ( value , DEV ? owned_sources : undefined ) ) ;
290+ set ( s , proxy ( value ) ) ;
304291
305292 sources . set ( prop , s ) ;
306293
307294 if ( DEV ) {
308295 tag ( s , get_label ( path , prop ) ) ;
309- owned_sources ?. add ( s ) ;
310296 }
311297 }
312298 } else {
313299 has = s . v !== UNINITIALIZED ;
314300
315- var p = with_parent ( ( ) => proxy ( value , DEV ? owned_sources : undefined ) ) ;
301+ var p = with_parent ( ( ) => proxy ( value ) ) ;
316302 set ( s , p ) ;
317303 }
318304
0 commit comments