mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 14:37:49 +00:00
Compare commits
12 Commits
4.16.5-es
...
4.17.10-es
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
cc483eda91 | ||
|
|
f73db1f02c | ||
|
|
546e924be3 | ||
|
|
b5a07bdc4b | ||
|
|
ae7044c0d3 | ||
|
|
edff3e8d25 | ||
|
|
528e134995 | ||
|
|
f71a7a04b5 | ||
|
|
035ce4f44c | ||
|
|
95f47b6d19 | ||
|
|
b1ff59b3ea | ||
|
|
50aaa95bca |
@@ -1,4 +1,4 @@
|
||||
# lodash-es v4.16.5
|
||||
# lodash-es v4.17.10
|
||||
|
||||
The [Lodash](https://lodash.com/) library exported as [ES](http://www.ecma-international.org/ecma-262/6.0/) modules.
|
||||
|
||||
@@ -7,4 +7,4 @@ Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):
|
||||
$ lodash modularize exports=es -o ./
|
||||
```
|
||||
|
||||
See the [package source](https://github.com/lodash/lodash/tree/4.16.5-es) for more details.
|
||||
See the [package source](https://github.com/lodash/lodash/tree/4.17.10-es) for more details.
|
||||
|
||||
17
_baseAssignIn.js
Normal file
17
_baseAssignIn.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import copyObject from './_copyObject.js';
|
||||
import keysIn from './keysIn.js';
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
export default baseAssignIn;
|
||||
@@ -5,7 +5,7 @@ import get from './get.js';
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {string[]} paths The property paths of elements to pick.
|
||||
* @param {string[]} paths The property paths to pick.
|
||||
* @returns {Array} Returns the picked elements.
|
||||
*/
|
||||
function baseAt(object, paths) {
|
||||
|
||||
@@ -2,19 +2,29 @@ import Stack from './_Stack.js';
|
||||
import arrayEach from './_arrayEach.js';
|
||||
import assignValue from './_assignValue.js';
|
||||
import baseAssign from './_baseAssign.js';
|
||||
import baseAssignIn from './_baseAssignIn.js';
|
||||
import cloneBuffer from './_cloneBuffer.js';
|
||||
import copyArray from './_copyArray.js';
|
||||
import copySymbols from './_copySymbols.js';
|
||||
import copySymbolsIn from './_copySymbolsIn.js';
|
||||
import getAllKeys from './_getAllKeys.js';
|
||||
import getAllKeysIn from './_getAllKeysIn.js';
|
||||
import getTag from './_getTag.js';
|
||||
import initCloneArray from './_initCloneArray.js';
|
||||
import initCloneByTag from './_initCloneByTag.js';
|
||||
import initCloneObject from './_initCloneObject.js';
|
||||
import isArray from './isArray.js';
|
||||
import isBuffer from './isBuffer.js';
|
||||
import isMap from './isMap.js';
|
||||
import isObject from './isObject.js';
|
||||
import isSet from './isSet.js';
|
||||
import keys from './keys.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1,
|
||||
CLONE_FLAT_FLAG = 2,
|
||||
CLONE_SYMBOLS_FLAG = 4;
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var argsTag = '[object Arguments]',
|
||||
arrayTag = '[object Array]',
|
||||
@@ -66,16 +76,22 @@ cloneableTags[weakMapTag] = false;
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to clone.
|
||||
* @param {boolean} [isDeep] Specify a deep clone.
|
||||
* @param {boolean} [isFull] Specify a clone including symbols.
|
||||
* @param {boolean} bitmask The bitmask flags.
|
||||
* 1 - Deep clone
|
||||
* 2 - Flatten inherited properties
|
||||
* 4 - Clone symbols
|
||||
* @param {Function} [customizer] The function to customize cloning.
|
||||
* @param {string} [key] The key of `value`.
|
||||
* @param {Object} [object] The parent object of `value`.
|
||||
* @param {Object} [stack] Tracks traversed objects and their clone counterparts.
|
||||
* @returns {*} Returns the cloned value.
|
||||
*/
|
||||
function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
|
||||
var result;
|
||||
function baseClone(value, bitmask, customizer, key, object, stack) {
|
||||
var result,
|
||||
isDeep = bitmask & CLONE_DEEP_FLAG,
|
||||
isFlat = bitmask & CLONE_FLAT_FLAG,
|
||||
isFull = bitmask & CLONE_SYMBOLS_FLAG;
|
||||
|
||||
if (customizer) {
|
||||
result = object ? customizer(value, key, object, stack) : customizer(value);
|
||||
}
|
||||
@@ -99,15 +115,17 @@ function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
|
||||
return cloneBuffer(value, isDeep);
|
||||
}
|
||||
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
|
||||
result = initCloneObject(isFunc ? {} : value);
|
||||
result = (isFlat || isFunc) ? {} : initCloneObject(value);
|
||||
if (!isDeep) {
|
||||
return copySymbols(value, baseAssign(result, value));
|
||||
return isFlat
|
||||
? copySymbolsIn(value, baseAssignIn(result, value))
|
||||
: copySymbols(value, baseAssign(result, value));
|
||||
}
|
||||
} else {
|
||||
if (!cloneableTags[tag]) {
|
||||
return object ? value : {};
|
||||
}
|
||||
result = initCloneByTag(value, tag, baseClone, isDeep);
|
||||
result = initCloneByTag(value, tag, isDeep);
|
||||
}
|
||||
}
|
||||
// Check for circular references and return its corresponding clone.
|
||||
@@ -118,14 +136,34 @@ function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
|
||||
}
|
||||
stack.set(value, result);
|
||||
|
||||
var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value);
|
||||
if (isSet(value)) {
|
||||
value.forEach(function(subValue) {
|
||||
result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
if (isMap(value)) {
|
||||
value.forEach(function(subValue, key) {
|
||||
result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
|
||||
});
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
var keysFunc = isFull
|
||||
? (isFlat ? getAllKeysIn : getAllKeys)
|
||||
: (isFlat ? keysIn : keys);
|
||||
|
||||
var props = isArr ? undefined : keysFunc(value);
|
||||
arrayEach(props || value, function(subValue, key) {
|
||||
if (props) {
|
||||
key = subValue;
|
||||
subValue = value[key];
|
||||
}
|
||||
// Recursively populate clone (susceptible to call stack limits).
|
||||
assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
|
||||
assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import castPath from './_castPath.js';
|
||||
import isKey from './_isKey.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/**
|
||||
@@ -11,7 +10,7 @@ import toKey from './_toKey.js';
|
||||
* @returns {*} Returns the resolved value.
|
||||
*/
|
||||
function baseGet(object, path) {
|
||||
path = isKey(path, object) ? [path] : castPath(path);
|
||||
path = castPath(path, object);
|
||||
|
||||
var index = 0,
|
||||
length = path.length;
|
||||
|
||||
@@ -20,8 +20,7 @@ function baseGetTag(value) {
|
||||
if (value == null) {
|
||||
return value === undefined ? undefinedTag : nullTag;
|
||||
}
|
||||
value = Object(value);
|
||||
return (symToStringTag && symToStringTag in value)
|
||||
return (symToStringTag && symToStringTag in Object(value))
|
||||
? getRawTag(value)
|
||||
: objectToString(value);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import apply from './_apply.js';
|
||||
import castPath from './_castPath.js';
|
||||
import isKey from './_isKey.js';
|
||||
import last from './last.js';
|
||||
import parent from './_parent.js';
|
||||
import toKey from './_toKey.js';
|
||||
@@ -16,12 +15,9 @@ import toKey from './_toKey.js';
|
||||
* @returns {*} Returns the result of the invoked method.
|
||||
*/
|
||||
function baseInvoke(object, path, args) {
|
||||
if (!isKey(path, object)) {
|
||||
path = castPath(path);
|
||||
object = parent(object, path);
|
||||
path = last(path);
|
||||
}
|
||||
var func = object == null ? object : object[toKey(path)];
|
||||
path = castPath(path, object);
|
||||
object = parent(object, path);
|
||||
var func = object == null ? object : object[toKey(last(path))];
|
||||
return func == null ? undefined : apply(func, object, args);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import baseIsEqualDeep from './_baseIsEqualDeep.js';
|
||||
import isObject from './isObject.js';
|
||||
import isObjectLike from './isObjectLike.js';
|
||||
|
||||
/**
|
||||
@@ -9,22 +8,21 @@ import isObjectLike from './isObjectLike.js';
|
||||
* @private
|
||||
* @param {*} value The value to compare.
|
||||
* @param {*} other The other value to compare.
|
||||
* @param {boolean} bitmask The bitmask flags.
|
||||
* 1 - Unordered comparison
|
||||
* 2 - Partial comparison
|
||||
* @param {Function} [customizer] The function to customize comparisons.
|
||||
* @param {boolean} [bitmask] The bitmask of comparison flags.
|
||||
* The bitmask may be composed of the following flags:
|
||||
* 1 - Unordered comparison
|
||||
* 2 - Partial comparison
|
||||
* @param {Object} [stack] Tracks traversed `value` and `other` objects.
|
||||
* @returns {boolean} Returns `true` if the values are equivalent, else `false`.
|
||||
*/
|
||||
function baseIsEqual(value, other, customizer, bitmask, stack) {
|
||||
function baseIsEqual(value, other, bitmask, customizer, stack) {
|
||||
if (value === other) {
|
||||
return true;
|
||||
}
|
||||
if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
|
||||
if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
|
||||
return value !== value && other !== other;
|
||||
}
|
||||
return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
|
||||
return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
|
||||
}
|
||||
|
||||
export default baseIsEqual;
|
||||
|
||||
@@ -7,8 +7,8 @@ import isArray from './isArray.js';
|
||||
import isBuffer from './isBuffer.js';
|
||||
import isTypedArray from './isTypedArray.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var PARTIAL_COMPARE_FLAG = 2;
|
||||
/** Used to compose bitmasks for value comparisons. */
|
||||
var COMPARE_PARTIAL_FLAG = 1;
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var argsTag = '[object Arguments]',
|
||||
@@ -29,27 +29,21 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
* @private
|
||||
* @param {Object} object The object to compare.
|
||||
* @param {Object} other The other object to compare.
|
||||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||||
* @param {Function} customizer The function to customize comparisons.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {Function} [customizer] The function to customize comparisons.
|
||||
* @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
|
||||
* for more details.
|
||||
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
|
||||
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
||||
*/
|
||||
function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
|
||||
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
|
||||
var objIsArr = isArray(object),
|
||||
othIsArr = isArray(other),
|
||||
objTag = arrayTag,
|
||||
othTag = arrayTag;
|
||||
objTag = objIsArr ? arrayTag : getTag(object),
|
||||
othTag = othIsArr ? arrayTag : getTag(other);
|
||||
|
||||
objTag = objTag == argsTag ? objectTag : objTag;
|
||||
othTag = othTag == argsTag ? objectTag : othTag;
|
||||
|
||||
if (!objIsArr) {
|
||||
objTag = getTag(object);
|
||||
objTag = objTag == argsTag ? objectTag : objTag;
|
||||
}
|
||||
if (!othIsArr) {
|
||||
othTag = getTag(other);
|
||||
othTag = othTag == argsTag ? objectTag : othTag;
|
||||
}
|
||||
var objIsObj = objTag == objectTag,
|
||||
othIsObj = othTag == objectTag,
|
||||
isSameTag = objTag == othTag;
|
||||
@@ -64,10 +58,10 @@ function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
|
||||
if (isSameTag && !objIsObj) {
|
||||
stack || (stack = new Stack);
|
||||
return (objIsArr || isTypedArray(object))
|
||||
? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
|
||||
: equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
|
||||
? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
|
||||
: equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
|
||||
}
|
||||
if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
|
||||
if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
|
||||
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
|
||||
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
|
||||
|
||||
@@ -76,14 +70,14 @@ function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
|
||||
othUnwrapped = othIsWrapped ? other.value() : other;
|
||||
|
||||
stack || (stack = new Stack);
|
||||
return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
|
||||
return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
|
||||
}
|
||||
}
|
||||
if (!isSameTag) {
|
||||
return false;
|
||||
}
|
||||
stack || (stack = new Stack);
|
||||
return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
|
||||
return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
|
||||
}
|
||||
|
||||
export default baseIsEqualDeep;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import Stack from './_Stack.js';
|
||||
import baseIsEqual from './_baseIsEqual.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var UNORDERED_COMPARE_FLAG = 1,
|
||||
PARTIAL_COMPARE_FLAG = 2;
|
||||
/** Used to compose bitmasks for value comparisons. */
|
||||
var COMPARE_PARTIAL_FLAG = 1,
|
||||
COMPARE_UNORDERED_FLAG = 2;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isMatch` without support for iteratee shorthands.
|
||||
@@ -49,7 +49,7 @@ function baseIsMatch(object, source, matchData, customizer) {
|
||||
var result = customizer(objValue, srcValue, key, object, source, stack);
|
||||
}
|
||||
if (!(result === undefined
|
||||
? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
|
||||
? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
|
||||
: result
|
||||
)) {
|
||||
return false;
|
||||
|
||||
@@ -6,9 +6,9 @@ import isStrictComparable from './_isStrictComparable.js';
|
||||
import matchesStrictComparable from './_matchesStrictComparable.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var UNORDERED_COMPARE_FLAG = 1,
|
||||
PARTIAL_COMPARE_FLAG = 2;
|
||||
/** Used to compose bitmasks for value comparisons. */
|
||||
var COMPARE_PARTIAL_FLAG = 1,
|
||||
COMPARE_UNORDERED_FLAG = 2;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
|
||||
@@ -26,7 +26,7 @@ function baseMatchesProperty(path, srcValue) {
|
||||
var objValue = get(object, path);
|
||||
return (objValue === undefined && objValue === srcValue)
|
||||
? hasIn(object, path)
|
||||
: baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
|
||||
: baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import baseFor from './_baseFor.js';
|
||||
import baseMergeDeep from './_baseMergeDeep.js';
|
||||
import isObject from './isObject.js';
|
||||
import keysIn from './keysIn.js';
|
||||
import safeGet from './_safeGet.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.merge` without support for multiple sources.
|
||||
@@ -27,7 +28,7 @@ function baseMerge(object, source, srcIndex, customizer, stack) {
|
||||
}
|
||||
else {
|
||||
var newValue = customizer
|
||||
? customizer(object[key], srcValue, (key + ''), object, source, stack)
|
||||
? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
|
||||
: undefined;
|
||||
|
||||
if (newValue === undefined) {
|
||||
|
||||
@@ -11,6 +11,7 @@ import isFunction from './isFunction.js';
|
||||
import isObject from './isObject.js';
|
||||
import isPlainObject from './isPlainObject.js';
|
||||
import isTypedArray from './isTypedArray.js';
|
||||
import safeGet from './_safeGet.js';
|
||||
import toPlainObject from './toPlainObject.js';
|
||||
|
||||
/**
|
||||
@@ -29,8 +30,8 @@ import toPlainObject from './toPlainObject.js';
|
||||
* counterparts.
|
||||
*/
|
||||
function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
|
||||
var objValue = object[key],
|
||||
srcValue = source[key],
|
||||
var objValue = safeGet(object, key),
|
||||
srcValue = safeGet(source, key),
|
||||
stacked = stack.get(srcValue);
|
||||
|
||||
if (stacked) {
|
||||
|
||||
10
_basePick.js
10
_basePick.js
@@ -1,4 +1,5 @@
|
||||
import basePickBy from './_basePickBy.js';
|
||||
import hasIn from './hasIn.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.pick` without support for individual
|
||||
@@ -6,13 +7,12 @@ import basePickBy from './_basePickBy.js';
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The source object.
|
||||
* @param {string[]} props The property identifiers to pick.
|
||||
* @param {string[]} paths The property paths to pick.
|
||||
* @returns {Object} Returns the new object.
|
||||
*/
|
||||
function basePick(object, props) {
|
||||
object = Object(object);
|
||||
return basePickBy(object, props, function(value, key) {
|
||||
return key in object;
|
||||
function basePick(object, paths) {
|
||||
return basePickBy(object, paths, function(value, path) {
|
||||
return hasIn(object, path);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,25 +1,27 @@
|
||||
import baseAssignValue from './_baseAssignValue.js';
|
||||
import baseGet from './_baseGet.js';
|
||||
import baseSet from './_baseSet.js';
|
||||
import castPath from './_castPath.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.pickBy` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The source object.
|
||||
* @param {string[]} props The property identifiers to pick from.
|
||||
* @param {string[]} paths The property paths to pick.
|
||||
* @param {Function} predicate The function invoked per property.
|
||||
* @returns {Object} Returns the new object.
|
||||
*/
|
||||
function basePickBy(object, props, predicate) {
|
||||
function basePickBy(object, paths, predicate) {
|
||||
var index = -1,
|
||||
length = props.length,
|
||||
length = paths.length,
|
||||
result = {};
|
||||
|
||||
while (++index < length) {
|
||||
var key = props[index],
|
||||
value = object[key];
|
||||
var path = paths[index],
|
||||
value = baseGet(object, path);
|
||||
|
||||
if (predicate(value, key)) {
|
||||
baseAssignValue(result, key, value);
|
||||
if (predicate(value, path)) {
|
||||
baseSet(result, castPath(path, object), value);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
import castPath from './_castPath.js';
|
||||
import baseUnset from './_baseUnset.js';
|
||||
import isIndex from './_isIndex.js';
|
||||
import isKey from './_isKey.js';
|
||||
import last from './last.js';
|
||||
import parent from './_parent.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var arrayProto = Array.prototype;
|
||||
@@ -30,17 +26,8 @@ function basePullAt(array, indexes) {
|
||||
var previous = index;
|
||||
if (isIndex(index)) {
|
||||
splice.call(array, index, 1);
|
||||
}
|
||||
else if (!isKey(index, array)) {
|
||||
var path = castPath(index),
|
||||
object = parent(array, path);
|
||||
|
||||
if (object != null) {
|
||||
delete object[toKey(last(path))];
|
||||
}
|
||||
}
|
||||
else {
|
||||
delete array[toKey(index)];
|
||||
} else {
|
||||
baseUnset(array, index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
import assignValue from './_assignValue.js';
|
||||
import castPath from './_castPath.js';
|
||||
import isIndex from './_isIndex.js';
|
||||
import isKey from './_isKey.js';
|
||||
import isObject from './isObject.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
@@ -19,7 +18,7 @@ function baseSet(object, path, value, customizer) {
|
||||
if (!isObject(object)) {
|
||||
return object;
|
||||
}
|
||||
path = isKey(path, object) ? [path] : castPath(path);
|
||||
path = castPath(path, object);
|
||||
|
||||
var index = -1,
|
||||
length = path.length,
|
||||
|
||||
@@ -1,29 +1,20 @@
|
||||
import castPath from './_castPath.js';
|
||||
import isKey from './_isKey.js';
|
||||
import last from './last.js';
|
||||
import parent from './_parent.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.unset`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to modify.
|
||||
* @param {Array|string} path The path of the property to unset.
|
||||
* @param {Array|string} path The property path to unset.
|
||||
* @returns {boolean} Returns `true` if the property is deleted, else `false`.
|
||||
*/
|
||||
function baseUnset(object, path) {
|
||||
path = isKey(path, object) ? [path] : castPath(path);
|
||||
path = castPath(path, object);
|
||||
object = parent(object, path);
|
||||
|
||||
var key = toKey(last(path));
|
||||
return !(object != null && hasOwnProperty.call(object, key)) || delete object[key];
|
||||
return object == null || delete object[toKey(last(path))];
|
||||
}
|
||||
|
||||
export default baseUnset;
|
||||
|
||||
@@ -25,9 +25,8 @@ function baseXor(arrays, iteratee, comparator) {
|
||||
othIndex = -1;
|
||||
|
||||
while (++othIndex < length) {
|
||||
var othArray = arrays[othIndex];
|
||||
if (othArray !== array) {
|
||||
result[index] = baseDifference(result[index] || array, othArray, iteratee, comparator);
|
||||
if (othIndex != index) {
|
||||
result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
10
_castPath.js
10
_castPath.js
@@ -1,15 +1,21 @@
|
||||
import isArray from './isArray.js';
|
||||
import isKey from './_isKey.js';
|
||||
import stringToPath from './_stringToPath.js';
|
||||
import toString from './toString.js';
|
||||
|
||||
/**
|
||||
* Casts `value` to a path array if it's not one.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to inspect.
|
||||
* @param {Object} [object] The object to query keys on.
|
||||
* @returns {Array} Returns the cast property path array.
|
||||
*/
|
||||
function castPath(value) {
|
||||
return isArray(value) ? value : stringToPath(value);
|
||||
function castPath(value, object) {
|
||||
if (isArray(value)) {
|
||||
return value;
|
||||
}
|
||||
return isKey(value, object) ? [value] : stringToPath(toString(value));
|
||||
}
|
||||
|
||||
export default castPath;
|
||||
|
||||
@@ -2,6 +2,9 @@ import addMapEntry from './_addMapEntry.js';
|
||||
import arrayReduce from './_arrayReduce.js';
|
||||
import mapToArray from './_mapToArray.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1;
|
||||
|
||||
/**
|
||||
* Creates a clone of `map`.
|
||||
*
|
||||
@@ -12,7 +15,7 @@ import mapToArray from './_mapToArray.js';
|
||||
* @returns {Object} Returns the cloned map.
|
||||
*/
|
||||
function cloneMap(map, isDeep, cloneFunc) {
|
||||
var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
|
||||
var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);
|
||||
return arrayReduce(array, addMapEntry, new map.constructor);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,9 @@ import addSetEntry from './_addSetEntry.js';
|
||||
import arrayReduce from './_arrayReduce.js';
|
||||
import setToArray from './_setToArray.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1;
|
||||
|
||||
/**
|
||||
* Creates a clone of `set`.
|
||||
*
|
||||
@@ -12,7 +15,7 @@ import setToArray from './_setToArray.js';
|
||||
* @returns {Object} Returns the cloned set.
|
||||
*/
|
||||
function cloneSet(set, isDeep, cloneFunc) {
|
||||
var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
|
||||
var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);
|
||||
return arrayReduce(array, addSetEntry, new set.constructor);
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ import copyObject from './_copyObject.js';
|
||||
import getSymbols from './_getSymbols.js';
|
||||
|
||||
/**
|
||||
* Copies own symbol properties of `source` to `object`.
|
||||
* Copies own symbols of `source` to `object`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} source The object to copy symbols from.
|
||||
|
||||
16
_copySymbolsIn.js
Normal file
16
_copySymbolsIn.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import copyObject from './_copyObject.js';
|
||||
import getSymbolsIn from './_getSymbolsIn.js';
|
||||
|
||||
/**
|
||||
* 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);
|
||||
}
|
||||
|
||||
export default copySymbolsIn;
|
||||
@@ -2,7 +2,7 @@ import createCtor from './_createCtor.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/** 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`
|
||||
@@ -15,7 +15,7 @@ var BIND_FLAG = 1;
|
||||
* @returns {Function} Returns the new wrapped function.
|
||||
*/
|
||||
function createBind(func, bitmask, thisArg) {
|
||||
var isBind = bitmask & BIND_FLAG,
|
||||
var isBind = bitmask & WRAP_BIND_FLAG,
|
||||
Ctor = createCtor(func);
|
||||
|
||||
function wrapper() {
|
||||
|
||||
@@ -5,17 +5,14 @@ import getFuncName from './_getFuncName.js';
|
||||
import isArray from './isArray.js';
|
||||
import isLaziable from './_isLaziable.js';
|
||||
|
||||
/** Used as the size to enable large array optimizations. */
|
||||
var LARGE_ARRAY_SIZE = 200;
|
||||
|
||||
/** Error message constants. */
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var CURRY_FLAG = 8,
|
||||
PARTIAL_FLAG = 32,
|
||||
ARY_FLAG = 128,
|
||||
REARG_FLAG = 256;
|
||||
var WRAP_CURRY_FLAG = 8,
|
||||
WRAP_PARTIAL_FLAG = 32,
|
||||
WRAP_ARY_FLAG = 128,
|
||||
WRAP_REARG_FLAG = 256;
|
||||
|
||||
/**
|
||||
* Creates a `_.flow` or `_.flowRight` function.
|
||||
@@ -50,7 +47,7 @@ function createFlow(fromRight) {
|
||||
data = funcName == 'wrapper' ? getData(func) : undefined;
|
||||
|
||||
if (data && isLaziable(data[0]) &&
|
||||
data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) &&
|
||||
data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
|
||||
!data[4].length && data[9] == 1
|
||||
) {
|
||||
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
|
||||
@@ -64,8 +61,7 @@ function createFlow(fromRight) {
|
||||
var args = arguments,
|
||||
value = args[0];
|
||||
|
||||
if (wrapper && args.length == 1 &&
|
||||
isArray(value) && value.length >= LARGE_ARRAY_SIZE) {
|
||||
if (wrapper && args.length == 1 && isArray(value)) {
|
||||
return wrapper.plant(value).value();
|
||||
}
|
||||
var index = 0,
|
||||
|
||||
@@ -9,12 +9,12 @@ import replaceHolders from './_replaceHolders.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
BIND_KEY_FLAG = 2,
|
||||
CURRY_FLAG = 8,
|
||||
CURRY_RIGHT_FLAG = 16,
|
||||
ARY_FLAG = 128,
|
||||
FLIP_FLAG = 512;
|
||||
var WRAP_BIND_FLAG = 1,
|
||||
WRAP_BIND_KEY_FLAG = 2,
|
||||
WRAP_CURRY_FLAG = 8,
|
||||
WRAP_CURRY_RIGHT_FLAG = 16,
|
||||
WRAP_ARY_FLAG = 128,
|
||||
WRAP_FLIP_FLAG = 512;
|
||||
|
||||
/**
|
||||
* Creates a function that wraps `func` to invoke it with optional `this`
|
||||
@@ -36,11 +36,11 @@ var BIND_FLAG = 1,
|
||||
* @returns {Function} Returns the new wrapped function.
|
||||
*/
|
||||
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
|
||||
var isAry = bitmask & ARY_FLAG,
|
||||
isBind = bitmask & BIND_FLAG,
|
||||
isBindKey = bitmask & BIND_KEY_FLAG,
|
||||
isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),
|
||||
isFlip = bitmask & FLIP_FLAG,
|
||||
var isAry = bitmask & WRAP_ARY_FLAG,
|
||||
isBind = bitmask & WRAP_BIND_FLAG,
|
||||
isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
|
||||
isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
|
||||
isFlip = bitmask & WRAP_FLIP_FLAG,
|
||||
Ctor = isBindKey ? undefined : createCtor(func);
|
||||
|
||||
function wrapper() {
|
||||
|
||||
@@ -3,7 +3,7 @@ import createCtor from './_createCtor.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/** 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
|
||||
@@ -18,7 +18,7 @@ var BIND_FLAG = 1;
|
||||
* @returns {Function} Returns the new wrapped function.
|
||||
*/
|
||||
function createPartial(func, bitmask, thisArg, partials) {
|
||||
var isBind = bitmask & BIND_FLAG,
|
||||
var isBind = bitmask & WRAP_BIND_FLAG,
|
||||
Ctor = createCtor(func);
|
||||
|
||||
function wrapper() {
|
||||
|
||||
@@ -3,12 +3,12 @@ import setData from './_setData.js';
|
||||
import setWrapToString from './_setWrapToString.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
BIND_KEY_FLAG = 2,
|
||||
CURRY_BOUND_FLAG = 4,
|
||||
CURRY_FLAG = 8,
|
||||
PARTIAL_FLAG = 32,
|
||||
PARTIAL_RIGHT_FLAG = 64;
|
||||
var WRAP_BIND_FLAG = 1,
|
||||
WRAP_BIND_KEY_FLAG = 2,
|
||||
WRAP_CURRY_BOUND_FLAG = 4,
|
||||
WRAP_CURRY_FLAG = 8,
|
||||
WRAP_PARTIAL_FLAG = 32,
|
||||
WRAP_PARTIAL_RIGHT_FLAG = 64;
|
||||
|
||||
/**
|
||||
* Creates a function that wraps `func` to continue currying.
|
||||
@@ -28,17 +28,17 @@ var BIND_FLAG = 1,
|
||||
* @returns {Function} Returns the new wrapped function.
|
||||
*/
|
||||
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
|
||||
var isCurry = bitmask & CURRY_FLAG,
|
||||
var isCurry = bitmask & WRAP_CURRY_FLAG,
|
||||
newHolders = isCurry ? holders : undefined,
|
||||
newHoldersRight = isCurry ? undefined : holders,
|
||||
newPartials = isCurry ? partials : undefined,
|
||||
newPartialsRight = isCurry ? undefined : partials;
|
||||
|
||||
bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
|
||||
bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
|
||||
bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
|
||||
bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
|
||||
|
||||
if (!(bitmask & CURRY_BOUND_FLAG)) {
|
||||
bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
|
||||
if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
|
||||
bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
|
||||
}
|
||||
var newData = [
|
||||
func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
|
||||
|
||||
@@ -16,7 +16,7 @@ function createRound(methodName) {
|
||||
var func = Math[methodName];
|
||||
return function(number, precision) {
|
||||
number = toNumber(number);
|
||||
precision = nativeMin(toInteger(precision), 292);
|
||||
precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
|
||||
if (precision) {
|
||||
// Shift with exponential notation to avoid floating-point issues.
|
||||
// See [MDN](https://mdn.io/round#Examples) for more details.
|
||||
|
||||
@@ -13,12 +13,12 @@ import toInteger from './toInteger.js';
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
BIND_KEY_FLAG = 2,
|
||||
CURRY_FLAG = 8,
|
||||
CURRY_RIGHT_FLAG = 16,
|
||||
PARTIAL_FLAG = 32,
|
||||
PARTIAL_RIGHT_FLAG = 64;
|
||||
var WRAP_BIND_FLAG = 1,
|
||||
WRAP_BIND_KEY_FLAG = 2,
|
||||
WRAP_CURRY_FLAG = 8,
|
||||
WRAP_CURRY_RIGHT_FLAG = 16,
|
||||
WRAP_PARTIAL_FLAG = 32,
|
||||
WRAP_PARTIAL_RIGHT_FLAG = 64;
|
||||
|
||||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMax = Math.max;
|
||||
@@ -30,17 +30,16 @@ var nativeMax = Math.max;
|
||||
* @private
|
||||
* @param {Function|string} func The function or method name to wrap.
|
||||
* @param {number} bitmask The bitmask flags.
|
||||
* The bitmask may be composed of the following flags:
|
||||
* 1 - `_.bind`
|
||||
* 2 - `_.bindKey`
|
||||
* 4 - `_.curry` or `_.curryRight` of a bound function
|
||||
* 8 - `_.curry`
|
||||
* 16 - `_.curryRight`
|
||||
* 32 - `_.partial`
|
||||
* 64 - `_.partialRight`
|
||||
* 128 - `_.rearg`
|
||||
* 256 - `_.ary`
|
||||
* 512 - `_.flip`
|
||||
* 1 - `_.bind`
|
||||
* 2 - `_.bindKey`
|
||||
* 4 - `_.curry` or `_.curryRight` of a bound function
|
||||
* 8 - `_.curry`
|
||||
* 16 - `_.curryRight`
|
||||
* 32 - `_.partial`
|
||||
* 64 - `_.partialRight`
|
||||
* 128 - `_.rearg`
|
||||
* 256 - `_.ary`
|
||||
* 512 - `_.flip`
|
||||
* @param {*} [thisArg] The `this` binding of `func`.
|
||||
* @param {Array} [partials] The arguments to be partially applied.
|
||||
* @param {Array} [holders] The `partials` placeholder indexes.
|
||||
@@ -50,20 +49,20 @@ var nativeMax = Math.max;
|
||||
* @returns {Function} Returns the new wrapped function.
|
||||
*/
|
||||
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
|
||||
var isBindKey = bitmask & BIND_KEY_FLAG;
|
||||
var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
|
||||
if (!isBindKey && typeof func != 'function') {
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
var length = partials ? partials.length : 0;
|
||||
if (!length) {
|
||||
bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
|
||||
bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
|
||||
partials = holders = undefined;
|
||||
}
|
||||
ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
|
||||
arity = arity === undefined ? arity : toInteger(arity);
|
||||
length -= holders ? holders.length : 0;
|
||||
|
||||
if (bitmask & PARTIAL_RIGHT_FLAG) {
|
||||
if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
|
||||
var partialsRight = partials,
|
||||
holdersRight = holders;
|
||||
|
||||
@@ -84,18 +83,18 @@ function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arit
|
||||
thisArg = newData[2];
|
||||
partials = newData[3];
|
||||
holders = newData[4];
|
||||
arity = newData[9] = newData[9] == null
|
||||
arity = newData[9] = newData[9] === undefined
|
||||
? (isBindKey ? 0 : func.length)
|
||||
: nativeMax(newData[9] - length, 0);
|
||||
|
||||
if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {
|
||||
bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);
|
||||
if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
|
||||
bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
|
||||
}
|
||||
if (!bitmask || bitmask == BIND_FLAG) {
|
||||
if (!bitmask || bitmask == WRAP_BIND_FLAG) {
|
||||
var result = createBind(func, bitmask, thisArg);
|
||||
} else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {
|
||||
} else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
|
||||
result = createCurry(func, bitmask, arity);
|
||||
} else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {
|
||||
} else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
|
||||
result = createPartial(func, bitmask, thisArg, partials);
|
||||
} else {
|
||||
result = createHybrid.apply(undefined, newData);
|
||||
|
||||
@@ -7,7 +7,9 @@ var objectProto = Object.prototype;
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Used by `_.defaults` to customize its `_.assignIn` use.
|
||||
* Used by `_.defaults` to customize its `_.assignIn` use to assign properties
|
||||
* of source objects to the destination object for all destination properties
|
||||
* that resolve to `undefined`.
|
||||
*
|
||||
* @private
|
||||
* @param {*} objValue The destination value.
|
||||
@@ -16,7 +18,7 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
* @param {Object} object The parent object of `objValue`.
|
||||
* @returns {*} Returns the value to assign.
|
||||
*/
|
||||
function assignInDefaults(objValue, srcValue, key, object) {
|
||||
function customDefaultsAssignIn(objValue, srcValue, key, object) {
|
||||
if (objValue === undefined ||
|
||||
(eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
||||
return srcValue;
|
||||
@@ -24,4 +26,4 @@ function assignInDefaults(objValue, srcValue, key, object) {
|
||||
return objValue;
|
||||
}
|
||||
|
||||
export default assignInDefaults;
|
||||
export default customDefaultsAssignIn;
|
||||
@@ -2,7 +2,8 @@ import baseMerge from './_baseMerge.js';
|
||||
import isObject from './isObject.js';
|
||||
|
||||
/**
|
||||
* Used by `_.defaultsDeep` to customize its `_.merge` use.
|
||||
* Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
|
||||
* objects into destination objects that are passed thru.
|
||||
*
|
||||
* @private
|
||||
* @param {*} objValue The destination value.
|
||||
@@ -14,14 +15,14 @@ import isObject from './isObject.js';
|
||||
* counterparts.
|
||||
* @returns {*} Returns the value to assign.
|
||||
*/
|
||||
function mergeDefaults(objValue, srcValue, key, object, source, stack) {
|
||||
function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
|
||||
if (isObject(objValue) && isObject(srcValue)) {
|
||||
// Recursively merge objects and arrays (susceptible to call stack limits).
|
||||
stack.set(srcValue, objValue);
|
||||
baseMerge(objValue, srcValue, undefined, mergeDefaults, stack);
|
||||
baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
|
||||
stack['delete'](srcValue);
|
||||
}
|
||||
return objValue;
|
||||
}
|
||||
|
||||
export default mergeDefaults;
|
||||
export default customDefaultsMerge;
|
||||
16
_customOmitClone.js
Normal file
16
_customOmitClone.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import isPlainObject from './isPlainObject.js';
|
||||
|
||||
/**
|
||||
* Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
|
||||
* objects.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to inspect.
|
||||
* @param {string} key The key of the property to inspect.
|
||||
* @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
|
||||
*/
|
||||
function customOmitClone(value) {
|
||||
return isPlainObject(value) ? undefined : value;
|
||||
}
|
||||
|
||||
export default customOmitClone;
|
||||
@@ -2,9 +2,9 @@ import SetCache from './_SetCache.js';
|
||||
import arraySome from './_arraySome.js';
|
||||
import cacheHas from './_cacheHas.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var UNORDERED_COMPARE_FLAG = 1,
|
||||
PARTIAL_COMPARE_FLAG = 2;
|
||||
/** Used to compose bitmasks for value comparisons. */
|
||||
var COMPARE_PARTIAL_FLAG = 1,
|
||||
COMPARE_UNORDERED_FLAG = 2;
|
||||
|
||||
/**
|
||||
* A specialized version of `baseIsEqualDeep` for arrays with support for
|
||||
@@ -13,15 +13,14 @@ var UNORDERED_COMPARE_FLAG = 1,
|
||||
* @private
|
||||
* @param {Array} array The array to compare.
|
||||
* @param {Array} other The other array to compare.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||||
* @param {Function} customizer The function to customize comparisons.
|
||||
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
|
||||
* for more details.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {Object} stack Tracks traversed `array` and `other` objects.
|
||||
* @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
|
||||
*/
|
||||
function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
|
||||
var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
|
||||
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
|
||||
var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
|
||||
arrLength = array.length,
|
||||
othLength = other.length;
|
||||
|
||||
@@ -35,7 +34,7 @@ function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
|
||||
}
|
||||
var index = -1,
|
||||
result = true,
|
||||
seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
|
||||
seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
|
||||
|
||||
stack.set(array, other);
|
||||
stack.set(other, array);
|
||||
@@ -61,7 +60,7 @@ function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
|
||||
if (seen) {
|
||||
if (!arraySome(other, function(othValue, othIndex) {
|
||||
if (!cacheHas(seen, othIndex) &&
|
||||
(arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
|
||||
(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
|
||||
return seen.push(othIndex);
|
||||
}
|
||||
})) {
|
||||
@@ -70,7 +69,7 @@ function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
|
||||
}
|
||||
} else if (!(
|
||||
arrValue === othValue ||
|
||||
equalFunc(arrValue, othValue, customizer, bitmask, stack)
|
||||
equalFunc(arrValue, othValue, bitmask, customizer, stack)
|
||||
)) {
|
||||
result = false;
|
||||
break;
|
||||
|
||||
@@ -5,9 +5,9 @@ import equalArrays from './_equalArrays.js';
|
||||
import mapToArray from './_mapToArray.js';
|
||||
import setToArray from './_setToArray.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var UNORDERED_COMPARE_FLAG = 1,
|
||||
PARTIAL_COMPARE_FLAG = 2;
|
||||
/** Used to compose bitmasks for value comparisons. */
|
||||
var COMPARE_PARTIAL_FLAG = 1,
|
||||
COMPARE_UNORDERED_FLAG = 2;
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var boolTag = '[object Boolean]',
|
||||
@@ -38,14 +38,13 @@ var symbolProto = Symbol ? Symbol.prototype : undefined,
|
||||
* @param {Object} object The object to compare.
|
||||
* @param {Object} other The other object to compare.
|
||||
* @param {string} tag The `toStringTag` of the objects to compare.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||||
* @param {Function} customizer The function to customize comparisons.
|
||||
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
|
||||
* for more details.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {Object} stack Tracks traversed `object` and `other` objects.
|
||||
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
||||
*/
|
||||
function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
|
||||
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
|
||||
switch (tag) {
|
||||
case dataViewTag:
|
||||
if ((object.byteLength != other.byteLength) ||
|
||||
@@ -83,7 +82,7 @@ function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
|
||||
var convert = mapToArray;
|
||||
|
||||
case setTag:
|
||||
var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
|
||||
var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
|
||||
convert || (convert = setToArray);
|
||||
|
||||
if (object.size != other.size && !isPartial) {
|
||||
@@ -94,11 +93,11 @@ function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
|
||||
if (stacked) {
|
||||
return stacked == other;
|
||||
}
|
||||
bitmask |= UNORDERED_COMPARE_FLAG;
|
||||
bitmask |= COMPARE_UNORDERED_FLAG;
|
||||
|
||||
// Recursively compare objects (susceptible to call stack limits).
|
||||
stack.set(object, other);
|
||||
var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
|
||||
var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
|
||||
stack['delete'](object);
|
||||
return result;
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import keys from './keys.js';
|
||||
import getAllKeys from './_getAllKeys.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var PARTIAL_COMPARE_FLAG = 2;
|
||||
/** Used to compose bitmasks for value comparisons. */
|
||||
var COMPARE_PARTIAL_FLAG = 1;
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
@@ -16,18 +16,17 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
* @private
|
||||
* @param {Object} object The object to compare.
|
||||
* @param {Object} other The other object to compare.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
|
||||
* @param {Function} customizer The function to customize comparisons.
|
||||
* @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
|
||||
* for more details.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {Object} stack Tracks traversed `object` and `other` objects.
|
||||
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
||||
*/
|
||||
function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
|
||||
var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
|
||||
objProps = keys(object),
|
||||
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
|
||||
var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
|
||||
objProps = getAllKeys(object),
|
||||
objLength = objProps.length,
|
||||
othProps = keys(other),
|
||||
othProps = getAllKeys(other),
|
||||
othLength = othProps.length;
|
||||
|
||||
if (objLength != othLength && !isPartial) {
|
||||
@@ -62,7 +61,7 @@ function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
|
||||
}
|
||||
// Recursively compare objects (susceptible to call stack limits).
|
||||
if (!(compared === undefined
|
||||
? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
|
||||
? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
|
||||
: compared
|
||||
)) {
|
||||
result = false;
|
||||
|
||||
@@ -1,16 +1,30 @@
|
||||
import overArg from './_overArg.js';
|
||||
import arrayFilter from './_arrayFilter.js';
|
||||
import stubArray from './stubArray.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Built-in value references. */
|
||||
var propertyIsEnumerable = objectProto.propertyIsEnumerable;
|
||||
|
||||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||||
var nativeGetSymbols = Object.getOwnPropertySymbols;
|
||||
|
||||
/**
|
||||
* Creates an array of the own enumerable symbol properties of `object`.
|
||||
* Creates an array of the own enumerable symbols of `object`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @returns {Array} Returns the array of symbols.
|
||||
*/
|
||||
var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
|
||||
var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
|
||||
if (object == null) {
|
||||
return [];
|
||||
}
|
||||
object = Object(object);
|
||||
return arrayFilter(nativeGetSymbols(object), function(symbol) {
|
||||
return propertyIsEnumerable.call(object, symbol);
|
||||
});
|
||||
};
|
||||
|
||||
export default getSymbols;
|
||||
|
||||
@@ -7,8 +7,7 @@ import stubArray from './stubArray.js';
|
||||
var nativeGetSymbols = Object.getOwnPropertySymbols;
|
||||
|
||||
/**
|
||||
* Creates an array of the own and inherited enumerable symbol properties
|
||||
* of `object`.
|
||||
* Creates an array of the own and inherited enumerable symbols of `object`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
|
||||
@@ -2,7 +2,6 @@ import castPath from './_castPath.js';
|
||||
import isArguments from './isArguments.js';
|
||||
import isArray from './isArray.js';
|
||||
import isIndex from './_isIndex.js';
|
||||
import isKey from './_isKey.js';
|
||||
import isLength from './isLength.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
@@ -16,7 +15,7 @@ import toKey from './_toKey.js';
|
||||
* @returns {boolean} Returns `true` if `path` exists, else `false`.
|
||||
*/
|
||||
function hasPath(object, path, hasFunc) {
|
||||
path = isKey(path, object) ? [path] : castPath(path);
|
||||
path = castPath(path, object);
|
||||
|
||||
var index = -1,
|
||||
length = path.length,
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
/** Used to compose unicode character classes. */
|
||||
var rsAstralRange = '\\ud800-\\udfff',
|
||||
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20f0',
|
||||
rsComboMarksRange = '\\u0300-\\u036f',
|
||||
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20ff',
|
||||
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
|
||||
rsVarRange = '\\ufe0e\\ufe0f';
|
||||
|
||||
/** Used to compose unicode capture groups. */
|
||||
var rsZWJ = '\\u200d';
|
||||
|
||||
/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
|
||||
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
|
||||
var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
|
||||
|
||||
/**
|
||||
* Checks if `string` contains Unicode symbols.
|
||||
|
||||
@@ -17,7 +17,7 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
*/
|
||||
function hashHas(key) {
|
||||
var data = this.__data__;
|
||||
return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
|
||||
return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
|
||||
}
|
||||
|
||||
export default hashHas;
|
||||
|
||||
@@ -13,7 +13,7 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
*/
|
||||
function initCloneArray(array) {
|
||||
var length = array.length,
|
||||
result = array.constructor(length);
|
||||
result = new array.constructor(length);
|
||||
|
||||
// Add properties assigned by `RegExp#exec`.
|
||||
if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
import cloneArrayBuffer from './_cloneArrayBuffer.js';
|
||||
import cloneDataView from './_cloneDataView.js';
|
||||
import cloneMap from './_cloneMap.js';
|
||||
import cloneRegExp from './_cloneRegExp.js';
|
||||
import cloneSet from './_cloneSet.js';
|
||||
import cloneSymbol from './_cloneSymbol.js';
|
||||
import cloneTypedArray from './_cloneTypedArray.js';
|
||||
|
||||
@@ -32,16 +30,15 @@ var arrayBufferTag = '[object ArrayBuffer]',
|
||||
* Initializes an object clone based on its `toStringTag`.
|
||||
*
|
||||
* **Note:** This function only supports cloning values with tags of
|
||||
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
|
||||
* `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to clone.
|
||||
* @param {string} tag The `toStringTag` of the object to clone.
|
||||
* @param {Function} cloneFunc The function to clone values.
|
||||
* @param {boolean} [isDeep] Specify a deep clone.
|
||||
* @returns {Object} Returns the initialized clone.
|
||||
*/
|
||||
function initCloneByTag(object, tag, cloneFunc, isDeep) {
|
||||
function initCloneByTag(object, tag, isDeep) {
|
||||
var Ctor = object.constructor;
|
||||
switch (tag) {
|
||||
case arrayBufferTag:
|
||||
@@ -60,7 +57,7 @@ function initCloneByTag(object, tag, cloneFunc, isDeep) {
|
||||
return cloneTypedArray(object, isDeep);
|
||||
|
||||
case mapTag:
|
||||
return cloneMap(object, isDeep, cloneFunc);
|
||||
return new Ctor;
|
||||
|
||||
case numberTag:
|
||||
case stringTag:
|
||||
@@ -70,7 +67,7 @@ function initCloneByTag(object, tag, cloneFunc, isDeep) {
|
||||
return cloneRegExp(object);
|
||||
|
||||
case setTag:
|
||||
return cloneSet(object, isDeep, cloneFunc);
|
||||
return new Ctor;
|
||||
|
||||
case symbolTag:
|
||||
return cloneSymbol(object);
|
||||
|
||||
@@ -13,10 +13,13 @@ var reIsUint = /^(?:0|[1-9]\d*)$/;
|
||||
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
|
||||
*/
|
||||
function isIndex(value, length) {
|
||||
var type = typeof value;
|
||||
length = length == null ? MAX_SAFE_INTEGER : length;
|
||||
|
||||
return !!length &&
|
||||
(typeof value == 'number' || reIsUint.test(value)) &&
|
||||
(value > -1 && value % 1 == 0 && value < length);
|
||||
(type == 'number' ||
|
||||
(type != 'symbol' && reIsUint.test(value))) &&
|
||||
(value > -1 && value % 1 == 0 && value < length);
|
||||
}
|
||||
|
||||
export default isIndex;
|
||||
|
||||
@@ -2,9 +2,6 @@ import baseWrapperValue from './_baseWrapperValue.js';
|
||||
import getView from './_getView.js';
|
||||
import isArray from './isArray.js';
|
||||
|
||||
/** Used as the size to enable large array optimizations. */
|
||||
var LARGE_ARRAY_SIZE = 200;
|
||||
|
||||
/** Used to indicate the type of lazy iteratees. */
|
||||
var LAZY_FILTER_FLAG = 1,
|
||||
LAZY_MAP_FLAG = 2;
|
||||
@@ -36,8 +33,7 @@ function lazyValue() {
|
||||
resIndex = 0,
|
||||
takeCount = nativeMin(length, this.__takeCount__);
|
||||
|
||||
if (!isArr || arrLength < LARGE_ARRAY_SIZE ||
|
||||
(arrLength == length && takeCount == length)) {
|
||||
if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
|
||||
return baseWrapperValue(array, this.__actions__);
|
||||
}
|
||||
var result = [];
|
||||
|
||||
@@ -6,12 +6,12 @@ import replaceHolders from './_replaceHolders.js';
|
||||
var PLACEHOLDER = '__lodash_placeholder__';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
BIND_KEY_FLAG = 2,
|
||||
CURRY_BOUND_FLAG = 4,
|
||||
CURRY_FLAG = 8,
|
||||
ARY_FLAG = 128,
|
||||
REARG_FLAG = 256;
|
||||
var WRAP_BIND_FLAG = 1,
|
||||
WRAP_BIND_KEY_FLAG = 2,
|
||||
WRAP_CURRY_BOUND_FLAG = 4,
|
||||
WRAP_CURRY_FLAG = 8,
|
||||
WRAP_ARY_FLAG = 128,
|
||||
WRAP_REARG_FLAG = 256;
|
||||
|
||||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMin = Math.min;
|
||||
@@ -36,22 +36,22 @@ function mergeData(data, source) {
|
||||
var bitmask = data[1],
|
||||
srcBitmask = source[1],
|
||||
newBitmask = bitmask | srcBitmask,
|
||||
isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG);
|
||||
isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
|
||||
|
||||
var isCombo =
|
||||
((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) ||
|
||||
((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) ||
|
||||
((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG));
|
||||
((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
|
||||
((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
|
||||
((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
|
||||
|
||||
// Exit early if metadata can't be merged.
|
||||
if (!(isCommon || isCombo)) {
|
||||
return data;
|
||||
}
|
||||
// Use source `thisArg` if available.
|
||||
if (srcBitmask & BIND_FLAG) {
|
||||
if (srcBitmask & WRAP_BIND_FLAG) {
|
||||
data[2] = source[2];
|
||||
// Set when currying a bound function.
|
||||
newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG;
|
||||
newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
|
||||
}
|
||||
// Compose partial arguments.
|
||||
var value = source[3];
|
||||
@@ -73,7 +73,7 @@ function mergeData(data, source) {
|
||||
data[7] = value;
|
||||
}
|
||||
// Use source `ary` if it's smaller.
|
||||
if (srcBitmask & ARY_FLAG) {
|
||||
if (srcBitmask & WRAP_ARY_FLAG) {
|
||||
data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
|
||||
}
|
||||
// Use source `arity` if one is not provided.
|
||||
|
||||
10
_nodeUtil.js
10
_nodeUtil.js
@@ -15,7 +15,15 @@ var freeProcess = moduleExports && freeGlobal.process;
|
||||
/** Used to access faster Node.js helpers. */
|
||||
var nodeUtil = (function() {
|
||||
try {
|
||||
return freeProcess && freeProcess.binding('util');
|
||||
// Use `util.types` for Node.js 10+.
|
||||
var types = freeModule && freeModule.require && freeModule.require('util').types;
|
||||
|
||||
if (types) {
|
||||
return types;
|
||||
}
|
||||
|
||||
// Legacy `process.binding('util')` for Node.js < 10.
|
||||
return freeProcess && freeProcess.binding && freeProcess.binding('util');
|
||||
} catch (e) {}
|
||||
}());
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ import baseSlice from './_baseSlice.js';
|
||||
* @returns {*} Returns the parent value.
|
||||
*/
|
||||
function parent(object, path) {
|
||||
return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
|
||||
return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
|
||||
}
|
||||
|
||||
export default parent;
|
||||
|
||||
15
_safeGet.js
Normal file
15
_safeGet.js
Normal file
@@ -0,0 +1,15 @@
|
||||
/**
|
||||
* Gets the value at `key`, unless `key` is "__proto__".
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @param {string} key The key of the property to get.
|
||||
* @returns {*} Returns the property value.
|
||||
*/
|
||||
function safeGet(object, key) {
|
||||
return key == '__proto__'
|
||||
? undefined
|
||||
: object[key];
|
||||
}
|
||||
|
||||
export default safeGet;
|
||||
@@ -1,9 +1,7 @@
|
||||
import memoizeCapped from './_memoizeCapped.js';
|
||||
import toString from './toString.js';
|
||||
|
||||
/** Used to match property names within property paths. */
|
||||
var reLeadingDot = /^\./,
|
||||
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
|
||||
var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
|
||||
|
||||
/** Used to match backslashes in property paths. */
|
||||
var reEscapeChar = /\\(\\)?/g;
|
||||
@@ -16,14 +14,12 @@ var reEscapeChar = /\\(\\)?/g;
|
||||
* @returns {Array} Returns the property path array.
|
||||
*/
|
||||
var stringToPath = memoizeCapped(function(string) {
|
||||
string = toString(string);
|
||||
|
||||
var result = [];
|
||||
if (reLeadingDot.test(string)) {
|
||||
if (string.charCodeAt(0) === 46 /* . */) {
|
||||
result.push('');
|
||||
}
|
||||
string.replace(rePropName, function(match, number, quote, string) {
|
||||
result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
|
||||
string.replace(rePropName, function(match, number, quote, subString) {
|
||||
result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
|
||||
});
|
||||
return result;
|
||||
});
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
/** Used to compose unicode character classes. */
|
||||
var rsAstralRange = '\\ud800-\\udfff',
|
||||
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20f0',
|
||||
rsComboMarksRange = '\\u0300-\\u036f',
|
||||
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20ff',
|
||||
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
|
||||
rsVarRange = '\\ufe0e\\ufe0f';
|
||||
|
||||
/** Used to compose unicode capture groups. */
|
||||
var rsAstral = '[' + rsAstralRange + ']',
|
||||
rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
|
||||
rsCombo = '[' + rsComboRange + ']',
|
||||
rsFitz = '\\ud83c[\\udffb-\\udfff]',
|
||||
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
|
||||
rsNonAstral = '[^' + rsAstralRange + ']',
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
/** Used to compose unicode character classes. */
|
||||
var rsAstralRange = '\\ud800-\\udfff',
|
||||
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20f0',
|
||||
rsComboMarksRange = '\\u0300-\\u036f',
|
||||
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20ff',
|
||||
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
|
||||
rsVarRange = '\\ufe0e\\ufe0f';
|
||||
|
||||
/** Used to compose unicode capture groups. */
|
||||
var rsAstral = '[' + rsAstralRange + ']',
|
||||
rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
|
||||
rsCombo = '[' + rsComboRange + ']',
|
||||
rsFitz = '\\ud83c[\\udffb-\\udfff]',
|
||||
rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
|
||||
rsNonAstral = '[^' + rsAstralRange + ']',
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/** Used to compose unicode character classes. */
|
||||
var rsAstralRange = '\\ud800-\\udfff',
|
||||
rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20f0',
|
||||
rsComboMarksRange = '\\u0300-\\u036f',
|
||||
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20ff',
|
||||
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
|
||||
rsDingbatRange = '\\u2700-\\u27bf',
|
||||
rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
|
||||
rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
|
||||
@@ -15,7 +17,7 @@ var rsAstralRange = '\\ud800-\\udfff',
|
||||
/** Used to compose unicode capture groups. */
|
||||
var rsApos = "['\u2019]",
|
||||
rsBreak = '[' + rsBreakRange + ']',
|
||||
rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
|
||||
rsCombo = '[' + rsComboRange + ']',
|
||||
rsDigits = '\\d+',
|
||||
rsDingbat = '[' + rsDingbatRange + ']',
|
||||
rsLower = '[' + rsLowerRange + ']',
|
||||
@@ -36,8 +38,8 @@ var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
|
||||
reOptMod = rsModifier + '?',
|
||||
rsOptVar = '[' + rsVarRange + ']?',
|
||||
rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
|
||||
rsOrdLower = '\\d*(?:(?:1st|2nd|3rd|(?![123])\\dth)\\b)',
|
||||
rsOrdUpper = '\\d*(?:(?:1ST|2ND|3RD|(?![123])\\dTH)\\b)',
|
||||
rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
|
||||
rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
|
||||
rsSeq = rsOptVar + reOptMod + rsOptJoin,
|
||||
rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;
|
||||
|
||||
|
||||
@@ -2,27 +2,27 @@ import arrayEach from './_arrayEach.js';
|
||||
import arrayIncludes from './_arrayIncludes.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
BIND_KEY_FLAG = 2,
|
||||
CURRY_FLAG = 8,
|
||||
CURRY_RIGHT_FLAG = 16,
|
||||
PARTIAL_FLAG = 32,
|
||||
PARTIAL_RIGHT_FLAG = 64,
|
||||
ARY_FLAG = 128,
|
||||
REARG_FLAG = 256,
|
||||
FLIP_FLAG = 512;
|
||||
var WRAP_BIND_FLAG = 1,
|
||||
WRAP_BIND_KEY_FLAG = 2,
|
||||
WRAP_CURRY_FLAG = 8,
|
||||
WRAP_CURRY_RIGHT_FLAG = 16,
|
||||
WRAP_PARTIAL_FLAG = 32,
|
||||
WRAP_PARTIAL_RIGHT_FLAG = 64,
|
||||
WRAP_ARY_FLAG = 128,
|
||||
WRAP_REARG_FLAG = 256,
|
||||
WRAP_FLIP_FLAG = 512;
|
||||
|
||||
/** Used to associate wrap methods with their bit flags. */
|
||||
var wrapFlags = [
|
||||
['ary', ARY_FLAG],
|
||||
['bind', BIND_FLAG],
|
||||
['bindKey', BIND_KEY_FLAG],
|
||||
['curry', CURRY_FLAG],
|
||||
['curryRight', CURRY_RIGHT_FLAG],
|
||||
['flip', FLIP_FLAG],
|
||||
['partial', PARTIAL_FLAG],
|
||||
['partialRight', PARTIAL_RIGHT_FLAG],
|
||||
['rearg', REARG_FLAG]
|
||||
['ary', WRAP_ARY_FLAG],
|
||||
['bind', WRAP_BIND_FLAG],
|
||||
['bindKey', WRAP_BIND_KEY_FLAG],
|
||||
['curry', WRAP_CURRY_FLAG],
|
||||
['curryRight', WRAP_CURRY_RIGHT_FLAG],
|
||||
['flip', WRAP_FLIP_FLAG],
|
||||
['partial', WRAP_PARTIAL_FLAG],
|
||||
['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
|
||||
['rearg', WRAP_REARG_FLAG]
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
4
ary.js
4
ary.js
@@ -1,7 +1,7 @@
|
||||
import createWrap from './_createWrap.js';
|
||||
|
||||
/** 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,
|
||||
@@ -23,7 +23,7 @@ var ARY_FLAG = 128;
|
||||
function ary(func, n, guard) {
|
||||
n = guard ? undefined : n;
|
||||
n = (func && n == null) ? func.length : n;
|
||||
return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
|
||||
return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
|
||||
}
|
||||
|
||||
export default ary;
|
||||
|
||||
2
at.js
2
at.js
@@ -9,7 +9,7 @@ import flatRest from './_flatRest.js';
|
||||
* @since 1.0.0
|
||||
* @category Object
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {...(string|string[])} [paths] The property paths of elements to pick.
|
||||
* @param {...(string|string[])} [paths] The property paths to pick.
|
||||
* @returns {Array} Returns the picked values.
|
||||
* @example
|
||||
*
|
||||
|
||||
8
bind.js
8
bind.js
@@ -4,8 +4,8 @@ import getHolder from './_getHolder.js';
|
||||
import replaceHolders from './_replaceHolders.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
PARTIAL_FLAG = 32;
|
||||
var WRAP_BIND_FLAG = 1,
|
||||
WRAP_PARTIAL_FLAG = 32;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func` with the `this` binding of `thisArg`
|
||||
@@ -43,10 +43,10 @@ var BIND_FLAG = 1,
|
||||
* // => 'hi fred!'
|
||||
*/
|
||||
var bind = baseRest(function(func, thisArg, partials) {
|
||||
var bitmask = BIND_FLAG;
|
||||
var bitmask = WRAP_BIND_FLAG;
|
||||
if (partials.length) {
|
||||
var holders = replaceHolders(partials, getHolder(bind));
|
||||
bitmask |= PARTIAL_FLAG;
|
||||
bitmask |= WRAP_PARTIAL_FLAG;
|
||||
}
|
||||
return createWrap(func, bitmask, thisArg, partials, holders);
|
||||
});
|
||||
|
||||
10
bindKey.js
10
bindKey.js
@@ -4,9 +4,9 @@ import getHolder from './_getHolder.js';
|
||||
import replaceHolders from './_replaceHolders.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_FLAG = 1,
|
||||
BIND_KEY_FLAG = 2,
|
||||
PARTIAL_FLAG = 32;
|
||||
var WRAP_BIND_FLAG = 1,
|
||||
WRAP_BIND_KEY_FLAG = 2,
|
||||
WRAP_PARTIAL_FLAG = 32;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes the method at `object[key]` with `partials`
|
||||
@@ -54,10 +54,10 @@ var BIND_FLAG = 1,
|
||||
* // => 'hiya fred!'
|
||||
*/
|
||||
var bindKey = baseRest(function(object, key, partials) {
|
||||
var bitmask = BIND_FLAG | BIND_KEY_FLAG;
|
||||
var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
|
||||
if (partials.length) {
|
||||
var holders = replaceHolders(partials, getHolder(bindKey));
|
||||
bitmask |= PARTIAL_FLAG;
|
||||
bitmask |= WRAP_PARTIAL_FLAG;
|
||||
}
|
||||
return createWrap(key, bitmask, object, partials, holders);
|
||||
});
|
||||
|
||||
5
clone.js
5
clone.js
@@ -1,5 +1,8 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_SYMBOLS_FLAG = 4;
|
||||
|
||||
/**
|
||||
* Creates a shallow clone of `value`.
|
||||
*
|
||||
@@ -27,7 +30,7 @@ import baseClone from './_baseClone.js';
|
||||
* // => true
|
||||
*/
|
||||
function clone(value) {
|
||||
return baseClone(value, false, true);
|
||||
return baseClone(value, CLONE_SYMBOLS_FLAG);
|
||||
}
|
||||
|
||||
export default clone;
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1,
|
||||
CLONE_SYMBOLS_FLAG = 4;
|
||||
|
||||
/**
|
||||
* This method is like `_.clone` except that it recursively clones `value`.
|
||||
*
|
||||
@@ -19,7 +23,7 @@ import baseClone from './_baseClone.js';
|
||||
* // => false
|
||||
*/
|
||||
function cloneDeep(value) {
|
||||
return baseClone(value, true, true);
|
||||
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
|
||||
}
|
||||
|
||||
export default cloneDeep;
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
|
||||
/** 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`.
|
||||
*
|
||||
@@ -30,7 +34,7 @@ import baseClone from './_baseClone.js';
|
||||
*/
|
||||
function cloneDeepWith(value, customizer) {
|
||||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||||
return baseClone(value, true, true, customizer);
|
||||
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
|
||||
}
|
||||
|
||||
export default cloneDeepWith;
|
||||
|
||||
@@ -1,5 +1,8 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_SYMBOLS_FLAG = 4;
|
||||
|
||||
/**
|
||||
* This method is like `_.clone` except that it accepts `customizer` which
|
||||
* is invoked to produce the cloned value. If `customizer` returns `undefined`,
|
||||
@@ -33,7 +36,7 @@ import baseClone from './_baseClone.js';
|
||||
*/
|
||||
function cloneWith(value, customizer) {
|
||||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||||
return baseClone(value, false, true, customizer);
|
||||
return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
|
||||
}
|
||||
|
||||
export default cloneWith;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
import baseConforms from './_baseConforms.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes the predicate properties of `source` with
|
||||
* the corresponding property values of a given object, returning `true` if
|
||||
@@ -26,7 +29,7 @@ import baseConforms from './_baseConforms.js';
|
||||
* // => [{ 'a': 1, 'b': 2 }]
|
||||
*/
|
||||
function conforms(source) {
|
||||
return baseConforms(baseClone(source, true));
|
||||
return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
|
||||
}
|
||||
|
||||
export default conforms;
|
||||
|
||||
4
curry.js
4
curry.js
@@ -1,7 +1,7 @@
|
||||
import createWrap from './_createWrap.js';
|
||||
|
||||
/** 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
|
||||
@@ -46,7 +46,7 @@ var CURRY_FLAG = 8;
|
||||
*/
|
||||
function curry(func, arity, guard) {
|
||||
arity = guard ? undefined : arity;
|
||||
var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||
var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||
result.placeholder = curry.placeholder;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import createWrap from './_createWrap.js';
|
||||
|
||||
/** 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`
|
||||
@@ -43,7 +43,7 @@ var CURRY_RIGHT_FLAG = 16;
|
||||
*/
|
||||
function curryRight(func, arity, guard) {
|
||||
arity = guard ? undefined : arity;
|
||||
var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||
var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
|
||||
result.placeholder = curryRight.placeholder;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -108,9 +108,11 @@ function debounce(func, wait, options) {
|
||||
function remainingWait(time) {
|
||||
var timeSinceLastCall = time - lastCallTime,
|
||||
timeSinceLastInvoke = time - lastInvokeTime,
|
||||
result = wait - timeSinceLastCall;
|
||||
timeWaiting = wait - timeSinceLastCall;
|
||||
|
||||
return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result;
|
||||
return maxing
|
||||
? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
|
||||
: timeWaiting;
|
||||
}
|
||||
|
||||
function shouldInvoke(time) {
|
||||
|
||||
@@ -5,11 +5,13 @@ import toString from './toString.js';
|
||||
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
|
||||
|
||||
/** Used to compose unicode character classes. */
|
||||
var rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20f0';
|
||||
var rsComboMarksRange = '\\u0300-\\u036f',
|
||||
reComboHalfMarksRange = '\\ufe20-\\ufe2f',
|
||||
rsComboSymbolsRange = '\\u20d0-\\u20ff',
|
||||
rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;
|
||||
|
||||
/** Used to compose unicode capture groups. */
|
||||
var rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']';
|
||||
var rsCombo = '[' + rsComboRange + ']';
|
||||
|
||||
/**
|
||||
* Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
|
||||
|
||||
44
defaults.js
44
defaults.js
@@ -1,7 +1,13 @@
|
||||
import apply from './_apply.js';
|
||||
import assignInDefaults from './_assignInDefaults.js';
|
||||
import assignInWith from './assignInWith.js';
|
||||
import baseRest from './_baseRest.js';
|
||||
import eq from './eq.js';
|
||||
import isIterateeCall from './_isIterateeCall.js';
|
||||
import keysIn from './keysIn.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Assigns own and inherited enumerable string keyed properties of source
|
||||
@@ -24,9 +30,35 @@ import baseRest from './_baseRest.js';
|
||||
* _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
|
||||
* // => { 'a': 1, 'b': 2 }
|
||||
*/
|
||||
var defaults = baseRest(function(args) {
|
||||
args.push(undefined, assignInDefaults);
|
||||
return apply(assignInWith, undefined, args);
|
||||
var defaults = baseRest(function(object, sources) {
|
||||
object = Object(object);
|
||||
|
||||
var index = -1;
|
||||
var length = sources.length;
|
||||
var guard = length > 2 ? sources[2] : undefined;
|
||||
|
||||
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
|
||||
length = 1;
|
||||
}
|
||||
|
||||
while (++index < length) {
|
||||
var source = sources[index];
|
||||
var props = keysIn(source);
|
||||
var propsIndex = -1;
|
||||
var propsLength = props.length;
|
||||
|
||||
while (++propsIndex < propsLength) {
|
||||
var key = props[propsIndex];
|
||||
var value = object[key];
|
||||
|
||||
if (value === undefined ||
|
||||
(eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
|
||||
object[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return object;
|
||||
});
|
||||
|
||||
export default defaults;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import apply from './_apply.js';
|
||||
import baseRest from './_baseRest.js';
|
||||
import mergeDefaults from './_mergeDefaults.js';
|
||||
import customDefaultsMerge from './_customDefaultsMerge.js';
|
||||
import mergeWith from './mergeWith.js';
|
||||
|
||||
/**
|
||||
@@ -23,7 +23,7 @@ import mergeWith from './mergeWith.js';
|
||||
* // => { 'a': { 'b': 2, 'c': 3 } }
|
||||
*/
|
||||
var defaultsDeep = baseRest(function(args) {
|
||||
args.push(undefined, mergeDefaults);
|
||||
args.push(undefined, customDefaultsMerge);
|
||||
return apply(mergeWith, undefined, args);
|
||||
});
|
||||
|
||||
|
||||
4
flip.js
4
flip.js
@@ -1,7 +1,7 @@
|
||||
import createWrap from './_createWrap.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var FLIP_FLAG = 512;
|
||||
var WRAP_FLIP_FLAG = 512;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func` with arguments reversed.
|
||||
@@ -22,7 +22,7 @@ var FLIP_FLAG = 512;
|
||||
* // => ['d', 'c', 'b', 'a']
|
||||
*/
|
||||
function flip(func) {
|
||||
return createWrap(func, FLIP_FLAG);
|
||||
return createWrap(func, WRAP_FLIP_FLAG);
|
||||
}
|
||||
|
||||
export default flip;
|
||||
|
||||
15
invert.js
15
invert.js
@@ -2,6 +2,16 @@ import constant from './constant.js';
|
||||
import createInverter from './_createInverter.js';
|
||||
import identity from './identity.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/**
|
||||
* Used to resolve the
|
||||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||||
* of values.
|
||||
*/
|
||||
var nativeObjectToString = objectProto.toString;
|
||||
|
||||
/**
|
||||
* Creates an object composed of the inverted keys and values of `object`.
|
||||
* If `object` contains duplicate values, subsequent values overwrite
|
||||
@@ -21,6 +31,11 @@ import identity from './identity.js';
|
||||
* // => { '1': 'c', '2': 'b' }
|
||||
*/
|
||||
var invert = createInverter(function(result, value, key) {
|
||||
if (value != null &&
|
||||
typeof value.toString != 'function') {
|
||||
value = nativeObjectToString.call(value);
|
||||
}
|
||||
|
||||
result[value] = key;
|
||||
}, constant(identity));
|
||||
|
||||
|
||||
12
invertBy.js
12
invertBy.js
@@ -7,6 +7,13 @@ var objectProto = Object.prototype;
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Used to resolve the
|
||||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||||
* of values.
|
||||
*/
|
||||
var nativeObjectToString = objectProto.toString;
|
||||
|
||||
/**
|
||||
* This method is like `_.invert` except that the inverted object is generated
|
||||
* from the results of running each element of `object` thru `iteratee`. The
|
||||
@@ -34,6 +41,11 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
* // => { 'group1': ['a', 'c'], 'group2': ['b'] }
|
||||
*/
|
||||
var invertBy = createInverter(function(result, value, key) {
|
||||
if (value != null &&
|
||||
typeof value.toString != 'function') {
|
||||
value = nativeObjectToString.call(value);
|
||||
}
|
||||
|
||||
if (hasOwnProperty.call(result, value)) {
|
||||
result[value].push(key);
|
||||
} else {
|
||||
|
||||
@@ -3,7 +3,6 @@ import baseEach from './_baseEach.js';
|
||||
import baseInvoke from './_baseInvoke.js';
|
||||
import baseRest from './_baseRest.js';
|
||||
import isArrayLike from './isArrayLike.js';
|
||||
import isKey from './_isKey.js';
|
||||
|
||||
/**
|
||||
* Invokes the method at `path` of each element in `collection`, returning
|
||||
@@ -31,12 +30,10 @@ import isKey from './_isKey.js';
|
||||
var invokeMap = baseRest(function(collection, path, args) {
|
||||
var index = -1,
|
||||
isFunc = typeof path == 'function',
|
||||
isProp = isKey(path),
|
||||
result = isArrayLike(collection) ? Array(collection.length) : [];
|
||||
|
||||
baseEach(collection, function(value) {
|
||||
var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
|
||||
result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args);
|
||||
result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
|
||||
});
|
||||
return result;
|
||||
});
|
||||
|
||||
@@ -8,7 +8,7 @@ import baseIsEqual from './_baseIsEqual.js';
|
||||
* date objects, error objects, maps, numbers, `Object` objects, regexes,
|
||||
* sets, strings, symbols, and typed arrays. `Object` objects are compared
|
||||
* by their own, not inherited, enumerable properties. Functions and DOM
|
||||
* nodes are **not** supported.
|
||||
* nodes are compared by strict equality, i.e. `===`.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
|
||||
@@ -35,7 +35,7 @@ import baseIsEqual from './_baseIsEqual.js';
|
||||
function isEqualWith(value, other, customizer) {
|
||||
customizer = typeof customizer == 'function' ? customizer : undefined;
|
||||
var result = customizer ? customizer(value, other) : undefined;
|
||||
return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
|
||||
return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
|
||||
}
|
||||
|
||||
export default isEqualWith;
|
||||
|
||||
@@ -2,7 +2,7 @@ import baseIsNative from './_baseIsNative.js';
|
||||
import isMaskable from './_isMaskable.js';
|
||||
|
||||
/** 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.
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
import baseIteratee from './_baseIteratee.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func` with the arguments of the created
|
||||
* function. If `func` is a property name, the created function returns the
|
||||
@@ -44,7 +47,7 @@ import baseIteratee from './_baseIteratee.js';
|
||||
* // => ['def']
|
||||
*/
|
||||
function iteratee(func) {
|
||||
return baseIteratee(typeof func == 'function' ? func : baseClone(func, true));
|
||||
return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
|
||||
}
|
||||
|
||||
export default iteratee;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* @license
|
||||
* lodash (Custom Build) <https://lodash.com/>
|
||||
* Lodash (Custom Build) <https://lodash.com/>
|
||||
* Build: `lodash modularize exports="es" -o ./`
|
||||
* Copyright JS Foundation and other contributors <https://js.foundation/>
|
||||
* Released under MIT license <https://lodash.com/license>
|
||||
@@ -45,10 +45,10 @@ import toInteger from './toInteger.js';
|
||||
import lodash from './wrapperLodash.js';
|
||||
|
||||
/** Used as the semantic version number. */
|
||||
var VERSION = '4.16.5';
|
||||
var VERSION = '4.17.10';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var BIND_KEY_FLAG = 2;
|
||||
var WRAP_BIND_KEY_FLAG = 2;
|
||||
|
||||
/** Used to indicate the type of lazy iteratees. */
|
||||
var LAZY_FILTER_FLAG = 1,
|
||||
@@ -431,14 +431,13 @@ arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'],
|
||||
// Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
|
||||
arrayEach(['drop', 'take'], function(methodName, index) {
|
||||
LazyWrapper.prototype[methodName] = function(n) {
|
||||
var filtered = this.__filtered__;
|
||||
if (filtered && !index) {
|
||||
return new LazyWrapper(this);
|
||||
}
|
||||
n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
|
||||
|
||||
var result = this.clone();
|
||||
if (filtered) {
|
||||
var result = (this.__filtered__ && !index)
|
||||
? new LazyWrapper(this)
|
||||
: this.clone();
|
||||
|
||||
if (result.__filtered__) {
|
||||
result.__takeCount__ = nativeMin(n, result.__takeCount__);
|
||||
} else {
|
||||
result.__views__.push({
|
||||
@@ -614,7 +613,7 @@ baseForOwn(LazyWrapper.prototype, function(func, methodName) {
|
||||
}
|
||||
});
|
||||
|
||||
realNames[createHybrid(undefined, BIND_KEY_FLAG).name] = [{
|
||||
realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
|
||||
'name': 'wrapper',
|
||||
'func': undefined
|
||||
}];
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/**
|
||||
* @license
|
||||
* lodash (Custom Build) <https://lodash.com/>
|
||||
* Lodash (Custom Build) <https://lodash.com/>
|
||||
* Build: `lodash modularize exports="es" -o ./`
|
||||
* Copyright JS Foundation and other contributors <https://js.foundation/>
|
||||
* Released under MIT license <https://lodash.com/license>
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
import baseMatches from './_baseMatches.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1;
|
||||
|
||||
/**
|
||||
* Creates a function that performs a partial deep comparison between a given
|
||||
* object and `source`, returning `true` if the given object has equivalent
|
||||
@@ -30,7 +33,7 @@ import baseMatches from './_baseMatches.js';
|
||||
* // => [{ 'a': 4, 'b': 5, 'c': 6 }]
|
||||
*/
|
||||
function matches(source) {
|
||||
return baseMatches(baseClone(source, true));
|
||||
return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
|
||||
}
|
||||
|
||||
export default matches;
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
import baseClone from './_baseClone.js';
|
||||
import baseMatchesProperty from './_baseMatchesProperty.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1;
|
||||
|
||||
/**
|
||||
* Creates a function that performs a partial deep comparison between the
|
||||
* value at `path` of a given object to `srcValue`, returning `true` if the
|
||||
@@ -28,7 +31,7 @@ import baseMatchesProperty from './_baseMatchesProperty.js';
|
||||
* // => { 'a': 4, 'b': 5, 'c': 6 }
|
||||
*/
|
||||
function matchesProperty(path, srcValue) {
|
||||
return baseMatchesProperty(path, baseClone(srcValue, true));
|
||||
return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
|
||||
}
|
||||
|
||||
export default matchesProperty;
|
||||
|
||||
42
omit.js
42
omit.js
@@ -1,21 +1,29 @@
|
||||
import arrayMap from './_arrayMap.js';
|
||||
import baseDifference from './_baseDifference.js';
|
||||
import basePick from './_basePick.js';
|
||||
import baseClone from './_baseClone.js';
|
||||
import baseUnset from './_baseUnset.js';
|
||||
import castPath from './_castPath.js';
|
||||
import copyObject from './_copyObject.js';
|
||||
import customOmitClone from './_customOmitClone.js';
|
||||
import flatRest from './_flatRest.js';
|
||||
import getAllKeysIn from './_getAllKeysIn.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/** Used to compose bitmasks for cloning. */
|
||||
var CLONE_DEEP_FLAG = 1,
|
||||
CLONE_FLAT_FLAG = 2,
|
||||
CLONE_SYMBOLS_FLAG = 4;
|
||||
|
||||
/**
|
||||
* The opposite of `_.pick`; this method creates an object composed of the
|
||||
* own and inherited enumerable string keyed properties of `object` that are
|
||||
* not omitted.
|
||||
* own and inherited enumerable property paths of `object` that are not omitted.
|
||||
*
|
||||
* **Note:** This method is considerably slower than `_.pick`.
|
||||
*
|
||||
* @static
|
||||
* @since 0.1.0
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The source object.
|
||||
* @param {...(string|string[])} [props] The property identifiers to omit.
|
||||
* @param {...(string|string[])} [paths] The property paths to omit.
|
||||
* @returns {Object} Returns the new object.
|
||||
* @example
|
||||
*
|
||||
@@ -24,12 +32,26 @@ import toKey from './_toKey.js';
|
||||
* _.omit(object, ['a', 'c']);
|
||||
* // => { 'b': '2' }
|
||||
*/
|
||||
var omit = flatRest(function(object, props) {
|
||||
var omit = flatRest(function(object, paths) {
|
||||
var result = {};
|
||||
if (object == null) {
|
||||
return {};
|
||||
return result;
|
||||
}
|
||||
props = arrayMap(props, toKey);
|
||||
return basePick(object, baseDifference(getAllKeysIn(object), props));
|
||||
var isDeep = false;
|
||||
paths = arrayMap(paths, function(path) {
|
||||
path = castPath(path, object);
|
||||
isDeep || (isDeep = path.length > 1);
|
||||
return path;
|
||||
});
|
||||
copyObject(object, getAllKeysIn(object), result);
|
||||
if (isDeep) {
|
||||
result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
|
||||
}
|
||||
var length = paths.length;
|
||||
while (length--) {
|
||||
baseUnset(result, paths[length]);
|
||||
}
|
||||
return result;
|
||||
});
|
||||
|
||||
export default omit;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "lodash-es",
|
||||
"version": "4.16.5",
|
||||
"version": "4.17.10",
|
||||
"description": "Lodash exported as ES modules.",
|
||||
"keywords": "es6, modules, stdlib, util",
|
||||
"homepage": "https://lodash.com/custom-builds",
|
||||
@@ -10,11 +10,11 @@
|
||||
"jsnext:main": "lodash.js",
|
||||
"main": "lodash.js",
|
||||
"module": "lodash.js",
|
||||
"sideEffects": false,
|
||||
"author": "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
|
||||
"contributors": [
|
||||
"John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
|
||||
"Blaine Bublitz <blaine.bublitz@gmail.com> (https://github.com/phated)",
|
||||
"Mathias Bynens <mathias@qiwi.be> (https://mathiasbynens.be/)"
|
||||
],
|
||||
"scripts": { "test": "echo \"See https://travis-ci.org/lodash/lodash-cli for testing details.\"" }
|
||||
"scripts": { "test": "echo \"See https://travis-ci.org/lodash-archive/lodash-cli for testing details.\"" }
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import getHolder from './_getHolder.js';
|
||||
import replaceHolders from './_replaceHolders.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var PARTIAL_FLAG = 32;
|
||||
var WRAP_PARTIAL_FLAG = 32;
|
||||
|
||||
/**
|
||||
* Creates a function that invokes `func` with `partials` prepended to the
|
||||
@@ -41,7 +41,7 @@ var PARTIAL_FLAG = 32;
|
||||
*/
|
||||
var partial = baseRest(function(func, partials) {
|
||||
var holders = replaceHolders(partials, getHolder(partial));
|
||||
return createWrap(func, PARTIAL_FLAG, undefined, partials, holders);
|
||||
return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
|
||||
});
|
||||
|
||||
// Assign default placeholders.
|
||||
|
||||
@@ -4,7 +4,7 @@ import getHolder from './_getHolder.js';
|
||||
import replaceHolders from './_replaceHolders.js';
|
||||
|
||||
/** Used to compose bitmasks for function metadata. */
|
||||
var PARTIAL_RIGHT_FLAG = 64;
|
||||
var WRAP_PARTIAL_RIGHT_FLAG = 64;
|
||||
|
||||
/**
|
||||
* This method is like `_.partial` except that partially applied arguments
|
||||
@@ -40,7 +40,7 @@ var PARTIAL_RIGHT_FLAG = 64;
|
||||
*/
|
||||
var partialRight = baseRest(function(func, partials) {
|
||||
var holders = replaceHolders(partials, getHolder(partialRight));
|
||||
return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders);
|
||||
return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
|
||||
});
|
||||
|
||||
// Assign default placeholders.
|
||||
|
||||
8
pick.js
8
pick.js
@@ -1,7 +1,5 @@
|
||||
import arrayMap from './_arrayMap.js';
|
||||
import basePick from './_basePick.js';
|
||||
import flatRest from './_flatRest.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/**
|
||||
* Creates an object composed of the picked `object` properties.
|
||||
@@ -11,7 +9,7 @@ import toKey from './_toKey.js';
|
||||
* @memberOf _
|
||||
* @category Object
|
||||
* @param {Object} object The source object.
|
||||
* @param {...(string|string[])} [props] The property identifiers to pick.
|
||||
* @param {...(string|string[])} [paths] The property paths to pick.
|
||||
* @returns {Object} Returns the new object.
|
||||
* @example
|
||||
*
|
||||
@@ -20,8 +18,8 @@ import toKey from './_toKey.js';
|
||||
* _.pick(object, ['a', 'c']);
|
||||
* // => { 'a': 1, 'c': 3 }
|
||||
*/
|
||||
var pick = flatRest(function(object, props) {
|
||||
return object == null ? {} : basePick(object, arrayMap(props, toKey));
|
||||
var pick = flatRest(function(object, paths) {
|
||||
return object == null ? {} : basePick(object, paths);
|
||||
});
|
||||
|
||||
export default pick;
|
||||
|
||||
12
pickBy.js
12
pickBy.js
@@ -1,3 +1,4 @@
|
||||
import arrayMap from './_arrayMap.js';
|
||||
import baseIteratee from './_baseIteratee.js';
|
||||
import basePickBy from './_basePickBy.js';
|
||||
import getAllKeysIn from './_getAllKeysIn.js';
|
||||
@@ -21,7 +22,16 @@ import getAllKeysIn from './_getAllKeysIn.js';
|
||||
* // => { 'a': 1, 'c': 3 }
|
||||
*/
|
||||
function pickBy(object, predicate) {
|
||||
return object == null ? {} : basePickBy(object, getAllKeysIn(object), baseIteratee(predicate));
|
||||
if (object == null) {
|
||||
return {};
|
||||
}
|
||||
var props = arrayMap(getAllKeysIn(object), function(prop) {
|
||||
return [prop];
|
||||
});
|
||||
predicate = baseIteratee(predicate);
|
||||
return basePickBy(object, props, function(value, path) {
|
||||
return predicate(value, path[0]);
|
||||
});
|
||||
}
|
||||
|
||||
export default pickBy;
|
||||
|
||||
4
rearg.js
4
rearg.js
@@ -2,7 +2,7 @@ import createWrap from './_createWrap.js';
|
||||
import flatRest from './_flatRest.js';
|
||||
|
||||
/** 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
|
||||
@@ -27,7 +27,7 @@ var REARG_FLAG = 256;
|
||||
* // => ['a', 'b', 'c']
|
||||
*/
|
||||
var rearg = flatRest(function(func, indexes) {
|
||||
return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes);
|
||||
return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
|
||||
});
|
||||
|
||||
export default rearg;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import castPath from './_castPath.js';
|
||||
import isFunction from './isFunction.js';
|
||||
import isKey from './_isKey.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/**
|
||||
@@ -33,15 +32,15 @@ import toKey from './_toKey.js';
|
||||
* // => 'default'
|
||||
*/
|
||||
function result(object, path, defaultValue) {
|
||||
path = isKey(path, object) ? [path] : castPath(path);
|
||||
path = castPath(path, object);
|
||||
|
||||
var index = -1,
|
||||
length = path.length;
|
||||
|
||||
// Ensure the loop is entered when path is empty.
|
||||
if (!length) {
|
||||
object = undefined;
|
||||
length = 1;
|
||||
object = undefined;
|
||||
}
|
||||
while (++index < length) {
|
||||
var value = object == null ? undefined : object[toKey(path[index])];
|
||||
|
||||
@@ -48,7 +48,7 @@ function spread(func, start) {
|
||||
if (typeof func != 'function') {
|
||||
throw new TypeError(FUNC_ERROR_TEXT);
|
||||
}
|
||||
start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
|
||||
start = start == null ? 0 : nativeMax(toInteger(start), 0);
|
||||
return baseRest(function(args) {
|
||||
var array = args[start],
|
||||
otherArgs = castSlice(args, 0, start);
|
||||
|
||||
@@ -28,7 +28,10 @@ import toString from './toString.js';
|
||||
*/
|
||||
function startsWith(string, target, position) {
|
||||
string = toString(string);
|
||||
position = baseClamp(toInteger(position), 0, string.length);
|
||||
position = position == null
|
||||
? 0
|
||||
: baseClamp(toInteger(position), 0, string.length);
|
||||
|
||||
target = baseToString(target);
|
||||
return string.slice(position, position + target.length) == target;
|
||||
}
|
||||
|
||||
@@ -17,7 +17,7 @@ import baseWhile from './_baseWhile.js';
|
||||
*
|
||||
* var users = [
|
||||
* { 'user': 'barney', 'active': false },
|
||||
* { 'user': 'fred', 'active': false},
|
||||
* { 'user': 'fred', 'active': false },
|
||||
* { 'user': 'pebbles', 'active': true }
|
||||
* ];
|
||||
*
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import assignInDefaults from './_assignInDefaults.js';
|
||||
import assignInWith from './assignInWith.js';
|
||||
import attempt from './attempt.js';
|
||||
import baseValues from './_baseValues.js';
|
||||
import customDefaultsAssignIn from './_customDefaultsAssignIn.js';
|
||||
import escapeStringChar from './_escapeStringChar.js';
|
||||
import isError from './isError.js';
|
||||
import isIterateeCall from './_isIterateeCall.js';
|
||||
@@ -141,9 +141,9 @@ function template(string, options, guard) {
|
||||
options = undefined;
|
||||
}
|
||||
string = toString(string);
|
||||
options = assignInWith({}, options, settings, assignInDefaults);
|
||||
options = assignInWith({}, options, settings, customDefaultsAssignIn);
|
||||
|
||||
var imports = assignInWith({}, options.imports, settings.imports, assignInDefaults),
|
||||
var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
|
||||
importsKeys = keys(imports),
|
||||
importsValues = baseValues(imports, importsKeys);
|
||||
|
||||
|
||||
@@ -5,8 +5,8 @@ import reInterpolate from './_reInterpolate.js';
|
||||
|
||||
/**
|
||||
* By default, the template delimiters used by lodash are like those in
|
||||
* embedded Ruby (ERB). Change the following template settings to use
|
||||
* alternative delimiters.
|
||||
* embedded Ruby (ERB) as well as ES2015 template strings. Change the
|
||||
* following template settings to use alternative delimiters.
|
||||
*
|
||||
* @static
|
||||
* @memberOf _
|
||||
|
||||
@@ -4,6 +4,7 @@ import isArray from './isArray.js';
|
||||
import isSymbol from './isSymbol.js';
|
||||
import stringToPath from './_stringToPath.js';
|
||||
import toKey from './_toKey.js';
|
||||
import toString from './toString.js';
|
||||
|
||||
/**
|
||||
* Converts `value` to a property path array.
|
||||
@@ -26,7 +27,7 @@ function toPath(value) {
|
||||
if (isArray(value)) {
|
||||
return arrayMap(value, toKey);
|
||||
}
|
||||
return isSymbol(value) ? [value] : copyArray(stringToPath(value));
|
||||
return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
|
||||
}
|
||||
|
||||
export default toPath;
|
||||
|
||||
@@ -29,7 +29,9 @@ var MAX_SAFE_INTEGER = 9007199254740991;
|
||||
* // => 3
|
||||
*/
|
||||
function toSafeInteger(value) {
|
||||
return baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER);
|
||||
return value
|
||||
? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
|
||||
: (value === 0 ? value : 0);
|
||||
}
|
||||
|
||||
export default toSafeInteger;
|
||||
|
||||
@@ -12,7 +12,7 @@ import thru from './thru.js';
|
||||
* @memberOf _
|
||||
* @since 1.0.0
|
||||
* @category Seq
|
||||
* @param {...(string|string[])} [paths] The property paths of elements to pick.
|
||||
* @param {...(string|string[])} [paths] The property paths to pick.
|
||||
* @returns {Object} Returns the new `lodash` wrapper instance.
|
||||
* @example
|
||||
*
|
||||
|
||||
@@ -29,9 +29,9 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
* Shortcut fusion is an optimization to merge iteratee calls; this avoids
|
||||
* the creation of intermediate arrays and can greatly reduce the number of
|
||||
* iteratee executions. Sections of a chain sequence qualify for shortcut
|
||||
* fusion if the section is applied to an array of at least `200` elements
|
||||
* and any iteratees accept only one argument. The heuristic for whether a
|
||||
* section qualifies for shortcut fusion is subject to change.
|
||||
* fusion if the section is applied to an array and iteratees accept only
|
||||
* one argument. The heuristic for whether a section qualifies for shortcut
|
||||
* fusion is subject to change.
|
||||
*
|
||||
* Chaining is supported in custom builds as long as the `_#value` method is
|
||||
* directly or indirectly included in the build.
|
||||
|
||||
Reference in New Issue
Block a user