@@ -21,18 +21,18 @@ type Used = {
21
21
} ;
22
22
type Affected = WeakMap < object , Used > ;
23
23
24
- const trackMemoOriginalObjSet = new WeakSet < object > ( ) ;
24
+ const trackMemoUntrackedObjSet = new WeakSet < object > ( ) ;
25
25
26
26
const isObject = ( x : unknown ) : x is object =>
27
27
typeof x === 'object' && x !== null ;
28
28
29
29
const untrack = < T > ( x : T , seen : WeakSet < object > ) : T => {
30
30
if ( ! isObject ( x ) ) return x ;
31
- const originalObj = getUntracked ( x ) ;
32
- if ( originalObj !== null ) {
31
+ const untrackedObj = getUntracked ( x ) ;
32
+ if ( untrackedObj ) {
33
33
trackMemo ( x ) ;
34
- trackMemoOriginalObjSet . add ( originalObj ) ;
35
- return originalObj ;
34
+ trackMemoUntrackedObjSet . add ( untrackedObj ) ;
35
+ return untrackedObj ;
36
36
}
37
37
if ( ! seen . has ( x ) ) {
38
38
seen . add ( x ) ;
@@ -46,11 +46,14 @@ const untrack = <T>(x: T, seen: WeakSet<object>): T => {
46
46
47
47
const touchAffected = ( dst : unknown , src : unknown , affected : Affected ) => {
48
48
if ( ! isObject ( dst ) || ! isObject ( src ) ) return ;
49
- if ( trackMemoOriginalObjSet . has ( getUntracked ( src ) as never ) ) {
50
- trackMemo ( dst ) ;
49
+ const untrackedObj = getUntracked ( src ) ;
50
+ const used = affected . get ( untrackedObj || src ) ;
51
+ if ( ! used ) {
52
+ if ( trackMemoUntrackedObjSet . has ( untrackedObj as never ) ) {
53
+ trackMemo ( dst ) ;
54
+ }
55
+ return ;
51
56
}
52
- const used = affected . get ( getUntracked ( src ) || src ) ;
53
- if ( ! used ) return ;
54
57
used [ HAS_KEY_PROPERTY ] ?. forEach ( ( key ) => {
55
58
Reflect . has ( dst , key ) ;
56
59
} ) ;
0 commit comments