diff options
Diffstat (limited to 'deps/npm/node_modules/lodash/internal/createAssigner.js')
-rw-r--r-- | deps/npm/node_modules/lodash/internal/createAssigner.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/deps/npm/node_modules/lodash/internal/createAssigner.js b/deps/npm/node_modules/lodash/internal/createAssigner.js new file mode 100644 index 0000000000..ea5a5a495f --- /dev/null +++ b/deps/npm/node_modules/lodash/internal/createAssigner.js @@ -0,0 +1,41 @@ +var bindCallback = require('./bindCallback'), + isIterateeCall = require('./isIterateeCall'), + restParam = require('../function/restParam'); + +/** + * Creates a `_.assign`, `_.defaults`, or `_.merge` function. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ +function createAssigner(assigner) { + return restParam(function(object, sources) { + var index = -1, + length = object == null ? 0 : sources.length, + customizer = length > 2 ? sources[length - 2] : undefined, + guard = length > 2 ? sources[2] : undefined, + thisArg = length > 1 ? sources[length - 1] : undefined; + + if (typeof customizer == 'function') { + customizer = bindCallback(customizer, thisArg, 5); + length -= 2; + } else { + customizer = typeof thisArg == 'function' ? thisArg : undefined; + length -= (customizer ? 1 : 0); + } + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, customizer); + } + } + return object; + }); +} + +module.exports = createAssigner; |