@newdash/newdash
Version:
javascript/typescript utility library
45 lines (44 loc) • 1.87 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const Stack_1 = __importDefault(require("./Stack"));
const assignMergeValue_1 = __importDefault(require("./assignMergeValue"));
const baseFor_1 = __importDefault(require("./baseFor"));
const baseMergeDeep_1 = __importDefault(require("./baseMergeDeep"));
const isObject_1 = __importDefault(require("../isObject"));
const keysIn_1 = __importDefault(require("../keysIn"));
const safeGet_1 = __importDefault(require("./safeGet"));
/**
* The base implementation of `merge` without support for multiple sources.
*
* @private
* @param {Object} object The destination object.
* @param {Object} source The source object.
* @param {number} srcIndex The index of `source`.
* @param {Function} [customizer] The function to customize merged values.
* @param {Object} [stack] Tracks traversed source values and their merged
* counterparts.
*/
function baseMerge(object, source, srcIndex, customizer, stack) {
if (object === source) {
return;
}
(0, baseFor_1.default)(source, function (srcValue, key) {
stack || (stack = new Stack_1.default);
if ((0, isObject_1.default)(srcValue)) {
(0, baseMergeDeep_1.default)(object, source, key, srcIndex, baseMerge, customizer, stack);
}
else {
var newValue = customizer
? customizer((0, safeGet_1.default)(object, key), srcValue, (key + ''), object, source, stack)
: undefined;
if (newValue === undefined) {
newValue = srcValue;
}
(0, assignMergeValue_1.default)(object, key, newValue);
}
}, keysIn_1.default);
}
exports.default = baseMerge;