diff --git a/README.md b/README.md index 661a058d4..f021e24a2 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# lodash-es v4.16.6 +# lodash-es v4.17.0 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.6-es) for more details. +See the [package source](https://github.com/lodash/lodash/tree/4.17.0-es) for more details. diff --git a/_baseAssignIn.js b/_baseAssignIn.js new file mode 100644 index 000000000..83c6e83e2 --- /dev/null +++ b/_baseAssignIn.js @@ -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; diff --git a/_baseAt.js b/_baseAt.js index 0f5a61087..394738914 100644 --- a/_baseAt.js +++ b/_baseAt.js @@ -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) { diff --git a/_baseClone.js b/_baseClone.js index 4fa9a4b72..41959eb47 100644 --- a/_baseClone.js +++ b/_baseClone.js @@ -2,10 +2,13 @@ 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'; @@ -15,6 +18,11 @@ import isBuffer from './isBuffer.js'; import isObject from './isObject.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 +74,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,9 +113,11 @@ 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]) { @@ -118,14 +134,18 @@ function baseClone(value, isDeep, isFull, customizer, key, object, stack) { } stack.set(value, result); - var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value); + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); arrayEach(props || value, function(subValue, key) { if (props) { key = subValue; subValue = value[key]; } // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack)); + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); }); return result; } diff --git a/_baseIsEqual.js b/_baseIsEqual.js index c8b9738db..67f274118 100644 --- a/_baseIsEqual.js +++ b/_baseIsEqual.js @@ -9,22 +9,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))) { return value !== value && other !== other; } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack); + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); } export default baseIsEqual; diff --git a/_baseIsEqualDeep.js b/_baseIsEqualDeep.js index 70133f5cf..aa8bd25da 100644 --- a/_baseIsEqualDeep.js +++ b/_baseIsEqualDeep.js @@ -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,14 +29,13 @@ 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, @@ -64,10 +63,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 +75,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; diff --git a/_baseIsMatch.js b/_baseIsMatch.js index e72774db4..926e03fee 100644 --- a/_baseIsMatch.js +++ b/_baseIsMatch.js @@ -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; diff --git a/_baseMatchesProperty.js b/_baseMatchesProperty.js index 1085ab239..f92d68087 100644 --- a/_baseMatchesProperty.js +++ b/_baseMatchesProperty.js @@ -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); }; } diff --git a/_basePick.js b/_basePick.js index afdf4b2c3..be2da0e44 100644 --- a/_basePick.js +++ b/_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,13 @@ 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) { +function basePick(object, paths) { object = Object(object); - return basePickBy(object, props, function(value, key) { - return key in object; + return basePickBy(object, paths, function(value, path) { + return hasIn(object, path); }); } diff --git a/_basePickBy.js b/_basePickBy.js index bf027dd22..95e995405 100644 --- a/_basePickBy.js +++ b/_basePickBy.js @@ -1,25 +1,26 @@ -import baseAssignValue from './_baseAssignValue.js'; +import baseGet from './_baseGet.js'; +import baseSet from './_baseSet.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, path, value); } } return result; diff --git a/_baseUnset.js b/_baseUnset.js index 064fe3e20..b681142b8 100644 --- a/_baseUnset.js +++ b/_baseUnset.js @@ -15,7 +15,7 @@ var hasOwnProperty = objectProto.hasOwnProperty; * * @private * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. + * @param {Array|string} path The property path to unset. * @returns {boolean} Returns `true` if the property is deleted, else `false`. */ function baseUnset(object, path) { diff --git a/_cloneMap.js b/_cloneMap.js index 4b9d28e1d..a4aa5b5d6 100644 --- a/_cloneMap.js +++ b/_cloneMap.js @@ -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); } diff --git a/_cloneSet.js b/_cloneSet.js index c6f0e0db4..e1d1063d0 100644 --- a/_cloneSet.js +++ b/_cloneSet.js @@ -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); } diff --git a/_copySymbols.js b/_copySymbols.js index abf914c41..002d8b767 100644 --- a/_copySymbols.js +++ b/_copySymbols.js @@ -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. diff --git a/_copySymbolsIn.js b/_copySymbolsIn.js new file mode 100644 index 000000000..12268d271 --- /dev/null +++ b/_copySymbolsIn.js @@ -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; diff --git a/_createBind.js b/_createBind.js index b16c99b45..3083ae498 100644 --- a/_createBind.js +++ b/_createBind.js @@ -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() { diff --git a/_createFlow.js b/_createFlow.js index 6a31788b0..70ce17fcc 100644 --- a/_createFlow.js +++ b/_createFlow.js @@ -12,10 +12,10 @@ var LARGE_ARRAY_SIZE = 200; 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 +50,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]); diff --git a/_createHybrid.js b/_createHybrid.js index ab2cd856b..300f66b1b 100644 --- a/_createHybrid.js +++ b/_createHybrid.js @@ -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() { diff --git a/_createPartial.js b/_createPartial.js index 036d557ec..851a3b6b6 100644 --- a/_createPartial.js +++ b/_createPartial.js @@ -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() { diff --git a/_createRecurry.js b/_createRecurry.js index 73195844d..d4bd5888b 100644 --- a/_createRecurry.js +++ b/_createRecurry.js @@ -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, diff --git a/_createWrap.js b/_createWrap.js index 4727ae6c8..c306ded74 100644 --- a/_createWrap.js +++ b/_createWrap.js @@ -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; @@ -88,14 +87,14 @@ function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arit ? (isBindKey ? 0 : func.length) : nativeMax(newData[9] - length, 0); - if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) { - bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG); + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); } - if (!bitmask || bitmask == BIND_FLAG) { + if (!bitmask || bitmask == WRAP_BIND_FLAG) { var result = createBind(func, bitmask, thisArg); - } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) { + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { result = createCurry(func, bitmask, arity); - } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) { + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { result = createPartial(func, bitmask, thisArg, partials); } else { result = createHybrid.apply(undefined, newData); diff --git a/_equalArrays.js b/_equalArrays.js index a19c673e8..77cafd960 100644 --- a/_equalArrays.js +++ b/_equalArrays.js @@ -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; diff --git a/_equalByTag.js b/_equalByTag.js index ede1b61fe..a7090ffe6 100644 --- a/_equalByTag.js +++ b/_equalByTag.js @@ -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; diff --git a/_equalObjects.js b/_equalObjects.js index 55e5aef46..da70dc469 100644 --- a/_equalObjects.js +++ b/_equalObjects.js @@ -1,7 +1,7 @@ import keys from './keys.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,15 +16,14 @@ 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, +function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = keys(object), objLength = objProps.length, othProps = keys(other), @@ -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; diff --git a/_getSymbols.js b/_getSymbols.js index b748002d6..801893a9a 100644 --- a/_getSymbols.js +++ b/_getSymbols.js @@ -5,7 +5,7 @@ import stubArray from './stubArray.js'; var nativeGetSymbols = Object.getOwnPropertySymbols; /** - * Creates an array of the own enumerable symbol properties of `object`. + * Creates an array of the own enumerable symbols of `object`. * * @private * @param {Object} object The object to query. diff --git a/_getSymbolsIn.js b/_getSymbolsIn.js index 0e810a4b7..5f33b71e8 100644 --- a/_getSymbolsIn.js +++ b/_getSymbolsIn.js @@ -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. diff --git a/_hasUnicode.js b/_hasUnicode.js index ae9548690..c0808981e 100644 --- a/_hasUnicode.js +++ b/_hasUnicode.js @@ -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. diff --git a/_mergeData.js b/_mergeData.js index c8f012e64..9222069f8 100644 --- a/_mergeData.js +++ b/_mergeData.js @@ -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. diff --git a/_nodeUtil.js b/_nodeUtil.js index 0f0e0c8b6..467331693 100644 --- a/_nodeUtil.js +++ b/_nodeUtil.js @@ -15,7 +15,7 @@ var freeProcess = moduleExports && freeGlobal.process; /** Used to access faster Node.js helpers. */ var nodeUtil = (function() { try { - return freeProcess && freeProcess.binding('util'); + return freeProcess && freeProcess.binding && freeProcess.binding('util'); } catch (e) {} }()); diff --git a/_unicodeSize.js b/_unicodeSize.js index 171d393bb..8c0317541 100644 --- a/_unicodeSize.js +++ b/_unicodeSize.js @@ -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 + ']', diff --git a/_unicodeToArray.js b/_unicodeToArray.js index 0ef8e3e4d..ea4976206 100644 --- a/_unicodeToArray.js +++ b/_unicodeToArray.js @@ -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 + ']', diff --git a/_unicodeWords.js b/_unicodeWords.js index 4ca2d4ca4..99acbefc2 100644 --- a/_unicodeWords.js +++ b/_unicodeWords.js @@ -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 + ']', diff --git a/_updateWrapDetails.js b/_updateWrapDetails.js index 9032d308a..69ecc1ec4 100644 --- a/_updateWrapDetails.js +++ b/_updateWrapDetails.js @@ -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] ]; /** diff --git a/ary.js b/ary.js index 76a95cb7d..eb64a45a3 100644 --- a/ary.js +++ b/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; diff --git a/at.js b/at.js index 2a9220a06..6475c67f6 100644 --- a/at.js +++ b/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 * diff --git a/bind.js b/bind.js index ca8f7174b..4bc03b320 100644 --- a/bind.js +++ b/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); }); diff --git a/bindKey.js b/bindKey.js index f18f426a8..fbbfa2987 100644 --- a/bindKey.js +++ b/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); }); diff --git a/clone.js b/clone.js index b2f2c906d..b14701211 100644 --- a/clone.js +++ b/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; diff --git a/cloneDeep.js b/cloneDeep.js index de7ce2812..44d403d77 100644 --- a/cloneDeep.js +++ b/cloneDeep.js @@ -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; diff --git a/cloneDeepWith.js b/cloneDeepWith.js index f2fb895e8..8cd788588 100644 --- a/cloneDeepWith.js +++ b/cloneDeepWith.js @@ -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; diff --git a/cloneWith.js b/cloneWith.js index 7a97b21e5..c900df14c 100644 --- a/cloneWith.js +++ b/cloneWith.js @@ -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; diff --git a/conforms.js b/conforms.js index 21a3c8696..2fb1ebe91 100644 --- a/conforms.js +++ b/conforms.js @@ -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; diff --git a/curry.js b/curry.js index c269536d5..953102f66 100644 --- a/curry.js +++ b/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; } diff --git a/curryRight.js b/curryRight.js index 8aab2d103..5cc33aac6 100644 --- a/curryRight.js +++ b/curryRight.js @@ -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; } diff --git a/deburr.js b/deburr.js index 0fa630440..73dc9b374 100644 --- a/deburr.js +++ b/deburr.js @@ -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 diff --git a/flip.js b/flip.js index 3cf0eeb79..787324c93 100644 --- a/flip.js +++ b/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; diff --git a/isEqualWith.js b/isEqualWith.js index 74f607528..c16f2056a 100644 --- a/isEqualWith.js +++ b/isEqualWith.js @@ -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; diff --git a/isNative.js b/isNative.js index 37160daaa..f1d2c327f 100644 --- a/isNative.js +++ b/isNative.js @@ -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. diff --git a/iteratee.js b/iteratee.js index 07256b473..a2a4af2ed 100644 --- a/iteratee.js +++ b/iteratee.js @@ -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; diff --git a/lodash.default.js b/lodash.default.js index e31ad38c1..1862730d4 100644 --- a/lodash.default.js +++ b/lodash.default.js @@ -1,6 +1,6 @@ /** * @license - * lodash (Custom Build) + * Lodash (Custom Build) * Build: `lodash modularize exports="es" -o ./` * Copyright JS Foundation and other contributors * Released under MIT 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.6'; +var VERSION = '4.17.0'; /** 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, @@ -614,7 +614,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 }]; diff --git a/lodash.js b/lodash.js index ee47962da..706eb5e98 100644 --- a/lodash.js +++ b/lodash.js @@ -1,6 +1,6 @@ /** * @license - * lodash (Custom Build) + * Lodash (Custom Build) * Build: `lodash modularize exports="es" -o ./` * Copyright JS Foundation and other contributors * Released under MIT license diff --git a/matches.js b/matches.js index a929512c2..62aed6c77 100644 --- a/matches.js +++ b/matches.js @@ -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; diff --git a/matchesProperty.js b/matchesProperty.js index 089de7a15..a98fea92c 100644 --- a/matchesProperty.js +++ b/matchesProperty.js @@ -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; diff --git a/omit.js b/omit.js index fc8677ab2..da8eb9f93 100644 --- a/omit.js +++ b/omit.js @@ -1,21 +1,26 @@ -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 copyObject from './_copyObject.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 +29,19 @@ 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)); + copyObject(object, getAllKeysIn(object), result); + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG); + + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; }); export default omit; diff --git a/package.json b/package.json index d1b9b3554..9f7a677d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lodash-es", - "version": "4.16.6", + "version": "4.17.0", "description": "Lodash exported as ES modules.", "keywords": "es6, modules, stdlib, util", "homepage": "https://lodash.com/custom-builds", diff --git a/partial.js b/partial.js index 7c5889d34..eaf6c435f 100644 --- a/partial.js +++ b/partial.js @@ -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. diff --git a/partialRight.js b/partialRight.js index ba89ea0bd..8ffe3ebce 100644 --- a/partialRight.js +++ b/partialRight.js @@ -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. diff --git a/pick.js b/pick.js index 337d5514a..e55570f27 100644 --- a/pick.js +++ b/pick.js @@ -11,7 +11,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 +20,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, arrayMap(paths, toKey)); }); export default pick; diff --git a/rearg.js b/rearg.js index 4e1cec0f4..6bdda0ce4 100644 --- a/rearg.js +++ b/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; diff --git a/spread.js b/spread.js index cf221cfc9..0c973425e 100644 --- a/spread.js +++ b/spread.js @@ -51,11 +51,15 @@ function spread(func, start) { start = start === undefined ? 0 : nativeMax(toInteger(start), 0); return baseRest(function(args) { var array = args[start], + lastIndex = args.length - 1, otherArgs = castSlice(args, 0, start); if (array) { arrayPush(otherArgs, array); } + if (start != lastIndex) { + arrayPush(otherArgs, castSlice(args, start + 1)); + } return apply(func, this, otherArgs); }); } diff --git a/wrapperAt.js b/wrapperAt.js index f54af4fcb..62eb611d9 100644 --- a/wrapperAt.js +++ b/wrapperAt.js @@ -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 *