@hemjs/gather
Version:
A lightweight library for collecting and merging configuration from multiple sources
28 lines (27 loc) • 946 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.merge = merge;
const notions_1 = require("@hemjs/notions");
function merge(target, ...sources) {
target = target || {};
for (let i = 0; i < sources.length; i++) {
const source = sources[i] || {};
for (const key in source) {
if (!(0, notions_1.isNil)(source[key])) {
let obj = target[key];
const value = source[key];
if (Array.isArray(value)) {
obj = (0, notions_1.isNil)(obj) ? [] : obj;
target[key] = obj.concat(value);
}
else if ((0, notions_1.isObject)(obj) && (0, notions_1.isObject)(value)) {
target[key] = { ...obj, ...value };
}
else {
target[key] = value;
}
}
}
}
return target;
}