@modern-js/libuild-utils
Version:
utils for libuild
29 lines (28 loc) • 939 B
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.deepMerge = void 0;
const assert_1 = require("./assert");
function deepMerge(lower, higher) {
if (arguments.length !== 2 || !(0, assert_1.isObject)(lower) || !(0, assert_1.isObject)(higher)) {
throw Error(`${lower} and ${higher} must be Object`);
}
const merged = { ...lower };
for (const key in higher) {
const value = higher[key];
if (value == null) {
continue;
}
const existing = merged[key];
if (Array.isArray(existing) && Array.isArray(value)) {
merged[key] = [...existing, ...value];
}
else if ((0, assert_1.isObject)(existing) && (0, assert_1.isObject)(value)) {
merged[key] = deepMerge(existing, value);
}
else {
merged[key] = value;
}
}
return merged;
}
exports.deepMerge = deepMerge;