Skip to content

Commit

Permalink
fix(deepMerge): override plain value
Browse files Browse the repository at this point in the history
  • Loading branch information
antfu committed Jul 2, 2023
1 parent c7bbe2d commit 34cbabf
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 1 deletion.
5 changes: 5 additions & 0 deletions src/object.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,11 @@ describe('deepMerge', () => {
const obj2 = { a: ['C'], b: ['D'] }
expect(deepMerge({}, obj1, obj2)).toEqual({ a: ['C'], b: ['D'] })
})
it('should overide plain value', () => {
const obj1 = { a: { x: 1 } }
const obj2 = { a: { x: { f: 2 } } } as any
expect(deepMerge({}, obj1, obj2)).toEqual({ a: { x: { f: 2 } } })
})

it('prototype pollution 1', () => {
const obj = {} as any
Expand Down
9 changes: 8 additions & 1 deletion src/object.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,14 @@ export function deepMerge<T extends object = object, S extends object = T>(targe
target[key] = {}

// @ts-expect-error
deepMerge(target[key], source[key])
if (isMergableObject(target[key])) {
// @ts-expect-error
deepMerge(target[key], source[key])
}
else {
// @ts-expect-error
target[key] = source[key]
}
}
else {
// @ts-expect-error
Expand Down

0 comments on commit 34cbabf

Please sign in to comment.