UNPKG

ajsfw

Version:
67 lines (66 loc) 2.92 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var DeepMerge = (function () { function DeepMerge() { } DeepMerge.isMergeableObject = function (val) { var nonNullObject = val && typeof val === "object"; return nonNullObject && Object.prototype.toString.call(val) !== "[object RegExp]" && Object.prototype.toString.call(val) !== "[object Date]"; }; DeepMerge.emptyTarget = function (val) { return Array.isArray(val) ? [] : {}; }; DeepMerge.cloneIfNecessary = function (value, optionsArgument) { var clone = optionsArgument && optionsArgument.clone === true; return (clone && DeepMerge.isMergeableObject(value)) ? DeepMerge.merge(DeepMerge.emptyTarget(value), value, optionsArgument) : value; }; DeepMerge.defaultArrayMerge = function (target, source, optionsArgument) { var destination = target.slice(); source.forEach(function (e, i) { if (typeof destination[i] === "undefined") { destination[i] = DeepMerge.cloneIfNecessary(e, optionsArgument); } else if (DeepMerge.isMergeableObject(e)) { destination[i] = DeepMerge.merge(target[i], e, optionsArgument); } else if (target.indexOf(e) === -1) { destination.push(DeepMerge.cloneIfNecessary(e, optionsArgument)); } }); return destination; }; DeepMerge.mergeObject = function (target, source, optionsArgument) { var destination = {}; if (DeepMerge.isMergeableObject(target)) { Object.keys(target).forEach(function (key) { destination[key] = DeepMerge.cloneIfNecessary(target[key], optionsArgument); }); } Object.keys(source).forEach(function (key) { if (!DeepMerge.isMergeableObject(source[key]) || !target[key]) { destination[key] = DeepMerge.cloneIfNecessary(source[key], optionsArgument); } else { destination[key] = DeepMerge.merge(target[key], source[key], optionsArgument); } }); return destination; }; DeepMerge.merge = function (target, source, optionsArgument) { var array = Array.isArray(source); var options = optionsArgument || { arrayMerge: DeepMerge.defaultArrayMerge }; var arrayMerge = options.arrayMerge || DeepMerge.defaultArrayMerge; if (array) { return Array.isArray(target) ? arrayMerge(target, source, optionsArgument) : DeepMerge.cloneIfNecessary(source, optionsArgument); } else { return DeepMerge.mergeObject(target, source, optionsArgument); } }; return DeepMerge; }()); exports.DeepMerge = DeepMerge;