diff --git a/README.md b/README.md
index c92622899..71c898e9a 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# lodash-amd v4.16.6
+# lodash-amd v4.17.0
The [Lodash](https://lodash.com/) library exported as [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) modules.
@@ -27,4 +27,4 @@ require({
});
```
-See the [package source](https://github.com/lodash/lodash/tree/4.16.6-amd) for more details.
+See the [package source](https://github.com/lodash/lodash/tree/4.17.0-amd) for more details.
diff --git a/_baseAssignIn.js b/_baseAssignIn.js
new file mode 100644
index 000000000..386b8b083
--- /dev/null
+++ b/_baseAssignIn.js
@@ -0,0 +1,17 @@
+define(['./_copyObject', './keysIn'], function(copyObject, keysIn) {
+
+ /**
+ * The base implementation of `_.assignIn` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssignIn(object, source) {
+ return object && copyObject(source, keysIn(source), object);
+ }
+
+ return baseAssignIn;
+});
diff --git a/_baseAt.js b/_baseAt.js
index 0bd0c270b..77b04d756 100644
--- a/_baseAt.js
+++ b/_baseAt.js
@@ -8,7 +8,7 @@ define(['./get'], function(get) {
*
* @private
* @param {Object} object The object to iterate over.
- * @param {string[]} paths The property paths of elements to pick.
+ * @param {string[]} paths The property paths to pick.
* @returns {Array} Returns the picked elements.
*/
function baseAt(object, paths) {
diff --git a/_baseClone.js b/_baseClone.js
index e1cc0c3b1..e3f39950a 100644
--- a/_baseClone.js
+++ b/_baseClone.js
@@ -1,8 +1,13 @@
-define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_cloneBuffer', './_copyArray', './_copySymbols', './_getAllKeys', './_getTag', './_initCloneArray', './_initCloneByTag', './_initCloneObject', './isArray', './isBuffer', './isObject', './keys'], function(Stack, arrayEach, assignValue, baseAssign, cloneBuffer, copyArray, copySymbols, getAllKeys, getTag, initCloneArray, initCloneByTag, initCloneObject, isArray, isBuffer, isObject, keys) {
+define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_baseAssignIn', './_cloneBuffer', './_copyArray', './_copySymbols', './_copySymbolsIn', './_getAllKeys', './_getAllKeysIn', './_getTag', './_initCloneArray', './_initCloneByTag', './_initCloneObject', './isArray', './isBuffer', './isObject', './keys'], function(Stack, arrayEach, assignValue, baseAssign, baseAssignIn, cloneBuffer, copyArray, copySymbols, copySymbolsIn, getAllKeys, getAllKeysIn, getTag, initCloneArray, initCloneByTag, initCloneObject, isArray, isBuffer, isObject, keys) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1,
+ CLONE_FLAT_FLAG = 2,
+ CLONE_SYMBOLS_FLAG = 4;
+
/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
arrayTag = '[object Array]',
@@ -54,16 +59,22 @@ define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_clone
*
* @private
* @param {*} value The value to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @param {boolean} [isFull] Specify a clone including symbols.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Deep clone
+ * 2 - Flatten inherited properties
+ * 4 - Clone 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;
+ function baseClone(value, bitmask, customizer, key, object, stack) {
+ var result,
+ isDeep = bitmask & CLONE_DEEP_FLAG,
+ isFlat = bitmask & CLONE_FLAT_FLAG,
+ isFull = bitmask & CLONE_SYMBOLS_FLAG;
+
if (customizer) {
result = object ? customizer(value, key, object, stack) : customizer(value);
}
@@ -87,9 +98,11 @@ define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_clone
return cloneBuffer(value, isDeep);
}
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
- result = initCloneObject(isFunc ? {} : value);
+ result = (isFlat || isFunc) ? {} : initCloneObject(value);
if (!isDeep) {
- return copySymbols(value, baseAssign(result, value));
+ return isFlat
+ ? copySymbolsIn(value, baseAssignIn(result, value))
+ : copySymbols(value, baseAssign(result, value));
}
} else {
if (!cloneableTags[tag]) {
@@ -106,14 +119,18 @@ define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_clone
}
stack.set(value, result);
- var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value);
+ var keysFunc = isFull
+ ? (isFlat ? getAllKeysIn : getAllKeys)
+ : (isFlat ? keysIn : keys);
+
+ var props = isArr ? undefined : keysFunc(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));
+ assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
});
return result;
}
diff --git a/_baseIsEqual.js b/_baseIsEqual.js
index 6cdbf701c..51a34a2ca 100644
--- a/_baseIsEqual.js
+++ b/_baseIsEqual.js
@@ -7,22 +7,21 @@ define(['./_baseIsEqualDeep', './isObject', './isObjectLike'], function(baseIsEq
* @private
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Unordered comparison
+ * 2 - Partial comparison
* @param {Function} [customizer] The function to customize comparisons.
- * @param {boolean} [bitmask] The bitmask of comparison flags.
- * The bitmask may be composed of the following flags:
- * 1 - Unordered comparison
- * 2 - Partial comparison
* @param {Object} [stack] Tracks traversed `value` and `other` objects.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
*/
- function baseIsEqual(value, other, customizer, bitmask, stack) {
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
if (value === other) {
return true;
}
if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
return value !== value && other !== other;
}
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
return baseIsEqual;
diff --git a/_baseIsEqualDeep.js b/_baseIsEqualDeep.js
index e6ae0bed4..bfa76075d 100644
--- a/_baseIsEqualDeep.js
+++ b/_baseIsEqualDeep.js
@@ -1,7 +1,7 @@
define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_getTag', './isArray', './isBuffer', './isTypedArray'], function(Stack, equalArrays, equalByTag, equalObjects, getTag, isArray, isBuffer, isTypedArray) {
- /** Used to compose bitmasks for comparison styles. */
- var PARTIAL_COMPARE_FLAG = 2;
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1;
/** `Object#toString` result references. */
var argsTag = '[object Arguments]',
@@ -22,14 +22,13 @@ define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_ge
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
- function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray(object),
othIsArr = isArray(other),
objTag = arrayTag,
@@ -57,10 +56,10 @@ define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_ge
if (isSameTag && !objIsObj) {
stack || (stack = new Stack);
return (objIsArr || isTypedArray(object))
- ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
- : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
+ ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
+ : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
}
- if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
@@ -69,14 +68,14 @@ define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_ge
othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack);
- return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
+ return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
if (!isSameTag) {
return false;
}
stack || (stack = new Stack);
- return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
+ return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
}
return baseIsEqualDeep;
diff --git a/_baseIsMatch.js b/_baseIsMatch.js
index 3f559d973..8443f100e 100644
--- a/_baseIsMatch.js
+++ b/_baseIsMatch.js
@@ -3,9 +3,9 @@ define(['./_Stack', './_baseIsEqual'], function(Stack, baseIsEqual) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
- /** Used to compose bitmasks for comparison styles. */
- var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1,
+ COMPARE_UNORDERED_FLAG = 2;
/**
* The base implementation of `_.isMatch` without support for iteratee shorthands.
@@ -51,7 +51,7 @@ define(['./_Stack', './_baseIsEqual'], function(Stack, baseIsEqual) {
var result = customizer(objValue, srcValue, key, object, source, stack);
}
if (!(result === undefined
- ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
+ ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
: result
)) {
return false;
diff --git a/_baseMatchesProperty.js b/_baseMatchesProperty.js
index af9de12e5..b52b02df8 100644
--- a/_baseMatchesProperty.js
+++ b/_baseMatchesProperty.js
@@ -3,9 +3,9 @@ define(['./_baseIsEqual', './get', './hasIn', './_isKey', './_isStrictComparable
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
- /** Used to compose bitmasks for comparison styles. */
- var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1,
+ COMPARE_UNORDERED_FLAG = 2;
/**
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
@@ -23,7 +23,7 @@ define(['./_baseIsEqual', './get', './hasIn', './_isKey', './_isStrictComparable
var objValue = get(object, path);
return (objValue === undefined && objValue === srcValue)
? hasIn(object, path)
- : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
+ : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
};
}
diff --git a/_basePick.js b/_basePick.js
index 705e10709..f2946a09f 100644
--- a/_basePick.js
+++ b/_basePick.js
@@ -1,4 +1,4 @@
-define(['./_basePickBy'], function(basePickBy) {
+define(['./_basePickBy', './hasIn'], function(basePickBy, hasIn) {
/**
* The base implementation of `_.pick` without support for individual
@@ -6,13 +6,13 @@ define(['./_basePickBy'], function(basePickBy) {
*
* @private
* @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick.
+ * @param {string[]} paths The property paths to pick.
* @returns {Object} Returns the new object.
*/
- function basePick(object, props) {
+ function basePick(object, paths) {
object = Object(object);
- return basePickBy(object, props, function(value, key) {
- return key in object;
+ return basePickBy(object, paths, function(value, path) {
+ return hasIn(object, path);
});
}
diff --git a/_basePickBy.js b/_basePickBy.js
index 9072e2b06..e48d1abef 100644
--- a/_basePickBy.js
+++ b/_basePickBy.js
@@ -1,25 +1,25 @@
-define(['./_baseAssignValue'], function(baseAssignValue) {
+define(['./_baseGet', './_baseSet'], function(baseGet, baseSet) {
/**
* The base implementation of `_.pickBy` without support for iteratee shorthands.
*
* @private
* @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick from.
+ * @param {string[]} paths The property paths to pick.
* @param {Function} predicate The function invoked per property.
* @returns {Object} Returns the new object.
*/
- function basePickBy(object, props, predicate) {
+ function basePickBy(object, paths, predicate) {
var index = -1,
- length = props.length,
+ length = paths.length,
result = {};
while (++index < length) {
- var key = props[index],
- value = object[key];
+ var path = paths[index],
+ value = baseGet(object, path);
- if (predicate(value, key)) {
- baseAssignValue(result, key, value);
+ if (predicate(value, path)) {
+ baseSet(result, path, value);
}
}
return result;
diff --git a/_baseUnset.js b/_baseUnset.js
index 8899ef343..d39a37e22 100644
--- a/_baseUnset.js
+++ b/_baseUnset.js
@@ -11,7 +11,7 @@ define(['./_castPath', './_isKey', './last', './_parent', './_toKey'], function(
*
* @private
* @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to unset.
+ * @param {Array|string} path The property path to unset.
* @returns {boolean} Returns `true` if the property is deleted, else `false`.
*/
function baseUnset(object, path) {
diff --git a/_cloneMap.js b/_cloneMap.js
index 0a258709b..d49b83b2e 100644
--- a/_cloneMap.js
+++ b/_cloneMap.js
@@ -1,5 +1,8 @@
define(['./_addMapEntry', './_arrayReduce', './_mapToArray'], function(addMapEntry, arrayReduce, mapToArray) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1;
+
/**
* Creates a clone of `map`.
*
@@ -10,7 +13,7 @@ define(['./_addMapEntry', './_arrayReduce', './_mapToArray'], function(addMapEnt
* @returns {Object} Returns the cloned map.
*/
function cloneMap(map, isDeep, cloneFunc) {
- var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
+ var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);
return arrayReduce(array, addMapEntry, new map.constructor);
}
diff --git a/_cloneSet.js b/_cloneSet.js
index f87c6788e..bf2f18037 100644
--- a/_cloneSet.js
+++ b/_cloneSet.js
@@ -1,5 +1,8 @@
define(['./_addSetEntry', './_arrayReduce', './_setToArray'], function(addSetEntry, arrayReduce, setToArray) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1;
+
/**
* Creates a clone of `set`.
*
@@ -10,7 +13,7 @@ define(['./_addSetEntry', './_arrayReduce', './_setToArray'], function(addSetEnt
* @returns {Object} Returns the cloned set.
*/
function cloneSet(set, isDeep, cloneFunc) {
- var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
+ var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);
return arrayReduce(array, addSetEntry, new set.constructor);
}
diff --git a/_copySymbols.js b/_copySymbols.js
index 1b87b0660..fe0909e37 100644
--- a/_copySymbols.js
+++ b/_copySymbols.js
@@ -1,7 +1,7 @@
define(['./_copyObject', './_getSymbols'], function(copyObject, getSymbols) {
/**
- * Copies own symbol properties of `source` to `object`.
+ * Copies own symbols of `source` to `object`.
*
* @private
* @param {Object} source The object to copy symbols from.
diff --git a/_copySymbolsIn.js b/_copySymbolsIn.js
new file mode 100644
index 000000000..5cf5c9110
--- /dev/null
+++ b/_copySymbolsIn.js
@@ -0,0 +1,16 @@
+define(['./_copyObject', './_getSymbolsIn'], function(copyObject, getSymbolsIn) {
+
+ /**
+ * Copies own and inherited symbols 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 copySymbolsIn(source, object) {
+ return copyObject(source, getSymbolsIn(source), object);
+ }
+
+ return copySymbolsIn;
+});
diff --git a/_createBind.js b/_createBind.js
index 7b89d84ee..e93ee8840 100644
--- a/_createBind.js
+++ b/_createBind.js
@@ -1,7 +1,7 @@
define(['./_createCtor', './_root'], function(createCtor, root) {
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1;
+ var WRAP_BIND_FLAG = 1;
/**
* Creates a function that wraps `func` to invoke it with the optional `this`
@@ -14,7 +14,7 @@ define(['./_createCtor', './_root'], function(createCtor, root) {
* @returns {Function} Returns the new wrapped function.
*/
function createBind(func, bitmask, thisArg) {
- var isBind = bitmask & BIND_FLAG,
+ var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func);
function wrapper() {
diff --git a/_createFlow.js b/_createFlow.js
index 8ff1b6be7..d400f6768 100644
--- a/_createFlow.js
+++ b/_createFlow.js
@@ -10,10 +10,10 @@ define(['./_LodashWrapper', './_flatRest', './_getData', './_getFuncName', './is
var FUNC_ERROR_TEXT = 'Expected a function';
/** Used to compose bitmasks for function metadata. */
- var CURRY_FLAG = 8,
- PARTIAL_FLAG = 32,
- ARY_FLAG = 128,
- REARG_FLAG = 256;
+ var WRAP_CURRY_FLAG = 8,
+ WRAP_PARTIAL_FLAG = 32,
+ WRAP_ARY_FLAG = 128,
+ WRAP_REARG_FLAG = 256;
/**
* Creates a `_.flow` or `_.flowRight` function.
@@ -48,7 +48,7 @@ define(['./_LodashWrapper', './_flatRest', './_getData', './_getFuncName', './is
data = funcName == 'wrapper' ? getData(func) : undefined;
if (data && isLaziable(data[0]) &&
- data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) &&
+ data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
!data[4].length && data[9] == 1
) {
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
diff --git a/_createHybrid.js b/_createHybrid.js
index 8e9c24d05..d8ec75880 100644
--- a/_createHybrid.js
+++ b/_createHybrid.js
@@ -4,12 +4,12 @@ define(['./_composeArgs', './_composeArgsRight', './_countHolders', './_createCt
var undefined;
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- BIND_KEY_FLAG = 2,
- CURRY_FLAG = 8,
- CURRY_RIGHT_FLAG = 16,
- ARY_FLAG = 128,
- FLIP_FLAG = 512;
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_CURRY_RIGHT_FLAG = 16,
+ WRAP_ARY_FLAG = 128,
+ WRAP_FLIP_FLAG = 512;
/**
* Creates a function that wraps `func` to invoke it with optional `this`
@@ -31,11 +31,11 @@ define(['./_composeArgs', './_composeArgsRight', './_countHolders', './_createCt
* @returns {Function} Returns the new wrapped function.
*/
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
- var isAry = bitmask & ARY_FLAG,
- isBind = bitmask & BIND_FLAG,
- isBindKey = bitmask & BIND_KEY_FLAG,
- isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),
- isFlip = bitmask & FLIP_FLAG,
+ var isAry = bitmask & WRAP_ARY_FLAG,
+ isBind = bitmask & WRAP_BIND_FLAG,
+ isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
+ isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
+ isFlip = bitmask & WRAP_FLIP_FLAG,
Ctor = isBindKey ? undefined : createCtor(func);
function wrapper() {
diff --git a/_createPartial.js b/_createPartial.js
index b42c70c15..fa3a0886b 100644
--- a/_createPartial.js
+++ b/_createPartial.js
@@ -1,7 +1,7 @@
define(['./_apply', './_createCtor', './_root'], function(apply, createCtor, root) {
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1;
+ var WRAP_BIND_FLAG = 1;
/**
* Creates a function that wraps `func` to invoke it with the `this` binding
@@ -16,7 +16,7 @@ define(['./_apply', './_createCtor', './_root'], function(apply, createCtor, roo
* @returns {Function} Returns the new wrapped function.
*/
function createPartial(func, bitmask, thisArg, partials) {
- var isBind = bitmask & BIND_FLAG,
+ var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func);
function wrapper() {
diff --git a/_createRecurry.js b/_createRecurry.js
index 65eef4187..c4f4509e9 100644
--- a/_createRecurry.js
+++ b/_createRecurry.js
@@ -4,12 +4,12 @@ define(['./_isLaziable', './_setData', './_setWrapToString'], function(isLaziabl
var undefined;
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- BIND_KEY_FLAG = 2,
- CURRY_BOUND_FLAG = 4,
- CURRY_FLAG = 8,
- PARTIAL_FLAG = 32,
- PARTIAL_RIGHT_FLAG = 64;
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_BOUND_FLAG = 4,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_PARTIAL_FLAG = 32,
+ WRAP_PARTIAL_RIGHT_FLAG = 64;
/**
* Creates a function that wraps `func` to continue currying.
@@ -29,17 +29,17 @@ define(['./_isLaziable', './_setData', './_setWrapToString'], function(isLaziabl
* @returns {Function} Returns the new wrapped function.
*/
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
- var isCurry = bitmask & CURRY_FLAG,
+ var isCurry = bitmask & WRAP_CURRY_FLAG,
newHolders = isCurry ? holders : undefined,
newHoldersRight = isCurry ? undefined : holders,
newPartials = isCurry ? partials : undefined,
newPartialsRight = isCurry ? undefined : partials;
- bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
- bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
+ bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
+ bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
- if (!(bitmask & CURRY_BOUND_FLAG)) {
- bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
+ if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
+ bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
}
var newData = [
func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
diff --git a/_createWrap.js b/_createWrap.js
index 4282340b5..38cbe4cc5 100644
--- a/_createWrap.js
+++ b/_createWrap.js
@@ -7,12 +7,12 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
var FUNC_ERROR_TEXT = 'Expected a function';
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- BIND_KEY_FLAG = 2,
- CURRY_FLAG = 8,
- CURRY_RIGHT_FLAG = 16,
- PARTIAL_FLAG = 32,
- PARTIAL_RIGHT_FLAG = 64;
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_CURRY_RIGHT_FLAG = 16,
+ WRAP_PARTIAL_FLAG = 32,
+ WRAP_PARTIAL_RIGHT_FLAG = 64;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;
@@ -24,17 +24,16 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
* @private
* @param {Function|string} func The function or method name to wrap.
* @param {number} bitmask The bitmask flags.
- * The bitmask may be composed of the following flags:
- * 1 - `_.bind`
- * 2 - `_.bindKey`
- * 4 - `_.curry` or `_.curryRight` of a bound function
- * 8 - `_.curry`
- * 16 - `_.curryRight`
- * 32 - `_.partial`
- * 64 - `_.partialRight`
- * 128 - `_.rearg`
- * 256 - `_.ary`
- * 512 - `_.flip`
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry` or `_.curryRight` of a bound function
+ * 8 - `_.curry`
+ * 16 - `_.curryRight`
+ * 32 - `_.partial`
+ * 64 - `_.partialRight`
+ * 128 - `_.rearg`
+ * 256 - `_.ary`
+ * 512 - `_.flip`
* @param {*} [thisArg] The `this` binding of `func`.
* @param {Array} [partials] The arguments to be partially applied.
* @param {Array} [holders] The `partials` placeholder indexes.
@@ -44,20 +43,20 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
* @returns {Function} Returns the new wrapped function.
*/
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
- var isBindKey = bitmask & BIND_KEY_FLAG;
+ var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
if (!isBindKey && typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
var length = partials ? partials.length : 0;
if (!length) {
- bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
+ bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
partials = holders = undefined;
}
ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
arity = arity === undefined ? arity : toInteger(arity);
length -= holders ? holders.length : 0;
- if (bitmask & PARTIAL_RIGHT_FLAG) {
+ if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
var partialsRight = partials,
holdersRight = holders;
@@ -82,14 +81,14 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
? (isBindKey ? 0 : func.length)
: nativeMax(newData[9] - length, 0);
- if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {
- bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);
+ if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
+ bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
}
- if (!bitmask || bitmask == BIND_FLAG) {
+ if (!bitmask || bitmask == WRAP_BIND_FLAG) {
var result = createBind(func, bitmask, thisArg);
- } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {
+ } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
result = createCurry(func, bitmask, arity);
- } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {
+ } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
result = createPartial(func, bitmask, thisArg, partials);
} else {
result = createHybrid.apply(undefined, newData);
diff --git a/_equalArrays.js b/_equalArrays.js
index 5bfcd381b..383df5d1c 100644
--- a/_equalArrays.js
+++ b/_equalArrays.js
@@ -3,9 +3,9 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
- /** Used to compose bitmasks for comparison styles. */
- var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1,
+ COMPARE_UNORDERED_FLAG = 2;
/**
* A specialized version of `baseIsEqualDeep` for arrays with support for
@@ -14,15 +14,14 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
* @private
* @param {Array} array The array to compare.
* @param {Array} other The other array to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
+ * @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `array` and `other` objects.
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
*/
- function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
arrLength = array.length,
othLength = other.length;
@@ -36,7 +35,7 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
}
var index = -1,
result = true,
- seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
stack.set(array, other);
stack.set(other, array);
@@ -62,7 +61,7 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
if (seen) {
if (!arraySome(other, function(othValue, othIndex) {
if (!cacheHas(seen, othIndex) &&
- (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
return seen.push(othIndex);
}
})) {
@@ -71,7 +70,7 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
}
} else if (!(
arrValue === othValue ||
- equalFunc(arrValue, othValue, customizer, bitmask, stack)
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
)) {
result = false;
break;
diff --git a/_equalByTag.js b/_equalByTag.js
index 51df7a919..98f7da124 100644
--- a/_equalByTag.js
+++ b/_equalByTag.js
@@ -3,9 +3,9 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
- /** Used to compose bitmasks for comparison styles. */
- var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1,
+ COMPARE_UNORDERED_FLAG = 2;
/** `Object#toString` result references. */
var boolTag = '[object Boolean]',
@@ -36,14 +36,13 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {string} tag The `toStringTag` of the objects to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
+ * @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
- function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag:
if ((object.byteLength != other.byteLength) ||
@@ -81,7 +80,7 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
var convert = mapToArray;
case setTag:
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
convert || (convert = setToArray);
if (object.size != other.size && !isPartial) {
@@ -92,11 +91,11 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
if (stacked) {
return stacked == other;
}
- bitmask |= UNORDERED_COMPARE_FLAG;
+ bitmask |= COMPARE_UNORDERED_FLAG;
// Recursively compare objects (susceptible to call stack limits).
stack.set(object, other);
- var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
+ var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
stack['delete'](object);
return result;
diff --git a/_equalObjects.js b/_equalObjects.js
index df4cc37b5..ec7bd4d16 100644
--- a/_equalObjects.js
+++ b/_equalObjects.js
@@ -3,8 +3,8 @@ define(['./keys'], function(keys) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
- /** Used to compose bitmasks for comparison styles. */
- var PARTIAL_COMPARE_FLAG = 2;
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1;
/** Used for built-in method references. */
var objectProto = Object.prototype;
@@ -19,15 +19,14 @@ define(['./keys'], function(keys) {
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
+ * @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
- function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
objProps = keys(object),
objLength = objProps.length,
othProps = keys(other),
@@ -65,7 +64,7 @@ define(['./keys'], function(keys) {
}
// Recursively compare objects (susceptible to call stack limits).
if (!(compared === undefined
- ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
: compared
)) {
result = false;
diff --git a/_getSymbols.js b/_getSymbols.js
index abdb4b185..50a9e4fce 100644
--- a/_getSymbols.js
+++ b/_getSymbols.js
@@ -4,7 +4,7 @@ define(['./_overArg', './stubArray'], function(overArg, stubArray) {
var nativeGetSymbols = Object.getOwnPropertySymbols;
/**
- * Creates an array of the own enumerable symbol properties of `object`.
+ * Creates an array of the own enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
diff --git a/_getSymbolsIn.js b/_getSymbolsIn.js
index f7f9cb270..a0ffda697 100644
--- a/_getSymbolsIn.js
+++ b/_getSymbolsIn.js
@@ -4,8 +4,7 @@ define(['./_arrayPush', './_getPrototype', './_getSymbols', './stubArray'], func
var nativeGetSymbols = Object.getOwnPropertySymbols;
/**
- * Creates an array of the own and inherited enumerable symbol properties
- * of `object`.
+ * Creates an array of the own and inherited enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
diff --git a/_hasUnicode.js b/_hasUnicode.js
index ce9d5c0e8..0e2901dab 100644
--- a/_hasUnicode.js
+++ b/_hasUnicode.js
@@ -2,15 +2,17 @@ define([], function() {
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
- rsComboSymbolsRange = '\\u20d0-\\u20f0',
+ rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d';
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
- var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
+ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
/**
* Checks if `string` contains Unicode symbols.
diff --git a/_mergeData.js b/_mergeData.js
index ba1aed3ae..5431c52b9 100644
--- a/_mergeData.js
+++ b/_mergeData.js
@@ -4,12 +4,12 @@ define(['./_composeArgs', './_composeArgsRight', './_replaceHolders'], function(
var PLACEHOLDER = '__lodash_placeholder__';
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- BIND_KEY_FLAG = 2,
- CURRY_BOUND_FLAG = 4,
- CURRY_FLAG = 8,
- ARY_FLAG = 128,
- REARG_FLAG = 256;
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_BOUND_FLAG = 4,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_ARY_FLAG = 128,
+ WRAP_REARG_FLAG = 256;
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min;
@@ -34,22 +34,22 @@ define(['./_composeArgs', './_composeArgsRight', './_replaceHolders'], function(
var bitmask = data[1],
srcBitmask = source[1],
newBitmask = bitmask | srcBitmask,
- isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG);
+ isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
var isCombo =
- ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) ||
- ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) ||
- ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG));
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
+ ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
// Exit early if metadata can't be merged.
if (!(isCommon || isCombo)) {
return data;
}
// Use source `thisArg` if available.
- if (srcBitmask & BIND_FLAG) {
+ if (srcBitmask & WRAP_BIND_FLAG) {
data[2] = source[2];
// Set when currying a bound function.
- newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG;
+ newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
}
// Compose partial arguments.
var value = source[3];
@@ -71,7 +71,7 @@ define(['./_composeArgs', './_composeArgsRight', './_replaceHolders'], function(
data[7] = value;
}
// Use source `ary` if it's smaller.
- if (srcBitmask & ARY_FLAG) {
+ if (srcBitmask & WRAP_ARY_FLAG) {
data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
}
// Use source `arity` if one is not provided.
diff --git a/_nodeUtil.js b/_nodeUtil.js
index 8e1cb7aa4..e8e7e9ab3 100644
--- a/_nodeUtil.js
+++ b/_nodeUtil.js
@@ -15,7 +15,7 @@ define(['./_freeGlobal'], function(freeGlobal) {
/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
try {
- return freeProcess && freeProcess.binding('util');
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {}
}());
diff --git a/_unicodeSize.js b/_unicodeSize.js
index 166d412b8..a1f8822df 100644
--- a/_unicodeSize.js
+++ b/_unicodeSize.js
@@ -2,13 +2,15 @@ define([], function() {
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
- rsComboSymbolsRange = '\\u20d0-\\u20f0',
+ rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
- rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
+ rsCombo = '[' + rsComboRange + ']',
rsFitz = '\\ud83c[\\udffb-\\udfff]',
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']',
diff --git a/_unicodeToArray.js b/_unicodeToArray.js
index 1ab668d5b..58590d2d6 100644
--- a/_unicodeToArray.js
+++ b/_unicodeToArray.js
@@ -2,13 +2,15 @@ define([], function() {
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
- rsComboSymbolsRange = '\\u20d0-\\u20f0',
+ rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']',
- rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
+ rsCombo = '[' + rsComboRange + ']',
rsFitz = '\\ud83c[\\udffb-\\udfff]',
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']',
diff --git a/_unicodeWords.js b/_unicodeWords.js
index 0fb4c8f63..10ea2346e 100644
--- a/_unicodeWords.js
+++ b/_unicodeWords.js
@@ -2,8 +2,10 @@ define([], function() {
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
- rsComboSymbolsRange = '\\u20d0-\\u20f0',
+ rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsDingbatRange = '\\u2700-\\u27bf',
rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
@@ -17,7 +19,7 @@ define([], function() {
/** Used to compose unicode capture groups. */
var rsApos = "['\u2019]",
rsBreak = '[' + rsBreakRange + ']',
- rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
+ rsCombo = '[' + rsComboRange + ']',
rsDigits = '\\d+',
rsDingbat = '[' + rsDingbatRange + ']',
rsLower = '[' + rsLowerRange + ']',
diff --git a/_updateWrapDetails.js b/_updateWrapDetails.js
index 43a7d8871..b9e1c6b48 100644
--- a/_updateWrapDetails.js
+++ b/_updateWrapDetails.js
@@ -1,27 +1,27 @@
define(['./_arrayEach', './_arrayIncludes'], function(arrayEach, arrayIncludes) {
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- BIND_KEY_FLAG = 2,
- CURRY_FLAG = 8,
- CURRY_RIGHT_FLAG = 16,
- PARTIAL_FLAG = 32,
- PARTIAL_RIGHT_FLAG = 64,
- ARY_FLAG = 128,
- REARG_FLAG = 256,
- FLIP_FLAG = 512;
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_CURRY_RIGHT_FLAG = 16,
+ WRAP_PARTIAL_FLAG = 32,
+ WRAP_PARTIAL_RIGHT_FLAG = 64,
+ WRAP_ARY_FLAG = 128,
+ WRAP_REARG_FLAG = 256,
+ WRAP_FLIP_FLAG = 512;
/** Used to associate wrap methods with their bit flags. */
var wrapFlags = [
- ['ary', ARY_FLAG],
- ['bind', BIND_FLAG],
- ['bindKey', BIND_KEY_FLAG],
- ['curry', CURRY_FLAG],
- ['curryRight', CURRY_RIGHT_FLAG],
- ['flip', FLIP_FLAG],
- ['partial', PARTIAL_FLAG],
- ['partialRight', PARTIAL_RIGHT_FLAG],
- ['rearg', REARG_FLAG]
+ ['ary', WRAP_ARY_FLAG],
+ ['bind', WRAP_BIND_FLAG],
+ ['bindKey', WRAP_BIND_KEY_FLAG],
+ ['curry', WRAP_CURRY_FLAG],
+ ['curryRight', WRAP_CURRY_RIGHT_FLAG],
+ ['flip', WRAP_FLIP_FLAG],
+ ['partial', WRAP_PARTIAL_FLAG],
+ ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
+ ['rearg', WRAP_REARG_FLAG]
];
/**
diff --git a/ary.js b/ary.js
index dc5d06ec8..e2f9096f0 100644
--- a/ary.js
+++ b/ary.js
@@ -4,7 +4,7 @@ define(['./_createWrap'], function(createWrap) {
var undefined;
/** Used to compose bitmasks for function metadata. */
- var ARY_FLAG = 128;
+ var WRAP_ARY_FLAG = 128;
/**
* Creates a function that invokes `func`, with up to `n` arguments,
@@ -26,7 +26,7 @@ define(['./_createWrap'], function(createWrap) {
function ary(func, n, guard) {
n = guard ? undefined : n;
n = (func && n == null) ? func.length : n;
- return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
+ return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
}
return ary;
diff --git a/at.js b/at.js
index fa34f44d6..7c63ed3e0 100644
--- a/at.js
+++ b/at.js
@@ -8,7 +8,7 @@ define(['./_baseAt', './_flatRest'], function(baseAt, flatRest) {
* @since 1.0.0
* @category Object
* @param {Object} object The object to iterate over.
- * @param {...(string|string[])} [paths] The property paths of elements to pick.
+ * @param {...(string|string[])} [paths] The property paths to pick.
* @returns {Array} Returns the picked values.
* @example
*
diff --git a/bind.js b/bind.js
index 614465939..318747de3 100644
--- a/bind.js
+++ b/bind.js
@@ -1,8 +1,8 @@
define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], function(baseRest, createWrap, getHolder, replaceHolders) {
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- PARTIAL_FLAG = 32;
+ var WRAP_BIND_FLAG = 1,
+ WRAP_PARTIAL_FLAG = 32;
/**
* Creates a function that invokes `func` with the `this` binding of `thisArg`
@@ -40,10 +40,10 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
* // => 'hi fred!'
*/
var bind = baseRest(function(func, thisArg, partials) {
- var bitmask = BIND_FLAG;
+ var bitmask = WRAP_BIND_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bind));
- bitmask |= PARTIAL_FLAG;
+ bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(func, bitmask, thisArg, partials, holders);
});
diff --git a/bindKey.js b/bindKey.js
index c4cbe271e..7e2f947d9 100644
--- a/bindKey.js
+++ b/bindKey.js
@@ -1,9 +1,9 @@
define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], function(baseRest, createWrap, getHolder, replaceHolders) {
/** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- BIND_KEY_FLAG = 2,
- PARTIAL_FLAG = 32;
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_PARTIAL_FLAG = 32;
/**
* Creates a function that invokes the method at `object[key]` with `partials`
@@ -51,10 +51,10 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
* // => 'hiya fred!'
*/
var bindKey = baseRest(function(object, key, partials) {
- var bitmask = BIND_FLAG | BIND_KEY_FLAG;
+ var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bindKey));
- bitmask |= PARTIAL_FLAG;
+ bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(key, bitmask, object, partials, holders);
});
diff --git a/clone.js b/clone.js
index 37caad72d..f80908d68 100644
--- a/clone.js
+++ b/clone.js
@@ -1,5 +1,8 @@
define(['./_baseClone'], function(baseClone) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_SYMBOLS_FLAG = 4;
+
/**
* Creates a shallow clone of `value`.
*
@@ -27,7 +30,7 @@ define(['./_baseClone'], function(baseClone) {
* // => true
*/
function clone(value) {
- return baseClone(value, false, true);
+ return baseClone(value, CLONE_SYMBOLS_FLAG);
}
return clone;
diff --git a/cloneDeep.js b/cloneDeep.js
index 013c222f5..5ee4e0bda 100644
--- a/cloneDeep.js
+++ b/cloneDeep.js
@@ -1,5 +1,9 @@
define(['./_baseClone'], function(baseClone) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1,
+ CLONE_SYMBOLS_FLAG = 4;
+
/**
* This method is like `_.clone` except that it recursively clones `value`.
*
@@ -19,7 +23,7 @@ define(['./_baseClone'], function(baseClone) {
* // => false
*/
function cloneDeep(value) {
- return baseClone(value, true, true);
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
}
return cloneDeep;
diff --git a/cloneDeepWith.js b/cloneDeepWith.js
index 38d53fb70..fed9ab4a6 100644
--- a/cloneDeepWith.js
+++ b/cloneDeepWith.js
@@ -3,6 +3,10 @@ define(['./_baseClone'], function(baseClone) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1,
+ CLONE_SYMBOLS_FLAG = 4;
+
/**
* This method is like `_.cloneWith` except that it recursively clones `value`.
*
@@ -33,7 +37,7 @@ define(['./_baseClone'], function(baseClone) {
*/
function cloneDeepWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined;
- return baseClone(value, true, true, customizer);
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
}
return cloneDeepWith;
diff --git a/cloneWith.js b/cloneWith.js
index 86cb498ec..6ef3e995d 100644
--- a/cloneWith.js
+++ b/cloneWith.js
@@ -3,6 +3,9 @@ define(['./_baseClone'], function(baseClone) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined;
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_SYMBOLS_FLAG = 4;
+
/**
* This method is like `_.clone` except that it accepts `customizer` which
* is invoked to produce the cloned value. If `customizer` returns `undefined`,
@@ -36,7 +39,7 @@ define(['./_baseClone'], function(baseClone) {
*/
function cloneWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined;
- return baseClone(value, false, true, customizer);
+ return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
}
return cloneWith;
diff --git a/conforms.js b/conforms.js
index f5d9fb3fd..bcde4d859 100644
--- a/conforms.js
+++ b/conforms.js
@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseConforms'], function(baseClone, baseConforms) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1;
+
/**
* Creates a function that invokes the predicate properties of `source` with
* the corresponding property values of a given object, returning `true` if
@@ -25,7 +28,7 @@ define(['./_baseClone', './_baseConforms'], function(baseClone, baseConforms) {
* // => [{ 'a': 1, 'b': 2 }]
*/
function conforms(source) {
- return baseConforms(baseClone(source, true));
+ return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
}
return conforms;
diff --git a/curry.js b/curry.js
index e5c8b5442..07572e3dd 100644
--- a/curry.js
+++ b/curry.js
@@ -4,7 +4,7 @@ define(['./_createWrap'], function(createWrap) {
var undefined;
/** Used to compose bitmasks for function metadata. */
- var CURRY_FLAG = 8;
+ var WRAP_CURRY_FLAG = 8;
/**
* Creates a function that accepts arguments of `func` and either invokes
@@ -49,7 +49,7 @@ define(['./_createWrap'], function(createWrap) {
*/
function curry(func, arity, guard) {
arity = guard ? undefined : arity;
- var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
+ var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
result.placeholder = curry.placeholder;
return result;
}
diff --git a/curryRight.js b/curryRight.js
index d12df475c..c4c0eb0ff 100644
--- a/curryRight.js
+++ b/curryRight.js
@@ -4,7 +4,7 @@ define(['./_createWrap'], function(createWrap) {
var undefined;
/** Used to compose bitmasks for function metadata. */
- var CURRY_RIGHT_FLAG = 16;
+ var WRAP_CURRY_RIGHT_FLAG = 16;
/**
* This method is like `_.curry` except that arguments are applied to `func`
@@ -46,7 +46,7 @@ define(['./_createWrap'], function(createWrap) {
*/
function curryRight(func, arity, guard) {
arity = guard ? undefined : arity;
- var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
+ var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
result.placeholder = curryRight.placeholder;
return result;
}
diff --git a/deburr.js b/deburr.js
index 3e23e9c0e..3570e70c3 100644
--- a/deburr.js
+++ b/deburr.js
@@ -4,11 +4,13 @@ define(['./_deburrLetter', './toString'], function(deburrLetter, toString) {
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
/** Used to compose unicode character classes. */
- var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
- rsComboSymbolsRange = '\\u20d0-\\u20f0';
+ var rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;
/** Used to compose unicode capture groups. */
- var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']';
+ var rsCombo = '[' + rsComboRange + ']';
/**
* Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
diff --git a/flip.js b/flip.js
index 33969dd12..46f732ecb 100644
--- a/flip.js
+++ b/flip.js
@@ -1,7 +1,7 @@
define(['./_createWrap'], function(createWrap) {
/** Used to compose bitmasks for function metadata. */
- var FLIP_FLAG = 512;
+ var WRAP_FLIP_FLAG = 512;
/**
* Creates a function that invokes `func` with arguments reversed.
@@ -22,7 +22,7 @@ define(['./_createWrap'], function(createWrap) {
* // => ['d', 'c', 'b', 'a']
*/
function flip(func) {
- return createWrap(func, FLIP_FLAG);
+ return createWrap(func, WRAP_FLIP_FLAG);
}
return flip;
diff --git a/isEqualWith.js b/isEqualWith.js
index c4e62066c..05fa4a3f5 100644
--- a/isEqualWith.js
+++ b/isEqualWith.js
@@ -38,7 +38,7 @@ define(['./_baseIsEqual'], function(baseIsEqual) {
function isEqualWith(value, other, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined;
var result = customizer ? customizer(value, other) : undefined;
- return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
+ return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
}
return isEqualWith;
diff --git a/isNative.js b/isNative.js
index 0befcc831..e1b6fd087 100644
--- a/isNative.js
+++ b/isNative.js
@@ -1,7 +1,7 @@
define(['./_baseIsNative', './_isMaskable'], function(baseIsNative, isMaskable) {
/** Error message constants. */
- var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://github.com/es-shims.';
+ var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.';
/**
* Checks if `value` is a pristine native function.
diff --git a/iteratee.js b/iteratee.js
index 1acae35b3..8f633e963 100644
--- a/iteratee.js
+++ b/iteratee.js
@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseIteratee'], function(baseClone, baseIteratee) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1;
+
/**
* Creates a function that invokes `func` with the arguments of the created
* function. If `func` is a property name, the created function returns the
@@ -43,7 +46,7 @@ define(['./_baseClone', './_baseIteratee'], function(baseClone, baseIteratee) {
* // => ['def']
*/
function iteratee(func) {
- return baseIteratee(typeof func == 'function' ? func : baseClone(func, true));
+ return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
}
return iteratee;
diff --git a/main.js b/main.js
index 7f3226538..fe28c60ed 100644
--- a/main.js
+++ b/main.js
@@ -1,6 +1,6 @@
/**
* @license
- * lodash (Custom Build)
+ * Lodash (Custom Build)
* Build: `lodash exports="amd" -d -o ./main.js`
* Copyright JS Foundation and other contributors
* Released under MIT license
@@ -13,13 +13,13 @@
var undefined;
/** Used as the semantic version number. */
- var VERSION = '4.16.6';
+ var VERSION = '4.17.0';
/** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200;
/** Error message constants. */
- var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://github.com/es-shims.',
+ var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
FUNC_ERROR_TEXT = 'Expected a function';
/** Used to stand-in for `undefined` hash values. */
@@ -31,21 +31,26 @@
/** Used as the internal argument placeholder. */
var PLACEHOLDER = '__lodash_placeholder__';
- /** Used to compose bitmasks for function metadata. */
- var BIND_FLAG = 1,
- BIND_KEY_FLAG = 2,
- CURRY_BOUND_FLAG = 4,
- CURRY_FLAG = 8,
- CURRY_RIGHT_FLAG = 16,
- PARTIAL_FLAG = 32,
- PARTIAL_RIGHT_FLAG = 64,
- ARY_FLAG = 128,
- REARG_FLAG = 256,
- FLIP_FLAG = 512;
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1,
+ CLONE_FLAT_FLAG = 2,
+ CLONE_SYMBOLS_FLAG = 4;
- /** Used to compose bitmasks for comparison styles. */
- var UNORDERED_COMPARE_FLAG = 1,
- PARTIAL_COMPARE_FLAG = 2;
+ /** Used to compose bitmasks for value comparisons. */
+ var COMPARE_PARTIAL_FLAG = 1,
+ COMPARE_UNORDERED_FLAG = 2;
+
+ /** Used to compose bitmasks for function metadata. */
+ var WRAP_BIND_FLAG = 1,
+ WRAP_BIND_KEY_FLAG = 2,
+ WRAP_CURRY_BOUND_FLAG = 4,
+ WRAP_CURRY_FLAG = 8,
+ WRAP_CURRY_RIGHT_FLAG = 16,
+ WRAP_PARTIAL_FLAG = 32,
+ WRAP_PARTIAL_RIGHT_FLAG = 64,
+ WRAP_ARY_FLAG = 128,
+ WRAP_REARG_FLAG = 256,
+ WRAP_FLIP_FLAG = 512;
/** Used as default options for `_.truncate`. */
var DEFAULT_TRUNC_LENGTH = 30,
@@ -73,15 +78,15 @@
/** Used to associate wrap methods with their bit flags. */
var wrapFlags = [
- ['ary', ARY_FLAG],
- ['bind', BIND_FLAG],
- ['bindKey', BIND_KEY_FLAG],
- ['curry', CURRY_FLAG],
- ['curryRight', CURRY_RIGHT_FLAG],
- ['flip', FLIP_FLAG],
- ['partial', PARTIAL_FLAG],
- ['partialRight', PARTIAL_RIGHT_FLAG],
- ['rearg', REARG_FLAG]
+ ['ary', WRAP_ARY_FLAG],
+ ['bind', WRAP_BIND_FLAG],
+ ['bindKey', WRAP_BIND_KEY_FLAG],
+ ['curry', WRAP_CURRY_FLAG],
+ ['curryRight', WRAP_CURRY_RIGHT_FLAG],
+ ['flip', WRAP_FLIP_FLAG],
+ ['partial', WRAP_PARTIAL_FLAG],
+ ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
+ ['rearg', WRAP_REARG_FLAG]
];
/** `Object#toString` result references. */
@@ -200,8 +205,10 @@
/** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff',
- rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
- rsComboSymbolsRange = '\\u20d0-\\u20f0',
+ rsComboMarksRange = '\\u0300-\\u036f',
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsDingbatRange = '\\u2700-\\u27bf',
rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
@@ -216,7 +223,7 @@
var rsApos = "['\u2019]",
rsAstral = '[' + rsAstralRange + ']',
rsBreak = '[' + rsBreakRange + ']',
- rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
+ rsCombo = '[' + rsComboRange + ']',
rsDigits = '\\d+',
rsDingbat = '[' + rsDingbatRange + ']',
rsLower = '[' + rsLowerRange + ']',
@@ -268,7 +275,7 @@
].join('|'), 'g');
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
- var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
+ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
/** Used to detect strings that need a more robust regexp to match words. */
var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
@@ -431,7 +438,7 @@
/** Used to access faster Node.js helpers. */
var nodeUtil = (function() {
try {
- return freeProcess && freeProcess.binding('util');
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {}
}());
@@ -2559,6 +2566,19 @@
return object && copyObject(source, keys(source), object);
}
+ /**
+ * The base implementation of `_.assignIn` without support for multiple sources
+ * or `customizer` functions.
+ *
+ * @private
+ * @param {Object} object The destination object.
+ * @param {Object} source The source object.
+ * @returns {Object} Returns `object`.
+ */
+ function baseAssignIn(object, source) {
+ return object && copyObject(source, keysIn(source), object);
+ }
+
/**
* The base implementation of `assignValue` and `assignMergeValue` without
* value checks.
@@ -2586,7 +2606,7 @@
*
* @private
* @param {Object} object The object to iterate over.
- * @param {string[]} paths The property paths of elements to pick.
+ * @param {string[]} paths The property paths to pick.
* @returns {Array} Returns the picked elements.
*/
function baseAt(object, paths) {
@@ -2628,16 +2648,22 @@
*
* @private
* @param {*} value The value to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @param {boolean} [isFull] Specify a clone including symbols.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Deep clone
+ * 2 - Flatten inherited properties
+ * 4 - Clone 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;
+ function baseClone(value, bitmask, customizer, key, object, stack) {
+ var result,
+ isDeep = bitmask & CLONE_DEEP_FLAG,
+ isFlat = bitmask & CLONE_FLAT_FLAG,
+ isFull = bitmask & CLONE_SYMBOLS_FLAG;
+
if (customizer) {
result = object ? customizer(value, key, object, stack) : customizer(value);
}
@@ -2661,9 +2687,11 @@
return cloneBuffer(value, isDeep);
}
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
- result = initCloneObject(isFunc ? {} : value);
+ result = (isFlat || isFunc) ? {} : initCloneObject(value);
if (!isDeep) {
- return copySymbols(value, baseAssign(result, value));
+ return isFlat
+ ? copySymbolsIn(value, baseAssignIn(result, value))
+ : copySymbols(value, baseAssign(result, value));
}
} else {
if (!cloneableTags[tag]) {
@@ -2680,14 +2708,18 @@
}
stack.set(value, result);
- var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value);
+ var keysFunc = isFull
+ ? (isFlat ? getAllKeysIn : getAllKeys)
+ : (isFlat ? keysIn : keys);
+
+ var props = isArr ? undefined : keysFunc(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));
+ assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
});
return result;
}
@@ -3260,22 +3292,21 @@
* @private
* @param {*} value The value to compare.
* @param {*} other The other value to compare.
+ * @param {boolean} bitmask The bitmask flags.
+ * 1 - Unordered comparison
+ * 2 - Partial comparison
* @param {Function} [customizer] The function to customize comparisons.
- * @param {boolean} [bitmask] The bitmask of comparison flags.
- * The bitmask may be composed of the following flags:
- * 1 - Unordered comparison
- * 2 - Partial comparison
* @param {Object} [stack] Tracks traversed `value` and `other` objects.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
*/
- function baseIsEqual(value, other, customizer, bitmask, stack) {
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
if (value === other) {
return true;
}
if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
return value !== value && other !== other;
}
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
/**
@@ -3286,14 +3317,13 @@
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
+ * @param {Function} customizer The function to customize comparisons.
* @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
- function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray(object),
othIsArr = isArray(other),
objTag = arrayTag,
@@ -3321,10 +3351,10 @@
if (isSameTag && !objIsObj) {
stack || (stack = new Stack);
return (objIsArr || isTypedArray(object))
- ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
- : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
+ ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
+ : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
}
- if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
@@ -3333,14 +3363,14 @@
othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack);
- return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
+ return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
if (!isSameTag) {
return false;
}
stack || (stack = new Stack);
- return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
+ return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
}
/**
@@ -3398,7 +3428,7 @@
var result = customizer(objValue, srcValue, key, object, source, stack);
}
if (!(result === undefined
- ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
+ ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
: result
)) {
return false;
@@ -3588,7 +3618,7 @@
var objValue = get(object, path);
return (objValue === undefined && objValue === srcValue)
? hasIn(object, path)
- : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
+ : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
};
}
@@ -3750,13 +3780,13 @@
*
* @private
* @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick.
+ * @param {string[]} paths The property paths to pick.
* @returns {Object} Returns the new object.
*/
- function basePick(object, props) {
+ function basePick(object, paths) {
object = Object(object);
- return basePickBy(object, props, function(value, key) {
- return key in object;
+ return basePickBy(object, paths, function(value, path) {
+ return hasIn(object, path);
});
}
@@ -3765,21 +3795,21 @@
*
* @private
* @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick from.
+ * @param {string[]} paths The property paths to pick.
* @param {Function} predicate The function invoked per property.
* @returns {Object} Returns the new object.
*/
- function basePickBy(object, props, predicate) {
+ function basePickBy(object, paths, predicate) {
var index = -1,
- length = props.length,
+ length = paths.length,
result = {};
while (++index < length) {
- var key = props[index],
- value = object[key];
+ var path = paths[index],
+ value = baseGet(object, path);
- if (predicate(value, key)) {
- baseAssignValue(result, key, value);
+ if (predicate(value, path)) {
+ baseSet(result, path, value);
}
}
return result;
@@ -4323,7 +4353,7 @@
*
* @private
* @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to unset.
+ * @param {Array|string} path The property path to unset.
* @returns {boolean} Returns `true` if the property is deleted, else `false`.
*/
function baseUnset(object, path) {
@@ -4568,7 +4598,7 @@
* @returns {Object} Returns the cloned map.
*/
function cloneMap(map, isDeep, cloneFunc) {
- var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
+ var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);
return arrayReduce(array, addMapEntry, new map.constructor);
}
@@ -4595,7 +4625,7 @@
* @returns {Object} Returns the cloned set.
*/
function cloneSet(set, isDeep, cloneFunc) {
- var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
+ var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);
return arrayReduce(array, addSetEntry, new set.constructor);
}
@@ -4830,7 +4860,7 @@
}
/**
- * Copies own symbol properties of `source` to `object`.
+ * Copies own symbols of `source` to `object`.
*
* @private
* @param {Object} source The object to copy symbols from.
@@ -4841,6 +4871,18 @@
return copyObject(source, getSymbols(source), object);
}
+ /**
+ * Copies own and inherited symbols 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 copySymbolsIn(source, object) {
+ return copyObject(source, getSymbolsIn(source), object);
+ }
+
/**
* Creates a function like `_.groupBy`.
*
@@ -4955,7 +4997,7 @@
* @returns {Function} Returns the new wrapped function.
*/
function createBind(func, bitmask, thisArg) {
- var isBind = bitmask & BIND_FLAG,
+ var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func);
function wrapper() {
@@ -5128,7 +5170,7 @@
data = funcName == 'wrapper' ? getData(func) : undefined;
if (data && isLaziable(data[0]) &&
- data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) &&
+ data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
!data[4].length && data[9] == 1
) {
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
@@ -5177,11 +5219,11 @@
* @returns {Function} Returns the new wrapped function.
*/
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
- var isAry = bitmask & ARY_FLAG,
- isBind = bitmask & BIND_FLAG,
- isBindKey = bitmask & BIND_KEY_FLAG,
- isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),
- isFlip = bitmask & FLIP_FLAG,
+ var isAry = bitmask & WRAP_ARY_FLAG,
+ isBind = bitmask & WRAP_BIND_FLAG,
+ isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
+ isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
+ isFlip = bitmask & WRAP_FLIP_FLAG,
Ctor = isBindKey ? undefined : createCtor(func);
function wrapper() {
@@ -5332,7 +5374,7 @@
* @returns {Function} Returns the new wrapped function.
*/
function createPartial(func, bitmask, thisArg, partials) {
- var isBind = bitmask & BIND_FLAG,
+ var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func);
function wrapper() {
@@ -5414,17 +5456,17 @@
* @returns {Function} Returns the new wrapped function.
*/
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
- var isCurry = bitmask & CURRY_FLAG,
+ var isCurry = bitmask & WRAP_CURRY_FLAG,
newHolders = isCurry ? holders : undefined,
newHoldersRight = isCurry ? undefined : holders,
newPartials = isCurry ? partials : undefined,
newPartialsRight = isCurry ? undefined : partials;
- bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
- bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
+ bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
+ bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
- if (!(bitmask & CURRY_BOUND_FLAG)) {
- bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
+ if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
+ bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
}
var newData = [
func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
@@ -5502,17 +5544,16 @@
* @private
* @param {Function|string} func The function or method name to wrap.
* @param {number} bitmask The bitmask flags.
- * The bitmask may be composed of the following flags:
- * 1 - `_.bind`
- * 2 - `_.bindKey`
- * 4 - `_.curry` or `_.curryRight` of a bound function
- * 8 - `_.curry`
- * 16 - `_.curryRight`
- * 32 - `_.partial`
- * 64 - `_.partialRight`
- * 128 - `_.rearg`
- * 256 - `_.ary`
- * 512 - `_.flip`
+ * 1 - `_.bind`
+ * 2 - `_.bindKey`
+ * 4 - `_.curry` or `_.curryRight` of a bound function
+ * 8 - `_.curry`
+ * 16 - `_.curryRight`
+ * 32 - `_.partial`
+ * 64 - `_.partialRight`
+ * 128 - `_.rearg`
+ * 256 - `_.ary`
+ * 512 - `_.flip`
* @param {*} [thisArg] The `this` binding of `func`.
* @param {Array} [partials] The arguments to be partially applied.
* @param {Array} [holders] The `partials` placeholder indexes.
@@ -5522,20 +5563,20 @@
* @returns {Function} Returns the new wrapped function.
*/
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
- var isBindKey = bitmask & BIND_KEY_FLAG;
+ var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
if (!isBindKey && typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
var length = partials ? partials.length : 0;
if (!length) {
- bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
+ bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
partials = holders = undefined;
}
ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
arity = arity === undefined ? arity : toInteger(arity);
length -= holders ? holders.length : 0;
- if (bitmask & PARTIAL_RIGHT_FLAG) {
+ if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
var partialsRight = partials,
holdersRight = holders;
@@ -5560,14 +5601,14 @@
? (isBindKey ? 0 : func.length)
: nativeMax(newData[9] - length, 0);
- if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {
- bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);
+ if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
+ bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
}
- if (!bitmask || bitmask == BIND_FLAG) {
+ if (!bitmask || bitmask == WRAP_BIND_FLAG) {
var result = createBind(func, bitmask, thisArg);
- } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {
+ } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
result = createCurry(func, bitmask, arity);
- } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {
+ } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
result = createPartial(func, bitmask, thisArg, partials);
} else {
result = createHybrid.apply(undefined, newData);
@@ -5583,15 +5624,14 @@
* @private
* @param {Array} array The array to compare.
* @param {Array} other The other array to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
+ * @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `array` and `other` objects.
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
*/
- function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
arrLength = array.length,
othLength = other.length;
@@ -5605,7 +5645,7 @@
}
var index = -1,
result = true,
- seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
stack.set(array, other);
stack.set(other, array);
@@ -5631,7 +5671,7 @@
if (seen) {
if (!arraySome(other, function(othValue, othIndex) {
if (!cacheHas(seen, othIndex) &&
- (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
return seen.push(othIndex);
}
})) {
@@ -5640,7 +5680,7 @@
}
} else if (!(
arrValue === othValue ||
- equalFunc(arrValue, othValue, customizer, bitmask, stack)
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
)) {
result = false;
break;
@@ -5662,14 +5702,13 @@
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
* @param {string} tag The `toStringTag` of the objects to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
+ * @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
- function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag:
if ((object.byteLength != other.byteLength) ||
@@ -5707,7 +5746,7 @@
var convert = mapToArray;
case setTag:
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
convert || (convert = setToArray);
if (object.size != other.size && !isPartial) {
@@ -5718,11 +5757,11 @@
if (stacked) {
return stacked == other;
}
- bitmask |= UNORDERED_COMPARE_FLAG;
+ bitmask |= COMPARE_UNORDERED_FLAG;
// Recursively compare objects (susceptible to call stack limits).
stack.set(object, other);
- var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
+ var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
stack['delete'](object);
return result;
@@ -5741,15 +5780,14 @@
* @private
* @param {Object} object The object to compare.
* @param {Object} other The other object to compare.
- * @param {Function} equalFunc The function to determine equivalents of values.
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
* @param {Function} customizer The function to customize comparisons.
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
- * for more details.
+ * @param {Function} equalFunc The function to determine equivalents of values.
* @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/
- function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
objProps = keys(object),
objLength = objProps.length,
othProps = keys(other),
@@ -5787,7 +5825,7 @@
}
// Recursively compare objects (susceptible to call stack limits).
if (!(compared === undefined
- ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
: compared
)) {
result = false;
@@ -5984,7 +6022,7 @@
}
/**
- * Creates an array of the own enumerable symbol properties of `object`.
+ * Creates an array of the own enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
@@ -5993,8 +6031,7 @@
var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
/**
- * Creates an array of the own and inherited enumerable symbol properties
- * of `object`.
+ * Creates an array of the own and inherited enumerable symbols of `object`.
*
* @private
* @param {Object} object The object to query.
@@ -6426,22 +6463,22 @@
var bitmask = data[1],
srcBitmask = source[1],
newBitmask = bitmask | srcBitmask,
- isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG);
+ isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
var isCombo =
- ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) ||
- ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) ||
- ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG));
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
+ ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
// Exit early if metadata can't be merged.
if (!(isCommon || isCombo)) {
return data;
}
// Use source `thisArg` if available.
- if (srcBitmask & BIND_FLAG) {
+ if (srcBitmask & WRAP_BIND_FLAG) {
data[2] = source[2];
// Set when currying a bound function.
- newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG;
+ newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
}
// Compose partial arguments.
var value = source[3];
@@ -6463,7 +6500,7 @@
data[7] = value;
}
// Use source `ary` if it's smaller.
- if (srcBitmask & ARY_FLAG) {
+ if (srcBitmask & WRAP_ARY_FLAG) {
data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
}
// Use source `arity` if one is not provided.
@@ -8780,7 +8817,7 @@
* @memberOf _
* @since 1.0.0
* @category Seq
- * @param {...(string|string[])} [paths] The property paths of elements to pick.
+ * @param {...(string|string[])} [paths] The property paths to pick.
* @returns {Object} Returns the new `lodash` wrapper instance.
* @example
*
@@ -9999,7 +10036,7 @@
function ary(func, n, guard) {
n = guard ? undefined : n;
n = (func && n == null) ? func.length : n;
- return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
+ return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
}
/**
@@ -10072,10 +10109,10 @@
* // => 'hi fred!'
*/
var bind = baseRest(function(func, thisArg, partials) {
- var bitmask = BIND_FLAG;
+ var bitmask = WRAP_BIND_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bind));
- bitmask |= PARTIAL_FLAG;
+ bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(func, bitmask, thisArg, partials, holders);
});
@@ -10126,10 +10163,10 @@
* // => 'hiya fred!'
*/
var bindKey = baseRest(function(object, key, partials) {
- var bitmask = BIND_FLAG | BIND_KEY_FLAG;
+ var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bindKey));
- bitmask |= PARTIAL_FLAG;
+ bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(key, bitmask, object, partials, holders);
});
@@ -10177,7 +10214,7 @@
*/
function curry(func, arity, guard) {
arity = guard ? undefined : arity;
- var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
+ var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
result.placeholder = curry.placeholder;
return result;
}
@@ -10222,7 +10259,7 @@
*/
function curryRight(func, arity, guard) {
arity = guard ? undefined : arity;
- var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
+ var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
result.placeholder = curryRight.placeholder;
return result;
}
@@ -10467,7 +10504,7 @@
* // => ['d', 'c', 'b', 'a']
*/
function flip(func) {
- return createWrap(func, FLIP_FLAG);
+ return createWrap(func, WRAP_FLIP_FLAG);
}
/**
@@ -10678,7 +10715,7 @@
*/
var partial = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partial));
- return createWrap(func, PARTIAL_FLAG, undefined, partials, holders);
+ return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
});
/**
@@ -10715,7 +10752,7 @@
*/
var partialRight = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partialRight));
- return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders);
+ return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
});
/**
@@ -10741,7 +10778,7 @@
* // => ['a', 'b', 'c']
*/
var rearg = flatRest(function(func, indexes) {
- return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes);
+ return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
});
/**
@@ -10818,11 +10855,15 @@
start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
return baseRest(function(args) {
var array = args[start],
+ lastIndex = args.length - 1,
otherArgs = castSlice(args, 0, start);
if (array) {
arrayPush(otherArgs, array);
}
+ if (start != lastIndex) {
+ arrayPush(otherArgs, castSlice(args, start + 1));
+ }
return apply(func, this, otherArgs);
});
}
@@ -11004,7 +11045,7 @@
* // => true
*/
function clone(value) {
- return baseClone(value, false, true);
+ return baseClone(value, CLONE_SYMBOLS_FLAG);
}
/**
@@ -11040,7 +11081,7 @@
*/
function cloneWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined;
- return baseClone(value, false, true, customizer);
+ return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
}
/**
@@ -11062,7 +11103,7 @@
* // => false
*/
function cloneDeep(value) {
- return baseClone(value, true, true);
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
}
/**
@@ -11095,7 +11136,7 @@
*/
function cloneDeepWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined;
- return baseClone(value, true, true, customizer);
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
}
/**
@@ -11544,7 +11585,7 @@
function isEqualWith(value, other, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined;
var result = customizer ? customizer(value, other) : undefined;
- return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
+ return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
}
/**
@@ -12687,7 +12728,7 @@
* @since 1.0.0
* @category Object
* @param {Object} object The object to iterate over.
- * @param {...(string|string[])} [paths] The property paths of elements to pick.
+ * @param {...(string|string[])} [paths] The property paths to pick.
* @returns {Array} Returns the picked values.
* @example
*
@@ -13414,15 +13455,16 @@
/**
* The opposite of `_.pick`; this method creates an object composed of the
- * own and inherited enumerable string keyed properties of `object` that are
- * not omitted.
+ * own and inherited enumerable property paths of `object` that are not omitted.
+ *
+ * **Note:** This method is considerably slower than `_.pick`.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Object
* @param {Object} object The source object.
- * @param {...(string|string[])} [props] The property identifiers to omit.
+ * @param {...(string|string[])} [paths] The property paths to omit.
* @returns {Object} Returns the new object.
* @example
*
@@ -13431,12 +13473,19 @@
* _.omit(object, ['a', 'c']);
* // => { 'b': '2' }
*/
- var omit = flatRest(function(object, props) {
+ var omit = flatRest(function(object, paths) {
+ var result = {};
if (object == null) {
- return {};
+ return result;
}
- props = arrayMap(props, toKey);
- return basePick(object, baseDifference(getAllKeysIn(object), props));
+ copyObject(object, getAllKeysIn(object), result);
+ result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG);
+
+ var length = paths.length;
+ while (length--) {
+ baseUnset(result, paths[length]);
+ }
+ return result;
});
/**
@@ -13471,7 +13520,7 @@
* @memberOf _
* @category Object
* @param {Object} object The source object.
- * @param {...(string|string[])} [props] The property identifiers to pick.
+ * @param {...(string|string[])} [paths] The property paths to pick.
* @returns {Object} Returns the new object.
* @example
*
@@ -13480,8 +13529,8 @@
* _.pick(object, ['a', 'c']);
* // => { 'a': 1, 'c': 3 }
*/
- var pick = flatRest(function(object, props) {
- return object == null ? {} : basePick(object, arrayMap(props, toKey));
+ var pick = flatRest(function(object, paths) {
+ return object == null ? {} : basePick(object, arrayMap(paths, toKey));
});
/**
@@ -15274,7 +15323,7 @@
* // => [{ 'a': 1, 'b': 2 }]
*/
function conforms(source) {
- return baseConforms(baseClone(source, true));
+ return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
}
/**
@@ -15436,7 +15485,7 @@
* // => ['def']
*/
function iteratee(func) {
- return baseIteratee(typeof func == 'function' ? func : baseClone(func, true));
+ return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
}
/**
@@ -15468,7 +15517,7 @@
* // => [{ 'a': 4, 'b': 5, 'c': 6 }]
*/
function matches(source) {
- return baseMatches(baseClone(source, true));
+ return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
}
/**
@@ -15498,7 +15547,7 @@
* // => { 'a': 4, 'b': 5, 'c': 6 }
*/
function matchesProperty(path, srcValue) {
- return baseMatchesProperty(path, baseClone(srcValue, true));
+ return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
}
/**
@@ -16958,7 +17007,7 @@
}
});
- realNames[createHybrid(undefined, BIND_KEY_FLAG).name] = [{
+ realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
'name': 'wrapper',
'func': undefined
}];
diff --git a/matches.js b/matches.js
index 03d4278b5..8b35ed768 100644
--- a/matches.js
+++ b/matches.js
@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseMatches'], function(baseClone, baseMatches) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1;
+
/**
* Creates a function that performs a partial deep comparison between a given
* object and `source`, returning `true` if the given object has equivalent
@@ -29,7 +32,7 @@ define(['./_baseClone', './_baseMatches'], function(baseClone, baseMatches) {
* // => [{ 'a': 4, 'b': 5, 'c': 6 }]
*/
function matches(source) {
- return baseMatches(baseClone(source, true));
+ return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
}
return matches;
diff --git a/matchesProperty.js b/matchesProperty.js
index 8504ef7c5..766c28bd4 100644
--- a/matchesProperty.js
+++ b/matchesProperty.js
@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseMatchesProperty'], function(baseClone, baseMatchesProperty) {
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1;
+
/**
* Creates a function that performs a partial deep comparison between the
* value at `path` of a given object to `srcValue`, returning `true` if the
@@ -27,7 +30,7 @@ define(['./_baseClone', './_baseMatchesProperty'], function(baseClone, baseMatch
* // => { 'a': 4, 'b': 5, 'c': 6 }
*/
function matchesProperty(path, srcValue) {
- return baseMatchesProperty(path, baseClone(srcValue, true));
+ return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
}
return matchesProperty;
diff --git a/omit.js b/omit.js
index d4ec42520..8b8d1ad22 100644
--- a/omit.js
+++ b/omit.js
@@ -1,16 +1,22 @@
-define(['./_arrayMap', './_baseDifference', './_basePick', './_flatRest', './_getAllKeysIn', './_toKey'], function(arrayMap, baseDifference, basePick, flatRest, getAllKeysIn, toKey) {
+define(['./_baseClone', './_baseUnset', './_copyObject', './_flatRest', './_getAllKeysIn'], function(baseClone, baseUnset, copyObject, flatRest, getAllKeysIn) {
+
+ /** Used to compose bitmasks for cloning. */
+ var CLONE_DEEP_FLAG = 1,
+ CLONE_FLAT_FLAG = 2,
+ CLONE_SYMBOLS_FLAG = 4;
/**
* The opposite of `_.pick`; this method creates an object composed of the
- * own and inherited enumerable string keyed properties of `object` that are
- * not omitted.
+ * own and inherited enumerable property paths of `object` that are not omitted.
+ *
+ * **Note:** This method is considerably slower than `_.pick`.
*
* @static
* @since 0.1.0
* @memberOf _
* @category Object
* @param {Object} object The source object.
- * @param {...(string|string[])} [props] The property identifiers to omit.
+ * @param {...(string|string[])} [paths] The property paths to omit.
* @returns {Object} Returns the new object.
* @example
*
@@ -19,12 +25,19 @@ define(['./_arrayMap', './_baseDifference', './_basePick', './_flatRest', './_ge
* _.omit(object, ['a', 'c']);
* // => { 'b': '2' }
*/
- var omit = flatRest(function(object, props) {
+ var omit = flatRest(function(object, paths) {
+ var result = {};
if (object == null) {
- return {};
+ return result;
}
- props = arrayMap(props, toKey);
- return basePick(object, baseDifference(getAllKeysIn(object), props));
+ copyObject(object, getAllKeysIn(object), result);
+ result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG);
+
+ var length = paths.length;
+ while (length--) {
+ baseUnset(result, paths[length]);
+ }
+ return result;
});
return omit;
diff --git a/package.json b/package.json
index 4a8f4ad01..2172188b4 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "lodash-amd",
- "version": "4.16.6",
+ "version": "4.17.0",
"description": "Lodash exported as AMD modules.",
"keywords": "amd, modules, stdlib, util",
"homepage": "https://lodash.com/custom-builds",
diff --git a/partial.js b/partial.js
index a1272d5b9..9b24346cf 100644
--- a/partial.js
+++ b/partial.js
@@ -4,7 +4,7 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
var undefined;
/** Used to compose bitmasks for function metadata. */
- var PARTIAL_FLAG = 32;
+ var WRAP_PARTIAL_FLAG = 32;
/**
* Creates a function that invokes `func` with `partials` prepended to the
@@ -41,7 +41,7 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
*/
var partial = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partial));
- return createWrap(func, PARTIAL_FLAG, undefined, partials, holders);
+ return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
});
// Assign default placeholders.
diff --git a/partialRight.js b/partialRight.js
index ae851f848..16af735f7 100644
--- a/partialRight.js
+++ b/partialRight.js
@@ -4,7 +4,7 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
var undefined;
/** Used to compose bitmasks for function metadata. */
- var PARTIAL_RIGHT_FLAG = 64;
+ var WRAP_PARTIAL_RIGHT_FLAG = 64;
/**
* This method is like `_.partial` except that partially applied arguments
@@ -40,7 +40,7 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
*/
var partialRight = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partialRight));
- return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders);
+ return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
});
// Assign default placeholders.
diff --git a/pick.js b/pick.js
index f5961cf7d..da9b52494 100644
--- a/pick.js
+++ b/pick.js
@@ -8,7 +8,7 @@ define(['./_arrayMap', './_basePick', './_flatRest', './_toKey'], function(array
* @memberOf _
* @category Object
* @param {Object} object The source object.
- * @param {...(string|string[])} [props] The property identifiers to pick.
+ * @param {...(string|string[])} [paths] The property paths to pick.
* @returns {Object} Returns the new object.
* @example
*
@@ -17,8 +17,8 @@ define(['./_arrayMap', './_basePick', './_flatRest', './_toKey'], function(array
* _.pick(object, ['a', 'c']);
* // => { 'a': 1, 'c': 3 }
*/
- var pick = flatRest(function(object, props) {
- return object == null ? {} : basePick(object, arrayMap(props, toKey));
+ var pick = flatRest(function(object, paths) {
+ return object == null ? {} : basePick(object, arrayMap(paths, toKey));
});
return pick;
diff --git a/rearg.js b/rearg.js
index 17636cdd2..bbda988ab 100644
--- a/rearg.js
+++ b/rearg.js
@@ -4,7 +4,7 @@ define(['./_createWrap', './_flatRest'], function(createWrap, flatRest) {
var undefined;
/** Used to compose bitmasks for function metadata. */
- var REARG_FLAG = 256;
+ var WRAP_REARG_FLAG = 256;
/**
* Creates a function that invokes `func` with arguments arranged according
@@ -29,7 +29,7 @@ define(['./_createWrap', './_flatRest'], function(createWrap, flatRest) {
* // => ['a', 'b', 'c']
*/
var rearg = flatRest(function(func, indexes) {
- return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes);
+ return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
});
return rearg;
diff --git a/spread.js b/spread.js
index d4e6b8c72..8fce710a8 100644
--- a/spread.js
+++ b/spread.js
@@ -50,11 +50,15 @@ define(['./_apply', './_arrayPush', './_baseRest', './_castSlice', './toInteger'
start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
return baseRest(function(args) {
var array = args[start],
+ lastIndex = args.length - 1,
otherArgs = castSlice(args, 0, start);
if (array) {
arrayPush(otherArgs, array);
}
+ if (start != lastIndex) {
+ arrayPush(otherArgs, castSlice(args, start + 1));
+ }
return apply(func, this, otherArgs);
});
}
diff --git a/wrapperAt.js b/wrapperAt.js
index 907181c02..e8b1875c5 100644
--- a/wrapperAt.js
+++ b/wrapperAt.js
@@ -10,7 +10,7 @@ define(['./_LazyWrapper', './_LodashWrapper', './_baseAt', './_flatRest', './_is
* @memberOf _
* @since 1.0.0
* @category Seq
- * @param {...(string|string[])} [paths] The property paths of elements to pick.
+ * @param {...(string|string[])} [paths] The property paths to pick.
* @returns {Object} Returns the new `lodash` wrapper instance.
* @example
*