Compare commits

..

31 Commits
4.1.0 ... 4.2.0

Author SHA1 Message Date
John-David Dalton
b6b59d93d7 Bump to 4.2.0. 2016-02-02 00:33:16 -08:00
John-David Dalton
5af68bbf94 Rebuild lodash and docs. 2016-02-02 00:33:16 -08:00
John-David Dalton
db7debd3da Move benchmark.js to a dev dep. 2016-02-02 00:33:16 -08:00
laispace
29bc8d965b Fix _.sortedUniqBy doc example. [ci skip] 2016-02-01 23:55:34 -08:00
John-David Dalton
daeb55e99d Rename mapping rekey to rename. 2016-02-01 23:53:19 -08:00
John-David Dalton
fa4d85897c Add mutation notes to _.mergeWith, _.set, _.setWith, and _.unset. [ci skip] 2016-02-01 22:53:05 -08:00
John-David Dalton
983363e0cd Cleanup readme. [ci skip] 2016-02-01 22:37:56 -08:00
John-David Dalton
d95dad76b8 Remove dead code. 2016-02-01 22:37:56 -08:00
John-David Dalton
18f74aa5b2 Rename spreadArgs to otherArgs. 2016-02-01 22:37:56 -08:00
John-David Dalton
e96a8f7bc6 Cleanup map tests. 2016-02-01 22:37:56 -08:00
John-David Dalton
29f39be6ad Add _.flapMap tests for collections. 2016-02-01 22:37:56 -08:00
John-David Dalton
7a17967d79 Add _.spread tests for the start param. 2016-02-01 22:37:56 -08:00
John-David Dalton
de5bd32aba Rename rp vars to rest. 2016-02-01 22:37:56 -08:00
Jason Trill
199b2e1a3a Reword docs for _.tap and _.thru. [ci skip] 2016-02-01 22:37:56 -08:00
John-David Dalton
a43e4f10ef Update vendors. 2016-02-01 22:37:55 -08:00
Trevor Hudson
5522e4641d Update _.pickBy docs to include value as an iteratee param. [ci skip] 2016-02-01 22:37:55 -08:00
greenkeeperio-bot
6c82ea8fc3 Update qunitjs to 1.21.0. 2016-02-01 22:37:55 -08:00
John-David Dalton
b4b45b7139 Update docdown. 2016-02-01 22:37:55 -08:00
John-David Dalton
7ebb033016 Add _.at chaining test for objects with index keys. 2016-02-01 22:37:55 -08:00
John-David Dalton
163fdb46f0 Ensure fp _.partial and _.partialRight accept an args param. 2016-02-01 22:37:55 -08:00
John-David Dalton
b38cf204f7 Add start param to _.spread. 2016-02-01 22:37:55 -08:00
John-David Dalton
fe5381b0f4 Cleanup fp mapping. 2016-02-01 22:37:55 -08:00
John-David Dalton
c99e7f1337 Make _.flatMap a "Collection" method. 2016-02-01 22:37:55 -08:00
Mohammed Nauage
b61b674fec Remove sorted behavior from _.indexOf docs. [ci skip] 2016-02-01 22:37:55 -08:00
John-David Dalton
3bdaf99cfa Ensure _.iteratee clones sources for "_.matchesProperty" shorthand. 2016-02-01 22:37:54 -08:00
John-David Dalton
6c85e7015a Add assocPath and dissocPath fp aliases. 2016-02-01 22:37:54 -08:00
John-David Dalton
9788f7101b Ensure fp unset is immutable. [closes #1913] 2016-02-01 22:37:54 -08:00
Billy Janitsch
d0d5a3802d Alias set to assoc in FP. 2016-02-01 22:37:54 -08:00
John-David Dalton
1f160b31ff Make doc code sample comments match source comment style. [ci skip] 2016-01-30 01:02:49 -08:00
Ivan Tanev
13659e87cb Ensure _.attempt preserves custom errors. 2016-01-30 01:02:49 -08:00
John-David Dalton
ac9b0bfc1b Increment package version to enable ci tests. 2016-01-30 01:02:48 -08:00
34 changed files with 2216 additions and 4560 deletions

View File

@@ -1,4 +1,4 @@
# lodash v4.1.0 # lodash v4.2.0
The [lodash](https://lodash.com/) library exported as a [UMD](https://github.com/umdjs/umd) module. The [lodash](https://lodash.com/) library exported as a [UMD](https://github.com/umdjs/umd) module.
@@ -11,13 +11,13 @@ $ lodash core -o ./dist/lodash.core.js
## Community ## Community
[![Join the chat at https://gitter.im/lodash/lodash](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/lodash/lodash) [![Gitter](https://badges.gitter.im/lodash/lodash.svg)](https://gitter.im/lodash/lodash)
## Module formats ## Module formats
Lodash is also available in a variety of other builds & module formats. Lodash is available in a variety of other builds & module formats.
* [lodash](https://www.npmjs.com/package/lodash) & [per method](https://www.npmjs.com/browse/keyword/lodash-modularized) packages * [lodash](https://www.npmjs.com/package/lodash) & [per method packages](https://www.npmjs.com/browse/keyword/lodash-modularized)
* [lodash-amd](https://www.npmjs.com/package/lodash-amd) * [lodash-amd](https://www.npmjs.com/package/lodash-amd)
* [lodash-es](https://www.npmjs.com/package/lodash-es) & [babel-plugin-lodash](https://www.npmjs.com/package/babel-plugin-lodash) * [lodash-es](https://www.npmjs.com/package/lodash-es) & [babel-plugin-lodash](https://www.npmjs.com/package/babel-plugin-lodash)

59
dist/lodash.core.js vendored
View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* lodash 4.1.0 (Custom Build) <https://lodash.com/> * lodash 4.2.0 (Custom Build) <https://lodash.com/>
* Build: `lodash core -o ./dist/lodash.core.js` * Build: `lodash core -o ./dist/lodash.core.js`
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/> * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
@@ -13,7 +13,7 @@
var undefined; var undefined;
/** Used as the semantic version number. */ /** Used as the semantic version number. */
var VERSION = '4.1.0'; var VERSION = '4.2.0';
/** Used to compose bitmasks for wrapper metadata. */ /** Used to compose bitmasks for wrapper metadata. */
var BIND_FLAG = 1, var BIND_FLAG = 1,
@@ -472,11 +472,11 @@
* *
* var wrapped = _([1, 2, 3]); * var wrapped = _([1, 2, 3]);
* *
* // returns an unwrapped value * // Returns an unwrapped value.
* wrapped.reduce(_.add); * wrapped.reduce(_.add);
* // => 6 * // => 6
* *
* // returns a wrapped value * // Returns a wrapped value.
* var squares = wrapped.map(square); * var squares = wrapped.map(square);
* *
* _.isArray(squares); * _.isArray(squares);
@@ -1516,8 +1516,7 @@
* Gets the index at which the first occurrence of `value` is found in `array` * 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) * 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 * 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` * from the end of `array`.
* performs a faster binary search.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -1531,7 +1530,7 @@
* _.indexOf([1, 2, 1, 2], 2); * _.indexOf([1, 2, 1, 2], 2);
* // => 1 * // => 1
* *
* // using `fromIndex` * // Search from the `fromIndex`.
* _.indexOf([1, 2, 1, 2], 2, 2); * _.indexOf([1, 2, 1, 2], 2, 2);
* // => 3 * // => 3
*/ */
@@ -1629,10 +1628,9 @@
} }
/** /**
* This method invokes `interceptor` and returns `value`. The interceptor is * This method invokes `interceptor` and returns `value`. The interceptor
* invoked with one argument; (value). The purpose of this method is to "tap into" * is invoked with one argument; (value). The purpose of this method is to
* a method chain in order to perform operations on intermediate results within * "tap into" a method chain in order to modify intermediate results.
* the chain.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -1644,6 +1642,7 @@
* *
* _([1, 2, 3]) * _([1, 2, 3])
* .tap(function(array) { * .tap(function(array) {
* // Mutate input array.
* array.pop(); * array.pop();
* }) * })
* .reverse() * .reverse()
@@ -1657,6 +1656,8 @@
/** /**
* This method is like `_.tap` except that it returns the result of `interceptor`. * 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 * @static
* @memberOf _ * @memberOf _
@@ -1693,11 +1694,11 @@
* { 'user': 'fred', 'age': 40 } * { 'user': 'fred', 'age': 40 }
* ]; * ];
* *
* // without explicit chaining * // A sequence without explicit chaining.
* _(users).head(); * _(users).head();
* // => { 'user': 'barney', 'age': 36 } * // => { 'user': 'barney', 'age': 36 }
* *
* // with explicit chaining * // A sequence with explicit chaining.
* _(users) * _(users)
* .chain() * .chain()
* .head() * .head()
@@ -1750,15 +1751,15 @@
* { 'user': 'fred', 'active': false } * { 'user': 'fred', 'active': false }
* ]; * ];
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.every(users, { 'user': 'barney', 'active': false }); * _.every(users, { 'user': 'barney', 'active': false });
* // => false * // => false
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.every(users, ['active', false]); * _.every(users, ['active', false]);
* // => true * // => true
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.every(users, 'active'); * _.every(users, 'active');
* // => false * // => false
*/ */
@@ -1788,15 +1789,15 @@
* _.filter(users, function(o) { return !o.active; }); * _.filter(users, function(o) { return !o.active; });
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.filter(users, { 'age': 36, 'active': true }); * _.filter(users, { 'age': 36, 'active': true });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.filter(users, ['active', false]); * _.filter(users, ['active', false]);
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.filter(users, 'active'); * _.filter(users, 'active');
* // => objects for ['barney'] * // => objects for ['barney']
*/ */
@@ -1826,15 +1827,15 @@
* _.find(users, function(o) { return o.age < 40; }); * _.find(users, function(o) { return o.age < 40; });
* // => object for 'barney' * // => object for 'barney'
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.find(users, { 'age': 1, 'active': true }); * _.find(users, { 'age': 1, 'active': true });
* // => object for 'pebbles' * // => object for 'pebbles'
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.find(users, ['active', false]); * _.find(users, ['active', false]);
* // => object for 'fred' * // => object for 'fred'
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.find(users, 'active'); * _.find(users, 'active');
* // => object for 'barney' * // => object for 'barney'
*/ */
@@ -1911,7 +1912,7 @@
* { 'user': 'fred' } * { 'user': 'fred' }
* ]; * ];
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.map(users, 'user'); * _.map(users, 'user');
* // => ['barney', 'fred'] * // => ['barney', 'fred']
*/ */
@@ -2008,15 +2009,15 @@
* { 'user': 'fred', 'active': false } * { 'user': 'fred', 'active': false }
* ]; * ];
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.some(users, { 'user': 'barney', 'active': false }); * _.some(users, { 'user': 'barney', 'active': false });
* // => false * // => false
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.some(users, ['active', false]); * _.some(users, ['active', false]);
* // => true * // => true
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.some(users, 'active'); * _.some(users, 'active');
* // => true * // => true
*/ */
@@ -2134,7 +2135,7 @@
* bound('!'); * bound('!');
* // => 'hi fred!' * // => 'hi fred!'
* *
* // using placeholders * // Bound with placeholders.
* var bound = _.bind(greet, object, _, '!'); * var bound = _.bind(greet, object, _, '!');
* bound('hi'); * bound('hi');
* // => 'hi fred!' * // => 'hi fred!'
@@ -2158,7 +2159,7 @@
* _.defer(function(text) { * _.defer(function(text) {
* console.log(text); * console.log(text);
* }, 'deferred'); * }, 'deferred');
* // logs 'deferred' after one or more milliseconds * // => logs 'deferred' after one or more milliseconds
*/ */
var defer = rest(function(func, args) { var defer = rest(function(func, args) {
return baseDelay(func, 1, args); return baseDelay(func, 1, args);
@@ -3442,7 +3443,7 @@
* { 'user': 'fred', 'age': 40 } * { 'user': 'fred', 'age': 40 }
* ]; * ];
* *
* // create custom iteratee shorthands * // Create custom iteratee shorthands.
* _.iteratee = _.wrap(_.iteratee, function(callback, func) { * _.iteratee = _.wrap(_.iteratee, function(callback, func) {
* var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func); * var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func);
* return !p ? callback(func) : function(object) { * return !p ? callback(func) : function(object) {

View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* lodash 4.1.0 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE * lodash 4.2.0 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
* Build: `lodash core -o ./dist/lodash.core.js` * Build: `lodash core -o ./dist/lodash.core.js`
*/ */
;(function(){function n(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function t(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===an?i===i:r(i,c)))var c=i,f=o}return f}function r(n,t,r){var e;return r(n,function(n,r,u){return t(n,r,u)?(e=n,false):void 0}),e}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return w(t,function(t){return n[t]})}function o(n){return n&&n.Object===Object?n:null}function i(n){return hn[n]; ;(function(){function n(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function t(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===an?i===i:r(i,c)))var c=i,f=o}return f}function r(n,t,r){var e;return r(n,function(n,r,u){return t(n,r,u)?(e=n,false):void 0}),e}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return w(t,function(t){return n[t]})}function o(n){return n&&n.Object===Object?n:null}function i(n){return hn[n];
@@ -25,6 +25,6 @@ l.prototype.constructor=l,a.assignIn=Hn,a.before=P,a.bind=Cn,a.chain=function(n)
r=1;break n}if(e>r&&!u||!a||c&&!o&&i||f&&i){r=-1;break n}}r=0}return r||n.b-t.b}),E("c"))},a.tap=function(n,t){return t(n),n},a.thru=function(n,t){return t(n)},a.toArray=function(n){return L(n)?n.length?k(n):[]:on(n)},a.values=on,a.extend=Hn,fn(a,a),a.clone=function(n){return X(n)?Mn(n)?k(n):T(n,en(n)):n},a.escape=function(n){return(n=rn(n))&&pn.test(n)?n.replace(ln,i):n},a.every=function(n,t,r){return t=r?an:t,h(n,m(t))},a.find=G,a.forEach=J,a.has=function(n,t){return null!=n&&xn.call(n,t)},a.head=C, r=1;break n}if(e>r&&!u||!a||c&&!o&&i||f&&i){r=-1;break n}}r=0}return r||n.b-t.b}),E("c"))},a.tap=function(n,t){return t(n),n},a.thru=function(n,t){return t(n)},a.toArray=function(n){return L(n)?n.length?k(n):[]:on(n)},a.values=on,a.extend=Hn,fn(a,a),a.clone=function(n){return X(n)?Mn(n)?k(n):T(n,en(n)):n},a.escape=function(n){return(n=rn(n))&&pn.test(n)?n.replace(ln,i):n},a.every=function(n,t,r){return t=r?an:t,h(n,m(t))},a.find=G,a.forEach=J,a.has=function(n,t){return null!=n&&xn.call(n,t)},a.head=C,
a.identity=cn,a.indexOf=function(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?Rn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1},a.isArguments=K,a.isArray=Mn,a.isBoolean=function(n){return true===n||false===n||Y(n)&&"[object Boolean]"==An.call(n)},a.isDate=function(n){return Y(n)&&"[object Date]"==An.call(n)},a.isEmpty=function(n){if(L(n)&&(Mn(n)||nn(n)||Q(n.splice)||K(n)))return!n.length;for(var t in n)if(xn.call(n,t))return false;return true},a.isEqual=function(n,t){ a.identity=cn,a.indexOf=function(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?Rn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1},a.isArguments=K,a.isArray=Mn,a.isBoolean=function(n){return true===n||false===n||Y(n)&&"[object Boolean]"==An.call(n)},a.isDate=function(n){return Y(n)&&"[object Date]"==An.call(n)},a.isEmpty=function(n){if(L(n)&&(Mn(n)||nn(n)||Q(n.splice)||K(n)))return!n.length;for(var t in n)if(xn.call(n,t))return false;return true},a.isEqual=function(n,t){
return b(n,t)},a.isFinite=function(n){return typeof n=="number"&&Fn(n)},a.isFunction=Q,a.isNaN=function(n){return Z(n)&&n!=+n},a.isNull=function(n){return null===n},a.isNumber=Z,a.isObject=X,a.isRegExp=function(n){return X(n)&&"[object RegExp]"==An.call(n)},a.isString=nn,a.isUndefined=function(n){return n===an},a.last=function(n){var t=n?n.length:0;return t?n[t-1]:an},a.max=function(n){return n&&n.length?t(n,cn,H):an},a.min=function(n){return n&&n.length?t(n,cn,tn):an},a.noConflict=function(){return dn._===this&&(dn._=kn), return b(n,t)},a.isFinite=function(n){return typeof n=="number"&&Fn(n)},a.isFunction=Q,a.isNaN=function(n){return Z(n)&&n!=+n},a.isNull=function(n){return null===n},a.isNumber=Z,a.isObject=X,a.isRegExp=function(n){return X(n)&&"[object RegExp]"==An.call(n)},a.isString=nn,a.isUndefined=function(n){return n===an},a.last=function(n){var t=n?n.length:0;return t?n[t-1]:an},a.max=function(n){return n&&n.length?t(n,cn,H):an},a.min=function(n){return n&&n.length?t(n,cn,tn):an},a.noConflict=function(){return dn._===this&&(dn._=kn),
this},a.noop=function(){},a.reduce=M,a.result=function(n,t,r){return t=null==n?an:n[t],t===an&&(t=r),Q(t)?t.call(n):t},a.size=function(n){return null==n?0:(n=L(n)?n:en(n),n.length)},a.some=function(n,t,r){return t=r?an:t,N(n,m(t))},a.uniqueId=function(n){var t=++En;return rn(n)+t},a.each=J,a.first=C,fn(a,function(){var n={};return _(a,function(t,r){xn.call(a.prototype,r)||(n[r]=t)}),n}(),{chain:false}),a.VERSION="4.1.0",In("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){ this},a.noop=function(){},a.reduce=M,a.result=function(n,t,r){return t=null==n?an:n[t],t===an&&(t=r),Q(t)?t.call(n):t},a.size=function(n){return null==n?0:(n=L(n)?n:en(n),n.length)},a.some=function(n,t,r){return t=r?an:t,N(n,m(t))},a.uniqueId=function(n){var t=++En;return rn(n)+t},a.each=J,a.first=C,fn(a,function(){var n={};return _(a,function(t,r){xn.call(a.prototype,r)||(n[r]=t)}),n}(),{chain:false}),a.VERSION="4.2.0",In("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){
var t=(/^(?:replace|split)$/.test(n)?String.prototype:wn)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);a.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),a.prototype.toJSON=a.prototype.valueOf=a.prototype.value=function(){return S(this.__wrapped__,this.__actions__)},(bn||gn||{})._=a,typeof define=="function"&&typeof define.amd=="object"&&define.amd? define(function(){ var t=(/^(?:replace|split)$/.test(n)?String.prototype:wn)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);a.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),a.prototype.toJSON=a.prototype.valueOf=a.prototype.value=function(){return S(this.__wrapped__,this.__actions__)},(bn||gn||{})._=a,typeof define=="function"&&typeof define.amd=="object"&&define.amd? define(function(){
return a}):yn&&_n?(jn&&((_n.exports=a)._=a),yn._=a):dn._=a}).call(this); return a}):yn&&_n?(jn&&((_n.exports=a)._=a),yn._=a):dn._=a}).call(this);

158
dist/lodash.fp.js vendored
View File

@@ -104,7 +104,8 @@ return /******/ (function(modules) { // webpackBootstrap
'isFunction': util.isFunction, 'isFunction': util.isFunction,
'iteratee': util.iteratee, 'iteratee': util.iteratee,
'keys': util.keys, 'keys': util.keys,
'rearg': util.rearg 'rearg': util.rearg,
'rest': util.rest
}; };
var ary = _.ary, var ary = _.ary,
@@ -113,7 +114,8 @@ return /******/ (function(modules) { // webpackBootstrap
each = _.forEach, each = _.forEach,
isFunction = _.isFunction, isFunction = _.isFunction,
keys = _.keys, keys = _.keys,
rearg = _.rearg; rearg = _.rearg,
spread = _.spread;
var baseArity = function(func, n) { var baseArity = function(func, n) {
return n == 2 return n == 2
@@ -242,17 +244,21 @@ return /******/ (function(modules) { // webpackBootstrap
each(mapping.caps, function(cap) { each(mapping.caps, function(cap) {
each(mapping.aryMethod[cap], function(otherName) { each(mapping.aryMethod[cap], function(otherName) {
if (name == otherName) { if (name == otherName) {
var indexes = mapping.iterateeRearg[name], var aryN = !isLib && mapping.iterateeAry[name],
n = !isLib && mapping.aryIteratee[name]; reargIndexes = mapping.iterateeRearg[name],
spreadStart = mapping.methodSpread[name];
result = spreadStart === undefined
? ary(func, cap)
: spread(func, spreadStart);
result = ary(func, cap);
if (cap > 1 && !mapping.skipRearg[name]) { if (cap > 1 && !mapping.skipRearg[name]) {
result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[cap]); result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[cap]);
} }
if (indexes) { if (reargIndexes) {
result = iterateeRearg(result, indexes); result = iterateeRearg(result, reargIndexes);
} else if (n) { } else if (aryN) {
result = iterateeAry(result, n); result = iterateeAry(result, aryN);
} }
if (cap > 1) { if (cap > 1) {
result = curry(result, cap); result = curry(result, cap);
@@ -273,11 +279,14 @@ return /******/ (function(modules) { // webpackBootstrap
if (!isLib) { if (!isLib) {
return wrap(name, func); return wrap(name, func);
} }
// Add placeholder alias.
_.__ = placeholder;
// Iterate over methods for the current ary cap. // Iterate over methods for the current ary cap.
var pairs = []; var pairs = [];
each(mapping.caps, function(cap) { each(mapping.caps, function(cap) {
each(mapping.aryMethod[cap], function(key) { each(mapping.aryMethod[cap], function(key) {
var func = _[mapping.key[key] || key]; var func = _[mapping.rename[key] || key];
if (func) { if (func) {
pairs.push([key, wrap(key, func)]); pairs.push([key, wrap(key, func)]);
} }
@@ -311,9 +320,12 @@ return /******/ (function(modules) { // webpackBootstrap
'all': 'some', 'all': 'some',
'allPass': 'overEvery', 'allPass': 'overEvery',
'apply': 'spread', 'apply': 'spread',
'assoc': 'set',
'assocPath': 'set',
'compose': 'flowRight', 'compose': 'flowRight',
'contains': 'includes', 'contains': 'includes',
'dissoc': 'omit', 'dissoc': 'unset',
'dissocPath': 'unset',
'each': 'forEach', 'each': 'forEach',
'eachRight': 'forEachRight', 'eachRight': 'forEachRight',
'equals': 'isEqual', 'equals': 'isEqual',
@@ -340,8 +352,59 @@ return /******/ (function(modules) { // webpackBootstrap
'zipObj': 'zipObject' 'zipObj': 'zipObject'
}; };
/** Used to map ary to method names. */
exports.aryMethod = {
1: [
'attempt', 'ceil', 'create', 'curry', 'curryRight', 'floor', 'fromPairs',
'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', 'over',
'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
],
2: [
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
'findLastKey', 'flatMap', 'forEach', 'forEachRight', 'forIn', 'forInRight',
'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', 'hasIn',
'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
'omitBy', 'orderBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
'partial', 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll',
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
'repeat', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
'split', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', 'takeRightWhile',
'takeWhile', 'tap', 'throttle', 'thru', 'times', 'truncate', 'union', 'uniqBy',
'uniqWith', 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',
'zipObjectDeep'
],
3: [
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
'isMatchWith', 'mergeWith', 'pullAllBy', 'reduce', 'reduceRight', 'replace',
'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform', 'unionBy',
'unionWith', 'xorBy', 'xorWith', 'zipWith'
],
4: [
'fill', 'setWith'
]
};
/** Used to map ary to rearg configs. */
exports.aryRearg = {
2: [1, 0],
3: [2, 1, 0],
4: [3, 2, 0, 1]
};
/** Used to iterate `mapping.aryMethod` keys. */
exports.caps = [1, 2, 3, 4];
/** Used to map method names to their iteratee ary. */ /** Used to map method names to their iteratee ary. */
exports.aryIteratee = { exports.iterateeAry = {
'assignWith': 2, 'assignWith': 2,
'assignInWith': 2, 'assignInWith': 2,
'cloneDeepWith': 1, 'cloneDeepWith': 1,
@@ -380,53 +443,6 @@ return /******/ (function(modules) { // webpackBootstrap
'transform': 2 'transform': 2
}; };
/** Used to map ary to method names. */
exports.aryMethod = {
1: [
'attempt', 'ceil', 'create', 'curry', 'curryRight', 'floor', 'fromPairs',
'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', 'over',
'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
],
2: [
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
'findLastKey', 'flatMap', 'forEach', 'forEachRight', 'forIn', 'forInRight',
'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', 'hasIn',
'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
'omitBy', 'orderBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
'partition', 'pick', 'pickBy', 'pull', 'pullAll', 'pullAt', 'random', 'range',
'rangeRight', 'rearg', 'reject', 'remove', 'repeat', 'result', 'sampleSize',
'some', 'sortBy', 'sortedIndex', 'sortedIndexOf', 'sortedLastIndex',
'sortedLastIndexOf', 'sortedUniqBy', 'split', 'startsWith', 'subtract',
'sumBy', 'take', 'takeRight', 'takeRightWhile', 'takeWhile', 'tap', 'throttle',
'thru', 'times', 'truncate', 'union', 'uniqBy', 'uniqWith', 'unset', 'unzipWith',
'without', 'wrap', 'xor', 'zip', 'zipObject', 'zipObjectDeep'
],
3: [
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
'isMatchWith', 'mergeWith', 'pullAllBy', 'reduce', 'reduceRight', 'replace',
'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform', 'unionBy',
'unionWith', 'xorBy', 'xorWith', 'zipWith'
],
4: [
'fill', 'setWith'
]
};
/** Used to map ary to rearg configs. */
exports.aryRearg = {
2: [1, 0],
3: [2, 1, 0],
4: [3, 2, 0, 1]
};
/** Used to map method names to iteratee rearg configs. */ /** Used to map method names to iteratee rearg configs. */
exports.iterateeRearg = { exports.iterateeRearg = {
'findKey': [1], 'findKey': [1],
@@ -448,14 +464,10 @@ return /******/ (function(modules) { // webpackBootstrap
'transform': [2, 0, 1] 'transform': [2, 0, 1]
}; };
/** Used to iterate `mapping.aryMethod` keys. */ /** Used to map method names to spread configs. */
exports.caps = [1, 2, 3, 4]; exports.methodSpread = {
'partial': 1,
/** Used to map keys to other keys. */ 'partialRight': 1
exports.key = {
'curryN': 'curry',
'curryRightN': 'curryRight',
'getOr': 'get'
}; };
/** Used to identify methods which mutate arrays or objects. */ /** Used to identify methods which mutate arrays or objects. */
@@ -481,7 +493,8 @@ return /******/ (function(modules) { // webpackBootstrap
}, },
'set': { 'set': {
'set': true, 'set': true,
'setWith': true 'setWith': true,
'unset': true
} }
}; };
@@ -512,6 +525,13 @@ return /******/ (function(modules) { // webpackBootstrap
return result; return result;
}()); }());
/** Used to map method names to other names. */
exports.rename = {
'curryN': 'curry',
'curryRightN': 'curryRight',
'getOr': 'get'
};
/** Used to track methods that skip `_.rearg`. */ /** Used to track methods that skip `_.rearg`. */
exports.skipRearg = { exports.skipRearg = {
'assign': true, 'assign': true,
@@ -520,6 +540,8 @@ return /******/ (function(modules) { // webpackBootstrap
'difference': true, 'difference': true,
'matchesProperty': true, 'matchesProperty': true,
'merge': true, 'merge': true,
'partial': true,
'partialRight': true,
'random': true, 'random': true,
'range': true, 'range': true,
'rangeRight': true, 'rangeRight': true,

21
dist/lodash.fp.min.js vendored
View File

@@ -1,11 +1,12 @@
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.fp=t():e.fp=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){function n(e){return i(e,e)}var i=r(1);e.exports=n},function(e,t,r){function n(e,t,r){ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?exports.fp=t():e.fp=t()}(this,function(){return function(e){function t(n){if(r[n])return r[n].exports;var i=r[n]={exports:{},id:n,loaded:!1};return e[n].call(i.exports,i,i.exports,t),i.loaded=!0,i.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){function n(e){return i(e,e)}var i=r(1);e.exports=n},function(e,t,r){function n(e,t,r){
if("function"!=typeof r&&(r=t,t=void 0),null==r)throw new TypeError;var s=void 0===t&&"string"==typeof r.VERSION,u=s?r:{ary:e.ary,cloneDeep:e.cloneDeep,curry:e.curry,forEach:e.forEach,isFunction:e.isFunction,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg},c=u.ary,p=u.cloneDeep,f=u.curry,l=u.forEach,h=u.isFunction,d=u.keys,y=u.rearg,g=function(e,t){return 2==t?function(t,r){return e.apply(void 0,arguments)}:function(t){return e.apply(void 0,arguments)}},m=function(e,t){return 2==t?function(t,r){return e(t,r); if("function"!=typeof r&&(r=t,t=void 0),null==r)throw new TypeError;var s=void 0===t&&"string"==typeof r.VERSION,u=s?r:{ary:e.ary,cloneDeep:e.cloneDeep,curry:e.curry,forEach:e.forEach,isFunction:e.isFunction,iteratee:e.iteratee,keys:e.keys,rearg:e.rearg,rest:e.rest},c=u.ary,p=u.cloneDeep,l=u.curry,f=u.forEach,h=u.isFunction,d=u.keys,g=u.rearg,y=u.spread,m=function(e,t){return 2==t?function(t,r){return e.apply(void 0,arguments)}:function(t){return e.apply(void 0,arguments)}},v=function(e,t){return 2==t?function(t,r){
}:function(t){return e(t)}},v=function(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r},W=function(e){return function(t){return e({},t)}},R=function(e,t){return O(e,t,!0)},x=function(e,t){return O(e,function(e){return m(e,t)})},I=function(e,t){return O(e,function(e){var r=t.length;return g(y(m(e,r),t),r)})},O=function(e,t,r){return function(){for(var n=arguments.length,i=Array(n);n--;)i[n]=arguments[n];i[0]=t(i[0]);var a=e.apply(void 0,i);return r?i[0]:a}},b={iteratee:function(e){return function(){ return e(t,r)}:function(t){return e(t)}},R=function(e){for(var t=e?e.length:0,r=Array(t);t--;)r[t]=e[t];return r},W=function(e){return function(t){return e({},t)}},x=function(e,t){return b(e,t,!0)},I=function(e,t){return b(e,function(e){return v(e,t)})},O=function(e,t){return b(e,function(e){var r=t.length;return m(g(v(e,r),t),r)})},b=function(e,t,r){return function(){for(var n=arguments.length,i=Array(n);n--;)i[n]=arguments[n];i[0]=t(i[0]);var a=e.apply(void 0,i);return r?i[0]:a}},B={iteratee:function(e){
var t=arguments[0],r=arguments[1];r=r>2?r-2:1,t=e(t);var n=t.length;return n&&r>=n?t:m(t,r)}},mixin:function(e){return function(t){var r=this;if(!h(r))return e(r,Object(t));var n=[],i=[];return l(d(t),function(e){var a=t[e];h(a)&&(i.push(e),n.push(r.prototype[e]))}),e(r,Object(t)),l(i,function(e,t){var i=n[t];h(i)?r.prototype[e]=i:delete r.prototype[e]}),r}},runInContext:function(t){return function(r){return n(e,t(r))}}},k=function(e,t){e=i.aliasToReal[e]||e;var r=b[e];if(r)return r(t);a.array[e]?t=R(t,v):a.object[e]?t=R(t,W(t)):a.set[e]&&(t=R(t,p)); return function(){var t=arguments[0],r=arguments[1];r=r>2?r-2:1,t=e(t);var n=t.length;return n&&r>=n?t:v(t,r)}},mixin:function(e){return function(t){var r=this;if(!h(r))return e(r,Object(t));var n=[],i=[];return f(d(t),function(e){var a=t[e];h(a)&&(i.push(e),n.push(r.prototype[e]))}),e(r,Object(t)),f(i,function(e,t){var i=n[t];h(i)?r.prototype[e]=i:delete r.prototype[e]}),r}},runInContext:function(t){return function(r){return n(e,t(r))}}},E=function(e,t){e=i.aliasToReal[e]||e;var r=B[e];if(r)return r(t);
var n;return l(i.caps,function(r){return l(i.aryMethod[r],function(a){if(e==a){var o=i.iterateeRearg[e],u=!s&&i.aryIteratee[e];return n=c(t,r),r>1&&!i.skipRearg[e]&&(n=y(n,i.methodRearg[e]||i.aryRearg[r])),o?n=I(n,o):u&&(n=x(n,u)),r>1&&(n=f(n,r)),!1}}),!n}),n||(n=t),i.placeholder[e]&&(n.placeholder=o),n};if(!s)return k(t,r);var B=[];return l(i.caps,function(e){l(i.aryMethod[e],function(e){var t=u[i.key[e]||e];t&&B.push([e,k(e,t)])})}),l(B,function(e){u[e[0]]=e[1]}),l(d(u),function(e){l(i.realToAlias[e]||[],function(t){ a.array[e]?t=x(t,R):a.object[e]?t=x(t,W(t)):a.set[e]&&(t=x(t,p));var n;return f(i.caps,function(r){return f(i.aryMethod[r],function(a){if(e==a){var o=!s&&i.iterateeAry[e],u=i.iterateeRearg[e],p=i.methodSpread[e];return n=void 0===p?c(t,r):y(t,p),r>1&&!i.skipRearg[e]&&(n=g(n,i.methodRearg[e]||i.aryRearg[r])),u?n=O(n,u):o&&(n=I(n,o)),r>1&&(n=l(n,r)),!1}}),!n}),n||(n=t),i.placeholder[e]&&(n.placeholder=o),n};if(!s)return E(t,r);u.__=o;var k=[];return f(i.caps,function(e){f(i.aryMethod[e],function(e){
u[t]=u[e]})}),u}var i=r(2),a=i.mutate,o={};e.exports=n},function(e,t){t.aliasToReal={all:"some",allPass:"overEvery",apply:"spread",compose:"flowRight",contains:"includes",dissoc:"omit",each:"forEach",eachRight:"forEachRight",equals:"isEqual",extend:"assignIn",extendWith:"assignInWith",first:"head",init:"initial",mapObj:"mapValues",omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",pickAll:"pick",pipe:"flow",prop:"get",propOf:"propertyOf",propOr:"getOr",somePass:"overSome", var t=u[i.rename[e]||e];t&&k.push([e,E(e,t)])})}),f(k,function(e){u[e[0]]=e[1]}),f(d(u),function(e){f(i.realToAlias[e]||[],function(t){u[t]=u[e]})}),u}var i=r(2),a=i.mutate,o={};e.exports=n},function(e,t){t.aliasToReal={all:"some",allPass:"overEvery",apply:"spread",assoc:"set",assocPath:"set",compose:"flowRight",contains:"includes",dissoc:"unset",dissocPath:"unset",each:"forEach",eachRight:"forEachRight",equals:"isEqual",extend:"assignIn",extendWith:"assignInWith",first:"head",init:"initial",mapObj:"mapValues",
unapply:"rest",unnest:"flatten",useWith:"overArgs",whereEq:"filter",zipObj:"zipObject"},t.aryIteratee={assignWith:2,assignInWith:2,cloneDeepWith:1,cloneWith:1,dropRightWhile:1,dropWhile:1,every:1,filter:1,find:1,findIndex:1,findKey:1,findLast:1,findLastIndex:1,findLastKey:1,flatMap:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,isEqualWith:2,isMatchWith:2,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1, omitAll:"omit",nAry:"ary",path:"get",pathEq:"matchesProperty",pathOr:"getOr",pickAll:"pick",pipe:"flow",prop:"get",propOf:"propertyOf",propOr:"getOr",somePass:"overSome",unapply:"rest",unnest:"flatten",useWith:"overArgs",whereEq:"filter",zipObj:"zipObject"},t.aryMethod={1:["attempt","ceil","create","curry","curryRight","floor","fromPairs","invert","iteratee","memoize","method","methodOf","mixin","over","overEvery","overSome","rest","reverse","round","runInContext","spread","template","trim","trimEnd","trimStart","uniqueId","words"],
transform:2},t.aryMethod={1:["attempt","ceil","create","curry","curryRight","floor","fromPairs","invert","iteratee","memoize","method","methodOf","mixin","over","overEvery","overSome","rest","reverse","round","runInContext","template","trim","trimEnd","trimStart","uniqueId","words"],2:["add","after","ary","assign","assignIn","at","before","bind","bindKey","chunk","cloneDeepWith","cloneWith","concat","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","delay","difference","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","merge","minBy","omit","omitBy","orderBy","overArgs","pad","padEnd","padStart","parseInt","partition","pick","pickBy","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"], 2:["add","after","ary","assign","assignIn","at","before","bind","bindKey","chunk","cloneDeepWith","cloneWith","concat","countBy","curryN","curryRightN","debounce","defaults","defaultsDeep","delay","difference","drop","dropRight","dropRightWhile","dropWhile","endsWith","eq","every","filter","find","find","findIndex","findKey","findLast","findLastIndex","findLastKey","flatMap","forEach","forEachRight","forIn","forInRight","forOwn","forOwnRight","get","groupBy","gt","gte","has","hasIn","includes","indexOf","intersection","invertBy","invoke","invokeMap","isEqual","isMatch","join","keyBy","lastIndexOf","lt","lte","map","mapKeys","mapValues","matchesProperty","maxBy","merge","minBy","omit","omitBy","orderBy","overArgs","pad","padEnd","padStart","parseInt","partial","partialRight","partition","pick","pickBy","pull","pullAll","pullAt","random","range","rangeRight","rearg","reject","remove","repeat","result","sampleSize","some","sortBy","sortedIndex","sortedIndexOf","sortedLastIndex","sortedLastIndexOf","sortedUniqBy","split","startsWith","subtract","sumBy","take","takeRight","takeRightWhile","takeWhile","tap","throttle","thru","times","truncate","union","uniqBy","uniqWith","unset","unzipWith","without","wrap","xor","zip","zipObject","zipObjectDeep"],
3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","getOr","inRange","intersectionBy","intersectionWith","isEqualWith","isMatchWith","mergeWith","pullAllBy","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","xorBy","xorWith","zipWith"],4:["fill","setWith"]},t.aryRearg={2:[1,0],3:[2,1,0],4:[3,2,0,1]},t.iterateeRearg={findKey:[1],findLastKey:[1],mapKeys:[1]},t.methodRearg={assignInWith:[1,2,0],assignWith:[1,2,0], 3:["assignInWith","assignWith","clamp","differenceBy","differenceWith","getOr","inRange","intersectionBy","intersectionWith","isEqualWith","isMatchWith","mergeWith","pullAllBy","reduce","reduceRight","replace","set","slice","sortedIndexBy","sortedLastIndexBy","transform","unionBy","unionWith","xorBy","xorWith","zipWith"],4:["fill","setWith"]},t.aryRearg={2:[1,0],3:[2,1,0],4:[3,2,0,1]},t.caps=[1,2,3,4],t.iterateeAry={assignWith:2,assignInWith:2,cloneDeepWith:1,cloneWith:1,dropRightWhile:1,dropWhile:1,
clamp:[2,0,1],mergeWith:[1,2,0],reduce:[2,0,1],reduceRight:[2,0,1],set:[2,0,1],setWith:[3,1,2,0],slice:[2,0,1],transform:[2,0,1]},t.caps=[1,2,3,4],t.key={curryN:"curry",curryRightN:"curryRight",getOr:"get"},t.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignIn:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsDeep:!0,merge:!0,mergeWith:!0},set:{set:!0,setWith:!0}},t.placeholder={bind:!0,bindKey:!0,curry:!0,curryRight:!0,partial:!0,partialRight:!0 every:1,filter:1,find:1,findIndex:1,findKey:1,findLast:1,findLastIndex:1,findLastKey:1,flatMap:1,forEach:1,forEachRight:1,forIn:1,forInRight:1,forOwn:1,forOwnRight:1,isEqualWith:2,isMatchWith:2,map:1,mapKeys:1,mapValues:1,partition:1,reduce:2,reduceRight:2,reject:1,remove:1,some:1,takeRightWhile:1,takeWhile:1,times:1,transform:2},t.iterateeRearg={findKey:[1],findLastKey:[1],mapKeys:[1]},t.methodRearg={assignInWith:[1,2,0],assignWith:[1,2,0],clamp:[2,0,1],mergeWith:[1,2,0],reduce:[2,0,1],reduceRight:[2,0,1],
},t.realToAlias=function(){var e=Object.prototype.hasOwnProperty,r=t.aliasToReal,n={};for(var i in r){var a=r[i];e.call(n,a)?n[a].push(i):n[a]=[i]}return n}(),t.skipRearg={assign:!0,assignIn:!0,concat:!0,difference:!0,matchesProperty:!0,merge:!0,random:!0,range:!0,rangeRight:!0,zip:!0,zipObject:!0}}])}); set:[2,0,1],setWith:[3,1,2,0],slice:[2,0,1],transform:[2,0,1]},t.methodSpread={partial:1,partialRight:1},t.mutate={array:{fill:!0,pull:!0,pullAll:!0,pullAllBy:!0,pullAt:!0,remove:!0,reverse:!0},object:{assign:!0,assignIn:!0,assignInWith:!0,assignWith:!0,defaults:!0,defaultsDeep:!0,merge:!0,mergeWith:!0},set:{set:!0,setWith:!0,unset:!0}},t.placeholder={bind:!0,bindKey:!0,curry:!0,curryRight:!0,partial:!0,partialRight:!0},t.realToAlias=function(){var e=Object.prototype.hasOwnProperty,r=t.aliasToReal,n={};
for(var i in r){var a=r[i];e.call(n,a)?n[a].push(i):n[a]=[i]}return n}(),t.rename={curryN:"curry",curryRightN:"curryRight",getOr:"get"},t.skipRearg={assign:!0,assignIn:!0,concat:!0,difference:!0,matchesProperty:!0,merge:!0,partial:!0,partialRight:!0,random:!0,range:!0,rangeRight:!0,zip:!0,zipObject:!0}}])});

295
dist/lodash.js vendored
View File

@@ -1,6 +1,6 @@
/** /**
* @license * @license
* lodash 4.1.0 (Custom Build) <https://lodash.com/> * lodash 4.2.0 (Custom Build) <https://lodash.com/>
* Build: `lodash -o ./dist/lodash.js` * Build: `lodash -o ./dist/lodash.js`
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/> * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
@@ -13,7 +13,7 @@
var undefined; var undefined;
/** Used as the semantic version number. */ /** Used as the semantic version number. */
var VERSION = '4.1.0'; var VERSION = '4.2.0';
/** Used to compose bitmasks for wrapper metadata. */ /** Used to compose bitmasks for wrapper metadata. */
var BIND_FLAG = 1, var BIND_FLAG = 1,
@@ -397,11 +397,11 @@
* @private * @private
* @param {Function} func The function to invoke. * @param {Function} func The function to invoke.
* @param {*} thisArg The `this` binding of `func`. * @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`. * @returns {*} Returns the result of `func`.
*/ */
function apply(func, thisArg, args) { function apply(func, thisArg, args) {
var length = args ? args.length : 0; var length = args.length;
switch (length) { switch (length) {
case 0: return func.call(thisArg); case 0: return func.call(thisArg);
case 1: return func.call(thisArg, args[0]); case 1: return func.call(thisArg, args[0]);
@@ -841,7 +841,7 @@
result = result === undefined ? current : (result + current); result = result === undefined ? current : (result + current);
} }
} }
return length ? result : 0; return result;
} }
/** /**
@@ -1254,14 +1254,14 @@
* lodash.isFunction(lodash.bar); * lodash.isFunction(lodash.bar);
* // => true * // => true
* *
* // using `context` to mock `Date#getTime` use in `_.now` * // Use `context` to mock `Date#getTime` use in `_.now`.
* var mock = _.runInContext({ * var mock = _.runInContext({
* 'Date': function() { * 'Date': function() {
* return { 'getTime': getTimeMock }; * return { 'getTime': getTimeMock };
* } * }
* }); * });
* *
* // or creating a suped-up `defer` in Node.js * // Create a suped-up `defer` in Node.js.
* var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
*/ */
function runInContext(context) { function runInContext(context) {
@@ -1451,11 +1451,11 @@
* *
* var wrapped = _([1, 2, 3]); * var wrapped = _([1, 2, 3]);
* *
* // returns an unwrapped value * // Returns an unwrapped value.
* wrapped.reduce(_.add); * wrapped.reduce(_.add);
* // => 6 * // => 6
* *
* // returns a wrapped value * // Returns a wrapped value.
* var squares = wrapped.map(square); * var squares = wrapped.map(square);
* *
* _.isArray(squares); * _.isArray(squares);
@@ -5471,7 +5471,7 @@
* _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); * _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
* // => [3.1, 1.3] * // => [3.1, 1.3]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
* // => [{ 'x': 2 }] * // => [{ 'x': 2 }]
*/ */
@@ -5603,15 +5603,15 @@
* _.dropRightWhile(users, function(o) { return !o.active; }); * _.dropRightWhile(users, function(o) { return !o.active; });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
* // => objects for ['barney', 'fred'] * // => objects for ['barney', 'fred']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.dropRightWhile(users, ['active', false]); * _.dropRightWhile(users, ['active', false]);
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.dropRightWhile(users, 'active'); * _.dropRightWhile(users, 'active');
* // => objects for ['barney', 'fred', 'pebbles'] * // => objects for ['barney', 'fred', 'pebbles']
*/ */
@@ -5643,15 +5643,15 @@
* _.dropWhile(users, function(o) { return !o.active; }); * _.dropWhile(users, function(o) { return !o.active; });
* // => objects for ['pebbles'] * // => objects for ['pebbles']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.dropWhile(users, { 'user': 'barney', 'active': false }); * _.dropWhile(users, { 'user': 'barney', 'active': false });
* // => objects for ['fred', 'pebbles'] * // => objects for ['fred', 'pebbles']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.dropWhile(users, ['active', false]); * _.dropWhile(users, ['active', false]);
* // => objects for ['pebbles'] * // => objects for ['pebbles']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.dropWhile(users, 'active'); * _.dropWhile(users, 'active');
* // => objects for ['barney', 'fred', 'pebbles'] * // => objects for ['barney', 'fred', 'pebbles']
*/ */
@@ -5722,15 +5722,15 @@
* _.findIndex(users, function(o) { return o.user == 'barney'; }); * _.findIndex(users, function(o) { return o.user == 'barney'; });
* // => 0 * // => 0
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findIndex(users, { 'user': 'fred', 'active': false }); * _.findIndex(users, { 'user': 'fred', 'active': false });
* // => 1 * // => 1
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findIndex(users, ['active', false]); * _.findIndex(users, ['active', false]);
* // => 0 * // => 0
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findIndex(users, 'active'); * _.findIndex(users, 'active');
* // => 2 * // => 2
*/ */
@@ -5761,15 +5761,15 @@
* _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
* // => 2 * // => 2
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findLastIndex(users, { 'user': 'barney', 'active': true }); * _.findLastIndex(users, { 'user': 'barney', 'active': true });
* // => 0 * // => 0
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findLastIndex(users, ['active', false]); * _.findLastIndex(users, ['active', false]);
* // => 2 * // => 2
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findLastIndex(users, 'active'); * _.findLastIndex(users, 'active');
* // => 0 * // => 0
*/ */
@@ -5779,31 +5779,6 @@
: -1; : -1;
} }
/**
* Creates an array of flattened values by running each element in `array`
* through `iteratee` and concating its result to the other mapped values.
* The iteratee is invoked with three arguments: (value, index|key, array).
*
* @static
* @memberOf _
* @category Array
* @param {Array} array The array to iterate over.
* @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration.
* @returns {Array} Returns the new array.
* @example
*
* function duplicate(n) {
* return [n, n];
* }
*
* _.flatMap([1, 2], duplicate);
* // => [1, 1, 2, 2]
*/
function flatMap(array, iteratee) {
var length = array ? array.length : 0;
return length ? baseFlatten(arrayMap(array, getIteratee(iteratee, 3))) : [];
}
/** /**
* Flattens `array` a single level. * Flattens `array` a single level.
* *
@@ -5891,8 +5866,7 @@
* Gets the index at which the first occurrence of `value` is found in `array` * 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) * 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 * 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` * from the end of `array`.
* performs a faster binary search.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -5906,7 +5880,7 @@
* _.indexOf([1, 2, 1, 2], 2); * _.indexOf([1, 2, 1, 2], 2);
* // => 1 * // => 1
* *
* // using `fromIndex` * // Search from the `fromIndex`.
* _.indexOf([1, 2, 1, 2], 2, 2); * _.indexOf([1, 2, 1, 2], 2, 2);
* // => 3 * // => 3
*/ */
@@ -5977,7 +5951,7 @@
* _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [2.1] * // => [2.1]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }] * // => [{ 'x': 1 }]
*/ */
@@ -6080,7 +6054,7 @@
* _.lastIndexOf([1, 2, 1, 2], 2); * _.lastIndexOf([1, 2, 1, 2], 2);
* // => 3 * // => 3
* *
* // using `fromIndex` * // Search from the `fromIndex`.
* _.lastIndexOf([1, 2, 1, 2], 2, 2); * _.lastIndexOf([1, 2, 1, 2], 2, 2);
* // => 1 * // => 1
*/ */
@@ -6356,7 +6330,7 @@
* _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict)); * _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict));
* // => 1 * // => 1
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); * _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
* // => 0 * // => 0
*/ */
@@ -6424,7 +6398,7 @@
* @returns {number} Returns the index at which `value` should be inserted into `array`. * @returns {number} Returns the index at which `value` should be inserted into `array`.
* @example * @example
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); * _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
* // => 1 * // => 1
*/ */
@@ -6491,7 +6465,7 @@
* @example * @example
* *
* _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
* // => [1.1, 2.2] * // => [1.1, 2.3]
*/ */
function sortedUniqBy(array, iteratee) { function sortedUniqBy(array, iteratee) {
return (array && array.length) return (array && array.length)
@@ -6604,15 +6578,15 @@
* _.takeRightWhile(users, function(o) { return !o.active; }); * _.takeRightWhile(users, function(o) { return !o.active; });
* // => objects for ['fred', 'pebbles'] * // => objects for ['fred', 'pebbles']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
* // => objects for ['pebbles'] * // => objects for ['pebbles']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.takeRightWhile(users, ['active', false]); * _.takeRightWhile(users, ['active', false]);
* // => objects for ['fred', 'pebbles'] * // => objects for ['fred', 'pebbles']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.takeRightWhile(users, 'active'); * _.takeRightWhile(users, 'active');
* // => [] * // => []
*/ */
@@ -6644,15 +6618,15 @@
* _.takeWhile(users, function(o) { return !o.active; }); * _.takeWhile(users, function(o) { return !o.active; });
* // => objects for ['barney', 'fred'] * // => objects for ['barney', 'fred']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.takeWhile(users, { 'user': 'barney', 'active': false }); * _.takeWhile(users, { 'user': 'barney', 'active': false });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.takeWhile(users, ['active', false]); * _.takeWhile(users, ['active', false]);
* // => objects for ['barney', 'fred'] * // => objects for ['barney', 'fred']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.takeWhile(users, 'active'); * _.takeWhile(users, 'active');
* // => [] * // => []
*/ */
@@ -6697,7 +6671,7 @@
* _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor); * _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [2.1, 1.2, 4.3] * // => [2.1, 1.2, 4.3]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }, { 'x': 2 }] * // => [{ 'x': 1 }, { 'x': 2 }]
*/ */
@@ -6774,7 +6748,7 @@
* _.uniqBy([2.1, 1.2, 2.3], Math.floor); * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
* // => [2.1, 1.2] * // => [2.1, 1.2]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }, { 'x': 2 }] * // => [{ 'x': 1 }, { 'x': 2 }]
*/ */
@@ -6930,7 +6904,7 @@
* _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor); * _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [1.2, 4.3] * // => [1.2, 4.3]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 2 }] * // => [{ 'x': 2 }]
*/ */
@@ -7085,10 +7059,9 @@
} }
/** /**
* This method invokes `interceptor` and returns `value`. The interceptor is * This method invokes `interceptor` and returns `value`. The interceptor
* invoked with one argument; (value). The purpose of this method is to "tap into" * is invoked with one argument; (value). The purpose of this method is to
* a method chain in order to perform operations on intermediate results within * "tap into" a method chain in order to modify intermediate results.
* the chain.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -7100,6 +7073,7 @@
* *
* _([1, 2, 3]) * _([1, 2, 3])
* .tap(function(array) { * .tap(function(array) {
* // Mutate input array.
* array.pop(); * array.pop();
* }) * })
* .reverse() * .reverse()
@@ -7113,6 +7087,8 @@
/** /**
* This method is like `_.tap` except that it returns the result of `interceptor`. * 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 * @static
* @memberOf _ * @memberOf _
@@ -7188,11 +7164,11 @@
* { 'user': 'fred', 'age': 40 } * { 'user': 'fred', 'age': 40 }
* ]; * ];
* *
* // without explicit chaining * // A sequence without explicit chaining.
* _(users).head(); * _(users).head();
* // => { 'user': 'barney', 'age': 36 } * // => { 'user': 'barney', 'age': 36 }
* *
* // with explicit chaining * // A sequence with explicit chaining.
* _(users) * _(users)
* .chain() * .chain()
* .head() * .head()
@@ -7447,15 +7423,15 @@
* { 'user': 'fred', 'active': false } * { 'user': 'fred', 'active': false }
* ]; * ];
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.every(users, { 'user': 'barney', 'active': false }); * _.every(users, { 'user': 'barney', 'active': false });
* // => false * // => false
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.every(users, ['active', false]); * _.every(users, ['active', false]);
* // => true * // => true
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.every(users, 'active'); * _.every(users, 'active');
* // => false * // => false
*/ */
@@ -7488,15 +7464,15 @@
* _.filter(users, function(o) { return !o.active; }); * _.filter(users, function(o) { return !o.active; });
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.filter(users, { 'age': 36, 'active': true }); * _.filter(users, { 'age': 36, 'active': true });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.filter(users, ['active', false]); * _.filter(users, ['active', false]);
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.filter(users, 'active'); * _.filter(users, 'active');
* // => objects for ['barney'] * // => objects for ['barney']
*/ */
@@ -7527,15 +7503,15 @@
* _.find(users, function(o) { return o.age < 40; }); * _.find(users, function(o) { return o.age < 40; });
* // => object for 'barney' * // => object for 'barney'
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.find(users, { 'age': 1, 'active': true }); * _.find(users, { 'age': 1, 'active': true });
* // => object for 'pebbles' * // => object for 'pebbles'
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.find(users, ['active', false]); * _.find(users, ['active', false]);
* // => object for 'fred' * // => object for 'fred'
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.find(users, 'active'); * _.find(users, 'active');
* // => object for 'barney' * // => object for 'barney'
*/ */
@@ -7574,6 +7550,30 @@
return baseFind(collection, predicate, baseEachRight); return baseFind(collection, predicate, baseEachRight);
} }
/**
* 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, collection).
*
* @static
* @memberOf _
* @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 flattened array.
* @example
*
* function duplicate(n) {
* return [n, n];
* }
*
* _.flatMap([1, 2], duplicate);
* // => [1, 1, 2, 2]
*/
function flatMap(collection, iteratee) {
return baseFlatten(map(collection, iteratee));
}
/** /**
* Iterates over elements of `collection` invoking `iteratee` for each element. * Iterates over elements of `collection` invoking `iteratee` for each element.
* The iteratee is invoked with three arguments: (value, index|key, collection). * The iteratee is invoked with three arguments: (value, index|key, collection).
@@ -7649,7 +7649,7 @@
* _.groupBy([6.1, 4.2, 6.3], Math.floor); * _.groupBy([6.1, 4.2, 6.3], Math.floor);
* // => { '4': [4.2], '6': [6.1, 6.3] } * // => { '4': [4.2], '6': [6.1, 6.3] }
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.groupBy(['one', 'two', 'three'], 'length'); * _.groupBy(['one', 'two', 'three'], 'length');
* // => { '3': ['one', 'two'], '5': ['three'] } * // => { '3': ['one', 'two'], '5': ['three'] }
*/ */
@@ -7805,7 +7805,7 @@
* { 'user': 'fred' } * { 'user': 'fred' }
* ]; * ];
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.map(users, 'user'); * _.map(users, 'user');
* // => ['barney', 'fred'] * // => ['barney', 'fred']
*/ */
@@ -7837,7 +7837,7 @@
* { 'user': 'barney', 'age': 36 } * { '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']); * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
* // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
*/ */
@@ -7878,15 +7878,15 @@
* _.partition(users, function(o) { return o.active; }); * _.partition(users, function(o) { return o.active; });
* // => objects for [['fred'], ['barney', 'pebbles']] * // => objects for [['fred'], ['barney', 'pebbles']]
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.partition(users, { 'age': 1, 'active': false }); * _.partition(users, { 'age': 1, 'active': false });
* // => objects for [['pebbles'], ['barney', 'fred']] * // => objects for [['pebbles'], ['barney', 'fred']]
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.partition(users, ['active', false]); * _.partition(users, ['active', false]);
* // => objects for [['barney', 'pebbles'], ['fred']] * // => objects for [['barney', 'pebbles'], ['fred']]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.partition(users, 'active'); * _.partition(users, 'active');
* // => objects for [['fred'], ['barney', 'pebbles']] * // => objects for [['fred'], ['barney', 'pebbles']]
*/ */
@@ -7983,15 +7983,15 @@
* _.reject(users, function(o) { return !o.active; }); * _.reject(users, function(o) { return !o.active; });
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.reject(users, { 'age': 40, 'active': true }); * _.reject(users, { 'age': 40, 'active': true });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.reject(users, ['active', false]); * _.reject(users, ['active', false]);
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.reject(users, 'active'); * _.reject(users, 'active');
* // => objects for ['barney'] * // => objects for ['barney']
*/ */
@@ -8130,15 +8130,15 @@
* { 'user': 'fred', 'active': false } * { 'user': 'fred', 'active': false }
* ]; * ];
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.some(users, { 'user': 'barney', 'active': false }); * _.some(users, { 'user': 'barney', 'active': false });
* // => false * // => false
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.some(users, ['active', false]); * _.some(users, ['active', false]);
* // => true * // => true
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.some(users, 'active'); * _.some(users, 'active');
* // => true * // => true
*/ */
@@ -8338,7 +8338,7 @@
* bound('!'); * bound('!');
* // => 'hi fred!' * // => 'hi fred!'
* *
* // using placeholders * // Bound with placeholders.
* var bound = _.bind(greet, object, _, '!'); * var bound = _.bind(greet, object, _, '!');
* bound('hi'); * bound('hi');
* // => 'hi fred!' * // => 'hi fred!'
@@ -8391,7 +8391,7 @@
* bound('!'); * bound('!');
* // => 'hiya fred!' * // => 'hiya fred!'
* *
* // using placeholders * // Bound with placeholders.
* var bound = _.bindKey(object, 'greet', _, '!'); * var bound = _.bindKey(object, 'greet', _, '!');
* bound('hi'); * bound('hi');
* // => 'hiya fred!' * // => 'hiya fred!'
@@ -8441,7 +8441,7 @@
* curried(1, 2, 3); * curried(1, 2, 3);
* // => [1, 2, 3] * // => [1, 2, 3]
* *
* // using placeholders * // Curried with placeholders.
* curried(1)(_, 3)(2); * curried(1)(_, 3)(2);
* // => [1, 2, 3] * // => [1, 2, 3]
*/ */
@@ -8485,7 +8485,7 @@
* curried(1, 2, 3); * curried(1, 2, 3);
* // => [1, 2, 3] * // => [1, 2, 3]
* *
* // using placeholders * // Curried with placeholders.
* curried(3)(1, _)(2); * curried(3)(1, _)(2);
* // => [1, 2, 3] * // => [1, 2, 3]
*/ */
@@ -8528,21 +8528,21 @@
* @returns {Function} Returns the new debounced function. * @returns {Function} Returns the new debounced function.
* @example * @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)); * 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, { * jQuery(element).on('click', _.debounce(sendMail, 300, {
* 'leading': true, * 'leading': true,
* 'trailing': false * '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 debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
* var source = new EventSource('/stream'); * var source = new EventSource('/stream');
* jQuery(source).on('message', debounced); * jQuery(source).on('message', debounced);
* *
* // cancel a trailing debounced invocation * // Cancel the trailing debounced invocation.
* jQuery(window).on('popstate', debounced.cancel); * jQuery(window).on('popstate', debounced.cancel);
*/ */
function debounce(func, wait, options) { function debounce(func, wait, options) {
@@ -8675,7 +8675,7 @@
* _.defer(function(text) { * _.defer(function(text) {
* console.log(text); * console.log(text);
* }, 'deferred'); * }, 'deferred');
* // logs 'deferred' after one or more milliseconds * // => logs 'deferred' after one or more milliseconds
*/ */
var defer = rest(function(func, args) { var defer = rest(function(func, args) {
return baseDelay(func, 1, args); return baseDelay(func, 1, args);
@@ -8758,12 +8758,12 @@
* values(object); * values(object);
* // => [1, 2] * // => [1, 2]
* *
* // modifying the result cache * // Modify the result cache.
* values.cache.set(object, ['a', 'b']); * values.cache.set(object, ['a', 'b']);
* values(object); * values(object);
* // => ['a', 'b'] * // => ['a', 'b']
* *
* // replacing `_.memoize.Cache` * // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap; * _.memoize.Cache = WeakMap;
*/ */
function memoize(func, resolver) { function memoize(func, resolver) {
@@ -8908,7 +8908,7 @@
* sayHelloTo('fred'); * sayHelloTo('fred');
* // => 'hello fred' * // => 'hello fred'
* *
* // using placeholders * // Partially applied with placeholders.
* var greetFred = _.partial(greet, _, 'fred'); * var greetFred = _.partial(greet, _, 'fred');
* greetFred('hi'); * greetFred('hi');
* // => 'hi fred' * // => 'hi fred'
@@ -8944,7 +8944,7 @@
* greetFred('hi'); * greetFred('hi');
* // => 'hi fred' * // => 'hi fred'
* *
* // using placeholders * // Partially applied with placeholders.
* var sayHelloTo = _.partialRight(greet, 'hello', _); * var sayHelloTo = _.partialRight(greet, 'hello', _);
* sayHelloTo('fred'); * sayHelloTo('fred');
* // => 'hello fred' * // => 'hello fred'
@@ -9041,6 +9041,7 @@
* @memberOf _ * @memberOf _
* @category Function * @category Function
* @param {Function} func The function to spread arguments over. * @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. * @returns {Function} Returns the new function.
* @example * @example
* *
@@ -9051,7 +9052,6 @@
* say(['fred', 'hello']); * say(['fred', 'hello']);
* // => 'fred says hello' * // => 'fred says hello'
* *
* // with a Promise
* var numbers = Promise.all([ * var numbers = Promise.all([
* Promise.resolve(40), * Promise.resolve(40),
* Promise.resolve(36) * Promise.resolve(36)
@@ -9062,13 +9062,20 @@
* })); * }));
* // => a Promise of 76 * // => a Promise of 76
*/ */
function spread(func) { function spread(func, start) {
if (typeof func != 'function') { if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT); throw new TypeError(FUNC_ERROR_TEXT);
} }
return function(array) { start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
return apply(func, this, array); return rest(function(args) {
}; var array = args[start],
otherArgs = args.slice(0, start);
if (array) {
arrayPush(otherArgs, array);
}
return apply(func, this, otherArgs);
});
} }
/** /**
@@ -9101,14 +9108,14 @@
* @returns {Function} Returns the new throttled function. * @returns {Function} Returns the new throttled function.
* @example * @example
* *
* // avoid excessively updating the position while scrolling * // Avoid excessively updating the position while scrolling.
* jQuery(window).on('scroll', _.throttle(updatePosition, 100)); * 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 }); * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
* jQuery(element).on('click', throttled); * jQuery(element).on('click', throttled);
* *
* // cancel a trailing throttled invocation * // Cancel the trailing throttled invocation.
* jQuery(window).on('popstate', throttled.cancel); * jQuery(window).on('popstate', throttled.cancel);
*/ */
function throttle(func, wait, options) { function throttle(func, wait, options) {
@@ -10727,15 +10734,15 @@
* _.findKey(users, function(o) { return o.age < 40; }); * _.findKey(users, function(o) { return o.age < 40; });
* // => 'barney' (iteration order is not guaranteed) * // => 'barney' (iteration order is not guaranteed)
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findKey(users, { 'age': 1, 'active': true }); * _.findKey(users, { 'age': 1, 'active': true });
* // => 'pebbles' * // => 'pebbles'
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findKey(users, ['active', false]); * _.findKey(users, ['active', false]);
* // => 'fred' * // => 'fred'
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findKey(users, 'active'); * _.findKey(users, 'active');
* // => 'barney' * // => 'barney'
*/ */
@@ -10764,15 +10771,15 @@
* _.findLastKey(users, function(o) { return o.age < 40; }); * _.findLastKey(users, function(o) { return o.age < 40; });
* // => returns 'pebbles' assuming `_.findKey` returns 'barney' * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findLastKey(users, { 'age': 36, 'active': true }); * _.findLastKey(users, { 'age': 36, 'active': true });
* // => 'barney' * // => 'barney'
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findLastKey(users, ['active', false]); * _.findLastKey(users, ['active', false]);
* // => 'fred' * // => 'fred'
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findLastKey(users, 'active'); * _.findLastKey(users, 'active');
* // => 'pebbles' * // => 'pebbles'
*/ */
@@ -11245,7 +11252,7 @@
* _.mapValues(users, function(o) { return o.age; }); * _.mapValues(users, function(o) { return o.age; });
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.mapValues(users, 'age'); * _.mapValues(users, 'age');
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
*/ */
@@ -11299,6 +11306,8 @@
* method instead. The `customizer` is invoked with seven arguments: * method instead. The `customizer` is invoked with seven arguments:
* (objValue, srcValue, key, object, source, stack). * (objValue, srcValue, key, object, source, stack).
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -11405,7 +11414,7 @@
/** /**
* Creates an object composed of the `object` properties `predicate` returns * 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 * @static
* @memberOf _ * @memberOf _
@@ -11472,6 +11481,8 @@
* are created for all other missing properties. Use `_.setWith` to customize * are created for all other missing properties. Use `_.setWith` to customize
* `path` creation. * `path` creation.
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -11501,6 +11512,8 @@
* path creation is handled by the method instead. The `customizer` is invoked * path creation is handled by the method instead. The `customizer` is invoked
* with three arguments: (nsValue, key, nsObject). * with three arguments: (nsValue, key, nsObject).
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -11620,6 +11633,8 @@
/** /**
* Removes the property at `path` of `object`. * Removes the property at `path` of `object`.
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -12409,54 +12424,54 @@
* @returns {Function} Returns the compiled template function. * @returns {Function} Returns the compiled template function.
* @example * @example
* *
* // using the "interpolate" delimiter to create a compiled template * // Use the "interpolate" delimiter to create a compiled template.
* var compiled = _.template('hello <%= user %>!'); * var compiled = _.template('hello <%= user %>!');
* compiled({ 'user': 'fred' }); * compiled({ 'user': 'fred' });
* // => 'hello 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>'); * var compiled = _.template('<b><%- value %></b>');
* compiled({ 'value': '<script>' }); * compiled({ 'value': '<script>' });
* // => '<b>&lt;script&gt;</b>' * // => '<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><% }); %>'); * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
* compiled({ 'users': ['fred', 'barney'] }); * compiled({ 'users': ['fred', 'barney'] });
* // => '<li>fred</li><li>barney</li>' * // => '<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); %>!'); * var compiled = _.template('<% print("hello " + user); %>!');
* compiled({ 'user': 'barney' }); * compiled({ 'user': 'barney' });
* // => 'hello 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 }!'); * var compiled = _.template('hello ${ user }!');
* compiled({ 'user': 'pebbles' }); * compiled({ 'user': 'pebbles' });
* // => 'hello pebbles!' * // => 'hello pebbles!'
* *
* // using custom template delimiters * // Use custom template delimiters.
* _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
* var compiled = _.template('hello {{ user }}!'); * var compiled = _.template('hello {{ user }}!');
* compiled({ 'user': 'mustache' }); * compiled({ 'user': 'mustache' });
* // => 'hello mustache!' * // => 'hello mustache!'
* *
* // using backslashes to treat delimiters as plain text * // Use backslashes to treat delimiters as plain text.
* var compiled = _.template('<%= "\\<%- value %\\>" %>'); * var compiled = _.template('<%= "\\<%- value %\\>" %>');
* compiled({ 'value': 'ignored' }); * compiled({ 'value': 'ignored' });
* // => '<%- value %>' * // => '<%- 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 text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
* var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
* compiled({ 'users': ['fred', 'barney'] }); * compiled({ 'users': ['fred', 'barney'] });
* // => '<li>fred</li><li>barney</li>' * // => '<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' }); * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
* compiled(data); * compiled(data);
* // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector * // => 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' }); * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
* compiled.source; * compiled.source;
* // => function(data) { * // => function(data) {
@@ -12465,8 +12480,8 @@
* // return __p; * // return __p;
* // } * // }
* *
* // using the `source` property to inline compiled templates for meaningful * // Use the `source` property to inline compiled templates for meaningful
* // line numbers in error messages and a stack trace * // line numbers in error messages and stack traces.
* fs.writeFileSync(path.join(cwd, 'jst.js'), '\ * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
* var JST = {\ * var JST = {\
* "main": ' + _.template(mainText).source + '\ * "main": ' + _.template(mainText).source + '\
@@ -12913,7 +12928,7 @@
* @returns {*} Returns the `func` result or error object. * @returns {*} Returns the `func` result or error object.
* @example * @example
* *
* // avoid throwing errors for invalid selectors * // Avoid throwing errors for invalid selectors.
* var elements = _.attempt(function(selector) { * var elements = _.attempt(function(selector) {
* return document.querySelectorAll(selector); * return document.querySelectorAll(selector);
* }, '>_>'); * }, '>_>');
@@ -12926,7 +12941,7 @@
try { try {
return apply(func, undefined, args); return apply(func, undefined, args);
} catch (e) { } catch (e) {
return isError(e) ? e : new Error(e); return isObject(e) ? e : new Error(e);
} }
}); });
@@ -13139,7 +13154,7 @@
* { 'user': 'fred', 'age': 40 } * { 'user': 'fred', 'age': 40 }
* ]; * ];
* *
* // create custom iteratee shorthands * // Create custom iteratee shorthands.
* _.iteratee = _.wrap(_.iteratee, function(callback, func) { * _.iteratee = _.wrap(_.iteratee, function(callback, func) {
* var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func); * var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func);
* return !p ? callback(func) : function(object) { * return !p ? callback(func) : function(object) {
@@ -13151,9 +13166,7 @@
* // => [{ 'user': 'fred', 'age': 40 }] * // => [{ 'user': 'fred', 'age': 40 }]
*/ */
function iteratee(func) { function iteratee(func) {
return (isObjectLike(func) && !isArray(func)) return baseIteratee(typeof func == 'function' ? func : baseClone(func, true));
? matches(func)
: baseIteratee(func);
} }
/** /**
@@ -13789,7 +13802,7 @@
* _.maxBy(objects, function(o) { return o.n; }); * _.maxBy(objects, function(o) { return o.n; });
* // => { 'n': 2 } * // => { 'n': 2 }
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.maxBy(objects, 'n'); * _.maxBy(objects, 'n');
* // => { 'n': 2 } * // => { 'n': 2 }
*/ */
@@ -13857,7 +13870,7 @@
* _.minBy(objects, function(o) { return o.n; }); * _.minBy(objects, function(o) { return o.n; });
* // => { 'n': 1 } * // => { 'n': 1 }
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.minBy(objects, 'n'); * _.minBy(objects, 'n');
* // => { 'n': 1 } * // => { 'n': 1 }
*/ */
@@ -13951,7 +13964,7 @@
* _.sumBy(objects, function(o) { return o.n; }); * _.sumBy(objects, function(o) { return o.n; });
* // => 20 * // => 20
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.sumBy(objects, 'n'); * _.sumBy(objects, 'n');
* // => 20 * // => 20
*/ */

186
dist/lodash.min.js vendored
View File

@@ -1,115 +1,115 @@
/** /**
* @license * @license
* lodash 4.1.0 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE * lodash 4.2.0 (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
* Build: `lodash -o ./dist/lodash.js` * Build: `lodash -o ./dist/lodash.js`
*/ */
;(function(){function n(n,t){return n.set(t[0],t[1]),n}function t(n,t){return n.add(t),n}function r(n,t,r){switch(r?r.length:0){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function e(n,t,r,e){for(var u=-1,o=n.length;++u<o;){var i=n[u];t(e,i,r(i),n)}return e}function u(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););return n}function o(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false; ;(function(){function n(n,t){return n.set(t[0],t[1]),n}function t(n,t){return n.add(t),n}function r(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function e(n,t,r,e){for(var u=-1,o=n.length;++u<o;){var i=n[u];t(e,i,r(i),n)}return e}function u(n,t){for(var r=-1,e=n.length;++r<e&&false!==t(n[r],r,n););return n}function o(n,t){for(var r=-1,e=n.length;++r<e;)if(!t(n[r],r,n))return false;
return true}function i(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function f(n,t){return!!n.length&&-1<d(n,t,0)}function c(n,t,r){for(var e=-1,u=n.length;++e<u;)if(r(t,n[e]))return true;return false}function a(n,t){for(var r=-1,e=n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function l(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function s(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function h(n,t,r,e){ return true}function i(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;){var i=n[r];t(i,r,n)&&(o[++u]=i)}return o}function f(n,t){return!!n.length&&-1<d(n,t,0)}function c(n,t,r){for(var e=-1,u=n.length;++e<u;)if(r(t,n[e]))return true;return false}function a(n,t){for(var r=-1,e=n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function l(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function s(n,t,r,e){var u=-1,o=n.length;for(e&&o&&(r=n[++u]);++u<o;)r=t(r,n[u],u,n);return r}function h(n,t,r,e){
var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function p(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;return false}function _(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(f===Z?i===i:r(i,f)))var f=i,c=o}return c}function g(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function v(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function d(n,t,r){if(t!==t)return C(n,r);--r;for(var e=n.length;++r<e;)if(n[r]===t)return r; var u=n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function p(n,t){for(var r=-1,e=n.length;++r<e;)if(t(n[r],r,n))return true;return false}function _(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(f===Z?i===i:r(i,f)))var f=i,c=o}return c}function g(n,t,r,e){var u;return r(n,function(n,r,o){return t(n,r,o)?(u=e?r:n,false):void 0}),u}function v(n,t,r){for(var e=n.length,u=r?e:-1;r?u--:++u<e;)if(t(n[u],u,n))return u;return-1}function d(n,t,r){if(t!==t)return C(n,r);--r;for(var e=n.length;++r<e;)if(n[r]===t)return r;
return-1}function y(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function b(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function x(n,t){for(var r,e=-1,u=n.length;++e<u;){var o=t(n[e]);o!==Z&&(r=r===Z?o:r+o)}return u?r:0}function m(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function j(n,t){return a(t,function(t){return[t,n[t]]})}function w(n){return function(t){return n(t)}}function A(n,t){return a(t,function(t){return n[t]})}function O(n,t){for(var r=-1,e=n.length;++r<e&&-1<d(t,n[r],0);); return-1}function y(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function b(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function x(n,t){for(var r,e=-1,u=n.length;++e<u;){var o=t(n[e]);o!==Z&&(r=r===Z?o:r+o)}return r}function m(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function j(n,t){return a(t,function(t){return[t,n[t]]})}function w(n){return function(t){return n(t)}}function A(n,t){return a(t,function(t){return n[t]})}function O(n,t){for(var r=-1,e=n.length;++r<e&&-1<d(t,n[r],0););
return r}function E(n,t){for(var r=n.length;r--&&-1<d(t,n[r],0););return r}function k(n){return n&&n.Object===Object?n:null}function I(n,t){if(n!==t){var r=null===n,e=n===Z,u=n===n,o=null===t,i=t===Z,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(t>n&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function R(n){return Bn[n]}function S(n){return zn[n]}function W(n){return"\\"+Fn[n]}function C(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function U(n){var t=false; return r}function E(n,t){for(var r=n.length;r--&&-1<d(t,n[r],0););return r}function k(n){return n&&n.Object===Object?n:null}function I(n,t){if(n!==t){var r=null===n,e=n===Z,u=n===n,o=null===t,i=t===Z,f=t===t;if(n>t&&!o||!u||r&&!i&&f||e&&f)return 1;if(t>n&&!r||!f||o&&!e&&u||i&&u)return-1}return 0}function R(n){return Bn[n]}function S(n){return zn[n]}function W(n){return"\\"+Fn[n]}function C(n,t,r){var e=n.length;for(t+=r?0:-1;r?t--:++t<e;){var u=n[t];if(u!==u)return t}return-1}function U(n){var t=false;
if(null!=n&&typeof n.toString!="function")try{t=!!(n+"")}catch(r){}return t}function B(n,t){return n=typeof n=="number"||yn.test(n)?+n:-1,n>-1&&0==n%1&&(null==t?9007199254740991:t)>n}function z(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function L(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function $(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]="__lodash_placeholder__",o[++u]=r);return o}function F(n){var t=-1,r=Array(n.size);return n.forEach(function(n){ if(null!=n&&typeof n.toString!="function")try{t=!!(n+"")}catch(r){}return t}function B(n,t){return n=typeof n=="number"||yn.test(n)?+n:-1,n>-1&&0==n%1&&(null==t?9007199254740991:t)>n}function z(n){for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}function L(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]}),r}function $(n,t){for(var r=-1,e=n.length,u=-1,o=[];++r<e;)n[r]===t&&(n[r]="__lodash_placeholder__",o[++u]=r);return o}function F(n){var t=-1,r=Array(n.size);return n.forEach(function(n){
r[++t]=n}),r}function M(n){if(!n||!kn.test(n))return n.length;for(var t=En.lastIndex=0;En.test(n);)t++;return t}function N(n){return Ln[n]}function D(k){function yn(n){if(ye(n)&&!Lo(n)&&!(n instanceof An)){if(n instanceof wn)return n;if(iu.call(n,"__wrapped__"))return Nr(n)}return new wn(n)}function jn(){}function wn(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=Z}function An(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false, r[++t]=n}),r}function M(n){if(!n||!kn.test(n))return n.length;for(var t=En.lastIndex=0;En.test(n);)t++;return t}function N(n){return Ln[n]}function D(k){function yn(n){if(be(n)&&!Lo(n)&&!(n instanceof An)){if(n instanceof wn)return n;if(iu.call(n,"__wrapped__"))return Nr(n)}return new wn(n)}function jn(){}function wn(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=Z}function An(n){this.__wrapped__=n,this.__actions__=[],this.__dir__=1,this.__filtered__=false,
this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Bn(){}function zn(n){var t=-1,r=n?n.length:0;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Ln(n){var t=-1,r=n?n.length:0;for(this.__data__=new zn;++t<r;)this.push(n[t])}function $n(n,t){var r=n.__data__;return Cr(t)?(r=r.__data__,"__lodash_hash_undefined__"===(typeof t=="string"?r.string:r.hash)[t]):r.has(t)}function Fn(n){var t=-1,r=n?n.length:0;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1]); this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Bn(){}function zn(n){var t=-1,r=n?n.length:0;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Ln(n){var t=-1,r=n?n.length:0;for(this.__data__=new zn;++t<r;)this.push(n[t])}function $n(n,t){var r=n.__data__;return Cr(t)?(r=r.__data__,"__lodash_hash_undefined__"===(typeof t=="string"?r.string:r.hash)[t]):r.has(t)}function Fn(n){var t=-1,r=n?n.length:0;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1]);
}}function Dn(n,t){var r=qn(n,t);return 0>r?false:(r==n.length-1?n.pop():ju.call(n,r,1),true)}function Zn(n,t){var r=qn(n,t);return 0>r?Z:n[r][1]}function qn(n,t){for(var r=n.length;r--;)if(ce(n[r][0],t))return r;return-1}function Pn(n,t,r){var e=qn(n,t);0>e?n.push([t,r]):n[e][1]=r}function Tn(n,t,r,e){return n===Z||ce(n,uu[r])&&!iu.call(e,r)?t:n}function Kn(n,t,r){(r!==Z&&!ce(n[t],r)||typeof t=="number"&&r===Z&&!(t in n))&&(n[t]=r)}function Jn(n,t,r){var e=n[t];(!ce(e,r)||ce(e,uu[t])&&!iu.call(n,t)||r===Z&&!(t in n))&&(n[t]=r); }}function Dn(n,t){var r=qn(n,t);return 0>r?false:(r==n.length-1?n.pop():ju.call(n,r,1),true)}function Zn(n,t){var r=qn(n,t);return 0>r?Z:n[r][1]}function qn(n,t){for(var r=n.length;r--;)if(ae(n[r][0],t))return r;return-1}function Pn(n,t,r){var e=qn(n,t);0>e?n.push([t,r]):n[e][1]=r}function Tn(n,t,r,e){return n===Z||ae(n,uu[r])&&!iu.call(e,r)?t:n}function Kn(n,t,r){(r!==Z&&!ae(n[t],r)||typeof t=="number"&&r===Z&&!(t in n))&&(n[t]=r)}function Jn(n,t,r){var e=n[t];(!ae(e,r)||ae(e,uu[t])&&!iu.call(n,t)||r===Z&&!(t in n))&&(n[t]=r);
}function Yn(n,t,r,e){return Tu(n,function(n,u,o){t(e,n,r(n),o)}),e}function Hn(n,t){return n&&Jt(t,Le(t),n)}function Qn(n,t){for(var r=-1,e=null==n,u=t.length,o=Array(u);++r<u;)o[r]=e?Z:Ue(n,t[r]);return o}function Xn(n,t,r){return n===n&&(r!==Z&&(n=n>r?r:n),t!==Z&&(n=t>n?t:n)),n}function nt(n,t,r,e,o,i){var f;if(r&&(f=o?r(n,e,o,i):r(n)),f!==Z)return f;if(!de(n))return n;if(e=Lo(n)){if(f=Er(n),!t)return Vt(n,f)}else{var c=Ar(n),a="[object Function]"==c||"[object GeneratorFunction]"==c;if("[object Object]"!=c&&"[object Arguments]"!=c&&(!a||o))return Un[c]?Ir(n,c,t):o?n:{}; }function Yn(n,t,r,e){return Tu(n,function(n,u,o){t(e,n,r(n),o)}),e}function Hn(n,t){return n&&Jt(t,$e(t),n)}function Qn(n,t){for(var r=-1,e=null==n,u=t.length,o=Array(u);++r<u;)o[r]=e?Z:Be(n,t[r]);return o}function Xn(n,t,r){return n===n&&(r!==Z&&(n=n>r?r:n),t!==Z&&(n=t>n?t:n)),n}function nt(n,t,r,e,o,i){var f;if(r&&(f=o?r(n,e,o,i):r(n)),f!==Z)return f;if(!ye(n))return n;if(e=Lo(n)){if(f=Er(n),!t)return Vt(n,f)}else{var c=Ar(n),a="[object Function]"==c||"[object GeneratorFunction]"==c;if("[object Object]"!=c&&"[object Arguments]"!=c&&(!a||o))return Un[c]?Ir(n,c,t):o?n:{};
if(U(n))return o?n:{};if(f=kr(a?{}:n),!t)return Ht(n,Hn(f,n))}return i||(i=new Fn),(o=i.get(n))?o:(i.set(n,f),(e?u:ct)(n,function(e,u){Jn(f,u,nt(e,t,r,u,n,i))}),e?f:Ht(n,f))}function tt(n){var t=Le(n),r=t.length;return function(e){if(null==e)return!r;for(var u=r;u--;){var o=t[u],i=n[o],f=e[o];if(f===Z&&!(o in Object(e))||!i(f))return false}return true}}function rt(n,t,r){if(typeof n!="function")throw new ru("Expected a function");return mu(function(){n.apply(Z,r)},t)}function et(n,t,r,e){var u=-1,o=f,i=true,l=n.length,s=[],h=t.length; if(U(n))return o?n:{};if(f=kr(a?{}:n),!t)return Ht(n,Hn(f,n))}return i||(i=new Fn),(o=i.get(n))?o:(i.set(n,f),(e?u:ct)(n,function(e,u){Jn(f,u,nt(e,t,r,u,n,i))}),e?f:Ht(n,f))}function tt(n){var t=$e(n),r=t.length;return function(e){if(null==e)return!r;for(var u=r;u--;){var o=t[u],i=n[o],f=e[o];if(f===Z&&!(o in Object(e))||!i(f))return false}return true}}function rt(n,t,r){if(typeof n!="function")throw new ru("Expected a function");return mu(function(){n.apply(Z,r)},t)}function et(n,t,r,e){var u=-1,o=f,i=true,l=n.length,s=[],h=t.length;
if(!l)return s;r&&(t=a(t,w(r))),e?(o=c,i=false):t.length>=200&&(o=$n,i=false,t=new Ln(t));n:for(;++u<l;){var p=n[u],_=r?r(p):p;if(i&&_===_){for(var g=h;g--;)if(t[g]===_)continue n;s.push(p)}else o(t,_,e)||s.push(p)}return s}function ut(n,t){var r=true;return Tu(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ot(n,t){var r=[];return Tu(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function it(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];he(i)&&(r||Lo(i)||le(i))?t?it(i,t,r,e):l(e,i):r||(e[e.length]=i); if(!l)return s;r&&(t=a(t,w(r))),e?(o=c,i=false):t.length>=200&&(o=$n,i=false,t=new Ln(t));n:for(;++u<l;){var p=n[u],_=r?r(p):p;if(i&&_===_){for(var g=h;g--;)if(t[g]===_)continue n;s.push(p)}else o(t,_,e)||s.push(p)}return s}function ut(n,t){var r=true;return Tu(n,function(n,e,u){return r=!!t(n,e,u)}),r}function ot(n,t){var r=[];return Tu(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function it(n,t,r,e){e||(e=[]);for(var u=-1,o=n.length;++u<o;){var i=n[u];pe(i)&&(r||Lo(i)||se(i))?t?it(i,t,r,e):l(e,i):r||(e[e.length]=i);
}return e}function ft(n,t){null==n||Gu(n,t,$e)}function ct(n,t){return n&&Gu(n,t,Le)}function at(n,t){return n&&Vu(n,t,Le)}function lt(n,t){return i(t,function(t){return _e(n[t])})}function st(n,t){t=Wr(t,n)?[t+""]:Mt(t);for(var r=0,e=t.length;null!=n&&e>r;)n=n[t[r++]];return r&&r==e?n:Z}function ht(n,t){return iu.call(n,t)||typeof n=="object"&&t in n&&null===du(n)}function pt(n,t){return t in Object(n)}function _t(n,t,r){for(var e=r?c:f,u=n.length,o=u,i=Array(u),l=[];o--;){var s=n[o];o&&t&&(s=a(s,w(t))), }return e}function ft(n,t){null==n||Gu(n,t,Fe)}function ct(n,t){return n&&Gu(n,t,$e)}function at(n,t){return n&&Vu(n,t,$e)}function lt(n,t){return i(t,function(t){return ge(n[t])})}function st(n,t){t=Wr(t,n)?[t+""]:Mt(t);for(var r=0,e=t.length;null!=n&&e>r;)n=n[t[r++]];return r&&r==e?n:Z}function ht(n,t){return iu.call(n,t)||typeof n=="object"&&t in n&&null===du(n)}function pt(n,t){return t in Object(n)}function _t(n,t,r){for(var e=r?c:f,u=n.length,o=u,i=Array(u),l=[];o--;){var s=n[o];o&&t&&(s=a(s,w(t))),
i[o]=r||!t&&120>s.length?Z:new Ln(o&&s)}var s=n[0],h=-1,p=s.length,_=i[0];n:for(;++h<p;){var g=s[h],v=t?t(g):g;if(_?!$n(_,v):!e(l,v,r)){for(o=u;--o;){var d=i[o];if(d?!$n(d,v):!e(n[o],v,r))continue n}_&&_.push(v),l.push(g)}}return l}function gt(n,t,r){var e={};return ct(n,function(n,u,o){t(e,r(n),u,o)}),e}function vt(n,t,e){return Wr(t,n)||(t=Mt(t),n=Lr(n,t),t=Pr(t)),t=null==n?n:n[t],null==t?Z:r(t,n,e)}function dt(n,t,r,e,u){if(n===t)n=true;else if(null==n||null==t||!de(n)&&!ye(t))n=n!==n&&t!==t;else n:{ i[o]=r||!t&&120>s.length?Z:new Ln(o&&s)}var s=n[0],h=-1,p=s.length,_=i[0];n:for(;++h<p;){var g=s[h],v=t?t(g):g;if(_?!$n(_,v):!e(l,v,r)){for(o=u;--o;){var d=i[o];if(d?!$n(d,v):!e(n[o],v,r))continue n}_&&_.push(v),l.push(g)}}return l}function gt(n,t,r){var e={};return ct(n,function(n,u,o){t(e,r(n),u,o)}),e}function vt(n,t,e){return Wr(t,n)||(t=Mt(t),n=Lr(n,t),t=Pr(t)),t=null==n?n:n[t],null==t?Z:r(t,n,e)}function dt(n,t,r,e,u){if(n===t)n=true;else if(null==n||null==t||!ye(n)&&!be(t))n=n!==n&&t!==t;else n:{
var o=Lo(n),i=Lo(t),f="[object Array]",c="[object Array]";o||(f=Ar(n),"[object Arguments]"==f?f="[object Object]":"[object Object]"!=f&&(o=Oe(n))),i||(c=Ar(t),"[object Arguments]"==c?c="[object Object]":"[object Object]"!=c&&Oe(t));var a="[object Object]"==f&&!U(n),i="[object Object]"==c&&!U(t),c=f==c;if(!c||o||a){if(!(2&e)&&(f=a&&iu.call(n,"__wrapped__"),i=i&&iu.call(t,"__wrapped__"),f||i)){n=dt(f?n.value():n,i?t.value():t,r,e,u);break n}c?(u||(u=new Fn),n=(o?dr:br)(n,t,dt,r,e,u)):n=false}else n=yr(n,t,f,dt,r,e); var o=Lo(n),i=Lo(t),f="[object Array]",c="[object Array]";o||(f=Ar(n),"[object Arguments]"==f?f="[object Object]":"[object Object]"!=f&&(o=Ee(n))),i||(c=Ar(t),"[object Arguments]"==c?c="[object Object]":"[object Object]"!=c&&Ee(t));var a="[object Object]"==f&&!U(n),i="[object Object]"==c&&!U(t),c=f==c;if(!c||o||a){if(!(2&e)&&(f=a&&iu.call(n,"__wrapped__"),i=i&&iu.call(t,"__wrapped__"),f||i)){n=dt(f?n.value():n,i?t.value():t,r,e,u);break n}c?(u||(u=new Fn),n=(o?dr:br)(n,t,dt,r,e,u)):n=false}else n=yr(n,t,f,dt,r,e);
}return n}function yt(n,t,r,e){var u=r.length,o=u,i=!e;if(null==n)return!o;for(n=Object(n);u--;){var f=r[u];if(i&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<o;){var f=r[u],c=f[0],a=n[c],l=f[1];if(i&&f[2]){if(a===Z&&!(c in n))return false}else if(f=new Fn,c=e?e(a,l,c,n,t,f):Z,c===Z?!dt(l,a,e,3,f):!c)return false}return true}function bt(n){var t=typeof n;return"function"==t?n:null==n?Te:"object"==t?Lo(n)?wt(n[0],n[1]):jt(n):Ye(n)}function xt(n){n=null==n?n:Object(n);var t,r=[];for(t in n)r.push(t);return r; }return n}function yt(n,t,r,e){var u=r.length,o=u,i=!e;if(null==n)return!o;for(n=Object(n);u--;){var f=r[u];if(i&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<o;){var f=r[u],c=f[0],a=n[c],l=f[1];if(i&&f[2]){if(a===Z&&!(c in n))return false}else if(f=new Fn,c=e?e(a,l,c,n,t,f):Z,c===Z?!dt(l,a,e,3,f):!c)return false}return true}function bt(n){var t=typeof n;return"function"==t?n:null==n?Ke:"object"==t?Lo(n)?wt(n[0],n[1]):jt(n):Ye(n)}function xt(n){n=null==n?n:Object(n);var t,r=[];for(t in n)r.push(t);return r;
}function mt(n,t){var r=-1,e=se(n)?Array(n.length):[];return Tu(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function jt(n){var t=jr(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==Z||r in Object(n))}}return function(r){return r===n||yt(r,n,t)}}function wt(n,t){return function(r){var e=Ue(r,n);return e===Z&&e===t?ze(r,n):dt(t,e,Z,3)}}function At(n,t,r,e,o){if(n!==t){var i=Lo(t)||Oe(t)?Z:$e(t);u(i||t,function(u,f){if(i&&(f=u,u=t[f]),de(u)){o||(o=new Fn); }function mt(n,t){var r=-1,e=he(n)?Array(n.length):[];return Tu(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function jt(n){var t=jr(n);if(1==t.length&&t[0][2]){var r=t[0][0],e=t[0][1];return function(n){return null==n?false:n[r]===e&&(e!==Z||r in Object(n))}}return function(r){return r===n||yt(r,n,t)}}function wt(n,t){return function(r){var e=Be(r,n);return e===Z&&e===t?Le(r,n):dt(t,e,Z,3)}}function At(n,t,r,e,o){if(n!==t){var i=Lo(t)||Ee(t)?Z:Fe(t);u(i||t,function(u,f){if(i&&(f=u,u=t[f]),ye(u)){o||(o=new Fn);
var c=f,a=o,l=n[c],s=t[c],h=a.get(s);if(h)Kn(n,c,h);else{var h=e?e(l,s,c+"",n,t,a):Z,p=h===Z;p&&(h=s,Lo(s)||Oe(s)?Lo(l)?h=r?Vt(l):l:he(l)?h=Vt(l):(p=false,h=nt(s)):me(s)||le(s)?le(l)?h=We(l):!de(l)||r&&_e(l)?(p=false,h=nt(s)):h=r?nt(l):l:p=false),a.set(s,h),p&&At(h,s,r,e,a),Kn(n,c,h)}}else c=e?e(n[f],u,f+"",n,t,o):Z,c===Z&&(c=u),Kn(n,f,c)})}}function Ot(n,t,r){var e=-1,u=mr();return t=a(t.length?t:Array(1),function(n){return u(n)}),n=mt(n,function(n){return{a:a(t,function(t){return t(n)}),b:++e,c:n}}),b(n,function(n,t){ var c=f,a=o,l=n[c],s=t[c],h=a.get(s);if(h)Kn(n,c,h);else{var h=e?e(l,s,c+"",n,t,a):Z,p=h===Z;p&&(h=s,Lo(s)||Ee(s)?Lo(l)?h=r?Vt(l):l:pe(l)?h=Vt(l):(p=false,h=nt(s)):je(s)||se(s)?se(l)?h=Ce(l):!ye(l)||r&&ge(l)?(p=false,h=nt(s)):h=r?nt(l):l:p=false),a.set(s,h),p&&At(h,s,r,e,a),Kn(n,c,h)}}else c=e?e(n[f],u,f+"",n,t,o):Z,c===Z&&(c=u),Kn(n,f,c)})}}function Ot(n,t,r){var e=-1,u=mr();return t=a(t.length?t:Array(1),function(n){return u(n)}),n=mt(n,function(n){return{a:a(t,function(t){return t(n)}),b:++e,c:n}}),b(n,function(n,t){
var e;n:{e=-1;for(var u=n.a,o=t.a,i=u.length,f=r.length;++e<i;){var c=I(u[e],o[e]);if(c){e=f>e?c*("desc"==r[e]?-1:1):c;break n}}e=n.b-t.b}return e})}function Et(n,t){return n=Object(n),s(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function kt(n,t){var r={};return ft(n,function(n,e){t(n,e)&&(r[e]=n)}),r}function It(n){return function(t){return null==t?Z:t[n]}}function Rt(n){return function(t){return st(t,n)}}function St(n,t,r){var e=-1,u=t.length,o=n;for(r&&(o=a(n,function(n){return r(n)}));++e<u;)for(var i=0,f=t[e],f=r?r(f):f;-1<(i=d(o,f,i));)o!==n&&ju.call(o,i,1), var e;n:{e=-1;for(var u=n.a,o=t.a,i=u.length,f=r.length;++e<i;){var c=I(u[e],o[e]);if(c){e=f>e?c*("desc"==r[e]?-1:1):c;break n}}e=n.b-t.b}return e})}function Et(n,t){return n=Object(n),s(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function kt(n,t){var r={};return ft(n,function(n,e){t(n,e)&&(r[e]=n)}),r}function It(n){return function(t){return null==t?Z:t[n]}}function Rt(n){return function(t){return st(t,n)}}function St(n,t,r){var e=-1,u=t.length,o=n;for(r&&(o=a(n,function(n){return r(n)}));++e<u;)for(var i=0,f=t[e],f=r?r(f):f;-1<(i=d(o,f,i));)o!==n&&ju.call(o,i,1),
ju.call(n,i,1);return n}function Wt(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(e==r||u!=o){var o=u;if(B(u))ju.call(n,u,1);else if(Wr(u,n))delete n[u];else{var u=Mt(u),i=Lr(n,u);null!=i&&delete i[Pr(u)]}}}}function Ct(n,t){return n+Au(Wu()*(t-n+1))}function Ut(n,t,r,e){t=Wr(t,n)?[t+""]:Mt(t);for(var u=-1,o=t.length,i=o-1,f=n;null!=f&&++u<o;){var c=t[u];if(de(f)){var a=r;if(u!=i){var l=f[c],a=e?e(l,c,f):Z;a===Z&&(a=null==l?B(t[u+1])?[]:{}:l)}Jn(f,c,a)}f=f[c]}return n}function Bt(n,t,r){var e=-1,u=n.length; ju.call(n,i,1);return n}function Wt(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(e==r||u!=o){var o=u;if(B(u))ju.call(n,u,1);else if(Wr(u,n))delete n[u];else{var u=Mt(u),i=Lr(n,u);null!=i&&delete i[Pr(u)]}}}}function Ct(n,t){return n+Au(Wu()*(t-n+1))}function Ut(n,t,r,e){t=Wr(t,n)?[t+""]:Mt(t);for(var u=-1,o=t.length,i=o-1,f=n;null!=f&&++u<o;){var c=t[u];if(ye(f)){var a=r;if(u!=i){var l=f[c],a=e?e(l,c,f):Z;a===Z&&(a=null==l?B(t[u+1])?[]:{}:l)}Jn(f,c,a)}f=f[c]}return n}function Bt(n,t,r){var e=-1,u=n.length;
for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function zt(n,t){var r;return Tu(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Lt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&2147483647>=u){for(;u>e;){var o=e+u>>>1,i=n[o];(r?t>=i:t>i)&&null!==i?e=o+1:u=o}return u}return $t(n,t,Te,r)}function $t(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,c=t===Z;o>u;){var a=Au((u+o)/2),l=r(n[a]),s=l!==Z,h=l===l;(i?h||e:f?h&&s&&(e||null!=l):c?h&&(e||s):null==l?0:e?t>=l:t>l)?u=a+1:o=a; for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function zt(n,t){var r;return Tu(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function Lt(n,t,r){var e=0,u=n?n.length:e;if(typeof t=="number"&&t===t&&2147483647>=u){for(;u>e;){var o=e+u>>>1,i=n[o];(r?t>=i:t>i)&&null!==i?e=o+1:u=o}return u}return $t(n,t,Ke,r)}function $t(n,t,r,e){t=r(t);for(var u=0,o=n?n.length:0,i=t!==t,f=null===t,c=t===Z;o>u;){var a=Au((u+o)/2),l=r(n[a]),s=l!==Z,h=l===l;(i?h||e:f?h&&s&&(e||null!=l):c?h&&(e||s):null==l?0:e?t>=l:t>l)?u=a+1:o=a;
}return Ru(o,4294967294)}function Ft(n,t){for(var r=0,e=n.length,u=n[0],o=t?t(u):u,i=o,f=0,c=[u];++r<e;)u=n[r],o=t?t(u):u,ce(o,i)||(i=o,c[++f]=u);return c}function Mt(n){return Lo(n)?n:$r(n)}function Nt(n,t,r){var e=-1,u=f,o=n.length,i=true,a=[],l=a;if(r)i=false,u=c;else if(o<200)l=t?[]:a;else{if(u=t?null:Yu(n))return F(u);i=false,u=$n,l=new Ln}n:for(;++e<o;){var s=n[e],h=t?t(s):s;if(i&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n;t&&l.push(h),a.push(s)}else u(l,h,r)||(l!==a&&l.push(h),a.push(s)); }return Ru(o,4294967294)}function Ft(n,t){for(var r=0,e=n.length,u=n[0],o=t?t(u):u,i=o,f=0,c=[u];++r<e;)u=n[r],o=t?t(u):u,ae(o,i)||(i=o,c[++f]=u);return c}function Mt(n){return Lo(n)?n:$r(n)}function Nt(n,t,r){var e=-1,u=f,o=n.length,i=true,a=[],l=a;if(r)i=false,u=c;else if(o<200)l=t?[]:a;else{if(u=t?null:Yu(n))return F(u);i=false,u=$n,l=new Ln}n:for(;++e<o;){var s=n[e],h=t?t(s):s;if(i&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n;t&&l.push(h),a.push(s)}else u(l,h,r)||(l!==a&&l.push(h),a.push(s));
}return a}function Dt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););return r?Bt(n,e?0:o,e?o+1:u):Bt(n,e?o+1:0,e?u:o)}function Zt(n,t){var r=n;return r instanceof An&&(r=r.value()),s(t,function(n,t){return t.func.apply(t.thisArg,l([n],t.args))},r)}function qt(n,t,r){for(var e=-1,u=n.length;++e<u;)var o=o?l(et(o,n[e],t,r),et(n[e],o,t,r)):n[e];return o&&o.length?Nt(o,t,r):[]}function Pt(n,t,r){for(var e=-1,u=n.length,o=t.length,i={};++e<u;)r(i,n[e],o>e?t[e]:Z);return i}function Tt(n){ }return a}function Dt(n,t,r,e){for(var u=n.length,o=e?u:-1;(e?o--:++o<u)&&t(n[o],o,n););return r?Bt(n,e?0:o,e?o+1:u):Bt(n,e?o+1:0,e?u:o)}function Zt(n,t){var r=n;return r instanceof An&&(r=r.value()),s(t,function(n,t){return t.func.apply(t.thisArg,l([n],t.args))},r)}function qt(n,t,r){for(var e=-1,u=n.length;++e<u;)var o=o?l(et(o,n[e],t,r),et(n[e],o,t,r)):n[e];return o&&o.length?Nt(o,t,r):[]}function Pt(n,t,r){for(var e=-1,u=n.length,o=t.length,i={};++e<u;)r(i,n[e],o>e?t[e]:Z);return i}function Tt(n){
var t=new n.constructor(n.byteLength);return new _u(t).set(new _u(n)),t}function Kt(n,t,r){for(var e=r.length,u=-1,o=Iu(n.length-e,0),i=-1,f=t.length,c=Array(f+o);++i<f;)c[i]=t[i];for(;++u<e;)c[r[u]]=n[u];for(;o--;)c[i++]=n[u++];return c}function Gt(n,t,r){for(var e=-1,u=r.length,o=-1,i=Iu(n.length-u,0),f=-1,c=t.length,a=Array(i+c);++o<i;)a[o]=n[o];for(i=o;++f<c;)a[i+f]=t[f];for(;++e<u;)a[i+r[e]]=n[o++];return a}function Vt(n,t){var r=-1,e=n.length;for(t||(t=Array(e));++r<e;)t[r]=n[r];return t}function Jt(n,t,r){ var t=new n.constructor(n.byteLength);return new _u(t).set(new _u(n)),t}function Kt(n,t,r){for(var e=r.length,u=-1,o=Iu(n.length-e,0),i=-1,f=t.length,c=Array(f+o);++i<f;)c[i]=t[i];for(;++u<e;)c[r[u]]=n[u];for(;o--;)c[i++]=n[u++];return c}function Gt(n,t,r){for(var e=-1,u=r.length,o=-1,i=Iu(n.length-u,0),f=-1,c=t.length,a=Array(i+c);++o<i;)a[o]=n[o];for(i=o;++f<c;)a[i+f]=t[f];for(;++e<u;)a[i+r[e]]=n[o++];return a}function Vt(n,t){var r=-1,e=n.length;for(t||(t=Array(e));++r<e;)t[r]=n[r];return t}function Jt(n,t,r){
return Yt(n,t,r)}function Yt(n,t,r,e){r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],f=e?e(r[i],n[i],i,r,n):n[i];Jn(r,i,f)}return r}function Ht(n,t){return Jt(n,Xu(n),t)}function Qt(n,t){return function(r,u){var o=Lo(r)?e:Yn,i=t?t():{};return o(r,n,mr(u),i)}}function Xt(n){return fe(function(t,r){var e=-1,u=r.length,o=u>1?r[u-1]:Z,i=u>2?r[2]:Z,o=typeof o=="function"?(u--,o):Z;for(i&&Sr(r[0],r[1],i)&&(o=3>u?Z:o,u=1),t=Object(t);++e<u;)(i=r[e])&&n(t,i,e,o);return t})}function nr(n,t){return function(r,e){ return Yt(n,t,r)}function Yt(n,t,r,e){r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],f=e?e(r[i],n[i],i,r,n):n[i];Jn(r,i,f)}return r}function Ht(n,t){return Jt(n,Xu(n),t)}function Qt(n,t){return function(r,u){var o=Lo(r)?e:Yn,i=t?t():{};return o(r,n,mr(u),i)}}function Xt(n){return ce(function(t,r){var e=-1,u=r.length,o=u>1?r[u-1]:Z,i=u>2?r[2]:Z,o=typeof o=="function"?(u--,o):Z;for(i&&Sr(r[0],r[1],i)&&(o=3>u?Z:o,u=1),t=Object(t);++e<u;)(i=r[e])&&n(t,i,e,o);return t})}function nr(n,t){return function(r,e){
if(null==r)return r;if(!se(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function tr(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var f=e[n?i:++u];if(false===r(o[f],f,o))break}return t}}function rr(n,t,r){function e(){return(this&&this!==Gn&&this instanceof e?o:n).apply(u?r:this,arguments)}var u=1&t,o=or(n);return e}function er(n){return function(t){t=Ce(t);var r=kn.test(t)?t.match(En):Z,e=r?r[0]:t.charAt(0);return t=r?r.slice(1).join(""):t.slice(1), if(null==r)return r;if(!he(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}function tr(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var f=e[n?i:++u];if(false===r(o[f],f,o))break}return t}}function rr(n,t,r){function e(){return(this&&this!==Gn&&this instanceof e?o:n).apply(u?r:this,arguments)}var u=1&t,o=or(n);return e}function er(n){return function(t){t=Ue(t);var r=kn.test(t)?t.match(En):Z,e=r?r[0]:t.charAt(0);return t=r?r.slice(1).join(""):t.slice(1),
e[n]()+t}}function ur(n){return function(t){return s(qe(De(t)),n,"")}}function or(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Pu(n.prototype),t=n.apply(r,t);return de(t)?t:r}}function ir(n,t,e){ e[n]()+t}}function ur(n){return function(t){return s(Pe(Ze(t)),n,"")}}function or(n){return function(){var t=arguments;switch(t.length){case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=Pu(n.prototype),t=n.apply(r,t);return ye(t)?t:r}}function ir(n,t,e){
function u(){for(var i=arguments.length,f=i,c=Array(i),a=this&&this!==Gn&&this instanceof u?o:n,l=u.placeholder;f--;)c[f]=arguments[f];return f=3>i&&c[0]!==l&&c[i-1]!==l?[]:$(c,l),i-=f.length,e>i?_r(n,t,cr,l,Z,c,f,Z,Z,e-i):r(a,this,c)}var o=or(n);return u}function fr(n){return fe(function(t){t=it(t);var r=t.length,e=r,u=wn.prototype.thru;for(n&&t.reverse();e--;){var o=t[e];if(typeof o!="function")throw new ru("Expected a function");if(u&&!i&&"wrapper"==xr(o))var i=new wn([],true)}for(e=i?e:r;++e<r;)var o=t[e],u=xr(o),f="wrapper"==u?Hu(o):Z,i=f&&Ur(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?i[xr(f[0])].apply(i,f[3]):1==o.length&&Ur(o)?i[u]():i.thru(o); function u(){for(var i=arguments.length,f=i,c=Array(i),a=this&&this!==Gn&&this instanceof u?o:n,l=u.placeholder;f--;)c[f]=arguments[f];return f=3>i&&c[0]!==l&&c[i-1]!==l?[]:$(c,l),i-=f.length,e>i?_r(n,t,cr,l,Z,c,f,Z,Z,e-i):r(a,this,c)}var o=or(n);return u}function fr(n){return ce(function(t){t=it(t);var r=t.length,e=r,u=wn.prototype.thru;for(n&&t.reverse();e--;){var o=t[e];if(typeof o!="function")throw new ru("Expected a function");if(u&&!i&&"wrapper"==xr(o))var i=new wn([],true)}for(e=i?e:r;++e<r;)var o=t[e],u=xr(o),f="wrapper"==u?Hu(o):Z,i=f&&Ur(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?i[xr(f[0])].apply(i,f[3]):1==o.length&&Ur(o)?i[u]():i.thru(o);
return function(){var n=arguments,e=n[0];if(i&&1==n.length&&Lo(e)&&e.length>=200)return i.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function cr(n,t,r,e,u,o,i,f,c,a){function l(){for(var y=arguments.length,b=y,x=Array(y);b--;)x[b]=arguments[b];if(e&&(x=Kt(x,e,u)),o&&(x=Gt(x,o,i)),_||g){var b=l.placeholder,m=$(x,b),y=y-m.length;if(a>y)return _r(n,t,cr,b,r,x,m,f,c,a-y)}if(y=h?r:this,b=p?y[n]:n,f)for(var m=x.length,j=Ru(f.length,m),w=Vt(x);j--;){var A=f[j]; return function(){var n=arguments,e=n[0];if(i&&1==n.length&&Lo(e)&&e.length>=200)return i.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function cr(n,t,r,e,u,o,i,f,c,a){function l(){for(var y=arguments.length,b=y,x=Array(y);b--;)x[b]=arguments[b];if(e&&(x=Kt(x,e,u)),o&&(x=Gt(x,o,i)),_||g){var b=l.placeholder,m=$(x,b),y=y-m.length;if(a>y)return _r(n,t,cr,b,r,x,m,f,c,a-y)}if(y=h?r:this,b=p?y[n]:n,f)for(var m=x.length,j=Ru(f.length,m),w=Vt(x);j--;){var A=f[j];
x[j]=B(A,m)?w[A]:Z}else v&&x.length>1&&x.reverse();return s&&x.length>c&&(x.length=c),this&&this!==Gn&&this instanceof l&&(b=d||or(b)),b.apply(y,x)}var s=128&t,h=1&t,p=2&t,_=8&t,g=16&t,v=512&t,d=p?Z:or(n);return l}function ar(n,t){return function(r,e){return gt(r,n,t(e))}}function lr(n){return fe(function(t){return t=a(it(t),mr()),fe(function(e){var u=this;return n(t,function(n){return r(n,u,e)})})})}function sr(n,t,r){return t=Ie(t),n=M(n),t&&t>n?(t-=n,r=r===Z?" ":r+"",n=Ze(r,wu(t/M(r))),kn.test(r)?n.match(En).slice(0,t).join(""):n.slice(0,t)):""; x[j]=B(A,m)?w[A]:Z}else v&&x.length>1&&x.reverse();return s&&x.length>c&&(x.length=c),this&&this!==Gn&&this instanceof l&&(b=d||or(b)),b.apply(y,x)}var s=128&t,h=1&t,p=2&t,_=8&t,g=16&t,v=512&t,d=p?Z:or(n);return l}function ar(n,t){return function(r,e){return gt(r,n,t(e))}}function lr(n){return ce(function(t){return t=a(it(t),mr()),ce(function(e){var u=this;return n(t,function(n){return r(n,u,e)})})})}function sr(n,t,r){return t=Re(t),n=M(n),t&&t>n?(t-=n,r=r===Z?" ":r+"",n=qe(r,wu(t/M(r))),kn.test(r)?n.match(En).slice(0,t).join(""):n.slice(0,t)):"";
}function hr(n,t,e,u){function o(){for(var t=-1,c=arguments.length,a=-1,l=u.length,s=Array(l+c),h=this&&this!==Gn&&this instanceof o?f:n;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++t];return r(h,i?e:this,s)}var i=1&t,f=or(n);return o}function pr(n){return function(t,r,e){e&&typeof e!="number"&&Sr(t,r,e)&&(r=e=Z),t=Se(t),t=t===t?t:0,r===Z?(r=t,t=0):r=Se(r)||0,e=e===Z?r>t?1:-1:Se(e)||0;var u=-1;r=Iu(wu((r-t)/(e||1)),0);for(var o=Array(r);r--;)o[n?r:++u]=t,t+=e;return o}}function _r(n,t,r,e,u,o,i,f,c,a){ }function hr(n,t,e,u){function o(){for(var t=-1,c=arguments.length,a=-1,l=u.length,s=Array(l+c),h=this&&this!==Gn&&this instanceof o?f:n;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++t];return r(h,i?e:this,s)}var i=1&t,f=or(n);return o}function pr(n){return function(t,r,e){e&&typeof e!="number"&&Sr(t,r,e)&&(r=e=Z),t=We(t),t=t===t?t:0,r===Z?(r=t,t=0):r=We(r)||0,e=e===Z?r>t?1:-1:We(e)||0;var u=-1;r=Iu(wu((r-t)/(e||1)),0);for(var o=Array(r);r--;)o[n?r:++u]=t,t+=e;return o}}function _r(n,t,r,e,u,o,i,f,c,a){
var l=8&t;f=f?Vt(f):Z;var s=l?i:Z;i=l?Z:i;var h=l?o:Z;return o=l?Z:o,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),t=[n,t,u,h,s,o,i,f,c,a],r=r.apply(Z,t),Ur(n)&&no(r,t),r.placeholder=e,r}function gr(n){var t=nu[n];return function(n,r){if(n=Se(n),r=Ie(r)){var e=(Ce(n)+"e").split("e"),e=t(e[0]+"e"+(+e[1]+r)),e=(Ce(e)+"e").split("e");return+(e[0]+"e"+(+e[1]-r))}return t(n)}}function vr(n,t,r,e,u,o,i,f){var c=2&t;if(!c&&typeof n!="function")throw new ru("Expected a function");var a=e?e.length:0;if(a||(t&=-97, var l=8&t;f=f?Vt(f):Z;var s=l?i:Z;i=l?Z:i;var h=l?o:Z;return o=l?Z:o,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),t=[n,t,u,h,s,o,i,f,c,a],r=r.apply(Z,t),Ur(n)&&no(r,t),r.placeholder=e,r}function gr(n){var t=nu[n];return function(n,r){if(n=We(n),r=Re(r)){var e=(Ue(n)+"e").split("e"),e=t(e[0]+"e"+(+e[1]+r)),e=(Ue(e)+"e").split("e");return+(e[0]+"e"+(+e[1]-r))}return t(n)}}function vr(n,t,r,e,u,o,i,f){var c=2&t;if(!c&&typeof n!="function")throw new ru("Expected a function");var a=e?e.length:0;if(a||(t&=-97,
e=u=Z),i=i===Z?i:Iu(Ie(i),0),f=f===Z?f:Ie(f),a-=u?u.length:0,64&t){var l=e,s=u;e=u=Z}var h=c?Z:Hu(n);return o=[n,t,r,e,u,l,s,o,i,f],h&&(r=o[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&h[8]>=o[7].length||384==n&&h[8]>=h[7].length&&8==r,131>t||e)&&(1&n&&(o[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=o[3],o[3]=e?Kt(e,r,h[4]):Vt(r),o[4]=e?$(o[3],"__lodash_placeholder__"):Vt(h[4])),(r=h[5])&&(e=o[5],o[5]=e?Gt(e,r,h[6]):Vt(r),o[6]=e?$(o[5],"__lodash_placeholder__"):Vt(h[6])),(r=h[7])&&(o[7]=Vt(r)),128&n&&(o[8]=null==o[8]?h[8]:Ru(o[8],h[8])), e=u=Z),i=i===Z?i:Iu(Re(i),0),f=f===Z?f:Re(f),a-=u?u.length:0,64&t){var l=e,s=u;e=u=Z}var h=c?Z:Hu(n);return o=[n,t,r,e,u,l,s,o,i,f],h&&(r=o[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&h[8]>=o[7].length||384==n&&h[8]>=h[7].length&&8==r,131>t||e)&&(1&n&&(o[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=o[3],o[3]=e?Kt(e,r,h[4]):Vt(r),o[4]=e?$(o[3],"__lodash_placeholder__"):Vt(h[4])),(r=h[5])&&(e=o[5],o[5]=e?Gt(e,r,h[6]):Vt(r),o[6]=e?$(o[5],"__lodash_placeholder__"):Vt(h[6])),(r=h[7])&&(o[7]=Vt(r)),128&n&&(o[8]=null==o[8]?h[8]:Ru(o[8],h[8])),
null==o[9]&&(o[9]=h[9]),o[0]=h[0],o[1]=t),n=o[0],t=o[1],r=o[2],e=o[3],u=o[4],f=o[9]=null==o[9]?c?0:n.length:Iu(o[9]-a,0),!f&&24&t&&(t&=-25),(h?Ju:no)(t&&1!=t?8==t||16==t?ir(n,t,f):32!=t&&33!=t||u.length?cr.apply(Z,o):hr(n,t,r,e):rr(n,t,r),o)}function dr(n,t,r,e,u,o){var i=-1,f=2&u,c=1&u,a=n.length,l=t.length;if(!(a==l||f&&l>a))return false;if(l=o.get(n))return l==t;for(l=true,o.set(n,t);++i<a;){var s=n[i],h=t[i];if(e)var _=f?e(h,s,i,t,n,o):e(s,h,i,n,t,o);if(_!==Z){if(_)continue;l=false;break}if(c){if(!p(t,function(n){ null==o[9]&&(o[9]=h[9]),o[0]=h[0],o[1]=t),n=o[0],t=o[1],r=o[2],e=o[3],u=o[4],f=o[9]=null==o[9]?c?0:n.length:Iu(o[9]-a,0),!f&&24&t&&(t&=-25),(h?Ju:no)(t&&1!=t?8==t||16==t?ir(n,t,f):32!=t&&33!=t||u.length?cr.apply(Z,o):hr(n,t,r,e):rr(n,t,r),o)}function dr(n,t,r,e,u,o){var i=-1,f=2&u,c=1&u,a=n.length,l=t.length;if(!(a==l||f&&l>a))return false;if(l=o.get(n))return l==t;for(l=true,o.set(n,t);++i<a;){var s=n[i],h=t[i];if(e)var _=f?e(h,s,i,t,n,o):e(s,h,i,n,t,o);if(_!==Z){if(_)continue;l=false;break}if(c){if(!p(t,function(n){
return s===n||r(s,n,e,u,o)})){l=false;break}}else if(s!==h&&!r(s,h,e,u,o)){l=false;break}}return o["delete"](n),l}function yr(n,t,r,e,u,o){switch(r){case"[object ArrayBuffer]":if(n.byteLength!=t.byteLength||!e(new _u(n),new _u(t)))break;return true;case"[object Boolean]":case"[object Date]":return+n==+t;case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object Number]":return n!=+n?t!=+t:n==+t;case"[object RegExp]":case"[object String]":return n==t+"";case"[object Map]":var i=L;case"[object Set]": return s===n||r(s,n,e,u,o)})){l=false;break}}else if(s!==h&&!r(s,h,e,u,o)){l=false;break}}return o["delete"](n),l}function yr(n,t,r,e,u,o){switch(r){case"[object ArrayBuffer]":if(n.byteLength!=t.byteLength||!e(new _u(n),new _u(t)))break;return true;case"[object Boolean]":case"[object Date]":return+n==+t;case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object Number]":return n!=+n?t!=+t:n==+t;case"[object RegExp]":case"[object String]":return n==t+"";case"[object Map]":var i=L;case"[object Set]":
return i||(i=F),(2&o||n.size==t.size)&&e(i(n),i(t),u,1|o);case"[object Symbol]":return!!pu&&Du.call(n)==Du.call(t)}return false}function br(n,t,r,e,u,o){var i=2&u,f=Le(n),c=f.length,a=Le(t).length;if(c!=a&&!i)return false;for(var l=c;l--;){var s=f[l];if(!(i?s in t:ht(t,s)))return false}if(a=o.get(n))return a==t;a=true,o.set(n,t);for(var h=i;++l<c;){var s=f[l],p=n[s],_=t[s];if(e)var g=i?e(_,p,s,t,n,o):e(p,_,s,n,t,o);if(g===Z?p!==_&&!r(p,_,e,u,o):!g){a=false;break}h||(h="constructor"==s)}return a&&!h&&(r=n.constructor, return i||(i=F),(2&o||n.size==t.size)&&e(i(n),i(t),u,1|o);case"[object Symbol]":return!!pu&&Du.call(n)==Du.call(t)}return false}function br(n,t,r,e,u,o){var i=2&u,f=$e(n),c=f.length,a=$e(t).length;if(c!=a&&!i)return false;for(var l=c;l--;){var s=f[l];if(!(i?s in t:ht(t,s)))return false}if(a=o.get(n))return a==t;a=true,o.set(n,t);for(var h=i;++l<c;){var s=f[l],p=n[s],_=t[s];if(e)var g=i?e(_,p,s,t,n,o):e(p,_,s,n,t,o);if(g===Z?p!==_&&!r(p,_,e,u,o):!g){a=false;break}h||(h="constructor"==s)}return a&&!h&&(r=n.constructor,
e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(a=false)),o["delete"](n),a}function xr(n){for(var t=n.name+"",r=qu[t],e=iu.call(qu,t)?r.length:0;e--;){var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function mr(){var n=yn.iteratee||Ke,n=n===Ke?bt:n;return arguments.length?n(arguments[0],arguments[1]):n}function jr(n){n=Fe(n);for(var t=n.length;t--;){var r=n[t][1];n[t][2]=r===r&&!de(r)}return n}function wr(n,t){ e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(a=false)),o["delete"](n),a}function xr(n){for(var t=n.name+"",r=qu[t],e=iu.call(qu,t)?r.length:0;e--;){var u=r[e],o=u.func;if(null==o||o==n)return u.name}return t}function mr(){var n=yn.iteratee||Ge,n=n===Ge?bt:n;return arguments.length?n(arguments[0],arguments[1]):n}function jr(n){n=Me(n);for(var t=n.length;t--;){var r=n[t][1];n[t][2]=r===r&&!ye(r)}return n}function wr(n,t){
var r=null==n?Z:n[t];return be(r)?r:Z}function Ar(n){return au.call(n)}function Or(n,t,r){if(null==n)return false;var e=r(n,t);return e||Wr(t)||(t=Mt(t),n=Lr(n,t),null!=n&&(t=Pr(t),e=r(n,t))),r=n?n.length:Z,e||!!r&&ve(r)&&B(t,r)&&(Lo(n)||we(n)||le(n))}function Er(n){var t=n.length,r=n.constructor(t);return t&&"string"==typeof n[0]&&iu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function kr(n){return Br(n)?{}:(n=n.constructor,Pu(_e(n)?n.prototype:Z))}function Ir(r,e,u){var o=r.constructor;switch(e){ var r=null==n?Z:n[t];return xe(r)?r:Z}function Ar(n){return au.call(n)}function Or(n,t,r){if(null==n)return false;var e=r(n,t);return e||Wr(t)||(t=Mt(t),n=Lr(n,t),null!=n&&(t=Pr(t),e=r(n,t))),r=n?n.length:Z,e||!!r&&de(r)&&B(t,r)&&(Lo(n)||Ae(n)||se(n))}function Er(n){var t=n.length,r=n.constructor(t);return t&&"string"==typeof n[0]&&iu.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function kr(n){return Br(n)?{}:(n=n.constructor,Pu(ge(n)?n.prototype:Z))}function Ir(r,e,u){var o=r.constructor;switch(e){
case"[object ArrayBuffer]":return Tt(r);case"[object Boolean]":case"[object Date]":return new o(+r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return e=r.buffer,new r.constructor(u?Tt(e):e,r.byteOffset,r.length);case"[object Map]":return u=r.constructor,s(L(r),n,new u);case"[object Number]":case"[object String]": case"[object ArrayBuffer]":return Tt(r);case"[object Boolean]":case"[object Date]":return new o(+r);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return e=r.buffer,new r.constructor(u?Tt(e):e,r.byteOffset,r.length);case"[object Map]":return u=r.constructor,s(L(r),n,new u);case"[object Number]":case"[object String]":
return new o(r);case"[object RegExp]":return u=new r.constructor(r.source,hn.exec(r)),u.lastIndex=r.lastIndex,u;case"[object Set]":return u=r.constructor,s(F(r),t,new u);case"[object Symbol]":return pu?Object(Du.call(r)):{}}}function Rr(n){var t=n?n.length:Z;return ve(t)&&(Lo(n)||we(n)||le(n))?m(t,String):null}function Sr(n,t,r){if(!de(r))return false;var e=typeof t;return("number"==e?se(r)&&B(t,r.length):"string"==e&&t in r)?ce(r[t],n):false}function Wr(n,t){return typeof n=="number"?true:!Lo(n)&&(rn.test(n)||!tn.test(n)||null!=t&&n in Object(t)); return new o(r);case"[object RegExp]":return u=new r.constructor(r.source,hn.exec(r)),u.lastIndex=r.lastIndex,u;case"[object Set]":return u=r.constructor,s(F(r),t,new u);case"[object Symbol]":return pu?Object(Du.call(r)):{}}}function Rr(n){var t=n?n.length:Z;return de(t)&&(Lo(n)||Ae(n)||se(n))?m(t,String):null}function Sr(n,t,r){if(!ye(r))return false;var e=typeof t;return("number"==e?he(r)&&B(t,r.length):"string"==e&&t in r)?ae(r[t],n):false}function Wr(n,t){return typeof n=="number"?true:!Lo(n)&&(rn.test(n)||!tn.test(n)||null!=t&&n in Object(t));
}function Cr(n){var t=typeof n;return"number"==t||"boolean"==t||"string"==t&&"__proto__"!==n||null==n}function Ur(n){var t=xr(n),r=yn[t];return typeof r=="function"&&t in An.prototype?n===r?true:(t=Hu(r),!!t&&n===t[0]):false}function Br(n){var t=n&&n.constructor;return n===(typeof t=="function"&&t.prototype||uu)}function zr(n,t,r,e,u,o){return de(n)&&de(t)&&(o.set(t,n),At(n,t,Z,zr,o)),n}function Lr(n,t){return 1==t.length?n:Ue(n,Bt(t,0,-1))}function $r(n){var t=[];return Ce(n).replace(en,function(n,r,e,u){ }function Cr(n){var t=typeof n;return"number"==t||"boolean"==t||"string"==t&&"__proto__"!==n||null==n}function Ur(n){var t=xr(n),r=yn[t];return typeof r=="function"&&t in An.prototype?n===r?true:(t=Hu(r),!!t&&n===t[0]):false}function Br(n){var t=n&&n.constructor;return n===(typeof t=="function"&&t.prototype||uu)}function zr(n,t,r,e,u,o){return ye(n)&&ye(t)&&(o.set(t,n),At(n,t,Z,zr,o)),n}function Lr(n,t){return 1==t.length?n:Be(n,Bt(t,0,-1))}function $r(n){var t=[];return Ue(n).replace(en,function(n,r,e,u){
t.push(e?u.replace(ln,"$1"):r||n)}),t}function Fr(n){return he(n)?n:[]}function Mr(n){return typeof n=="function"?n:Te}function Nr(n){if(n instanceof An)return n.clone();var t=new wn(n.__wrapped__,n.__chain__);return t.__actions__=Vt(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Dr(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Ie(t),Bt(n,0>t?0:t,e)):[]}function Zr(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Ie(t),t=e-t,Bt(n,0,0>t?0:t)):[]}function qr(n){return n?n[0]:Z; t.push(e?u.replace(ln,"$1"):r||n)}),t}function Fr(n){return pe(n)?n:[]}function Mr(n){return typeof n=="function"?n:Ke}function Nr(n){if(n instanceof An)return n.clone();var t=new wn(n.__wrapped__,n.__chain__);return t.__actions__=Vt(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Dr(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Re(t),Bt(n,0>t?0:t,e)):[]}function Zr(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Re(t),t=e-t,Bt(n,0,0>t?0:t)):[]}function qr(n){return n?n[0]:Z;
}function Pr(n){var t=n?n.length:0;return t?n[t-1]:Z}function Tr(n,t){return n&&n.length&&t&&t.length?St(n,t):n}function Kr(n){return n?Cu.call(n):n}function Gr(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){return he(n)?(t=Iu(n.length,t),true):void 0}),m(t,function(t){return a(n,It(t))})}function Vr(n,t){if(!n||!n.length)return[];var e=Gr(n);return null==t?e:a(e,function(n){return r(t,Z,n)})}function Jr(n){return n=yn(n),n.__chain__=true,n}function Yr(n,t){return t(n)}function Hr(){return this; }function Pr(n){var t=n?n.length:0;return t?n[t-1]:Z}function Tr(n,t){return n&&n.length&&t&&t.length?St(n,t):n}function Kr(n){return n?Cu.call(n):n}function Gr(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){return pe(n)?(t=Iu(n.length,t),true):void 0}),m(t,function(t){return a(n,It(t))})}function Vr(n,t){if(!n||!n.length)return[];var e=Gr(n);return null==t?e:a(e,function(n){return r(t,Z,n)})}function Jr(n){return n=yn(n),n.__chain__=true,n}function Yr(n,t){return t(n)}function Hr(){return this;
}function Qr(n,t){return typeof t=="function"&&Lo(n)?u(n,t):Tu(n,Mr(t))}function Xr(n,t){var r;if(typeof t=="function"&&Lo(n)){for(r=n.length;r--&&false!==t(n[r],r,n););r=n}else r=Ku(n,Mr(t));return r}function ne(n,t){var r=-1,e=ke(n),u=e.length,o=u-1;for(t=Xn(Ie(t),0,u);++r<t;){var u=Ct(r,o),i=e[u];e[u]=e[r],e[r]=i}return e.length=t,e}function te(n,t,r){return t=r?Z:t,t=n&&null==t?n.length:t,vr(n,128,Z,Z,Z,Z,t)}function re(n,t){var r;if(typeof t!="function")throw new ru("Expected a function");return n=Ie(n), }function Qr(n,t){return typeof t=="function"&&Lo(n)?u(n,t):Tu(n,Mr(t))}function Xr(n,t){var r;if(typeof t=="function"&&Lo(n)){for(r=n.length;r--&&false!==t(n[r],r,n););r=n}else r=Ku(n,Mr(t));return r}function ne(n,t){return(Lo(n)?a:mt)(n,mr(t,3))}function te(n,t){var r=-1,e=Ie(n),u=e.length,o=u-1;for(t=Xn(Re(t),0,u);++r<t;){var u=Ct(r,o),i=e[u];e[u]=e[r],e[r]=i}return e.length=t,e}function re(n,t,r){return t=r?Z:t,t=n&&null==t?n.length:t,vr(n,128,Z,Z,Z,Z,t)}function ee(n,t){var r;if(typeof t!="function")throw new ru("Expected a function");
function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function ee(n,t,r){return t=r?Z:t,n=vr(n,8,Z,Z,Z,Z,Z,t),n.placeholder=ee.placeholder,n}function ue(n,t,r){return t=r?Z:t,n=vr(n,16,Z,Z,Z,Z,Z,t),n.placeholder=ue.placeholder,n}function oe(n,t,r){function e(){p&&gu(p),a&&gu(a),g=0,c=a=h=p=_=Z}function u(t,r){r&&gu(r),a=p=_=Z,t&&(g=ko(),l=n.apply(h,c),p||a||(c=h=Z))}function o(){var n=t-(ko()-s);0>=n||n>t?u(_,a):p=mu(o,n)}function i(){u(y,p)}function f(){if(c=arguments,s=ko(),h=this, return n=Re(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function ue(n,t,r){return t=r?Z:t,n=vr(n,8,Z,Z,Z,Z,Z,t),n.placeholder=ue.placeholder,n}function oe(n,t,r){return t=r?Z:t,n=vr(n,16,Z,Z,Z,Z,Z,t),n.placeholder=oe.placeholder,n}function ie(n,t,r){function e(){p&&gu(p),a&&gu(a),g=0,c=a=h=p=_=Z}function u(t,r){r&&gu(r),a=p=_=Z,t&&(g=ko(),l=n.apply(h,c),p||a||(c=h=Z))}function o(){var n=t-(ko()-s);0>=n||n>t?u(_,a):p=mu(o,n)}function i(){u(y,p)}function f(){if(c=arguments,
_=y&&(p||!v),false===d)var r=v&&!p;else{a||v||(g=s);var e=d-(s-g),u=0>=e||e>d;u?(a&&(a=gu(a)),g=s,l=n.apply(h,c)):a||(a=mu(i,e))}return u&&p?p=gu(p):p||t===d||(p=mu(o,t)),r&&(u=true,l=n.apply(h,c)),!u||p||a||(c=h=Z),l}var c,a,l,s,h,p,_,g=0,v=false,d=false,y=true;if(typeof n!="function")throw new ru("Expected a function");return t=Se(t)||0,de(r)&&(v=!!r.leading,d="maxWait"in r&&Iu(Se(r.maxWait)||0,t),y="trailing"in r?!!r.trailing:y),f.cancel=e,f.flush=function(){return(p&&_||a&&y)&&(l=n.apply(h,c)),e(),l},f}function ie(n,t){ s=ko(),h=this,_=y&&(p||!v),false===d)var r=v&&!p;else{a||v||(g=s);var e=d-(s-g),u=0>=e||e>d;u?(a&&(a=gu(a)),g=s,l=n.apply(h,c)):a||(a=mu(i,e))}return u&&p?p=gu(p):p||t===d||(p=mu(o,t)),r&&(u=true,l=n.apply(h,c)),!u||p||a||(c=h=Z),l}var c,a,l,s,h,p,_,g=0,v=false,d=false,y=true;if(typeof n!="function")throw new ru("Expected a function");return t=We(t)||0,ye(r)&&(v=!!r.leading,d="maxWait"in r&&Iu(We(r.maxWait)||0,t),y="trailing"in r?!!r.trailing:y),f.cancel=e,f.flush=function(){return(p&&_||a&&y)&&(l=n.apply(h,c)),
function r(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new ru("Expected a function");return r.cache=new ie.Cache,r}function fe(n,t){if(typeof n!="function")throw new ru("Expected a function");return t=Iu(t===Z?n.length-1:Ie(t),0),function(){for(var e=arguments,u=-1,o=Iu(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];switch(t){case 0:return n.call(this,i);case 1:return n.call(this,e[0],i); e(),l},f}function fe(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],o=r.cache;return o.has(u)?o.get(u):(e=n.apply(this,e),r.cache=o.set(u,e),e)}if(typeof n!="function"||t&&typeof t!="function")throw new ru("Expected a function");return r.cache=new fe.Cache,r}function ce(n,t){if(typeof n!="function")throw new ru("Expected a function");return t=Iu(t===Z?n.length-1:Re(t),0),function(){for(var e=arguments,u=-1,o=Iu(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];switch(t){case 0:return n.call(this,i);
case 2:return n.call(this,e[0],e[1],i)}for(o=Array(t+1),u=-1;++u<t;)o[u]=e[u];return o[t]=i,r(n,this,o)}}function ce(n,t){return n===t||n!==n&&t!==t}function ae(n,t){return n>t}function le(n){return he(n)&&iu.call(n,"callee")&&(!xu.call(n,"callee")||"[object Arguments]"==au.call(n))}function se(n){return null!=n&&!(typeof n=="function"&&_e(n))&&ve(Qu(n))}function he(n){return ye(n)&&se(n)}function pe(n){return ye(n)&&typeof n.message=="string"&&"[object Error]"==au.call(n)}function _e(n){return n=de(n)?au.call(n):"", case 1:return n.call(this,e[0],i);case 2:return n.call(this,e[0],e[1],i)}for(o=Array(t+1),u=-1;++u<t;)o[u]=e[u];return o[t]=i,r(n,this,o)}}function ae(n,t){return n===t||n!==n&&t!==t}function le(n,t){return n>t}function se(n){return pe(n)&&iu.call(n,"callee")&&(!xu.call(n,"callee")||"[object Arguments]"==au.call(n))}function he(n){return null!=n&&!(typeof n=="function"&&ge(n))&&de(Qu(n))}function pe(n){return be(n)&&he(n)}function _e(n){return be(n)&&typeof n.message=="string"&&"[object Error]"==au.call(n);
"[object Function]"==n||"[object GeneratorFunction]"==n}function ge(n){return typeof n=="number"&&n==Ie(n)}function ve(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n}function de(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function ye(n){return!!n&&typeof n=="object"}function be(n){return null==n?false:_e(n)?su.test(ou.call(n)):ye(n)&&(U(n)?su:vn).test(n)}function xe(n){return typeof n=="number"||ye(n)&&"[object Number]"==au.call(n)}function me(n){if(!ye(n)||"[object Object]"!=au.call(n)||U(n))return false; }function ge(n){return n=ye(n)?au.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function ve(n){return typeof n=="number"&&n==Re(n)}function de(n){return typeof n=="number"&&n>-1&&0==n%1&&9007199254740991>=n}function ye(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function be(n){return!!n&&typeof n=="object"}function xe(n){return null==n?false:ge(n)?su.test(ou.call(n)):be(n)&&(U(n)?su:vn).test(n)}function me(n){return typeof n=="number"||be(n)&&"[object Number]"==au.call(n);
var t=uu;return typeof n.constructor=="function"&&(t=du(n)),null===t?true:(n=t.constructor,typeof n=="function"&&n instanceof n&&ou.call(n)==cu)}function je(n){return de(n)&&"[object RegExp]"==au.call(n)}function we(n){return typeof n=="string"||!Lo(n)&&ye(n)&&"[object String]"==au.call(n)}function Ae(n){return typeof n=="symbol"||ye(n)&&"[object Symbol]"==au.call(n)}function Oe(n){return ye(n)&&ve(n.length)&&!!Cn[au.call(n)]}function Ee(n,t){return t>n}function ke(n){if(!n)return[];if(se(n))return we(n)?n.match(En):Vt(n); }function je(n){if(!be(n)||"[object Object]"!=au.call(n)||U(n))return false;var t=uu;return typeof n.constructor=="function"&&(t=du(n)),null===t?true:(n=t.constructor,typeof n=="function"&&n instanceof n&&ou.call(n)==cu)}function we(n){return ye(n)&&"[object RegExp]"==au.call(n)}function Ae(n){return typeof n=="string"||!Lo(n)&&be(n)&&"[object String]"==au.call(n)}function Oe(n){return typeof n=="symbol"||be(n)&&"[object Symbol]"==au.call(n)}function Ee(n){return be(n)&&de(n.length)&&!!Cn[au.call(n)]}function ke(n,t){
if(bu&&n[bu])return z(n[bu]());var t=Ar(n);return("[object Map]"==t?L:"[object Set]"==t?F:Me)(n)}function Ie(n){if(!n)return 0===n?n:0;if(n=Se(n),n===q||n===-q)return 1.7976931348623157e308*(0>n?-1:1);var t=n%1;return n===n?t?n-t:n:0}function Re(n){return n?Xn(Ie(n),0,4294967295):0}function Se(n){if(de(n)&&(n=_e(n.valueOf)?n.valueOf():n,n=de(n)?n+"":n),typeof n!="string")return 0===n?n:+n;n=n.replace(fn,"");var t=gn.test(n);return t||dn.test(n)?Nn(n.slice(2),t?2:8):_n.test(n)?P:+n}function We(n){ return t>n}function Ie(n){if(!n)return[];if(he(n))return Ae(n)?n.match(En):Vt(n);if(bu&&n[bu])return z(n[bu]());var t=Ar(n);return("[object Map]"==t?L:"[object Set]"==t?F:Ne)(n)}function Re(n){if(!n)return 0===n?n:0;if(n=We(n),n===q||n===-q)return 1.7976931348623157e308*(0>n?-1:1);var t=n%1;return n===n?t?n-t:n:0}function Se(n){return n?Xn(Re(n),0,4294967295):0}function We(n){if(ye(n)&&(n=ge(n.valueOf)?n.valueOf():n,n=ye(n)?n+"":n),typeof n!="string")return 0===n?n:+n;n=n.replace(fn,"");var t=gn.test(n);
return Jt(n,$e(n))}function Ce(n){if(typeof n=="string")return n;if(null==n)return"";if(Ae(n))return pu?Zu.call(n):"";var t=n+"";return"0"==t&&1/n==-q?"-0":t}function Ue(n,t,r){return n=null==n?Z:st(n,t),n===Z?r:n}function Be(n,t){return Or(n,t,ht)}function ze(n,t){return Or(n,t,pt)}function Le(n){var t=Br(n);if(!t&&!se(n))return ku(Object(n));var r,e=Rr(n),u=!!e,e=e||[],o=e.length;for(r in n)!ht(n,r)||u&&("length"==r||B(r,o))||t&&"constructor"==r||e.push(r);return e}function $e(n){for(var t=-1,r=Br(n),e=xt(n),u=e.length,o=Rr(n),i=!!o,o=o||[],f=o.length;++t<u;){ return t||dn.test(n)?Nn(n.slice(2),t?2:8):_n.test(n)?P:+n}function Ce(n){return Jt(n,Fe(n))}function Ue(n){if(typeof n=="string")return n;if(null==n)return"";if(Oe(n))return pu?Zu.call(n):"";var t=n+"";return"0"==t&&1/n==-q?"-0":t}function Be(n,t,r){return n=null==n?Z:st(n,t),n===Z?r:n}function ze(n,t){return Or(n,t,ht)}function Le(n,t){return Or(n,t,pt)}function $e(n){var t=Br(n);if(!t&&!he(n))return ku(Object(n));var r,e=Rr(n),u=!!e,e=e||[],o=e.length;for(r in n)!ht(n,r)||u&&("length"==r||B(r,o))||t&&"constructor"==r||e.push(r);
var c=e[t];i&&("length"==c||B(c,f))||"constructor"==c&&(r||!iu.call(n,c))||o.push(c)}return o}function Fe(n){return j(n,Le(n))}function Me(n){return n?A(n,Le(n)):[]}function Ne(n){return ti(Ce(n).toLowerCase())}function De(n){return(n=Ce(n))&&n.replace(bn,R).replace(On,"")}function Ze(n,t){n=Ce(n),t=Ie(t);var r="";if(!n||1>t||t>9007199254740991)return r;do t%2&&(r+=n),t=Au(t/2),n+=n;while(t);return r}function qe(n,t,r){return n=Ce(n),t=r?Z:t,t===Z&&(t=Sn.test(n)?Rn:In),n.match(t)||[]}function Pe(n){ return e}function Fe(n){for(var t=-1,r=Br(n),e=xt(n),u=e.length,o=Rr(n),i=!!o,o=o||[],f=o.length;++t<u;){var c=e[t];i&&("length"==c||B(c,f))||"constructor"==c&&(r||!iu.call(n,c))||o.push(c)}return o}function Me(n){return j(n,$e(n))}function Ne(n){return n?A(n,$e(n)):[]}function De(n){return ti(Ue(n).toLowerCase())}function Ze(n){return(n=Ue(n))&&n.replace(bn,R).replace(On,"")}function qe(n,t){n=Ue(n),t=Re(t);var r="";if(!n||1>t||t>9007199254740991)return r;do t%2&&(r+=n),t=Au(t/2),n+=n;while(t);return r;
return function(){return n}}function Te(n){return n}function Ke(n){return ye(n)&&!Lo(n)?Ge(n):bt(n)}function Ge(n){return jt(nt(n,true))}function Ve(n,t,r){var e=Le(t),o=lt(t,e);null!=r||de(t)&&(o.length||!e.length)||(r=t,t=n,n=this,o=lt(t,Le(t)));var i=de(r)&&"chain"in r?r.chain:true,f=_e(n);return u(o,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__);return(r.__actions__=Vt(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t, }function Pe(n,t,r){return n=Ue(n),t=r?Z:t,t===Z&&(t=Sn.test(n)?Rn:In),n.match(t)||[]}function Te(n){return function(){return n}}function Ke(n){return n}function Ge(n){return bt(typeof n=="function"?n:nt(n,true))}function Ve(n,t,r){var e=$e(t),o=lt(t,e);null!=r||ye(t)&&(o.length||!e.length)||(r=t,t=n,n=this,o=lt(t,$e(t)));var i=ye(r)&&"chain"in r?r.chain:true,f=ge(n);return u(o,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(i||t){var r=n(this.__wrapped__);return(r.__actions__=Vt(this.__actions__)).push({
r}return e.apply(n,l([this.value()],arguments))})}),n}function Je(){}function Ye(n){return Wr(n)?It(n):Rt(n)}function He(n){return n&&n.length?x(n,Te):0}k=k?Vn.defaults({},k,Vn.pick(Gn,Wn)):Gn;var Qe=k.Date,Xe=k.Error,nu=k.Math,tu=k.RegExp,ru=k.TypeError,eu=k.Array.prototype,uu=k.Object.prototype,ou=k.Function.prototype.toString,iu=uu.hasOwnProperty,fu=0,cu=ou.call(Object),au=uu.toString,lu=Gn._,su=tu("^"+ou.call(iu).replace(un,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),hu=k.f,pu=k.Symbol,_u=k.Uint8Array,gu=k.clearTimeout,vu=hu?hu.g:Z,du=Object.getPrototypeOf,yu=Object.getOwnPropertySymbols,bu=typeof(bu=pu&&pu.iterator)=="symbol"?bu:Z,xu=uu.propertyIsEnumerable,mu=k.setTimeout,ju=eu.splice,wu=nu.ceil,Au=nu.floor,Ou=k.isFinite,Eu=eu.join,ku=Object.keys,Iu=nu.max,Ru=nu.min,Su=k.parseInt,Wu=nu.random,Cu=eu.reverse,Uu=wr(k,"Map"),Bu=wr(k,"Set"),zu=wr(k,"WeakMap"),Lu=wr(Object,"create"),$u=zu&&new zu,Fu=Uu?ou.call(Uu):"",Mu=Bu?ou.call(Bu):"",Nu=pu?pu.prototype:Z,Du=pu?Nu.valueOf:Z,Zu=pu?Nu.toString:Z,qu={}; func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,l([this.value()],arguments))})}),n}function Je(){}function Ye(n){return Wr(n)?It(n):Rt(n)}function He(n){return n&&n.length?x(n,Ke):0}k=k?Vn.defaults({},k,Vn.pick(Gn,Wn)):Gn;var Qe=k.Date,Xe=k.Error,nu=k.Math,tu=k.RegExp,ru=k.TypeError,eu=k.Array.prototype,uu=k.Object.prototype,ou=k.Function.prototype.toString,iu=uu.hasOwnProperty,fu=0,cu=ou.call(Object),au=uu.toString,lu=Gn._,su=tu("^"+ou.call(iu).replace(un,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),hu=k.f,pu=k.Symbol,_u=k.Uint8Array,gu=k.clearTimeout,vu=hu?hu.g:Z,du=Object.getPrototypeOf,yu=Object.getOwnPropertySymbols,bu=typeof(bu=pu&&pu.iterator)=="symbol"?bu:Z,xu=uu.propertyIsEnumerable,mu=k.setTimeout,ju=eu.splice,wu=nu.ceil,Au=nu.floor,Ou=k.isFinite,Eu=eu.join,ku=Object.keys,Iu=nu.max,Ru=nu.min,Su=k.parseInt,Wu=nu.random,Cu=eu.reverse,Uu=wr(k,"Map"),Bu=wr(k,"Set"),zu=wr(k,"WeakMap"),Lu=wr(Object,"create"),$u=zu&&new zu,Fu=Uu?ou.call(Uu):"",Mu=Bu?ou.call(Bu):"",Nu=pu?pu.prototype:Z,Du=pu?Nu.valueOf:Z,Zu=pu?Nu.toString:Z,qu={};
yn.templateSettings={escape:Q,evaluate:X,interpolate:nn,variable:"",imports:{_:yn}};var Pu=function(){function n(){}return function(t){if(de(t)){n.prototype=t;var r=new n;n.prototype=Z}return r||{}}}(),Tu=nr(ct),Ku=nr(at,true),Gu=tr(),Vu=tr(true);vu&&!xu.call({valueOf:1},"valueOf")&&(xt=function(n){return z(vu(n))});var Ju=$u?function(n,t){return $u.set(n,t),n}:Te,Yu=Bu&&2===new Bu([1,2]).size?function(n){return new Bu(n)}:Je,Hu=$u?function(n){return $u.get(n)}:Je,Qu=It("length"),Xu=yu||function(){return[]; yn.templateSettings={escape:Q,evaluate:X,interpolate:nn,variable:"",imports:{_:yn}};var Pu=function(){function n(){}return function(t){if(ye(t)){n.prototype=t;var r=new n;n.prototype=Z}return r||{}}}(),Tu=nr(ct),Ku=nr(at,true),Gu=tr(),Vu=tr(true);vu&&!xu.call({valueOf:1},"valueOf")&&(xt=function(n){return z(vu(n))});var Ju=$u?function(n,t){return $u.set(n,t),n}:Ke,Yu=Bu&&2===new Bu([1,2]).size?function(n){return new Bu(n)}:Je,Hu=$u?function(n){return $u.get(n)}:Je,Qu=It("length"),Xu=yu||function(){return[];
};(Uu&&"[object Map]"!=Ar(new Uu)||Bu&&"[object Set]"!=Ar(new Bu))&&(Ar=function(n){var t=au.call(n);if(n="[object Object]"==t?n.constructor:null,n=typeof n=="function"?ou.call(n):""){if(n==Fu)return"[object Map]";if(n==Mu)return"[object Set]"}return t});var no=function(){var n=0,t=0;return function(r,e){var u=ko(),o=16-(u-t);if(t=u,o>0){if(150<=++n)return r}else n=0;return Ju(r,e)}}(),to=fe(function(n,t){Lo(n)||(n=null==n?[]:[Object(n)]),t=it(t);for(var r=n,e=t,u=-1,o=r.length,i=-1,f=e.length,c=Array(o+f);++u<o;)c[u]=r[u]; };(Uu&&"[object Map]"!=Ar(new Uu)||Bu&&"[object Set]"!=Ar(new Bu))&&(Ar=function(n){var t=au.call(n);if(n="[object Object]"==t?n.constructor:null,n=typeof n=="function"?ou.call(n):""){if(n==Fu)return"[object Map]";if(n==Mu)return"[object Set]"}return t});var no=function(){var n=0,t=0;return function(r,e){var u=ko(),o=16-(u-t);if(t=u,o>0){if(150<=++n)return r}else n=0;return Ju(r,e)}}(),to=ce(function(n,t){Lo(n)||(n=null==n?[]:[Object(n)]),t=it(t);for(var r=n,e=t,u=-1,o=r.length,i=-1,f=e.length,c=Array(o+f);++u<o;)c[u]=r[u];
for(;++i<f;)c[u++]=e[i];return c}),ro=fe(function(n,t){return he(n)?et(n,it(t,false,true)):[]}),eo=fe(function(n,t){var r=Pr(t);return he(r)&&(r=Z),he(n)?et(n,it(t,false,true),mr(r)):[]}),uo=fe(function(n,t){var r=Pr(t);return he(r)&&(r=Z),he(n)?et(n,it(t,false,true),Z,r):[]}),oo=fe(function(n){var t=a(n,Fr);return t.length&&t[0]===n[0]?_t(t):[]}),io=fe(function(n){var t=Pr(n),r=a(n,Fr);return t===Pr(r)?t=Z:r.pop(),r.length&&r[0]===n[0]?_t(r,mr(t)):[]}),fo=fe(function(n){var t=Pr(n),r=a(n,Fr);return t===Pr(r)?t=Z:r.pop(), for(;++i<f;)c[u++]=e[i];return c}),ro=ce(function(n,t){return pe(n)?et(n,it(t,false,true)):[]}),eo=ce(function(n,t){var r=Pr(t);return pe(r)&&(r=Z),pe(n)?et(n,it(t,false,true),mr(r)):[]}),uo=ce(function(n,t){var r=Pr(t);return pe(r)&&(r=Z),pe(n)?et(n,it(t,false,true),Z,r):[]}),oo=ce(function(n){var t=a(n,Fr);return t.length&&t[0]===n[0]?_t(t):[]}),io=ce(function(n){var t=Pr(n),r=a(n,Fr);return t===Pr(r)?t=Z:r.pop(),r.length&&r[0]===n[0]?_t(r,mr(t)):[]}),fo=ce(function(n){var t=Pr(n),r=a(n,Fr);return t===Pr(r)?t=Z:r.pop(),
r.length&&r[0]===n[0]?_t(r,Z,t):[]}),co=fe(Tr),ao=fe(function(n,t){t=a(it(t),String);var r=Qn(n,t);return Wt(n,t.sort(I)),r}),lo=fe(function(n){return Nt(it(n,false,true))}),so=fe(function(n){var t=Pr(n);return he(t)&&(t=Z),Nt(it(n,false,true),mr(t))}),ho=fe(function(n){var t=Pr(n);return he(t)&&(t=Z),Nt(it(n,false,true),Z,t)}),po=fe(function(n,t){return he(n)?et(n,t):[]}),_o=fe(function(n){return qt(i(n,he))}),go=fe(function(n){var t=Pr(n);return he(t)&&(t=Z),qt(i(n,he),mr(t))}),vo=fe(function(n){var t=Pr(n);return he(t)&&(t=Z), r.length&&r[0]===n[0]?_t(r,Z,t):[]}),co=ce(Tr),ao=ce(function(n,t){t=a(it(t),String);var r=Qn(n,t);return Wt(n,t.sort(I)),r}),lo=ce(function(n){return Nt(it(n,false,true))}),so=ce(function(n){var t=Pr(n);return pe(t)&&(t=Z),Nt(it(n,false,true),mr(t))}),ho=ce(function(n){var t=Pr(n);return pe(t)&&(t=Z),Nt(it(n,false,true),Z,t)}),po=ce(function(n,t){return pe(n)?et(n,t):[]}),_o=ce(function(n){return qt(i(n,pe))}),go=ce(function(n){var t=Pr(n);return pe(t)&&(t=Z),qt(i(n,pe),mr(t))}),vo=ce(function(n){var t=Pr(n);return pe(t)&&(t=Z),
qt(i(n,he),Z,t)}),yo=fe(Gr),bo=fe(function(n){var t=n.length,t=t>1?n[t-1]:Z,t=typeof t=="function"?(n.pop(),t):Z;return Vr(n,t)}),xo=fe(function(n){function t(t){return Qn(t,n)}n=it(n);var r=n.length,e=r?n[0]:0,u=this.__wrapped__;return 1>=r&&!this.__actions__.length&&u instanceof An&&B(e)?(u=u.slice(e,+e+(r?1:0)),u.__actions__.push({func:Yr,args:[t],thisArg:Z}),new wn(u,this.__chain__).thru(function(n){return r&&!n.length&&n.push(Z),n})):this.thru(t)}),mo=Qt(function(n,t,r){iu.call(n,r)?++n[r]:n[r]=1; qt(i(n,pe),Z,t)}),yo=ce(Gr),bo=ce(function(n){var t=n.length,t=t>1?n[t-1]:Z,t=typeof t=="function"?(n.pop(),t):Z;return Vr(n,t)}),xo=ce(function(n){function t(t){return Qn(t,n)}n=it(n);var r=n.length,e=r?n[0]:0,u=this.__wrapped__;return 1>=r&&!this.__actions__.length&&u instanceof An&&B(e)?(u=u.slice(e,+e+(r?1:0)),u.__actions__.push({func:Yr,args:[t],thisArg:Z}),new wn(u,this.__chain__).thru(function(n){return r&&!n.length&&n.push(Z),n})):this.thru(t)}),mo=Qt(function(n,t,r){iu.call(n,r)?++n[r]:n[r]=1;
}),jo=Qt(function(n,t,r){iu.call(n,r)?n[r].push(t):n[r]=[t]}),wo=fe(function(n,t,e){var u=-1,o=typeof t=="function",i=Wr(t),f=se(n)?Array(n.length):[];return Tu(n,function(n){var c=o?t:i&&null!=n?n[t]:Z;f[++u]=c?r(c,n,e):vt(n,t,e)}),f}),Ao=Qt(function(n,t,r){n[r]=t}),Oo=Qt(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Eo=fe(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Sr(n,t[0],t[1])?t=[]:r>2&&Sr(t[0],t[1],t[2])&&(t.length=1),Ot(n,it(t),[])}),ko=Qe.now,Io=fe(function(n,t,r){ }),jo=Qt(function(n,t,r){iu.call(n,r)?n[r].push(t):n[r]=[t]}),wo=ce(function(n,t,e){var u=-1,o=typeof t=="function",i=Wr(t),f=he(n)?Array(n.length):[];return Tu(n,function(n){var c=o?t:i&&null!=n?n[t]:Z;f[++u]=c?r(c,n,e):vt(n,t,e)}),f}),Ao=Qt(function(n,t,r){n[r]=t}),Oo=Qt(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Eo=ce(function(n,t){if(null==n)return[];var r=t.length;return r>1&&Sr(n,t[0],t[1])?t=[]:r>2&&Sr(t[0],t[1],t[2])&&(t.length=1),Ot(n,it(t),[])}),ko=Qe.now,Io=ce(function(n,t,r){
var e=1;if(r.length)var u=$(r,Io.placeholder),e=32|e;return vr(n,e,t,r,u)}),Ro=fe(function(n,t,r){var e=3;if(r.length)var u=$(r,Ro.placeholder),e=32|e;return vr(t,e,n,r,u)}),So=fe(function(n,t){return rt(n,1,t)}),Wo=fe(function(n,t,r){return rt(n,Se(t)||0,r)}),Co=fe(function(n,t){t=a(it(t),mr());var e=t.length;return fe(function(u){for(var o=-1,i=Ru(u.length,e);++o<i;)u[o]=t[o].call(this,u[o]);return r(n,this,u)})}),Uo=fe(function(n,t){var r=$(t,Uo.placeholder);return vr(n,32,Z,t,r)}),Bo=fe(function(n,t){ var e=1;if(r.length)var u=$(r,Io.placeholder),e=32|e;return vr(n,e,t,r,u)}),Ro=ce(function(n,t,r){var e=3;if(r.length)var u=$(r,Ro.placeholder),e=32|e;return vr(t,e,n,r,u)}),So=ce(function(n,t){return rt(n,1,t)}),Wo=ce(function(n,t,r){return rt(n,We(t)||0,r)}),Co=ce(function(n,t){t=a(it(t),mr());var e=t.length;return ce(function(u){for(var o=-1,i=Ru(u.length,e);++o<i;)u[o]=t[o].call(this,u[o]);return r(n,this,u)})}),Uo=ce(function(n,t){var r=$(t,Uo.placeholder);return vr(n,32,Z,t,r)}),Bo=ce(function(n,t){
var r=$(t,Bo.placeholder);return vr(n,64,Z,t,r)}),zo=fe(function(n,t){return vr(n,256,Z,Z,Z,it(t))}),Lo=Array.isArray,$o=Xt(function(n,t){Jt(t,Le(t),n)}),Fo=Xt(function(n,t){Jt(t,$e(t),n)}),Mo=Xt(function(n,t,r,e){Yt(t,$e(t),n,e)}),No=Xt(function(n,t,r,e){Yt(t,Le(t),n,e)}),Do=fe(function(n,t){return Qn(n,it(t))}),Zo=fe(function(n){return n.push(Z,Tn),r(Mo,Z,n)}),qo=fe(function(n){return n.push(Z,zr),r(Vo,Z,n)}),Po=ar(function(n,t,r){n[t]=r},Pe(Te)),To=ar(function(n,t,r){iu.call(n,t)?n[t].push(r):n[t]=[r]; var r=$(t,Bo.placeholder);return vr(n,64,Z,t,r)}),zo=ce(function(n,t){return vr(n,256,Z,Z,Z,it(t))}),Lo=Array.isArray,$o=Xt(function(n,t){Jt(t,$e(t),n)}),Fo=Xt(function(n,t){Jt(t,Fe(t),n)}),Mo=Xt(function(n,t,r,e){Yt(t,Fe(t),n,e)}),No=Xt(function(n,t,r,e){Yt(t,$e(t),n,e)}),Do=ce(function(n,t){return Qn(n,it(t))}),Zo=ce(function(n){return n.push(Z,Tn),r(Mo,Z,n)}),qo=ce(function(n){return n.push(Z,zr),r(Vo,Z,n)}),Po=ar(function(n,t,r){n[t]=r},Te(Ke)),To=ar(function(n,t,r){iu.call(n,t)?n[t].push(r):n[t]=[r];
},mr),Ko=fe(vt),Go=Xt(function(n,t,r){At(n,t,r)}),Vo=Xt(function(n,t,r,e){At(n,t,r,e)}),Jo=fe(function(n,t){return null==n?{}:(t=a(it(t),String),Et(n,et($e(n),t)))}),Yo=fe(function(n,t){return null==n?{}:Et(n,it(t))}),Ho=ur(function(n,t,r){return t=t.toLowerCase(),n+(r?Ne(t):t)}),Qo=ur(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Xo=ur(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),ni=er("toLowerCase"),ti=er("toUpperCase"),ri=ur(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),ei=ur(function(n,t,r){ },mr),Ko=ce(vt),Go=Xt(function(n,t,r){At(n,t,r)}),Vo=Xt(function(n,t,r,e){At(n,t,r,e)}),Jo=ce(function(n,t){return null==n?{}:(t=a(it(t),String),Et(n,et(Fe(n),t)))}),Yo=ce(function(n,t){return null==n?{}:Et(n,it(t))}),Ho=ur(function(n,t,r){return t=t.toLowerCase(),n+(r?De(t):t)}),Qo=ur(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Xo=ur(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),ni=er("toLowerCase"),ti=er("toUpperCase"),ri=ur(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),ei=ur(function(n,t,r){
return n+(r?" ":"")+Ne(t)}),ui=ur(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),oi=fe(function(n,t){try{return r(n,Z,t)}catch(e){return pe(e)?e:new Xe(e)}}),ii=fe(function(n,t){return u(it(t),function(t){n[t]=Io(n[t],n)}),n}),fi=fr(),ci=fr(true),ai=fe(function(n,t){return function(r){return vt(r,n,t)}}),li=fe(function(n,t){return function(r){return vt(n,r,t)}}),si=lr(a),hi=lr(o),pi=lr(p),_i=pr(),gi=pr(true),vi=gr("ceil"),di=gr("floor"),yi=gr("round");return yn.prototype=jn.prototype,wn.prototype=Pu(jn.prototype), return n+(r?" ":"")+De(t)}),ui=ur(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),oi=ce(function(n,t){try{return r(n,Z,t)}catch(e){return ye(e)?e:new Xe(e)}}),ii=ce(function(n,t){return u(it(t),function(t){n[t]=Io(n[t],n)}),n}),fi=fr(),ci=fr(true),ai=ce(function(n,t){return function(r){return vt(r,n,t)}}),li=ce(function(n,t){return function(r){return vt(n,r,t)}}),si=lr(a),hi=lr(o),pi=lr(p),_i=pr(),gi=pr(true),vi=gr("ceil"),di=gr("floor"),yi=gr("round");return yn.prototype=jn.prototype,wn.prototype=Pu(jn.prototype),
wn.prototype.constructor=wn,An.prototype=Pu(jn.prototype),An.prototype.constructor=An,Bn.prototype=Lu?Lu(null):uu,zn.prototype.clear=function(){this.__data__={hash:new Bn,map:Uu?new Uu:[],string:new Bn}},zn.prototype["delete"]=function(n){var t=this.__data__;return Cr(n)?(t=typeof n=="string"?t.string:t.hash,n=(Lu?t[n]!==Z:iu.call(t,n))&&delete t[n]):n=Uu?t.map["delete"](n):Dn(t.map,n),n},zn.prototype.get=function(n){var t=this.__data__;return Cr(n)?(t=typeof n=="string"?t.string:t.hash,Lu?(n=t[n], wn.prototype.constructor=wn,An.prototype=Pu(jn.prototype),An.prototype.constructor=An,Bn.prototype=Lu?Lu(null):uu,zn.prototype.clear=function(){this.__data__={hash:new Bn,map:Uu?new Uu:[],string:new Bn}},zn.prototype["delete"]=function(n){var t=this.__data__;return Cr(n)?(t=typeof n=="string"?t.string:t.hash,n=(Lu?t[n]!==Z:iu.call(t,n))&&delete t[n]):n=Uu?t.map["delete"](n):Dn(t.map,n),n},zn.prototype.get=function(n){var t=this.__data__;return Cr(n)?(t=typeof n=="string"?t.string:t.hash,Lu?(n=t[n],
n="__lodash_hash_undefined__"===n?Z:n):n=iu.call(t,n)?t[n]:Z):n=Uu?t.map.get(n):Zn(t.map,n),n},zn.prototype.has=function(n){var t=this.__data__;return Cr(n)?(t=typeof n=="string"?t.string:t.hash,n=Lu?t[n]!==Z:iu.call(t,n)):n=Uu?t.map.has(n):-1<qn(t.map,n),n},zn.prototype.set=function(n,t){var r=this.__data__;return Cr(n)?(typeof n=="string"?r.string:r.hash)[n]=Lu&&t===Z?"__lodash_hash_undefined__":t:Uu?r.map.set(n,t):Pn(r.map,n,t),this},Ln.prototype.push=function(n){var t=this.__data__;Cr(n)?(t=t.__data__, n="__lodash_hash_undefined__"===n?Z:n):n=iu.call(t,n)?t[n]:Z):n=Uu?t.map.get(n):Zn(t.map,n),n},zn.prototype.has=function(n){var t=this.__data__;return Cr(n)?(t=typeof n=="string"?t.string:t.hash,n=Lu?t[n]!==Z:iu.call(t,n)):n=Uu?t.map.has(n):-1<qn(t.map,n),n},zn.prototype.set=function(n,t){var r=this.__data__;return Cr(n)?(typeof n=="string"?r.string:r.hash)[n]=Lu&&t===Z?"__lodash_hash_undefined__":t:Uu?r.map.set(n,t):Pn(r.map,n,t),this},Ln.prototype.push=function(n){var t=this.__data__;Cr(n)?(t=t.__data__,
(typeof n=="string"?t.string:t.hash)[n]="__lodash_hash_undefined__"):t.set(n,"__lodash_hash_undefined__")},Fn.prototype.clear=function(){this.__data__={array:[],map:null}},Fn.prototype["delete"]=function(n){var t=this.__data__,r=t.array;return r?Dn(r,n):t.map["delete"](n)},Fn.prototype.get=function(n){var t=this.__data__,r=t.array;return r?Zn(r,n):t.map.get(n)},Fn.prototype.has=function(n){var t=this.__data__,r=t.array;return r?-1<qn(r,n):t.map.has(n)},Fn.prototype.set=function(n,t){var r=this.__data__,e=r.array; (typeof n=="string"?t.string:t.hash)[n]="__lodash_hash_undefined__"):t.set(n,"__lodash_hash_undefined__")},Fn.prototype.clear=function(){this.__data__={array:[],map:null}},Fn.prototype["delete"]=function(n){var t=this.__data__,r=t.array;return r?Dn(r,n):t.map["delete"](n)},Fn.prototype.get=function(n){var t=this.__data__,r=t.array;return r?Zn(r,n):t.map.get(n)},Fn.prototype.has=function(n){var t=this.__data__,r=t.array;return r?-1<qn(r,n):t.map.has(n)},Fn.prototype.set=function(n,t){var r=this.__data__,e=r.array;
return e&&(199>e.length?Pn(e,n,t):(r.array=null,r.map=new zn(e))),(r=r.map)&&r.set(n,t),this},ie.Cache=zn,yn.after=function(n,t){if(typeof t!="function")throw new ru("Expected a function");return n=Ie(n),function(){return 1>--n?t.apply(this,arguments):void 0}},yn.ary=te,yn.assign=$o,yn.assignIn=Fo,yn.assignInWith=Mo,yn.assignWith=No,yn.at=Do,yn.before=re,yn.bind=Io,yn.bindAll=ii,yn.bindKey=Ro,yn.chain=Jr,yn.chunk=function(n,t){t=Iu(Ie(t),0);var r=n?n.length:0;if(!r||1>t)return[];for(var e=0,u=-1,o=Array(wu(r/t));r>e;)o[++u]=Bt(n,e,e+=t); return e&&(199>e.length?Pn(e,n,t):(r.array=null,r.map=new zn(e))),(r=r.map)&&r.set(n,t),this},fe.Cache=zn,yn.after=function(n,t){if(typeof t!="function")throw new ru("Expected a function");return n=Re(n),function(){return 1>--n?t.apply(this,arguments):void 0}},yn.ary=re,yn.assign=$o,yn.assignIn=Fo,yn.assignInWith=Mo,yn.assignWith=No,yn.at=Do,yn.before=ee,yn.bind=Io,yn.bindAll=ii,yn.bindKey=Ro,yn.chain=Jr,yn.chunk=function(n,t){t=Iu(Re(t),0);var r=n?n.length:0;if(!r||1>t)return[];for(var e=0,u=-1,o=Array(wu(r/t));r>e;)o[++u]=Bt(n,e,e+=t);
return o},yn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},yn.concat=to,yn.cond=function(n){var t=n?n.length:0,e=mr();return n=t?a(n,function(n){if("function"!=typeof n[1])throw new ru("Expected a function");return[e(n[0]),n[1]]}):[],fe(function(e){for(var u=-1;++u<t;){var o=n[u];if(r(o[0],this,e))return r(o[1],this,e)}})},yn.conforms=function(n){return tt(nt(n,true))},yn.constant=Pe,yn.countBy=mo,yn.create=function(n,t){var r=Pu(n);return t?Hn(r,t):r; return o},yn.compact=function(n){for(var t=-1,r=n?n.length:0,e=-1,u=[];++t<r;){var o=n[t];o&&(u[++e]=o)}return u},yn.concat=to,yn.cond=function(n){var t=n?n.length:0,e=mr();return n=t?a(n,function(n){if("function"!=typeof n[1])throw new ru("Expected a function");return[e(n[0]),n[1]]}):[],ce(function(e){for(var u=-1;++u<t;){var o=n[u];if(r(o[0],this,e))return r(o[1],this,e)}})},yn.conforms=function(n){return tt(nt(n,true))},yn.constant=Te,yn.countBy=mo,yn.create=function(n,t){var r=Pu(n);return t?Hn(r,t):r;
},yn.curry=ee,yn.curryRight=ue,yn.debounce=oe,yn.defaults=Zo,yn.defaultsDeep=qo,yn.defer=So,yn.delay=Wo,yn.difference=ro,yn.differenceBy=eo,yn.differenceWith=uo,yn.drop=Dr,yn.dropRight=Zr,yn.dropRightWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3),true,true):[]},yn.dropWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3),true):[]},yn.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&Sr(n,t,r)&&(r=0,e=u),u=n.length,r=Ie(r),0>r&&(r=-r>u?0:u+r),e=e===Z||e>u?u:Ie(e),0>e&&(e+=u), },yn.curry=ue,yn.curryRight=oe,yn.debounce=ie,yn.defaults=Zo,yn.defaultsDeep=qo,yn.defer=So,yn.delay=Wo,yn.difference=ro,yn.differenceBy=eo,yn.differenceWith=uo,yn.drop=Dr,yn.dropRight=Zr,yn.dropRightWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3),true,true):[]},yn.dropWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3),true):[]},yn.fill=function(n,t,r,e){var u=n?n.length:0;if(!u)return[];for(r&&typeof r!="number"&&Sr(n,t,r)&&(r=0,e=u),u=n.length,r=Re(r),0>r&&(r=-r>u?0:u+r),e=e===Z||e>u?u:Re(e),0>e&&(e+=u),
e=r>e?0:Re(e);e>r;)n[r++]=t;return n},yn.filter=function(n,t){return(Lo(n)?i:ot)(n,mr(t,3))},yn.flatMap=function(n,t){return n&&n.length?it(a(n,mr(t,3))):[]},yn.flatten=function(n){return n&&n.length?it(n):[]},yn.flattenDeep=function(n){return n&&n.length?it(n,true):[]},yn.flip=function(n){return vr(n,512)},yn.flow=fi,yn.flowRight=ci,yn.fromPairs=function(n){for(var t=-1,r=n?n.length:0,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},yn.functions=function(n){return null==n?[]:lt(n,Le(n))},yn.functionsIn=function(n){ e=r>e?0:Se(e);e>r;)n[r++]=t;return n},yn.filter=function(n,t){return(Lo(n)?i:ot)(n,mr(t,3))},yn.flatMap=function(n,t){return it(ne(n,t))},yn.flatten=function(n){return n&&n.length?it(n):[]},yn.flattenDeep=function(n){return n&&n.length?it(n,true):[]},yn.flip=function(n){return vr(n,512)},yn.flow=fi,yn.flowRight=ci,yn.fromPairs=function(n){for(var t=-1,r=n?n.length:0,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},yn.functions=function(n){return null==n?[]:lt(n,$e(n))},yn.functionsIn=function(n){return null==n?[]:lt(n,Fe(n));
return null==n?[]:lt(n,$e(n))},yn.groupBy=jo,yn.initial=function(n){return Zr(n,1)},yn.intersection=oo,yn.intersectionBy=io,yn.intersectionWith=fo,yn.invert=Po,yn.invertBy=To,yn.invokeMap=wo,yn.iteratee=Ke,yn.keyBy=Ao,yn.keys=Le,yn.keysIn=$e,yn.map=function(n,t){return(Lo(n)?a:mt)(n,mr(t,3))},yn.mapKeys=function(n,t){var r={};return t=mr(t,3),ct(n,function(n,e,u){r[t(n,e,u)]=n}),r},yn.mapValues=function(n,t){var r={};return t=mr(t,3),ct(n,function(n,e,u){r[e]=t(n,e,u)}),r},yn.matches=Ge,yn.matchesProperty=function(n,t){ },yn.groupBy=jo,yn.initial=function(n){return Zr(n,1)},yn.intersection=oo,yn.intersectionBy=io,yn.intersectionWith=fo,yn.invert=Po,yn.invertBy=To,yn.invokeMap=wo,yn.iteratee=Ge,yn.keyBy=Ao,yn.keys=$e,yn.keysIn=Fe,yn.map=ne,yn.mapKeys=function(n,t){var r={};return t=mr(t,3),ct(n,function(n,e,u){r[t(n,e,u)]=n}),r},yn.mapValues=function(n,t){var r={};return t=mr(t,3),ct(n,function(n,e,u){r[e]=t(n,e,u)}),r},yn.matches=function(n){return jt(nt(n,true))},yn.matchesProperty=function(n,t){return wt(n,nt(t,true));
return wt(n,nt(t,true))},yn.memoize=ie,yn.merge=Go,yn.mergeWith=Vo,yn.method=ai,yn.methodOf=li,yn.mixin=Ve,yn.negate=function(n){if(typeof n!="function")throw new ru("Expected a function");return function(){return!n.apply(this,arguments)}},yn.nthArg=function(n){return n=Ie(n),function(){return arguments[n]}},yn.omit=Jo,yn.omitBy=function(n,t){return t=mr(t,2),kt(n,function(n,r){return!t(n,r)})},yn.once=function(n){return re(2,n)},yn.orderBy=function(n,t,r,e){return null==n?[]:(Lo(t)||(t=null==t?[]:[t]), },yn.memoize=fe,yn.merge=Go,yn.mergeWith=Vo,yn.method=ai,yn.methodOf=li,yn.mixin=Ve,yn.negate=function(n){if(typeof n!="function")throw new ru("Expected a function");return function(){return!n.apply(this,arguments)}},yn.nthArg=function(n){return n=Re(n),function(){return arguments[n]}},yn.omit=Jo,yn.omitBy=function(n,t){return t=mr(t,2),kt(n,function(n,r){return!t(n,r)})},yn.once=function(n){return ee(2,n)},yn.orderBy=function(n,t,r,e){return null==n?[]:(Lo(t)||(t=null==t?[]:[t]),r=e?Z:r,Lo(r)||(r=null==r?[]:[r]),
r=e?Z:r,Lo(r)||(r=null==r?[]:[r]),Ot(n,t,r))},yn.over=si,yn.overArgs=Co,yn.overEvery=hi,yn.overSome=pi,yn.partial=Uo,yn.partialRight=Bo,yn.partition=Oo,yn.pick=Yo,yn.pickBy=function(n,t){return null==n?{}:kt(n,mr(t,2))},yn.property=Ye,yn.propertyOf=function(n){return function(t){return null==n?Z:st(n,t)}},yn.pull=co,yn.pullAll=Tr,yn.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?St(n,t,mr(r)):n},yn.pullAt=ao,yn.range=_i,yn.rangeRight=gi,yn.rearg=zo,yn.reject=function(n,t){var r=Lo(n)?i:ot; Ot(n,t,r))},yn.over=si,yn.overArgs=Co,yn.overEvery=hi,yn.overSome=pi,yn.partial=Uo,yn.partialRight=Bo,yn.partition=Oo,yn.pick=Yo,yn.pickBy=function(n,t){return null==n?{}:kt(n,mr(t,2))},yn.property=Ye,yn.propertyOf=function(n){return function(t){return null==n?Z:st(n,t)}},yn.pull=co,yn.pullAll=Tr,yn.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?St(n,t,mr(r)):n},yn.pullAt=ao,yn.range=_i,yn.rangeRight=gi,yn.rearg=zo,yn.reject=function(n,t){var r=Lo(n)?i:ot;return t=mr(t,3),r(n,function(n,r,e){
return t=mr(t,3),r(n,function(n,r,e){return!t(n,r,e)})},yn.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],o=n.length;for(t=mr(t,3);++e<o;){var i=n[e];t(i,e,n)&&(r.push(i),u.push(e))}return Wt(n,u),r},yn.rest=fe,yn.reverse=Kr,yn.sampleSize=ne,yn.set=function(n,t,r){return null==n?n:Ut(n,t,r)},yn.setWith=function(n,t,r,e){return e=typeof e=="function"?e:Z,null==n?n:Ut(n,t,r,e)},yn.shuffle=function(n){return ne(n,4294967295)},yn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&Sr(n,t,r)?(t=0, return!t(n,r,e)})},yn.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],o=n.length;for(t=mr(t,3);++e<o;){var i=n[e];t(i,e,n)&&(r.push(i),u.push(e))}return Wt(n,u),r},yn.rest=ce,yn.reverse=Kr,yn.sampleSize=te,yn.set=function(n,t,r){return null==n?n:Ut(n,t,r)},yn.setWith=function(n,t,r,e){return e=typeof e=="function"?e:Z,null==n?n:Ut(n,t,r,e)},yn.shuffle=function(n){return te(n,4294967295)},yn.slice=function(n,t,r){var e=n?n.length:0;return e?(r&&typeof r!="number"&&Sr(n,t,r)?(t=0,
r=e):(t=null==t?0:Ie(t),r=r===Z?e:Ie(r)),Bt(n,t,r)):[]},yn.sortBy=Eo,yn.sortedUniq=function(n){return n&&n.length?Ft(n):[]},yn.sortedUniqBy=function(n,t){return n&&n.length?Ft(n,mr(t)):[]},yn.split=function(n,t,r){return Ce(n).split(t,r)},yn.spread=function(n){if(typeof n!="function")throw new ru("Expected a function");return function(t){return r(n,this,t)}},yn.tail=function(n){return Dr(n,1)},yn.take=function(n,t,r){return n&&n.length?(t=r||t===Z?1:Ie(t),Bt(n,0,0>t?0:t)):[]},yn.takeRight=function(n,t,r){ r=e):(t=null==t?0:Re(t),r=r===Z?e:Re(r)),Bt(n,t,r)):[]},yn.sortBy=Eo,yn.sortedUniq=function(n){return n&&n.length?Ft(n):[]},yn.sortedUniqBy=function(n,t){return n&&n.length?Ft(n,mr(t)):[]},yn.split=function(n,t,r){return Ue(n).split(t,r)},yn.spread=function(n,t){if(typeof n!="function")throw new ru("Expected a function");return t=t===Z?0:Iu(Re(t),0),ce(function(e){var u=e[t];return e=e.slice(0,t),u&&l(e,u),r(n,this,e)})},yn.tail=function(n){return Dr(n,1)},yn.take=function(n,t,r){return n&&n.length?(t=r||t===Z?1:Re(t),
var e=n?n.length:0;return e?(t=r||t===Z?1:Ie(t),t=e-t,Bt(n,0>t?0:t,e)):[]},yn.takeRightWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3),false,true):[]},yn.takeWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3)):[]},yn.tap=function(n,t){return t(n),n},yn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new ru("Expected a function");return de(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),oe(n,t,{leading:e,maxWait:t,trailing:u})},yn.thru=Yr,yn.toArray=ke,yn.toPairs=Fe, Bt(n,0,0>t?0:t)):[]},yn.takeRight=function(n,t,r){var e=n?n.length:0;return e?(t=r||t===Z?1:Re(t),t=e-t,Bt(n,0>t?0:t,e)):[]},yn.takeRightWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3),false,true):[]},yn.takeWhile=function(n,t){return n&&n.length?Dt(n,mr(t,3)):[]},yn.tap=function(n,t){return t(n),n},yn.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new ru("Expected a function");return ye(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),ie(n,t,{leading:e,maxWait:t,
yn.toPairsIn=function(n){return j(n,$e(n))},yn.toPath=function(n){return Lo(n)?a(n,String):$r(n)},yn.toPlainObject=We,yn.transform=function(n,t,r){var e=Lo(n)||Oe(n);if(t=mr(t,4),null==r)if(e||de(n)){var o=n.constructor;r=e?Lo(n)?new o:[]:Pu(_e(o)?o.prototype:Z)}else r={};return(e?u:ct)(n,function(n,e,u){return t(r,n,e,u)}),r},yn.unary=function(n){return te(n,1)},yn.union=lo,yn.unionBy=so,yn.unionWith=ho,yn.uniq=function(n){return n&&n.length?Nt(n):[]},yn.uniqBy=function(n,t){return n&&n.length?Nt(n,mr(t)):[]; trailing:u})},yn.thru=Yr,yn.toArray=Ie,yn.toPairs=Me,yn.toPairsIn=function(n){return j(n,Fe(n))},yn.toPath=function(n){return Lo(n)?a(n,String):$r(n)},yn.toPlainObject=Ce,yn.transform=function(n,t,r){var e=Lo(n)||Ee(n);if(t=mr(t,4),null==r)if(e||ye(n)){var o=n.constructor;r=e?Lo(n)?new o:[]:Pu(ge(o)?o.prototype:Z)}else r={};return(e?u:ct)(n,function(n,e,u){return t(r,n,e,u)}),r},yn.unary=function(n){return re(n,1)},yn.union=lo,yn.unionBy=so,yn.unionWith=ho,yn.uniq=function(n){return n&&n.length?Nt(n):[];
},yn.uniqWith=function(n,t){return n&&n.length?Nt(n,Z,t):[]},yn.unset=function(n,t){var r;if(null==n)r=true;else{r=n;var e=t,e=Wr(e,r)?[e+""]:Mt(e);r=Lr(r,e),e=Pr(e),r=null!=r&&Be(r,e)?delete r[e]:true}return r},yn.unzip=Gr,yn.unzipWith=Vr,yn.values=Me,yn.valuesIn=function(n){return null==n?A(n,$e(n)):[]},yn.without=po,yn.words=qe,yn.wrap=function(n,t){return t=null==t?Te:t,Uo(t,n)},yn.xor=_o,yn.xorBy=go,yn.xorWith=vo,yn.zip=yo,yn.zipObject=function(n,t){return Pt(n||[],t||[],Jn)},yn.zipObjectDeep=function(n,t){ },yn.uniqBy=function(n,t){return n&&n.length?Nt(n,mr(t)):[]},yn.uniqWith=function(n,t){return n&&n.length?Nt(n,Z,t):[]},yn.unset=function(n,t){var r;if(null==n)r=true;else{r=n;var e=t,e=Wr(e,r)?[e+""]:Mt(e);r=Lr(r,e),e=Pr(e),r=null!=r&&ze(r,e)?delete r[e]:true}return r},yn.unzip=Gr,yn.unzipWith=Vr,yn.values=Ne,yn.valuesIn=function(n){return null==n?A(n,Fe(n)):[]},yn.without=po,yn.words=Pe,yn.wrap=function(n,t){return t=null==t?Ke:t,Uo(t,n)},yn.xor=_o,yn.xorBy=go,yn.xorWith=vo,yn.zip=yo,yn.zipObject=function(n,t){
return Pt(n||[],t||[],Ut)},yn.zipWith=bo,yn.extend=Fo,yn.extendWith=Mo,Ve(yn,yn),yn.add=function(n,t){var r;return n!==Z&&(r=n),t!==Z&&(r=r===Z?t:r+t),r},yn.attempt=oi,yn.camelCase=Ho,yn.capitalize=Ne,yn.ceil=vi,yn.clamp=function(n,t,r){return r===Z&&(r=t,t=Z),r!==Z&&(r=Se(r),r=r===r?r:0),t!==Z&&(t=Se(t),t=t===t?t:0),Xn(Se(n),t,r)},yn.clone=function(n){return nt(n)},yn.cloneDeep=function(n){return nt(n,true)},yn.cloneDeepWith=function(n,t){return nt(n,true,t)},yn.cloneWith=function(n,t){return nt(n,false,t); return Pt(n||[],t||[],Jn)},yn.zipObjectDeep=function(n,t){return Pt(n||[],t||[],Ut)},yn.zipWith=bo,yn.extend=Fo,yn.extendWith=Mo,Ve(yn,yn),yn.add=function(n,t){var r;return n!==Z&&(r=n),t!==Z&&(r=r===Z?t:r+t),r},yn.attempt=oi,yn.camelCase=Ho,yn.capitalize=De,yn.ceil=vi,yn.clamp=function(n,t,r){return r===Z&&(r=t,t=Z),r!==Z&&(r=We(r),r=r===r?r:0),t!==Z&&(t=We(t),t=t===t?t:0),Xn(We(n),t,r)},yn.clone=function(n){return nt(n)},yn.cloneDeep=function(n){return nt(n,true)},yn.cloneDeepWith=function(n,t){return nt(n,true,t);
},yn.deburr=De,yn.endsWith=function(n,t,r){n=Ce(n),t=typeof t=="string"?t:t+"";var e=n.length;return r=r===Z?e:Xn(Ie(r),0,e),r-=t.length,r>=0&&n.indexOf(t,r)==r},yn.eq=ce,yn.escape=function(n){return(n=Ce(n))&&H.test(n)?n.replace(J,S):n},yn.escapeRegExp=function(n){return(n=Ce(n))&&on.test(n)?n.replace(un,"\\$&"):n},yn.every=function(n,t,r){var e=Lo(n)?o:ut;return r&&Sr(n,t,r)&&(t=Z),e(n,mr(t,3))},yn.find=function(n,t){if(t=mr(t,3),Lo(n)){var r=v(n,t);return r>-1?n[r]:Z}return g(n,t,Tu)},yn.findIndex=function(n,t){ },yn.cloneWith=function(n,t){return nt(n,false,t)},yn.deburr=Ze,yn.endsWith=function(n,t,r){n=Ue(n),t=typeof t=="string"?t:t+"";var e=n.length;return r=r===Z?e:Xn(Re(r),0,e),r-=t.length,r>=0&&n.indexOf(t,r)==r},yn.eq=ae,yn.escape=function(n){return(n=Ue(n))&&H.test(n)?n.replace(J,S):n},yn.escapeRegExp=function(n){return(n=Ue(n))&&on.test(n)?n.replace(un,"\\$&"):n},yn.every=function(n,t,r){var e=Lo(n)?o:ut;return r&&Sr(n,t,r)&&(t=Z),e(n,mr(t,3))},yn.find=function(n,t){if(t=mr(t,3),Lo(n)){var r=v(n,t);
return n&&n.length?v(n,mr(t,3)):-1},yn.findKey=function(n,t){return g(n,mr(t,3),ct,true)},yn.findLast=function(n,t){if(t=mr(t,3),Lo(n)){var r=v(n,t,true);return r>-1?n[r]:Z}return g(n,t,Ku)},yn.findLastIndex=function(n,t){return n&&n.length?v(n,mr(t,3),true):-1},yn.findLastKey=function(n,t){return g(n,mr(t,3),at,true)},yn.floor=di,yn.forEach=Qr,yn.forEachRight=Xr,yn.forIn=function(n,t){return null==n?n:Gu(n,Mr(t),$e)},yn.forInRight=function(n,t){return null==n?n:Vu(n,Mr(t),$e)},yn.forOwn=function(n,t){return n&&ct(n,Mr(t)); return r>-1?n[r]:Z}return g(n,t,Tu)},yn.findIndex=function(n,t){return n&&n.length?v(n,mr(t,3)):-1},yn.findKey=function(n,t){return g(n,mr(t,3),ct,true)},yn.findLast=function(n,t){if(t=mr(t,3),Lo(n)){var r=v(n,t,true);return r>-1?n[r]:Z}return g(n,t,Ku)},yn.findLastIndex=function(n,t){return n&&n.length?v(n,mr(t,3),true):-1},yn.findLastKey=function(n,t){return g(n,mr(t,3),at,true)},yn.floor=di,yn.forEach=Qr,yn.forEachRight=Xr,yn.forIn=function(n,t){return null==n?n:Gu(n,Mr(t),Fe)},yn.forInRight=function(n,t){
},yn.forOwnRight=function(n,t){return n&&at(n,Mr(t))},yn.get=Ue,yn.gt=ae,yn.gte=function(n,t){return n>=t},yn.has=Be,yn.hasIn=ze,yn.head=qr,yn.identity=Te,yn.includes=function(n,t,r,e){return n=se(n)?n:Me(n),r=r&&!e?Ie(r):0,e=n.length,0>r&&(r=Iu(e+r,0)),we(n)?e>=r&&-1<n.indexOf(t,r):!!e&&-1<d(n,t,r)},yn.indexOf=function(n,t,r){var e=n?n.length:0;return e?(r=Ie(r),0>r&&(r=Iu(e+r,0)),d(n,t,r)):-1},yn.inRange=function(n,t,r){return t=Se(t)||0,r===Z?(r=t,t=0):r=Se(r)||0,n=Se(n),n>=Ru(t,r)&&n<Iu(t,r)}, return null==n?n:Vu(n,Mr(t),Fe)},yn.forOwn=function(n,t){return n&&ct(n,Mr(t))},yn.forOwnRight=function(n,t){return n&&at(n,Mr(t))},yn.get=Be,yn.gt=le,yn.gte=function(n,t){return n>=t},yn.has=ze,yn.hasIn=Le,yn.head=qr,yn.identity=Ke,yn.includes=function(n,t,r,e){return n=he(n)?n:Ne(n),r=r&&!e?Re(r):0,e=n.length,0>r&&(r=Iu(e+r,0)),Ae(n)?e>=r&&-1<n.indexOf(t,r):!!e&&-1<d(n,t,r)},yn.indexOf=function(n,t,r){var e=n?n.length:0;return e?(r=Re(r),0>r&&(r=Iu(e+r,0)),d(n,t,r)):-1},yn.inRange=function(n,t,r){
yn.invoke=Ko,yn.isArguments=le,yn.isArray=Lo,yn.isArrayLike=se,yn.isArrayLikeObject=he,yn.isBoolean=function(n){return true===n||false===n||ye(n)&&"[object Boolean]"==au.call(n)},yn.isDate=function(n){return ye(n)&&"[object Date]"==au.call(n)},yn.isElement=function(n){return!!n&&1===n.nodeType&&ye(n)&&!me(n)},yn.isEmpty=function(n){if(se(n)&&(Lo(n)||we(n)||_e(n.splice)||le(n)))return!n.length;for(var t in n)if(iu.call(n,t))return false;return true},yn.isEqual=function(n,t){return dt(n,t)},yn.isEqualWith=function(n,t,r){ return t=We(t)||0,r===Z?(r=t,t=0):r=We(r)||0,n=We(n),n>=Ru(t,r)&&n<Iu(t,r)},yn.invoke=Ko,yn.isArguments=se,yn.isArray=Lo,yn.isArrayLike=he,yn.isArrayLikeObject=pe,yn.isBoolean=function(n){return true===n||false===n||be(n)&&"[object Boolean]"==au.call(n)},yn.isDate=function(n){return be(n)&&"[object Date]"==au.call(n)},yn.isElement=function(n){return!!n&&1===n.nodeType&&be(n)&&!je(n)},yn.isEmpty=function(n){if(he(n)&&(Lo(n)||Ae(n)||ge(n.splice)||se(n)))return!n.length;for(var t in n)if(iu.call(n,t))return false;
var e=(r=typeof r=="function"?r:Z)?r(n,t):Z;return e===Z?dt(n,t,r):!!e},yn.isError=pe,yn.isFinite=function(n){return typeof n=="number"&&Ou(n)},yn.isFunction=_e,yn.isInteger=ge,yn.isLength=ve,yn.isMatch=function(n,t){return n===t||yt(n,t,jr(t))},yn.isMatchWith=function(n,t,r){return r=typeof r=="function"?r:Z,yt(n,t,jr(t),r)},yn.isNaN=function(n){return xe(n)&&n!=+n},yn.isNative=be,yn.isNil=function(n){return null==n},yn.isNull=function(n){return null===n},yn.isNumber=xe,yn.isObject=de,yn.isObjectLike=ye, return true},yn.isEqual=function(n,t){return dt(n,t)},yn.isEqualWith=function(n,t,r){var e=(r=typeof r=="function"?r:Z)?r(n,t):Z;return e===Z?dt(n,t,r):!!e},yn.isError=_e,yn.isFinite=function(n){return typeof n=="number"&&Ou(n)},yn.isFunction=ge,yn.isInteger=ve,yn.isLength=de,yn.isMatch=function(n,t){return n===t||yt(n,t,jr(t))},yn.isMatchWith=function(n,t,r){return r=typeof r=="function"?r:Z,yt(n,t,jr(t),r)},yn.isNaN=function(n){return me(n)&&n!=+n},yn.isNative=xe,yn.isNil=function(n){return null==n;
yn.isPlainObject=me,yn.isRegExp=je,yn.isSafeInteger=function(n){return ge(n)&&n>=-9007199254740991&&9007199254740991>=n},yn.isString=we,yn.isSymbol=Ae,yn.isTypedArray=Oe,yn.isUndefined=function(n){return n===Z},yn.join=function(n,t){return n?Eu.call(n,t):""},yn.kebabCase=Qo,yn.last=Pr,yn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(r!==Z&&(u=Ie(r),u=(0>u?Iu(e+u,0):Ru(u,e-1))+1),t!==t)return C(n,u,true);for(;u--;)if(n[u]===t)return u;return-1},yn.lowerCase=Xo,yn.lowerFirst=ni, },yn.isNull=function(n){return null===n},yn.isNumber=me,yn.isObject=ye,yn.isObjectLike=be,yn.isPlainObject=je,yn.isRegExp=we,yn.isSafeInteger=function(n){return ve(n)&&n>=-9007199254740991&&9007199254740991>=n},yn.isString=Ae,yn.isSymbol=Oe,yn.isTypedArray=Ee,yn.isUndefined=function(n){return n===Z},yn.join=function(n,t){return n?Eu.call(n,t):""},yn.kebabCase=Qo,yn.last=Pr,yn.lastIndexOf=function(n,t,r){var e=n?n.length:0;if(!e)return-1;var u=e;if(r!==Z&&(u=Re(r),u=(0>u?Iu(e+u,0):Ru(u,e-1))+1),t!==t)return C(n,u,true);
yn.lt=Ee,yn.lte=function(n,t){return t>=n},yn.max=function(n){return n&&n.length?_(n,Te,ae):Z},yn.maxBy=function(n,t){return n&&n.length?_(n,mr(t),ae):Z},yn.mean=function(n){return He(n)/(n?n.length:0)},yn.min=function(n){return n&&n.length?_(n,Te,Ee):Z},yn.minBy=function(n,t){return n&&n.length?_(n,mr(t),Ee):Z},yn.noConflict=function(){return Gn._===this&&(Gn._=lu),this},yn.noop=Je,yn.now=ko,yn.pad=function(n,t,r){n=Ce(n),t=Ie(t);var e=M(n);return t&&t>e?(e=(t-e)/2,t=Au(e),e=wu(e),sr("",t,r)+n+sr("",e,r)):n; for(;u--;)if(n[u]===t)return u;return-1},yn.lowerCase=Xo,yn.lowerFirst=ni,yn.lt=ke,yn.lte=function(n,t){return t>=n},yn.max=function(n){return n&&n.length?_(n,Ke,le):Z},yn.maxBy=function(n,t){return n&&n.length?_(n,mr(t),le):Z},yn.mean=function(n){return He(n)/(n?n.length:0)},yn.min=function(n){return n&&n.length?_(n,Ke,ke):Z},yn.minBy=function(n,t){return n&&n.length?_(n,mr(t),ke):Z},yn.noConflict=function(){return Gn._===this&&(Gn._=lu),this},yn.noop=Je,yn.now=ko,yn.pad=function(n,t,r){n=Ue(n),
},yn.padEnd=function(n,t,r){return n=Ce(n),n+sr(n,t,r)},yn.padStart=function(n,t,r){return n=Ce(n),sr(n,t,r)+n},yn.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),n=Ce(n).replace(fn,""),Su(n,t||(pn.test(n)?16:10))},yn.random=function(n,t,r){if(r&&typeof r!="boolean"&&Sr(n,t,r)&&(t=r=Z),r===Z&&(typeof t=="boolean"?(r=t,t=Z):typeof n=="boolean"&&(r=n,n=Z)),n===Z&&t===Z?(n=0,t=1):(n=Se(n)||0,t===Z?(t=n,n=0):t=Se(t)||0),n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Wu(),Ru(n+r*(t-n+Mn("1e-"+((r+"").length-1))),t)):Ct(n,t); t=Re(t);var e=M(n);return t&&t>e?(e=(t-e)/2,t=Au(e),e=wu(e),sr("",t,r)+n+sr("",e,r)):n},yn.padEnd=function(n,t,r){return n=Ue(n),n+sr(n,t,r)},yn.padStart=function(n,t,r){return n=Ue(n),sr(n,t,r)+n},yn.parseInt=function(n,t,r){return r||null==t?t=0:t&&(t=+t),n=Ue(n).replace(fn,""),Su(n,t||(pn.test(n)?16:10))},yn.random=function(n,t,r){if(r&&typeof r!="boolean"&&Sr(n,t,r)&&(t=r=Z),r===Z&&(typeof t=="boolean"?(r=t,t=Z):typeof n=="boolean"&&(r=n,n=Z)),n===Z&&t===Z?(n=0,t=1):(n=We(n)||0,t===Z?(t=n,n=0):t=We(t)||0),
},yn.reduce=function(n,t,r){var e=Lo(n)?s:y,u=3>arguments.length;return e(n,mr(t,4),r,u,Tu)},yn.reduceRight=function(n,t,r){var e=Lo(n)?h:y,u=3>arguments.length;return e(n,mr(t,4),r,u,Ku)},yn.repeat=Ze,yn.replace=function(){var n=arguments,t=Ce(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},yn.result=function(n,t,r){if(Wr(t,n))e=null==n?Z:n[t];else{t=Mt(t);var e=Ue(n,t);n=Lr(n,t)}return e===Z&&(e=r),_e(e)?e.call(n):e},yn.round=yi,yn.runInContext=D,yn.sample=function(n){n=se(n)?n:Me(n);var t=n.length; n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Wu(),Ru(n+r*(t-n+Mn("1e-"+((r+"").length-1))),t)):Ct(n,t)},yn.reduce=function(n,t,r){var e=Lo(n)?s:y,u=3>arguments.length;return e(n,mr(t,4),r,u,Tu)},yn.reduceRight=function(n,t,r){var e=Lo(n)?h:y,u=3>arguments.length;return e(n,mr(t,4),r,u,Ku)},yn.repeat=qe,yn.replace=function(){var n=arguments,t=Ue(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},yn.result=function(n,t,r){if(Wr(t,n))e=null==n?Z:n[t];else{t=Mt(t);var e=Be(n,t);n=Lr(n,t)}return e===Z&&(e=r),
return t>0?n[Ct(0,t-1)]:Z},yn.size=function(n){if(null==n)return 0;if(se(n)){var t=n.length;return t&&we(n)?M(n):t}return Le(n).length},yn.snakeCase=ri,yn.some=function(n,t,r){var e=Lo(n)?p:zt;return r&&Sr(n,t,r)&&(t=Z),e(n,mr(t,3))},yn.sortedIndex=function(n,t){return Lt(n,t)},yn.sortedIndexBy=function(n,t,r){return $t(n,t,mr(r))},yn.sortedIndexOf=function(n,t){var r=n?n.length:0;if(r){var e=Lt(n,t);if(r>e&&ce(n[e],t))return e}return-1},yn.sortedLastIndex=function(n,t){return Lt(n,t,true)},yn.sortedLastIndexBy=function(n,t,r){ ge(e)?e.call(n):e},yn.round=yi,yn.runInContext=D,yn.sample=function(n){n=he(n)?n:Ne(n);var t=n.length;return t>0?n[Ct(0,t-1)]:Z},yn.size=function(n){if(null==n)return 0;if(he(n)){var t=n.length;return t&&Ae(n)?M(n):t}return $e(n).length},yn.snakeCase=ri,yn.some=function(n,t,r){var e=Lo(n)?p:zt;return r&&Sr(n,t,r)&&(t=Z),e(n,mr(t,3))},yn.sortedIndex=function(n,t){return Lt(n,t)},yn.sortedIndexBy=function(n,t,r){return $t(n,t,mr(r))},yn.sortedIndexOf=function(n,t){var r=n?n.length:0;if(r){var e=Lt(n,t);
return $t(n,t,mr(r),true)},yn.sortedLastIndexOf=function(n,t){if(n&&n.length){var r=Lt(n,t,true)-1;if(ce(n[r],t))return r}return-1},yn.startCase=ei,yn.startsWith=function(n,t,r){return n=Ce(n),r=Xn(Ie(r),0,n.length),n.lastIndexOf(t,r)==r},yn.subtract=function(n,t){var r;return n!==Z&&(r=n),t!==Z&&(r=r===Z?t:r-t),r},yn.sum=He,yn.sumBy=function(n,t){return n&&n.length?x(n,mr(t)):0},yn.template=function(n,t,r){var e=yn.templateSettings;r&&Sr(n,t,r)&&(t=Z),n=Ce(n),t=Mo({},t,e,Tn),r=Mo({},t.imports,e.imports,Tn); if(r>e&&ae(n[e],t))return e}return-1},yn.sortedLastIndex=function(n,t){return Lt(n,t,true)},yn.sortedLastIndexBy=function(n,t,r){return $t(n,t,mr(r),true)},yn.sortedLastIndexOf=function(n,t){if(n&&n.length){var r=Lt(n,t,true)-1;if(ae(n[r],t))return r}return-1},yn.startCase=ei,yn.startsWith=function(n,t,r){return n=Ue(n),r=Xn(Re(r),0,n.length),n.lastIndexOf(t,r)==r},yn.subtract=function(n,t){var r;return n!==Z&&(r=n),t!==Z&&(r=r===Z?t:r-t),r},yn.sum=He,yn.sumBy=function(n,t){return n&&n.length?x(n,mr(t)):0;
var u,o,i=Le(r),f=A(r,i),c=0;r=t.interpolate||xn;var a="__p+='";r=tu((t.escape||xn).source+"|"+r.source+"|"+(r===nn?sn:xn).source+"|"+(t.evaluate||xn).source+"|$","g");var l="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,i,f,l){return e||(e=i),a+=n.slice(c,l).replace(mn,W),r&&(u=true,a+="'+__e("+r+")+'"),f&&(o=true,a+="';"+f+";\n__p+='"),e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),c=l+t.length,t}),a+="';",(t=t.variable)||(a="with(obj){"+a+"}"),a=(o?a.replace(T,""):a).replace(K,"$1").replace(G,"$1;"), },yn.template=function(n,t,r){var e=yn.templateSettings;r&&Sr(n,t,r)&&(t=Z),n=Ue(n),t=Mo({},t,e,Tn),r=Mo({},t.imports,e.imports,Tn);var u,o,i=$e(r),f=A(r,i),c=0;r=t.interpolate||xn;var a="__p+='";r=tu((t.escape||xn).source+"|"+r.source+"|"+(r===nn?sn:xn).source+"|"+(t.evaluate||xn).source+"|$","g");var l="sourceURL"in t?"//# sourceURL="+t.sourceURL+"\n":"";if(n.replace(r,function(t,r,e,i,f,l){return e||(e=i),a+=n.slice(c,l).replace(mn,W),r&&(u=true,a+="'+__e("+r+")+'"),f&&(o=true,a+="';"+f+";\n__p+='"),
a="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(u?",__e=_.escape":"")+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+a+"return __p}",t=oi(function(){return Function(i,l+"return "+a).apply(Z,f)}),t.source=a,pe(t))throw t;return t},yn.times=function(n,t){if(n=Ie(n),1>n||n>9007199254740991)return[];var r=4294967295,e=Ru(n,4294967295);for(t=Mr(t),n-=4294967295,e=m(e,t);++r<n;)t(r);return e},yn.toInteger=Ie,yn.toLength=Re,yn.toLower=function(n){ e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),c=l+t.length,t}),a+="';",(t=t.variable)||(a="with(obj){"+a+"}"),a=(o?a.replace(T,""):a).replace(K,"$1").replace(G,"$1;"),a="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(u?",__e=_.escape":"")+(o?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+a+"return __p}",t=oi(function(){return Function(i,l+"return "+a).apply(Z,f)}),t.source=a,_e(t))throw t;return t},yn.times=function(n,t){if(n=Re(n),1>n||n>9007199254740991)return[];
return Ce(n).toLowerCase()},yn.toNumber=Se,yn.toSafeInteger=function(n){return Xn(Ie(n),-9007199254740991,9007199254740991)},yn.toString=Ce,yn.toUpper=function(n){return Ce(n).toUpperCase()},yn.trim=function(n,t,r){return(n=Ce(n))?r||t===Z?n.replace(fn,""):(t+="")?(n=n.match(En),t=t.match(En),n.slice(O(n,t),E(n,t)+1).join("")):n:n},yn.trimEnd=function(n,t,r){return(n=Ce(n))?r||t===Z?n.replace(an,""):(t+="")?(n=n.match(En),n.slice(0,E(n,t.match(En))+1).join("")):n:n},yn.trimStart=function(n,t,r){return(n=Ce(n))?r||t===Z?n.replace(cn,""):(t+="")?(n=n.match(En), var r=4294967295,e=Ru(n,4294967295);for(t=Mr(t),n-=4294967295,e=m(e,t);++r<n;)t(r);return e},yn.toInteger=Re,yn.toLength=Se,yn.toLower=function(n){return Ue(n).toLowerCase()},yn.toNumber=We,yn.toSafeInteger=function(n){return Xn(Re(n),-9007199254740991,9007199254740991)},yn.toString=Ue,yn.toUpper=function(n){return Ue(n).toUpperCase()},yn.trim=function(n,t,r){return(n=Ue(n))?r||t===Z?n.replace(fn,""):(t+="")?(n=n.match(En),t=t.match(En),n.slice(O(n,t),E(n,t)+1).join("")):n:n},yn.trimEnd=function(n,t,r){
n.slice(O(n,t.match(En))).join("")):n:n},yn.truncate=function(n,t){var r=30,e="...";if(de(t))var u="separator"in t?t.separator:u,r="length"in t?Ie(t.length):r,e="omission"in t?Ce(t.omission):e;n=Ce(n);var o=n.length;if(kn.test(n))var i=n.match(En),o=i.length;if(r>=o)return n;if(o=r-M(e),1>o)return e;if(r=i?i.slice(0,o).join(""):n.slice(0,o),u===Z)return r+e;if(i&&(o+=r.length-o),je(u)){if(n.slice(o).search(u)){var f=r;for(u.global||(u=tu(u.source,Ce(hn.exec(u))+"g")),u.lastIndex=0;i=u.exec(f);)var c=i.index; return(n=Ue(n))?r||t===Z?n.replace(an,""):(t+="")?(n=n.match(En),n.slice(0,E(n,t.match(En))+1).join("")):n:n},yn.trimStart=function(n,t,r){return(n=Ue(n))?r||t===Z?n.replace(cn,""):(t+="")?(n=n.match(En),n.slice(O(n,t.match(En))).join("")):n:n},yn.truncate=function(n,t){var r=30,e="...";if(ye(t))var u="separator"in t?t.separator:u,r="length"in t?Re(t.length):r,e="omission"in t?Ue(t.omission):e;n=Ue(n);var o=n.length;if(kn.test(n))var i=n.match(En),o=i.length;if(r>=o)return n;if(o=r-M(e),1>o)return e;
r=r.slice(0,c===Z?o:c)}}else n.indexOf(u,o)!=o&&(u=r.lastIndexOf(u),u>-1&&(r=r.slice(0,u)));return r+e},yn.unescape=function(n){return(n=Ce(n))&&Y.test(n)?n.replace(V,N):n},yn.uniqueId=function(n){var t=++fu;return Ce(n)+t},yn.upperCase=ui,yn.upperFirst=ti,yn.each=Qr,yn.eachRight=Xr,yn.first=qr,Ve(yn,function(){var n={};return ct(yn,function(t,r){iu.call(yn.prototype,r)||(n[r]=t)}),n}(),{chain:false}),yn.VERSION="4.1.0",u("bind bindKey curry curryRight partial partialRight".split(" "),function(n){yn[n].placeholder=yn; if(r=i?i.slice(0,o).join(""):n.slice(0,o),u===Z)return r+e;if(i&&(o+=r.length-o),we(u)){if(n.slice(o).search(u)){var f=r;for(u.global||(u=tu(u.source,Ue(hn.exec(u))+"g")),u.lastIndex=0;i=u.exec(f);)var c=i.index;r=r.slice(0,c===Z?o:c)}}else n.indexOf(u,o)!=o&&(u=r.lastIndexOf(u),u>-1&&(r=r.slice(0,u)));return r+e},yn.unescape=function(n){return(n=Ue(n))&&Y.test(n)?n.replace(V,N):n},yn.uniqueId=function(n){var t=++fu;return Ue(n)+t},yn.upperCase=ui,yn.upperFirst=ti,yn.each=Qr,yn.eachRight=Xr,yn.first=qr,
}),u(["drop","take"],function(n,t){An.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new An(this);r=r===Z?1:Iu(Ie(r),0);var u=this.clone();return e?u.__takeCount__=Ru(r,u.__takeCount__):u.__views__.push({size:Ru(r,4294967295),type:n+(0>u.__dir__?"Right":"")}),u},An.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),u(["filter","map","takeWhile"],function(n,t){var r=t+1,e=1==r||3==r;An.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({ Ve(yn,function(){var n={};return ct(yn,function(t,r){iu.call(yn.prototype,r)||(n[r]=t)}),n}(),{chain:false}),yn.VERSION="4.2.0",u("bind bindKey curry curryRight partial partialRight".split(" "),function(n){yn[n].placeholder=yn}),u(["drop","take"],function(n,t){An.prototype[n]=function(r){var e=this.__filtered__;if(e&&!t)return new An(this);r=r===Z?1:Iu(Re(r),0);var u=this.clone();return e?u.__takeCount__=Ru(r,u.__takeCount__):u.__views__.push({size:Ru(r,4294967295),type:n+(0>u.__dir__?"Right":"")}),
iteratee:mr(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),u(["head","last"],function(n,t){var r="take"+(t?"Right":"");An.prototype[n]=function(){return this[r](1).value()[0]}}),u(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");An.prototype[n]=function(){return this.__filtered__?new An(this):this[r](1)}}),An.prototype.compact=function(){return this.filter(Te)},An.prototype.find=function(n){return this.filter(n).head()},An.prototype.findLast=function(n){return this.reverse().find(n); u},An.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),u(["filter","map","takeWhile"],function(n,t){var r=t+1,e=1==r||3==r;An.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:mr(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),u(["head","last"],function(n,t){var r="take"+(t?"Right":"");An.prototype[n]=function(){return this[r](1).value()[0]}}),u(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");An.prototype[n]=function(){return this.__filtered__?new An(this):this[r](1);
},An.prototype.invokeMap=fe(function(n,t){return typeof n=="function"?new An(this):this.map(function(r){return vt(r,n,t)})}),An.prototype.reject=function(n){return n=mr(n,3),this.filter(function(t){return!n(t)})},An.prototype.slice=function(n,t){n=Ie(n);var r=this;return r.__filtered__&&(n>0||0>t)?new An(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==Z&&(t=Ie(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},An.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},An.prototype.toArray=function(){ }}),An.prototype.compact=function(){return this.filter(Ke)},An.prototype.find=function(n){return this.filter(n).head()},An.prototype.findLast=function(n){return this.reverse().find(n)},An.prototype.invokeMap=ce(function(n,t){return typeof n=="function"?new An(this):this.map(function(r){return vt(r,n,t)})}),An.prototype.reject=function(n){return n=mr(n,3),this.filter(function(t){return!n(t)})},An.prototype.slice=function(n,t){n=Re(n);var r=this;return r.__filtered__&&(n>0||0>t)?new An(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),
return this.take(4294967295)},ct(An.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=yn[e?"take"+("last"==t?"Right":""):t],o=e||/^find/.test(t);u&&(yn.prototype[t]=function(){function t(n){return n=u.apply(yn,l([n],f)),e&&h?n[0]:n}var i=this.__wrapped__,f=e?[1]:arguments,c=i instanceof An,a=f[0],s=c||Lo(i);s&&r&&typeof a=="function"&&1!=a.length&&(c=s=false);var h=this.__chain__,p=!!this.__actions__.length,a=o&&!h,c=c&&!p;return!o&&s?(i=c?i:new An(this), t!==Z&&(t=Re(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},An.prototype.takeRightWhile=function(n){return this.reverse().takeWhile(n).reverse()},An.prototype.toArray=function(){return this.take(4294967295)},ct(An.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=yn[e?"take"+("last"==t?"Right":""):t],o=e||/^find/.test(t);u&&(yn.prototype[t]=function(){function t(n){return n=u.apply(yn,l([n],f)),e&&h?n[0]:n}var i=this.__wrapped__,f=e?[1]:arguments,c=i instanceof An,a=f[0],s=c||Lo(i);
i=n.apply(i,f),i.__actions__.push({func:Yr,args:[t],thisArg:Z}),new wn(i,h)):a&&c?n.apply(this,f):(i=this.thru(t),a?e?i.value()[0]:i.value():i)})}),u("pop push shift sort splice unshift".split(" "),function(n){var t=eu[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);yn.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){return t.apply(r,n)})}}),ct(An.prototype,function(n,t){var r=yn[t];if(r){var e=r.name+"";(qu[e]||(qu[e]=[])).push({ s&&r&&typeof a=="function"&&1!=a.length&&(c=s=false);var h=this.__chain__,p=!!this.__actions__.length,a=o&&!h,c=c&&!p;return!o&&s?(i=c?i:new An(this),i=n.apply(i,f),i.__actions__.push({func:Yr,args:[t],thisArg:Z}),new wn(i,h)):a&&c?n.apply(this,f):(i=this.thru(t),a?e?i.value()[0]:i.value():i)})}),u("pop push shift sort splice unshift".split(" "),function(n){var t=eu[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);yn.prototype[n]=function(){var n=arguments;return e&&!this.__chain__?t.apply(this.value(),n):this[r](function(r){
name:t,func:r})}}),qu[cr(Z,2).name]=[{name:"wrapper",func:Z}],An.prototype.clone=function(){var n=new An(this.__wrapped__);return n.__actions__=Vt(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Vt(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Vt(this.__views__),n},An.prototype.reverse=function(){if(this.__filtered__){var n=new An(this);n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},An.prototype.value=function(){ return t.apply(r,n)})}}),ct(An.prototype,function(n,t){var r=yn[t];if(r){var e=r.name+"";(qu[e]||(qu[e]=[])).push({name:t,func:r})}}),qu[cr(Z,2).name]=[{name:"wrapper",func:Z}],An.prototype.clone=function(){var n=new An(this.__wrapped__);return n.__actions__=Vt(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Vt(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Vt(this.__views__),n},An.prototype.reverse=function(){if(this.__filtered__){var n=new An(this);
var n,t=this.__wrapped__.value(),r=this.__dir__,e=Lo(t),u=0>r,o=e?t.length:0;n=o;for(var i=this.__views__,f=0,c=-1,a=i.length;++c<a;){var l=i[c],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=Ru(n,f+s);break;case"takeRight":f=Iu(f,n-s)}}if(n={start:f,end:n},i=n.start,f=n.end,n=f-i,u=u?f:i-1,i=this.__iteratees__,f=i.length,c=0,a=Ru(n,this.__takeCount__),!e||200>o||o==n&&a==n)return Zt(t,this.__actions__);e=[];n:for(;n--&&a>c;){for(u+=r,o=-1,l=t[u];++o<f;){var h=i[o],s=h.type,h=(0, n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},An.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=Lo(t),u=0>r,o=e?t.length:0;n=o;for(var i=this.__views__,f=0,c=-1,a=i.length;++c<a;){var l=i[c],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=Ru(n,f+s);break;case"takeRight":f=Iu(f,n-s)}}if(n={start:f,end:n},i=n.start,f=n.end,n=f-i,u=u?f:i-1,i=this.__iteratees__,f=i.length,c=0,a=Ru(n,this.__takeCount__),!e||200>o||o==n&&a==n)return Zt(t,this.__actions__);
h.iteratee)(l);if(2==s)l=h;else if(!h){if(1==s)continue n;break n}}e[c++]=l}return e},yn.prototype.at=xo,yn.prototype.chain=function(){return Jr(this)},yn.prototype.commit=function(){return new wn(this.value(),this.__chain__)},yn.prototype.flatMap=function(n){return this.map(n).flatten()},yn.prototype.next=function(){this.__values__===Z&&(this.__values__=ke(this.value()));var n=this.__index__>=this.__values__.length,t=n?Z:this.__values__[this.__index__++];return{done:n,value:t}},yn.prototype.plant=function(n){ e=[];n:for(;n--&&a>c;){for(u+=r,o=-1,l=t[u];++o<f;){var h=i[o],s=h.type,h=(0,h.iteratee)(l);if(2==s)l=h;else if(!h){if(1==s)continue n;break n}}e[c++]=l}return e},yn.prototype.at=xo,yn.prototype.chain=function(){return Jr(this)},yn.prototype.commit=function(){return new wn(this.value(),this.__chain__)},yn.prototype.flatMap=function(n){return this.map(n).flatten()},yn.prototype.next=function(){this.__values__===Z&&(this.__values__=Ie(this.value()));var n=this.__index__>=this.__values__.length,t=n?Z:this.__values__[this.__index__++];
for(var t,r=this;r instanceof jn;){var e=Nr(r);e.__index__=0,e.__values__=Z,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},yn.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof An?(this.__actions__.length&&(n=new An(this)),n=n.reverse(),n.__actions__.push({func:Yr,args:[Kr],thisArg:Z}),new wn(n,this.__chain__)):this.thru(Kr)},yn.prototype.toJSON=yn.prototype.valueOf=yn.prototype.value=function(){return Zt(this.__wrapped__,this.__actions__)},bu&&(yn.prototype[bu]=Hr), return{done:n,value:t}},yn.prototype.plant=function(n){for(var t,r=this;r instanceof jn;){var e=Nr(r);e.__index__=0,e.__values__=Z,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},yn.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof An?(this.__actions__.length&&(n=new An(this)),n=n.reverse(),n.__actions__.push({func:Yr,args:[Kr],thisArg:Z}),new wn(n,this.__chain__)):this.thru(Kr)},yn.prototype.toJSON=yn.prototype.valueOf=yn.prototype.value=function(){return Zt(this.__wrapped__,this.__actions__);
yn}var Z,q=1/0,P=NaN,T=/\b__p\+='';/g,K=/\b(__p\+=)''\+/g,G=/(__e\(.*?\)|\b__t\))\+'';/g,V=/&(?:amp|lt|gt|quot|#39|#96);/g,J=/[&<>"'`]/g,Y=RegExp(V.source),H=RegExp(J.source),Q=/<%-([\s\S]+?)%>/g,X=/<%([\s\S]+?)%>/g,nn=/<%=([\s\S]+?)%>/g,tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,rn=/^\w*$/,en=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,un=/[\\^$.*+?()[\]{}|]/g,on=RegExp(un.source),fn=/^\s+|\s+$/g,cn=/^\s+/,an=/\s+$/,ln=/\\(\\)?/g,sn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,hn=/\w*$/,pn=/^0x/i,_n=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,vn=/^\[object .+?Constructor\]$/,dn=/^0o[0-7]+$/i,yn=/^(?:0|[1-9]\d*)$/,bn=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,xn=/($^)/,mn=/['\n\r\u2028\u2029\\]/g,jn="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?)*",wn="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+jn,An="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]?|[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",On=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]","g"),En=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+An+jn,"g"),kn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ufe0e\\ufe0f]"),In=/[a-zA-Z0-9]+/g,Rn=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|\\d+",wn].join("|"),"g"),Sn=/[a-z][A-Z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn="Array Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Reflect RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Cn={}; },bu&&(yn.prototype[bu]=Hr),yn}var Z,q=1/0,P=NaN,T=/\b__p\+='';/g,K=/\b(__p\+=)''\+/g,G=/(__e\(.*?\)|\b__t\))\+'';/g,V=/&(?:amp|lt|gt|quot|#39|#96);/g,J=/[&<>"'`]/g,Y=RegExp(V.source),H=RegExp(J.source),Q=/<%-([\s\S]+?)%>/g,X=/<%([\s\S]+?)%>/g,nn=/<%=([\s\S]+?)%>/g,tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,rn=/^\w*$/,en=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,un=/[\\^$.*+?()[\]{}|]/g,on=RegExp(un.source),fn=/^\s+|\s+$/g,cn=/^\s+/,an=/\s+$/,ln=/\\(\\)?/g,sn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,hn=/\w*$/,pn=/^0x/i,_n=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,vn=/^\[object .+?Constructor\]$/,dn=/^0o[0-7]+$/i,yn=/^(?:0|[1-9]\d*)$/,bn=/[\xc0-\xd6\xd8-\xde\xdf-\xf6\xf8-\xff]/g,xn=/($^)/,mn=/['\n\r\u2028\u2029\\]/g,jn="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|\\ud83c[\\udffb-\\udfff])?)*",wn="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+jn,An="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]?|[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",On=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0]","g"),En=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+An+jn,"g"),kn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe23\\u20d0-\\u20f0\\ufe0e\\ufe0f]"),In=/[a-zA-Z0-9]+/g,Rn=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2018\\u2019\\u201c\\u201d \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+|[A-Z\\xc0-\\xd6\\xd8-\\xde]+|\\d+",wn].join("|"),"g"),Sn=/[a-z][A-Z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn="Array Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Reflect RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Cn={};
Cn["[object Float32Array]"]=Cn["[object Float64Array]"]=Cn["[object Int8Array]"]=Cn["[object Int16Array]"]=Cn["[object Int32Array]"]=Cn["[object Uint8Array]"]=Cn["[object Uint8ClampedArray]"]=Cn["[object Uint16Array]"]=Cn["[object Uint32Array]"]=true,Cn["[object Arguments]"]=Cn["[object Array]"]=Cn["[object ArrayBuffer]"]=Cn["[object Boolean]"]=Cn["[object Date]"]=Cn["[object Error]"]=Cn["[object Function]"]=Cn["[object Map]"]=Cn["[object Number]"]=Cn["[object Object]"]=Cn["[object RegExp]"]=Cn["[object Set]"]=Cn["[object String]"]=Cn["[object WeakMap]"]=false; Cn["[object Float32Array]"]=Cn["[object Float64Array]"]=Cn["[object Int8Array]"]=Cn["[object Int16Array]"]=Cn["[object Int32Array]"]=Cn["[object Uint8Array]"]=Cn["[object Uint8ClampedArray]"]=Cn["[object Uint16Array]"]=Cn["[object Uint32Array]"]=true,Cn["[object Arguments]"]=Cn["[object Array]"]=Cn["[object ArrayBuffer]"]=Cn["[object Boolean]"]=Cn["[object Date]"]=Cn["[object Error]"]=Cn["[object Function]"]=Cn["[object Map]"]=Cn["[object Number]"]=Cn["[object Object]"]=Cn["[object RegExp]"]=Cn["[object Set]"]=Cn["[object String]"]=Cn["[object WeakMap]"]=false;
var Un={};Un["[object Arguments]"]=Un["[object Array]"]=Un["[object ArrayBuffer]"]=Un["[object Boolean]"]=Un["[object Date]"]=Un["[object Float32Array]"]=Un["[object Float64Array]"]=Un["[object Int8Array]"]=Un["[object Int16Array]"]=Un["[object Int32Array]"]=Un["[object Map]"]=Un["[object Number]"]=Un["[object Object]"]=Un["[object RegExp]"]=Un["[object Set]"]=Un["[object String]"]=Un["[object Symbol]"]=Un["[object Uint8Array]"]=Un["[object Uint8ClampedArray]"]=Un["[object Uint16Array]"]=Un["[object Uint32Array]"]=true, var Un={};Un["[object Arguments]"]=Un["[object Array]"]=Un["[object ArrayBuffer]"]=Un["[object Boolean]"]=Un["[object Date]"]=Un["[object Float32Array]"]=Un["[object Float64Array]"]=Un["[object Int8Array]"]=Un["[object Int16Array]"]=Un["[object Int32Array]"]=Un["[object Map]"]=Un["[object Number]"]=Un["[object Object]"]=Un["[object RegExp]"]=Un["[object Set]"]=Un["[object String]"]=Un["[object Symbol]"]=Un["[object Uint8Array]"]=Un["[object Uint8ClampedArray]"]=Un["[object Uint16Array]"]=Un["[object Uint32Array]"]=true,
Un["[object Error]"]=Un["[object Function]"]=Un["[object WeakMap]"]=false;var Bn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O", Un["[object Error]"]=Un["[object Function]"]=Un["[object WeakMap]"]=false;var Bn={"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I","\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O",

129
dist/mapping.fp.js vendored
View File

@@ -59,9 +59,12 @@ return /******/ (function(modules) { // webpackBootstrap
'all': 'some', 'all': 'some',
'allPass': 'overEvery', 'allPass': 'overEvery',
'apply': 'spread', 'apply': 'spread',
'assoc': 'set',
'assocPath': 'set',
'compose': 'flowRight', 'compose': 'flowRight',
'contains': 'includes', 'contains': 'includes',
'dissoc': 'omit', 'dissoc': 'unset',
'dissocPath': 'unset',
'each': 'forEach', 'each': 'forEach',
'eachRight': 'forEachRight', 'eachRight': 'forEachRight',
'equals': 'isEqual', 'equals': 'isEqual',
@@ -88,8 +91,59 @@ return /******/ (function(modules) { // webpackBootstrap
'zipObj': 'zipObject' 'zipObj': 'zipObject'
}; };
/** Used to map ary to method names. */
exports.aryMethod = {
1: [
'attempt', 'ceil', 'create', 'curry', 'curryRight', 'floor', 'fromPairs',
'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', 'over',
'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
],
2: [
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
'findLastKey', 'flatMap', 'forEach', 'forEachRight', 'forIn', 'forInRight',
'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', 'hasIn',
'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
'omitBy', 'orderBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
'partial', 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll',
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
'repeat', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
'split', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', 'takeRightWhile',
'takeWhile', 'tap', 'throttle', 'thru', 'times', 'truncate', 'union', 'uniqBy',
'uniqWith', 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',
'zipObjectDeep'
],
3: [
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
'isMatchWith', 'mergeWith', 'pullAllBy', 'reduce', 'reduceRight', 'replace',
'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform', 'unionBy',
'unionWith', 'xorBy', 'xorWith', 'zipWith'
],
4: [
'fill', 'setWith'
]
};
/** Used to map ary to rearg configs. */
exports.aryRearg = {
2: [1, 0],
3: [2, 1, 0],
4: [3, 2, 0, 1]
};
/** Used to iterate `mapping.aryMethod` keys. */
exports.caps = [1, 2, 3, 4];
/** Used to map method names to their iteratee ary. */ /** Used to map method names to their iteratee ary. */
exports.aryIteratee = { exports.iterateeAry = {
'assignWith': 2, 'assignWith': 2,
'assignInWith': 2, 'assignInWith': 2,
'cloneDeepWith': 1, 'cloneDeepWith': 1,
@@ -128,53 +182,6 @@ return /******/ (function(modules) { // webpackBootstrap
'transform': 2 'transform': 2
}; };
/** Used to map ary to method names. */
exports.aryMethod = {
1: [
'attempt', 'ceil', 'create', 'curry', 'curryRight', 'floor', 'fromPairs',
'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', 'over',
'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
],
2: [
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
'findLastKey', 'flatMap', 'forEach', 'forEachRight', 'forIn', 'forInRight',
'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', 'hasIn',
'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
'omitBy', 'orderBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
'partition', 'pick', 'pickBy', 'pull', 'pullAll', 'pullAt', 'random', 'range',
'rangeRight', 'rearg', 'reject', 'remove', 'repeat', 'result', 'sampleSize',
'some', 'sortBy', 'sortedIndex', 'sortedIndexOf', 'sortedLastIndex',
'sortedLastIndexOf', 'sortedUniqBy', 'split', 'startsWith', 'subtract',
'sumBy', 'take', 'takeRight', 'takeRightWhile', 'takeWhile', 'tap', 'throttle',
'thru', 'times', 'truncate', 'union', 'uniqBy', 'uniqWith', 'unset', 'unzipWith',
'without', 'wrap', 'xor', 'zip', 'zipObject', 'zipObjectDeep'
],
3: [
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
'isMatchWith', 'mergeWith', 'pullAllBy', 'reduce', 'reduceRight', 'replace',
'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform', 'unionBy',
'unionWith', 'xorBy', 'xorWith', 'zipWith'
],
4: [
'fill', 'setWith'
]
};
/** Used to map ary to rearg configs. */
exports.aryRearg = {
2: [1, 0],
3: [2, 1, 0],
4: [3, 2, 0, 1]
};
/** Used to map method names to iteratee rearg configs. */ /** Used to map method names to iteratee rearg configs. */
exports.iterateeRearg = { exports.iterateeRearg = {
'findKey': [1], 'findKey': [1],
@@ -196,14 +203,10 @@ return /******/ (function(modules) { // webpackBootstrap
'transform': [2, 0, 1] 'transform': [2, 0, 1]
}; };
/** Used to iterate `mapping.aryMethod` keys. */ /** Used to map method names to spread configs. */
exports.caps = [1, 2, 3, 4]; exports.methodSpread = {
'partial': 1,
/** Used to map keys to other keys. */ 'partialRight': 1
exports.key = {
'curryN': 'curry',
'curryRightN': 'curryRight',
'getOr': 'get'
}; };
/** Used to identify methods which mutate arrays or objects. */ /** Used to identify methods which mutate arrays or objects. */
@@ -229,7 +232,8 @@ return /******/ (function(modules) { // webpackBootstrap
}, },
'set': { 'set': {
'set': true, 'set': true,
'setWith': true 'setWith': true,
'unset': true
} }
}; };
@@ -260,6 +264,13 @@ return /******/ (function(modules) { // webpackBootstrap
return result; return result;
}()); }());
/** Used to map method names to other names. */
exports.rename = {
'curryN': 'curry',
'curryRightN': 'curryRight',
'getOr': 'get'
};
/** Used to track methods that skip `_.rearg`. */ /** Used to track methods that skip `_.rearg`. */
exports.skipRearg = { exports.skipRearg = {
'assign': true, 'assign': true,
@@ -268,6 +279,8 @@ return /******/ (function(modules) { // webpackBootstrap
'difference': true, 'difference': true,
'matchesProperty': true, 'matchesProperty': true,
'merge': true, 'merge': true,
'partial': true,
'partialRight': true,
'random': true, 'random': true,
'range': true, 'range': true,
'rangeRight': true, 'rangeRight': true,

File diff suppressed because it is too large Load Diff

View File

@@ -29,7 +29,8 @@ function baseConvert(util, name, func) {
'isFunction': util.isFunction, 'isFunction': util.isFunction,
'iteratee': util.iteratee, 'iteratee': util.iteratee,
'keys': util.keys, 'keys': util.keys,
'rearg': util.rearg 'rearg': util.rearg,
'rest': util.rest
}; };
var ary = _.ary, var ary = _.ary,
@@ -38,7 +39,8 @@ function baseConvert(util, name, func) {
each = _.forEach, each = _.forEach,
isFunction = _.isFunction, isFunction = _.isFunction,
keys = _.keys, keys = _.keys,
rearg = _.rearg; rearg = _.rearg,
spread = _.spread;
var baseArity = function(func, n) { var baseArity = function(func, n) {
return n == 2 return n == 2
@@ -167,17 +169,21 @@ function baseConvert(util, name, func) {
each(mapping.caps, function(cap) { each(mapping.caps, function(cap) {
each(mapping.aryMethod[cap], function(otherName) { each(mapping.aryMethod[cap], function(otherName) {
if (name == otherName) { if (name == otherName) {
var indexes = mapping.iterateeRearg[name], var aryN = !isLib && mapping.iterateeAry[name],
n = !isLib && mapping.aryIteratee[name]; reargIndexes = mapping.iterateeRearg[name],
spreadStart = mapping.methodSpread[name];
result = spreadStart === undefined
? ary(func, cap)
: spread(func, spreadStart);
result = ary(func, cap);
if (cap > 1 && !mapping.skipRearg[name]) { if (cap > 1 && !mapping.skipRearg[name]) {
result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[cap]); result = rearg(result, mapping.methodRearg[name] || mapping.aryRearg[cap]);
} }
if (indexes) { if (reargIndexes) {
result = iterateeRearg(result, indexes); result = iterateeRearg(result, reargIndexes);
} else if (n) { } else if (aryN) {
result = iterateeAry(result, n); result = iterateeAry(result, aryN);
} }
if (cap > 1) { if (cap > 1) {
result = curry(result, cap); result = curry(result, cap);
@@ -198,11 +204,14 @@ function baseConvert(util, name, func) {
if (!isLib) { if (!isLib) {
return wrap(name, func); return wrap(name, func);
} }
// Add placeholder alias.
_.__ = placeholder;
// Iterate over methods for the current ary cap. // Iterate over methods for the current ary cap.
var pairs = []; var pairs = [];
each(mapping.caps, function(cap) { each(mapping.caps, function(cap) {
each(mapping.aryMethod[cap], function(key) { each(mapping.aryMethod[cap], function(key) {
var func = _[mapping.key[key] || key]; var func = _[mapping.rename[key] || key];
if (func) { if (func) {
pairs.push([key, wrap(key, func)]); pairs.push([key, wrap(key, func)]);
} }

View File

@@ -3,9 +3,12 @@ exports.aliasToReal = {
'all': 'some', 'all': 'some',
'allPass': 'overEvery', 'allPass': 'overEvery',
'apply': 'spread', 'apply': 'spread',
'assoc': 'set',
'assocPath': 'set',
'compose': 'flowRight', 'compose': 'flowRight',
'contains': 'includes', 'contains': 'includes',
'dissoc': 'omit', 'dissoc': 'unset',
'dissocPath': 'unset',
'each': 'forEach', 'each': 'forEach',
'eachRight': 'forEachRight', 'eachRight': 'forEachRight',
'equals': 'isEqual', 'equals': 'isEqual',
@@ -32,8 +35,59 @@ exports.aliasToReal = {
'zipObj': 'zipObject' 'zipObj': 'zipObject'
}; };
/** Used to map ary to method names. */
exports.aryMethod = {
1: [
'attempt', 'ceil', 'create', 'curry', 'curryRight', 'floor', 'fromPairs',
'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', 'over',
'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
'spread', 'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
],
2: [
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
'findLastKey', 'flatMap', 'forEach', 'forEachRight', 'forIn', 'forInRight',
'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', 'hasIn',
'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
'omitBy', 'orderBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
'partial', 'partialRight', 'partition', 'pick', 'pickBy', 'pull', 'pullAll',
'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',
'repeat', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',
'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',
'split', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight', 'takeRightWhile',
'takeWhile', 'tap', 'throttle', 'thru', 'times', 'truncate', 'union', 'uniqBy',
'uniqWith', 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',
'zipObjectDeep'
],
3: [
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
'isMatchWith', 'mergeWith', 'pullAllBy', 'reduce', 'reduceRight', 'replace',
'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform', 'unionBy',
'unionWith', 'xorBy', 'xorWith', 'zipWith'
],
4: [
'fill', 'setWith'
]
};
/** Used to map ary to rearg configs. */
exports.aryRearg = {
2: [1, 0],
3: [2, 1, 0],
4: [3, 2, 0, 1]
};
/** Used to iterate `mapping.aryMethod` keys. */
exports.caps = [1, 2, 3, 4];
/** Used to map method names to their iteratee ary. */ /** Used to map method names to their iteratee ary. */
exports.aryIteratee = { exports.iterateeAry = {
'assignWith': 2, 'assignWith': 2,
'assignInWith': 2, 'assignInWith': 2,
'cloneDeepWith': 1, 'cloneDeepWith': 1,
@@ -72,53 +126,6 @@ exports.aryIteratee = {
'transform': 2 'transform': 2
}; };
/** Used to map ary to method names. */
exports.aryMethod = {
1: [
'attempt', 'ceil', 'create', 'curry', 'curryRight', 'floor', 'fromPairs',
'invert', 'iteratee', 'memoize', 'method', 'methodOf', 'mixin', 'over',
'overEvery', 'overSome', 'rest', 'reverse', 'round', 'runInContext',
'template', 'trim', 'trimEnd', 'trimStart', 'uniqueId', 'words'
],
2: [
'add', 'after', 'ary', 'assign', 'assignIn', 'at', 'before', 'bind', 'bindKey',
'chunk', 'cloneDeepWith', 'cloneWith', 'concat', 'countBy', 'curryN',
'curryRightN', 'debounce', 'defaults', 'defaultsDeep', 'delay', 'difference',
'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq', 'every',
'filter', 'find', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',
'findLastKey', 'flatMap', 'forEach', 'forEachRight', 'forIn', 'forInRight',
'forOwn', 'forOwnRight', 'get', 'groupBy', 'gt', 'gte', 'has', 'hasIn',
'includes', 'indexOf', 'intersection', 'invertBy', 'invoke', 'invokeMap',
'isEqual', 'isMatch', 'join', 'keyBy', 'lastIndexOf', 'lt', 'lte', 'map',
'mapKeys', 'mapValues', 'matchesProperty', 'maxBy', 'merge', 'minBy', 'omit',
'omitBy', 'orderBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt',
'partition', 'pick', 'pickBy', 'pull', 'pullAll', 'pullAt', 'random', 'range',
'rangeRight', 'rearg', 'reject', 'remove', 'repeat', 'result', 'sampleSize',
'some', 'sortBy', 'sortedIndex', 'sortedIndexOf', 'sortedLastIndex',
'sortedLastIndexOf', 'sortedUniqBy', 'split', 'startsWith', 'subtract',
'sumBy', 'take', 'takeRight', 'takeRightWhile', 'takeWhile', 'tap', 'throttle',
'thru', 'times', 'truncate', 'union', 'uniqBy', 'uniqWith', 'unset', 'unzipWith',
'without', 'wrap', 'xor', 'zip', 'zipObject', 'zipObjectDeep'
],
3: [
'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',
'getOr', 'inRange', 'intersectionBy', 'intersectionWith', 'isEqualWith',
'isMatchWith', 'mergeWith', 'pullAllBy', 'reduce', 'reduceRight', 'replace',
'set', 'slice', 'sortedIndexBy', 'sortedLastIndexBy', 'transform', 'unionBy',
'unionWith', 'xorBy', 'xorWith', 'zipWith'
],
4: [
'fill', 'setWith'
]
};
/** Used to map ary to rearg configs. */
exports.aryRearg = {
2: [1, 0],
3: [2, 1, 0],
4: [3, 2, 0, 1]
};
/** Used to map method names to iteratee rearg configs. */ /** Used to map method names to iteratee rearg configs. */
exports.iterateeRearg = { exports.iterateeRearg = {
'findKey': [1], 'findKey': [1],
@@ -140,14 +147,10 @@ exports.methodRearg = {
'transform': [2, 0, 1] 'transform': [2, 0, 1]
}; };
/** Used to iterate `mapping.aryMethod` keys. */ /** Used to map method names to spread configs. */
exports.caps = [1, 2, 3, 4]; exports.methodSpread = {
'partial': 1,
/** Used to map keys to other keys. */ 'partialRight': 1
exports.key = {
'curryN': 'curry',
'curryRightN': 'curryRight',
'getOr': 'get'
}; };
/** Used to identify methods which mutate arrays or objects. */ /** Used to identify methods which mutate arrays or objects. */
@@ -173,7 +176,8 @@ exports.mutate = {
}, },
'set': { 'set': {
'set': true, 'set': true,
'setWith': true 'setWith': true,
'unset': true
} }
}; };
@@ -204,6 +208,13 @@ exports.realToAlias = (function() {
return result; return result;
}()); }());
/** Used to map method names to other names. */
exports.rename = {
'curryN': 'curry',
'curryRightN': 'curryRight',
'getOr': 'get'
};
/** Used to track methods that skip `_.rearg`. */ /** Used to track methods that skip `_.rearg`. */
exports.skipRearg = { exports.skipRearg = {
'assign': true, 'assign': true,
@@ -212,6 +223,8 @@ exports.skipRearg = {
'difference': true, 'difference': true,
'matchesProperty': true, 'matchesProperty': true,
'merge': true, 'merge': true,
'partial': true,
'partialRight': true,
'random': true, 'random': true,
'range': true, 'range': true,
'rangeRight': true, 'rangeRight': true,

View File

@@ -49,8 +49,8 @@ function isThru(funcName) {
function getTemplate(moduleName) { function getTemplate(moduleName) {
var data = { var data = {
'key': mapping.key, 'name': _.result(mapping.aliasToReal, moduleName, moduleName),
'name': _.result(mapping.aliasToReal, moduleName, moduleName) 'rename': mapping.rename
}; };
if (isAlias(moduleName)) { if (isAlias(moduleName)) {
@@ -91,7 +91,7 @@ function build(target) {
}); });
// Add FP alias and remapped module paths. // Add FP alias and remapped module paths.
_.each([mapping.aliasToReal, mapping.key], function(data) { _.each([mapping.aliasToReal, mapping.rename], function(data) {
_.forOwn(data, function(realName, alias) { _.forOwn(data, function(realName, alias) {
modulePaths.push(path.join(target, alias + '.js')); modulePaths.push(path.join(target, alias + '.js'));
}); });

View File

@@ -6,5 +6,6 @@ module.exports = {
'isFunction': require('../isFunction'), 'isFunction': require('../isFunction'),
'iteratee': require('../iteratee'), 'iteratee': require('../iteratee'),
'keys': require('../_baseKeys'), 'keys': require('../_baseKeys'),
'rearg': require('../rearg') 'rearg': require('../rearg'),
'spread': require('../spread')
}; };

View File

@@ -1,2 +1,2 @@
var convert = require('./convert'); var convert = require('./convert');
module.exports = convert('<%= name %>', require('../<%= _.result(key, name, name) %>')); module.exports = convert('<%= name %>', require('../<%= _.result(rename, name, name) %>'));

296
lodash.js
View File

@@ -1,7 +1,6 @@
/** /**
* @license * @license
* lodash 4.1.0 (Custom Build) <https://lodash.com/> * lodash 4.2.0 <https://lodash.com/>
* Build: `lodash -d -o ./lodash.js`
* Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/> * Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE> * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors * Copyright 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
@@ -13,7 +12,7 @@
var undefined; var undefined;
/** Used as the semantic version number. */ /** Used as the semantic version number. */
var VERSION = '4.1.0'; var VERSION = '4.2.0';
/** Used to compose bitmasks for wrapper metadata. */ /** Used to compose bitmasks for wrapper metadata. */
var BIND_FLAG = 1, var BIND_FLAG = 1,
@@ -397,11 +396,11 @@
* @private * @private
* @param {Function} func The function to invoke. * @param {Function} func The function to invoke.
* @param {*} thisArg The `this` binding of `func`. * @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`. * @returns {*} Returns the result of `func`.
*/ */
function apply(func, thisArg, args) { function apply(func, thisArg, args) {
var length = args ? args.length : 0; var length = args.length;
switch (length) { switch (length) {
case 0: return func.call(thisArg); case 0: return func.call(thisArg);
case 1: return func.call(thisArg, args[0]); case 1: return func.call(thisArg, args[0]);
@@ -841,7 +840,7 @@
result = result === undefined ? current : (result + current); result = result === undefined ? current : (result + current);
} }
} }
return length ? result : 0; return result;
} }
/** /**
@@ -1254,14 +1253,14 @@
* lodash.isFunction(lodash.bar); * lodash.isFunction(lodash.bar);
* // => true * // => true
* *
* // using `context` to mock `Date#getTime` use in `_.now` * // Use `context` to mock `Date#getTime` use in `_.now`.
* var mock = _.runInContext({ * var mock = _.runInContext({
* 'Date': function() { * 'Date': function() {
* return { 'getTime': getTimeMock }; * return { 'getTime': getTimeMock };
* } * }
* }); * });
* *
* // or creating a suped-up `defer` in Node.js * // Create a suped-up `defer` in Node.js.
* var defer = _.runInContext({ 'setTimeout': setImmediate }).defer; * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
*/ */
function runInContext(context) { function runInContext(context) {
@@ -1451,11 +1450,11 @@
* *
* var wrapped = _([1, 2, 3]); * var wrapped = _([1, 2, 3]);
* *
* // returns an unwrapped value * // Returns an unwrapped value.
* wrapped.reduce(_.add); * wrapped.reduce(_.add);
* // => 6 * // => 6
* *
* // returns a wrapped value * // Returns a wrapped value.
* var squares = wrapped.map(square); * var squares = wrapped.map(square);
* *
* _.isArray(squares); * _.isArray(squares);
@@ -5471,7 +5470,7 @@
* _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor); * _.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor);
* // => [3.1, 1.3] * // => [3.1, 1.3]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x'); * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
* // => [{ 'x': 2 }] * // => [{ 'x': 2 }]
*/ */
@@ -5603,15 +5602,15 @@
* _.dropRightWhile(users, function(o) { return !o.active; }); * _.dropRightWhile(users, function(o) { return !o.active; });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.dropRightWhile(users, { 'user': 'pebbles', 'active': false }); * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
* // => objects for ['barney', 'fred'] * // => objects for ['barney', 'fred']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.dropRightWhile(users, ['active', false]); * _.dropRightWhile(users, ['active', false]);
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.dropRightWhile(users, 'active'); * _.dropRightWhile(users, 'active');
* // => objects for ['barney', 'fred', 'pebbles'] * // => objects for ['barney', 'fred', 'pebbles']
*/ */
@@ -5643,15 +5642,15 @@
* _.dropWhile(users, function(o) { return !o.active; }); * _.dropWhile(users, function(o) { return !o.active; });
* // => objects for ['pebbles'] * // => objects for ['pebbles']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.dropWhile(users, { 'user': 'barney', 'active': false }); * _.dropWhile(users, { 'user': 'barney', 'active': false });
* // => objects for ['fred', 'pebbles'] * // => objects for ['fred', 'pebbles']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.dropWhile(users, ['active', false]); * _.dropWhile(users, ['active', false]);
* // => objects for ['pebbles'] * // => objects for ['pebbles']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.dropWhile(users, 'active'); * _.dropWhile(users, 'active');
* // => objects for ['barney', 'fred', 'pebbles'] * // => objects for ['barney', 'fred', 'pebbles']
*/ */
@@ -5722,15 +5721,15 @@
* _.findIndex(users, function(o) { return o.user == 'barney'; }); * _.findIndex(users, function(o) { return o.user == 'barney'; });
* // => 0 * // => 0
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findIndex(users, { 'user': 'fred', 'active': false }); * _.findIndex(users, { 'user': 'fred', 'active': false });
* // => 1 * // => 1
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findIndex(users, ['active', false]); * _.findIndex(users, ['active', false]);
* // => 0 * // => 0
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findIndex(users, 'active'); * _.findIndex(users, 'active');
* // => 2 * // => 2
*/ */
@@ -5761,15 +5760,15 @@
* _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
* // => 2 * // => 2
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findLastIndex(users, { 'user': 'barney', 'active': true }); * _.findLastIndex(users, { 'user': 'barney', 'active': true });
* // => 0 * // => 0
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findLastIndex(users, ['active', false]); * _.findLastIndex(users, ['active', false]);
* // => 2 * // => 2
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findLastIndex(users, 'active'); * _.findLastIndex(users, 'active');
* // => 0 * // => 0
*/ */
@@ -5779,31 +5778,6 @@
: -1; : -1;
} }
/**
* Creates an array of flattened values by running each element in `array`
* through `iteratee` and concating its result to the other mapped values.
* The iteratee is invoked with three arguments: (value, index|key, array).
*
* @static
* @memberOf _
* @category Array
* @param {Array} array The array to iterate over.
* @param {Function|Object|string} [iteratee=_.identity] The function invoked per iteration.
* @returns {Array} Returns the new array.
* @example
*
* function duplicate(n) {
* return [n, n];
* }
*
* _.flatMap([1, 2], duplicate);
* // => [1, 1, 2, 2]
*/
function flatMap(array, iteratee) {
var length = array ? array.length : 0;
return length ? baseFlatten(arrayMap(array, getIteratee(iteratee, 3))) : [];
}
/** /**
* Flattens `array` a single level. * Flattens `array` a single level.
* *
@@ -5891,8 +5865,7 @@
* Gets the index at which the first occurrence of `value` is found in `array` * 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) * 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 * 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` * from the end of `array`.
* performs a faster binary search.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -5906,7 +5879,7 @@
* _.indexOf([1, 2, 1, 2], 2); * _.indexOf([1, 2, 1, 2], 2);
* // => 1 * // => 1
* *
* // using `fromIndex` * // Search from the `fromIndex`.
* _.indexOf([1, 2, 1, 2], 2, 2); * _.indexOf([1, 2, 1, 2], 2, 2);
* // => 3 * // => 3
*/ */
@@ -5977,7 +5950,7 @@
* _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor); * _.intersectionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [2.1] * // => [2.1]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }] * // => [{ 'x': 1 }]
*/ */
@@ -6080,7 +6053,7 @@
* _.lastIndexOf([1, 2, 1, 2], 2); * _.lastIndexOf([1, 2, 1, 2], 2);
* // => 3 * // => 3
* *
* // using `fromIndex` * // Search from the `fromIndex`.
* _.lastIndexOf([1, 2, 1, 2], 2, 2); * _.lastIndexOf([1, 2, 1, 2], 2, 2);
* // => 1 * // => 1
*/ */
@@ -6356,7 +6329,7 @@
* _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict)); * _.sortedIndexBy(['thirty', 'fifty'], 'forty', _.propertyOf(dict));
* // => 1 * // => 1
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); * _.sortedIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
* // => 0 * // => 0
*/ */
@@ -6424,7 +6397,7 @@
* @returns {number} Returns the index at which `value` should be inserted into `array`. * @returns {number} Returns the index at which `value` should be inserted into `array`.
* @example * @example
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x'); * _.sortedLastIndexBy([{ 'x': 4 }, { 'x': 5 }], { 'x': 4 }, 'x');
* // => 1 * // => 1
*/ */
@@ -6491,7 +6464,7 @@
* @example * @example
* *
* _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
* // => [1.1, 2.2] * // => [1.1, 2.3]
*/ */
function sortedUniqBy(array, iteratee) { function sortedUniqBy(array, iteratee) {
return (array && array.length) return (array && array.length)
@@ -6604,15 +6577,15 @@
* _.takeRightWhile(users, function(o) { return !o.active; }); * _.takeRightWhile(users, function(o) { return !o.active; });
* // => objects for ['fred', 'pebbles'] * // => objects for ['fred', 'pebbles']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.takeRightWhile(users, { 'user': 'pebbles', 'active': false }); * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
* // => objects for ['pebbles'] * // => objects for ['pebbles']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.takeRightWhile(users, ['active', false]); * _.takeRightWhile(users, ['active', false]);
* // => objects for ['fred', 'pebbles'] * // => objects for ['fred', 'pebbles']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.takeRightWhile(users, 'active'); * _.takeRightWhile(users, 'active');
* // => [] * // => []
*/ */
@@ -6644,15 +6617,15 @@
* _.takeWhile(users, function(o) { return !o.active; }); * _.takeWhile(users, function(o) { return !o.active; });
* // => objects for ['barney', 'fred'] * // => objects for ['barney', 'fred']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.takeWhile(users, { 'user': 'barney', 'active': false }); * _.takeWhile(users, { 'user': 'barney', 'active': false });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.takeWhile(users, ['active', false]); * _.takeWhile(users, ['active', false]);
* // => objects for ['barney', 'fred'] * // => objects for ['barney', 'fred']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.takeWhile(users, 'active'); * _.takeWhile(users, 'active');
* // => [] * // => []
*/ */
@@ -6697,7 +6670,7 @@
* _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor); * _.unionBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [2.1, 1.2, 4.3] * // => [2.1, 1.2, 4.3]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }, { 'x': 2 }] * // => [{ 'x': 1 }, { 'x': 2 }]
*/ */
@@ -6774,7 +6747,7 @@
* _.uniqBy([2.1, 1.2, 2.3], Math.floor); * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
* // => [2.1, 1.2] * // => [2.1, 1.2]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 1 }, { 'x': 2 }] * // => [{ 'x': 1 }, { 'x': 2 }]
*/ */
@@ -6930,7 +6903,7 @@
* _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor); * _.xorBy([2.1, 1.2], [4.3, 2.4], Math.floor);
* // => [1.2, 4.3] * // => [1.2, 4.3]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x'); * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
* // => [{ 'x': 2 }] * // => [{ 'x': 2 }]
*/ */
@@ -7085,10 +7058,9 @@
} }
/** /**
* This method invokes `interceptor` and returns `value`. The interceptor is * This method invokes `interceptor` and returns `value`. The interceptor
* invoked with one argument; (value). The purpose of this method is to "tap into" * is invoked with one argument; (value). The purpose of this method is to
* a method chain in order to perform operations on intermediate results within * "tap into" a method chain in order to modify intermediate results.
* the chain.
* *
* @static * @static
* @memberOf _ * @memberOf _
@@ -7100,6 +7072,7 @@
* *
* _([1, 2, 3]) * _([1, 2, 3])
* .tap(function(array) { * .tap(function(array) {
* // Mutate input array.
* array.pop(); * array.pop();
* }) * })
* .reverse() * .reverse()
@@ -7113,6 +7086,8 @@
/** /**
* This method is like `_.tap` except that it returns the result of `interceptor`. * 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 * @static
* @memberOf _ * @memberOf _
@@ -7188,11 +7163,11 @@
* { 'user': 'fred', 'age': 40 } * { 'user': 'fred', 'age': 40 }
* ]; * ];
* *
* // without explicit chaining * // A sequence without explicit chaining.
* _(users).head(); * _(users).head();
* // => { 'user': 'barney', 'age': 36 } * // => { 'user': 'barney', 'age': 36 }
* *
* // with explicit chaining * // A sequence with explicit chaining.
* _(users) * _(users)
* .chain() * .chain()
* .head() * .head()
@@ -7447,15 +7422,15 @@
* { 'user': 'fred', 'active': false } * { 'user': 'fred', 'active': false }
* ]; * ];
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.every(users, { 'user': 'barney', 'active': false }); * _.every(users, { 'user': 'barney', 'active': false });
* // => false * // => false
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.every(users, ['active', false]); * _.every(users, ['active', false]);
* // => true * // => true
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.every(users, 'active'); * _.every(users, 'active');
* // => false * // => false
*/ */
@@ -7488,15 +7463,15 @@
* _.filter(users, function(o) { return !o.active; }); * _.filter(users, function(o) { return !o.active; });
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.filter(users, { 'age': 36, 'active': true }); * _.filter(users, { 'age': 36, 'active': true });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.filter(users, ['active', false]); * _.filter(users, ['active', false]);
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.filter(users, 'active'); * _.filter(users, 'active');
* // => objects for ['barney'] * // => objects for ['barney']
*/ */
@@ -7527,15 +7502,15 @@
* _.find(users, function(o) { return o.age < 40; }); * _.find(users, function(o) { return o.age < 40; });
* // => object for 'barney' * // => object for 'barney'
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.find(users, { 'age': 1, 'active': true }); * _.find(users, { 'age': 1, 'active': true });
* // => object for 'pebbles' * // => object for 'pebbles'
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.find(users, ['active', false]); * _.find(users, ['active', false]);
* // => object for 'fred' * // => object for 'fred'
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.find(users, 'active'); * _.find(users, 'active');
* // => object for 'barney' * // => object for 'barney'
*/ */
@@ -7574,6 +7549,30 @@
return baseFind(collection, predicate, baseEachRight); return baseFind(collection, predicate, baseEachRight);
} }
/**
* 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, collection).
*
* @static
* @memberOf _
* @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 flattened array.
* @example
*
* function duplicate(n) {
* return [n, n];
* }
*
* _.flatMap([1, 2], duplicate);
* // => [1, 1, 2, 2]
*/
function flatMap(collection, iteratee) {
return baseFlatten(map(collection, iteratee));
}
/** /**
* Iterates over elements of `collection` invoking `iteratee` for each element. * Iterates over elements of `collection` invoking `iteratee` for each element.
* The iteratee is invoked with three arguments: (value, index|key, collection). * The iteratee is invoked with three arguments: (value, index|key, collection).
@@ -7649,7 +7648,7 @@
* _.groupBy([6.1, 4.2, 6.3], Math.floor); * _.groupBy([6.1, 4.2, 6.3], Math.floor);
* // => { '4': [4.2], '6': [6.1, 6.3] } * // => { '4': [4.2], '6': [6.1, 6.3] }
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.groupBy(['one', 'two', 'three'], 'length'); * _.groupBy(['one', 'two', 'three'], 'length');
* // => { '3': ['one', 'two'], '5': ['three'] } * // => { '3': ['one', 'two'], '5': ['three'] }
*/ */
@@ -7805,7 +7804,7 @@
* { 'user': 'fred' } * { 'user': 'fred' }
* ]; * ];
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.map(users, 'user'); * _.map(users, 'user');
* // => ['barney', 'fred'] * // => ['barney', 'fred']
*/ */
@@ -7837,7 +7836,7 @@
* { 'user': 'barney', 'age': 36 } * { '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']); * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
* // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]] * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
*/ */
@@ -7878,15 +7877,15 @@
* _.partition(users, function(o) { return o.active; }); * _.partition(users, function(o) { return o.active; });
* // => objects for [['fred'], ['barney', 'pebbles']] * // => objects for [['fred'], ['barney', 'pebbles']]
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.partition(users, { 'age': 1, 'active': false }); * _.partition(users, { 'age': 1, 'active': false });
* // => objects for [['pebbles'], ['barney', 'fred']] * // => objects for [['pebbles'], ['barney', 'fred']]
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.partition(users, ['active', false]); * _.partition(users, ['active', false]);
* // => objects for [['barney', 'pebbles'], ['fred']] * // => objects for [['barney', 'pebbles'], ['fred']]
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.partition(users, 'active'); * _.partition(users, 'active');
* // => objects for [['fred'], ['barney', 'pebbles']] * // => objects for [['fred'], ['barney', 'pebbles']]
*/ */
@@ -7983,15 +7982,15 @@
* _.reject(users, function(o) { return !o.active; }); * _.reject(users, function(o) { return !o.active; });
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.reject(users, { 'age': 40, 'active': true }); * _.reject(users, { 'age': 40, 'active': true });
* // => objects for ['barney'] * // => objects for ['barney']
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.reject(users, ['active', false]); * _.reject(users, ['active', false]);
* // => objects for ['fred'] * // => objects for ['fred']
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.reject(users, 'active'); * _.reject(users, 'active');
* // => objects for ['barney'] * // => objects for ['barney']
*/ */
@@ -8130,15 +8129,15 @@
* { 'user': 'fred', 'active': false } * { 'user': 'fred', 'active': false }
* ]; * ];
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.some(users, { 'user': 'barney', 'active': false }); * _.some(users, { 'user': 'barney', 'active': false });
* // => false * // => false
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.some(users, ['active', false]); * _.some(users, ['active', false]);
* // => true * // => true
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.some(users, 'active'); * _.some(users, 'active');
* // => true * // => true
*/ */
@@ -8338,7 +8337,7 @@
* bound('!'); * bound('!');
* // => 'hi fred!' * // => 'hi fred!'
* *
* // using placeholders * // Bound with placeholders.
* var bound = _.bind(greet, object, _, '!'); * var bound = _.bind(greet, object, _, '!');
* bound('hi'); * bound('hi');
* // => 'hi fred!' * // => 'hi fred!'
@@ -8391,7 +8390,7 @@
* bound('!'); * bound('!');
* // => 'hiya fred!' * // => 'hiya fred!'
* *
* // using placeholders * // Bound with placeholders.
* var bound = _.bindKey(object, 'greet', _, '!'); * var bound = _.bindKey(object, 'greet', _, '!');
* bound('hi'); * bound('hi');
* // => 'hiya fred!' * // => 'hiya fred!'
@@ -8441,7 +8440,7 @@
* curried(1, 2, 3); * curried(1, 2, 3);
* // => [1, 2, 3] * // => [1, 2, 3]
* *
* // using placeholders * // Curried with placeholders.
* curried(1)(_, 3)(2); * curried(1)(_, 3)(2);
* // => [1, 2, 3] * // => [1, 2, 3]
*/ */
@@ -8485,7 +8484,7 @@
* curried(1, 2, 3); * curried(1, 2, 3);
* // => [1, 2, 3] * // => [1, 2, 3]
* *
* // using placeholders * // Curried with placeholders.
* curried(3)(1, _)(2); * curried(3)(1, _)(2);
* // => [1, 2, 3] * // => [1, 2, 3]
*/ */
@@ -8528,21 +8527,21 @@
* @returns {Function} Returns the new debounced function. * @returns {Function} Returns the new debounced function.
* @example * @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)); * 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, { * jQuery(element).on('click', _.debounce(sendMail, 300, {
* 'leading': true, * 'leading': true,
* 'trailing': false * '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 debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
* var source = new EventSource('/stream'); * var source = new EventSource('/stream');
* jQuery(source).on('message', debounced); * jQuery(source).on('message', debounced);
* *
* // cancel a trailing debounced invocation * // Cancel the trailing debounced invocation.
* jQuery(window).on('popstate', debounced.cancel); * jQuery(window).on('popstate', debounced.cancel);
*/ */
function debounce(func, wait, options) { function debounce(func, wait, options) {
@@ -8675,7 +8674,7 @@
* _.defer(function(text) { * _.defer(function(text) {
* console.log(text); * console.log(text);
* }, 'deferred'); * }, 'deferred');
* // logs 'deferred' after one or more milliseconds * // => logs 'deferred' after one or more milliseconds
*/ */
var defer = rest(function(func, args) { var defer = rest(function(func, args) {
return baseDelay(func, 1, args); return baseDelay(func, 1, args);
@@ -8758,12 +8757,12 @@
* values(object); * values(object);
* // => [1, 2] * // => [1, 2]
* *
* // modifying the result cache * // Modify the result cache.
* values.cache.set(object, ['a', 'b']); * values.cache.set(object, ['a', 'b']);
* values(object); * values(object);
* // => ['a', 'b'] * // => ['a', 'b']
* *
* // replacing `_.memoize.Cache` * // Replace `_.memoize.Cache`.
* _.memoize.Cache = WeakMap; * _.memoize.Cache = WeakMap;
*/ */
function memoize(func, resolver) { function memoize(func, resolver) {
@@ -8908,7 +8907,7 @@
* sayHelloTo('fred'); * sayHelloTo('fred');
* // => 'hello fred' * // => 'hello fred'
* *
* // using placeholders * // Partially applied with placeholders.
* var greetFred = _.partial(greet, _, 'fred'); * var greetFred = _.partial(greet, _, 'fred');
* greetFred('hi'); * greetFred('hi');
* // => 'hi fred' * // => 'hi fred'
@@ -8944,7 +8943,7 @@
* greetFred('hi'); * greetFred('hi');
* // => 'hi fred' * // => 'hi fred'
* *
* // using placeholders * // Partially applied with placeholders.
* var sayHelloTo = _.partialRight(greet, 'hello', _); * var sayHelloTo = _.partialRight(greet, 'hello', _);
* sayHelloTo('fred'); * sayHelloTo('fred');
* // => 'hello fred' * // => 'hello fred'
@@ -9041,6 +9040,7 @@
* @memberOf _ * @memberOf _
* @category Function * @category Function
* @param {Function} func The function to spread arguments over. * @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. * @returns {Function} Returns the new function.
* @example * @example
* *
@@ -9051,7 +9051,6 @@
* say(['fred', 'hello']); * say(['fred', 'hello']);
* // => 'fred says hello' * // => 'fred says hello'
* *
* // with a Promise
* var numbers = Promise.all([ * var numbers = Promise.all([
* Promise.resolve(40), * Promise.resolve(40),
* Promise.resolve(36) * Promise.resolve(36)
@@ -9062,13 +9061,20 @@
* })); * }));
* // => a Promise of 76 * // => a Promise of 76
*/ */
function spread(func) { function spread(func, start) {
if (typeof func != 'function') { if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT); throw new TypeError(FUNC_ERROR_TEXT);
} }
return function(array) { start = start === undefined ? 0 : nativeMax(toInteger(start), 0);
return apply(func, this, array); return rest(function(args) {
}; var array = args[start],
otherArgs = args.slice(0, start);
if (array) {
arrayPush(otherArgs, array);
}
return apply(func, this, otherArgs);
});
} }
/** /**
@@ -9101,14 +9107,14 @@
* @returns {Function} Returns the new throttled function. * @returns {Function} Returns the new throttled function.
* @example * @example
* *
* // avoid excessively updating the position while scrolling * // Avoid excessively updating the position while scrolling.
* jQuery(window).on('scroll', _.throttle(updatePosition, 100)); * 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 }); * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
* jQuery(element).on('click', throttled); * jQuery(element).on('click', throttled);
* *
* // cancel a trailing throttled invocation * // Cancel the trailing throttled invocation.
* jQuery(window).on('popstate', throttled.cancel); * jQuery(window).on('popstate', throttled.cancel);
*/ */
function throttle(func, wait, options) { function throttle(func, wait, options) {
@@ -10727,15 +10733,15 @@
* _.findKey(users, function(o) { return o.age < 40; }); * _.findKey(users, function(o) { return o.age < 40; });
* // => 'barney' (iteration order is not guaranteed) * // => 'barney' (iteration order is not guaranteed)
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findKey(users, { 'age': 1, 'active': true }); * _.findKey(users, { 'age': 1, 'active': true });
* // => 'pebbles' * // => 'pebbles'
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findKey(users, ['active', false]); * _.findKey(users, ['active', false]);
* // => 'fred' * // => 'fred'
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findKey(users, 'active'); * _.findKey(users, 'active');
* // => 'barney' * // => 'barney'
*/ */
@@ -10764,15 +10770,15 @@
* _.findLastKey(users, function(o) { return o.age < 40; }); * _.findLastKey(users, function(o) { return o.age < 40; });
* // => returns 'pebbles' assuming `_.findKey` returns 'barney' * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
* *
* // using the `_.matches` iteratee shorthand * // The `_.matches` iteratee shorthand.
* _.findLastKey(users, { 'age': 36, 'active': true }); * _.findLastKey(users, { 'age': 36, 'active': true });
* // => 'barney' * // => 'barney'
* *
* // using the `_.matchesProperty` iteratee shorthand * // The `_.matchesProperty` iteratee shorthand.
* _.findLastKey(users, ['active', false]); * _.findLastKey(users, ['active', false]);
* // => 'fred' * // => 'fred'
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.findLastKey(users, 'active'); * _.findLastKey(users, 'active');
* // => 'pebbles' * // => 'pebbles'
*/ */
@@ -11245,7 +11251,7 @@
* _.mapValues(users, function(o) { return o.age; }); * _.mapValues(users, function(o) { return o.age; });
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.mapValues(users, 'age'); * _.mapValues(users, 'age');
* // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
*/ */
@@ -11299,6 +11305,8 @@
* method instead. The `customizer` is invoked with seven arguments: * method instead. The `customizer` is invoked with seven arguments:
* (objValue, srcValue, key, object, source, stack). * (objValue, srcValue, key, object, source, stack).
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -11405,7 +11413,7 @@
/** /**
* Creates an object composed of the `object` properties `predicate` returns * 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 * @static
* @memberOf _ * @memberOf _
@@ -11472,6 +11480,8 @@
* are created for all other missing properties. Use `_.setWith` to customize * are created for all other missing properties. Use `_.setWith` to customize
* `path` creation. * `path` creation.
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -11501,6 +11511,8 @@
* path creation is handled by the method instead. The `customizer` is invoked * path creation is handled by the method instead. The `customizer` is invoked
* with three arguments: (nsValue, key, nsObject). * with three arguments: (nsValue, key, nsObject).
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -11620,6 +11632,8 @@
/** /**
* Removes the property at `path` of `object`. * Removes the property at `path` of `object`.
* *
* **Note:** This method mutates `object`.
*
* @static * @static
* @memberOf _ * @memberOf _
* @category Object * @category Object
@@ -12409,54 +12423,54 @@
* @returns {Function} Returns the compiled template function. * @returns {Function} Returns the compiled template function.
* @example * @example
* *
* // using the "interpolate" delimiter to create a compiled template * // Use the "interpolate" delimiter to create a compiled template.
* var compiled = _.template('hello <%= user %>!'); * var compiled = _.template('hello <%= user %>!');
* compiled({ 'user': 'fred' }); * compiled({ 'user': 'fred' });
* // => 'hello 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>'); * var compiled = _.template('<b><%- value %></b>');
* compiled({ 'value': '<script>' }); * compiled({ 'value': '<script>' });
* // => '<b>&lt;script&gt;</b>' * // => '<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><% }); %>'); * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
* compiled({ 'users': ['fred', 'barney'] }); * compiled({ 'users': ['fred', 'barney'] });
* // => '<li>fred</li><li>barney</li>' * // => '<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); %>!'); * var compiled = _.template('<% print("hello " + user); %>!');
* compiled({ 'user': 'barney' }); * compiled({ 'user': 'barney' });
* // => 'hello 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 }!'); * var compiled = _.template('hello ${ user }!');
* compiled({ 'user': 'pebbles' }); * compiled({ 'user': 'pebbles' });
* // => 'hello pebbles!' * // => 'hello pebbles!'
* *
* // using custom template delimiters * // Use custom template delimiters.
* _.templateSettings.interpolate = /{{([\s\S]+?)}}/g; * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
* var compiled = _.template('hello {{ user }}!'); * var compiled = _.template('hello {{ user }}!');
* compiled({ 'user': 'mustache' }); * compiled({ 'user': 'mustache' });
* // => 'hello mustache!' * // => 'hello mustache!'
* *
* // using backslashes to treat delimiters as plain text * // Use backslashes to treat delimiters as plain text.
* var compiled = _.template('<%= "\\<%- value %\\>" %>'); * var compiled = _.template('<%= "\\<%- value %\\>" %>');
* compiled({ 'value': 'ignored' }); * compiled({ 'value': 'ignored' });
* // => '<%- value %>' * // => '<%- 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 text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
* var compiled = _.template(text, { 'imports': { 'jq': jQuery } }); * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
* compiled({ 'users': ['fred', 'barney'] }); * compiled({ 'users': ['fred', 'barney'] });
* // => '<li>fred</li><li>barney</li>' * // => '<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' }); * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
* compiled(data); * compiled(data);
* // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector * // => 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' }); * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
* compiled.source; * compiled.source;
* // => function(data) { * // => function(data) {
@@ -12465,8 +12479,8 @@
* // return __p; * // return __p;
* // } * // }
* *
* // using the `source` property to inline compiled templates for meaningful * // Use the `source` property to inline compiled templates for meaningful
* // line numbers in error messages and a stack trace * // line numbers in error messages and stack traces.
* fs.writeFileSync(path.join(cwd, 'jst.js'), '\ * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
* var JST = {\ * var JST = {\
* "main": ' + _.template(mainText).source + '\ * "main": ' + _.template(mainText).source + '\
@@ -12913,7 +12927,7 @@
* @returns {*} Returns the `func` result or error object. * @returns {*} Returns the `func` result or error object.
* @example * @example
* *
* // avoid throwing errors for invalid selectors * // Avoid throwing errors for invalid selectors.
* var elements = _.attempt(function(selector) { * var elements = _.attempt(function(selector) {
* return document.querySelectorAll(selector); * return document.querySelectorAll(selector);
* }, '>_>'); * }, '>_>');
@@ -12926,7 +12940,7 @@
try { try {
return apply(func, undefined, args); return apply(func, undefined, args);
} catch (e) { } catch (e) {
return isError(e) ? e : new Error(e); return isObject(e) ? e : new Error(e);
} }
}); });
@@ -13139,7 +13153,7 @@
* { 'user': 'fred', 'age': 40 } * { 'user': 'fred', 'age': 40 }
* ]; * ];
* *
* // create custom iteratee shorthands * // Create custom iteratee shorthands.
* _.iteratee = _.wrap(_.iteratee, function(callback, func) { * _.iteratee = _.wrap(_.iteratee, function(callback, func) {
* var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func); * var p = /^(\S+)\s*([<>])\s*(\S+)$/.exec(func);
* return !p ? callback(func) : function(object) { * return !p ? callback(func) : function(object) {
@@ -13151,9 +13165,7 @@
* // => [{ 'user': 'fred', 'age': 40 }] * // => [{ 'user': 'fred', 'age': 40 }]
*/ */
function iteratee(func) { function iteratee(func) {
return (isObjectLike(func) && !isArray(func)) return baseIteratee(typeof func == 'function' ? func : baseClone(func, true));
? matches(func)
: baseIteratee(func);
} }
/** /**
@@ -13789,7 +13801,7 @@
* _.maxBy(objects, function(o) { return o.n; }); * _.maxBy(objects, function(o) { return o.n; });
* // => { 'n': 2 } * // => { 'n': 2 }
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.maxBy(objects, 'n'); * _.maxBy(objects, 'n');
* // => { 'n': 2 } * // => { 'n': 2 }
*/ */
@@ -13857,7 +13869,7 @@
* _.minBy(objects, function(o) { return o.n; }); * _.minBy(objects, function(o) { return o.n; });
* // => { 'n': 1 } * // => { 'n': 1 }
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.minBy(objects, 'n'); * _.minBy(objects, 'n');
* // => { 'n': 1 } * // => { 'n': 1 }
*/ */
@@ -13951,7 +13963,7 @@
* _.sumBy(objects, function(o) { return o.n; }); * _.sumBy(objects, function(o) { return o.n; });
* // => 20 * // => 20
* *
* // using the `_.property` iteratee shorthand * // The `_.property` iteratee shorthand.
* _.sumBy(objects, 'n'); * _.sumBy(objects, 'n');
* // => 20 * // => 20
*/ */

View File

@@ -1,15 +1,16 @@
{ {
"name": "lodash", "name": "lodash",
"version": "4.1.0", "version": "4.2.0",
"main": "lodash.js", "main": "lodash.js",
"private": true, "private": true,
"devDependencies": { "devDependencies": {
"async": "^1.5.2", "async": "^1.5.2",
"benchmark": "^2.1.0",
"chalk": "^1.1.1", "chalk": "^1.1.1",
"codecov.io": "~0.1.6", "codecov.io": "~0.1.6",
"coveralls": "^2.11.6", "coveralls": "^2.11.6",
"curl-amd": "~0.8.12", "curl-amd": "~0.8.12",
"docdown": "~0.4.0", "docdown": "~0.4.1",
"dojo": "^1.10.4", "dojo": "^1.10.4",
"ecstatic": "^1.4.0", "ecstatic": "^1.4.0",
"fs-extra": "~0.26.5", "fs-extra": "~0.26.5",
@@ -20,7 +21,7 @@
"lodash": "^3.10.1", "lodash": "^3.10.1",
"platform": "^1.3.1", "platform": "^1.3.1",
"qunit-extras": "^1.4.5", "qunit-extras": "^1.4.5",
"qunitjs": "~1.20.0", "qunitjs": "~1.21.0",
"request": "^2.69.0", "request": "^2.69.0",
"requirejs": "^2.1.22", "requirejs": "^2.1.22",
"sauce-tunnel": "2.3.0", "sauce-tunnel": "2.3.0",

View File

@@ -24,9 +24,9 @@
</head> </head>
<body> <body>
<div id="perf-toolbar"></div> <div id="perf-toolbar"></div>
<script src="../node_modules/platform/platform.js"></script>
<script src="../lodash.js"></script> <script src="../lodash.js"></script>
<script src="../vendor/benchmark.js/benchmark.js"></script> <script src="../node_modules/platform/platform.js"></script>
<script src="../node_modules/benchmark/benchmark.js"></script>
<script src="../vendor/firebug-lite/src/firebug-lite-debug.js"></script> <script src="../vendor/firebug-lite/src/firebug-lite-debug.js"></script>
<script src="./asset/perf-ui.js"></script> <script src="./asset/perf-ui.js"></script>
<script> <script>

View File

@@ -109,7 +109,7 @@
/** Load Benchmark.js. */ /** Load Benchmark.js. */
var Benchmark = root.Benchmark || (root.Benchmark = ( var Benchmark = root.Benchmark || (root.Benchmark = (
Benchmark = load('../vendor/benchmark.js/benchmark.js') || root.Benchmark, Benchmark = load('../node_modules/benchmark/benchmark.js') || root.Benchmark,
Benchmark = Benchmark.Benchmark || Benchmark, Benchmark = Benchmark.Benchmark || Benchmark,
Benchmark.runInContext(lodash.extend({}, root, { '_': lodash })) Benchmark.runInContext(lodash.extend({}, root, { '_': lodash }))
)); ));

View File

@@ -96,7 +96,7 @@
var aryCap = index + 1; var aryCap = index + 1;
var methodNames = _.filter(mapping.aryMethod[aryCap], function(methodName) { var methodNames = _.filter(mapping.aryMethod[aryCap], function(methodName) {
var key = _.result(mapping.key, methodName, methodName), var key = _.result(mapping.rename, methodName, methodName),
arity = _[key].length; arity = _[key].length;
return arity != 0 && arity < aryCap; return arity != 0 && arity < aryCap;
@@ -160,8 +160,8 @@
assert.expect(1); assert.expect(1);
var funcMethods = [ var funcMethods = [
'after', 'ary', 'before', 'bind', 'bindKey', 'cloneDeepWith', 'cloneWith', 'after', 'ary', 'before', 'bind', 'bindKey', 'curryN', 'debounce', 'delay',
'curryN', 'debounce', 'delay', 'overArgs', 'rearg', 'throttle', 'wrap' 'overArgs', 'partial', 'partialRight', 'rearg', 'throttle', 'wrap'
]; ];
var exceptions = _.difference(funcMethods.concat('matchesProperty'), ['cloneDeepWith', 'cloneWith', 'delay']), var exceptions = _.difference(funcMethods.concat('matchesProperty'), ['cloneDeepWith', 'cloneWith', 'delay']),
@@ -341,35 +341,6 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
QUnit.module('curry methods');
_.each(['curry', 'curryRight'], function(methodName) {
var func = fp[methodName];
QUnit.test('`_.' + methodName + '` should only accept a `func` param', function(assert) {
assert.expect(1);
assert.raises(function() { func(1, _.noop); }, TypeError);
});
});
/*--------------------------------------------------------------------------*/
QUnit.module('curryN methods');
_.each(['curryN', 'curryRightN'], function(methodName) {
var func = fp[methodName];
QUnit.test('`_.' + methodName + '` accept an `arity` param', function(assert) {
assert.expect(1);
var actual = func(1, function(a, b) { return [a, b]; })('a');
assert.deepEqual(actual, ['a', undefined]);
});
});
/*--------------------------------------------------------------------------*/
QUnit.module('key methods'); QUnit.module('key methods');
(function() { (function() {
@@ -400,7 +371,7 @@
deepObject = { 'a': { 'b': 2, 'c': 3 } }; deepObject = { 'a': { 'b': 2, 'c': 3 } };
QUnit.test('should not mutate values', function(assert) { QUnit.test('should not mutate values', function(assert) {
assert.expect(36); assert.expect(38);
function Foo() {} function Foo() {}
Foo.prototype = { 'b': 2 }; Foo.prototype = { 'b': 2 };
@@ -526,6 +497,12 @@
assert.deepEqual(value, deepObject, 'fp.setWith'); assert.deepEqual(value, deepObject, 'fp.setWith');
assert.deepEqual(actual, { 'a': { 'b': 2, 'c': 3 }, 'd': { 'e': 4 } }, 'fp.setWith'); assert.deepEqual(actual, { 'a': { 'b': 2, 'c': 3 }, 'd': { 'e': 4 } }, 'fp.setWith');
value = _.cloneDeep(deepObject);
actual = fp.unset('a.b', value);
assert.deepEqual(value, deepObject, 'fp.unset');
assert.deepEqual(actual, { 'a': { 'c': 3 } }, 'fp.set');
}); });
}()); }());
@@ -537,49 +514,10 @@
var func = fp[methodName]; var func = fp[methodName];
QUnit.test('`_.' + methodName + '` should have a `placeholder` property', function(assert) { QUnit.test('`_.' + methodName + '` should have a `placeholder` property', function(assert) {
assert.expect(1); assert.expect(2);
assert.ok(_.isObject(func.placeholder)); assert.ok(_.isObject(func.placeholder));
}); assert.strictEqual(func.placeholder, fp.__);
});
/*--------------------------------------------------------------------------*/
QUnit.module('reduce methods');
_.each(['reduce', 'reduceRight'], function(methodName) {
var func = fp[methodName],
isReduce = methodName == 'reduce';
QUnit.test('`_.' + methodName + '` should provide the correct `iteratee` arguments when iterating an array', function(assert) {
assert.expect(1);
var args,
array = [1, 2, 3];
func(function() {
args || (args = slice.call(arguments));
})(0, array);
assert.deepEqual(args, isReduce ? [0, 1] : [0, 3]);
});
QUnit.test('`_.' + methodName + '` should provide the correct `iteratee` arguments when iterating an object', function(assert) {
assert.expect(1);
var args,
object = { 'a': 1, 'b': 2 },
isFIFO = _.keys(object)[0] == 'a';
var expected = isFIFO
? (isReduce ? [0, 1] : [0, 2])
: (isReduce ? [0, 2] : [0, 1]);
func(function() {
args || (args = slice.call(arguments));
})(0, object);
assert.deepEqual(args, expected);
}); });
}); });
@@ -638,6 +576,35 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
QUnit.module('fp.curry and fp.curryRight');
_.each(['curry', 'curryRight'], function(methodName) {
var func = fp[methodName];
QUnit.test('`_.' + methodName + '` should only accept a `func` param', function(assert) {
assert.expect(1);
assert.raises(function() { func(1, _.noop); }, TypeError);
});
});
/*--------------------------------------------------------------------------*/
QUnit.module('fp.curryN and fp.curryRightN');
_.each(['curryN', 'curryRightN'], function(methodName) {
var func = fp[methodName];
QUnit.test('`_.' + methodName + '` accept an `arity` param', function(assert) {
assert.expect(1);
var actual = func(1, function(a, b) { return [a, b]; })('a');
assert.deepEqual(actual, ['a', undefined]);
});
});
/*--------------------------------------------------------------------------*/
QUnit.module('fp.difference'); QUnit.module('fp.difference');
(function() { (function() {
@@ -899,6 +866,27 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
QUnit.module('fp.partial and fp.partialRight');
_.each(['partial', 'partialRight'], function(methodName) {
var func = fp[methodName],
isPartial = methodName == 'partial';
QUnit.test('`_.' + methodName + '` should accept an `args` param', function(assert) {
assert.expect(1);
var expected = isPartial ? [1, 2, 3] : [0, 1, 2];
var actual = func(function(a, b, c) {
return [a, b, c];
})([1, 2])(isPartial ? 3 : 0);
assert.deepEqual(actual, expected);
});
});
/*--------------------------------------------------------------------------*/
QUnit.module('fp.random'); QUnit.module('fp.random');
(function() { (function() {
@@ -931,6 +919,46 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
QUnit.module('fp.reduce and fp.reduceRight');
_.each(['reduce', 'reduceRight'], function(methodName) {
var func = fp[methodName],
isReduce = methodName == 'reduce';
QUnit.test('`_.' + methodName + '` should provide the correct `iteratee` arguments when iterating an array', function(assert) {
assert.expect(1);
var args,
array = [1, 2, 3];
func(function() {
args || (args = slice.call(arguments));
})(0, array);
assert.deepEqual(args, isReduce ? [0, 1] : [0, 3]);
});
QUnit.test('`_.' + methodName + '` should provide the correct `iteratee` arguments when iterating an object', function(assert) {
assert.expect(1);
var args,
object = { 'a': 1, 'b': 2 },
isFIFO = _.keys(object)[0] == 'a';
var expected = isFIFO
? (isReduce ? [0, 1] : [0, 2])
: (isReduce ? [0, 2] : [0, 1]);
func(function() {
args || (args = slice.call(arguments));
})(0, object);
assert.deepEqual(args, expected);
});
});
/*--------------------------------------------------------------------------*/
QUnit.module('fp.runInContext'); QUnit.module('fp.runInContext');
(function() { (function() {

View File

@@ -1431,16 +1431,20 @@
}); });
QUnit.test('work with an object for `object` when chaining', function(assert) { QUnit.test('work with an object for `object` when chaining', function(assert) {
assert.expect(1); assert.expect(2);
if (!isNpm) { if (!isNpm) {
var paths = ['a[0].b.c', 'a[1]'], var paths = ['a[0].b.c', 'a[1]'],
wrapped = _(object).map(identity).at(paths); actual = _(object).map(identity).at(paths).value();
assert.deepEqual(wrapped.value(), _.at(_.map(object, identity), paths)); assert.deepEqual(actual, _.at(_.map(object, identity), paths));
var indexObject = { '0': 1 };
actual = _(indexObject).at(0).value();
assert.deepEqual(actual, _.at(indexObject, 0));
} }
else { else {
skipTest(assert); skipTest(assert, 2);
} }
}); });
}(1, 2, 3)); }(1, 2, 3));
@@ -1482,6 +1486,20 @@
assert.ok(lodashStable.isEqual(actual, Error('x'))); assert.ok(lodashStable.isEqual(actual, Error('x')));
}); });
QUnit.test('should preserve custom errors', function(assert) {
assert.expect(1);
function CustomError(message) {
this.name = 'CustomError';
this.message = message;
}
CustomError.prototype = lodashStable.create(Error.prototype);
var actual = _.attempt(function() { throw new CustomError('x'); });
assert.ok(actual instanceof CustomError);
});
QUnit.test('should work with an error object from another realm', function(assert) { QUnit.test('should work with an error object from another realm', function(assert) {
assert.expect(1); assert.expect(1);
@@ -5406,6 +5424,71 @@
assert.deepEqual(actual, expected); assert.deepEqual(actual, expected);
}); });
QUnit.test('should work with a "_.property" style `iteratee`', function(assert) {
assert.expect(1);
var objects = [{ 'a': [1, 2] }, { 'a': [3, 4] }];
assert.deepEqual(_.flatMap(objects, 'a'), array);
});
QUnit.test('should iterate over own properties of objects', function(assert) {
assert.expect(1);
function Foo() { this.a = [1, 2]; }
Foo.prototype.b = [3, 4];
var actual = _.flatMap(new Foo, identity);
assert.deepEqual(actual, [1, 2]);
});
QUnit.test('should use `_.identity` when `iteratee` is nullish', function(assert) {
assert.expect(1);
var array = [[1, 2], [3, 4]],
values = [, null, undefined],
expected = lodashStable.map(values, lodashStable.constant([1, 2, 3, 4]));
var actual = lodashStable.map(values, function(value, index) {
return index ? _.flatMap(array, value) : _.flatMap(array);
});
assert.deepEqual(actual, expected);
});
QUnit.test('should work on an object with no `iteratee`', function(assert) {
assert.expect(1);
var actual = _.flatMap({ 'a': [1, 2], 'b': [3, 4] });
assert.deepEqual(actual, array);
});
QUnit.test('should handle object arguments with non-number length properties', function(assert) {
assert.expect(1);
var object = { 'length': [1, 2] };
assert.deepEqual(_.flatMap(object, identity), [1, 2]);
});
QUnit.test('should accept a falsey `collection` argument', function(assert) {
assert.expect(1);
var expected = lodashStable.map(falsey, alwaysEmptyArray);
var actual = lodashStable.map(falsey, function(collection, index) {
try {
return index ? _.flatMap(collection) : _.flatMap();
} catch (e) {}
});
assert.deepEqual(actual, expected);
});
QUnit.test('should treat number values for `collection` as empty', function(assert) {
assert.expect(1);
assert.deepEqual(_.flatMap(1), []);
});
QUnit.test('should work in a lazy sequence', function(assert) { QUnit.test('should work in a lazy sequence', function(assert) {
assert.expect(2); assert.expect(2);
@@ -10609,7 +10692,7 @@
assert.strictEqual(matches({ 'b': 2 }), false); assert.strictEqual(matches({ 'b': 2 }), false);
}); });
QUnit.test('should not change behavior if `source` is modified', function(assert) { QUnit.test('should not change `_.matches` behavior if `source` is modified', function(assert) {
assert.expect(9); assert.expect(9);
var sources = [ var sources = [
@@ -10638,7 +10721,7 @@
}); });
}); });
QUnit.test('should return an iteratee created by `_.matchesProperty` when `func` is a number or string and a value is provided', function(assert) { QUnit.test('should return an iteratee created by `_.matchesProperty` when `func` is an array', function(assert) {
assert.expect(3); assert.expect(3);
var array = ['a', undefined], var array = ['a', undefined],
@@ -10662,6 +10745,35 @@
assert.strictEqual(matches(object), true); assert.strictEqual(matches(object), true);
}); });
QUnit.test('should not change `_.matchesProperty` behavior if `source` is modified', function(assert) {
assert.expect(9);
var sources = [
{ 'a': { 'b': 2, 'c': 3 } },
{ 'a': 1, 'b': 2 },
{ 'a': 1 }
];
lodashStable.each(sources, function(source, index) {
var object = { 'a': lodashStable.cloneDeep(source) },
matches = _.iteratee(['a', source]);
assert.strictEqual(matches(object), true);
if (index) {
source.a = 2;
source.b = 1;
source.c = 3;
} else {
source.a.b = 1;
source.a.c = 2;
source.a.d = 3;
}
assert.strictEqual(matches(object), true);
assert.strictEqual(matches({ 'a': source }), false);
});
});
QUnit.test('should return an iteratee created by `_.property` when `func` is a number or string', function(assert) { QUnit.test('should return an iteratee created by `_.property` when `func` is a number or string', function(assert) {
assert.expect(2); assert.expect(2);
@@ -11856,13 +11968,13 @@
QUnit.module('lodash.map'); QUnit.module('lodash.map');
(function() { (function() {
var array = [1, 2, 3]; var array = [1, 2];
QUnit.test('should map values in `collection` to a new array', function(assert) { QUnit.test('should map values in `collection` to a new array', function(assert) {
assert.expect(2); assert.expect(2);
var object = { 'a': 1, 'b': 2, 'c': 3 }, var object = { 'a': 1, 'b': 2 },
expected = ['1', '2', '3']; expected = ['1', '2'];
assert.deepEqual(_.map(array, String), expected); assert.deepEqual(_.map(array, String), expected);
assert.deepEqual(_.map(object, String), expected); assert.deepEqual(_.map(object, String), expected);
@@ -11881,14 +11993,27 @@
function Foo() { this.a = 1; } function Foo() { this.a = 1; }
Foo.prototype.b = 2; Foo.prototype.b = 2;
var actual = _.map(new Foo, function(value, key) { return key; }); var actual = _.map(new Foo, identity);
assert.deepEqual(actual, ['a']); assert.deepEqual(actual, [1]);
});
QUnit.test('should use `_.identity` when `iteratee` is nullish', function(assert) {
assert.expect(1);
var values = [, null, undefined],
expected = lodashStable.map(values, lodashStable.constant([1, 2]));
var actual = lodashStable.map(values, function(value, index) {
return index ? _.map(array, value) : _.map(array);
});
assert.deepEqual(actual, expected);
}); });
QUnit.test('should work on an object with no `iteratee`', function(assert) { QUnit.test('should work on an object with no `iteratee`', function(assert) {
assert.expect(1); assert.expect(1);
var actual = _.map({ 'a': 1, 'b': 2, 'c': 3 }); var actual = _.map({ 'a': 1, 'b': 2 });
assert.deepEqual(actual, array); assert.deepEqual(actual, array);
}); });
@@ -12001,13 +12126,13 @@
(function() { (function() {
var array = [1, 2], var array = [1, 2],
object = { 'a': 1, 'b': 2, 'c': 3 }; object = { 'a': 1, 'b': 2 };
QUnit.test('should map keys in `object` to a new object', function(assert) { QUnit.test('should map keys in `object` to a new object', function(assert) {
assert.expect(1); assert.expect(1);
var actual = _.mapKeys(object, String); var actual = _.mapKeys(object, String);
assert.deepEqual(actual, { '1': 1, '2': 2, '3': 3 }); assert.deepEqual(actual, { '1': 1, '2': 2 });
}); });
QUnit.test('should treat arrays like objects', function(assert) { QUnit.test('should treat arrays like objects', function(assert) {
@@ -12027,8 +12152,8 @@
QUnit.test('should work on an object with no `iteratee`', function(assert) { QUnit.test('should work on an object with no `iteratee`', function(assert) {
assert.expect(1); assert.expect(1);
var actual = _.mapKeys({ 'a': 1, 'b': 2, 'c': 3 }); var actual = _.mapKeys({ 'a': 1, 'b': 2 });
assert.deepEqual(actual, { '1': 1, '2': 2, '3': 3 }); assert.deepEqual(actual, { '1': 1, '2': 2 });
}); });
}()); }());
@@ -12038,13 +12163,13 @@
(function() { (function() {
var array = [1, 2], var array = [1, 2],
object = { 'a': 1, 'b': 2, 'c': 3 }; object = { 'a': 1, 'b': 2 };
QUnit.test('should map values in `object` to a new object', function(assert) { QUnit.test('should map values in `object` to a new object', function(assert) {
assert.expect(1); assert.expect(1);
var actual = _.mapValues(object, String); var actual = _.mapValues(object, String);
assert.deepEqual(actual, { 'a': '1', 'b': '2', 'c': '3' }); assert.deepEqual(actual, { 'a': '1', 'b': '2' });
}); });
QUnit.test('should treat arrays like objects', function(assert) { QUnit.test('should treat arrays like objects', function(assert) {
@@ -12064,7 +12189,7 @@
QUnit.test('should work on an object with no `iteratee`', function(assert) { QUnit.test('should work on an object with no `iteratee`', function(assert) {
assert.expect(2); assert.expect(2);
var actual = _.mapValues({ 'a': 1, 'b': 2, 'c': 3 }); var actual = _.mapValues({ 'a': 1, 'b': 2 });
assert.deepEqual(actual, object); assert.deepEqual(actual, object);
assert.notStrictEqual(actual, object); assert.notStrictEqual(actual, object);
}); });
@@ -12077,7 +12202,7 @@
lodashStable.each(['mapKeys', 'mapValues'], function(methodName) { lodashStable.each(['mapKeys', 'mapValues'], function(methodName) {
var array = [1, 2], var array = [1, 2],
func = _[methodName], func = _[methodName],
object = { 'a': 1, 'b': 2, 'c': 3 }; object = { 'a': 1, 'b': 2 };
QUnit.test('should iterate over own properties of objects', function(assert) { QUnit.test('should iterate over own properties of objects', function(assert) {
assert.expect(1); assert.expect(1);
@@ -17131,15 +17256,15 @@
QUnit.test('should apply a rest parameter to `func`', function(assert) { QUnit.test('should apply a rest parameter to `func`', function(assert) {
assert.expect(1); assert.expect(1);
var rp = _.rest(fn); var rest = _.rest(fn);
assert.deepEqual(rp(1, 2, 3, 4), [1, 2, [3, 4]]); assert.deepEqual(rest(1, 2, 3, 4), [1, 2, [3, 4]]);
}); });
QUnit.test('should work with `start`', function(assert) { QUnit.test('should work with `start`', function(assert) {
assert.expect(1); assert.expect(1);
var rp = _.rest(fn, 1); var rest = _.rest(fn, 1);
assert.deepEqual(rp(1, 2, 3, 4), [1, [2, 3, 4]]); assert.deepEqual(rest(1, 2, 3, 4), [1, [2, 3, 4]]);
}); });
QUnit.test('should treat `start` as `0` for negative or `NaN` values', function(assert) { QUnit.test('should treat `start` as `0` for negative or `NaN` values', function(assert) {
@@ -17149,8 +17274,8 @@
expected = lodashStable.map(values, lodashStable.constant([[1, 2, 3, 4]])); expected = lodashStable.map(values, lodashStable.constant([[1, 2, 3, 4]]));
var actual = lodashStable.map(values, function(value) { var actual = lodashStable.map(values, function(value) {
var rp = _.rest(fn, value); var rest = _.rest(fn, value);
return rp(1, 2, 3, 4); return rest(1, 2, 3, 4);
}); });
assert.deepEqual(actual, expected); assert.deepEqual(actual, expected);
@@ -17159,25 +17284,25 @@
QUnit.test('should coerce `start` to an integer', function(assert) { QUnit.test('should coerce `start` to an integer', function(assert) {
assert.expect(1); assert.expect(1);
var rp = _.rest(fn, 1.6); var rest = _.rest(fn, 1.6);
assert.deepEqual(rp(1, 2, 3), [1, [2, 3]]); assert.deepEqual(rest(1, 2, 3), [1, [2, 3]]);
}); });
QUnit.test('should use an empty array when `start` is not reached', function(assert) { QUnit.test('should use an empty array when `start` is not reached', function(assert) {
assert.expect(1); assert.expect(1);
var rp = _.rest(fn); var rest = _.rest(fn);
assert.deepEqual(rp(1), [1, undefined, []]); assert.deepEqual(rest(1), [1, undefined, []]);
}); });
QUnit.test('should work on functions with more than three parameters', function(assert) { QUnit.test('should work on functions with more than three parameters', function(assert) {
assert.expect(1); assert.expect(1);
var rp = _.rest(function(a, b, c, d) { var rest = _.rest(function(a, b, c, d) {
return slice.call(arguments); return slice.call(arguments);
}); });
assert.deepEqual(rp(1, 2, 3, 4, 5), [1, 2, 3, [4, 5]]); assert.deepEqual(rest(1, 2, 3, 4, 5), [1, 2, 3, [4, 5]]);
}); });
}()); }());
@@ -18530,11 +18655,15 @@
QUnit.module('lodash.spread'); QUnit.module('lodash.spread');
(function() { (function() {
function fn(a, b, c) {
return slice.call(arguments);
}
QUnit.test('should spread arguments to `func`', function(assert) { QUnit.test('should spread arguments to `func`', function(assert) {
assert.expect(1); assert.expect(1);
var spread = _.spread(add); var spread = _.spread(fn);
assert.strictEqual(spread([4, 2]), 6); assert.deepEqual(spread([4, 2]), [4, 2]);
}); });
QUnit.test('should accept a falsey `array` argument', function(assert) { QUnit.test('should accept a falsey `array` argument', function(assert) {
@@ -18564,6 +18693,34 @@
spread([4, 2], 'ignored'); spread([4, 2], 'ignored');
assert.deepEqual(args, [4, 2]); assert.deepEqual(args, [4, 2]);
}); });
QUnit.test('should work with `start`', function(assert) {
assert.expect(1);
var spread = _.spread(fn, 1);
assert.deepEqual(spread(1, [2, 3, 4]), [1, 2, 3, 4]);
});
QUnit.test('should treat `start` as `0` for negative or `NaN` values', function(assert) {
assert.expect(1);
var values = [-1, NaN, 'a'],
expected = lodashStable.map(values, lodashStable.constant([1, 2, 3, 4]));
var actual = lodashStable.map(values, function(value) {
var spread = _.spread(fn, value);
return spread([1, 2, 3, 4]);
});
assert.deepEqual(actual, expected);
});
QUnit.test('should coerce `start` to an integer', function(assert) {
assert.expect(1);
var spread = _.spread(fn, 1.6);
assert.deepEqual(spread(1, [2, 3]), [1, 2, 3]);
});
}()); }());
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/

View File

@@ -29,6 +29,9 @@
QUnit.config.hidepassed = true; QUnit.config.hidepassed = true;
QUnit.config.excused = { QUnit.config.excused = {
'Arrays': { 'Arrays': {
'difference': [
'can perform an OO-style difference'
],
'drop': [ 'drop': [
'is an alias for rest' 'is an alias for rest'
], ],
@@ -99,11 +102,15 @@
'is an alias for first' 'is an alias for first'
], ],
'uniq': [ 'uniq': [
'can find the unique values of an array using a custom iterator', 'uses the result of `iterator` for uniqueness comparisons (unsorted case)',
'can find the unique values of an array using a custom iterator without specifying whether array is sorted', '`sorted` argument defaults to false when omitted',
'string iterator works with sorted array', 'when `iterator` is a string, uses that key for comparisons (unsorted case)',
'can use pluck like iterator', 'uses the result of `iterator` for uniqueness comparisons (sorted case)',
'when `iterator` is a string, uses that key for comparisons (sorted case)',
'can use falsey pluck like iterator' 'can use falsey pluck like iterator'
],
'union': [
'can perform an OO-style union'
] ]
}, },
'Chaining': { 'Chaining': {

View File

@@ -1,4 +1,4 @@
Copyright (c) 2010-2015 Jeremy Ashkenas, DocumentCloud Copyright (c) 2010-2016 Jeremy Ashkenas, DocumentCloud
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation obtaining a copy of this software and associated documentation

View File

@@ -1,6 +1,6 @@
// Backbone.js 1.2.3 // Backbone.js 1.2.3
// (c) 2010-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // (c) 2010-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Backbone may be freely distributed under the MIT license. // Backbone may be freely distributed under the MIT license.
// For all details and documentation: // For all details and documentation:
// http://backbonejs.org // http://backbonejs.org
@@ -146,7 +146,7 @@
events = eventsApi(iteratee, events, names[i], name[names[i]], opts); events = eventsApi(iteratee, events, names[i], name[names[i]], opts);
} }
} else if (name && eventSplitter.test(name)) { } else if (name && eventSplitter.test(name)) {
// Handle space separated event names by delegating them individually. // Handle space-separated event names by delegating them individually.
for (names = name.split(eventSplitter); i < names.length; i++) { for (names = name.split(eventSplitter); i < names.length; i++) {
events = iteratee(events, names[i], callback, opts); events = iteratee(events, names[i], callback, opts);
} }
@@ -348,7 +348,7 @@
}; };
// Handles triggering the appropriate event callbacks. // Handles triggering the appropriate event callbacks.
var triggerApi = function(objEvents, name, cb, args) { var triggerApi = function(objEvents, name, callback, args) {
if (objEvents) { if (objEvents) {
var events = objEvents[name]; var events = objEvents[name];
var allEvents = objEvents.all; var allEvents = objEvents.all;
@@ -810,7 +810,10 @@
var singular = !_.isArray(models); var singular = !_.isArray(models);
models = singular ? [models] : models.slice(); models = singular ? [models] : models.slice();
var removed = this._removeModels(models, options); var removed = this._removeModels(models, options);
if (!options.silent && removed.length) this.trigger('update', this, options); if (!options.silent && removed.length) {
options.changes = {added: [], merged: [], removed: removed};
this.trigger('update', this, options);
}
return singular ? removed[0] : removed; return singular ? removed[0] : removed;
}, },
@@ -835,6 +838,7 @@
var set = []; var set = [];
var toAdd = []; var toAdd = [];
var toMerge = [];
var toRemove = []; var toRemove = [];
var modelMap = {}; var modelMap = {};
@@ -860,6 +864,7 @@
var attrs = this._isModel(model) ? model.attributes : model; var attrs = this._isModel(model) ? model.attributes : model;
if (options.parse) attrs = existing.parse(attrs, options); if (options.parse) attrs = existing.parse(attrs, options);
existing.set(attrs, options); existing.set(attrs, options);
toMerge.push(existing);
if (sortable && !sort) sort = existing.hasChanged(sortAttr); if (sortable && !sort) sort = existing.hasChanged(sortAttr);
} }
if (!modelMap[existing.cid]) { if (!modelMap[existing.cid]) {
@@ -893,8 +898,8 @@
var orderChanged = false; var orderChanged = false;
var replace = !sortable && add && remove; var replace = !sortable && add && remove;
if (set.length && replace) { if (set.length && replace) {
orderChanged = this.length !== set.length || _.some(this.models, function(model, index) { orderChanged = this.length !== set.length || _.some(this.models, function(m, index) {
return model !== set[index]; return m !== set[index];
}); });
this.models.length = 0; this.models.length = 0;
splice(this.models, set, 0); splice(this.models, set, 0);
@@ -908,7 +913,7 @@
// Silently sort the collection if appropriate. // Silently sort the collection if appropriate.
if (sort) this.sort({silent: true}); if (sort) this.sort({silent: true});
// Unless silenced, it's time to fire all appropriate add/sort events. // Unless silenced, it's time to fire all appropriate add/sort/update events.
if (!options.silent) { if (!options.silent) {
for (i = 0; i < toAdd.length; i++) { for (i = 0; i < toAdd.length; i++) {
if (at != null) options.index = at + i; if (at != null) options.index = at + i;
@@ -916,7 +921,14 @@
model.trigger('add', model, this, options); model.trigger('add', model, this, options);
} }
if (sort || orderChanged) this.trigger('sort', this, options); if (sort || orderChanged) this.trigger('sort', this, options);
if (toAdd.length || toRemove.length) this.trigger('update', this, options); if (toAdd.length || toRemove.length || toMerge.length) {
options.changes = {
added: toAdd,
removed: toRemove,
merged: toMerge
};
this.trigger('update', this, options);
}
} }
// Return the added (or merged) model (or models). // Return the added (or merged) model (or models).
@@ -973,6 +985,11 @@
return this._byId[obj] || this._byId[id] || this._byId[obj.cid]; return this._byId[obj] || this._byId[id] || this._byId[obj.cid];
}, },
// Returns `true` if the model is in the collection.
has: function(obj) {
return this.get(obj) != null;
},
// Get the model at the given index. // Get the model at the given index.
at: function(index) { at: function(index) {
if (index < 0) index += this.length; if (index < 0) index += this.length;
@@ -1045,9 +1062,9 @@
if (!wait) this.add(model, options); if (!wait) this.add(model, options);
var collection = this; var collection = this;
var success = options.success; var success = options.success;
options.success = function(model, resp, callbackOpts) { options.success = function(m, resp, callbackOpts) {
if (wait) collection.add(model, callbackOpts); if (wait) collection.add(m, callbackOpts);
if (success) success.call(callbackOpts.context, model, resp, callbackOpts); if (success) success.call(callbackOpts.context, m, resp, callbackOpts);
}; };
model.save(null, options); model.save(null, options);
return model; return model;
@@ -1587,8 +1604,8 @@
// Does the pathname match the root? // Does the pathname match the root?
matchRoot: function() { matchRoot: function() {
var path = this.decodeFragment(this.location.pathname); var path = this.decodeFragment(this.location.pathname);
var root = path.slice(0, this.root.length - 1) + '/'; var rootPath = path.slice(0, this.root.length - 1) + '/';
return root === this.root; return rootPath === this.root;
}, },
// Unicode characters in `location.pathname` are percent encoded so they're // Unicode characters in `location.pathname` are percent encoded so they're
@@ -1660,8 +1677,8 @@
// If we've started off with a route from a `pushState`-enabled // If we've started off with a route from a `pushState`-enabled
// browser, but we're currently in a browser that doesn't support it... // browser, but we're currently in a browser that doesn't support it...
if (!this._hasPushState && !this.atRoot()) { if (!this._hasPushState && !this.atRoot()) {
var root = this.root.slice(0, -1) || '/'; var rootPath = this.root.slice(0, -1) || '/';
this.location.replace(root + '#' + this.getPath()); this.location.replace(rootPath + '#' + this.getPath());
// Return immediately as browser will do redirect to new url // Return immediately as browser will do redirect to new url
return true; return true;
@@ -1785,11 +1802,11 @@
fragment = this.getFragment(fragment || ''); fragment = this.getFragment(fragment || '');
// Don't include a trailing slash on the root. // Don't include a trailing slash on the root.
var root = this.root; var rootPath = this.root;
if (fragment === '' || fragment.charAt(0) === '?') { if (fragment === '' || fragment.charAt(0) === '?') {
root = root.slice(0, -1) || '/'; rootPath = rootPath.slice(0, -1) || '/';
} }
var url = root + fragment; var url = rootPath + fragment;
// Strip the hash and decode for matching. // Strip the hash and decode for matching.
fragment = this.decodeFragment(fragment.replace(pathStripper, '')); fragment = this.decodeFragment(fragment.replace(pathStripper, ''));

File diff suppressed because it is too large Load Diff

View File

@@ -273,8 +273,8 @@
QUnit.test('#2030 - set with failed validate, followed by another set triggers change', function(assert) { QUnit.test('#2030 - set with failed validate, followed by another set triggers change', function(assert) {
var attr = 0, main = 0, error = 0; var attr = 0, main = 0, error = 0;
var Model = Backbone.Model.extend({ var Model = Backbone.Model.extend({
validate: function(attr) { validate: function(attrs) {
if (attr.x > 1) { if (attrs.x > 1) {
error++; error++;
return 'this is an error'; return 'this is an error';
} }
@@ -379,15 +379,15 @@
var Collection = Backbone.Collection.extend({ var Collection = Backbone.Collection.extend({
model: Model model: Model
}); });
var collection = new Collection([{id: 'c5'}, {id: 'c6'}, {id: 'c7'}]); var col = new Collection([{id: 'c5'}, {id: 'c6'}, {id: 'c7'}]);
assert.equal(collection.get('c6').cid.charAt(0), 'm'); assert.equal(col.get('c6').cid.charAt(0), 'm');
collection.set([{id: 'c6', value: 'test'}], { col.set([{id: 'c6', value: 'test'}], {
merge: true, merge: true,
add: true, add: true,
remove: false remove: false
}); });
assert.ok(collection.get('c6').has('value')); assert.ok(col.get('c6').has('value'));
}); });
QUnit.test('set an empty string', function(assert) { QUnit.test('set an empty string', function(assert) {
@@ -480,8 +480,8 @@
assert.expect(2); assert.expect(2);
var value; var value;
var model = new Backbone.Model({name: 'Rob'}); var model = new Backbone.Model({name: 'Rob'});
model.on('change', function(model, options) { model.on('change', function(m, options) {
value = options.prefix + model.get('name'); value = options.prefix + m.get('name');
}); });
model.set({name: 'Bob'}, {prefix: 'Mr. '}); model.set({name: 'Bob'}, {prefix: 'Mr. '});
assert.equal(value, 'Mr. Bob'); assert.equal(value, 'Mr. Bob');
@@ -517,10 +517,10 @@
model.validate = function(attrs) { model.validate = function(attrs) {
if (attrs.admin) return "Can't change admin status."; if (attrs.admin) return "Can't change admin status.";
}; };
model.sync = function(method, model, options) { model.sync = function(method, m, options) {
options.success.call(this, {admin: true}); options.success.call(this, {admin: true});
}; };
model.on('invalid', function(model, error) { model.on('invalid', function(m, error) {
lastError = error; lastError = error;
}); });
model.save(null); model.save(null);
@@ -542,7 +542,7 @@
model.on('error', function() { model.on('error', function() {
assert.ok(true); assert.ok(true);
}); });
model.sync = function(method, model, options) { model.sync = function(method, m, options) {
options.error(); options.error();
}; };
model.save({data: 2, id: 1}); model.save({data: 2, id: 1});
@@ -560,8 +560,8 @@
assert.equal(this, obj); assert.equal(this, obj);
} }
}; };
model.sync = function(method, model, options) { model.sync = function(method, m, opts) {
options.success.call(options.context); opts.success.call(opts.context);
}; };
model.save({data: 2, id: 1}, options); model.save({data: 2, id: 1}, options);
model.fetch(options); model.fetch(options);
@@ -578,8 +578,8 @@
assert.equal(this, obj); assert.equal(this, obj);
} }
}; };
model.sync = function(method, model, options) { model.sync = function(method, m, opts) {
options.error.call(options.context); opts.error.call(opts.context);
}; };
model.save({data: 2, id: 1}, options); model.save({data: 2, id: 1}, options);
model.fetch(options); model.fetch(options);
@@ -593,7 +593,7 @@
model.parse = function() { model.parse = function() {
assert.ok(false); assert.ok(false);
}; };
model.sync = function(method, model, options) { model.sync = function(method, m, options) {
options.success({i: ++i}); options.success({i: ++i});
}; };
model.fetch({parse: false}); model.fetch({parse: false});
@@ -627,7 +627,7 @@
QUnit.test('save in positional style', function(assert) { QUnit.test('save in positional style', function(assert) {
assert.expect(1); assert.expect(1);
var model = new Backbone.Model(); var model = new Backbone.Model();
model.sync = function(method, model, options) { model.sync = function(method, m, options) {
options.success(); options.success();
}; };
model.save('title', 'Twelfth Night'); model.save('title', 'Twelfth Night');
@@ -637,13 +637,13 @@
QUnit.test('save with non-object success response', function(assert) { QUnit.test('save with non-object success response', function(assert) {
assert.expect(2); assert.expect(2);
var model = new Backbone.Model(); var model = new Backbone.Model();
model.sync = function(method, model, options) { model.sync = function(method, m, options) {
options.success('', options); options.success('', options);
options.success(null, options); options.success(null, options);
}; };
model.save({testing: 'empty'}, { model.save({testing: 'empty'}, {
success: function(model) { success: function(m) {
assert.deepEqual(model.attributes, {testing: 'empty'}); assert.deepEqual(m.attributes, {testing: 'empty'});
} }
}); });
}); });
@@ -660,16 +660,16 @@
QUnit.test('save will pass extra options to success callback', function(assert) { QUnit.test('save will pass extra options to success callback', function(assert) {
assert.expect(1); assert.expect(1);
var SpecialSyncModel = Backbone.Model.extend({ var SpecialSyncModel = Backbone.Model.extend({
sync: function(method, model, options) { sync: function(method, m, options) {
_.extend(options, {specialSync: true}); _.extend(options, {specialSync: true});
return Backbone.Model.prototype.sync.call(this, method, model, options); return Backbone.Model.prototype.sync.call(this, method, m, options);
}, },
urlRoot: '/test' urlRoot: '/test'
}); });
var model = new SpecialSyncModel(); var model = new SpecialSyncModel();
var onSuccess = function(model, response, options) { var onSuccess = function(m, response, options) {
assert.ok(options.specialSync, 'Options were passed correctly to callback'); assert.ok(options.specialSync, 'Options were passed correctly to callback');
}; };
@@ -687,16 +687,16 @@
QUnit.test('fetch will pass extra options to success callback', function(assert) { QUnit.test('fetch will pass extra options to success callback', function(assert) {
assert.expect(1); assert.expect(1);
var SpecialSyncModel = Backbone.Model.extend({ var SpecialSyncModel = Backbone.Model.extend({
sync: function(method, model, options) { sync: function(method, m, options) {
_.extend(options, {specialSync: true}); _.extend(options, {specialSync: true});
return Backbone.Model.prototype.sync.call(this, method, model, options); return Backbone.Model.prototype.sync.call(this, method, m, options);
}, },
urlRoot: '/test' urlRoot: '/test'
}); });
var model = new SpecialSyncModel(); var model = new SpecialSyncModel();
var onSuccess = function(model, response, options) { var onSuccess = function(m, response, options) {
assert.ok(options.specialSync, 'Options were passed correctly to callback'); assert.ok(options.specialSync, 'Options were passed correctly to callback');
}; };
@@ -717,16 +717,16 @@
QUnit.test('destroy will pass extra options to success callback', function(assert) { QUnit.test('destroy will pass extra options to success callback', function(assert) {
assert.expect(1); assert.expect(1);
var SpecialSyncModel = Backbone.Model.extend({ var SpecialSyncModel = Backbone.Model.extend({
sync: function(method, model, options) { sync: function(method, m, options) {
_.extend(options, {specialSync: true}); _.extend(options, {specialSync: true});
return Backbone.Model.prototype.sync.call(this, method, model, options); return Backbone.Model.prototype.sync.call(this, method, m, options);
}, },
urlRoot: '/test' urlRoot: '/test'
}); });
var model = new SpecialSyncModel({id: 'id'}); var model = new SpecialSyncModel({id: 'id'});
var onSuccess = function(model, response, options) { var onSuccess = function(m, response, options) {
assert.ok(options.specialSync, 'Options were passed correctly to callback'); assert.ok(options.specialSync, 'Options were passed correctly to callback');
}; };
@@ -748,7 +748,7 @@
model.validate = function(attrs) { model.validate = function(attrs) {
if (attrs.admin !== this.get('admin')) return "Can't change admin status."; if (attrs.admin !== this.get('admin')) return "Can't change admin status.";
}; };
model.on('invalid', function(model, error) { model.on('invalid', function(m, error) {
lastError = error; lastError = error;
}); });
var result = model.set({a: 100}); var result = model.set({a: 100});
@@ -793,7 +793,7 @@
model.validate = function(attrs) { model.validate = function(attrs) {
if (attrs.admin) return "Can't change admin status."; if (attrs.admin) return "Can't change admin status.";
}; };
model.on('invalid', function(model, error) { model.on('invalid', function(m, error) {
boundError = true; boundError = true;
}); });
var result = model.set({a: 100}, {validate: true}); var result = model.set({a: 100}, {validate: true});
@@ -848,14 +848,14 @@
QUnit.test("Nested change events don't clobber previous attributes", function(assert) { QUnit.test("Nested change events don't clobber previous attributes", function(assert) {
assert.expect(4); assert.expect(4);
new Backbone.Model() new Backbone.Model()
.on('change:state', function(model, newState) { .on('change:state', function(m, newState) {
assert.equal(model.previous('state'), undefined); assert.equal(m.previous('state'), undefined);
assert.equal(newState, 'hello'); assert.equal(newState, 'hello');
// Fire a nested change event. // Fire a nested change event.
model.set({other: 'whatever'}); m.set({other: 'whatever'});
}) })
.on('change:state', function(model, newState) { .on('change:state', function(m, newState) {
assert.equal(model.previous('state'), undefined); assert.equal(m.previous('state'), undefined);
assert.equal(newState, 'hello'); assert.equal(newState, 'hello');
}) })
.set({state: 'hello'}); .set({state: 'hello'});
@@ -1021,7 +1021,7 @@
QUnit.test('#1030 - `save` with `wait` results in correct attributes if success is called during sync', function(assert) { QUnit.test('#1030 - `save` with `wait` results in correct attributes if success is called during sync', function(assert) {
assert.expect(2); assert.expect(2);
var model = new Backbone.Model({x: 1, y: 2}); var model = new Backbone.Model({x: 1, y: 2});
model.sync = function(method, model, options) { model.sync = function(method, m, options) {
options.success(); options.success();
}; };
model.on('change:x', function() { assert.ok(true); }); model.on('change:x', function() { assert.ok(true); });
@@ -1038,7 +1038,7 @@
QUnit.test('save turns on parse flag', function(assert) { QUnit.test('save turns on parse flag', function(assert) {
var Model = Backbone.Model.extend({ var Model = Backbone.Model.extend({
sync: function(method, model, options) { assert.ok(options.parse); } sync: function(method, m, options) { assert.ok(options.parse); }
}); });
new Model().save(); new Model().save();
}); });
@@ -1142,7 +1142,7 @@
model.set({y: 1}, {silent: true}); model.set({y: 1}, {silent: true});
model.set({y: 2}); model.set({y: 2});
}); });
model.on('change:y', function(model, val) { model.on('change:y', function(m, val) {
assert.equal(val, 2); assert.equal(val, 2);
}); });
model.set({x: true}); model.set({x: true});
@@ -1152,7 +1152,7 @@
assert.expect(1); assert.expect(1);
var changes = []; var changes = [];
var model = new Backbone.Model(); var model = new Backbone.Model();
model.on('change:b', function(model, val) { changes.push(val); }); model.on('change:b', function(m, val) { changes.push(val); });
model.on('change', function() { model.on('change', function() {
model.set({b: 1}); model.set({b: 1});
}); });
@@ -1202,11 +1202,11 @@
assert.expect(3); assert.expect(3);
var model = new Backbone.Model(); var model = new Backbone.Model();
var opts = { var opts = {
success: function( model, resp, options ) { success: function( m, resp, options ) {
assert.ok(options); assert.ok(options);
} }
}; };
model.sync = function(method, model, options) { model.sync = function(method, m, options) {
options.success(); options.success();
}; };
model.save({id: 1}, opts); model.save({id: 1}, opts);
@@ -1217,7 +1217,7 @@
QUnit.test("#1412 - Trigger 'sync' event.", function(assert) { QUnit.test("#1412 - Trigger 'sync' event.", function(assert) {
assert.expect(3); assert.expect(3);
var model = new Backbone.Model({id: 1}); var model = new Backbone.Model({id: 1});
model.sync = function(method, model, options) { options.success(); }; model.sync = function(method, m, options) { options.success(); };
model.on('sync', function(){ assert.ok(true); }); model.on('sync', function(){ assert.ok(true); });
model.fetch(); model.fetch();
model.save(); model.save();
@@ -1248,7 +1248,7 @@
assert.expect(1); assert.expect(1);
var Model = Backbone.Model.extend({ var Model = Backbone.Model.extend({
url: '/test/', url: '/test/',
sync: function(method, model, options){ options.success(); }, sync: function(method, m, options){ options.success(); },
validate: function(){ return 'invalid'; } validate: function(){ return 'invalid'; }
}); });
var model = new Model({id: 1}); var model = new Model({id: 1});
@@ -1271,7 +1271,7 @@
var done = assert.async(); var done = assert.async();
assert.expect(0); assert.expect(0);
var Model = Backbone.Model.extend({ var Model = Backbone.Model.extend({
sync: function(method, model, options) { sync: function(method, m, options) {
setTimeout(function(){ setTimeout(function(){
options.success(); options.success();
done(); done();
@@ -1301,7 +1301,7 @@
model.set({b: 2}, {silent: true}); model.set({b: 2}, {silent: true});
model.unset('c', {silent: true}); model.unset('c', {silent: true});
}); });
model.on('change:a change:b change:c', function(model, val) { changes.push(val); }); model.on('change:a change:b change:c', function(m, val) { changes.push(val); });
model.set({a: 'a', b: 1, c: 'item'}); model.set({a: 'a', b: 1, c: 'item'});
assert.deepEqual(changes, ['a', 1, 'item']); assert.deepEqual(changes, ['a', 1, 'item']);
assert.deepEqual(model.attributes, {a: 'c', b: 2}); assert.deepEqual(model.attributes, {a: 'c', b: 2});
@@ -1319,7 +1319,7 @@
assert.expect(2); assert.expect(2);
var changes = []; var changes = [];
var model = new Backbone.Model(); var model = new Backbone.Model();
model.on('change:a change:b change:c', function(model, val) { changes.push(val); }); model.on('change:a change:b change:c', function(m, val) { changes.push(val); });
model.on('change', function() { model.on('change', function() {
model.set({a: 'c'}, {silent: true}); model.set({a: 'c'}, {silent: true});
}); });

View File

@@ -5,7 +5,7 @@
var lastRoute = null; var lastRoute = null;
var lastArgs = []; var lastArgs = [];
var onRoute = function(router, route, args) { var onRoute = function(routerParam, route, args) {
lastRoute = route; lastRoute = route;
lastArgs = args; lastArgs = args;
}; };
@@ -354,7 +354,7 @@
QUnit.test('No events are triggered if #execute returns false.', function(assert) { QUnit.test('No events are triggered if #execute returns false.', function(assert) {
assert.expect(1); assert.expect(1);
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
foo: function() { foo: function() {
@@ -369,9 +369,9 @@
}); });
var router = new Router; var myRouter = new MyRouter;
router.on('route route:foo', function() { myRouter.on('route route:foo', function() {
assert.ok(false); assert.ok(false);
}); });
@@ -639,14 +639,14 @@
QUnit.test('#1746 - Router allows empty route.', function(assert) { QUnit.test('#1746 - Router allows empty route.', function(assert) {
assert.expect(1); assert.expect(1);
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: {'': 'empty'}, routes: {'': 'empty'},
empty: function(){}, empty: function(){},
route: function(route){ route: function(route){
assert.strictEqual(route, ''); assert.strictEqual(route, '');
} }
}); });
new Router; new MyRouter;
}); });
QUnit.test('#1794 - Trailing space in fragments.', function(assert) { QUnit.test('#1794 - Trailing space in fragments.', function(assert) {
@@ -698,8 +698,8 @@
} }
}); });
var router = new RouterExtended(); var myRouter = new RouterExtended();
assert.deepEqual({home: 'root', index: 'index.html', show: 'show', search: 'search'}, router.routes); assert.deepEqual({home: 'root', index: 'index.html', show: 'show', search: 'search'}, myRouter.routes);
}); });
QUnit.test('#2538 - hashChange to pushState only if both requested.', function(assert) { QUnit.test('#2538 - hashChange to pushState only if both requested.', function(assert) {
@@ -731,12 +731,12 @@
} }
}); });
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
hash: function() { assert.ok(false); } hash: function() { assert.ok(false); }
} }
}); });
var router = new Router; var myRouter = new MyRouter;
location.replace('http://example.com/'); location.replace('http://example.com/');
Backbone.history.start({ Backbone.history.start({
@@ -807,12 +807,12 @@
} }
}); });
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
path: function() { assert.ok(true); } path: function() { assert.ok(true); }
} }
}); });
var router = new Router; var myRouter = new MyRouter;
location.replace('http://example.com/'); location.replace('http://example.com/');
Backbone.history.start({pushState: true, hashChange: false}); Backbone.history.start({pushState: true, hashChange: false});
@@ -821,14 +821,14 @@
QUnit.test('Do not decode the search params.', function(assert) { QUnit.test('Do not decode the search params.', function(assert) {
assert.expect(1); assert.expect(1);
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
path: function(params){ path: function(params){
assert.strictEqual(params, 'x=y%3Fz'); assert.strictEqual(params, 'x=y%3Fz');
} }
} }
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.navigate('path?x=y%3Fz', true); Backbone.history.navigate('path?x=y%3Fz', true);
}); });
@@ -837,14 +837,14 @@
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
Backbone.history.start({pushState: true}); Backbone.history.start({pushState: true});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
path: function(params) { path: function(params) {
assert.strictEqual(params, 'x=y'); assert.strictEqual(params, 'x=y');
} }
} }
}); });
var router = new Router; var myRouter = new MyRouter;
location.replace('http://example.com/path?x=y#hash'); location.replace('http://example.com/path?x=y#hash');
Backbone.history.checkUrl(); Backbone.history.checkUrl();
}); });
@@ -854,14 +854,14 @@
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
Backbone.history.start({pushState: true}); Backbone.history.start({pushState: true});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
path: function(params) { path: function(params) {
assert.strictEqual(params, 'x=y'); assert.strictEqual(params, 'x=y');
} }
} }
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.navigate('path?x=y#hash', true); Backbone.history.navigate('path?x=y#hash', true);
}); });
@@ -870,14 +870,14 @@
location.replace('http://example.com/myyjä'); location.replace('http://example.com/myyjä');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
myyjä: function() { myyjä: function() {
assert.ok(true); assert.ok(true);
} }
} }
}); });
new Router; new MyRouter;
Backbone.history.start({pushState: true}); Backbone.history.start({pushState: true});
}); });
@@ -887,14 +887,14 @@
location.pathname = '/myyj%C3%A4/foo%20%25%3F%2f%40%25%20bar'; location.pathname = '/myyj%C3%A4/foo%20%25%3F%2f%40%25%20bar';
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
'myyjä/:query': function(query) { 'myyjä/:query': function(query) {
assert.strictEqual(query, 'foo %?/@% bar'); assert.strictEqual(query, 'foo %?/@% bar');
} }
} }
}); });
new Router; new MyRouter;
Backbone.history.start({pushState: true}); Backbone.history.start({pushState: true});
}); });
@@ -903,14 +903,14 @@
location.replace('http://example.com/stuff%0Anonsense?param=foo%0Abar'); location.replace('http://example.com/stuff%0Anonsense?param=foo%0Abar');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
'stuff\nnonsense': function() { 'stuff\nnonsense': function() {
assert.ok(true); assert.ok(true);
} }
} }
}); });
new Router; new MyRouter;
Backbone.history.start({pushState: true}); Backbone.history.start({pushState: true});
}); });
@@ -919,7 +919,7 @@
location.replace('http://example.com#foo/123/bar?x=y'); location.replace('http://example.com#foo/123/bar?x=y');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: {'foo/:id/bar': 'foo'}, routes: {'foo/:id/bar': 'foo'},
foo: function(){}, foo: function(){},
execute: function(callback, args, name) { execute: function(callback, args, name) {
@@ -928,7 +928,7 @@
assert.strictEqual(name, 'foo'); assert.strictEqual(name, 'foo');
} }
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.start(); Backbone.history.start();
}); });
@@ -967,8 +967,8 @@
Backbone.history.stop(); Backbone.history.stop();
location.replace('http://example.com#login?a=value&backUrl=https%3A%2F%2Fwww.msn.com%2Fidp%2Fidpdemo%3Fspid%3Dspdemo%26target%3Db'); location.replace('http://example.com#login?a=value&backUrl=https%3A%2F%2Fwww.msn.com%2Fidp%2Fidpdemo%3Fspid%3Dspdemo%26target%3Db');
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var router = new Backbone.Router; var myRouter = new Backbone.Router;
router.route('login', function(params) { myRouter.route('login', function(params) {
assert.strictEqual(params, 'a=value&backUrl=https%3A%2F%2Fwww.msn.com%2Fidp%2Fidpdemo%3Fspid%3Dspdemo%26target%3Db'); assert.strictEqual(params, 'a=value&backUrl=https%3A%2F%2Fwww.msn.com%2Fidp%2Fidpdemo%3Fspid%3Dspdemo%26target%3Db');
}); });
Backbone.history.start(); Backbone.history.start();
@@ -996,14 +996,14 @@
location.replace('http://example.com/foo'); location.replace('http://example.com/foo');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
foo: function(){ foo: function(){
assert.ok(false, 'should not match unless root matches'); assert.ok(false, 'should not match unless root matches');
} }
} }
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.start({root: 'root', pushState: true}); Backbone.history.start({root: 'root', pushState: true});
}); });
@@ -1012,14 +1012,14 @@
location.replace('http://example.com/xxxx/foo'); location.replace('http://example.com/xxxx/foo');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: { routes: {
foo: function(){ foo: function(){
assert.ok(false, 'should not match unless root matches'); assert.ok(false, 'should not match unless root matches');
} }
} }
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.start({root: 'root', pushState: true}); Backbone.history.start({root: 'root', pushState: true});
}); });
@@ -1028,10 +1028,10 @@
location.replace('http://example.com/x+y.z/foo'); location.replace('http://example.com/x+y.z/foo');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: {foo: function(){ assert.ok(true); }} routes: {foo: function(){ assert.ok(true); }}
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.start({root: 'x+y.z', pushState: true}); Backbone.history.start({root: 'x+y.z', pushState: true});
}); });
@@ -1040,10 +1040,10 @@
location.replace('http://example.com/®ooτ/foo'); location.replace('http://example.com/®ooτ/foo');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: {foo: function(){ assert.ok(true); }} routes: {foo: function(){ assert.ok(true); }}
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.start({root: '®ooτ', pushState: true}); Backbone.history.start({root: '®ooτ', pushState: true});
}); });
@@ -1052,10 +1052,10 @@
location.replace('http://example.com/®ooτ'); location.replace('http://example.com/®ooτ');
Backbone.history.stop(); Backbone.history.stop();
Backbone.history = _.extend(new Backbone.History, {location: location}); Backbone.history = _.extend(new Backbone.History, {location: location});
var Router = Backbone.Router.extend({ var MyRouter = Backbone.Router.extend({
routes: {'': function(){ assert.ok(true); }} routes: {'': function(){ assert.ok(true); }}
}); });
var router = new Router; var myRouter = new MyRouter;
Backbone.history.start({root: '®ooτ', pushState: true}); Backbone.history.start({root: '®ooτ', pushState: true});
}); });

View File

@@ -228,7 +228,7 @@
assert.expect(2); assert.expect(2);
var model = new Backbone.Model; var model = new Backbone.Model;
model.url = '/test'; model.url = '/test';
model.on('error', function(model, xhr, options) { model.on('error', function(m, xhr, options) {
assert.strictEqual(options.textStatus, 'textStatus'); assert.strictEqual(options.textStatus, 'textStatus');
assert.strictEqual(options.errorThrown, 'errorThrown'); assert.strictEqual(options.errorThrown, 'errorThrown');
}); });

View File

@@ -27,9 +27,9 @@
QUnit.test('$', function(assert) { QUnit.test('$', function(assert) {
assert.expect(2); assert.expect(2);
var view = new Backbone.View; var myView = new Backbone.View;
view.setElement('<p><a><b>test</b></a></p>'); myView.setElement('<p><a><b>test</b></a></p>');
var result = view.$('a b'); var result = myView.$('a b');
assert.strictEqual(result[0].innerHTML, 'test'); assert.strictEqual(result[0].innerHTML, 'test');
assert.ok(result.length === +result.length); assert.ok(result.length === +result.length);
@@ -37,12 +37,12 @@
QUnit.test('$el', function(assert) { QUnit.test('$el', function(assert) {
assert.expect(3); assert.expect(3);
var view = new Backbone.View; var myView = new Backbone.View;
view.setElement('<p><a><b>test</b></a></p>'); myView.setElement('<p><a><b>test</b></a></p>');
assert.strictEqual(view.el.nodeType, 1); assert.strictEqual(myView.el.nodeType, 1);
assert.ok(view.$el instanceof Backbone.$); assert.ok(myView.$el instanceof Backbone.$);
assert.strictEqual(view.$el[0], view.el); assert.strictEqual(myView.$el[0], myView.el);
}); });
QUnit.test('initialize', function(assert) { QUnit.test('initialize', function(assert) {
@@ -58,53 +58,53 @@
QUnit.test('render', function(assert) { QUnit.test('render', function(assert) {
assert.expect(1); assert.expect(1);
var view = new Backbone.View; var myView = new Backbone.View;
assert.equal(view.render(), view, '#render returns the view instance'); assert.equal(myView.render(), myView, '#render returns the view instance');
}); });
QUnit.test('delegateEvents', function(assert) { QUnit.test('delegateEvents', function(assert) {
assert.expect(6); assert.expect(6);
var counter1 = 0, counter2 = 0; var counter1 = 0, counter2 = 0;
var view = new Backbone.View({el: '#testElement'}); var myView = new Backbone.View({el: '#testElement'});
view.increment = function(){ counter1++; }; myView.increment = function(){ counter1++; };
view.$el.on('click', function(){ counter2++; }); myView.$el.on('click', function(){ counter2++; });
var events = {'click h1': 'increment'}; var events = {'click h1': 'increment'};
view.delegateEvents(events); myView.delegateEvents(events);
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
assert.equal(counter1, 1); assert.equal(counter1, 1);
assert.equal(counter2, 1); assert.equal(counter2, 1);
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
assert.equal(counter1, 2); assert.equal(counter1, 2);
assert.equal(counter2, 2); assert.equal(counter2, 2);
view.delegateEvents(events); myView.delegateEvents(events);
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
assert.equal(counter1, 3); assert.equal(counter1, 3);
assert.equal(counter2, 3); assert.equal(counter2, 3);
}); });
QUnit.test('delegate', function(assert) { QUnit.test('delegate', function(assert) {
assert.expect(3); assert.expect(3);
var view = new Backbone.View({el: '#testElement'}); var myView = new Backbone.View({el: '#testElement'});
view.delegate('click', 'h1', function() { myView.delegate('click', 'h1', function() {
assert.ok(true); assert.ok(true);
}); });
view.delegate('click', function() { myView.delegate('click', function() {
assert.ok(true); assert.ok(true);
}); });
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
assert.equal(view.delegate(), view, '#delegate returns the view instance'); assert.equal(myView.delegate(), myView, '#delegate returns the view instance');
}); });
QUnit.test('delegateEvents allows functions for callbacks', function(assert) { QUnit.test('delegateEvents allows functions for callbacks', function(assert) {
assert.expect(3); assert.expect(3);
var view = new Backbone.View({el: '<p></p>'}); var myView = new Backbone.View({el: '<p></p>'});
view.counter = 0; myView.counter = 0;
var events = { var events = {
click: function() { click: function() {
@@ -112,97 +112,97 @@
} }
}; };
view.delegateEvents(events); myView.delegateEvents(events);
view.$el.trigger('click'); myView.$el.trigger('click');
assert.equal(view.counter, 1); assert.equal(myView.counter, 1);
view.$el.trigger('click'); myView.$el.trigger('click');
assert.equal(view.counter, 2); assert.equal(myView.counter, 2);
view.delegateEvents(events); myView.delegateEvents(events);
view.$el.trigger('click'); myView.$el.trigger('click');
assert.equal(view.counter, 3); assert.equal(myView.counter, 3);
}); });
QUnit.test('delegateEvents ignore undefined methods', function(assert) { QUnit.test('delegateEvents ignore undefined methods', function(assert) {
assert.expect(0); assert.expect(0);
var view = new Backbone.View({el: '<p></p>'}); var myView = new Backbone.View({el: '<p></p>'});
view.delegateEvents({'click': 'undefinedMethod'}); myView.delegateEvents({'click': 'undefinedMethod'});
view.$el.trigger('click'); myView.$el.trigger('click');
}); });
QUnit.test('undelegateEvents', function(assert) { QUnit.test('undelegateEvents', function(assert) {
assert.expect(7); assert.expect(7);
var counter1 = 0, counter2 = 0; var counter1 = 0, counter2 = 0;
var view = new Backbone.View({el: '#testElement'}); var myView = new Backbone.View({el: '#testElement'});
view.increment = function(){ counter1++; }; myView.increment = function(){ counter1++; };
view.$el.on('click', function(){ counter2++; }); myView.$el.on('click', function(){ counter2++; });
var events = {'click h1': 'increment'}; var events = {'click h1': 'increment'};
view.delegateEvents(events); myView.delegateEvents(events);
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
assert.equal(counter1, 1); assert.equal(counter1, 1);
assert.equal(counter2, 1); assert.equal(counter2, 1);
view.undelegateEvents(); myView.undelegateEvents();
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
assert.equal(counter1, 1); assert.equal(counter1, 1);
assert.equal(counter2, 2); assert.equal(counter2, 2);
view.delegateEvents(events); myView.delegateEvents(events);
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
assert.equal(counter1, 2); assert.equal(counter1, 2);
assert.equal(counter2, 3); assert.equal(counter2, 3);
assert.equal(view.undelegateEvents(), view, '#undelegateEvents returns the view instance'); assert.equal(myView.undelegateEvents(), myView, '#undelegateEvents returns the view instance');
}); });
QUnit.test('undelegate', function(assert) { QUnit.test('undelegate', function(assert) {
assert.expect(1); assert.expect(1);
view = new Backbone.View({el: '#testElement'}); var myView = new Backbone.View({el: '#testElement'});
view.delegate('click', function() { assert.ok(false); }); myView.delegate('click', function() { assert.ok(false); });
view.delegate('click', 'h1', function() { assert.ok(false); }); myView.delegate('click', 'h1', function() { assert.ok(false); });
view.undelegate('click'); myView.undelegate('click');
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
view.$el.trigger('click'); myView.$el.trigger('click');
assert.equal(view.undelegate(), view, '#undelegate returns the view instance'); assert.equal(myView.undelegate(), myView, '#undelegate returns the view instance');
}); });
QUnit.test('undelegate with passed handler', function(assert) { QUnit.test('undelegate with passed handler', function(assert) {
assert.expect(1); assert.expect(1);
view = new Backbone.View({el: '#testElement'}); var myView = new Backbone.View({el: '#testElement'});
var listener = function() { assert.ok(false); }; var listener = function() { assert.ok(false); };
view.delegate('click', listener); myView.delegate('click', listener);
view.delegate('click', function() { assert.ok(true); }); myView.delegate('click', function() { assert.ok(true); });
view.undelegate('click', listener); myView.undelegate('click', listener);
view.$el.trigger('click'); myView.$el.trigger('click');
}); });
QUnit.test('undelegate with selector', function(assert) { QUnit.test('undelegate with selector', function(assert) {
assert.expect(2); assert.expect(2);
view = new Backbone.View({el: '#testElement'}); var myView = new Backbone.View({el: '#testElement'});
view.delegate('click', function() { assert.ok(true); }); myView.delegate('click', function() { assert.ok(true); });
view.delegate('click', 'h1', function() { assert.ok(false); }); myView.delegate('click', 'h1', function() { assert.ok(false); });
view.undelegate('click', 'h1'); myView.undelegate('click', 'h1');
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
view.$el.trigger('click'); myView.$el.trigger('click');
}); });
QUnit.test('undelegate with handler and selector', function(assert) { QUnit.test('undelegate with handler and selector', function(assert) {
assert.expect(2); assert.expect(2);
view = new Backbone.View({el: '#testElement'}); var myView = new Backbone.View({el: '#testElement'});
view.delegate('click', function() { assert.ok(true); }); myView.delegate('click', function() { assert.ok(true); });
var handler = function(){ assert.ok(false); }; var handler = function(){ assert.ok(false); };
view.delegate('click', 'h1', handler); myView.delegate('click', 'h1', handler);
view.undelegate('click', 'h1', handler); myView.undelegate('click', 'h1', handler);
view.$('h1').trigger('click'); myView.$('h1').trigger('click');
view.$el.trigger('click'); myView.$el.trigger('click');
}); });
QUnit.test('tagName can be provided as a string', function(assert) { QUnit.test('tagName can be provided as a string', function(assert) {
@@ -302,11 +302,11 @@
} }
}); });
var view = new View; var myView = new View;
assert.strictEqual(view.el.className, 'backboneClass'); assert.strictEqual(myView.el.className, 'backboneClass');
assert.strictEqual(view.el.id, 'backboneId'); assert.strictEqual(myView.el.id, 'backboneId');
assert.strictEqual(view.$el.attr('class'), 'backboneClass'); assert.strictEqual(myView.$el.attr('class'), 'backboneClass');
assert.strictEqual(view.$el.attr('id'), 'backboneId'); assert.strictEqual(myView.$el.attr('id'), 'backboneId');
}); });
QUnit.test('multiple views per element', function(assert) { QUnit.test('multiple views per element', function(assert) {
@@ -345,7 +345,7 @@
} }
}); });
var view = new View; var myView = new View;
$('body').trigger('fake$event').trigger('fake$event'); $('body').trigger('fake$event').trigger('fake$event');
$('body').off('fake$event'); $('body').off('fake$event');
@@ -356,11 +356,11 @@
assert.expect(2); assert.expect(2);
var $el = $('body'); var $el = $('body');
var view = new Backbone.View({el: $el}); var myView = new Backbone.View({el: $el});
assert.ok(view.$el === $el); assert.ok(myView.$el === $el);
view.setElement($el = $($el)); myView.setElement($el = $($el));
assert.ok(view.$el === $el); assert.ok(myView.$el === $el);
}); });
QUnit.test('#986 - Undelegate before changing element.', function(assert) { QUnit.test('#986 - Undelegate before changing element.', function(assert) {
@@ -371,13 +371,13 @@
var View = Backbone.View.extend({ var View = Backbone.View.extend({
events: { events: {
click: function(e) { click: function(e) {
assert.ok(view.el === e.target); assert.ok(myView.el === e.target);
} }
} }
}); });
var view = new View({el: button1}); var myView = new View({el: button1});
view.setElement(button2); myView.setElement(button2);
button1.trigger('click'); button1.trigger('click');
button2.trigger('click'); button2.trigger('click');
@@ -405,14 +405,14 @@
} }
}); });
var view = new View({ var myView = new View({
model: new Backbone.Model, model: new Backbone.Model,
collection: new Backbone.Collection collection: new Backbone.Collection
}); });
view.stopListening(); myView.stopListening();
view.model.trigger('x'); myView.model.trigger('x');
view.collection.trigger('x'); myView.collection.trigger('x');
}); });
QUnit.test('Provide function for el.', function(assert) { QUnit.test('Provide function for el.', function(assert) {
@@ -423,9 +423,9 @@
} }
}); });
var view = new View; var myView = new View;
assert.ok(view.$el.is('p')); assert.ok(myView.$el.is('p'));
assert.ok(view.$el.has('a')); assert.ok(myView.$el.has('a'));
}); });
QUnit.test('events passed in options', function(assert) { QUnit.test('events passed in options', function(assert) {
@@ -439,52 +439,52 @@
} }
}); });
var view = new View({ var myView = new View({
events: { events: {
'click h1': 'increment' 'click h1': 'increment'
} }
}); });
view.$('h1').trigger('click').trigger('click'); myView.$('h1').trigger('click').trigger('click');
assert.equal(counter, 2); assert.equal(counter, 2);
}); });
QUnit.test('remove', function(assert) { QUnit.test('remove', function(assert) {
assert.expect(2); assert.expect(2);
var view = new Backbone.View; var myView = new Backbone.View;
document.body.appendChild(view.el); document.body.appendChild(view.el);
view.delegate('click', function() { assert.ok(false); }); myView.delegate('click', function() { assert.ok(false); });
view.listenTo(view, 'all x', function() { assert.ok(false); }); myView.listenTo(myView, 'all x', function() { assert.ok(false); });
assert.equal(view.remove(), view, '#remove returns the view instance'); assert.equal(myView.remove(), myView, '#remove returns the view instance');
view.$el.trigger('click'); myView.$el.trigger('click');
view.trigger('x'); myView.trigger('x');
// In IE8 and below, parentNode still exists but is not document.body. // In IE8 and below, parentNode still exists but is not document.body.
assert.notEqual(view.el.parentNode, document.body); assert.notEqual(myView.el.parentNode, document.body);
}); });
QUnit.test('setElement', function(assert) { QUnit.test('setElement', function(assert) {
assert.expect(3); assert.expect(3);
var view = new Backbone.View({ var myView = new Backbone.View({
events: { events: {
click: function() { assert.ok(false); } click: function() { assert.ok(false); }
} }
}); });
view.events = { myView.events = {
click: function() { assert.ok(true); } click: function() { assert.ok(true); }
}; };
var oldEl = view.el; var oldEl = myView.el;
var $oldEl = view.$el; var $oldEl = myView.$el;
view.setElement(document.createElement('div')); myView.setElement(document.createElement('div'));
$oldEl.click(); $oldEl.click();
view.$el.click(); myView.$el.click();
assert.notEqual(oldEl, view.el); assert.notEqual(oldEl, myView.el);
assert.notEqual($oldEl, view.$el); assert.notEqual($oldEl, myView.$el);
}); });
})(); })();

View File

@@ -1,22 +0,0 @@
Copyright 2010-2016 Mathias Bynens <https://mathiasbynens.be/>
Based on JSLitmus.js, copyright Robert Kieffer <http://broofa.com/>
Modified by John-David Dalton <http://allyoucanleet.com/>
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 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.

File diff suppressed because it is too large Load Diff

View File

@@ -1,4 +1,4 @@
Copyright (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Copyright (c) 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative
Reporters & Editors Reporters & Editors
Permission is hereby granted, free of charge, to any person Permission is hereby granted, free of charge, to any person

View File

@@ -143,33 +143,23 @@
QUnit.test('uniq', function(assert) { QUnit.test('uniq', function(assert) {
var list = [1, 2, 1, 3, 1, 4]; var list = [1, 2, 1, 3, 1, 4];
assert.deepEqual(_.uniq(list), [1, 2, 3, 4], 'can find the unique values of an unsorted array'); assert.deepEqual(_.uniq(list), [1, 2, 3, 4], 'can find the unique values of an unsorted array');
list = [1, 1, 1, 2, 2, 3]; list = [1, 1, 1, 2, 2, 3];
assert.deepEqual(_.uniq(list, true), [1, 2, 3], 'can find the unique values of a sorted array faster'); assert.deepEqual(_.uniq(list, true), [1, 2, 3], 'can find the unique values of a sorted array faster');
list = [{name: 'moe'}, {name: 'curly'}, {name: 'larry'}, {name: 'curly'}]; list = [{name: 'Moe'}, {name: 'Curly'}, {name: 'Larry'}, {name: 'Curly'}];
var iterator = function(value) { return value.name; }; var expected = [{name: 'Moe'}, {name: 'Curly'}, {name: 'Larry'}];
assert.deepEqual(_.map(_.uniq(list, false, iterator), iterator), ['moe', 'curly', 'larry'], 'can find the unique values of an array using a custom iterator'); var iterator = function(stooge) { return stooge.name; };
assert.deepEqual(_.uniq(list, false, iterator), expected, 'uses the result of `iterator` for uniqueness comparisons (unsorted case)');
assert.deepEqual(_.uniq(list, iterator), expected, '`sorted` argument defaults to false when omitted');
assert.deepEqual(_.uniq(list, 'name'), expected, 'when `iterator` is a string, uses that key for comparisons (unsorted case)');
assert.deepEqual(_.map(_.uniq(list, iterator), iterator), ['moe', 'curly', 'larry'], 'can find the unique values of an array using a custom iterator without specifying whether array is sorted'); list = [{score: 8}, {score: 10}, {score: 10}];
expected = [{score: 8}, {score: 10}];
iterator = function(value) { return value + 1; }; iterator = function(item) { return item.score; };
list = [1, 2, 2, 3, 4, 4]; assert.deepEqual(_.uniq(list, true, iterator), expected, 'uses the result of `iterator` for uniqueness comparisons (sorted case)');
assert.deepEqual(_.uniq(list, true, iterator), [1, 2, 3, 4], 'iterator works with sorted array'); assert.deepEqual(_.uniq(list, true, 'score'), expected, 'when `iterator` is a string, uses that key for comparisons (sorted case)');
var kittens = [
{kitten: 'Celery', cuteness: 8},
{kitten: 'Juniper', cuteness: 10},
{kitten: 'Spottis', cuteness: 10}
];
var expected = [
{kitten: 'Celery', cuteness: 8},
{kitten: 'Juniper', cuteness: 10}
];
assert.deepEqual(_.uniq(kittens, true, 'cuteness'), expected, 'string iterator works with sorted array');
assert.deepEqual(_.uniq([{0: 1}, {0: 1}, {0: 1}, {0: 2}], 0), [{0: 1}, {0: 2}], 'can use falsey pluck like iterator');
var result = (function(){ return _.uniq(arguments); }(1, 2, 1, 3, 1, 4)); var result = (function(){ return _.uniq(arguments); }(1, 2, 1, 3, 1, 4));
assert.deepEqual(result, [1, 2, 3, 4], 'works on an arguments object'); assert.deepEqual(result, [1, 2, 3, 4], 'works on an arguments object');
@@ -177,19 +167,17 @@
var a = {}, b = {}, c = {}; var a = {}, b = {}, c = {};
assert.deepEqual(_.uniq([a, b, a, b, c]), [a, b, c], 'works on values that can be tested for equivalency but not ordered'); assert.deepEqual(_.uniq([a, b, a, b, c]), [a, b, c], 'works on values that can be tested for equivalency but not ordered');
assert.deepEqual(_.uniq(null), []); assert.deepEqual(_.uniq(null), [], 'returns an empty array when `array` is not iterable');
var context = {}; var context = {};
list = [3]; list = [3];
_.uniq(list, function(value, index, array) { _.uniq(list, function(value, index, array) {
assert.strictEqual(this, context); assert.strictEqual(this, context, 'executes its iterator in the given context');
assert.strictEqual(value, 3); assert.strictEqual(value, 3, 'passes its iterator the value');
assert.strictEqual(index, 0); assert.strictEqual(index, 0, 'passes its iterator the index');
assert.strictEqual(array, list); assert.strictEqual(array, list, 'passes its iterator the entire array');
}, context); }, context);
assert.deepEqual(_.uniq([{a: 1, b: 1}, {a: 1, b: 2}, {a: 1, b: 3}, {a: 2, b: 1}], 'a'), [{a: 1, b: 1}, {a: 2, b: 1}], 'can use pluck like iterator');
assert.deepEqual(_.uniq([{0: 1, b: 1}, {0: 1, b: 2}, {0: 1, b: 3}, {0: 2, b: 1}], 0), [{0: 1, b: 1}, {0: 2, b: 1}], 'can use falsey pluck like iterator');
}); });
QUnit.test('unique', function(assert) { QUnit.test('unique', function(assert) {
@@ -198,44 +186,54 @@
QUnit.test('intersection', function(assert) { QUnit.test('intersection', function(assert) {
var stooges = ['moe', 'curly', 'larry'], leaders = ['moe', 'groucho']; var stooges = ['moe', 'curly', 'larry'], leaders = ['moe', 'groucho'];
assert.deepEqual(_.intersection(stooges, leaders), ['moe'], 'can take the set intersection of two arrays'); assert.deepEqual(_.intersection(stooges, leaders), ['moe'], 'can find the set intersection of two arrays');
assert.deepEqual(_(stooges).intersection(leaders), ['moe'], 'can perform an OO-style intersection'); assert.deepEqual(_(stooges).intersection(leaders), ['moe'], 'can perform an OO-style intersection');
var result = (function(){ return _.intersection(arguments, leaders); }('moe', 'curly', 'larry')); var result = (function(){ return _.intersection(arguments, leaders); }('moe', 'curly', 'larry'));
assert.deepEqual(result, ['moe'], 'works on an arguments object'); assert.deepEqual(result, ['moe'], 'works on an arguments object');
var theSixStooges = ['moe', 'moe', 'curly', 'curly', 'larry', 'larry']; var theSixStooges = ['moe', 'moe', 'curly', 'curly', 'larry', 'larry'];
assert.deepEqual(_.intersection(theSixStooges, leaders), ['moe'], 'returns a duplicate-free array'); assert.deepEqual(_.intersection(theSixStooges, leaders), ['moe'], 'returns a duplicate-free array');
result = _.intersection([2, 4, 3, 1], [1, 2, 3]); result = _.intersection([2, 4, 3, 1], [1, 2, 3]);
assert.deepEqual(result, [2, 3, 1], 'preserves order of first array'); assert.deepEqual(result, [2, 3, 1], 'preserves the order of the first array');
result = _.intersection(null, [1, 2, 3]); result = _.intersection(null, [1, 2, 3]);
assert.equal(Object.prototype.toString.call(result), '[object Array]', 'returns an empty array when passed null as first argument'); assert.deepEqual(result, [], 'returns an empty array when passed null as the first argument');
assert.equal(result.length, 0, 'returns an empty array when passed null as first argument');
result = _.intersection([1, 2, 3], null); result = _.intersection([1, 2, 3], null);
assert.equal(Object.prototype.toString.call(result), '[object Array]', 'returns an empty array when passed null as argument beyond the first'); assert.deepEqual(result, [], 'returns an empty array when passed null as an argument beyond the first');
assert.equal(result.length, 0, 'returns an empty array when passed null as argument beyond the first');
}); });
QUnit.test('union', function(assert) { QUnit.test('union', function(assert) {
var result = _.union([1, 2, 3], [2, 30, 1], [1, 40]); var result = _.union([1, 2, 3], [2, 30, 1], [1, 40]);
assert.deepEqual(result, [1, 2, 3, 30, 40], 'takes the union of a list of arrays'); assert.deepEqual(result, [1, 2, 3, 30, 40], 'can find the union of a list of arrays');
result = _([1, 2, 3]).union([2, 30, 1], [1, 40]);
assert.deepEqual(result, [1, 2, 3, 30, 40], 'can perform an OO-style union');
result = _.union([1, 2, 3], [2, 30, 1], [1, 40, [1]]); result = _.union([1, 2, 3], [2, 30, 1], [1, 40, [1]]);
assert.deepEqual(result, [1, 2, 3, 30, 40, [1]], 'takes the union of a list of nested arrays'); assert.deepEqual(result, [1, 2, 3, 30, 40, [1]], 'can find the union of a list of nested arrays');
var args = null; result = _.union([10, 20], [1, 30, 10], [0, 40]);
(function(){ args = arguments; }(1, 2, 3)); assert.deepEqual(result, [10, 20, 1, 30, 0, 40], 'orders values by their first encounter');
result = _.union(args, [2, 30, 1], [1, 40]);
assert.deepEqual(result, [1, 2, 3, 30, 40], 'takes the union of a list of arrays');
result = _.union([1, 2, 3], 4); result = (function(){ return _.union(arguments, [2, 30, 1], [1, 40]); }(1, 2, 3));
assert.deepEqual(result, [1, 2, 3], 'restrict the union to arrays only'); assert.deepEqual(result, [1, 2, 3, 30, 40], 'works on an arguments object');
assert.deepEqual(_.union([1, 2, 3], 4), [1, 2, 3], 'restricts the union to arrays only');
}); });
QUnit.test('difference', function(assert) { QUnit.test('difference', function(assert) {
var result = _.difference([1, 2, 3], [2, 30, 40]); var result = _.difference([1, 2, 3], [2, 30, 40]);
assert.deepEqual(result, [1, 3], 'takes the difference of two arrays'); assert.deepEqual(result, [1, 3], 'can find the difference of two arrays');
result = _([1, 2, 3]).difference([2, 30, 40]);
assert.deepEqual(result, [1, 3], 'can perform an OO-style difference');
result = _.difference([1, 2, 3, 4], [2, 30, 40], [1, 11, 111]); result = _.difference([1, 2, 3, 4], [2, 30, 40], [1, 11, 111]);
assert.deepEqual(result, [3, 4], 'takes the difference of three arrays'); assert.deepEqual(result, [3, 4], 'can find the difference of three arrays');
result = _.difference([8, 9, 3, 1], [3, 8]);
assert.deepEqual(result, [9, 1], 'preserves the order of the first array');
result = (function(){ return _.difference(arguments, [2, 30, 40]); }(1, 2, 3));
assert.deepEqual(result, [1, 3], 'works on an arguments object');
result = _.difference([1, 2, 3], 1); result = _.difference([1, 2, 3], 1);
assert.deepEqual(result, [1, 2, 3], 'restrict the difference to arrays only'); assert.deepEqual(result, [1, 2, 3], 'restrict the difference to arrays only');

View File

@@ -728,6 +728,11 @@
assert.ok(_.isFinite(0), '0 is finite'); assert.ok(_.isFinite(0), '0 is finite');
assert.ok(_.isFinite(123), 'Ints are finite'); assert.ok(_.isFinite(123), 'Ints are finite');
assert.ok(_.isFinite(-12.44), 'Floats are finite'); assert.ok(_.isFinite(-12.44), 'Floats are finite');
if (typeof Symbol === 'function') {
assert.ok(!_.isFinite(Symbol()), 'symbols are not numbers');
assert.ok(!_.isFinite(Symbol('description')), 'described symbols are not numbers');
assert.ok(!_.isFinite(Object(Symbol())), 'boxed symbols are not numbers');
}
}); });
QUnit.test('isNaN', function(assert) { QUnit.test('isNaN', function(assert) {

View File

@@ -1,6 +1,6 @@
// Underscore.js 1.8.3 // Underscore.js 1.8.3
// http://underscorejs.org // http://underscorejs.org
// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors // (c) 2009-2016 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
// Underscore may be freely distributed under the MIT license. // Underscore may be freely distributed under the MIT license.
(function() { (function() {
@@ -93,7 +93,7 @@
return _.property(value); return _.property(value);
}; };
// An external wrapper for the internal callback generator // An external wrapper for the internal callback generator.
_.iteratee = function(value, context) { _.iteratee = function(value, context) {
return cb(value, context, Infinity); return cb(value, context, Infinity);
}; };
@@ -504,7 +504,7 @@
for (var i = 0, length = getLength(input); i < length; i++) { for (var i = 0, length = getLength(input); i < length; i++) {
var value = input[i]; var value = input[i];
if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) { if (isArrayLike(value) && (_.isArray(value) || _.isArguments(value))) {
// Flatten current level of array or arguments object // Flatten current level of array or arguments object.
if (shallow) { if (shallow) {
var j = 0, len = value.length; var j = 0, len = value.length;
while (j < len) output[idx++] = value[j++]; while (j < len) output[idx++] = value[j++];
@@ -592,7 +592,7 @@
}); });
// Complement of _.zip. Unzip accepts an array of arrays and groups // Complement of _.zip. Unzip accepts an array of arrays and groups
// each array's elements on shared indices // each array's elements on shared indices.
_.unzip = function(array) { _.unzip = function(array) {
var length = array && _.max(array, getLength).length || 0; var length = array && _.max(array, getLength).length || 0;
var result = Array(length); var result = Array(length);
@@ -622,7 +622,7 @@
return result; return result;
}; };
// Generator function to create the findIndex and findLastIndex functions // Generator function to create the findIndex and findLastIndex functions.
var createPredicateIndexFinder = function(dir) { var createPredicateIndexFinder = function(dir) {
return function(array, predicate, context) { return function(array, predicate, context) {
predicate = cb(predicate, context); predicate = cb(predicate, context);
@@ -635,7 +635,7 @@
}; };
}; };
// Returns the first index on an array-like that passes a predicate test // Returns the first index on an array-like that passes a predicate test.
_.findIndex = createPredicateIndexFinder(1); _.findIndex = createPredicateIndexFinder(1);
_.findLastIndex = createPredicateIndexFinder(-1); _.findLastIndex = createPredicateIndexFinder(-1);
@@ -652,7 +652,7 @@
return low; return low;
}; };
// Generator function to create the indexOf and lastIndexOf functions // Generator function to create the indexOf and lastIndexOf functions.
var createIndexFinder = function(dir, predicateFind, sortedIndex) { var createIndexFinder = function(dir, predicateFind, sortedIndex) {
return function(array, item, idx) { return function(array, item, idx) {
var i = 0, length = getLength(array); var i = 0, length = getLength(array);
@@ -707,7 +707,7 @@
}; };
// Split an **array** into several arrays containing **count** or less elements // Split an **array** into several arrays containing **count** or less elements
// of initial array // of initial array.
_.chunk = function(array, count) { _.chunk = function(array, count) {
if (count == null || count < 1) return []; if (count == null || count < 1) return [];
@@ -723,7 +723,7 @@
// ------------------ // ------------------
// Determines whether to execute a function as a constructor // Determines whether to execute a function as a constructor
// or a normal function with the provided arguments // or a normal function with the provided arguments.
var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) { var executeBound = function(sourceFunc, boundFunc, context, callingContext, args) {
if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args); if (!(callingContext instanceof boundFunc)) return sourceFunc.apply(context, args);
var self = baseCreate(sourceFunc.prototype); var self = baseCreate(sourceFunc.prototype);
@@ -959,7 +959,7 @@
}; };
// Retrieve the names of an object's own properties. // Retrieve the names of an object's own properties.
// Delegates to **ECMAScript 5**'s native `Object.keys` // Delegates to **ECMAScript 5**'s native `Object.keys`.
_.keys = function(obj) { _.keys = function(obj) {
if (!_.isObject(obj)) return []; if (!_.isObject(obj)) return [];
if (nativeKeys) return nativeKeys(obj); if (nativeKeys) return nativeKeys(obj);
@@ -991,8 +991,8 @@
return values; return values;
}; };
// Returns the results of applying the iteratee to each element of the object // Returns the results of applying the iteratee to each element of the object.
// In contrast to _.map it returns an object // In contrast to _.map it returns an object.
_.mapObject = function(obj, iteratee, context) { _.mapObject = function(obj, iteratee, context) {
iteratee = cb(iteratee, context); iteratee = cb(iteratee, context);
var keys = _.keys(obj), var keys = _.keys(obj),
@@ -1027,7 +1027,7 @@
}; };
// Return a sorted list of the function names available on the object. // Return a sorted list of the function names available on the object.
// Aliased as `methods` // Aliased as `methods`.
_.functions = _.methods = function(obj) { _.functions = _.methods = function(obj) {
var names = []; var names = [];
for (var key in obj) { for (var key in obj) {
@@ -1058,11 +1058,11 @@
// Extend a given object with all the properties in passed-in object(s). // Extend a given object with all the properties in passed-in object(s).
_.extend = createAssigner(_.allKeys); _.extend = createAssigner(_.allKeys);
// Assigns a given object with all the own properties in the passed-in object(s) // Assigns a given object with all the own properties in the passed-in object(s).
// (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign) // (https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/assign)
_.extendOwn = _.assign = createAssigner(_.keys); _.extendOwn = _.assign = createAssigner(_.keys);
// Returns the first key on an object that passes a predicate test // Returns the first key on an object that passes a predicate test.
_.findKey = function(obj, predicate, context) { _.findKey = function(obj, predicate, context) {
predicate = cb(predicate, context); predicate = cb(predicate, context);
var keys = _.keys(obj), key; var keys = _.keys(obj), key;
@@ -1185,7 +1185,7 @@
return '' + a === '' + b; return '' + a === '' + b;
case '[object Number]': case '[object Number]':
// `NaN`s are equivalent, but non-reflexive. // `NaN`s are equivalent, but non-reflexive.
// Object(NaN) is equivalent to NaN // Object(NaN) is equivalent to NaN.
if (+a !== +a) return +b !== +b; if (+a !== +a) return +b !== +b;
// An `egal` comparison is performed for other numeric values. // An `egal` comparison is performed for other numeric values.
return +a === 0 ? 1 / +a === 1 / b : +a === +b; return +a === 0 ? 1 / +a === 1 / b : +a === +b;
@@ -1311,7 +1311,7 @@
// Is a given object a finite number? // Is a given object a finite number?
_.isFinite = function(obj) { _.isFinite = function(obj) {
return isFinite(obj) && !isNaN(parseFloat(obj)); return !_.isSymbol(obj) && isFinite(obj) && !isNaN(parseFloat(obj));
}; };
// Is the given value `NaN`? // Is the given value `NaN`?
@@ -1420,7 +1420,7 @@
var escaper = function(match) { var escaper = function(match) {
return map[match]; return map[match];
}; };
// Regexes for identifying a key that needs to be escaped // Regexes for identifying a key that needs to be escaped.
var source = '(?:' + _.keys(map).join('|') + ')'; var source = '(?:' + _.keys(map).join('|') + ')';
var testRegexp = RegExp(source); var testRegexp = RegExp(source);
var replaceRegexp = RegExp(source, 'g'); var replaceRegexp = RegExp(source, 'g');