deepmerge-plus
Version:
用於深度(遞迴)合併 JavaScript 物件的函式庫 / A library for deep (recursive) merging of JavaScript objects
150 lines (149 loc) • 5.51 kB
JavaScript
!function(e, r) {
"object" == typeof exports && "undefined" != typeof module ? r(exports, require("is-mergeable-object")) : "function" == typeof define && define.amd ? define([ "exports", "is-mergeable-object" ], r) : r((e = "undefined" != typeof globalThis ? globalThis : e || self).DeepmergePlus = {}, e.isMergeableObject);
}(this, function(e, r) {
"use strict";
function _shouldClone(e) {
return !1 !== (null == e ? void 0 : e.clone);
}
function cloneUnlessOtherwiseSpecified(e, r, t, n) {
const l = _shouldClone(r) && _isMergeableObject(e, r, t, n);
let i = l ? deepmerge(function emptyTarget(e) {
return Array.isArray(e) ? [] : {};
}(e), e, r, n) : e;
if (null != r && r.keyValueOrMode && !l && 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 && !l && 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 o;
l = !_isUndefined(null === (o = t.target) || void 0 === o ? void 0 : o[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 _isUndefined(e) {
return void 0 === e;
}
function _isMergeableObject(e, n, l, i) {
var o;
let a = null == n || null === (o = n.isMergeableObject) || void 0 === o ? void 0 : o.call(n, e, r, n, l, i);
return null == a && (a = "boolean" == typeof (null == e ? void 0 : e[t]) ? e[t] : r(e)),
a;
}
function defaultArrayMerge(e, r, t, n) {
null != n || (n = _newTmpRuntimeData([]));
const l = n.level + 1, i = n.root, o = [];
return n.parent[n.key] = o, e.concat(r).reduce((e, r, o) => (r = cloneUnlessOtherwiseSpecified(r, t, {
key: o
}, {
level: l,
paths: [ ...n.paths, o ],
root: i,
parent: e,
key: o
}), e[o] = r, e), o);
}
function _handleOptions(e) {
return e || {};
}
function deepmerge(e, r, t, n) {
const l = Array.isArray(r), i = Array.isArray(e), o = _handleOptions(t);
var a;
return l === i ? l ? (null !== (a = null == o ? void 0 : o.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(i) {
l[i] = cloneUnlessOtherwiseSpecified(e[i], t, {
key: i,
source: r,
target: e,
destination: l
}, {
level: n.level + 1,
paths: [ ...n.paths, i ],
root: n.root,
parent: l,
key: i
});
}), Object.keys(r).forEach(function(i) {
l[i] = _isMergeableObject(r[i], t, {
key: i,
source: r,
target: e
}, n) && e[i] ? deepmerge(e[i], r[i], t, {
level: n.level + 1,
paths: [ ...n.paths, i ],
root: n.root,
parent: l,
key: i
}) : cloneUnlessOtherwiseSpecified(r[i], t, {
key: i,
source: r,
target: e
}, {
level: n.level + 1,
paths: [ ...n.paths, i ],
root: n.root,
parent: l,
key: i
});
}), l;
}(e, r, t, n) : cloneUnlessOtherwiseSpecified(r, t, {
target: e,
source: r
}, n);
}
function isMergeable(e) {
return r(e);
}
const t = /*#__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: isMergeable
}), Object.defineProperty(deepmerge, "SYMBOL_IS_MERGEABLE", {
value: t
}), Object.defineProperty(deepmerge, "deepmergeAll", {
value: deepmergeAll
}), Object.defineProperty(deepmerge, "all", {
value: deepmergeAll
}), Object.defineProperty(deepmerge, "_isMergeableObject", {
value: _isMergeableObject
}), e.SYMBOL_IS_MERGEABLE = t, e._defaultCheckShouldNotUpsertValue = function _defaultCheckShouldNotUpsertValue(e, r, t, n) {
var l;
return !_isUndefined(null === (l = t.target) || void 0 === l ? void 0 : l[t.key]);
}, e._handleOptions = _handleOptions, e._isMergeableObject = _isMergeableObject,
e._isNull = function _isNull(e) {
return null === e;
}, e._isNullOrUndefined = function _isNullOrUndefined(e) {
return null == e;
}, e._isUndefined = _isUndefined, e._newTmpRuntimeData = _newTmpRuntimeData, e._shouldClone = _shouldClone,
e.all = deepmergeAll, e.deepmerge = deepmerge, e.deepmergeAll = deepmergeAll, e.default = deepmerge,
e.isMergeable = isMergeable, Object.defineProperty(e, "__esModule", {
value: !0
});
});
//# sourceMappingURL=index.umd.production.min.cjs.map