multiconf
Version:
Work with JSON configs
23 lines (21 loc) • 660 B
JavaScript
/**
* Deep-merge source into target. Later keys win; nested plain objects are merged recursively.
* Arrays are treated as scalar values (overwrite, not concat).
* @param {object} target
* @param {object} source
* @returns {object}
*/
function deepMerge(target, source) {
for (const key in source) {
if (
source[key] !== null && typeof source[key] === 'object' && !Array.isArray(source[key]) &&
target[key] !== null && typeof target[key] === 'object' && !Array.isArray(target[key])
) {
deepMerge(target[key], source[key]);
} else {
target[key] = source[key];
}
}
return target;
}
module.exports = deepMerge;