lodash.merge
Advanced tools
Comparing version 4.6.0 to 4.6.1
1002
index.js
/** | ||
* lodash (Custom Build) <https://lodash.com/> | ||
* Lodash (Custom Build) <https://lodash.com/> | ||
* Build: `lodash modularize exports="npm" -o ./` | ||
* Copyright jQuery Foundation and other contributors <https://jquery.org/> | ||
* Copyright JS Foundation and other contributors <https://js.foundation/> | ||
* Released under MIT license <https://lodash.com/license> | ||
@@ -16,2 +16,6 @@ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> | ||
/** Used to detect hot functions by number of calls within a span of milliseconds. */ | ||
var HOT_COUNT = 800, | ||
HOT_SPAN = 16; | ||
/** Used as references for various `Number` constants. */ | ||
@@ -23,2 +27,3 @@ var MAX_SAFE_INTEGER = 9007199254740991; | ||
arrayTag = '[object Array]', | ||
asyncTag = '[object AsyncFunction]', | ||
boolTag = '[object Boolean]', | ||
@@ -31,8 +36,9 @@ dateTag = '[object Date]', | ||
numberTag = '[object Number]', | ||
nullTag = '[object Null]', | ||
objectTag = '[object Object]', | ||
promiseTag = '[object Promise]', | ||
proxyTag = '[object Proxy]', | ||
regexpTag = '[object RegExp]', | ||
setTag = '[object Set]', | ||
stringTag = '[object String]', | ||
symbolTag = '[object Symbol]', | ||
undefinedTag = '[object Undefined]', | ||
weakMapTag = '[object WeakMap]'; | ||
@@ -58,5 +64,2 @@ | ||
/** Used to match `RegExp` flags from their coerced string values. */ | ||
var reFlags = /\w*$/; | ||
/** Used to detect host constructors (Safari). */ | ||
@@ -84,18 +87,2 @@ var reIsHostCtor = /^\[object .+?Constructor\]$/; | ||
/** Used to identify `toStringTag` values supported by `_.clone`. */ | ||
var cloneableTags = {}; | ||
cloneableTags[argsTag] = cloneableTags[arrayTag] = | ||
cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = | ||
cloneableTags[boolTag] = cloneableTags[dateTag] = | ||
cloneableTags[float32Tag] = cloneableTags[float64Tag] = | ||
cloneableTags[int8Tag] = cloneableTags[int16Tag] = | ||
cloneableTags[int32Tag] = cloneableTags[mapTag] = | ||
cloneableTags[numberTag] = cloneableTags[objectTag] = | ||
cloneableTags[regexpTag] = cloneableTags[setTag] = | ||
cloneableTags[stringTag] = cloneableTags[symbolTag] = | ||
cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = | ||
cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; | ||
cloneableTags[errorTag] = cloneableTags[funcTag] = | ||
cloneableTags[weakMapTag] = false; | ||
/** Detect free variable `global` from Node.js. */ | ||
@@ -125,3 +112,3 @@ var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; | ||
try { | ||
return freeProcess && freeProcess.binding('util'); | ||
return freeProcess && freeProcess.binding && freeProcess.binding('util'); | ||
} catch (e) {} | ||
@@ -134,30 +121,2 @@ }()); | ||
/** | ||
* Adds the key-value `pair` to `map`. | ||
* | ||
* @private | ||
* @param {Object} map The map to modify. | ||
* @param {Array} pair The key-value pair to add. | ||
* @returns {Object} Returns `map`. | ||
*/ | ||
function addMapEntry(map, pair) { | ||
// Don't return `map.set` because it's not chainable in IE 11. | ||
map.set(pair[0], pair[1]); | ||
return map; | ||
} | ||
/** | ||
* Adds `value` to `set`. | ||
* | ||
* @private | ||
* @param {Object} set The set to modify. | ||
* @param {*} value The value to add. | ||
* @returns {Object} Returns `set`. | ||
*/ | ||
function addSetEntry(set, value) { | ||
// Don't return `set.add` because it's not chainable in IE 11. | ||
set.add(value); | ||
return set; | ||
} | ||
/** | ||
* A faster alternative to `Function#apply`, this function invokes `func` | ||
@@ -183,67 +142,2 @@ * with the `this` binding of `thisArg` and the arguments of `args`. | ||
/** | ||
* A specialized version of `_.forEach` for arrays without support for | ||
* iteratee shorthands. | ||
* | ||
* @private | ||
* @param {Array} [array] The array to iterate over. | ||
* @param {Function} iteratee The function invoked per iteration. | ||
* @returns {Array} Returns `array`. | ||
*/ | ||
function arrayEach(array, iteratee) { | ||
var index = -1, | ||
length = array ? array.length : 0; | ||
while (++index < length) { | ||
if (iteratee(array[index], index, array) === false) { | ||
break; | ||
} | ||
} | ||
return array; | ||
} | ||
/** | ||
* Appends the elements of `values` to `array`. | ||
* | ||
* @private | ||
* @param {Array} array The array to modify. | ||
* @param {Array} values The values to append. | ||
* @returns {Array} Returns `array`. | ||
*/ | ||
function arrayPush(array, values) { | ||
var index = -1, | ||
length = values.length, | ||
offset = array.length; | ||
while (++index < length) { | ||
array[offset + index] = values[index]; | ||
} | ||
return array; | ||
} | ||
/** | ||
* A specialized version of `_.reduce` for arrays without support for | ||
* iteratee shorthands. | ||
* | ||
* @private | ||
* @param {Array} [array] The array to iterate over. | ||
* @param {Function} iteratee The function invoked per iteration. | ||
* @param {*} [accumulator] The initial value. | ||
* @param {boolean} [initAccum] Specify using the first element of `array` as | ||
* the initial value. | ||
* @returns {*} Returns the accumulated value. | ||
*/ | ||
function arrayReduce(array, iteratee, accumulator, initAccum) { | ||
var index = -1, | ||
length = array ? array.length : 0; | ||
if (initAccum && length) { | ||
accumulator = array[++index]; | ||
} | ||
while (++index < length) { | ||
accumulator = iteratee(accumulator, array[index], index, array); | ||
} | ||
return accumulator; | ||
} | ||
/** | ||
* The base implementation of `_.times` without support for iteratee shorthands | ||
@@ -293,38 +187,2 @@ * or max array length checks. | ||
/** | ||
* Checks if `value` is a host object in IE < 9. | ||
* | ||
* @private | ||
* @param {*} value The value to check. | ||
* @returns {boolean} Returns `true` if `value` is a host object, else `false`. | ||
*/ | ||
function isHostObject(value) { | ||
// Many host objects are `Object` objects that can coerce to strings | ||
// despite having improperly defined `toString` methods. | ||
var result = false; | ||
if (value != null && typeof value.toString != 'function') { | ||
try { | ||
result = !!(value + ''); | ||
} catch (e) {} | ||
} | ||
return result; | ||
} | ||
/** | ||
* Converts `map` to its key-value pairs. | ||
* | ||
* @private | ||
* @param {Object} map The map to convert. | ||
* @returns {Array} Returns the key-value pairs. | ||
*/ | ||
function mapToArray(map) { | ||
var index = -1, | ||
result = Array(map.size); | ||
map.forEach(function(value, key) { | ||
result[++index] = [key, value]; | ||
}); | ||
return result; | ||
} | ||
/** | ||
* Creates a unary function that invokes `func` with its argument transformed. | ||
@@ -344,16 +202,13 @@ * | ||
/** | ||
* Converts `set` to an array of its values. | ||
* Gets the value at `key`, unless `key` is "__proto__". | ||
* | ||
* @private | ||
* @param {Object} set The set to convert. | ||
* @returns {Array} Returns the values. | ||
* @param {Object} object The object to query. | ||
* @param {string} key The key of the property to get. | ||
* @returns {*} Returns the property value. | ||
*/ | ||
function setToArray(set) { | ||
var index = -1, | ||
result = Array(set.size); | ||
set.forEach(function(value) { | ||
result[++index] = value; | ||
}); | ||
return result; | ||
function safeGet(object, key) { | ||
return key == '__proto__' | ||
? undefined | ||
: object[key]; | ||
} | ||
@@ -369,8 +224,2 @@ | ||
/** Used to detect methods masquerading as native. */ | ||
var maskSrcKey = (function() { | ||
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); | ||
return uid ? ('Symbol(src)_1.' + uid) : ''; | ||
}()); | ||
/** Used to resolve the decompiled source of functions. */ | ||
@@ -382,4 +231,7 @@ var funcToString = funcProto.toString; | ||
/** Used to infer the `Object` constructor. */ | ||
var objectCtorString = funcToString.call(Object); | ||
/** Used to detect methods masquerading as native. */ | ||
var maskSrcKey = (function() { | ||
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); | ||
return uid ? ('Symbol(src)_1.' + uid) : ''; | ||
}()); | ||
@@ -391,4 +243,7 @@ /** | ||
*/ | ||
var objectToString = objectProto.toString; | ||
var nativeObjectToString = objectProto.toString; | ||
/** Used to infer the `Object` constructor. */ | ||
var objectCtorString = funcToString.call(Object); | ||
/** Used to detect if a method is native. */ | ||
@@ -404,32 +259,50 @@ var reIsNative = RegExp('^' + | ||
Uint8Array = root.Uint8Array, | ||
allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, | ||
getPrototype = overArg(Object.getPrototypeOf, Object), | ||
objectCreate = Object.create, | ||
propertyIsEnumerable = objectProto.propertyIsEnumerable, | ||
splice = arrayProto.splice; | ||
splice = arrayProto.splice, | ||
symToStringTag = Symbol ? Symbol.toStringTag : undefined; | ||
var defineProperty = (function() { | ||
try { | ||
var func = getNative(Object, 'defineProperty'); | ||
func({}, '', {}); | ||
return func; | ||
} catch (e) {} | ||
}()); | ||
/* Built-in method references for those with the same name as other `lodash` methods. */ | ||
var nativeGetSymbols = Object.getOwnPropertySymbols, | ||
nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, | ||
nativeKeys = overArg(Object.keys, Object), | ||
nativeMax = Math.max; | ||
var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, | ||
nativeMax = Math.max, | ||
nativeNow = Date.now; | ||
/* Built-in method references that are verified to be native. */ | ||
var DataView = getNative(root, 'DataView'), | ||
Map = getNative(root, 'Map'), | ||
Promise = getNative(root, 'Promise'), | ||
Set = getNative(root, 'Set'), | ||
WeakMap = getNative(root, 'WeakMap'), | ||
var Map = getNative(root, 'Map'), | ||
nativeCreate = getNative(Object, 'create'); | ||
/** Used to detect maps, sets, and weakmaps. */ | ||
var dataViewCtorString = toSource(DataView), | ||
mapCtorString = toSource(Map), | ||
promiseCtorString = toSource(Promise), | ||
setCtorString = toSource(Set), | ||
weakMapCtorString = toSource(WeakMap); | ||
/** | ||
* The base implementation of `_.create` without support for assigning | ||
* properties to the created object. | ||
* | ||
* @private | ||
* @param {Object} proto The object to inherit from. | ||
* @returns {Object} Returns the new object. | ||
*/ | ||
var baseCreate = (function() { | ||
function object() {} | ||
return function(proto) { | ||
if (!isObject(proto)) { | ||
return {}; | ||
} | ||
if (objectCreate) { | ||
return objectCreate(proto); | ||
} | ||
object.prototype = proto; | ||
var result = new object; | ||
object.prototype = undefined; | ||
return result; | ||
}; | ||
}()); | ||
/** Used to convert symbols to primitives and strings. */ | ||
var symbolProto = Symbol ? Symbol.prototype : undefined, | ||
symbolValueOf = symbolProto ? symbolProto.valueOf : undefined; | ||
/** | ||
@@ -444,3 +317,3 @@ * Creates a hash object. | ||
var index = -1, | ||
length = entries ? entries.length : 0; | ||
length = entries == null ? 0 : entries.length; | ||
@@ -463,2 +336,3 @@ this.clear(); | ||
this.__data__ = nativeCreate ? nativeCreate(null) : {}; | ||
this.size = 0; | ||
} | ||
@@ -477,3 +351,5 @@ | ||
function hashDelete(key) { | ||
return this.has(key) && delete this.__data__[key]; | ||
var result = this.has(key) && delete this.__data__[key]; | ||
this.size -= result ? 1 : 0; | ||
return result; | ||
} | ||
@@ -510,3 +386,3 @@ | ||
var data = this.__data__; | ||
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key); | ||
return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); | ||
} | ||
@@ -526,2 +402,3 @@ | ||
var data = this.__data__; | ||
this.size += this.has(key) ? 0 : 1; | ||
data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; | ||
@@ -547,3 +424,3 @@ return this; | ||
var index = -1, | ||
length = entries ? entries.length : 0; | ||
length = entries == null ? 0 : entries.length; | ||
@@ -566,2 +443,3 @@ this.clear(); | ||
this.__data__ = []; | ||
this.size = 0; | ||
} | ||
@@ -591,2 +469,3 @@ | ||
} | ||
--this.size; | ||
return true; | ||
@@ -639,2 +518,3 @@ } | ||
if (index < 0) { | ||
++this.size; | ||
data.push([key, value]); | ||
@@ -663,3 +543,3 @@ } else { | ||
var index = -1, | ||
length = entries ? entries.length : 0; | ||
length = entries == null ? 0 : entries.length; | ||
@@ -681,2 +561,3 @@ this.clear(); | ||
function mapCacheClear() { | ||
this.size = 0; | ||
this.__data__ = { | ||
@@ -699,3 +580,5 @@ 'hash': new Hash, | ||
function mapCacheDelete(key) { | ||
return getMapData(this, key)['delete'](key); | ||
var result = getMapData(this, key)['delete'](key); | ||
this.size -= result ? 1 : 0; | ||
return result; | ||
} | ||
@@ -740,3 +623,7 @@ | ||
function mapCacheSet(key, value) { | ||
getMapData(this, key).set(key, value); | ||
var data = getMapData(this, key), | ||
size = data.size; | ||
data.set(key, value); | ||
this.size += data.size == size ? 0 : 1; | ||
return this; | ||
@@ -760,3 +647,4 @@ } | ||
function Stack(entries) { | ||
this.__data__ = new ListCache(entries); | ||
var data = this.__data__ = new ListCache(entries); | ||
this.size = data.size; | ||
} | ||
@@ -773,2 +661,3 @@ | ||
this.__data__ = new ListCache; | ||
this.size = 0; | ||
} | ||
@@ -786,3 +675,7 @@ | ||
function stackDelete(key) { | ||
return this.__data__['delete'](key); | ||
var data = this.__data__, | ||
result = data['delete'](key); | ||
this.size = data.size; | ||
return result; | ||
} | ||
@@ -827,12 +720,14 @@ | ||
function stackSet(key, value) { | ||
var cache = this.__data__; | ||
if (cache instanceof ListCache) { | ||
var pairs = cache.__data__; | ||
var data = this.__data__; | ||
if (data instanceof ListCache) { | ||
var pairs = data.__data__; | ||
if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { | ||
pairs.push([key, value]); | ||
this.size = ++data.size; | ||
return this; | ||
} | ||
cache = this.__data__ = new MapCache(pairs); | ||
data = this.__data__ = new MapCache(pairs); | ||
} | ||
cache.set(key, value); | ||
data.set(key, value); | ||
this.size = data.size; | ||
return this; | ||
@@ -857,14 +752,22 @@ } | ||
function arrayLikeKeys(value, inherited) { | ||
// Safari 8.1 makes `arguments.callee` enumerable in strict mode. | ||
// Safari 9 makes `arguments.length` enumerable in strict mode. | ||
var result = (isArray(value) || isArguments(value)) | ||
? baseTimes(value.length, String) | ||
: []; | ||
var isArr = isArray(value), | ||
isArg = !isArr && isArguments(value), | ||
isBuff = !isArr && !isArg && isBuffer(value), | ||
isType = !isArr && !isArg && !isBuff && isTypedArray(value), | ||
skipIndexes = isArr || isArg || isBuff || isType, | ||
result = skipIndexes ? baseTimes(value.length, String) : [], | ||
length = result.length; | ||
var length = result.length, | ||
skipIndexes = !!length; | ||
for (var key in value) { | ||
if ((inherited || hasOwnProperty.call(value, key)) && | ||
!(skipIndexes && (key == 'length' || isIndex(key, length)))) { | ||
!(skipIndexes && ( | ||
// Safari 9 has enumerable `arguments.length` in strict mode. | ||
key == 'length' || | ||
// Node.js 0.10 has enumerable non-index properties on buffers. | ||
(isBuff && (key == 'offset' || key == 'parent')) || | ||
// PhantomJS 2 has enumerable non-index properties on typed arrays. | ||
(isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || | ||
// Skip index properties. | ||
isIndex(key, length) | ||
))) { | ||
result.push(key); | ||
@@ -887,4 +790,4 @@ } | ||
if ((value !== undefined && !eq(object[key], value)) || | ||
(typeof key == 'number' && value === undefined && !(key in object))) { | ||
object[key] = value; | ||
(value === undefined && !(key in object))) { | ||
baseAssignValue(object, key, value); | ||
} | ||
@@ -907,3 +810,3 @@ } | ||
(value === undefined && !(key in object))) { | ||
object[key] = value; | ||
baseAssignValue(object, key, value); | ||
} | ||
@@ -931,126 +834,61 @@ } | ||
/** | ||
* The base implementation of `_.assign` without support for multiple sources | ||
* or `customizer` functions. | ||
* The base implementation of `assignValue` and `assignMergeValue` without | ||
* value checks. | ||
* | ||
* @private | ||
* @param {Object} object The destination object. | ||
* @param {Object} source The source object. | ||
* @returns {Object} Returns `object`. | ||
* @param {Object} object The object to modify. | ||
* @param {string} key The key of the property to assign. | ||
* @param {*} value The value to assign. | ||
*/ | ||
function baseAssign(object, source) { | ||
return object && copyObject(source, keys(source), object); | ||
} | ||
/** | ||
* The base implementation of `_.clone` and `_.cloneDeep` which tracks | ||
* traversed objects. | ||
* | ||
* @private | ||
* @param {*} value The value to clone. | ||
* @param {boolean} [isDeep] Specify a deep clone. | ||
* @param {boolean} [isFull] Specify a clone including symbols. | ||
* @param {Function} [customizer] The function to customize cloning. | ||
* @param {string} [key] The key of `value`. | ||
* @param {Object} [object] The parent object of `value`. | ||
* @param {Object} [stack] Tracks traversed objects and their clone counterparts. | ||
* @returns {*} Returns the cloned value. | ||
*/ | ||
function baseClone(value, isDeep, isFull, customizer, key, object, stack) { | ||
var result; | ||
if (customizer) { | ||
result = object ? customizer(value, key, object, stack) : customizer(value); | ||
} | ||
if (result !== undefined) { | ||
return result; | ||
} | ||
if (!isObject(value)) { | ||
return value; | ||
} | ||
var isArr = isArray(value); | ||
if (isArr) { | ||
result = initCloneArray(value); | ||
if (!isDeep) { | ||
return copyArray(value, result); | ||
} | ||
function baseAssignValue(object, key, value) { | ||
if (key == '__proto__' && defineProperty) { | ||
defineProperty(object, key, { | ||
'configurable': true, | ||
'enumerable': true, | ||
'value': value, | ||
'writable': true | ||
}); | ||
} else { | ||
var tag = getTag(value), | ||
isFunc = tag == funcTag || tag == genTag; | ||
if (isBuffer(value)) { | ||
return cloneBuffer(value, isDeep); | ||
} | ||
if (tag == objectTag || tag == argsTag || (isFunc && !object)) { | ||
if (isHostObject(value)) { | ||
return object ? value : {}; | ||
} | ||
result = initCloneObject(isFunc ? {} : value); | ||
if (!isDeep) { | ||
return copySymbols(value, baseAssign(result, value)); | ||
} | ||
} else { | ||
if (!cloneableTags[tag]) { | ||
return object ? value : {}; | ||
} | ||
result = initCloneByTag(value, tag, baseClone, isDeep); | ||
} | ||
object[key] = value; | ||
} | ||
// Check for circular references and return its corresponding clone. | ||
stack || (stack = new Stack); | ||
var stacked = stack.get(value); | ||
if (stacked) { | ||
return stacked; | ||
} | ||
stack.set(value, result); | ||
if (!isArr) { | ||
var props = isFull ? getAllKeys(value) : keys(value); | ||
} | ||
arrayEach(props || value, function(subValue, key) { | ||
if (props) { | ||
key = subValue; | ||
subValue = value[key]; | ||
} | ||
// Recursively populate clone (susceptible to call stack limits). | ||
assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); | ||
}); | ||
return result; | ||
} | ||
/** | ||
* The base implementation of `_.create` without support for assigning | ||
* properties to the created object. | ||
* The base implementation of `baseForOwn` which iterates over `object` | ||
* properties returned by `keysFunc` and invokes `iteratee` for each property. | ||
* Iteratee functions may exit iteration early by explicitly returning `false`. | ||
* | ||
* @private | ||
* @param {Object} prototype The object to inherit from. | ||
* @returns {Object} Returns the new object. | ||
* @param {Object} object The object to iterate over. | ||
* @param {Function} iteratee The function invoked per iteration. | ||
* @param {Function} keysFunc The function to get the keys of `object`. | ||
* @returns {Object} Returns `object`. | ||
*/ | ||
function baseCreate(proto) { | ||
return isObject(proto) ? objectCreate(proto) : {}; | ||
} | ||
var baseFor = createBaseFor(); | ||
/** | ||
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses | ||
* `keysFunc` and `symbolsFunc` to get the enumerable property names and | ||
* symbols of `object`. | ||
* The base implementation of `getTag` without fallbacks for buggy environments. | ||
* | ||
* @private | ||
* @param {Object} object The object to query. | ||
* @param {Function} keysFunc The function to get the keys of `object`. | ||
* @param {Function} symbolsFunc The function to get the symbols of `object`. | ||
* @returns {Array} Returns the array of property names and symbols. | ||
* @param {*} value The value to query. | ||
* @returns {string} Returns the `toStringTag`. | ||
*/ | ||
function baseGetAllKeys(object, keysFunc, symbolsFunc) { | ||
var result = keysFunc(object); | ||
return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); | ||
function baseGetTag(value) { | ||
if (value == null) { | ||
return value === undefined ? undefinedTag : nullTag; | ||
} | ||
return (symToStringTag && symToStringTag in Object(value)) | ||
? getRawTag(value) | ||
: objectToString(value); | ||
} | ||
/** | ||
* The base implementation of `getTag`. | ||
* The base implementation of `_.isArguments`. | ||
* | ||
* @private | ||
* @param {*} value The value to query. | ||
* @returns {string} Returns the `toStringTag`. | ||
* @param {*} value The value to check. | ||
* @returns {boolean} Returns `true` if `value` is an `arguments` object, | ||
*/ | ||
function baseGetTag(value) { | ||
return objectToString.call(value); | ||
function baseIsArguments(value) { | ||
return isObjectLike(value) && baseGetTag(value) == argsTag; | ||
} | ||
@@ -1070,3 +908,3 @@ | ||
} | ||
var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor; | ||
var pattern = isFunction(value) ? reIsNative : reIsHostCtor; | ||
return pattern.test(toSource(value)); | ||
@@ -1084,26 +922,6 @@ } | ||
return isObjectLike(value) && | ||
isLength(value.length) && !!typedArrayTags[objectToString.call(value)]; | ||
isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; | ||
} | ||
/** | ||
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense. | ||
* | ||
* @private | ||
* @param {Object} object The object to query. | ||
* @returns {Array} Returns the array of property names. | ||
*/ | ||
function baseKeys(object) { | ||
if (!isPrototype(object)) { | ||
return nativeKeys(object); | ||
} | ||
var result = []; | ||
for (var key in Object(object)) { | ||
if (hasOwnProperty.call(object, key) && key != 'constructor') { | ||
result.push(key); | ||
} | ||
} | ||
return result; | ||
} | ||
/** | ||
* The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. | ||
@@ -1145,10 +963,3 @@ * | ||
} | ||
if (!(isArray(source) || isTypedArray(source))) { | ||
var props = baseKeysIn(source); | ||
} | ||
arrayEach(props || source, function(srcValue, key) { | ||
if (props) { | ||
key = srcValue; | ||
srcValue = source[key]; | ||
} | ||
baseFor(source, function(srcValue, key) { | ||
if (isObject(srcValue)) { | ||
@@ -1160,3 +971,3 @@ stack || (stack = new Stack); | ||
var newValue = customizer | ||
? customizer(object[key], srcValue, (key + ''), object, source, stack) | ||
? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) | ||
: undefined; | ||
@@ -1169,3 +980,3 @@ | ||
} | ||
}); | ||
}, keysIn); | ||
} | ||
@@ -1189,4 +1000,4 @@ | ||
function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { | ||
var objValue = object[key], | ||
srcValue = source[key], | ||
var objValue = safeGet(object, key), | ||
srcValue = safeGet(source, key), | ||
stacked = stack.get(srcValue); | ||
@@ -1205,4 +1016,8 @@ | ||
if (isCommon) { | ||
var isArr = isArray(srcValue), | ||
isBuff = !isArr && isBuffer(srcValue), | ||
isTyped = !isArr && !isBuff && isTypedArray(srcValue); | ||
newValue = srcValue; | ||
if (isArray(srcValue) || isTypedArray(srcValue)) { | ||
if (isArr || isBuff || isTyped) { | ||
if (isArray(objValue)) { | ||
@@ -1214,8 +1029,16 @@ newValue = objValue; | ||
} | ||
else { | ||
else if (isBuff) { | ||
isCommon = false; | ||
newValue = baseClone(srcValue, true); | ||
newValue = cloneBuffer(srcValue, true); | ||
} | ||
else if (isTyped) { | ||
isCommon = false; | ||
newValue = cloneTypedArray(srcValue, true); | ||
} | ||
else { | ||
newValue = []; | ||
} | ||
} | ||
else if (isPlainObject(srcValue) || isArguments(srcValue)) { | ||
newValue = objValue; | ||
if (isArguments(objValue)) { | ||
@@ -1225,8 +1048,4 @@ newValue = toPlainObject(objValue); | ||
else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { | ||
isCommon = false; | ||
newValue = baseClone(srcValue, true); | ||
newValue = initCloneObject(srcValue); | ||
} | ||
else { | ||
newValue = objValue; | ||
} | ||
} | ||
@@ -1255,23 +1074,23 @@ else { | ||
function baseRest(func, start) { | ||
start = nativeMax(start === undefined ? (func.length - 1) : start, 0); | ||
return function() { | ||
var args = arguments, | ||
index = -1, | ||
length = nativeMax(args.length - start, 0), | ||
array = Array(length); | ||
while (++index < length) { | ||
array[index] = args[start + index]; | ||
} | ||
index = -1; | ||
var otherArgs = Array(start + 1); | ||
while (++index < start) { | ||
otherArgs[index] = args[index]; | ||
} | ||
otherArgs[start] = array; | ||
return apply(func, this, otherArgs); | ||
}; | ||
return setToString(overRest(func, start, identity), func + ''); | ||
} | ||
/** | ||
* The base implementation of `setToString` without support for hot loop shorting. | ||
* | ||
* @private | ||
* @param {Function} func The function to modify. | ||
* @param {Function} string The `toString` result. | ||
* @returns {Function} Returns `func`. | ||
*/ | ||
var baseSetToString = !defineProperty ? identity : function(func, string) { | ||
return defineProperty(func, 'toString', { | ||
'configurable': true, | ||
'enumerable': false, | ||
'value': constant(string), | ||
'writable': true | ||
}); | ||
}; | ||
/** | ||
* Creates a clone of `buffer`. | ||
@@ -1288,3 +1107,5 @@ * | ||
} | ||
var result = new buffer.constructor(buffer.length); | ||
var length = buffer.length, | ||
result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); | ||
buffer.copy(result); | ||
@@ -1308,67 +1129,2 @@ return result; | ||
/** | ||
* Creates a clone of `dataView`. | ||
* | ||
* @private | ||
* @param {Object} dataView The data view to clone. | ||
* @param {boolean} [isDeep] Specify a deep clone. | ||
* @returns {Object} Returns the cloned data view. | ||
*/ | ||
function cloneDataView(dataView, isDeep) { | ||
var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; | ||
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); | ||
} | ||
/** | ||
* Creates a clone of `map`. | ||
* | ||
* @private | ||
* @param {Object} map The map to clone. | ||
* @param {Function} cloneFunc The function to clone values. | ||
* @param {boolean} [isDeep] Specify a deep clone. | ||
* @returns {Object} Returns the cloned map. | ||
*/ | ||
function cloneMap(map, isDeep, cloneFunc) { | ||
var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map); | ||
return arrayReduce(array, addMapEntry, new map.constructor); | ||
} | ||
/** | ||
* Creates a clone of `regexp`. | ||
* | ||
* @private | ||
* @param {Object} regexp The regexp to clone. | ||
* @returns {Object} Returns the cloned regexp. | ||
*/ | ||
function cloneRegExp(regexp) { | ||
var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); | ||
result.lastIndex = regexp.lastIndex; | ||
return result; | ||
} | ||
/** | ||
* Creates a clone of `set`. | ||
* | ||
* @private | ||
* @param {Object} set The set to clone. | ||
* @param {Function} cloneFunc The function to clone values. | ||
* @param {boolean} [isDeep] Specify a deep clone. | ||
* @returns {Object} Returns the cloned set. | ||
*/ | ||
function cloneSet(set, isDeep, cloneFunc) { | ||
var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set); | ||
return arrayReduce(array, addSetEntry, new set.constructor); | ||
} | ||
/** | ||
* Creates a clone of the `symbol` object. | ||
* | ||
* @private | ||
* @param {Object} symbol The symbol object to clone. | ||
* @returns {Object} Returns the cloned symbol object. | ||
*/ | ||
function cloneSymbol(symbol) { | ||
return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; | ||
} | ||
/** | ||
* Creates a clone of `typedArray`. | ||
@@ -1416,2 +1172,3 @@ * | ||
function copyObject(source, props, object, customizer) { | ||
var isNew = !object; | ||
object || (object = {}); | ||
@@ -1429,3 +1186,10 @@ | ||
assignValue(object, key, newValue === undefined ? source[key] : newValue); | ||
if (newValue === undefined) { | ||
newValue = source[key]; | ||
} | ||
if (isNew) { | ||
baseAssignValue(object, key, newValue); | ||
} else { | ||
assignValue(object, key, newValue); | ||
} | ||
} | ||
@@ -1436,14 +1200,2 @@ return object; | ||
/** | ||
* Copies own symbol properties of `source` to `object`. | ||
* | ||
* @private | ||
* @param {Object} source The object to copy symbols from. | ||
* @param {Object} [object={}] The object to copy symbols to. | ||
* @returns {Object} Returns `object`. | ||
*/ | ||
function copySymbols(source, object) { | ||
return copyObject(source, getSymbols(source), object); | ||
} | ||
/** | ||
* Creates a function like `_.assign`. | ||
@@ -1482,10 +1234,23 @@ * | ||
/** | ||
* Creates an array of own enumerable property names and symbols of `object`. | ||
* Creates a base function for methods like `_.forIn` and `_.forOwn`. | ||
* | ||
* @private | ||
* @param {Object} object The object to query. | ||
* @returns {Array} Returns the array of property names and symbols. | ||
* @param {boolean} [fromRight] Specify iterating from right to left. | ||
* @returns {Function} Returns the new base function. | ||
*/ | ||
function getAllKeys(object) { | ||
return baseGetAllKeys(object, keys, getSymbols); | ||
function createBaseFor(fromRight) { | ||
return function(object, iteratee, keysFunc) { | ||
var index = -1, | ||
iterable = Object(object), | ||
props = keysFunc(object), | ||
length = props.length; | ||
while (length--) { | ||
var key = props[fromRight ? length : ++index]; | ||
if (iteratee(iterable[key], key, iterable) === false) { | ||
break; | ||
} | ||
} | ||
return object; | ||
}; | ||
} | ||
@@ -1522,59 +1287,24 @@ | ||
/** | ||
* Creates an array of the own enumerable symbol properties of `object`. | ||
* A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. | ||
* | ||
* @private | ||
* @param {Object} object The object to query. | ||
* @returns {Array} Returns the array of symbols. | ||
*/ | ||
var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; | ||
/** | ||
* Gets the `toStringTag` of `value`. | ||
* | ||
* @private | ||
* @param {*} value The value to query. | ||
* @returns {string} Returns the `toStringTag`. | ||
* @returns {string} Returns the raw `toStringTag`. | ||
*/ | ||
var getTag = baseGetTag; | ||
function getRawTag(value) { | ||
var isOwn = hasOwnProperty.call(value, symToStringTag), | ||
tag = value[symToStringTag]; | ||
// Fallback for data views, maps, sets, and weak maps in IE 11, | ||
// for data views in Edge < 14, and promises in Node.js. | ||
if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || | ||
(Map && getTag(new Map) != mapTag) || | ||
(Promise && getTag(Promise.resolve()) != promiseTag) || | ||
(Set && getTag(new Set) != setTag) || | ||
(WeakMap && getTag(new WeakMap) != weakMapTag)) { | ||
getTag = function(value) { | ||
var result = objectToString.call(value), | ||
Ctor = result == objectTag ? value.constructor : undefined, | ||
ctorString = Ctor ? toSource(Ctor) : undefined; | ||
try { | ||
value[symToStringTag] = undefined; | ||
var unmasked = true; | ||
} catch (e) {} | ||
if (ctorString) { | ||
switch (ctorString) { | ||
case dataViewCtorString: return dataViewTag; | ||
case mapCtorString: return mapTag; | ||
case promiseCtorString: return promiseTag; | ||
case setCtorString: return setTag; | ||
case weakMapCtorString: return weakMapTag; | ||
} | ||
var result = nativeObjectToString.call(value); | ||
if (unmasked) { | ||
if (isOwn) { | ||
value[symToStringTag] = tag; | ||
} else { | ||
delete value[symToStringTag]; | ||
} | ||
return result; | ||
}; | ||
} | ||
/** | ||
* Initializes an array clone. | ||
* | ||
* @private | ||
* @param {Array} array The array to clone. | ||
* @returns {Array} Returns the initialized clone. | ||
*/ | ||
function initCloneArray(array) { | ||
var length = array.length, | ||
result = array.constructor(length); | ||
// Add properties assigned by `RegExp#exec`. | ||
if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { | ||
result.index = array.index; | ||
result.input = array.input; | ||
} | ||
@@ -1598,51 +1328,2 @@ return result; | ||
/** | ||
* Initializes an object clone based on its `toStringTag`. | ||
* | ||
* **Note:** This function only supports cloning values with tags of | ||
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. | ||
* | ||
* @private | ||
* @param {Object} object The object to clone. | ||
* @param {string} tag The `toStringTag` of the object to clone. | ||
* @param {Function} cloneFunc The function to clone values. | ||
* @param {boolean} [isDeep] Specify a deep clone. | ||
* @returns {Object} Returns the initialized clone. | ||
*/ | ||
function initCloneByTag(object, tag, cloneFunc, isDeep) { | ||
var Ctor = object.constructor; | ||
switch (tag) { | ||
case arrayBufferTag: | ||
return cloneArrayBuffer(object); | ||
case boolTag: | ||
case dateTag: | ||
return new Ctor(+object); | ||
case dataViewTag: | ||
return cloneDataView(object, isDeep); | ||
case float32Tag: case float64Tag: | ||
case int8Tag: case int16Tag: case int32Tag: | ||
case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: | ||
return cloneTypedArray(object, isDeep); | ||
case mapTag: | ||
return cloneMap(object, isDeep, cloneFunc); | ||
case numberTag: | ||
case stringTag: | ||
return new Ctor(object); | ||
case regexpTag: | ||
return cloneRegExp(object); | ||
case setTag: | ||
return cloneSet(object, isDeep, cloneFunc); | ||
case symbolTag: | ||
return cloneSymbol(object); | ||
} | ||
} | ||
/** | ||
* Checks if `value` is a valid array-like index. | ||
@@ -1656,6 +1337,9 @@ * | ||
function isIndex(value, length) { | ||
var type = typeof value; | ||
length = length == null ? MAX_SAFE_INTEGER : length; | ||
return !!length && | ||
(typeof value == 'number' || reIsUint.test(value)) && | ||
(value > -1 && value % 1 == 0 && value < length); | ||
(type == 'number' || | ||
(type != 'symbol' && reIsUint.test(value))) && | ||
(value > -1 && value % 1 == 0 && value < length); | ||
} | ||
@@ -1746,6 +1430,86 @@ | ||
/** | ||
* Converts `value` to a string using `Object.prototype.toString`. | ||
* | ||
* @private | ||
* @param {*} value The value to convert. | ||
* @returns {string} Returns the converted string. | ||
*/ | ||
function objectToString(value) { | ||
return nativeObjectToString.call(value); | ||
} | ||
/** | ||
* A specialized version of `baseRest` which transforms the rest array. | ||
* | ||
* @private | ||
* @param {Function} func The function to apply a rest parameter to. | ||
* @param {number} [start=func.length-1] The start position of the rest parameter. | ||
* @param {Function} transform The rest array transform. | ||
* @returns {Function} Returns the new function. | ||
*/ | ||
function overRest(func, start, transform) { | ||
start = nativeMax(start === undefined ? (func.length - 1) : start, 0); | ||
return function() { | ||
var args = arguments, | ||
index = -1, | ||
length = nativeMax(args.length - start, 0), | ||
array = Array(length); | ||
while (++index < length) { | ||
array[index] = args[start + index]; | ||
} | ||
index = -1; | ||
var otherArgs = Array(start + 1); | ||
while (++index < start) { | ||
otherArgs[index] = args[index]; | ||
} | ||
otherArgs[start] = transform(array); | ||
return apply(func, this, otherArgs); | ||
}; | ||
} | ||
/** | ||
* Sets the `toString` method of `func` to return `string`. | ||
* | ||
* @private | ||
* @param {Function} func The function to modify. | ||
* @param {Function} string The `toString` result. | ||
* @returns {Function} Returns `func`. | ||
*/ | ||
var setToString = shortOut(baseSetToString); | ||
/** | ||
* Creates a function that'll short out and invoke `identity` instead | ||
* of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` | ||
* milliseconds. | ||
* | ||
* @private | ||
* @param {Function} func The function to restrict. | ||
* @returns {Function} Returns the new shortable function. | ||
*/ | ||
function shortOut(func) { | ||
var count = 0, | ||
lastCalled = 0; | ||
return function() { | ||
var stamp = nativeNow(), | ||
remaining = HOT_SPAN - (stamp - lastCalled); | ||
lastCalled = stamp; | ||
if (remaining > 0) { | ||
if (++count >= HOT_COUNT) { | ||
return arguments[0]; | ||
} | ||
} else { | ||
count = 0; | ||
} | ||
return func.apply(undefined, arguments); | ||
}; | ||
} | ||
/** | ||
* Converts `func` to its source code. | ||
* | ||
* @private | ||
* @param {Function} func The function to process. | ||
* @param {Function} func The function to convert. | ||
* @returns {string} Returns the source code. | ||
@@ -1819,7 +1583,6 @@ */ | ||
*/ | ||
function isArguments(value) { | ||
// Safari 8.1 makes `arguments.callee` enumerable in strict mode. | ||
return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && | ||
(!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); | ||
} | ||
var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { | ||
return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && | ||
!propertyIsEnumerable.call(value, 'callee'); | ||
}; | ||
@@ -1946,6 +1709,9 @@ /** | ||
function isFunction(value) { | ||
if (!isObject(value)) { | ||
return false; | ||
} | ||
// The use of `Object#toString` avoids issues with the `typeof` operator | ||
// in Safari 8-9 which returns 'object' for typed array and other constructors. | ||
var tag = isObject(value) ? objectToString.call(value) : ''; | ||
return tag == funcTag || tag == genTag; | ||
// in Safari 9 which returns 'object' for typed arrays and other constructors. | ||
var tag = baseGetTag(value); | ||
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; | ||
} | ||
@@ -2011,3 +1777,3 @@ | ||
var type = typeof value; | ||
return !!value && (type == 'object' || type == 'function'); | ||
return value != null && (type == 'object' || type == 'function'); | ||
} | ||
@@ -2040,3 +1806,3 @@ | ||
function isObjectLike(value) { | ||
return !!value && typeof value == 'object'; | ||
return value != null && typeof value == 'object'; | ||
} | ||
@@ -2073,4 +1839,3 @@ | ||
function isPlainObject(value) { | ||
if (!isObjectLike(value) || | ||
objectToString.call(value) != objectTag || isHostObject(value)) { | ||
if (!isObjectLike(value) || baseGetTag(value) != objectTag) { | ||
return false; | ||
@@ -2083,4 +1848,4 @@ } | ||
var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; | ||
return (typeof Ctor == 'function' && | ||
Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString); | ||
return typeof Ctor == 'function' && Ctor instanceof Ctor && | ||
funcToString.call(Ctor) == objectCtorString; | ||
} | ||
@@ -2136,34 +1901,2 @@ | ||
/** | ||
* Creates an array of the own enumerable property names of `object`. | ||
* | ||
* **Note:** Non-object values are coerced to objects. See the | ||
* [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) | ||
* for more details. | ||
* | ||
* @static | ||
* @since 0.1.0 | ||
* @memberOf _ | ||
* @category Object | ||
* @param {Object} object The object to query. | ||
* @returns {Array} Returns the array of property names. | ||
* @example | ||
* | ||
* function Foo() { | ||
* this.a = 1; | ||
* this.b = 2; | ||
* } | ||
* | ||
* Foo.prototype.c = 3; | ||
* | ||
* _.keys(new Foo); | ||
* // => ['a', 'b'] (iteration order is not guaranteed) | ||
* | ||
* _.keys('hi'); | ||
* // => ['0', '1'] | ||
*/ | ||
function keys(object) { | ||
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); | ||
} | ||
/** | ||
* Creates an array of the own and inherited enumerable property names of `object`. | ||
@@ -2231,24 +1964,47 @@ * | ||
/** | ||
* This method returns a new empty array. | ||
* Creates a function that returns `value`. | ||
* | ||
* @static | ||
* @memberOf _ | ||
* @since 4.13.0 | ||
* @since 2.4.0 | ||
* @category Util | ||
* @returns {Array} Returns the new empty array. | ||
* @param {*} value The value to return from the new function. | ||
* @returns {Function} Returns the new constant function. | ||
* @example | ||
* | ||
* var arrays = _.times(2, _.stubArray); | ||
* var objects = _.times(2, _.constant({ 'a': 1 })); | ||
* | ||
* console.log(arrays); | ||
* // => [[], []] | ||
* console.log(objects); | ||
* // => [{ 'a': 1 }, { 'a': 1 }] | ||
* | ||
* console.log(arrays[0] === arrays[1]); | ||
* // => false | ||
* console.log(objects[0] === objects[1]); | ||
* // => true | ||
*/ | ||
function stubArray() { | ||
return []; | ||
function constant(value) { | ||
return function() { | ||
return value; | ||
}; | ||
} | ||
/** | ||
* This method returns the first argument it receives. | ||
* | ||
* @static | ||
* @since 0.1.0 | ||
* @memberOf _ | ||
* @category Util | ||
* @param {*} value Any value. | ||
* @returns {*} Returns `value`. | ||
* @example | ||
* | ||
* var object = { 'a': 1 }; | ||
* | ||
* console.log(_.identity(object) === object); | ||
* // => true | ||
*/ | ||
function identity(value) { | ||
return value; | ||
} | ||
/** | ||
* This method returns `false`. | ||
@@ -2255,0 +2011,0 @@ * |
{ | ||
"name": "lodash.merge", | ||
"version": "4.6.0", | ||
"description": "The lodash method `_.merge` exported as a module.", | ||
"version": "4.6.1", | ||
"description": "The Lodash method `_.merge` exported as a module.", | ||
"homepage": "https://lodash.com/", | ||
@@ -12,3 +12,2 @@ "icon": "https://lodash.com/icon.svg", | ||
"John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)", | ||
"Blaine Bublitz <blaine.bublitz@gmail.com> (https://github.com/phated)", | ||
"Mathias Bynens <mathias@qiwi.be> (https://mathiasbynens.be/)" | ||
@@ -15,0 +14,0 @@ ], |
@@ -1,4 +0,4 @@ | ||
# lodash.merge v4.6.0 | ||
# lodash.merge v4.6.1 | ||
The [lodash](https://lodash.com/) method `_.merge` exported as a [Node.js](https://nodejs.org/) module. | ||
The [Lodash](https://lodash.com/) method `_.merge` exported as a [Node.js](https://nodejs.org/) module. | ||
@@ -18,2 +18,2 @@ ## Installation | ||
See the [documentation](https://lodash.com/docs#merge) or [package source](https://github.com/lodash/lodash/blob/4.6.0-npm-packages/lodash.merge) for more details. | ||
See the [documentation](https://lodash.com/docs#merge) or [package source](https://github.com/lodash/lodash/blob/4.6.1-npm-packages/lodash.merge) for more details. |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
53892
1809