deepmerge-plus
Version:
A library for deep (recursive) merging of Javascript objects
89 lines (80 loc) • 2.7 kB
JavaScript
;
var e = require("is-mergeable-object");
function cloneUnlessOtherwiseSpecified(e, r, t) {
const n = (!r || !1 !== r.clone) && _isMergeableObject(e, r, t);
let l = n ? deepmerge(function emptyTarget(e) {
return Array.isArray(e) ? [] : {};
}(e), e, r) : e;
return null != r && r.keyValueOrMode && !n && t && "key" in t && (t.destination && (l = t.destination[t.key] || l),
t.target && (l = t.target[t.key] || l), t.source && (l = t.source[t.key] || l)),
l;
}
function _isMergeableObject(t, n, l) {
var i;
let a = null == n || null === (i = n.isMergeableObject) || void 0 === i ? void 0 : i.call(n, t, e, n, l);
return null == a && (a = "boolean" == typeof (null == t ? void 0 : t[r]) ? t[r] : e(t)),
a;
}
function defaultArrayMerge(e, r, t) {
return e.concat(r).map((function(e, r, n) {
return cloneUnlessOtherwiseSpecified(e, t, {
key: r
});
}));
}
function deepmerge(e, r, t) {
const n = Array.isArray(r);
return n === Array.isArray(e) ? n ? ((t || {
arrayMerge: defaultArrayMerge
}).arrayMerge || defaultArrayMerge)(e, r, t) : function mergeObject(e, r, t) {
let n = {};
return _isMergeableObject(e, t) && Object.keys(e).forEach((function(l) {
n[l] = cloneUnlessOtherwiseSpecified(e[l], t, {
key: l,
source: r,
target: e,
destination: n
});
})), Object.keys(r).forEach((function(l) {
n[l] = _isMergeableObject(r[l], t, {
key: l,
source: r,
target: e
}) && e[l] ? deepmerge(e[l], r[l], t) : cloneUnlessOtherwiseSpecified(r[l], t, {
key: l,
source: r,
target: e
});
})), n;
}(e, r, t) : cloneUnlessOtherwiseSpecified(r, t, {
target: e,
source: r
});
}
const r = Symbol.for("SYMBOL_IS_MERGEABLE");
function deepmergeAll(e, r) {
if (!Array.isArray(e)) throw new Error("first argument should be an array");
return e.reduce((function(e, t) {
return deepmerge(e, t, r);
}), {});
}
Object.defineProperty(deepmerge, "__esModule", {
value: !0
}), Object.defineProperty(deepmerge, "deepmerge", {
value: deepmerge
}), Object.defineProperty(deepmerge, "default", {
value: deepmerge
}), Object.defineProperty(deepmerge, "isMergeable", {
value: function isMergeable(r) {
return e(r);
}
}), Object.defineProperty(deepmerge, "SYMBOL_IS_MERGEABLE", {
value: r
}), Object.defineProperty(deepmerge, "deepmergeAll", {
value: deepmergeAll
}), Object.defineProperty(deepmerge, "all", {
value: deepmergeAll
}), Object.defineProperty(deepmerge, "_isMergeableObject", {
value: _isMergeableObject
}), module.exports = deepmerge;
//# sourceMappingURL=index.cjs.production.min.cjs.map