Skip to content

Commit 05b2353

Browse files
committed
fix: deepCopy should never merge arrays
1 parent df4b09f commit 05b2353

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

packages/shared/src/messages.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,21 +12,22 @@ export function deepCopy(src: any, des: any): void {
1212
while (stack.length) {
1313
const { src, des } = stack.pop()!
1414

15+
// using `Object.keys` which skips prototype properties
1516
Object.keys(src).forEach(key => {
1617
// if src[key] is an object/array, set des[key]
1718
// to empty object/array to prevent setting by reference
1819
if (isObject(src[key]) && !isObject(des[key])) {
1920
des[key] = Array.isArray(src[key]) ? [] : {}
2021
}
2122

22-
if (isObject(des[key]) && isObject(src[key])) {
23-
// src[key] and des[key] are both objects, merge them
24-
stack.push({ src: src[key], des: des[key] })
25-
} else {
23+
if (isNotObjectOrIsArray(des[key]) || isNotObjectOrIsArray(src[key])) {
2624
// replace with src[key] when:
2725
// src[key] or des[key] is not an object, or
2826
// src[key] or des[key] is an array
2927
des[key] = src[key]
28+
} else {
29+
// src[key] and des[key] are both objects, merge them
30+
stack.push({ src: src[key], des: des[key] })
3031
}
3132
})
3233
}

0 commit comments

Comments
 (0)