From 34cbabfe51a070f6f914ecfebbe4c3aac11e5168 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sun, 2 Jul 2023 22:20:21 +0200 Subject: [PATCH] fix(deepMerge): override plain value --- src/object.test.ts | 5 +++++ src/object.ts | 9 ++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/object.test.ts b/src/object.test.ts index d8768a6..2cfe1c8 100644 --- a/src/object.test.ts +++ b/src/object.test.ts @@ -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 diff --git a/src/object.ts b/src/object.ts index 6698247..4bbec63 100644 --- a/src/object.ts +++ b/src/object.ts @@ -96,7 +96,14 @@ export function deepMerge(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