Compare commits

...

2 Commits

Author SHA1 Message Date
John-David Dalton
7402021739 Bump to v4.17.0. 2016-11-13 22:49:46 -08:00
John-David Dalton
cd1921dfad Bump to v4.16.6. 2016-10-31 21:05:43 -07:00
61 changed files with 559 additions and 410 deletions

View File

@@ -1,4 +1,4 @@
# lodash-amd v4.16.5 # lodash-amd v4.17.0
The [Lodash](https://lodash.com/) library exported as [AMD](https://github.com/amdjs/amdjs-api/wiki/AMD) modules. 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.5-amd) for more details. See the [package source](https://github.com/lodash/lodash/tree/4.17.0-amd) for more details.

17
_baseAssignIn.js Normal file
View File

@@ -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;
});

View File

@@ -8,7 +8,7 @@ define(['./get'], function(get) {
* *
* @private * @private
* @param {Object} object The object to iterate over. * @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. * @returns {Array} Returns the picked elements.
*/ */
function baseAt(object, paths) { function baseAt(object, paths) {

View File

@@ -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. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; 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. */ /** `Object#toString` result references. */
var argsTag = '[object Arguments]', var argsTag = '[object Arguments]',
arrayTag = '[object Array]', arrayTag = '[object Array]',
@@ -54,16 +59,22 @@ define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_clone
* *
* @private * @private
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [isDeep] Specify a deep clone. * @param {boolean} bitmask The bitmask flags.
* @param {boolean} [isFull] Specify a clone including symbols. * 1 - Deep clone
* 2 - Flatten inherited properties
* 4 - Clone symbols
* @param {Function} [customizer] The function to customize cloning. * @param {Function} [customizer] The function to customize cloning.
* @param {string} [key] The key of `value`. * @param {string} [key] The key of `value`.
* @param {Object} [object] The parent object of `value`. * @param {Object} [object] The parent object of `value`.
* @param {Object} [stack] Tracks traversed objects and their clone counterparts. * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
* @returns {*} Returns the cloned value. * @returns {*} Returns the cloned value.
*/ */
function baseClone(value, isDeep, isFull, customizer, key, object, stack) { function baseClone(value, bitmask, customizer, key, object, stack) {
var result; var result,
isDeep = bitmask & CLONE_DEEP_FLAG,
isFlat = bitmask & CLONE_FLAT_FLAG,
isFull = bitmask & CLONE_SYMBOLS_FLAG;
if (customizer) { if (customizer) {
result = object ? customizer(value, key, object, stack) : customizer(value); result = object ? customizer(value, key, object, stack) : customizer(value);
} }
@@ -87,9 +98,11 @@ define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_clone
return cloneBuffer(value, isDeep); return cloneBuffer(value, isDeep);
} }
if (tag == objectTag || tag == argsTag || (isFunc && !object)) { if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
result = initCloneObject(isFunc ? {} : value); result = (isFlat || isFunc) ? {} : initCloneObject(value);
if (!isDeep) { if (!isDeep) {
return copySymbols(value, baseAssign(result, value)); return isFlat
? copySymbolsIn(value, baseAssignIn(result, value))
: copySymbols(value, baseAssign(result, value));
} }
} else { } else {
if (!cloneableTags[tag]) { if (!cloneableTags[tag]) {
@@ -106,14 +119,18 @@ define(['./_Stack', './_arrayEach', './_assignValue', './_baseAssign', './_clone
} }
stack.set(value, result); 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) { arrayEach(props || value, function(subValue, key) {
if (props) { if (props) {
key = subValue; key = subValue;
subValue = value[key]; subValue = value[key];
} }
// Recursively populate clone (susceptible to call stack limits). // 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; return result;
} }

View File

@@ -7,22 +7,21 @@ define(['./_baseIsEqualDeep', './isObject', './isObjectLike'], function(baseIsEq
* @private * @private
* @param {*} value The value to compare. * @param {*} value The value to compare.
* @param {*} other The other 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 {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. * @param {Object} [stack] Tracks traversed `value` and `other` objects.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @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) { if (value === other) {
return true; return true;
} }
if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
return value !== value && other !== other; return value !== value && other !== other;
} }
return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
} }
return baseIsEqual; return baseIsEqual;

View File

@@ -1,7 +1,7 @@
define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_getTag', './isArray', './isBuffer', './isTypedArray'], function(Stack, equalArrays, equalByTag, equalObjects, getTag, isArray, isBuffer, isTypedArray) { 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. */ /** Used to compose bitmasks for value comparisons. */
var PARTIAL_COMPARE_FLAG = 2; var COMPARE_PARTIAL_FLAG = 1;
/** `Object#toString` result references. */ /** `Object#toString` result references. */
var argsTag = '[object Arguments]', var argsTag = '[object Arguments]',
@@ -22,14 +22,13 @@ define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_ge
* @private * @private
* @param {Object} object The object to compare. * @param {Object} object The object to compare.
* @param {Object} other The other 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} 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. * @param {Object} [stack] Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. * @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), var objIsArr = isArray(object),
othIsArr = isArray(other), othIsArr = isArray(other),
objTag = arrayTag, objTag = arrayTag,
@@ -57,10 +56,10 @@ define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_ge
if (isSameTag && !objIsObj) { if (isSameTag && !objIsObj) {
stack || (stack = new Stack); stack || (stack = new Stack);
return (objIsArr || isTypedArray(object)) return (objIsArr || isTypedArray(object))
? equalArrays(object, other, equalFunc, customizer, bitmask, stack) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
: equalByTag(object, other, objTag, equalFunc, customizer, bitmask, 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__'), var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
@@ -69,14 +68,14 @@ define(['./_Stack', './_equalArrays', './_equalByTag', './_equalObjects', './_ge
othUnwrapped = othIsWrapped ? other.value() : other; othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack); stack || (stack = new Stack);
return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
} }
} }
if (!isSameTag) { if (!isSameTag) {
return false; return false;
} }
stack || (stack = new Stack); stack || (stack = new Stack);
return equalObjects(object, other, equalFunc, customizer, bitmask, stack); return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
} }
return baseIsEqualDeep; return baseIsEqualDeep;

View File

@@ -3,9 +3,9 @@ define(['./_Stack', './_baseIsEqual'], function(Stack, baseIsEqual) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; var undefined;
/** Used to compose bitmasks for comparison styles. */ /** Used to compose bitmasks for value comparisons. */
var UNORDERED_COMPARE_FLAG = 1, var COMPARE_PARTIAL_FLAG = 1,
PARTIAL_COMPARE_FLAG = 2; COMPARE_UNORDERED_FLAG = 2;
/** /**
* The base implementation of `_.isMatch` without support for iteratee shorthands. * 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); var result = customizer(objValue, srcValue, key, object, source, stack);
} }
if (!(result === undefined 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 : result
)) { )) {
return false; return false;

View File

@@ -3,9 +3,9 @@ define(['./_baseIsEqual', './get', './hasIn', './_isKey', './_isStrictComparable
/** Used as a safe reference for `undefined` in pre-ES5 environments. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; var undefined;
/** Used to compose bitmasks for comparison styles. */ /** Used to compose bitmasks for value comparisons. */
var UNORDERED_COMPARE_FLAG = 1, var COMPARE_PARTIAL_FLAG = 1,
PARTIAL_COMPARE_FLAG = 2; COMPARE_UNORDERED_FLAG = 2;
/** /**
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. * 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); var objValue = get(object, path);
return (objValue === undefined && objValue === srcValue) return (objValue === undefined && objValue === srcValue)
? hasIn(object, path) ? hasIn(object, path)
: baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG); : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
}; };
} }

View File

@@ -1,4 +1,4 @@
define(['./_basePickBy'], function(basePickBy) { define(['./_basePickBy', './hasIn'], function(basePickBy, hasIn) {
/** /**
* The base implementation of `_.pick` without support for individual * The base implementation of `_.pick` without support for individual
@@ -6,13 +6,13 @@ define(['./_basePickBy'], function(basePickBy) {
* *
* @private * @private
* @param {Object} object The source object. * @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. * @returns {Object} Returns the new object.
*/ */
function basePick(object, props) { function basePick(object, paths) {
object = Object(object); object = Object(object);
return basePickBy(object, props, function(value, key) { return basePickBy(object, paths, function(value, path) {
return key in object; return hasIn(object, path);
}); });
} }

View File

@@ -1,25 +1,25 @@
define(['./_baseAssignValue'], function(baseAssignValue) { define(['./_baseGet', './_baseSet'], function(baseGet, baseSet) {
/** /**
* The base implementation of `_.pickBy` without support for iteratee shorthands. * The base implementation of `_.pickBy` without support for iteratee shorthands.
* *
* @private * @private
* @param {Object} object The source object. * @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. * @param {Function} predicate The function invoked per property.
* @returns {Object} Returns the new object. * @returns {Object} Returns the new object.
*/ */
function basePickBy(object, props, predicate) { function basePickBy(object, paths, predicate) {
var index = -1, var index = -1,
length = props.length, length = paths.length,
result = {}; result = {};
while (++index < length) { while (++index < length) {
var key = props[index], var path = paths[index],
value = object[key]; value = baseGet(object, path);
if (predicate(value, key)) { if (predicate(value, path)) {
baseAssignValue(result, key, value); baseSet(result, path, value);
} }
} }
return result; return result;

View File

@@ -11,7 +11,7 @@ define(['./_castPath', './_isKey', './last', './_parent', './_toKey'], function(
* *
* @private * @private
* @param {Object} object The object to modify. * @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`. * @returns {boolean} Returns `true` if the property is deleted, else `false`.
*/ */
function baseUnset(object, path) { function baseUnset(object, path) {

View File

@@ -23,9 +23,8 @@ define(['./_baseDifference', './_baseFlatten', './_baseUniq'], function(baseDiff
othIndex = -1; othIndex = -1;
while (++othIndex < length) { while (++othIndex < length) {
var othArray = arrays[othIndex]; if (othIndex != index) {
if (othArray !== array) { result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
result[index] = baseDifference(result[index] || array, othArray, iteratee, comparator);
} }
} }
} }

View File

@@ -1,5 +1,8 @@
define(['./_addMapEntry', './_arrayReduce', './_mapToArray'], function(addMapEntry, arrayReduce, mapToArray) { define(['./_addMapEntry', './_arrayReduce', './_mapToArray'], function(addMapEntry, arrayReduce, mapToArray) {
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1;
/** /**
* Creates a clone of `map`. * Creates a clone of `map`.
* *
@@ -10,7 +13,7 @@ define(['./_addMapEntry', './_arrayReduce', './_mapToArray'], function(addMapEnt
* @returns {Object} Returns the cloned map. * @returns {Object} Returns the cloned map.
*/ */
function cloneMap(map, isDeep, cloneFunc) { 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); return arrayReduce(array, addMapEntry, new map.constructor);
} }

View File

@@ -1,5 +1,8 @@
define(['./_addSetEntry', './_arrayReduce', './_setToArray'], function(addSetEntry, arrayReduce, setToArray) { define(['./_addSetEntry', './_arrayReduce', './_setToArray'], function(addSetEntry, arrayReduce, setToArray) {
/** Used to compose bitmasks for cloning. */
var CLONE_DEEP_FLAG = 1;
/** /**
* Creates a clone of `set`. * Creates a clone of `set`.
* *
@@ -10,7 +13,7 @@ define(['./_addSetEntry', './_arrayReduce', './_setToArray'], function(addSetEnt
* @returns {Object} Returns the cloned set. * @returns {Object} Returns the cloned set.
*/ */
function cloneSet(set, isDeep, cloneFunc) { 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); return arrayReduce(array, addSetEntry, new set.constructor);
} }

View File

@@ -1,7 +1,7 @@
define(['./_copyObject', './_getSymbols'], function(copyObject, getSymbols) { define(['./_copyObject', './_getSymbols'], function(copyObject, getSymbols) {
/** /**
* Copies own symbol properties of `source` to `object`. * Copies own symbols of `source` to `object`.
* *
* @private * @private
* @param {Object} source The object to copy symbols from. * @param {Object} source The object to copy symbols from.

16
_copySymbolsIn.js Normal file
View File

@@ -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;
});

View File

@@ -1,7 +1,7 @@
define(['./_createCtor', './_root'], function(createCtor, root) { define(['./_createCtor', './_root'], function(createCtor, root) {
/** Used to compose bitmasks for function metadata. */ /** 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` * 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. * @returns {Function} Returns the new wrapped function.
*/ */
function createBind(func, bitmask, thisArg) { function createBind(func, bitmask, thisArg) {
var isBind = bitmask & BIND_FLAG, var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func); Ctor = createCtor(func);
function wrapper() { function wrapper() {

View File

@@ -10,10 +10,10 @@ define(['./_LodashWrapper', './_flatRest', './_getData', './_getFuncName', './is
var FUNC_ERROR_TEXT = 'Expected a function'; var FUNC_ERROR_TEXT = 'Expected a function';
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var CURRY_FLAG = 8, var WRAP_CURRY_FLAG = 8,
PARTIAL_FLAG = 32, WRAP_PARTIAL_FLAG = 32,
ARY_FLAG = 128, WRAP_ARY_FLAG = 128,
REARG_FLAG = 256; WRAP_REARG_FLAG = 256;
/** /**
* Creates a `_.flow` or `_.flowRight` function. * Creates a `_.flow` or `_.flowRight` function.
@@ -48,7 +48,7 @@ define(['./_LodashWrapper', './_flatRest', './_getData', './_getFuncName', './is
data = funcName == 'wrapper' ? getData(func) : undefined; data = funcName == 'wrapper' ? getData(func) : undefined;
if (data && isLaziable(data[0]) && 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 !data[4].length && data[9] == 1
) { ) {
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);

View File

@@ -4,12 +4,12 @@ define(['./_composeArgs', './_composeArgsRight', './_countHolders', './_createCt
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var BIND_FLAG = 1, var WRAP_BIND_FLAG = 1,
BIND_KEY_FLAG = 2, WRAP_BIND_KEY_FLAG = 2,
CURRY_FLAG = 8, WRAP_CURRY_FLAG = 8,
CURRY_RIGHT_FLAG = 16, WRAP_CURRY_RIGHT_FLAG = 16,
ARY_FLAG = 128, WRAP_ARY_FLAG = 128,
FLIP_FLAG = 512; WRAP_FLIP_FLAG = 512;
/** /**
* Creates a function that wraps `func` to invoke it with optional `this` * 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. * @returns {Function} Returns the new wrapped function.
*/ */
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
var isAry = bitmask & ARY_FLAG, var isAry = bitmask & WRAP_ARY_FLAG,
isBind = bitmask & BIND_FLAG, isBind = bitmask & WRAP_BIND_FLAG,
isBindKey = bitmask & BIND_KEY_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
isFlip = bitmask & FLIP_FLAG, isFlip = bitmask & WRAP_FLIP_FLAG,
Ctor = isBindKey ? undefined : createCtor(func); Ctor = isBindKey ? undefined : createCtor(func);
function wrapper() { function wrapper() {

View File

@@ -1,7 +1,7 @@
define(['./_apply', './_createCtor', './_root'], function(apply, createCtor, root) { define(['./_apply', './_createCtor', './_root'], function(apply, createCtor, root) {
/** Used to compose bitmasks for function metadata. */ /** 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 * 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. * @returns {Function} Returns the new wrapped function.
*/ */
function createPartial(func, bitmask, thisArg, partials) { function createPartial(func, bitmask, thisArg, partials) {
var isBind = bitmask & BIND_FLAG, var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func); Ctor = createCtor(func);
function wrapper() { function wrapper() {

View File

@@ -4,12 +4,12 @@ define(['./_isLaziable', './_setData', './_setWrapToString'], function(isLaziabl
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var BIND_FLAG = 1, var WRAP_BIND_FLAG = 1,
BIND_KEY_FLAG = 2, WRAP_BIND_KEY_FLAG = 2,
CURRY_BOUND_FLAG = 4, WRAP_CURRY_BOUND_FLAG = 4,
CURRY_FLAG = 8, WRAP_CURRY_FLAG = 8,
PARTIAL_FLAG = 32, WRAP_PARTIAL_FLAG = 32,
PARTIAL_RIGHT_FLAG = 64; WRAP_PARTIAL_RIGHT_FLAG = 64;
/** /**
* Creates a function that wraps `func` to continue currying. * 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. * @returns {Function} Returns the new wrapped function.
*/ */
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { 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, newHolders = isCurry ? holders : undefined,
newHoldersRight = isCurry ? undefined : holders, newHoldersRight = isCurry ? undefined : holders,
newPartials = isCurry ? partials : undefined, newPartials = isCurry ? partials : undefined,
newPartialsRight = isCurry ? undefined : partials; newPartialsRight = isCurry ? undefined : partials;
bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
if (!(bitmask & CURRY_BOUND_FLAG)) { if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
} }
var newData = [ var newData = [
func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,

View File

@@ -7,12 +7,12 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
var FUNC_ERROR_TEXT = 'Expected a function'; var FUNC_ERROR_TEXT = 'Expected a function';
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var BIND_FLAG = 1, var WRAP_BIND_FLAG = 1,
BIND_KEY_FLAG = 2, WRAP_BIND_KEY_FLAG = 2,
CURRY_FLAG = 8, WRAP_CURRY_FLAG = 8,
CURRY_RIGHT_FLAG = 16, WRAP_CURRY_RIGHT_FLAG = 16,
PARTIAL_FLAG = 32, WRAP_PARTIAL_FLAG = 32,
PARTIAL_RIGHT_FLAG = 64; WRAP_PARTIAL_RIGHT_FLAG = 64;
/* Built-in method references for those with the same name as other `lodash` methods. */ /* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max; var nativeMax = Math.max;
@@ -24,17 +24,16 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
* @private * @private
* @param {Function|string} func The function or method name to wrap. * @param {Function|string} func The function or method name to wrap.
* @param {number} bitmask The bitmask flags. * @param {number} bitmask The bitmask flags.
* The bitmask may be composed of the following flags: * 1 - `_.bind`
* 1 - `_.bind` * 2 - `_.bindKey`
* 2 - `_.bindKey` * 4 - `_.curry` or `_.curryRight` of a bound function
* 4 - `_.curry` or `_.curryRight` of a bound function * 8 - `_.curry`
* 8 - `_.curry` * 16 - `_.curryRight`
* 16 - `_.curryRight` * 32 - `_.partial`
* 32 - `_.partial` * 64 - `_.partialRight`
* 64 - `_.partialRight` * 128 - `_.rearg`
* 128 - `_.rearg` * 256 - `_.ary`
* 256 - `_.ary` * 512 - `_.flip`
* 512 - `_.flip`
* @param {*} [thisArg] The `this` binding of `func`. * @param {*} [thisArg] The `this` binding of `func`.
* @param {Array} [partials] The arguments to be partially applied. * @param {Array} [partials] The arguments to be partially applied.
* @param {Array} [holders] The `partials` placeholder indexes. * @param {Array} [holders] The `partials` placeholder indexes.
@@ -44,20 +43,20 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
* @returns {Function} Returns the new wrapped function. * @returns {Function} Returns the new wrapped function.
*/ */
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { 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') { if (!isBindKey && typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT); throw new TypeError(FUNC_ERROR_TEXT);
} }
var length = partials ? partials.length : 0; var length = partials ? partials.length : 0;
if (!length) { if (!length) {
bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
partials = holders = undefined; partials = holders = undefined;
} }
ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
arity = arity === undefined ? arity : toInteger(arity); arity = arity === undefined ? arity : toInteger(arity);
length -= holders ? holders.length : 0; length -= holders ? holders.length : 0;
if (bitmask & PARTIAL_RIGHT_FLAG) { if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
var partialsRight = partials, var partialsRight = partials,
holdersRight = holders; holdersRight = holders;
@@ -82,14 +81,14 @@ define(['./_baseSetData', './_createBind', './_createCurry', './_createHybrid',
? (isBindKey ? 0 : func.length) ? (isBindKey ? 0 : func.length)
: nativeMax(newData[9] - length, 0); : nativeMax(newData[9] - length, 0);
if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
bitmask &= ~(CURRY_FLAG | 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); 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); 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); result = createPartial(func, bitmask, thisArg, partials);
} else { } else {
result = createHybrid.apply(undefined, newData); result = createHybrid.apply(undefined, newData);

View File

@@ -3,9 +3,9 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
/** Used as a safe reference for `undefined` in pre-ES5 environments. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; var undefined;
/** Used to compose bitmasks for comparison styles. */ /** Used to compose bitmasks for value comparisons. */
var UNORDERED_COMPARE_FLAG = 1, var COMPARE_PARTIAL_FLAG = 1,
PARTIAL_COMPARE_FLAG = 2; COMPARE_UNORDERED_FLAG = 2;
/** /**
* A specialized version of `baseIsEqualDeep` for arrays with support for * A specialized version of `baseIsEqualDeep` for arrays with support for
@@ -14,15 +14,14 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
* @private * @private
* @param {Array} array The array to compare. * @param {Array} array The array to compare.
* @param {Array} other The other 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 {Function} customizer The function to customize comparisons.
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` * @param {Function} equalFunc The function to determine equivalents of values.
* for more details.
* @param {Object} stack Tracks traversed `array` and `other` objects. * @param {Object} stack Tracks traversed `array` and `other` objects.
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
*/ */
function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & PARTIAL_COMPARE_FLAG, var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
arrLength = array.length, arrLength = array.length,
othLength = other.length; othLength = other.length;
@@ -36,7 +35,7 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
} }
var index = -1, var index = -1,
result = true, result = true,
seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
stack.set(array, other); stack.set(array, other);
stack.set(other, array); stack.set(other, array);
@@ -62,7 +61,7 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
if (seen) { if (seen) {
if (!arraySome(other, function(othValue, othIndex) { if (!arraySome(other, function(othValue, othIndex) {
if (!cacheHas(seen, 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); return seen.push(othIndex);
} }
})) { })) {
@@ -71,7 +70,7 @@ define(['./_SetCache', './_arraySome', './_cacheHas'], function(SetCache, arrayS
} }
} else if (!( } else if (!(
arrValue === othValue || arrValue === othValue ||
equalFunc(arrValue, othValue, customizer, bitmask, stack) equalFunc(arrValue, othValue, bitmask, customizer, stack)
)) { )) {
result = false; result = false;
break; break;

View File

@@ -3,9 +3,9 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
/** Used as a safe reference for `undefined` in pre-ES5 environments. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; var undefined;
/** Used to compose bitmasks for comparison styles. */ /** Used to compose bitmasks for value comparisons. */
var UNORDERED_COMPARE_FLAG = 1, var COMPARE_PARTIAL_FLAG = 1,
PARTIAL_COMPARE_FLAG = 2; COMPARE_UNORDERED_FLAG = 2;
/** `Object#toString` result references. */ /** `Object#toString` result references. */
var boolTag = '[object Boolean]', var boolTag = '[object Boolean]',
@@ -36,14 +36,13 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
* @param {Object} object The object to compare. * @param {Object} object The object to compare.
* @param {Object} other The other object to compare. * @param {Object} other The other object to compare.
* @param {string} tag The `toStringTag` of the objects 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 {Function} customizer The function to customize comparisons.
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` * @param {Function} equalFunc The function to determine equivalents of values.
* for more details.
* @param {Object} stack Tracks traversed `object` and `other` objects. * @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. * @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) { switch (tag) {
case dataViewTag: case dataViewTag:
if ((object.byteLength != other.byteLength) || if ((object.byteLength != other.byteLength) ||
@@ -81,7 +80,7 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
var convert = mapToArray; var convert = mapToArray;
case setTag: case setTag:
var isPartial = bitmask & PARTIAL_COMPARE_FLAG; var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
convert || (convert = setToArray); convert || (convert = setToArray);
if (object.size != other.size && !isPartial) { if (object.size != other.size && !isPartial) {
@@ -92,11 +91,11 @@ define(['./_Symbol', './_Uint8Array', './eq', './_equalArrays', './_mapToArray',
if (stacked) { if (stacked) {
return stacked == other; return stacked == other;
} }
bitmask |= UNORDERED_COMPARE_FLAG; bitmask |= COMPARE_UNORDERED_FLAG;
// Recursively compare objects (susceptible to call stack limits). // Recursively compare objects (susceptible to call stack limits).
stack.set(object, other); 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); stack['delete'](object);
return result; return result;

View File

@@ -3,8 +3,8 @@ define(['./keys'], function(keys) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; var undefined;
/** Used to compose bitmasks for comparison styles. */ /** Used to compose bitmasks for value comparisons. */
var PARTIAL_COMPARE_FLAG = 2; var COMPARE_PARTIAL_FLAG = 1;
/** Used for built-in method references. */ /** Used for built-in method references. */
var objectProto = Object.prototype; var objectProto = Object.prototype;
@@ -19,15 +19,14 @@ define(['./keys'], function(keys) {
* @private * @private
* @param {Object} object The object to compare. * @param {Object} object The object to compare.
* @param {Object} other The other 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 {Function} customizer The function to customize comparisons.
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` * @param {Function} equalFunc The function to determine equivalents of values.
* for more details.
* @param {Object} stack Tracks traversed `object` and `other` objects. * @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/ */
function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & PARTIAL_COMPARE_FLAG, var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
objProps = keys(object), objProps = keys(object),
objLength = objProps.length, objLength = objProps.length,
othProps = keys(other), othProps = keys(other),
@@ -65,7 +64,7 @@ define(['./keys'], function(keys) {
} }
// Recursively compare objects (susceptible to call stack limits). // Recursively compare objects (susceptible to call stack limits).
if (!(compared === undefined if (!(compared === undefined
? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
: compared : compared
)) { )) {
result = false; result = false;

View File

@@ -4,7 +4,7 @@ define(['./_overArg', './stubArray'], function(overArg, stubArray) {
var nativeGetSymbols = Object.getOwnPropertySymbols; 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 * @private
* @param {Object} object The object to query. * @param {Object} object The object to query.

View File

@@ -4,8 +4,7 @@ define(['./_arrayPush', './_getPrototype', './_getSymbols', './stubArray'], func
var nativeGetSymbols = Object.getOwnPropertySymbols; var nativeGetSymbols = Object.getOwnPropertySymbols;
/** /**
* Creates an array of the own and inherited enumerable symbol properties * Creates an array of the own and inherited enumerable symbols of `object`.
* of `object`.
* *
* @private * @private
* @param {Object} object The object to query. * @param {Object} object The object to query.

View File

@@ -2,15 +2,17 @@ define([], function() {
/** Used to compose unicode character classes. */ /** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff', var rsAstralRange = '\\ud800-\\udfff',
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', rsComboMarksRange = '\\u0300-\\u036f',
rsComboSymbolsRange = '\\u20d0-\\u20f0', reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f'; rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */ /** Used to compose unicode capture groups. */
var rsZWJ = '\\u200d'; 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/). */ /** 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. * Checks if `string` contains Unicode symbols.

View File

@@ -4,12 +4,12 @@ define(['./_composeArgs', './_composeArgsRight', './_replaceHolders'], function(
var PLACEHOLDER = '__lodash_placeholder__'; var PLACEHOLDER = '__lodash_placeholder__';
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var BIND_FLAG = 1, var WRAP_BIND_FLAG = 1,
BIND_KEY_FLAG = 2, WRAP_BIND_KEY_FLAG = 2,
CURRY_BOUND_FLAG = 4, WRAP_CURRY_BOUND_FLAG = 4,
CURRY_FLAG = 8, WRAP_CURRY_FLAG = 8,
ARY_FLAG = 128, WRAP_ARY_FLAG = 128,
REARG_FLAG = 256; WRAP_REARG_FLAG = 256;
/* Built-in method references for those with the same name as other `lodash` methods. */ /* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMin = Math.min; var nativeMin = Math.min;
@@ -34,22 +34,22 @@ define(['./_composeArgs', './_composeArgsRight', './_replaceHolders'], function(
var bitmask = data[1], var bitmask = data[1],
srcBitmask = source[1], srcBitmask = source[1],
newBitmask = bitmask | srcBitmask, 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 = var isCombo =
((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
// Exit early if metadata can't be merged. // Exit early if metadata can't be merged.
if (!(isCommon || isCombo)) { if (!(isCommon || isCombo)) {
return data; return data;
} }
// Use source `thisArg` if available. // Use source `thisArg` if available.
if (srcBitmask & BIND_FLAG) { if (srcBitmask & WRAP_BIND_FLAG) {
data[2] = source[2]; data[2] = source[2];
// Set when currying a bound function. // 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. // Compose partial arguments.
var value = source[3]; var value = source[3];
@@ -71,7 +71,7 @@ define(['./_composeArgs', './_composeArgsRight', './_replaceHolders'], function(
data[7] = value; data[7] = value;
} }
// Use source `ary` if it's smaller. // 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]); data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
} }
// Use source `arity` if one is not provided. // Use source `arity` if one is not provided.

View File

@@ -15,7 +15,7 @@ define(['./_freeGlobal'], function(freeGlobal) {
/** Used to access faster Node.js helpers. */ /** Used to access faster Node.js helpers. */
var nodeUtil = (function() { var nodeUtil = (function() {
try { try {
return freeProcess && freeProcess.binding('util'); return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {} } catch (e) {}
}()); }());

View File

@@ -2,13 +2,15 @@ define([], function() {
/** Used to compose unicode character classes. */ /** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff', var rsAstralRange = '\\ud800-\\udfff',
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', rsComboMarksRange = '\\u0300-\\u036f',
rsComboSymbolsRange = '\\u20d0-\\u20f0', reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f'; rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */ /** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']', var rsAstral = '[' + rsAstralRange + ']',
rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', rsCombo = '[' + rsComboRange + ']',
rsFitz = '\\ud83c[\\udffb-\\udfff]', rsFitz = '\\ud83c[\\udffb-\\udfff]',
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']', rsNonAstral = '[^' + rsAstralRange + ']',

View File

@@ -2,13 +2,15 @@ define([], function() {
/** Used to compose unicode character classes. */ /** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff', var rsAstralRange = '\\ud800-\\udfff',
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', rsComboMarksRange = '\\u0300-\\u036f',
rsComboSymbolsRange = '\\u20d0-\\u20f0', reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsVarRange = '\\ufe0e\\ufe0f'; rsVarRange = '\\ufe0e\\ufe0f';
/** Used to compose unicode capture groups. */ /** Used to compose unicode capture groups. */
var rsAstral = '[' + rsAstralRange + ']', var rsAstral = '[' + rsAstralRange + ']',
rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', rsCombo = '[' + rsComboRange + ']',
rsFitz = '\\ud83c[\\udffb-\\udfff]', rsFitz = '\\ud83c[\\udffb-\\udfff]',
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
rsNonAstral = '[^' + rsAstralRange + ']', rsNonAstral = '[^' + rsAstralRange + ']',

View File

@@ -2,8 +2,10 @@ define([], function() {
/** Used to compose unicode character classes. */ /** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff', var rsAstralRange = '\\ud800-\\udfff',
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', rsComboMarksRange = '\\u0300-\\u036f',
rsComboSymbolsRange = '\\u20d0-\\u20f0', reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsDingbatRange = '\\u2700-\\u27bf', rsDingbatRange = '\\u2700-\\u27bf',
rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
@@ -17,7 +19,7 @@ define([], function() {
/** Used to compose unicode capture groups. */ /** Used to compose unicode capture groups. */
var rsApos = "['\u2019]", var rsApos = "['\u2019]",
rsBreak = '[' + rsBreakRange + ']', rsBreak = '[' + rsBreakRange + ']',
rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', rsCombo = '[' + rsComboRange + ']',
rsDigits = '\\d+', rsDigits = '\\d+',
rsDingbat = '[' + rsDingbatRange + ']', rsDingbat = '[' + rsDingbatRange + ']',
rsLower = '[' + rsLowerRange + ']', rsLower = '[' + rsLowerRange + ']',

View File

@@ -1,27 +1,27 @@
define(['./_arrayEach', './_arrayIncludes'], function(arrayEach, arrayIncludes) { define(['./_arrayEach', './_arrayIncludes'], function(arrayEach, arrayIncludes) {
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var BIND_FLAG = 1, var WRAP_BIND_FLAG = 1,
BIND_KEY_FLAG = 2, WRAP_BIND_KEY_FLAG = 2,
CURRY_FLAG = 8, WRAP_CURRY_FLAG = 8,
CURRY_RIGHT_FLAG = 16, WRAP_CURRY_RIGHT_FLAG = 16,
PARTIAL_FLAG = 32, WRAP_PARTIAL_FLAG = 32,
PARTIAL_RIGHT_FLAG = 64, WRAP_PARTIAL_RIGHT_FLAG = 64,
ARY_FLAG = 128, WRAP_ARY_FLAG = 128,
REARG_FLAG = 256, WRAP_REARG_FLAG = 256,
FLIP_FLAG = 512; WRAP_FLIP_FLAG = 512;
/** Used to associate wrap methods with their bit flags. */ /** Used to associate wrap methods with their bit flags. */
var wrapFlags = [ var wrapFlags = [
['ary', ARY_FLAG], ['ary', WRAP_ARY_FLAG],
['bind', BIND_FLAG], ['bind', WRAP_BIND_FLAG],
['bindKey', BIND_KEY_FLAG], ['bindKey', WRAP_BIND_KEY_FLAG],
['curry', CURRY_FLAG], ['curry', WRAP_CURRY_FLAG],
['curryRight', CURRY_RIGHT_FLAG], ['curryRight', WRAP_CURRY_RIGHT_FLAG],
['flip', FLIP_FLAG], ['flip', WRAP_FLIP_FLAG],
['partial', PARTIAL_FLAG], ['partial', WRAP_PARTIAL_FLAG],
['partialRight', PARTIAL_RIGHT_FLAG], ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
['rearg', REARG_FLAG] ['rearg', WRAP_REARG_FLAG]
]; ];
/** /**

4
ary.js
View File

@@ -4,7 +4,7 @@ define(['./_createWrap'], function(createWrap) {
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** 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, * Creates a function that invokes `func`, with up to `n` arguments,
@@ -26,7 +26,7 @@ define(['./_createWrap'], function(createWrap) {
function ary(func, n, guard) { function ary(func, n, guard) {
n = guard ? undefined : n; n = guard ? undefined : n;
n = (func && n == null) ? func.length : 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; return ary;

2
at.js
View File

@@ -8,7 +8,7 @@ define(['./_baseAt', './_flatRest'], function(baseAt, flatRest) {
* @since 1.0.0 * @since 1.0.0
* @category Object * @category Object
* @param {Object} object The object to iterate over. * @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. * @returns {Array} Returns the picked values.
* @example * @example
* *

View File

@@ -1,8 +1,8 @@
define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], function(baseRest, createWrap, getHolder, replaceHolders) { define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], function(baseRest, createWrap, getHolder, replaceHolders) {
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var BIND_FLAG = 1, var WRAP_BIND_FLAG = 1,
PARTIAL_FLAG = 32; WRAP_PARTIAL_FLAG = 32;
/** /**
* Creates a function that invokes `func` with the `this` binding of `thisArg` * Creates a function that invokes `func` with the `this` binding of `thisArg`
@@ -40,10 +40,10 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
* // => 'hi fred!' * // => 'hi fred!'
*/ */
var bind = baseRest(function(func, thisArg, partials) { var bind = baseRest(function(func, thisArg, partials) {
var bitmask = BIND_FLAG; var bitmask = WRAP_BIND_FLAG;
if (partials.length) { if (partials.length) {
var holders = replaceHolders(partials, getHolder(bind)); var holders = replaceHolders(partials, getHolder(bind));
bitmask |= PARTIAL_FLAG; bitmask |= WRAP_PARTIAL_FLAG;
} }
return createWrap(func, bitmask, thisArg, partials, holders); return createWrap(func, bitmask, thisArg, partials, holders);
}); });

View File

@@ -1,9 +1,9 @@
define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], function(baseRest, createWrap, getHolder, replaceHolders) { define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], function(baseRest, createWrap, getHolder, replaceHolders) {
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
var BIND_FLAG = 1, var WRAP_BIND_FLAG = 1,
BIND_KEY_FLAG = 2, WRAP_BIND_KEY_FLAG = 2,
PARTIAL_FLAG = 32; WRAP_PARTIAL_FLAG = 32;
/** /**
* Creates a function that invokes the method at `object[key]` with `partials` * Creates a function that invokes the method at `object[key]` with `partials`
@@ -51,10 +51,10 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
* // => 'hiya fred!' * // => 'hiya fred!'
*/ */
var bindKey = baseRest(function(object, key, partials) { 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) { if (partials.length) {
var holders = replaceHolders(partials, getHolder(bindKey)); var holders = replaceHolders(partials, getHolder(bindKey));
bitmask |= PARTIAL_FLAG; bitmask |= WRAP_PARTIAL_FLAG;
} }
return createWrap(key, bitmask, object, partials, holders); return createWrap(key, bitmask, object, partials, holders);
}); });

View File

@@ -1,5 +1,8 @@
define(['./_baseClone'], function(baseClone) { define(['./_baseClone'], function(baseClone) {
/** Used to compose bitmasks for cloning. */
var CLONE_SYMBOLS_FLAG = 4;
/** /**
* Creates a shallow clone of `value`. * Creates a shallow clone of `value`.
* *
@@ -27,7 +30,7 @@ define(['./_baseClone'], function(baseClone) {
* // => true * // => true
*/ */
function clone(value) { function clone(value) {
return baseClone(value, false, true); return baseClone(value, CLONE_SYMBOLS_FLAG);
} }
return clone; return clone;

View File

@@ -1,5 +1,9 @@
define(['./_baseClone'], function(baseClone) { 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`. * This method is like `_.clone` except that it recursively clones `value`.
* *
@@ -19,7 +23,7 @@ define(['./_baseClone'], function(baseClone) {
* // => false * // => false
*/ */
function cloneDeep(value) { function cloneDeep(value) {
return baseClone(value, true, true); return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
} }
return cloneDeep; return cloneDeep;

View File

@@ -3,6 +3,10 @@ define(['./_baseClone'], function(baseClone) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; 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`. * This method is like `_.cloneWith` except that it recursively clones `value`.
* *
@@ -33,7 +37,7 @@ define(['./_baseClone'], function(baseClone) {
*/ */
function cloneDeepWith(value, customizer) { function cloneDeepWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined; customizer = typeof customizer == 'function' ? customizer : undefined;
return baseClone(value, true, true, customizer); return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
} }
return cloneDeepWith; return cloneDeepWith;

View File

@@ -3,6 +3,9 @@ define(['./_baseClone'], function(baseClone) {
/** Used as a safe reference for `undefined` in pre-ES5 environments. */ /** Used as a safe reference for `undefined` in pre-ES5 environments. */
var undefined; var undefined;
/** Used to compose bitmasks for cloning. */
var CLONE_SYMBOLS_FLAG = 4;
/** /**
* This method is like `_.clone` except that it accepts `customizer` which * This method is like `_.clone` except that it accepts `customizer` which
* is invoked to produce the cloned value. If `customizer` returns `undefined`, * is invoked to produce the cloned value. If `customizer` returns `undefined`,
@@ -36,7 +39,7 @@ define(['./_baseClone'], function(baseClone) {
*/ */
function cloneWith(value, customizer) { function cloneWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined; customizer = typeof customizer == 'function' ? customizer : undefined;
return baseClone(value, false, true, customizer); return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
} }
return cloneWith; return cloneWith;

View File

@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseConforms'], function(baseClone, baseConforms) { 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 * Creates a function that invokes the predicate properties of `source` with
* the corresponding property values of a given object, returning `true` if * 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 }] * // => [{ 'a': 1, 'b': 2 }]
*/ */
function conforms(source) { function conforms(source) {
return baseConforms(baseClone(source, true)); return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
} }
return conforms; return conforms;

View File

@@ -4,7 +4,7 @@ define(['./_createWrap'], function(createWrap) {
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** 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 * Creates a function that accepts arguments of `func` and either invokes
@@ -49,7 +49,7 @@ define(['./_createWrap'], function(createWrap) {
*/ */
function curry(func, arity, guard) { function curry(func, arity, guard) {
arity = guard ? undefined : arity; 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; result.placeholder = curry.placeholder;
return result; return result;
} }

View File

@@ -4,7 +4,7 @@ define(['./_createWrap'], function(createWrap) {
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** 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` * 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) { function curryRight(func, arity, guard) {
arity = guard ? undefined : arity; 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; result.placeholder = curryRight.placeholder;
return result; return result;
} }

View File

@@ -4,11 +4,13 @@ define(['./_deburrLetter', './toString'], function(deburrLetter, toString) {
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
/** Used to compose unicode character classes. */ /** Used to compose unicode character classes. */
var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', var rsComboMarksRange = '\\u0300-\\u036f',
rsComboSymbolsRange = '\\u20d0-\\u20f0'; reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;
/** Used to compose unicode capture groups. */ /** 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 * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and

View File

@@ -1,7 +1,7 @@
define(['./_createWrap'], function(createWrap) { define(['./_createWrap'], function(createWrap) {
/** Used to compose bitmasks for function metadata. */ /** 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. * Creates a function that invokes `func` with arguments reversed.
@@ -22,7 +22,7 @@ define(['./_createWrap'], function(createWrap) {
* // => ['d', 'c', 'b', 'a'] * // => ['d', 'c', 'b', 'a']
*/ */
function flip(func) { function flip(func) {
return createWrap(func, FLIP_FLAG); return createWrap(func, WRAP_FLIP_FLAG);
} }
return flip; return flip;

View File

@@ -38,7 +38,7 @@ define(['./_baseIsEqual'], function(baseIsEqual) {
function isEqualWith(value, other, customizer) { function isEqualWith(value, other, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined; customizer = typeof customizer == 'function' ? customizer : undefined;
var result = customizer ? customizer(value, other) : 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; return isEqualWith;

View File

@@ -1,7 +1,7 @@
define(['./_baseIsNative', './_isMaskable'], function(baseIsNative, isMaskable) { define(['./_baseIsNative', './_isMaskable'], function(baseIsNative, isMaskable) {
/** Error message constants. */ /** 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. * Checks if `value` is a pristine native function.

View File

@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseIteratee'], function(baseClone, baseIteratee) { 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 * Creates a function that invokes `func` with the arguments of the created
* function. If `func` is a property name, the created function returns the * function. If `func` is a property name, the created function returns the
@@ -43,7 +46,7 @@ define(['./_baseClone', './_baseIteratee'], function(baseClone, baseIteratee) {
* // => ['def'] * // => ['def']
*/ */
function iteratee(func) { 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; return iteratee;

390
main.js
View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* lodash (Custom Build) <https://lodash.com/> * Lodash (Custom Build) <https://lodash.com/>
* Build: `lodash exports="amd" -d -o ./main.js` * Build: `lodash exports="amd" -d -o ./main.js`
* Copyright JS Foundation and other contributors <https://js.foundation/> * Copyright JS Foundation and other contributors <https://js.foundation/>
* Released under MIT license <https://lodash.com/license> * Released under MIT license <https://lodash.com/license>
@@ -13,13 +13,13 @@
var undefined; var undefined;
/** Used as the semantic version number. */ /** Used as the semantic version number. */
var VERSION = '4.16.5'; var VERSION = '4.17.0';
/** Used as the size to enable large array optimizations. */ /** Used as the size to enable large array optimizations. */
var LARGE_ARRAY_SIZE = 200; var LARGE_ARRAY_SIZE = 200;
/** Error message constants. */ /** 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'; FUNC_ERROR_TEXT = 'Expected a function';
/** Used to stand-in for `undefined` hash values. */ /** Used to stand-in for `undefined` hash values. */
@@ -31,21 +31,26 @@
/** Used as the internal argument placeholder. */ /** Used as the internal argument placeholder. */
var PLACEHOLDER = '__lodash_placeholder__'; var PLACEHOLDER = '__lodash_placeholder__';
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for cloning. */
var BIND_FLAG = 1, var CLONE_DEEP_FLAG = 1,
BIND_KEY_FLAG = 2, CLONE_FLAT_FLAG = 2,
CURRY_BOUND_FLAG = 4, CLONE_SYMBOLS_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 comparison styles. */ /** Used to compose bitmasks for value comparisons. */
var UNORDERED_COMPARE_FLAG = 1, var COMPARE_PARTIAL_FLAG = 1,
PARTIAL_COMPARE_FLAG = 2; 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`. */ /** Used as default options for `_.truncate`. */
var DEFAULT_TRUNC_LENGTH = 30, var DEFAULT_TRUNC_LENGTH = 30,
@@ -73,15 +78,15 @@
/** Used to associate wrap methods with their bit flags. */ /** Used to associate wrap methods with their bit flags. */
var wrapFlags = [ var wrapFlags = [
['ary', ARY_FLAG], ['ary', WRAP_ARY_FLAG],
['bind', BIND_FLAG], ['bind', WRAP_BIND_FLAG],
['bindKey', BIND_KEY_FLAG], ['bindKey', WRAP_BIND_KEY_FLAG],
['curry', CURRY_FLAG], ['curry', WRAP_CURRY_FLAG],
['curryRight', CURRY_RIGHT_FLAG], ['curryRight', WRAP_CURRY_RIGHT_FLAG],
['flip', FLIP_FLAG], ['flip', WRAP_FLIP_FLAG],
['partial', PARTIAL_FLAG], ['partial', WRAP_PARTIAL_FLAG],
['partialRight', PARTIAL_RIGHT_FLAG], ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
['rearg', REARG_FLAG] ['rearg', WRAP_REARG_FLAG]
]; ];
/** `Object#toString` result references. */ /** `Object#toString` result references. */
@@ -200,8 +205,10 @@
/** Used to compose unicode character classes. */ /** Used to compose unicode character classes. */
var rsAstralRange = '\\ud800-\\udfff', var rsAstralRange = '\\ud800-\\udfff',
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23', rsComboMarksRange = '\\u0300-\\u036f',
rsComboSymbolsRange = '\\u20d0-\\u20f0', reComboHalfMarksRange = '\\ufe20-\\ufe2f',
rsComboSymbolsRange = '\\u20d0-\\u20ff',
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
rsDingbatRange = '\\u2700-\\u27bf', rsDingbatRange = '\\u2700-\\u27bf',
rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff', rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
rsMathOpRange = '\\xac\\xb1\\xd7\\xf7', rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
@@ -216,7 +223,7 @@
var rsApos = "['\u2019]", var rsApos = "['\u2019]",
rsAstral = '[' + rsAstralRange + ']', rsAstral = '[' + rsAstralRange + ']',
rsBreak = '[' + rsBreakRange + ']', rsBreak = '[' + rsBreakRange + ']',
rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', rsCombo = '[' + rsComboRange + ']',
rsDigits = '\\d+', rsDigits = '\\d+',
rsDingbat = '[' + rsDingbatRange + ']', rsDingbat = '[' + rsDingbatRange + ']',
rsLower = '[' + rsLowerRange + ']', rsLower = '[' + rsLowerRange + ']',
@@ -268,7 +275,7 @@
].join('|'), 'g'); ].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/). */ /** 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. */ /** 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 ]/; 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. */ /** Used to access faster Node.js helpers. */
var nodeUtil = (function() { var nodeUtil = (function() {
try { try {
return freeProcess && freeProcess.binding('util'); return freeProcess && freeProcess.binding && freeProcess.binding('util');
} catch (e) {} } catch (e) {}
}()); }());
@@ -2559,6 +2566,19 @@
return object && copyObject(source, keys(source), object); 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 * The base implementation of `assignValue` and `assignMergeValue` without
* value checks. * value checks.
@@ -2586,7 +2606,7 @@
* *
* @private * @private
* @param {Object} object The object to iterate over. * @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. * @returns {Array} Returns the picked elements.
*/ */
function baseAt(object, paths) { function baseAt(object, paths) {
@@ -2628,16 +2648,22 @@
* *
* @private * @private
* @param {*} value The value to clone. * @param {*} value The value to clone.
* @param {boolean} [isDeep] Specify a deep clone. * @param {boolean} bitmask The bitmask flags.
* @param {boolean} [isFull] Specify a clone including symbols. * 1 - Deep clone
* 2 - Flatten inherited properties
* 4 - Clone symbols
* @param {Function} [customizer] The function to customize cloning. * @param {Function} [customizer] The function to customize cloning.
* @param {string} [key] The key of `value`. * @param {string} [key] The key of `value`.
* @param {Object} [object] The parent object of `value`. * @param {Object} [object] The parent object of `value`.
* @param {Object} [stack] Tracks traversed objects and their clone counterparts. * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
* @returns {*} Returns the cloned value. * @returns {*} Returns the cloned value.
*/ */
function baseClone(value, isDeep, isFull, customizer, key, object, stack) { function baseClone(value, bitmask, customizer, key, object, stack) {
var result; var result,
isDeep = bitmask & CLONE_DEEP_FLAG,
isFlat = bitmask & CLONE_FLAT_FLAG,
isFull = bitmask & CLONE_SYMBOLS_FLAG;
if (customizer) { if (customizer) {
result = object ? customizer(value, key, object, stack) : customizer(value); result = object ? customizer(value, key, object, stack) : customizer(value);
} }
@@ -2661,9 +2687,11 @@
return cloneBuffer(value, isDeep); return cloneBuffer(value, isDeep);
} }
if (tag == objectTag || tag == argsTag || (isFunc && !object)) { if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
result = initCloneObject(isFunc ? {} : value); result = (isFlat || isFunc) ? {} : initCloneObject(value);
if (!isDeep) { if (!isDeep) {
return copySymbols(value, baseAssign(result, value)); return isFlat
? copySymbolsIn(value, baseAssignIn(result, value))
: copySymbols(value, baseAssign(result, value));
} }
} else { } else {
if (!cloneableTags[tag]) { if (!cloneableTags[tag]) {
@@ -2680,14 +2708,18 @@
} }
stack.set(value, result); 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) { arrayEach(props || value, function(subValue, key) {
if (props) { if (props) {
key = subValue; key = subValue;
subValue = value[key]; subValue = value[key];
} }
// Recursively populate clone (susceptible to call stack limits). // 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; return result;
} }
@@ -3260,22 +3292,21 @@
* @private * @private
* @param {*} value The value to compare. * @param {*} value The value to compare.
* @param {*} other The other 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 {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. * @param {Object} [stack] Tracks traversed `value` and `other` objects.
* @returns {boolean} Returns `true` if the values are equivalent, else `false`. * @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) { if (value === other) {
return true; return true;
} }
if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
return value !== value && other !== 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 * @private
* @param {Object} object The object to compare. * @param {Object} object The object to compare.
* @param {Object} other The other 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} 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. * @param {Object} [stack] Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. * @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), var objIsArr = isArray(object),
othIsArr = isArray(other), othIsArr = isArray(other),
objTag = arrayTag, objTag = arrayTag,
@@ -3321,10 +3351,10 @@
if (isSameTag && !objIsObj) { if (isSameTag && !objIsObj) {
stack || (stack = new Stack); stack || (stack = new Stack);
return (objIsArr || isTypedArray(object)) return (objIsArr || isTypedArray(object))
? equalArrays(object, other, equalFunc, customizer, bitmask, stack) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
: equalByTag(object, other, objTag, equalFunc, customizer, bitmask, 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__'), var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
@@ -3333,14 +3363,14 @@
othUnwrapped = othIsWrapped ? other.value() : other; othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack); stack || (stack = new Stack);
return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack); return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
} }
} }
if (!isSameTag) { if (!isSameTag) {
return false; return false;
} }
stack || (stack = new Stack); 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); var result = customizer(objValue, srcValue, key, object, source, stack);
} }
if (!(result === undefined 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 : result
)) { )) {
return false; return false;
@@ -3588,7 +3618,7 @@
var objValue = get(object, path); var objValue = get(object, path);
return (objValue === undefined && objValue === srcValue) return (objValue === undefined && objValue === srcValue)
? hasIn(object, path) ? 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 * @private
* @param {Object} object The source object. * @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. * @returns {Object} Returns the new object.
*/ */
function basePick(object, props) { function basePick(object, paths) {
object = Object(object); object = Object(object);
return basePickBy(object, props, function(value, key) { return basePickBy(object, paths, function(value, path) {
return key in object; return hasIn(object, path);
}); });
} }
@@ -3765,21 +3795,21 @@
* *
* @private * @private
* @param {Object} object The source object. * @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. * @param {Function} predicate The function invoked per property.
* @returns {Object} Returns the new object. * @returns {Object} Returns the new object.
*/ */
function basePickBy(object, props, predicate) { function basePickBy(object, paths, predicate) {
var index = -1, var index = -1,
length = props.length, length = paths.length,
result = {}; result = {};
while (++index < length) { while (++index < length) {
var key = props[index], var path = paths[index],
value = object[key]; value = baseGet(object, path);
if (predicate(value, key)) { if (predicate(value, path)) {
baseAssignValue(result, key, value); baseSet(result, path, value);
} }
} }
return result; return result;
@@ -4323,7 +4353,7 @@
* *
* @private * @private
* @param {Object} object The object to modify. * @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`. * @returns {boolean} Returns `true` if the property is deleted, else `false`.
*/ */
function baseUnset(object, path) { function baseUnset(object, path) {
@@ -4414,9 +4444,8 @@
othIndex = -1; othIndex = -1;
while (++othIndex < length) { while (++othIndex < length) {
var othArray = arrays[othIndex]; if (othIndex != index) {
if (othArray !== array) { result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
result[index] = baseDifference(result[index] || array, othArray, iteratee, comparator);
} }
} }
} }
@@ -4569,7 +4598,7 @@
* @returns {Object} Returns the cloned map. * @returns {Object} Returns the cloned map.
*/ */
function cloneMap(map, isDeep, cloneFunc) { 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); return arrayReduce(array, addMapEntry, new map.constructor);
} }
@@ -4596,7 +4625,7 @@
* @returns {Object} Returns the cloned set. * @returns {Object} Returns the cloned set.
*/ */
function cloneSet(set, isDeep, cloneFunc) { 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); return arrayReduce(array, addSetEntry, new set.constructor);
} }
@@ -4831,7 +4860,7 @@
} }
/** /**
* Copies own symbol properties of `source` to `object`. * Copies own symbols of `source` to `object`.
* *
* @private * @private
* @param {Object} source The object to copy symbols from. * @param {Object} source The object to copy symbols from.
@@ -4842,6 +4871,18 @@
return copyObject(source, getSymbols(source), object); 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`. * Creates a function like `_.groupBy`.
* *
@@ -4956,7 +4997,7 @@
* @returns {Function} Returns the new wrapped function. * @returns {Function} Returns the new wrapped function.
*/ */
function createBind(func, bitmask, thisArg) { function createBind(func, bitmask, thisArg) {
var isBind = bitmask & BIND_FLAG, var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func); Ctor = createCtor(func);
function wrapper() { function wrapper() {
@@ -5129,7 +5170,7 @@
data = funcName == 'wrapper' ? getData(func) : undefined; data = funcName == 'wrapper' ? getData(func) : undefined;
if (data && isLaziable(data[0]) && 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 !data[4].length && data[9] == 1
) { ) {
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
@@ -5178,11 +5219,11 @@
* @returns {Function} Returns the new wrapped function. * @returns {Function} Returns the new wrapped function.
*/ */
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
var isAry = bitmask & ARY_FLAG, var isAry = bitmask & WRAP_ARY_FLAG,
isBind = bitmask & BIND_FLAG, isBind = bitmask & WRAP_BIND_FLAG,
isBindKey = bitmask & BIND_KEY_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG), isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
isFlip = bitmask & FLIP_FLAG, isFlip = bitmask & WRAP_FLIP_FLAG,
Ctor = isBindKey ? undefined : createCtor(func); Ctor = isBindKey ? undefined : createCtor(func);
function wrapper() { function wrapper() {
@@ -5333,7 +5374,7 @@
* @returns {Function} Returns the new wrapped function. * @returns {Function} Returns the new wrapped function.
*/ */
function createPartial(func, bitmask, thisArg, partials) { function createPartial(func, bitmask, thisArg, partials) {
var isBind = bitmask & BIND_FLAG, var isBind = bitmask & WRAP_BIND_FLAG,
Ctor = createCtor(func); Ctor = createCtor(func);
function wrapper() { function wrapper() {
@@ -5415,17 +5456,17 @@
* @returns {Function} Returns the new wrapped function. * @returns {Function} Returns the new wrapped function.
*/ */
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { 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, newHolders = isCurry ? holders : undefined,
newHoldersRight = isCurry ? undefined : holders, newHoldersRight = isCurry ? undefined : holders,
newPartials = isCurry ? partials : undefined, newPartials = isCurry ? partials : undefined,
newPartialsRight = isCurry ? undefined : partials; newPartialsRight = isCurry ? undefined : partials;
bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG); bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG); bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
if (!(bitmask & CURRY_BOUND_FLAG)) { if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG); bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
} }
var newData = [ var newData = [
func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
@@ -5503,17 +5544,16 @@
* @private * @private
* @param {Function|string} func The function or method name to wrap. * @param {Function|string} func The function or method name to wrap.
* @param {number} bitmask The bitmask flags. * @param {number} bitmask The bitmask flags.
* The bitmask may be composed of the following flags: * 1 - `_.bind`
* 1 - `_.bind` * 2 - `_.bindKey`
* 2 - `_.bindKey` * 4 - `_.curry` or `_.curryRight` of a bound function
* 4 - `_.curry` or `_.curryRight` of a bound function * 8 - `_.curry`
* 8 - `_.curry` * 16 - `_.curryRight`
* 16 - `_.curryRight` * 32 - `_.partial`
* 32 - `_.partial` * 64 - `_.partialRight`
* 64 - `_.partialRight` * 128 - `_.rearg`
* 128 - `_.rearg` * 256 - `_.ary`
* 256 - `_.ary` * 512 - `_.flip`
* 512 - `_.flip`
* @param {*} [thisArg] The `this` binding of `func`. * @param {*} [thisArg] The `this` binding of `func`.
* @param {Array} [partials] The arguments to be partially applied. * @param {Array} [partials] The arguments to be partially applied.
* @param {Array} [holders] The `partials` placeholder indexes. * @param {Array} [holders] The `partials` placeholder indexes.
@@ -5523,20 +5563,20 @@
* @returns {Function} Returns the new wrapped function. * @returns {Function} Returns the new wrapped function.
*/ */
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { 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') { if (!isBindKey && typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT); throw new TypeError(FUNC_ERROR_TEXT);
} }
var length = partials ? partials.length : 0; var length = partials ? partials.length : 0;
if (!length) { if (!length) {
bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG); bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
partials = holders = undefined; partials = holders = undefined;
} }
ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
arity = arity === undefined ? arity : toInteger(arity); arity = arity === undefined ? arity : toInteger(arity);
length -= holders ? holders.length : 0; length -= holders ? holders.length : 0;
if (bitmask & PARTIAL_RIGHT_FLAG) { if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
var partialsRight = partials, var partialsRight = partials,
holdersRight = holders; holdersRight = holders;
@@ -5561,14 +5601,14 @@
? (isBindKey ? 0 : func.length) ? (isBindKey ? 0 : func.length)
: nativeMax(newData[9] - length, 0); : nativeMax(newData[9] - length, 0);
if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
bitmask &= ~(CURRY_FLAG | 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); 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); 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); result = createPartial(func, bitmask, thisArg, partials);
} else { } else {
result = createHybrid.apply(undefined, newData); result = createHybrid.apply(undefined, newData);
@@ -5584,15 +5624,14 @@
* @private * @private
* @param {Array} array The array to compare. * @param {Array} array The array to compare.
* @param {Array} other The other 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 {Function} customizer The function to customize comparisons.
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` * @param {Function} equalFunc The function to determine equivalents of values.
* for more details.
* @param {Object} stack Tracks traversed `array` and `other` objects. * @param {Object} stack Tracks traversed `array` and `other` objects.
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
*/ */
function equalArrays(array, other, equalFunc, customizer, bitmask, stack) { function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & PARTIAL_COMPARE_FLAG, var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
arrLength = array.length, arrLength = array.length,
othLength = other.length; othLength = other.length;
@@ -5606,7 +5645,7 @@
} }
var index = -1, var index = -1,
result = true, result = true,
seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined; seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
stack.set(array, other); stack.set(array, other);
stack.set(other, array); stack.set(other, array);
@@ -5632,7 +5671,7 @@
if (seen) { if (seen) {
if (!arraySome(other, function(othValue, othIndex) { if (!arraySome(other, function(othValue, othIndex) {
if (!cacheHas(seen, 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); return seen.push(othIndex);
} }
})) { })) {
@@ -5641,7 +5680,7 @@
} }
} else if (!( } else if (!(
arrValue === othValue || arrValue === othValue ||
equalFunc(arrValue, othValue, customizer, bitmask, stack) equalFunc(arrValue, othValue, bitmask, customizer, stack)
)) { )) {
result = false; result = false;
break; break;
@@ -5663,14 +5702,13 @@
* @param {Object} object The object to compare. * @param {Object} object The object to compare.
* @param {Object} other The other object to compare. * @param {Object} other The other object to compare.
* @param {string} tag The `toStringTag` of the objects 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 {Function} customizer The function to customize comparisons.
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` * @param {Function} equalFunc The function to determine equivalents of values.
* for more details.
* @param {Object} stack Tracks traversed `object` and `other` objects. * @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. * @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) { switch (tag) {
case dataViewTag: case dataViewTag:
if ((object.byteLength != other.byteLength) || if ((object.byteLength != other.byteLength) ||
@@ -5708,7 +5746,7 @@
var convert = mapToArray; var convert = mapToArray;
case setTag: case setTag:
var isPartial = bitmask & PARTIAL_COMPARE_FLAG; var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
convert || (convert = setToArray); convert || (convert = setToArray);
if (object.size != other.size && !isPartial) { if (object.size != other.size && !isPartial) {
@@ -5719,11 +5757,11 @@
if (stacked) { if (stacked) {
return stacked == other; return stacked == other;
} }
bitmask |= UNORDERED_COMPARE_FLAG; bitmask |= COMPARE_UNORDERED_FLAG;
// Recursively compare objects (susceptible to call stack limits). // Recursively compare objects (susceptible to call stack limits).
stack.set(object, other); 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); stack['delete'](object);
return result; return result;
@@ -5742,15 +5780,14 @@
* @private * @private
* @param {Object} object The object to compare. * @param {Object} object The object to compare.
* @param {Object} other The other 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 {Function} customizer The function to customize comparisons.
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual` * @param {Function} equalFunc The function to determine equivalents of values.
* for more details.
* @param {Object} stack Tracks traversed `object` and `other` objects. * @param {Object} stack Tracks traversed `object` and `other` objects.
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`. * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
*/ */
function equalObjects(object, other, equalFunc, customizer, bitmask, stack) { function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & PARTIAL_COMPARE_FLAG, var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
objProps = keys(object), objProps = keys(object),
objLength = objProps.length, objLength = objProps.length,
othProps = keys(other), othProps = keys(other),
@@ -5788,7 +5825,7 @@
} }
// Recursively compare objects (susceptible to call stack limits). // Recursively compare objects (susceptible to call stack limits).
if (!(compared === undefined if (!(compared === undefined
? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack)) ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
: compared : compared
)) { )) {
result = false; result = false;
@@ -5985,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 * @private
* @param {Object} object The object to query. * @param {Object} object The object to query.
@@ -5994,8 +6031,7 @@
var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray; var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
/** /**
* Creates an array of the own and inherited enumerable symbol properties * Creates an array of the own and inherited enumerable symbols of `object`.
* of `object`.
* *
* @private * @private
* @param {Object} object The object to query. * @param {Object} object The object to query.
@@ -6427,22 +6463,22 @@
var bitmask = data[1], var bitmask = data[1],
srcBitmask = source[1], srcBitmask = source[1],
newBitmask = bitmask | srcBitmask, 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 = var isCombo =
((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) || ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) || ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG)); ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
// Exit early if metadata can't be merged. // Exit early if metadata can't be merged.
if (!(isCommon || isCombo)) { if (!(isCommon || isCombo)) {
return data; return data;
} }
// Use source `thisArg` if available. // Use source `thisArg` if available.
if (srcBitmask & BIND_FLAG) { if (srcBitmask & WRAP_BIND_FLAG) {
data[2] = source[2]; data[2] = source[2];
// Set when currying a bound function. // 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. // Compose partial arguments.
var value = source[3]; var value = source[3];
@@ -6464,7 +6500,7 @@
data[7] = value; data[7] = value;
} }
// Use source `ary` if it's smaller. // 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]); data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
} }
// Use source `arity` if one is not provided. // Use source `arity` if one is not provided.
@@ -8781,7 +8817,7 @@
* @memberOf _ * @memberOf _
* @since 1.0.0 * @since 1.0.0
* @category Seq * @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. * @returns {Object} Returns the new `lodash` wrapper instance.
* @example * @example
* *
@@ -10000,7 +10036,7 @@
function ary(func, n, guard) { function ary(func, n, guard) {
n = guard ? undefined : n; n = guard ? undefined : n;
n = (func && n == null) ? func.length : 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);
} }
/** /**
@@ -10073,10 +10109,10 @@
* // => 'hi fred!' * // => 'hi fred!'
*/ */
var bind = baseRest(function(func, thisArg, partials) { var bind = baseRest(function(func, thisArg, partials) {
var bitmask = BIND_FLAG; var bitmask = WRAP_BIND_FLAG;
if (partials.length) { if (partials.length) {
var holders = replaceHolders(partials, getHolder(bind)); var holders = replaceHolders(partials, getHolder(bind));
bitmask |= PARTIAL_FLAG; bitmask |= WRAP_PARTIAL_FLAG;
} }
return createWrap(func, bitmask, thisArg, partials, holders); return createWrap(func, bitmask, thisArg, partials, holders);
}); });
@@ -10127,10 +10163,10 @@
* // => 'hiya fred!' * // => 'hiya fred!'
*/ */
var bindKey = baseRest(function(object, key, partials) { 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) { if (partials.length) {
var holders = replaceHolders(partials, getHolder(bindKey)); var holders = replaceHolders(partials, getHolder(bindKey));
bitmask |= PARTIAL_FLAG; bitmask |= WRAP_PARTIAL_FLAG;
} }
return createWrap(key, bitmask, object, partials, holders); return createWrap(key, bitmask, object, partials, holders);
}); });
@@ -10178,7 +10214,7 @@
*/ */
function curry(func, arity, guard) { function curry(func, arity, guard) {
arity = guard ? undefined : arity; 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; result.placeholder = curry.placeholder;
return result; return result;
} }
@@ -10223,7 +10259,7 @@
*/ */
function curryRight(func, arity, guard) { function curryRight(func, arity, guard) {
arity = guard ? undefined : arity; 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; result.placeholder = curryRight.placeholder;
return result; return result;
} }
@@ -10468,7 +10504,7 @@
* // => ['d', 'c', 'b', 'a'] * // => ['d', 'c', 'b', 'a']
*/ */
function flip(func) { function flip(func) {
return createWrap(func, FLIP_FLAG); return createWrap(func, WRAP_FLIP_FLAG);
} }
/** /**
@@ -10679,7 +10715,7 @@
*/ */
var partial = baseRest(function(func, partials) { var partial = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partial)); var holders = replaceHolders(partials, getHolder(partial));
return createWrap(func, PARTIAL_FLAG, undefined, partials, holders); return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
}); });
/** /**
@@ -10716,7 +10752,7 @@
*/ */
var partialRight = baseRest(function(func, partials) { var partialRight = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partialRight)); 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);
}); });
/** /**
@@ -10742,7 +10778,7 @@
* // => ['a', 'b', 'c'] * // => ['a', 'b', 'c']
*/ */
var rearg = flatRest(function(func, indexes) { 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);
}); });
/** /**
@@ -10819,11 +10855,15 @@
start = start === undefined ? 0 : nativeMax(toInteger(start), 0); start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
return baseRest(function(args) { return baseRest(function(args) {
var array = args[start], var array = args[start],
lastIndex = args.length - 1,
otherArgs = castSlice(args, 0, start); otherArgs = castSlice(args, 0, start);
if (array) { if (array) {
arrayPush(otherArgs, array); arrayPush(otherArgs, array);
} }
if (start != lastIndex) {
arrayPush(otherArgs, castSlice(args, start + 1));
}
return apply(func, this, otherArgs); return apply(func, this, otherArgs);
}); });
} }
@@ -11005,7 +11045,7 @@
* // => true * // => true
*/ */
function clone(value) { function clone(value) {
return baseClone(value, false, true); return baseClone(value, CLONE_SYMBOLS_FLAG);
} }
/** /**
@@ -11041,7 +11081,7 @@
*/ */
function cloneWith(value, customizer) { function cloneWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined; customizer = typeof customizer == 'function' ? customizer : undefined;
return baseClone(value, false, true, customizer); return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
} }
/** /**
@@ -11063,7 +11103,7 @@
* // => false * // => false
*/ */
function cloneDeep(value) { function cloneDeep(value) {
return baseClone(value, true, true); return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
} }
/** /**
@@ -11096,7 +11136,7 @@
*/ */
function cloneDeepWith(value, customizer) { function cloneDeepWith(value, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined; customizer = typeof customizer == 'function' ? customizer : undefined;
return baseClone(value, true, true, customizer); return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
} }
/** /**
@@ -11545,7 +11585,7 @@
function isEqualWith(value, other, customizer) { function isEqualWith(value, other, customizer) {
customizer = typeof customizer == 'function' ? customizer : undefined; customizer = typeof customizer == 'function' ? customizer : undefined;
var result = customizer ? customizer(value, other) : 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;
} }
/** /**
@@ -12688,7 +12728,7 @@
* @since 1.0.0 * @since 1.0.0
* @category Object * @category Object
* @param {Object} object The object to iterate over. * @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. * @returns {Array} Returns the picked values.
* @example * @example
* *
@@ -13415,15 +13455,16 @@
/** /**
* The opposite of `_.pick`; this method creates an object composed of the * The opposite of `_.pick`; this method creates an object composed of the
* own and inherited enumerable string keyed properties of `object` that are * own and inherited enumerable property paths of `object` that are not omitted.
* not omitted. *
* **Note:** This method is considerably slower than `_.pick`.
* *
* @static * @static
* @since 0.1.0 * @since 0.1.0
* @memberOf _ * @memberOf _
* @category Object * @category Object
* @param {Object} object The source 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. * @returns {Object} Returns the new object.
* @example * @example
* *
@@ -13432,12 +13473,19 @@
* _.omit(object, ['a', 'c']); * _.omit(object, ['a', 'c']);
* // => { 'b': '2' } * // => { 'b': '2' }
*/ */
var omit = flatRest(function(object, props) { var omit = flatRest(function(object, paths) {
var result = {};
if (object == null) { if (object == null) {
return {}; return result;
} }
props = arrayMap(props, toKey); copyObject(object, getAllKeysIn(object), result);
return basePick(object, baseDifference(getAllKeysIn(object), props)); result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG);
var length = paths.length;
while (length--) {
baseUnset(result, paths[length]);
}
return result;
}); });
/** /**
@@ -13472,7 +13520,7 @@
* @memberOf _ * @memberOf _
* @category Object * @category Object
* @param {Object} object The source 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. * @returns {Object} Returns the new object.
* @example * @example
* *
@@ -13481,8 +13529,8 @@
* _.pick(object, ['a', 'c']); * _.pick(object, ['a', 'c']);
* // => { 'a': 1, 'c': 3 } * // => { 'a': 1, 'c': 3 }
*/ */
var pick = flatRest(function(object, props) { var pick = flatRest(function(object, paths) {
return object == null ? {} : basePick(object, arrayMap(props, toKey)); return object == null ? {} : basePick(object, arrayMap(paths, toKey));
}); });
/** /**
@@ -15275,7 +15323,7 @@
* // => [{ 'a': 1, 'b': 2 }] * // => [{ 'a': 1, 'b': 2 }]
*/ */
function conforms(source) { function conforms(source) {
return baseConforms(baseClone(source, true)); return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
} }
/** /**
@@ -15437,7 +15485,7 @@
* // => ['def'] * // => ['def']
*/ */
function iteratee(func) { function iteratee(func) {
return baseIteratee(typeof func == 'function' ? func : baseClone(func, true)); return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
} }
/** /**
@@ -15469,7 +15517,7 @@
* // => [{ 'a': 4, 'b': 5, 'c': 6 }] * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
*/ */
function matches(source) { function matches(source) {
return baseMatches(baseClone(source, true)); return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
} }
/** /**
@@ -15499,7 +15547,7 @@
* // => { 'a': 4, 'b': 5, 'c': 6 } * // => { 'a': 4, 'b': 5, 'c': 6 }
*/ */
function matchesProperty(path, srcValue) { function matchesProperty(path, srcValue) {
return baseMatchesProperty(path, baseClone(srcValue, true)); return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
} }
/** /**
@@ -16959,7 +17007,7 @@
} }
}); });
realNames[createHybrid(undefined, BIND_KEY_FLAG).name] = [{ realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
'name': 'wrapper', 'name': 'wrapper',
'func': undefined 'func': undefined
}]; }];

View File

@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseMatches'], function(baseClone, baseMatches) { 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 * Creates a function that performs a partial deep comparison between a given
* object and `source`, returning `true` if the given object has equivalent * 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 }] * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
*/ */
function matches(source) { function matches(source) {
return baseMatches(baseClone(source, true)); return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
} }
return matches; return matches;

View File

@@ -1,5 +1,8 @@
define(['./_baseClone', './_baseMatchesProperty'], function(baseClone, baseMatchesProperty) { 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 * Creates a function that performs a partial deep comparison between the
* value at `path` of a given object to `srcValue`, returning `true` if 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 } * // => { 'a': 4, 'b': 5, 'c': 6 }
*/ */
function matchesProperty(path, srcValue) { function matchesProperty(path, srcValue) {
return baseMatchesProperty(path, baseClone(srcValue, true)); return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
} }
return matchesProperty; return matchesProperty;

29
omit.js
View File

@@ -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 * The opposite of `_.pick`; this method creates an object composed of the
* own and inherited enumerable string keyed properties of `object` that are * own and inherited enumerable property paths of `object` that are not omitted.
* not omitted. *
* **Note:** This method is considerably slower than `_.pick`.
* *
* @static * @static
* @since 0.1.0 * @since 0.1.0
* @memberOf _ * @memberOf _
* @category Object * @category Object
* @param {Object} object The source 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. * @returns {Object} Returns the new object.
* @example * @example
* *
@@ -19,12 +25,19 @@ define(['./_arrayMap', './_baseDifference', './_basePick', './_flatRest', './_ge
* _.omit(object, ['a', 'c']); * _.omit(object, ['a', 'c']);
* // => { 'b': '2' } * // => { 'b': '2' }
*/ */
var omit = flatRest(function(object, props) { var omit = flatRest(function(object, paths) {
var result = {};
if (object == null) { if (object == null) {
return {}; return result;
} }
props = arrayMap(props, toKey); copyObject(object, getAllKeysIn(object), result);
return basePick(object, baseDifference(getAllKeysIn(object), props)); 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; return omit;

View File

@@ -1,6 +1,6 @@
{ {
"name": "lodash-amd", "name": "lodash-amd",
"version": "4.16.5", "version": "4.17.0",
"description": "Lodash exported as AMD modules.", "description": "Lodash exported as AMD modules.",
"keywords": "amd, modules, stdlib, util", "keywords": "amd, modules, stdlib, util",
"homepage": "https://lodash.com/custom-builds", "homepage": "https://lodash.com/custom-builds",

View File

@@ -4,7 +4,7 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** 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 * 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 partial = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partial)); 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. // Assign default placeholders.

View File

@@ -4,7 +4,7 @@ define(['./_baseRest', './_createWrap', './_getHolder', './_replaceHolders'], fu
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** 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 * 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 partialRight = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partialRight)); 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. // Assign default placeholders.

View File

@@ -8,7 +8,7 @@ define(['./_arrayMap', './_basePick', './_flatRest', './_toKey'], function(array
* @memberOf _ * @memberOf _
* @category Object * @category Object
* @param {Object} object The source 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. * @returns {Object} Returns the new object.
* @example * @example
* *
@@ -17,8 +17,8 @@ define(['./_arrayMap', './_basePick', './_flatRest', './_toKey'], function(array
* _.pick(object, ['a', 'c']); * _.pick(object, ['a', 'c']);
* // => { 'a': 1, 'c': 3 } * // => { 'a': 1, 'c': 3 }
*/ */
var pick = flatRest(function(object, props) { var pick = flatRest(function(object, paths) {
return object == null ? {} : basePick(object, arrayMap(props, toKey)); return object == null ? {} : basePick(object, arrayMap(paths, toKey));
}); });
return pick; return pick;

View File

@@ -4,7 +4,7 @@ define(['./_createWrap', './_flatRest'], function(createWrap, flatRest) {
var undefined; var undefined;
/** Used to compose bitmasks for function metadata. */ /** 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 * Creates a function that invokes `func` with arguments arranged according
@@ -29,7 +29,7 @@ define(['./_createWrap', './_flatRest'], function(createWrap, flatRest) {
* // => ['a', 'b', 'c'] * // => ['a', 'b', 'c']
*/ */
var rearg = flatRest(function(func, indexes) { 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; return rearg;

View File

@@ -50,11 +50,15 @@ define(['./_apply', './_arrayPush', './_baseRest', './_castSlice', './toInteger'
start = start === undefined ? 0 : nativeMax(toInteger(start), 0); start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
return baseRest(function(args) { return baseRest(function(args) {
var array = args[start], var array = args[start],
lastIndex = args.length - 1,
otherArgs = castSlice(args, 0, start); otherArgs = castSlice(args, 0, start);
if (array) { if (array) {
arrayPush(otherArgs, array); arrayPush(otherArgs, array);
} }
if (start != lastIndex) {
arrayPush(otherArgs, castSlice(args, start + 1));
}
return apply(func, this, otherArgs); return apply(func, this, otherArgs);
}); });
} }

View File

@@ -10,7 +10,7 @@ define(['./_LazyWrapper', './_LodashWrapper', './_baseAt', './_flatRest', './_is
* @memberOf _ * @memberOf _
* @since 1.0.0 * @since 1.0.0
* @category Seq * @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. * @returns {Object} Returns the new `lodash` wrapper instance.
* @example * @example
* *