fix(core): mergeDeep now can merge nulls (#4088)

This commit is contained in:
Yousef 2024-06-12 08:36:44 +02:00 committed by GitHub
parent 31f3746491
commit fe78faab55
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 48 additions and 7 deletions

View File

@ -5,14 +5,10 @@ export function mergeDeep(target: Record<string, any>, source: Record<string, an
if (isPlainObject(target) && isPlainObject(source)) {
Object.keys(source).forEach(key => {
if (isPlainObject(source[key])) {
if (!(key in target)) {
Object.assign(output, { [key]: source[key] })
} else {
output[key] = mergeDeep(target[key], source[key])
}
if (isPlainObject(source[key]) && isPlainObject(target[key])) {
output[key] = mergeDeep(target[key], source[key])
} else {
Object.assign(output, { [key]: source[key] })
output[key] = source[key]
}
})
}

View File

@ -19,6 +19,21 @@ describe('mergeDeep', () => {
expect(merged).to.deep.eq(result)
})
it('should merge when source has null value', () => {
const one = {
a: null,
}
const two = {
a: { c: 3 },
}
const result = {
a: { c: 3 },
}
const merged = mergeDeep(one, two)
expect(merged).to.deep.eq(result)
})
it('should not merge array', () => {
const one = {
a: [1],
@ -34,6 +49,36 @@ describe('mergeDeep', () => {
expect(merged).to.deep.eq(result)
})
it('should merge when source has null value', () => {
const one = {
a: null,
}
const two = {
a: { c: 3 },
}
const result = {
a: { c: 3 },
}
const merged = mergeDeep(one, two)
expect(merged).to.deep.eq(result)
})
it('should allow nulling a value', () => {
const one = {
a: { c: 3 },
}
const two = {
a: { c: null },
}
const result = {
a: { c: null },
}
const merged = mergeDeep(one, two)
expect(merged).to.deep.eq(result)
})
it('should merge deep', () => {
const one = {
a: 1,