Spaces:
Sleeping
Sleeping
const type = (obj) => { | |
if (obj === null) return 'null'; | |
if (Array.isArray(obj)) return 'array'; | |
if (typeof Blob !== 'undefined' && obj instanceof Blob) return 'blob'; | |
return typeof obj; | |
}; | |
const merge = (into, from) => { | |
const typeInto = type(into); | |
const typeFrom = type(from); | |
if (from === null && typeInto === 'blob') { | |
return into; | |
} | |
if (typeInto !== typeFrom || typeInto === 'undefined') { | |
return from; | |
} | |
if (typeInto === 'object') { | |
for (const key of Object.keys(from)) { | |
into[key] = merge(into[key], from[key]); | |
} | |
for (const key of Object.keys(into)) { | |
if (!Object.prototype.hasOwnProperty.call(from, key)) { | |
delete into[key]; | |
} | |
} | |
} | |
return into; | |
}; | |
export default merge; | |