UNPKG

@stryke/helpers

Version:

A package containing miscellaneous helper functions that are used across many different Storm Software projects.

36 lines (35 loc) 1.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deepMerge = deepMerge; var _isFunction = require("@stryke/type-checks/is-function"); var _isMergeableObject = require("@stryke/type-checks/is-mergeable-object"); var _propertyExists = require("@stryke/type-checks/property-exists"); const b = e => Array.isArray(e) ? [] : {}, o = (e, r) => r.clone !== !1 && r.isMergeableObject(e) ? deepMerge(b(e), e, r) : e, g = (e, r, n) => [...e, ...r].map(a => o(a, n)), u = (e, r) => { if (!r.customMerge) return deepMerge; const n = r.customMerge(e); return (0, _isFunction.isFunction)(n) ? n : deepMerge; }, s = e => [...Object.keys(e), ...(Object.getOwnPropertySymbols ? Object.getOwnPropertySymbols(e).filter(r => Object.propertyIsEnumerable.call(e, r)) : [])], M = (e, r, n) => { const a = {}; if (n.isMergeableObject(e)) for (const t of s(e)) a[t] = o(e[t], n); for (const t of s(r)) a[t] = (0, _propertyExists.propertyUnsafe)(e, t) && n.isMergeableObject(r[t]) ? u(t, n)(e[t], r[t], n) : o(r[t], n); return a; }; function deepMerge(e, r, n) { if (!e || !r) return e || r; const a = n ?? {}; a.arrayMerge ??= g, a.isMergeableObject ??= _isMergeableObject.isMergeableObject, a.cloneUnlessOtherwiseSpecified ??= o; const t = Array.isArray(r), y = Array.isArray(e); return t === y ? t ? a.arrayMerge(e, r, a) : M(e, r, a) : o(r, a); } deepMerge.all = function (r, n) { if (!Array.isArray(r)) throw new TypeError("first argument should be an array"); return r.reduce((a, t) => deepMerge(a, t, n), {}); };