UNPKG

deepmerge-plus

Version:

A library for deep (recursive) merging of Javascript objects

73 lines (64 loc) 2.2 kB
import e from "is-mergeable-object"; function cloneUnlessOtherwiseSpecified(e, r, t) { const n = (!r || !1 !== r.clone) && _isMergeableObject(e, r, t); let a = 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 && (a = t.destination[t.key] || a), t.target && (a = t.target[t.key] || a), t.source && (a = t.source[t.key] || a)), a; } function _isMergeableObject(t, n, a) { var i; let l = null == n || null === (i = n.isMergeableObject) || void 0 === i ? void 0 : i.call(n, t, e, n, a); return null == l && (l = "boolean" == typeof (null == t ? void 0 : t[r]) ? t[r] : e(t)), l; } 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(a) { n[a] = cloneUnlessOtherwiseSpecified(e[a], t, { key: a, source: r, target: e, destination: n }); })), Object.keys(r).forEach((function(a) { n[a] = _isMergeableObject(r[a], t, { key: a, source: r, target: e }) && e[a] ? deepmerge(e[a], r[a], t) : cloneUnlessOtherwiseSpecified(r[a], t, { key: a, source: r, target: e }); })), n; }(e, r, t) : cloneUnlessOtherwiseSpecified(r, t, { target: e, source: r }); } function isMergeable(r) { return e(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); }), {}); } export { r as SYMBOL_IS_MERGEABLE, _isMergeableObject, deepmergeAll as all, deepmerge, deepmergeAll, deepmerge as default, isMergeable }; //# sourceMappingURL=index.esm.mjs.map