diff options
Diffstat (limited to 'node_modules/lodash/defaults.js')
-rw-r--r-- | node_modules/lodash/defaults.js | 46 |
1 files changed, 39 insertions, 7 deletions
diff --git a/node_modules/lodash/defaults.js b/node_modules/lodash/defaults.js index 6b75ee08c..c74df044c 100644 --- a/node_modules/lodash/defaults.js +++ b/node_modules/lodash/defaults.js @@ -1,7 +1,13 @@ -var apply = require('./_apply'), - assignInWith = require('./assignInWith'), - baseRest = require('./_baseRest'), - customDefaultsAssignIn = require('./_customDefaultsAssignIn'); +var baseRest = require('./_baseRest'), + eq = require('./eq'), + isIterateeCall = require('./_isIterateeCall'), + keysIn = require('./keysIn'); + +/** Used for built-in method references. */ +var objectProto = Object.prototype; + +/** Used to check objects for own properties. */ +var hasOwnProperty = objectProto.hasOwnProperty; /** * Assigns own and inherited enumerable string keyed properties of source @@ -24,9 +30,35 @@ var apply = require('./_apply'), * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * // => { 'a': 1, 'b': 2 } */ -var defaults = baseRest(function(args) { - args.push(undefined, customDefaultsAssignIn); - return apply(assignInWith, undefined, args); +var defaults = baseRest(function(object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; }); module.exports = defaults; |