Compare commits

...

3 Commits

Author SHA1 Message Date
John-David Dalton
8bff780a94 Bump to v4.3.0. 2016-02-08 00:50:21 -08:00
John-David Dalton
f18e5950b9 Bump to v4.2.1. 2016-02-03 00:54:36 -08:00
John-David Dalton
365d103439 Bump to v4.2.0. 2016-02-02 00:03:23 -08:00
98 changed files with 523 additions and 227 deletions

33
LICENSE
View File

@@ -1,22 +1,23 @@
The MIT License (MIT)
Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,4 +1,4 @@
# lodash-es v4.1.0
# lodash-es v4.3.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.1.0-es) for more details.
See the [package source](https://github.com/lodash/lodash/tree/4.3.0-es) for more details.

View File

@@ -5,11 +5,11 @@
* @private
* @param {Function} func The function to invoke.
* @param {*} thisArg The `this` binding of `func`.
* @param {...*} [args] The arguments to invoke `func` with.
* @param {...*} args The arguments to invoke `func` with.
* @returns {*} Returns the result of `func`.
*/
function apply(func, thisArg, args) {
var length = args ? args.length : 0;
var length = args.length;
switch (length) {
case 0: return func.call(thisArg);
case 1: return func.call(thisArg, args[0]);

View File

@@ -3,6 +3,7 @@ import arrayEach from './_arrayEach';
import assignValue from './_assignValue';
import baseAssign from './_baseAssign';
import baseForOwn from './_baseForOwn';
import cloneBuffer from './_cloneBuffer';
import copyArray from './_copyArray';
import copySymbols from './_copySymbols';
import getTag from './_getTag';
@@ -10,6 +11,7 @@ import initCloneArray from './_initCloneArray';
import initCloneByTag from './_initCloneByTag';
import initCloneObject from './_initCloneObject';
import isArray from './isArray';
import isBuffer from './isBuffer';
import isHostObject from './_isHostObject';
import isObject from './isObject';
@@ -91,6 +93,9 @@ function baseClone(value, isDeep, customizer, key, object, stack) {
var tag = getTag(value),
isFunc = tag == funcTag || tag == genTag;
if (isBuffer(value)) {
return cloneBuffer(value, isDeep);
}
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
if (isHostObject(value)) {
return object ? value : {};

View File

@@ -8,7 +8,7 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* @private
* @param {Function} func The function to delay.
* @param {number} wait The number of milliseconds to delay invocation.
* @param {Object} args The arguments provide to `func`.
* @param {Object} args The arguments to provide to `func`.
* @returns {number} Returns the timer id.
*/
function baseDelay(func, wait, args) {

View File

@@ -3,7 +3,7 @@ import isFunction from './isFunction';
/**
* The base implementation of `_.functions` which creates an array of
* `object` function property names filtered from those provided.
* `object` function property names filtered from `props`.
*
* @private
* @param {Object} object The object to inspect.

View File

@@ -17,7 +17,7 @@ function baseSum(array, iteratee) {
result = result === undefined ? current : (result + current);
}
}
return length ? result : 0;
return result;
}
export default baseSum;

19
_cloneArrayBuffer.js Normal file
View File

@@ -0,0 +1,19 @@
import Uint8Array from './_Uint8Array';
/**
* Creates a clone of `arrayBuffer`.
*
* @private
* @param {ArrayBuffer} arrayBuffer The array buffer to clone.
* @returns {ArrayBuffer} Returns the cloned array buffer.
*/
function cloneArrayBuffer(arrayBuffer) {
var Ctor = arrayBuffer.constructor,
result = new Ctor(arrayBuffer.byteLength),
view = new Uint8Array(result);
view.set(new Uint8Array(arrayBuffer));
return result;
}
export default cloneArrayBuffer;

View File

@@ -1,18 +1,19 @@
import Uint8Array from './_Uint8Array';
/**
* Creates a clone of `buffer`.
* Creates a clone of `buffer`.
*
* @private
* @param {ArrayBuffer} buffer The array buffer to clone.
* @returns {ArrayBuffer} Returns the cloned array buffer.
* @param {Buffer} buffer The buffer to clone.
* @param {boolean} [isDeep] Specify a deep clone.
* @returns {Buffer} Returns the cloned buffer.
*/
function cloneBuffer(buffer) {
function cloneBuffer(buffer, isDeep) {
if (isDeep) {
return buffer.slice();
}
var Ctor = buffer.constructor,
result = new Ctor(buffer.byteLength),
view = new Uint8Array(result);
result = new Ctor(buffer.length);
view.set(new Uint8Array(buffer));
buffer.copy(result);
return result;
}

View File

@@ -1,4 +1,4 @@
import cloneBuffer from './_cloneBuffer';
import cloneArrayBuffer from './_cloneArrayBuffer';
/**
* Creates a clone of `typedArray`.
@@ -12,7 +12,7 @@ function cloneTypedArray(typedArray, isDeep) {
var buffer = typedArray.buffer,
Ctor = typedArray.constructor;
return new Ctor(isDeep ? cloneBuffer(buffer) : buffer, typedArray.byteOffset, typedArray.length);
return new Ctor(isDeep ? cloneArrayBuffer(buffer) : buffer, typedArray.byteOffset, typedArray.length);
}
export default cloneTypedArray;

View File

@@ -1,10 +1,12 @@
import Map from './_Map';
import Set from './_Set';
import WeakMap from './_WeakMap';
/** `Object#toString` result references. */
var mapTag = '[object Map]',
objectTag = '[object Object]',
setTag = '[object Set]';
setTag = '[object Set]',
weakMapTag = '[object WeakMap]';
/** Used for built-in method references. */
var objectProto = Object.prototype;
@@ -18,9 +20,10 @@ var funcToString = Function.prototype.toString;
*/
var objectToString = objectProto.toString;
/** Used to detect maps and sets. */
/** Used to detect maps, sets, and weakmaps. */
var mapCtorString = Map ? funcToString.call(Map) : '',
setCtorString = Set ? funcToString.call(Set) : '';
setCtorString = Set ? funcToString.call(Set) : '',
weakMapCtorString = WeakMap ? funcToString.call(WeakMap) : '';
/**
* Gets the `toStringTag` of `value`.
@@ -33,19 +36,20 @@ function getTag(value) {
return objectToString.call(value);
}
// Fallback for IE 11 providing `toStringTag` values for maps and sets.
if ((Map && getTag(new Map) != mapTag) || (Set && getTag(new Set) != setTag)) {
// Fallback for IE 11 providing `toStringTag` values for maps, sets, and weakmaps.
if ((Map && getTag(new Map) != mapTag) ||
(Set && getTag(new Set) != setTag) ||
(WeakMap && getTag(new WeakMap) != weakMapTag)) {
getTag = function(value) {
var result = objectToString.call(value),
Ctor = result == objectTag ? value.constructor : null,
ctorString = typeof Ctor == 'function' ? funcToString.call(Ctor) : '';
if (ctorString) {
if (ctorString == mapCtorString) {
return mapTag;
}
if (ctorString == setCtorString) {
return setTag;
switch (ctorString) {
case mapCtorString: return mapTag;
case setCtorString: return setTag;
case weakMapCtorString: return weakMapTag;
}
}
return result;

View File

@@ -1,4 +1,4 @@
import cloneBuffer from './_cloneBuffer';
import cloneArrayBuffer from './_cloneArrayBuffer';
import cloneMap from './_cloneMap';
import cloneRegExp from './_cloneRegExp';
import cloneSet from './_cloneSet';
@@ -42,7 +42,7 @@ function initCloneByTag(object, tag, isDeep) {
var Ctor = object.constructor;
switch (tag) {
case arrayBufferTag:
return cloneBuffer(object);
return cloneArrayBuffer(object);
case boolTag:
case dateTag:

View File

@@ -4,7 +4,7 @@ import isIndex from './_isIndex';
import isObject from './isObject';
/**
* Checks if the provided arguments are from an iteratee call.
* Checks if the given arguments are from an iteratee call.
*
* @private
* @param {*} value The potential iteratee value argument.

3
add.js
View File

@@ -14,6 +14,9 @@
*/
function add(augend, addend) {
var result;
if (augend === undefined && addend === undefined) {
return 0;
}
if (augend !== undefined) {
result = augend;
}

View File

@@ -11,7 +11,6 @@ import dropWhile from './dropWhile';
import fill from './fill';
import findIndex from './findIndex';
import findLastIndex from './findLastIndex';
import flatMap from './flatMap';
import flatten from './flatten';
import flattenDeep from './flattenDeep';
import fromPairs from './fromPairs';
@@ -64,15 +63,15 @@ import zipWith from './zipWith';
export default {
chunk, compact, concat, difference, differenceBy,
differenceWith, drop, dropRight, dropRightWhile, dropWhile,
fill, findIndex, findLastIndex, flatMap, flatten,
flattenDeep, fromPairs, head, indexOf, initial,
intersection, intersectionBy, intersectionWith, join, last,
lastIndexOf, pull, pullAll, pullAllBy, pullAt,
remove, reverse, slice, sortedIndex, sortedIndexBy,
sortedIndexOf, sortedLastIndex, sortedLastIndexBy, sortedLastIndexOf, sortedUniq,
sortedUniqBy, tail, take, takeRight, takeRightWhile,
takeWhile, union, unionBy, unionWith, uniq,
uniqBy, uniqWith, unzip, unzipWith, without,
xor, xorBy, xorWith, zip, zipObject,
zipObjectDeep, zipWith
fill, findIndex, findLastIndex, flatten, flattenDeep,
fromPairs, head, indexOf, initial, intersection,
intersectionBy, intersectionWith, join, last, lastIndexOf,
pull, pullAll, pullAllBy, pullAt, remove,
reverse, slice, sortedIndex, sortedIndexBy, sortedIndexOf,
sortedLastIndex, sortedLastIndexBy, sortedLastIndexOf, sortedUniq, sortedUniqBy,
tail, take, takeRight, takeRightWhile, takeWhile,
union, unionBy, unionWith, uniq, uniqBy,
uniqWith, unzip, unzipWith, without, xor,
xorBy, xorWith, zip, zipObject, zipObjectDeep,
zipWith
};

View File

@@ -11,7 +11,6 @@ export { default as dropWhile } from './dropWhile';
export { default as fill } from './fill';
export { default as findIndex } from './findIndex';
export { default as findLastIndex } from './findLastIndex';
export { default as flatMap } from './flatMap';
export { default as flatten } from './flatten';
export { default as flattenDeep } from './flattenDeep';
export { default as fromPairs } from './fromPairs';

View File

@@ -1,5 +1,5 @@
import apply from './_apply';
import isError from './isError';
import isObject from './isObject';
import rest from './rest';
/**
@@ -13,7 +13,7 @@ import rest from './rest';
* @returns {*} Returns the `func` result or error object.
* @example
*
* // avoid throwing errors for invalid selectors
* // Avoid throwing errors for invalid selectors.
* var elements = _.attempt(function(selector) {
* return document.querySelectorAll(selector);
* }, '>_>');
@@ -26,7 +26,7 @@ var attempt = rest(function(func, args) {
try {
return apply(func, undefined, args);
} catch (e) {
return isError(e) ? e : new Error(e);
return isObject(e) ? e : new Error(e);
}
});

View File

@@ -36,7 +36,7 @@ var BIND_FLAG = 1,
* bound('!');
* // => 'hi fred!'
*
* // using placeholders
* // Bound with placeholders.
* var bound = _.bind(greet, object, _, '!');
* bound('hi');
* // => 'hi fred!'
@@ -44,10 +44,15 @@ var BIND_FLAG = 1,
var bind = rest(function(func, thisArg, partials) {
var bitmask = BIND_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, bind.placeholder);
var placeholder = bind.placeholder,
holders = replaceHolders(partials, placeholder);
bitmask |= PARTIAL_FLAG;
}
return createWrapper(func, bitmask, thisArg, partials, holders);
});
// Assign default placeholders.
bind.placeholder = {};
export default bind;

View File

@@ -46,7 +46,7 @@ var BIND_FLAG = 1,
* bound('!');
* // => 'hiya fred!'
*
* // using placeholders
* // Bound with placeholders.
* var bound = _.bindKey(object, 'greet', _, '!');
* bound('hi');
* // => 'hiya fred!'
@@ -54,10 +54,15 @@ var BIND_FLAG = 1,
var bindKey = rest(function(object, key, partials) {
var bitmask = BIND_FLAG | BIND_KEY_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, bindKey.placeholder);
var placeholder = bindKey.placeholder,
holders = replaceHolders(partials, placeholder);
bitmask |= PARTIAL_FLAG;
}
return createWrapper(key, bitmask, object, partials, holders);
});
// Assign default placeholders.
bindKey.placeholder = {};
export default bindKey;

View File

@@ -6,6 +6,7 @@ import every from './every';
import filter from './filter';
import find from './find';
import findLast from './findLast';
import flatMap from './flatMap';
import forEach from './forEach';
import forEachRight from './forEachRight';
import groupBy from './groupBy';
@@ -27,9 +28,9 @@ import sortBy from './sortBy';
export default {
at, countBy, each, eachRight, every,
filter, find, findLast, forEach, forEachRight,
groupBy, includes, invokeMap, keyBy, map,
orderBy, partition, reduce, reduceRight, reject,
sample, sampleSize, shuffle, size, some,
sortBy
filter, find, findLast, flatMap, forEach,
forEachRight, groupBy, includes, invokeMap, keyBy,
map, orderBy, partition, reduce, reduceRight,
reject, sample, sampleSize, shuffle, size,
some, sortBy
};

View File

@@ -6,6 +6,7 @@ export { default as every } from './every';
export { default as filter } from './filter';
export { default as find } from './find';
export { default as findLast } from './findLast';
export { default as flatMap } from './flatMap';
export { default as forEach } from './forEach';
export { default as forEachRight } from './forEachRight';
export { default as groupBy } from './groupBy';

View File

@@ -3,7 +3,7 @@ import baseCreate from './_baseCreate';
/**
* Creates an object that inherits from the `prototype` object. If a `properties`
* object is provided its own enumerable properties are assigned to the created object.
* object is given its own enumerable properties are assigned to the created object.
*
* @static
* @memberOf _

View File

@@ -39,7 +39,7 @@ var CURRY_FLAG = 8;
* curried(1, 2, 3);
* // => [1, 2, 3]
*
* // using placeholders
* // Curried with placeholders.
* curried(1)(_, 3)(2);
* // => [1, 2, 3]
*/
@@ -50,4 +50,7 @@ function curry(func, arity, guard) {
return result;
}
// Assign default placeholders.
curry.placeholder = {};
export default curry;

View File

@@ -36,7 +36,7 @@ var CURRY_RIGHT_FLAG = 16;
* curried(1, 2, 3);
* // => [1, 2, 3]
*
* // using placeholders
* // Curried with placeholders.
* curried(3)(1, _)(2);
* // => [1, 2, 3]
*/
@@ -47,4 +47,7 @@ function curryRight(func, arity, guard) {
return result;
}
// Assign default placeholders.
curryRight.placeholder = {};
export default curryRight;

View File

@@ -19,7 +19,7 @@ var nativeMax = Math.max;
* to the debounced function return the result of the last `func` invocation.
*
* **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
* on the trailing edge of the timeout only if the the debounced function is
* on the trailing edge of the timeout only if the debounced function is
* invoked more than once during the `wait` timeout.
*
* See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
@@ -40,21 +40,21 @@ var nativeMax = Math.max;
* @returns {Function} Returns the new debounced function.
* @example
*
* // avoid costly calculations while the window size is in flux
* // Avoid costly calculations while the window size is in flux.
* jQuery(window).on('resize', _.debounce(calculateLayout, 150));
*
* // invoke `sendMail` when clicked, debouncing subsequent calls
* // Invoke `sendMail` when clicked, debouncing subsequent calls.
* jQuery(element).on('click', _.debounce(sendMail, 300, {
* 'leading': true,
* 'trailing': false
* }));
*
* // ensure `batchLog` is invoked once after 1 second of debounced calls
* // Ensure `batchLog` is invoked once after 1 second of debounced calls.
* var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
* var source = new EventSource('/stream');
* jQuery(source).on('message', debounced);
*
* // cancel a trailing debounced invocation
* // Cancel the trailing debounced invocation.
* jQuery(window).on('popstate', debounced.cancel);
*/
function debounce(func, wait, options) {
@@ -135,7 +135,7 @@ function debounce(func, wait, options) {
if (maxWait === false) {
var leadingCall = leading && !timeoutId;
} else {
if (!maxTimeoutId && !leading) {
if (!lastCalled && !maxTimeoutId && !leading) {
lastCalled = stamp;
}
var remaining = maxWait - (stamp - lastCalled),

View File

@@ -16,7 +16,7 @@ import rest from './rest';
* _.defer(function(text) {
* console.log(text);
* }, 'deferred');
* // logs 'deferred' after one or more milliseconds
* // => logs 'deferred' after one or more milliseconds
*/
var defer = rest(function(func, args) {
return baseDelay(func, 1, args);

View File

@@ -5,7 +5,7 @@ import rest from './rest';
/**
* Creates an array of unique `array` values not included in the other
* provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* given arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* for equality comparisons.
*
* @static

View File

@@ -22,7 +22,7 @@ import rest from './rest';
* _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
* // => [3.1, 1.3]
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
* // => [{ 'x': 2 }]
*/

View File

@@ -23,15 +23,15 @@ import baseWhile from './_baseWhile';
* _.dropRightWhile(users, function(o) { return !o.active; });
* // => objects for ['barney']
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
* // => objects for ['barney', 'fred']
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.dropRightWhile(users, ['active', false]);
* // => objects for ['barney']
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.dropRightWhile(users, 'active');
* // => objects for ['barney', 'fred', 'pebbles']
*/

View File

@@ -23,15 +23,15 @@ import baseWhile from './_baseWhile';
* _.dropWhile(users, function(o) { return !o.active; });
* // => objects for ['pebbles']
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.dropWhile(users, { 'user': 'barney', 'active': false });
* // => objects for ['fred', 'pebbles']
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.dropWhile(users, ['active', false]);
* // => objects for ['pebbles']
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.dropWhile(users, 'active');
* // => objects for ['barney', 'fred', 'pebbles']
*/

View File

@@ -26,15 +26,15 @@ import isIterateeCall from './_isIterateeCall';
* { 'user': 'fred', 'active': false }
* ];
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.every(users, { 'user': 'barney', 'active': false });
* // => false
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.every(users, ['active', false]);
* // => true
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.every(users, 'active');
* // => false
*/

View File

@@ -24,15 +24,15 @@ import isArray from './isArray';
* _.filter(users, function(o) { return !o.active; });
* // => objects for ['fred']
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.filter(users, { 'age': 36, 'active': true });
* // => objects for ['barney']
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.filter(users, ['active', false]);
* // => objects for ['fred']
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.filter(users, 'active');
* // => objects for ['barney']
*/

View File

@@ -26,15 +26,15 @@ import isArray from './isArray';
* _.find(users, function(o) { return o.age < 40; });
* // => object for 'barney'
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.find(users, { 'age': 1, 'active': true });
* // => object for 'pebbles'
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.find(users, ['active', false]);
* // => object for 'fred'
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.find(users, 'active');
* // => object for 'barney'
*/

View File

@@ -22,15 +22,15 @@ import baseIteratee from './_baseIteratee';
* _.findIndex(users, function(o) { return o.user == 'barney'; });
* // => 0
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.findIndex(users, { 'user': 'fred', 'active': false });
* // => 1
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.findIndex(users, ['active', false]);
* // => 0
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.findIndex(users, 'active');
* // => 2
*/

View File

@@ -23,15 +23,15 @@ import baseIteratee from './_baseIteratee';
* _.findKey(users, function(o) { return o.age < 40; });
* // => 'barney' (iteration order is not guaranteed)
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.findKey(users, { 'age': 1, 'active': true });
* // => 'pebbles'
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.findKey(users, ['active', false]);
* // => 'fred'
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.findKey(users, 'active');
* // => 'barney'
*/

View File

@@ -22,15 +22,15 @@ import baseIteratee from './_baseIteratee';
* _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
* // => 2
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.findLastIndex(users, { 'user': 'barney', 'active': true });
* // => 0
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.findLastIndex(users, ['active', false]);
* // => 2
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.findLastIndex(users, 'active');
* // => 0
*/

View File

@@ -23,15 +23,15 @@ import baseIteratee from './_baseIteratee';
* _.findLastKey(users, function(o) { return o.age < 40; });
* // => returns 'pebbles' assuming `_.findKey` returns 'barney'
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.findLastKey(users, { 'age': 36, 'active': true });
* // => 'barney'
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.findLastKey(users, ['active', false]);
* // => 'fred'
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.findLastKey(users, 'active');
* // => 'pebbles'
*/

View File

@@ -1,18 +1,17 @@
import arrayMap from './_arrayMap';
import baseFlatten from './_baseFlatten';
import baseIteratee from './_baseIteratee';
import map from './map';
/**
* Creates an array of flattened values by running each element in `array`
* Creates an array of flattened values by running each element in `collection`
* through `iteratee` and concating its result to the other mapped values.
* The iteratee is invoked with three arguments: (value, index|key, array).
* The iteratee is invoked with three arguments: (value, index|key, collection).
*
* @static
* @memberOf _
* @category Array
* @param {Array} array The array to iterate over.
* @category Collection
* @param {Array|Object} collection The collection to iterate over.
* @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration.
* @returns {Array} Returns the new array.
* @returns {Array} Returns the new flattened array.
* @example
*
* function duplicate(n) {
@@ -22,9 +21,8 @@ import baseIteratee from './_baseIteratee';
* _.flatMap([1, 2], duplicate);
* // => [1, 1, 2, 2]
*/
function flatMap(array, iteratee) {
var length = array ? array.length : 0;
return length ? baseFlatten(arrayMap(array, baseIteratee(iteratee, 3))) : [];
function flatMap(collection, iteratee) {
return baseFlatten(map(collection, iteratee));
}
export default flatMap;

View File

@@ -1,9 +1,9 @@
import createFlow from './_createFlow';
/**
* Creates a function that returns the result of invoking the provided
* functions with the `this` binding of the created function, where each
* successive invocation is supplied the return value of the previous.
* Creates a function that returns the result of invoking the given functions
* with the `this` binding of the created function, where each successive
* invocation is supplied the return value of the previous.
*
* @static
* @memberOf _

View File

@@ -2,7 +2,7 @@ import createFlow from './_createFlow';
/**
* This method is like `_.flow` except that it creates a function that
* invokes the provided functions from right to left.
* invokes the given functions from right to left.
*
* @static
* @memberOf _

View File

@@ -23,7 +23,7 @@ var hasOwnProperty = objectProto.hasOwnProperty;
* _.groupBy([6.1, 4.2, 6.3], Math.floor);
* // => { '4': [4.2], '6': [6.1, 6.3] }
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.groupBy(['one', 'two', 'three'], 'length');
* // => { '3': ['one', 'two'], '5': ['three'] }
*/

View File

@@ -1,5 +1,5 @@
/**
* This method returns the first argument provided to it.
* This method returns the first argument given to it.
*
* @static
* @memberOf _

View File

@@ -8,8 +8,7 @@ var nativeMax = Math.max;
* Gets the index at which the first occurrence of `value` is found in `array`
* using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* for equality comparisons. If `fromIndex` is negative, it's used as the offset
* from the end of `array`. If `array` is sorted providing `true` for `fromIndex`
* performs a faster binary search.
* from the end of `array`.
*
* @static
* @memberOf _
@@ -23,7 +22,7 @@ var nativeMax = Math.max;
* _.indexOf([1, 2, 1, 2], 2);
* // => 1
*
* // using `fromIndex`
* // Search from the `fromIndex`.
* _.indexOf([1, 2, 1, 2], 2, 2);
* // => 3
*/

View File

@@ -4,8 +4,8 @@ import rest from './rest';
import toArrayLikeObject from './_toArrayLikeObject';
/**
* Creates an array of unique values that are included in all of the provided
* arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* Creates an array of unique values that are included in all given arrays
* using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* for equality comparisons.
*
* @static

View File

@@ -21,7 +21,7 @@ import toArrayLikeObject from './_toArrayLikeObject';
* _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [2.1]
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }]
*/

35
isArrayBuffer.js Normal file
View File

@@ -0,0 +1,35 @@
import isObjectLike from './isObjectLike';
var arrayBufferTag = '[object ArrayBuffer]';
/** Used for built-in method references. */
var objectProto = Object.prototype;
/**
* Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
* of values.
*/
var objectToString = objectProto.toString;
/**
* Checks if `value` is classified as an `ArrayBuffer` object.
*
* @static
* @memberOf _
* @type Function
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
* @example
*
* _.isArrayBuffer(new ArrayBuffer(2));
* // => true
*
* _.isArrayBuffer(new Array(2));
* // => false
*/
function isArrayBuffer(value) {
return isObjectLike(value) && objectToString.call(value) == arrayBufferTag;
}
export default isArrayBuffer;

42
isBuffer.js Normal file
View File

@@ -0,0 +1,42 @@
import constant from './constant';
import root from './_root';
/** Used to determine if values are of the language type `Object`. */
var objectTypes = {
'function': true,
'object': true
};
/** Detect free variable `exports`. */
var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null;
/** Detect free variable `module`. */
var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null;
/** Detect the popular CommonJS extension `module.exports`. */
var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null;
/** Built-in value references. */
var Buffer = moduleExports ? root.Buffer : undefined;
/**
* Checks if `value` is a buffer.
*
* @static
* @memberOf _
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
* @example
*
* _.isBuffer(new Buffer(2));
* // => true
*
* _.isBuffer(new Uint8Array(2));
* // => false
*/
var isBuffer = !Buffer ? constant(false) : function(value) {
return value instanceof Buffer;
};
export default isBuffer;

27
isMap.js Normal file
View File

@@ -0,0 +1,27 @@
import getTag from './_getTag';
import isObjectLike from './isObjectLike';
/** `Object#toString` result references. */
var mapTag = '[object Map]';
/**
* Checks if `value` is classified as a `Map` object.
*
* @static
* @memberOf _
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
* @example
*
* _.isMap(new Map);
* // => true
*
* _.isMap(new WeakMap);
* // => false
*/
function isMap(value) {
return isObjectLike(value) && getTag(value) == mapTag;
}
export default isMap;

27
isSet.js Normal file
View File

@@ -0,0 +1,27 @@
import getTag from './_getTag';
import isObjectLike from './isObjectLike';
/** `Object#toString` result references. */
var setTag = '[object Set]';
/**
* Checks if `value` is classified as a `Set` object.
*
* @static
* @memberOf _
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
* @example
*
* _.isSet(new Set);
* // => true
*
* _.isSet(new WeakSet);
* // => false
*/
function isSet(value) {
return isObjectLike(value) && getTag(value) == setTag;
}
export default isSet;

27
isWeakMap.js Normal file
View File

@@ -0,0 +1,27 @@
import getTag from './_getTag';
import isObjectLike from './isObjectLike';
/** `Object#toString` result references. */
var weakMapTag = '[object WeakMap]';
/**
* Checks if `value` is classified as a `WeakMap` object.
*
* @static
* @memberOf _
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
* @example
*
* _.isWeakMap(new WeakMap);
* // => true
*
* _.isWeakMap(new Map);
* // => false
*/
function isWeakMap(value) {
return isObjectLike(value) && getTag(value) == weakMapTag;
}
export default isWeakMap;

35
isWeakSet.js Normal file
View File

@@ -0,0 +1,35 @@
import isObjectLike from './isObjectLike';
/** `Object#toString` result references. */
var weakSetTag = '[object WeakSet]';
/** Used for built-in method references. */
var objectProto = Object.prototype;
/**
* Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
* of values.
*/
var objectToString = objectProto.toString;
/**
* Checks if `value` is classified as a `WeakSet` object.
*
* @static
* @memberOf _
* @category Lang
* @param {*} value The value to check.
* @returns {boolean} Returns `true` if `value` is correctly classified, else `false`.
* @example
*
* _.isWeakSet(new WeakSet);
* // => true
*
* _.isWeakSet(new Set);
* // => false
*/
function isWeakSet(value) {
return isObjectLike(value) && objectToString.call(value) == weakSetTag;
}
export default isWeakSet;

View File

@@ -1,7 +1,5 @@
import baseClone from './_baseClone';
import baseIteratee from './_baseIteratee';
import isArray from './isArray';
import isObjectLike from './isObjectLike';
import matches from './matches';
/**
* Creates a function that invokes `func` with the arguments of the created
@@ -21,7 +19,7 @@ import matches from './matches';
* { 'user': 'fred', 'age': 40 }
* ];
*
* // create custom iteratee shorthands
* // Create custom iteratee shorthands.
* _.iteratee = _.wrap(_.iteratee, function(callback, func) {
* var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func);
* return !p ? callback(func) : function(object) {
@@ -33,9 +31,7 @@ import matches from './matches';
* // => [{ 'user': 'fred', 'age': 40 }]
*/
function iteratee(func) {
return (isObjectLike(func) && !isArray(func))
? matches(func)
: baseIteratee(func);
return baseIteratee(typeof func == 'function' ? func : baseClone(func, true));
}
export default iteratee;

View File

@@ -7,9 +7,11 @@ import gt from './gt';
import gte from './gte';
import isArguments from './isArguments';
import isArray from './isArray';
import isArrayBuffer from './isArrayBuffer';
import isArrayLike from './isArrayLike';
import isArrayLikeObject from './isArrayLikeObject';
import isBoolean from './isBoolean';
import isBuffer from './isBuffer';
import isDate from './isDate';
import isElement from './isElement';
import isEmpty from './isEmpty';
@@ -20,6 +22,7 @@ import isFinite from './isFinite';
import isFunction from './isFunction';
import isInteger from './isInteger';
import isLength from './isLength';
import isMap from './isMap';
import isMatch from './isMatch';
import isMatchWith from './isMatchWith';
import isNaN from './isNaN';
@@ -32,10 +35,13 @@ import isObjectLike from './isObjectLike';
import isPlainObject from './isPlainObject';
import isRegExp from './isRegExp';
import isSafeInteger from './isSafeInteger';
import isSet from './isSet';
import isString from './isString';
import isSymbol from './isSymbol';
import isTypedArray from './isTypedArray';
import isUndefined from './isUndefined';
import isWeakMap from './isWeakMap';
import isWeakSet from './isWeakSet';
import lt from './lt';
import lte from './lte';
import toArray from './toArray';
@@ -48,13 +54,14 @@ import toString from './toString';
export default {
clone, cloneDeep, cloneDeepWith, cloneWith, eq,
gt, gte, isArguments, isArray, isArrayLike,
isArrayLikeObject, isBoolean, isDate, isElement, isEmpty,
isEqual, isEqualWith, isError, isFinite, isFunction,
isInteger, isLength, isMatch, isMatchWith, isNaN,
isNative, isNil, isNull, isNumber, isObject,
isObjectLike, isPlainObject, isRegExp, isSafeInteger, isString,
isSymbol, isTypedArray, isUndefined, lt, lte,
toArray, toInteger, toLength, toNumber, toPlainObject,
toSafeInteger, toString
gt, gte, isArguments, isArray, isArrayBuffer,
isArrayLike, isArrayLikeObject, isBoolean, isBuffer, isDate,
isElement, isEmpty, isEqual, isEqualWith, isError,
isFinite, isFunction, isInteger, isLength, isMap,
isMatch, isMatchWith, isNaN, isNative, isNil,
isNull, isNumber, isObject, isObjectLike, isPlainObject,
isRegExp, isSafeInteger, isSet, isString, isSymbol,
isTypedArray, isUndefined, isWeakMap, isWeakSet, lt,
lte, toArray, toInteger, toLength, toNumber,
toPlainObject, toSafeInteger, toString
};

View File

@@ -7,9 +7,11 @@ export { default as gt } from './gt';
export { default as gte } from './gte';
export { default as isArguments } from './isArguments';
export { default as isArray } from './isArray';
export { default as isArrayBuffer } from './isArrayBuffer';
export { default as isArrayLike } from './isArrayLike';
export { default as isArrayLikeObject } from './isArrayLikeObject';
export { default as isBoolean } from './isBoolean';
export { default as isBuffer } from './isBuffer';
export { default as isDate } from './isDate';
export { default as isElement } from './isElement';
export { default as isEmpty } from './isEmpty';
@@ -20,6 +22,7 @@ export { default as isFinite } from './isFinite';
export { default as isFunction } from './isFunction';
export { default as isInteger } from './isInteger';
export { default as isLength } from './isLength';
export { default as isMap } from './isMap';
export { default as isMatch } from './isMatch';
export { default as isMatchWith } from './isMatchWith';
export { default as isNaN } from './isNaN';
@@ -32,10 +35,13 @@ export { default as isObjectLike } from './isObjectLike';
export { default as isPlainObject } from './isPlainObject';
export { default as isRegExp } from './isRegExp';
export { default as isSafeInteger } from './isSafeInteger';
export { default as isSet } from './isSet';
export { default as isString } from './isString';
export { default as isSymbol } from './isSymbol';
export { default as isTypedArray } from './isTypedArray';
export { default as isUndefined } from './isUndefined';
export { default as isWeakMap } from './isWeakMap';
export { default as isWeakSet } from './isWeakSet';
export { default as lt } from './lt';
export { default as lte } from './lte';
export { default as toArray } from './toArray';

View File

@@ -21,7 +21,7 @@ var nativeMax = Math.max,
* _.lastIndexOf([1, 2, 1, 2], 2);
* // => 3
*
* // using `fromIndex`
* // Search from the `fromIndex`.
* _.lastIndexOf([1, 2, 1, 2], 2, 2);
* // => 1
*/

View File

@@ -1,6 +1,6 @@
/**
* @license
* lodash 4.1.0 (Custom Build) <https://lodash.com/>
* lodash 4.3.0 (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="es" -o ./`
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
@@ -44,7 +44,7 @@ import toInteger from './toInteger';
import lodash from './wrapperLodash';
/** Used as the semantic version number. */
var VERSION = '4.1.0';
var VERSION = '4.3.0';
/** Used to compose bitmasks for wrapper metadata. */
var BIND_KEY_FLAG = 2;
@@ -125,7 +125,7 @@ lodash.dropRightWhile = array.dropRightWhile;
lodash.dropWhile = array.dropWhile;
lodash.fill = array.fill;
lodash.filter = collection.filter;
lodash.flatMap = array.flatMap;
lodash.flatMap = collection.flatMap;
lodash.flatten = array.flatten;
lodash.flattenDeep = array.flattenDeep;
lodash.flip = func.flip;
@@ -282,9 +282,11 @@ lodash.inRange = number.inRange;
lodash.invoke = object.invoke;
lodash.isArguments = lang.isArguments;
lodash.isArray = isArray;
lodash.isArrayBuffer = lang.isArrayBuffer;
lodash.isArrayLike = lang.isArrayLike;
lodash.isArrayLikeObject = lang.isArrayLikeObject;
lodash.isBoolean = lang.isBoolean;
lodash.isBuffer = lang.isBuffer;
lodash.isDate = lang.isDate;
lodash.isElement = lang.isElement;
lodash.isEmpty = lang.isEmpty;
@@ -295,6 +297,7 @@ lodash.isFinite = lang.isFinite;
lodash.isFunction = lang.isFunction;
lodash.isInteger = lang.isInteger;
lodash.isLength = lang.isLength;
lodash.isMap = lang.isMap;
lodash.isMatch = lang.isMatch;
lodash.isMatchWith = lang.isMatchWith;
lodash.isNaN = lang.isNaN;
@@ -307,10 +310,13 @@ lodash.isObjectLike = lang.isObjectLike;
lodash.isPlainObject = lang.isPlainObject;
lodash.isRegExp = lang.isRegExp;
lodash.isSafeInteger = lang.isSafeInteger;
lodash.isSet = lang.isSet;
lodash.isString = lang.isString;
lodash.isSymbol = lang.isSymbol;
lodash.isTypedArray = lang.isTypedArray;
lodash.isUndefined = lang.isUndefined;
lodash.isWeakMap = lang.isWeakMap;
lodash.isWeakSet = lang.isWeakSet;
lodash.join = array.join;
lodash.kebabCase = string.kebabCase;
lodash.last = last;

View File

@@ -1,6 +1,6 @@
/**
* @license
* lodash 4.1.0 (Custom Build) <https://lodash.com/>
* lodash 4.3.0 (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="es" -o ./`
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
@@ -107,9 +107,11 @@ export { default as invoke } from './invoke';
export { default as invokeMap } from './invokeMap';
export { default as isArguments } from './isArguments';
export { default as isArray } from './isArray';
export { default as isArrayBuffer } from './isArrayBuffer';
export { default as isArrayLike } from './isArrayLike';
export { default as isArrayLikeObject } from './isArrayLikeObject';
export { default as isBoolean } from './isBoolean';
export { default as isBuffer } from './isBuffer';
export { default as isDate } from './isDate';
export { default as isElement } from './isElement';
export { default as isEmpty } from './isEmpty';
@@ -120,6 +122,7 @@ export { default as isFinite } from './isFinite';
export { default as isFunction } from './isFunction';
export { default as isInteger } from './isInteger';
export { default as isLength } from './isLength';
export { default as isMap } from './isMap';
export { default as isMatch } from './isMatch';
export { default as isMatchWith } from './isMatchWith';
export { default as isNaN } from './isNaN';
@@ -132,10 +135,13 @@ export { default as isObjectLike } from './isObjectLike';
export { default as isPlainObject } from './isPlainObject';
export { default as isRegExp } from './isRegExp';
export { default as isSafeInteger } from './isSafeInteger';
export { default as isSet } from './isSet';
export { default as isString } from './isString';
export { default as isSymbol } from './isSymbol';
export { default as isTypedArray } from './isTypedArray';
export { default as isUndefined } from './isUndefined';
export { default as isWeakMap } from './isWeakMap';
export { default as isWeakSet } from './isWeakSet';
export { default as iteratee } from './iteratee';
export { default as join } from './join';
export { default as kebabCase } from './kebabCase';

2
map.js
View File

@@ -40,7 +40,7 @@ import isArray from './isArray';
* { 'user': 'fred' }
* ];
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.map(users, 'user');
* // => ['barney', 'fred']
*/

View File

@@ -22,7 +22,7 @@ import baseIteratee from './_baseIteratee';
* _.mapValues(users, function(o) { return o.age; });
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.mapValues(users, 'age');
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
*/

View File

@@ -20,7 +20,7 @@ import gt from './gt';
* _.maxBy(objects, function(o) { return o.n; });
* // => { 'n': 2 }
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.maxBy(objects, 'n');
* // => { 'n': 2 }
*/

View File

@@ -37,12 +37,12 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* values(object);
* // => [1, 2]
*
* // modifying the result cache
* // Modify the result cache.
* values.cache.set(object, ['a', 'b']);
* values(object);
* // => ['a', 'b']
*
* // replacing `_.memoize.Cache`
* // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap;
*/
function memoize(func, resolver) {

View File

@@ -8,6 +8,8 @@ import createAssigner from './_createAssigner';
* method instead. The `customizer` is invoked with seven arguments:
* (objValue, srcValue, key, object, source, stack).
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @category Object

View File

@@ -20,7 +20,7 @@ import lt from './lt';
* _.minBy(objects, function(o) { return o.n; });
* // => { 'n': 1 }
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.minBy(objects, 'n');
* // => { 'n': 1 }
*/

View File

@@ -24,7 +24,7 @@ import isArray from './isArray';
* { 'user': 'barney', 'age': 36 }
* ];
*
* // sort by `user` in ascending order and by `age` in descending order
* // Sort by `user` in ascending order and by `age` in descending order.
* _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
* // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
*/

View File

@@ -1,6 +1,6 @@
{
"name": "lodash-es",
"version": "4.1.0",
"version": "4.3.0",
"description": "Lodash exported as ES modules.",
"homepage": "https://lodash.com/custom-builds",
"license": "MIT",

View File

@@ -32,14 +32,19 @@ var PARTIAL_FLAG = 32;
* sayHelloTo('fred');
* // => 'hello fred'
*
* // using placeholders
* // Partially applied with placeholders.
* var greetFred = _.partial(greet, _, 'fred');
* greetFred('hi');
* // => 'hi fred'
*/
var partial = rest(function(func, partials) {
var holders = replaceHolders(partials, partial.placeholder);
var placeholder = partial.placeholder,
holders = replaceHolders(partials, placeholder);
return createWrapper(func, PARTIAL_FLAG, undefined, partials, holders);
});
// Assign default placeholders.
partial.placeholder = {};
export default partial;

View File

@@ -31,14 +31,19 @@ var PARTIAL_RIGHT_FLAG = 64;
* greetFred('hi');
* // => 'hi fred'
*
* // using placeholders
* // Partially applied with placeholders.
* var sayHelloTo = _.partialRight(greet, 'hello', _);
* sayHelloTo('fred');
* // => 'hello fred'
*/
var partialRight = rest(function(func, partials) {
var holders = replaceHolders(partials, partialRight.placeholder);
var placeholder = partialRight.placeholder,
holders = replaceHolders(partials, placeholder);
return createWrapper(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders);
});
// Assign default placeholders.
partialRight.placeholder = {};
export default partialRight;

View File

@@ -23,15 +23,15 @@ import createAggregator from './_createAggregator';
* _.partition(users, function(o) { return o.active; });
* // => objects for [['fred'], ['barney', 'pebbles']]
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.partition(users, { 'age': 1, 'active': false });
* // => objects for [['pebbles'], ['barney', 'fred']]
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.partition(users, ['active', false]);
* // => objects for [['barney', 'pebbles'], ['fred']]
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.partition(users, 'active');
* // => objects for [['fred'], ['barney', 'pebbles']]
*/

View File

@@ -3,7 +3,7 @@ import basePickBy from './_basePickBy';
/**
* Creates an object composed of the `object` properties `predicate` returns
* truthy for. The predicate is invoked with one argument: (value).
* truthy for. The predicate is invoked with two arguments: (value, key).
*
* @static
* @memberOf _

View File

@@ -2,7 +2,7 @@ import pullAll from './pullAll';
import rest from './rest';
/**
* Removes all provided values from `array` using
* Removes all given values from `array` using
* [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* for equality comparisons.
*

View File

@@ -3,7 +3,7 @@ import basePullAllBy from './_basePullAllBy';
/**
* This method is like `_.pullAll` except that it accepts `iteratee` which is
* invoked for each element of `array` and `values` to to generate the criterion
* invoked for each element of `array` and `values` to generate the criterion
* by which uniqueness is computed. The iteratee is invoked with one argument: (value).
*
* **Note:** Unlike `_.differenceBy`, this method mutates `array`.

View File

@@ -8,7 +8,7 @@ import isArray from './isArray';
* Reduces `collection` to a value which is the accumulated result of running
* each element in `collection` through `iteratee`, where each successive
* invocation is supplied the return value of the previous. If `accumulator`
* is not provided the first element of `collection` is used as the initial
* is not given the first element of `collection` is used as the initial
* value. The iteratee is invoked with four arguments:
* (accumulator, value, index|key, collection).
*

View File

@@ -23,15 +23,15 @@ import isArray from './isArray';
* _.reject(users, function(o) { return !o.active; });
* // => objects for ['fred']
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.reject(users, { 'age': 40, 'active': true });
* // => objects for ['barney']
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.reject(users, ['active', false]);
* // => objects for ['fred']
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.reject(users, 'active');
* // => objects for ['barney']
*/

2
set.js
View File

@@ -6,6 +6,8 @@ import baseSet from './_baseSet';
* are created for all other missing properties. Use `_.setWith` to customize
* `path` creation.
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @category Object

View File

@@ -6,6 +6,8 @@ import baseSet from './_baseSet';
* path creation is handled by the method instead. The `customizer` is invoked
* with three arguments: (nsValue, key, nsObject).
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @category Object

View File

@@ -26,15 +26,15 @@ import isIterateeCall from './_isIterateeCall';
* { 'user': 'fred', 'active': false }
* ];
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.some(users, { 'user': 'barney', 'active': false });
* // => false
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.some(users, ['active', false]);
* // => true
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.some(users, 'active');
* // => true
*/

View File

@@ -20,7 +20,7 @@ import baseSortedIndexBy from './_baseSortedIndexBy';
* _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict));
* // => 1
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
* // => 0
*/

View File

@@ -15,7 +15,7 @@ import baseSortedIndexBy from './_baseSortedIndexBy';
* @returns {number} Returns the index at which `value` should be inserted into `array`.
* @example
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
* // => 1
*/

View File

@@ -14,7 +14,7 @@ import baseSortedUniqBy from './_baseSortedUniqBy';
* @example
*
* _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
* // => [1.1, 2.2]
* // => [1.1, 2.3]
*/
function sortedUniqBy(array, iteratee) {
return (array && array.length)

View File

@@ -1,8 +1,14 @@
import apply from './_apply';
import arrayPush from './_arrayPush';
import rest from './rest';
import toInteger from './toInteger';
/** Used as the `TypeError` message for "Functions" methods. */
var FUNC_ERROR_TEXT = 'Expected a function';
/* Built-in method references for those with the same name as other `lodash` methods. */
var nativeMax = Math.max;
/**
* Creates a function that invokes `func` with the `this` binding of the created
* function and an array of arguments much like [`Function#apply`](https://es5.github.io/#x15.3.4.3).
@@ -13,6 +19,7 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* @memberOf _
* @category Function
* @param {Function} func The function to spread arguments over.
* @param {number} [start=0] The start position of the spread.
* @returns {Function} Returns the new function.
* @example
*
@@ -23,7 +30,6 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* say(['fred', 'hello']);
* // => 'fred says hello'
*
* // with a Promise
* var numbers = Promise.all([
* Promise.resolve(40),
* Promise.resolve(36)
@@ -34,13 +40,20 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* }));
* // => a Promise of 76
*/
function spread(func) {
function spread(func, start) {
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
return function(array) {
return apply(func, this, array);
};
start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
return rest(function(args) {
var array = args[start],
otherArgs = args.slice(0, start);
if (array) {
arrayPush(otherArgs, array);
}
return apply(func, this, otherArgs);
});
}
export default spread;

View File

@@ -14,6 +14,9 @@
*/
function subtract(minuend, subtrahend) {
var result;
if (minuend === undefined && subtrahend === undefined) {
return 0;
}
if (minuend !== undefined) {
result = minuend;
}

View File

@@ -19,7 +19,7 @@ import baseSum from './_baseSum';
* _.sumBy(objects, function(o) { return o.n; });
* // => 20
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.sumBy(objects, 'n');
* // => 20
*/

View File

@@ -23,15 +23,15 @@ import baseWhile from './_baseWhile';
* _.takeRightWhile(users, function(o) { return !o.active; });
* // => objects for ['fred', 'pebbles']
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
* // => objects for ['pebbles']
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.takeRightWhile(users, ['active', false]);
* // => objects for ['fred', 'pebbles']
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.takeRightWhile(users, 'active');
* // => []
*/

View File

@@ -23,15 +23,15 @@ import baseWhile from './_baseWhile';
* _.takeWhile(users, function(o) { return !o.active; });
* // => objects for ['barney', 'fred']
*
* // using the `_.matches` iteratee shorthand
* // The `_.matches` iteratee shorthand.
* _.takeWhile(users, { 'user': 'barney', 'active': false });
* // => objects for ['barney']
*
* // using the `_.matchesProperty` iteratee shorthand
* // The `_.matchesProperty` iteratee shorthand.
* _.takeWhile(users, ['active', false]);
* // => objects for ['barney', 'fred']
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.takeWhile(users, 'active');
* // => []
*/

8
tap.js
View File

@@ -1,8 +1,7 @@
/**
* This method invokes `interceptor` and returns `value`. The interceptor is
* invoked with one argument; (value). The purpose of this method is to "tap into"
* a method chain in order to perform operations on intermediate results within
* the chain.
* This method invokes `interceptor` and returns `value`. The interceptor
* is invoked with one argument; (value). The purpose of this method is to
* "tap into" a method chain in order to modify intermediate results.
*
* @static
* @memberOf _
@@ -14,6 +13,7 @@
*
* _([1, 2, 3])
* .tap(function(array) {
* // Mutate input array.
* array.pop();
* })
* .reverse()

View File

@@ -29,7 +29,7 @@ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
* in "interpolate" delimiters, HTML-escape interpolated data properties in
* "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
* properties may be accessed as free variables in the template. If a setting
* object is provided it takes precedence over `_.templateSettings` values.
* object is given it takes precedence over `_.templateSettings` values.
*
* **Note:** In the development build `_.template` utilizes
* [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
@@ -56,54 +56,54 @@ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
* @returns {Function} Returns the compiled template function.
* @example
*
* // using the "interpolate" delimiter to create a compiled template
* // Use the "interpolate" delimiter to create a compiled template.
* var compiled = _.template('hello <%= user %>!');
* compiled({ 'user': 'fred' });
* // => 'hello fred!'
*
* // using the HTML "escape" delimiter to escape data property values
* // Use the HTML "escape" delimiter to escape data property values.
* var compiled = _.template('<b><%- value %></b>');
* compiled({ 'value': '<script>' });
* // => '<b>&lt;script&gt;</b>'
*
* // using the "evaluate" delimiter to execute JavaScript and generate HTML
* // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
* var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
* compiled({ 'users': ['fred', 'barney'] });
* // => '<li>fred</li><li>barney</li>'
*
* // using the internal `print` function in "evaluate" delimiters
* // Use the internal `print` function in "evaluate" delimiters.
* var compiled = _.template('<% print("hello " + user); %>!');
* compiled({ 'user': 'barney' });
* // => 'hello barney!'
*
* // using the ES delimiter as an alternative to the default "interpolate" delimiter
* // Use the ES delimiter as an alternative to the default "interpolate" delimiter.
* var compiled = _.template('hello ${ user }!');
* compiled({ 'user': 'pebbles' });
* // => 'hello pebbles!'
*
* // using custom template delimiters
* // Use custom template delimiters.
* _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
* var compiled = _.template('hello {{ user }}!');
* compiled({ 'user': 'mustache' });
* // => 'hello mustache!'
*
* // using backslashes to treat delimiters as plain text
* // Use backslashes to treat delimiters as plain text.
* var compiled = _.template('<%= "\\<%- value %\\>" %>');
* compiled({ 'value': 'ignored' });
* // => '<%- value %>'
*
* // using the `imports` option to import `jQuery` as `jq`
* // Use the `imports` option to import `jQuery` as `jq`.
* var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
* var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
* compiled({ 'users': ['fred', 'barney'] });
* // => '<li>fred</li><li>barney</li>'
*
* // using the `sourceURL` option to specify a custom sourceURL for the template
* // Use the `sourceURL` option to specify a custom sourceURL for the template.
* var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
* compiled(data);
* // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
*
* // using the `variable` option to ensure a with-statement isn't used in the compiled template
* // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
* var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
* compiled.source;
* // => function(data) {
@@ -112,8 +112,8 @@ var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
* // return __p;
* // }
*
* // using the `source` property to inline compiled templates for meaningful
* // line numbers in error messages and a stack trace
* // Use the `source` property to inline compiled templates for meaningful
* // line numbers in error messages and stack traces.
* fs.writeFileSync(path.join(cwd, 'jst.js'), '\
* var JST = {\
* "main": ' + _.template(mainText).source + '\

View File

@@ -15,7 +15,7 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* result of the last `func` invocation.
*
* **Note:** If `leading` and `trailing` options are `true`, `func` is invoked
* on the trailing edge of the timeout only if the the throttled function is
* on the trailing edge of the timeout only if the throttled function is
* invoked more than once during the `wait` timeout.
*
* See [David Corbacho's article](http://drupalmotion.com/article/debounce-and-throttle-visual-explanation)
@@ -34,14 +34,14 @@ var FUNC_ERROR_TEXT = 'Expected a function';
* @returns {Function} Returns the new throttled function.
* @example
*
* // avoid excessively updating the position while scrolling
* // Avoid excessively updating the position while scrolling.
* jQuery(window).on('scroll', _.throttle(updatePosition, 100));
*
* // invoke `renewToken` when the click event is fired, but not more than once every 5 minutes
* // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
* var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
* jQuery(element).on('click', throttled);
*
* // cancel a trailing throttled invocation
* // Cancel the trailing throttled invocation.
* jQuery(window).on('popstate', throttled.cancel);
*/
function throttle(func, wait, options) {

View File

@@ -1,5 +1,7 @@
/**
* This method is like `_.tap` except that it returns the result of `interceptor`.
* The purpose of this method is to "pass thru" values replacing intermediate
* results in a method chain.
*
* @static
* @memberOf _

View File

@@ -3,8 +3,8 @@ import baseUniq from './_baseUniq';
import rest from './rest';
/**
* Creates an array of unique values, in order, from all of the provided arrays
* using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* Creates an array of unique values, in order, from all given arrays using
* [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* for equality comparisons.
*
* @static

View File

@@ -21,7 +21,7 @@ import rest from './rest';
* _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [2.1, 1.2, 4.3]
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }, { 'x': 2 }]
*/

View File

@@ -17,7 +17,7 @@ import baseUniq from './_baseUniq';
* _.uniqBy([2.1, 1.2, 2.3], Math.floor);
* // => [2.1, 1.2]
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }, { 'x': 2 }]
*/

View File

@@ -4,7 +4,7 @@ import toString from './toString';
var idCounter = 0;
/**
* Generates a unique ID. If `prefix` is provided the ID is appended to it.
* Generates a unique ID. If `prefix` is given the ID is appended to it.
*
* @static
* @memberOf _

View File

@@ -3,6 +3,8 @@ import baseUnset from './_baseUnset';
/**
* Removes the property at `path` of `object`.
*
* **Note:** This method mutates `object`.
*
* @static
* @memberOf _
* @category Object

View File

@@ -3,7 +3,7 @@ import isArrayLikeObject from './isArrayLikeObject';
import rest from './rest';
/**
* Creates an array excluding all provided values using
* Creates an array excluding all given values using
* [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
* for equality comparisons.
*

View File

@@ -14,11 +14,11 @@ import chain from './chain';
* { 'user': 'fred', 'age': 40 }
* ];
*
* // without explicit chaining
* // A sequence without explicit chaining.
* _(users).head();
* // => { 'user': 'barney', 'age': 36 }
*
* // with explicit chaining
* // A sequence with explicit chaining.
* _(users)
* .chain()
* .head()

View File

@@ -109,11 +109,11 @@ var hasOwnProperty = objectProto.hasOwnProperty;
*
* var wrapped = _([1, 2, 3]);
*
* // returns an unwrapped value
* // Returns an unwrapped value.
* wrapped.reduce(_.add);
* // => 6
*
* // returns a wrapped value
* // Returns a wrapped value.
* var squares = wrapped.map(square);
*
* _.isArray(squares);

2
xor.js
View File

@@ -5,7 +5,7 @@ import rest from './rest';
/**
* Creates an array of unique values that is the [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
* of the provided arrays.
* of the given arrays.
*
* @static
* @memberOf _

View File

@@ -21,7 +21,7 @@ import rest from './rest';
* _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [1.2, 4.3]
*
* // using the `_.property` iteratee shorthand
* // The `_.property` iteratee shorthand.
* _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 2 }]
*/