diff options
Diffstat (limited to 'tools/eslint/node_modules/lodash/lodash.js')
-rw-r--r-- | tools/eslint/node_modules/lodash/lodash.js | 438 |
1 files changed, 257 insertions, 181 deletions
diff --git a/tools/eslint/node_modules/lodash/lodash.js b/tools/eslint/node_modules/lodash/lodash.js index 0e359de50b..2ad95ab4d1 100644 --- a/tools/eslint/node_modules/lodash/lodash.js +++ b/tools/eslint/node_modules/lodash/lodash.js @@ -1,6 +1,6 @@ /** * @license - * lodash 4.9.0 (Custom Build) <https://lodash.com/> + * lodash 4.11.1 (Custom Build) <https://lodash.com/> * Build: `lodash -d -o ./foo/lodash.js` * Copyright jQuery Foundation and other contributors <https://jquery.org/> * Released under MIT license <https://lodash.com/license> @@ -13,7 +13,7 @@ var undefined; /** Used as the semantic version number. */ - var VERSION = '4.9.0'; + var VERSION = '4.11.1'; /** Used as the size to enable large array optimizations. */ var LARGE_ARRAY_SIZE = 200; @@ -131,6 +131,9 @@ reTrimStart = /^\s+/, reTrimEnd = /\s+$/; + /** Used to match non-compound words composed of alphanumeric characters. */ + var reBasicWord = /[a-zA-Z0-9]+/g; + /** Used to match backslashes in property paths. */ var reEscapeChar = /\\(\\)?/g; @@ -185,7 +188,8 @@ rsBreakRange = rsMathOpRange + rsNonCharRange + rsQuoteRange + rsSpaceRange; /** Used to compose unicode capture groups. */ - var rsAstral = '[' + rsAstralRange + ']', + var rsApos = "['\u2019]", + rsAstral = '[' + rsAstralRange + ']', rsBreak = '[' + rsBreakRange + ']', rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']', rsDigits = '\\d+', @@ -203,6 +207,8 @@ /** Used to compose unicode regexes. */ var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')', rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')', + rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?', + rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?', reOptMod = rsModifier + '?', rsOptVar = '[' + rsVarRange + ']?', rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', @@ -210,6 +216,9 @@ rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq, rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + /** Used to match apostrophes. */ + var reApos = RegExp(rsApos, 'g'); + /** * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols). @@ -219,22 +228,19 @@ /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ var reComplexSymbol = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ - var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); - - /** Used to match non-compound words composed of alphanumeric characters. */ - var reBasicWord = /[a-zA-Z0-9]+/g; - /** Used to match complex or compound words. */ var reComplexWord = RegExp([ - rsUpper + '?' + rsLower + '+(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', - rsUpperMisc + '+(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', - rsUpper + '?' + rsLowerMisc + '+', - rsUpper + '+', + rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')', + rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')', + rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr, + rsUpper + '+' + rsOptUpperContr, rsDigits, rsEmoji ].join('|'), 'g'); + /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */ + var reHasComplexSymbol = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']'); + /** Used to detect strings that need a more robust regexp to match words. */ var reHasComplexWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; @@ -1382,7 +1388,8 @@ /** Used for built-in method references. */ var arrayProto = context.Array.prototype, - objectProto = context.Object.prototype; + objectProto = context.Object.prototype, + stringProto = context.String.prototype; /** Used to resolve the decompiled source of functions. */ var funcToString = context.Function.prototype.toString; @@ -1437,7 +1444,9 @@ nativeMin = Math.min, nativeParseInt = context.parseInt, nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; + nativeReplace = stringProto.replace, + nativeReverse = arrayProto.reverse, + nativeSplit = stringProto.split; /* Built-in method references that are verified to be native. */ var DataView = getNative(context, 'DataView'), @@ -1550,7 +1559,7 @@ * `isSet`, `isString`, `isUndefined`, `isTypedArray`, `isWeakMap`, `isWeakSet`, * `join`, `kebabCase`, `last`, `lastIndexOf`, `lowerCase`, `lowerFirst`, * `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, `min`, `minBy`, `multiply`, - * `noConflict`, `noop`, `now`, `pad`, `padEnd`, `padStart`, `parseInt`, + * `noConflict`, `noop`, `now`, `nth`, `pad`, `padEnd`, `padStart`, `parseInt`, * `pop`, `random`, `reduce`, `reduceRight`, `repeat`, `result`, `round`, * `runInContext`, `sample`, `shift`, `size`, `snakeCase`, `some`, `sortedIndex`, * `sortedIndexBy`, `sortedLastIndex`, `sortedLastIndexBy`, `startCase`, @@ -2358,50 +2367,6 @@ } /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function baseCastArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to `identity` if it's not a function. - * - * @private - * @param {*} value The value to inspect. - * @returns {Function} Returns cast function. - */ - function baseCastFunction(value) { - return typeof value == 'function' ? value : identity; - } - - /** - * Casts `value` to a string if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the cast key. - */ - function baseCastKey(key) { - return (typeof key == 'string' || isSymbol(key)) ? key : (key + ''); - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast property path array. - */ - function baseCastPath(value) { - return isArray(value) ? value : stringToPath(value); - } - - /** * The base implementation of `_.clamp` which doesn't coerce arguments to numbers. * * @private @@ -2731,7 +2696,7 @@ /** * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` invoking `iteratee` for each property. + * properties returned by `keysFunc` and invokes `iteratee` for each property. * Iteratee functions may exit iteration early by explicitly returning `false`. * * @private @@ -2802,7 +2767,7 @@ * @returns {*} Returns the resolved value. */ function baseGet(object, path) { - path = isKey(path, object) ? [path] : baseCastPath(path); + path = isKey(path, object) ? [path] : castPath(path); var index = 0, length = path.length; @@ -2964,7 +2929,7 @@ */ function baseInvoke(object, path, args) { if (!isKey(path, object)) { - path = baseCastPath(path); + path = castPath(path); object = parent(object, path); path = last(path); } @@ -3336,6 +3301,23 @@ } /** + * The base implementation of `_.nth` which doesn't coerce `n` to an integer. + * + * @private + * @param {Array} array The array to query. + * @param {number} n The index of the element to return. + * @returns {*} Returns the nth element of `array`. + */ + function baseNth(array, n) { + var length = array.length; + if (!length) { + return; + } + n += n < 0 ? length : 0; + return isIndex(n, length) ? array[n] : undefined; + } + + /** * The base implementation of `_.orderBy` without param guards. * * @private @@ -3346,7 +3328,7 @@ */ function baseOrderBy(collection, iteratees, orders) { var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], getIteratee()); + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee())); var result = baseMap(collection, function(value, key, collection) { var criteria = arrayMap(iteratees, function(iteratee) { @@ -3486,7 +3468,7 @@ splice.call(array, index, 1); } else if (!isKey(index, array)) { - var path = baseCastPath(index), + var path = castPath(index), object = parent(array, path); if (object != null) { @@ -3576,7 +3558,7 @@ * @returns {Object} Returns `object`. */ function baseSet(object, path, value, customizer) { - path = isKey(path, object) ? [path] : baseCastPath(path); + path = isKey(path, object) ? [path] : castPath(path); var index = -1, length = path.length, @@ -3855,7 +3837,7 @@ * @returns {boolean} Returns `true` if the property is deleted, else `false`. */ function baseUnset(object, path) { - path = isKey(path, object) ? [path] : baseCastPath(path); + path = isKey(path, object) ? [path] : castPath(path); object = parent(object, path); var key = last(path); return (object != null && has(object, key)) ? delete object[key] : true; @@ -3966,6 +3948,54 @@ } /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to `identity` if it's not a function. + * + * @private + * @param {*} value The value to inspect. + * @returns {Function} Returns cast function. + */ + function castFunction(value) { + return typeof value == 'function' ? value : identity; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value) { + return isArray(value) ? value : stringToPath(value); + } + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** * Creates a clone of `buffer`. * * @private @@ -4171,24 +4201,10 @@ * @param {Object} source The object to copy properties from. * @param {Array} props The property identifiers to copy. * @param {Object} [object={}] The object to copy properties to. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object) { - return copyObjectWith(source, props, object); - } - - /** - * This function is like `copyObject` except that it accepts a function to - * customize copied values. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. * @param {Function} [customizer] The function to customize copied values. * @returns {Object} Returns `object`. */ - function copyObjectWith(source, props, object, customizer) { + function copyObject(source, props, object, customizer) { object || (object = {}); var index = -1, @@ -4358,8 +4374,13 @@ ? stringToArray(string) : undefined; - var chr = strSymbols ? strSymbols[0] : string.charAt(0), - trailing = strSymbols ? strSymbols.slice(1).join('') : string.slice(1); + var chr = strSymbols + ? strSymbols[0] + : string.charAt(0); + + var trailing = strSymbols + ? castSlice(strSymbols, 1).join('') + : string.slice(1); return chr[methodName]() + trailing; }; @@ -4374,7 +4395,7 @@ */ function createCompounder(callback) { return function(string) { - return arrayReduce(words(deburr(string)), callback, ''); + return arrayReduce(words(deburr(string).replace(reApos, '')), callback, ''); }; } @@ -4610,7 +4631,10 @@ */ function createOver(arrayFunc) { return rest(function(iteratees) { - iteratees = arrayMap(baseFlatten(iteratees, 1, isFlattenableIteratee), getIteratee()); + iteratees = (iteratees.length == 1 && isArray(iteratees[0])) + ? arrayMap(iteratees[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(iteratees, 1, isFlattenableIteratee), baseUnary(getIteratee())); + return rest(function(args) { var thisArg = this; return arrayFunc(iteratees, function(iteratee) { @@ -4638,7 +4662,7 @@ } var result = baseRepeat(chars, nativeCeil(length / stringSize(chars))); return reHasComplexSymbol.test(chars) - ? stringToArray(result).slice(0, length).join('') + ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length); } @@ -4724,7 +4748,6 @@ */ function createRecurryWrapper(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { var isCurry = bitmask & CURRY_FLAG, - newArgPos = argPos ? copyArray(argPos) : undefined, newHolders = isCurry ? holders : undefined, newHoldersRight = isCurry ? undefined : holders, newPartials = isCurry ? partials : undefined, @@ -4738,7 +4761,7 @@ } var newData = [ func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, newArgPos, ary, arity + newHoldersRight, argPos, ary, arity ]; var result = wrapFunc.apply(undefined, newData); @@ -5346,7 +5369,7 @@ * @returns {boolean} Returns `true` if `path` exists, else `false`. */ function hasPath(object, path, hasFunc) { - path = isKey(path, object) ? [path] : baseCastPath(path); + path = isKey(path, object) ? [path] : castPath(path); var result, index = -1, @@ -5651,20 +5674,20 @@ var value = source[3]; if (value) { var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : copyArray(value); - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : copyArray(source[4]); + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; } // Compose partial right arguments. value = source[5]; if (value) { partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : copyArray(value); - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : copyArray(source[6]); + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; } // Use source `argPos` if available. value = source[7]; if (value) { - data[7] = copyArray(value); + data[7] = value; } // Use source `ary` if it's smaller. if (srcBitmask & ARY_FLAG) { @@ -5785,6 +5808,17 @@ }); /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(key) { + return (typeof key == 'string' || isSymbol(key)) ? key : (key + ''); + } + + /** * Converts `func` to its source code. * * @private @@ -6408,7 +6442,7 @@ * // => undefined */ function head(array) { - return array ? array[0] : undefined; + return (array && array.length) ? array[0] : undefined; } /** @@ -6482,7 +6516,7 @@ * // => [2] */ var intersection = rest(function(arrays) { - var mapped = arrayMap(arrays, baseCastArrayLikeObject); + var mapped = arrayMap(arrays, castArrayLikeObject); return (mapped.length && mapped[0] === arrays[0]) ? baseIntersection(mapped) : []; @@ -6513,7 +6547,7 @@ */ var intersectionBy = rest(function(arrays) { var iteratee = last(arrays), - mapped = arrayMap(arrays, baseCastArrayLikeObject); + mapped = arrayMap(arrays, castArrayLikeObject); if (iteratee === last(mapped)) { iteratee = undefined; @@ -6548,7 +6582,7 @@ */ var intersectionWith = rest(function(arrays) { var comparator = last(arrays), - mapped = arrayMap(arrays, baseCastArrayLikeObject); + mapped = arrayMap(arrays, castArrayLikeObject); if (comparator === last(mapped)) { comparator = undefined; @@ -6645,6 +6679,31 @@ } /** + * Gets the nth element of `array`. If `n` is negative, the nth element + * from the end is returned. + * + * @static + * @memberOf _ + * @since 4.11.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=0] The index of the element to return. + * @returns {*} Returns the nth element of `array`. + * @example + * + * var array = ['a', 'b', 'c', 'd']; + * + * _.nth(array, 1); + * // => 'b' + * + * _.nth(array, -2); + * // => 'c'; + */ + function nth(array, n) { + return (array && array.length) ? baseNth(array, toInteger(n)) : undefined; + } + + /** * Removes all given values from `array` using * [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero) * for equality comparisons. @@ -6765,8 +6824,7 @@ * @since 3.0.0 * @category Array * @param {Array} array The array to modify. - * @param {...(number|number[])} [indexes] The indexes of elements to remove, - * specified individually or in arrays. + * @param {...(number|number[])} [indexes] The indexes of elements to remove. * @returns {Array} Returns the new array of removed elements. * @example * @@ -7774,8 +7832,7 @@ * @memberOf _ * @since 1.0.0 * @category Seq - * @param {...(string|string[])} [paths] The property paths of elements to pick, - * specified individually or in arrays. + * @param {...(string|string[])} [paths] The property paths of elements to pick. * @returns {Object} Returns the new `lodash` wrapper instance. * @example * @@ -8292,7 +8349,7 @@ } /** - * Iterates over elements of `collection` invoking `iteratee` for each element. + * Iterates over elements of `collection` and invokes `iteratee` for each element. * The iteratee is invoked with three arguments: (value, index|key, collection). * Iteratee functions may exit iteration early by explicitly returning `false`. * @@ -8506,8 +8563,8 @@ * The guarded methods are: * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `take`, `takeRight`, `template`, - * `trim`, `trimEnd`, `trimStart`, and `words` + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` * * @static * @memberOf _ @@ -8917,8 +8974,7 @@ * @category Collection * @param {Array|Object} collection The collection to iterate over. * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} - * [iteratees=[_.identity]] The iteratees to sort by, specified individually - * or in arrays. + * [iteratees=[_.identity]] The iteratees to sort by. * @returns {Array} Returns the new sorted array. * @example * @@ -8948,9 +9004,13 @@ if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { iteratees = []; } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees.length = 1; + iteratees = [iteratees[0]]; } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); + iteratees = (iteratees.length == 1 && isArray(iteratees[0])) + ? iteratees[0] + : baseFlatten(iteratees, 1, isFlattenableIteratee); + + return baseOrderBy(collection, iteratees, []); }); /*------------------------------------------------------------------------*/ @@ -9313,12 +9373,13 @@ function debounce(func, wait, options) { var lastArgs, lastThis, + maxWait, result, timerId, lastCallTime = 0, lastInvokeTime = 0, leading = false, - maxWait = false, + maxing = false, trailing = true; if (typeof func != 'function') { @@ -9327,7 +9388,8 @@ wait = toNumber(wait) || 0; if (isObject(options)) { leading = !!options.leading; - maxWait = 'maxWait' in options && nativeMax(toNumber(options.maxWait) || 0, wait); + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; trailing = 'trailing' in options ? !!options.trailing : trailing; } @@ -9355,7 +9417,7 @@ timeSinceLastInvoke = time - lastInvokeTime, result = wait - timeSinceLastCall; - return maxWait === false ? result : nativeMin(result, maxWait - timeSinceLastInvoke); + return maxing ? nativeMin(result, maxWait - timeSinceLastInvoke) : result; } function shouldInvoke(time) { @@ -9366,7 +9428,7 @@ // trailing edge, the system time has gone backwards and we're treating // it as the trailing edge, or we've hit the `maxWait` limit. return (!lastCallTime || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxWait !== false && timeSinceLastInvoke >= maxWait)); + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); } function timerExpired() { @@ -9415,10 +9477,15 @@ if (timerId === undefined) { return leadingEdge(lastCallTime); } - // Handle invocations in a tight loop. - clearTimeout(timerId); + if (maxing) { + // Handle invocations in a tight loop. + clearTimeout(timerId); + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); } return result; } @@ -9621,8 +9688,8 @@ * @memberOf _ * @category Function * @param {Function} func The function to wrap. - * @param {...(Function|Function[])} [transforms] The functions to transform. - * arguments, specified individually or in arrays. + * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} + * [transforms[_.identity]] The functions to transform. * @returns {Function} Returns the new function. * @example * @@ -9645,7 +9712,10 @@ * // => [100, 10] */ var overArgs = rest(function(func, transforms) { - transforms = arrayMap(baseFlatten(transforms, 1, isFlattenableIteratee), getIteratee()); + transforms = (transforms.length == 1 && isArray(transforms[0])) + ? arrayMap(transforms[0], baseUnary(getIteratee())) + : arrayMap(baseFlatten(transforms, 1, isFlattenableIteratee), baseUnary(getIteratee())); + var funcsLength = transforms.length; return rest(function(args) { var index = -1, @@ -9744,8 +9814,7 @@ * @since 3.0.0 * @category Function * @param {Function} func The function to rearrange arguments for. - * @param {...(number|number[])} indexes The arranged argument indexes, - * specified individually or in arrays. + * @param {...(number|number[])} indexes The arranged argument indexes. * @returns {Function} Returns the new function. * @example * @@ -9855,7 +9924,7 @@ start = start === undefined ? 0 : nativeMax(toInteger(start), 0); return rest(function(args) { var array = args[start], - otherArgs = args.slice(0, start); + otherArgs = castSlice(args, 0, start); if (array) { arrayPush(otherArgs, array); @@ -11503,8 +11572,8 @@ } /** - * Converts `value` to a string if it's not one. An empty string is returned - * for `null` and `undefined` values. The sign of `-0` is preserved. + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ @@ -11652,7 +11721,7 @@ * // => { 'a': 1, 'b': 2 } */ var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObjectWith(source, keysIn(source), object, customizer); + copyObject(source, keysIn(source), object, customizer); }); /** @@ -11683,7 +11752,7 @@ * // => { 'a': 1, 'b': 2 } */ var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObjectWith(source, keys(source), object, customizer); + copyObject(source, keys(source), object, customizer); }); /** @@ -11694,8 +11763,7 @@ * @since 1.0.0 * @category Object * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths of elements to pick, - * specified individually or in arrays. + * @param {...(string|string[])} [paths] The property paths of elements to pick. * @returns {Array} Returns the new array of picked elements. * @example * @@ -11881,9 +11949,9 @@ /** * Iterates over own and inherited enumerable string keyed properties of an - * object invoking `iteratee` for each property. The iteratee is invoked with - * three arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. + * object and invokes `iteratee` for each property. The iteratee is invoked + * with three arguments: (value, key, object). Iteratee functions may exit + * iteration early by explicitly returning `false`. * * @static * @memberOf _ @@ -11944,10 +12012,10 @@ } /** - * Iterates over own enumerable string keyed properties of an object invoking - * `iteratee` for each property. The iteratee is invoked with three arguments: - * (value, key, object). Iteratee functions may exit iteration early by - * explicitly returning `false`. + * Iterates over own enumerable string keyed properties of an object and + * invokes `iteratee` for each property. The iteratee is invoked with three + * arguments: (value, key, object). Iteratee functions may exit iteration + * early by explicitly returning `false`. * * @static * @memberOf _ @@ -12470,8 +12538,7 @@ * @memberOf _ * @category Object * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to omit, - * specified individually or in arrays. + * @param {...(string|string[])} [props] The property identifiers to omit. * @returns {Object} Returns the new object. * @example * @@ -12484,7 +12551,7 @@ if (object == null) { return {}; } - props = arrayMap(baseFlatten(props, 1), baseCastKey); + props = arrayMap(baseFlatten(props, 1), toKey); return basePick(object, baseDifference(getAllKeysIn(object), props)); }); @@ -12524,8 +12591,7 @@ * @memberOf _ * @category Object * @param {Object} object The source object. - * @param {...(string|string[])} [props] The property identifiers to pick, - * specified individually or in arrays. + * @param {...(string|string[])} [props] The property identifiers to pick. * @returns {Object} Returns the new object. * @example * @@ -12591,7 +12657,7 @@ * // => 'default' */ function result(object, path, defaultValue) { - path = isKey(path, object) ? [path] : baseCastPath(path); + path = isKey(path, object) ? [path] : castPath(path); var index = -1, length = path.length; @@ -12837,7 +12903,7 @@ * // => 0 */ function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, baseCastFunction(updater)); + return object == null ? object : baseUpdate(object, path, castFunction(updater)); } /** @@ -12866,7 +12932,7 @@ */ function updateWith(object, path, updater, customizer) { customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, baseCastFunction(updater), customizer); + return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); } /** @@ -13513,7 +13579,7 @@ var args = arguments, string = toString(args[0]); - return args.length < 3 ? string : string.replace(args[1], args[2]); + return args.length < 3 ? string : nativeReplace.call(string, args[1], args[2]); } /** @@ -13561,6 +13627,13 @@ * // => ['a', 'b'] */ function split(string, separator, limit) { + if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { + separator = limit = undefined; + } + limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; + if (!limit) { + return []; + } string = toString(string); if (string && ( typeof separator == 'string' || @@ -13568,11 +13641,10 @@ )) { separator += ''; if (separator == '' && reHasComplexSymbol.test(string)) { - var strSymbols = stringToArray(string); - return limit === undefined ? strSymbols : strSymbols.slice(0, limit < 0 ? 0 : limit); + return castSlice(stringToArray(string), 0, limit); } } - return string.split(separator, limit); + return nativeSplit.call(string, separator, limit); } /** @@ -13920,16 +13992,15 @@ if (guard || chars === undefined) { return string.replace(reTrim, ''); } - chars = (chars + ''); - if (!chars) { + if (!(chars += '')) { return string; } var strSymbols = stringToArray(string), - chrSymbols = stringToArray(chars); + chrSymbols = stringToArray(chars), + start = charsStartIndex(strSymbols, chrSymbols), + end = charsEndIndex(strSymbols, chrSymbols) + 1; - return strSymbols - .slice(charsStartIndex(strSymbols, chrSymbols), charsEndIndex(strSymbols, chrSymbols) + 1) - .join(''); + return castSlice(strSymbols, start, end).join(''); } /** @@ -13959,14 +14030,13 @@ if (guard || chars === undefined) { return string.replace(reTrimEnd, ''); } - chars = (chars + ''); - if (!chars) { + if (!(chars += '')) { return string; } - var strSymbols = stringToArray(string); - return strSymbols - .slice(0, charsEndIndex(strSymbols, stringToArray(chars)) + 1) - .join(''); + var strSymbols = stringToArray(string), + end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; + + return castSlice(strSymbols, 0, end).join(''); } /** @@ -13996,14 +14066,13 @@ if (guard || chars === undefined) { return string.replace(reTrimStart, ''); } - chars = (chars + ''); - if (!chars) { + if (!(chars += '')) { return string; } - var strSymbols = stringToArray(string); - return strSymbols - .slice(charsStartIndex(strSymbols, stringToArray(chars))) - .join(''); + var strSymbols = stringToArray(string), + start = charsStartIndex(strSymbols, stringToArray(chars)); + + return castSlice(strSymbols, start).join(''); } /** @@ -14067,7 +14136,7 @@ return omission; } var result = strSymbols - ? strSymbols.slice(0, end).join('') + ? castSlice(strSymbols, 0, end).join('') : string.slice(0, end); if (separator === undefined) { @@ -14240,8 +14309,7 @@ * @memberOf _ * @category Util * @param {Object} object The object to bind and assign the bound methods to. - * @param {...(string|string[])} methodNames The object method names to bind, - * specified individually or in arrays. + * @param {...(string|string[])} methodNames The object method names to bind. * @returns {Object} Returns `object`. * @example * @@ -14264,7 +14332,7 @@ }); /** - * Creates a function that iterates over `pairs` invoking the corresponding + * Creates a function that iterates over `pairs` and invokes the corresponding * function of the first predicate to return truthy. The predicate-function * pairs are invoked with the `this` binding and arguments of the created * function. @@ -14635,7 +14703,7 @@ object = this; methodNames = baseFunctions(source, keys(source)); } - var chain = (isObject(options) && 'chain' in options) ? options.chain : true, + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, isFunc = isFunction(object); arrayEach(methodNames, function(methodName) { @@ -14700,7 +14768,8 @@ } /** - * Creates a function that returns its nth argument. + * Creates a function that returns its nth argument. If `n` is negative, + * the nth argument from the end is returned. * * @static * @memberOf _ @@ -14711,15 +14780,18 @@ * @example * * var func = _.nthArg(1); - * - * func('a', 'b', 'c'); + * func('a', 'b', 'c', 'd'); * // => 'b' + * + * var func = _.nthArg(-2); + * func('a', 'b', 'c', 'd'); + * // => 'c' */ function nthArg(n) { n = toInteger(n); - return function() { - return arguments[n]; - }; + return rest(function(args) { + return baseNth(args, n); + }); } /** @@ -14730,7 +14802,8 @@ * @memberOf _ * @since 4.0.0 * @category Util - * @param {...(Function|Function[])} iteratees The iteratees to invoke. + * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} + * [iteratees=[_.identity]] The iteratees to invoke. * @returns {Function} Returns the new function. * @example * @@ -14749,7 +14822,8 @@ * @memberOf _ * @since 4.0.0 * @category Util - * @param {...(Function|Function[])} predicates The predicates to check. + * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} + * [predicates=[_.identity]] The predicates to check. * @returns {Function} Returns the new function. * @example * @@ -14774,7 +14848,8 @@ * @memberOf _ * @since 4.0.0 * @category Util - * @param {...(Function|Function[])} predicates The predicates to check. + * @param {...(Array|Array[]|Function|Function[]|Object|Object[]|string|string[])} + * [predicates=[_.identity]] The predicates to check. * @returns {Function} Returns the new function. * @example * @@ -14988,7 +15063,7 @@ */ function toPath(value) { if (isArray(value)) { - return arrayMap(value, baseCastKey); + return arrayMap(value, toKey); } return isSymbol(value) ? [value] : copyArray(stringToPath(value)); } @@ -15624,6 +15699,7 @@ lodash.min = min; lodash.minBy = minBy; lodash.multiply = multiply; + lodash.nth = nth; lodash.noConflict = noConflict; lodash.noop = noop; lodash.now = now; |