UNPKG

deepmerge-plus

Version:

用於深度(遞迴)合併 JavaScript 物件的函式庫 / A library for deep (recursive) merging of JavaScript objects

140 lines (130 loc) 4.19 kB
"use strict"; var e = require("is-mergeable-object"); function cloneUnlessOtherwiseSpecified(e, r, t, n) { const l = function _shouldClone(e) { return !1 !== (null == e ? void 0 : e.clone); }(r), o = l && _isMergeableObject(e, r, t, n); let i = o ? deepmerge(function emptyTarget(e) { return Array.isArray(e) ? [] : {}; }(e), e, r, n) : e; if (null != r && r.keyValueOrMode && !o && t && "key" in t && (t.destination && (i = t.destination[t.key] || i), t.target && (i = t.target[t.key] || i), t.source && (i = t.source[t.key] || i)), null != r && r.keyValueUpsertMode && !o && t && "key" in t) { let l = !1; if ("function" == typeof r.keyValueUpsertMode) l = r.keyValueUpsertMode(e, r, t, n); else if (!0 === r.keyValueUpsertMode) { var a; l = !function _isUndefined(e) { return void 0 === e; }(null === (a = t.target) || void 0 === a ? void 0 : a[t.key]); } if (l) { let e; t.destination && (null != e || (e = t.destination[t.key])), t.target && (null != e || (e = t.target[t.key])), i = e; } } return i; } function _isMergeableObject(t, n, l, o) { var i; let a = null == n || null === (i = n.isMergeableObject) || void 0 === i ? void 0 : i.call(n, t, e, n, l, o); return null == a && (a = "boolean" == typeof (null == t ? void 0 : t[r]) ? t[r] : e(t)), a; } function defaultArrayMerge(e, r, t, n) { null != n || (n = _newTmpRuntimeData([])); const l = n.level + 1, o = n.root, i = []; return n.parent[n.key] = i, e.concat(r).reduce((e, r, i) => (r = cloneUnlessOtherwiseSpecified(r, t, { key: i }, { level: l, paths: [ ...n.paths, i ], root: o, parent: e, key: i }), e[i] = r, e), i); } function deepmerge(e, r, t, n) { const l = Array.isArray(r), o = Array.isArray(e), i = function _handleOptions(e) { return e || {}; }(t); var a; return l === o ? l ? (null !== (a = null == i ? void 0 : i.arrayMerge) && void 0 !== a ? a : defaultArrayMerge)(e, r, t, n) : function mergeObject(e, r, t, n) { let l = {}; return n || (n = _newTmpRuntimeData(l)), _isMergeableObject(e, t, void 0, n) && Object.keys(e).forEach(function(o) { l[o] = cloneUnlessOtherwiseSpecified(e[o], t, { key: o, source: r, target: e, destination: l }, { level: n.level + 1, paths: [ ...n.paths, o ], root: n.root, parent: l, key: o }); }), Object.keys(r).forEach(function(o) { l[o] = _isMergeableObject(r[o], t, { key: o, source: r, target: e }, n) && e[o] ? deepmerge(e[o], r[o], t, { level: n.level + 1, paths: [ ...n.paths, o ], root: n.root, parent: l, key: o }) : cloneUnlessOtherwiseSpecified(r[o], t, { key: o, source: r, target: e }, { level: n.level + 1, paths: [ ...n.paths, o ], root: n.root, parent: l, key: o }); }), l; }(e, r, t, n) : cloneUnlessOtherwiseSpecified(r, t, { target: e, source: r }, n); } const r = /*#__PURE__*/ Symbol.for("SYMBOL_IS_MERGEABLE"); function _newTmpRuntimeData(e) { return { level: 0, paths: [], root: e, parent: e, key: void 0 }; } 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