Skip to content

Commit 81435f0

Browse files
committed
fix it, but not super confident
1 parent f9fce51 commit 81435f0

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

src/memoize.ts

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,18 @@ type Used = {
2121
};
2222
type Affected = WeakMap<object, Used>;
2323

24-
const trackMemoOriginalObjSet = new WeakSet<object>();
24+
const trackMemoUntrackedObjSet = new WeakSet<object>();
2525

2626
const isObject = (x: unknown): x is object =>
2727
typeof x === 'object' && x !== null;
2828

2929
const untrack = <T>(x: T, seen: WeakSet<object>): T => {
3030
if (!isObject(x)) return x;
31-
const originalObj = getUntracked(x);
32-
if (originalObj !== null) {
31+
const untrackedObj = getUntracked(x);
32+
if (untrackedObj) {
3333
trackMemo(x);
34-
trackMemoOriginalObjSet.add(originalObj);
35-
return originalObj;
34+
trackMemoUntrackedObjSet.add(untrackedObj);
35+
return untrackedObj;
3636
}
3737
if (!seen.has(x)) {
3838
seen.add(x);
@@ -46,11 +46,14 @@ const untrack = <T>(x: T, seen: WeakSet<object>): T => {
4646

4747
const touchAffected = (dst: unknown, src: unknown, affected: Affected) => {
4848
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;
5156
}
52-
const used = affected.get(getUntracked(src) || src);
53-
if (!used) return;
5457
used[HAS_KEY_PROPERTY]?.forEach((key) => {
5558
Reflect.has(dst, key);
5659
});

0 commit comments

Comments
 (0)