1 var assignMergeValue = require(
'./_assignMergeValue'),
2 cloneBuffer = require(
'./_cloneBuffer'),
3 cloneTypedArray = require(
'./_cloneTypedArray'),
4 copyArray = require(
'./_copyArray'),
5 initCloneObject = require(
'./_initCloneObject'),
6 isArguments = require(
'./isArguments'),
7 isArray = require(
'./isArray'),
8 isArrayLikeObject = require(
'./isArrayLikeObject'),
9 isBuffer = require(
'./isBuffer'),
10 isFunction = require(
'./isFunction'),
11 isObject = require(
'./isObject'),
12 isPlainObject = require(
'./isPlainObject'),
13 isTypedArray = require(
'./isTypedArray'),
14 toPlainObject = require(
'./toPlainObject');
31 function baseMergeDeep(
object, source, key, srcIndex, mergeFunc, customizer, stack) {
32 var objValue =
object[key],
33 srcValue = source[key],
34 stacked = stack.get(srcValue);
37 assignMergeValue(
object, key, stacked);
40 var newValue = customizer
41 ? customizer(objValue, srcValue, (key +
''),
object, source, stack)
44 var isCommon = newValue === undefined;
47 var isArr = isArray(srcValue),
48 isBuff = !isArr && isBuffer(srcValue),
49 isTyped = !isArr && !isBuff && isTypedArray(srcValue);
52 if (isArr || isBuff || isTyped) {
53 if (isArray(objValue)) {
56 else if (isArrayLikeObject(objValue)) {
57 newValue = copyArray(objValue);
61 newValue = cloneBuffer(srcValue,
true);
65 newValue = cloneTypedArray(srcValue,
true);
71 else if (isPlainObject(srcValue) || isArguments(srcValue)) {
73 if (isArguments(objValue)) {
74 newValue = toPlainObject(objValue);
76 else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {
77 newValue = initCloneObject(srcValue);
86 stack.set(srcValue, newValue);
87 mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
88 stack[
'delete'](srcValue);
90 assignMergeValue(
object, key, newValue);
93 module.exports = baseMergeDeep;