Initial commit
[yaffs-website] / node_modules / grunt-contrib-watch / node_modules / globule / node_modules / lodash / _baseMerge.js
1 var Stack = require('./_Stack'),
2     assignMergeValue = require('./_assignMergeValue'),
3     baseFor = require('./_baseFor'),
4     baseMergeDeep = require('./_baseMergeDeep'),
5     isObject = require('./isObject'),
6     keysIn = require('./keysIn');
7
8 /**
9  * The base implementation of `_.merge` without support for multiple sources.
10  *
11  * @private
12  * @param {Object} object The destination object.
13  * @param {Object} source The source object.
14  * @param {number} srcIndex The index of `source`.
15  * @param {Function} [customizer] The function to customize merged values.
16  * @param {Object} [stack] Tracks traversed source values and their merged
17  *  counterparts.
18  */
19 function baseMerge(object, source, srcIndex, customizer, stack) {
20   if (object === source) {
21     return;
22   }
23   baseFor(source, function(srcValue, key) {
24     if (isObject(srcValue)) {
25       stack || (stack = new Stack);
26       baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
27     }
28     else {
29       var newValue = customizer
30         ? customizer(object[key], srcValue, (key + ''), object, source, stack)
31         : undefined;
32
33       if (newValue === undefined) {
34         newValue = srcValue;
35       }
36       assignMergeValue(object, key, newValue);
37     }
38   }, keysIn);
39 }
40
41 module.exports = baseMerge;