Skip to content

Commit e465cac

Browse files
committed
fix: add seen weakset during mergeDeep
1 parent 7085776 commit e465cac

File tree

1 file changed

+6
-2
lines changed

1 file changed

+6
-2
lines changed

src/utils.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import { isStringTextContainingNode } from 'typescript'
21
import type { Sucrose } from './sucrose'
32
import type { TraceHandler } from './trace'
43

@@ -59,14 +58,19 @@ export const mergeDeep = <
5958
skipKeys?: string[]
6059
override?: boolean
6160
mergeArray?: boolean
61+
seen?: WeakSet<object>
6262
}
6363
): A & B => {
6464
const skipKeys = options?.skipKeys
6565
const override = options?.override ?? true
6666
const mergeArray = options?.mergeArray ?? false
67+
const seen = options?.seen ?? new WeakSet<object>()
6768

6869
if (!isObject(target) || !isObject(source)) return target as A & B
6970

71+
if (seen.has(source)) return target as A & B
72+
seen.add(source)
73+
7074
for (const [key, value] of Object.entries(source)) {
7175
if (
7276
skipKeys?.includes(key) ||
@@ -98,7 +102,7 @@ export const mergeDeep = <
98102
target[key as keyof typeof target] = mergeDeep(
99103
(target as any)[key] as any,
100104
value,
101-
{ skipKeys, override, mergeArray }
105+
{ skipKeys, override, mergeArray, seen }
102106
)
103107
} catch {}
104108
}

0 commit comments

Comments
 (0)