lodash-rails 3.9.3 → 3.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/lib/lodash/rails/version.rb +1 -1
- data/vendor/assets/javascripts/lodash.compat.js +703 -604
- data/vendor/assets/javascripts/lodash.compat.min.js +98 -98
- data/vendor/assets/javascripts/lodash.js +697 -581
- data/vendor/assets/javascripts/lodash.min.js +95 -94
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5aaa71564b33ebd64664ea2ea701ed4fc2b56069
|
4
|
+
data.tar.gz: d20f0b7128d1956603ef5f5c840e276c53644e0f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 97917216b9887332a130d440c6184049785b7099cfb07d4e8c2cdca22400c3e7300f1b98a7c80f922179c1a21d55d1645687309dc71dde36cc17812c6d0c5e13
|
7
|
+
data.tar.gz: 004b24bc3c7022c3fe9d769bce1096367aae442712a0c3daa414e6931d6e6db8656b1b1bf7493abd87e07cd086659ec4b3162c07062961e2aeea9a2fc35f2e2b
|
data/README.md
CHANGED
data/lib/lodash/rails/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
/**
|
2
2
|
* @license
|
3
|
-
* lodash 3.
|
3
|
+
* lodash 3.10.0 (Custom Build) <https://lodash.com/>
|
4
4
|
* Build: `lodash compat -o ./lodash.js`
|
5
5
|
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
|
6
6
|
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
|
@@ -13,7 +13,7 @@
|
|
13
13
|
var undefined;
|
14
14
|
|
15
15
|
/** Used as the semantic version number. */
|
16
|
-
var VERSION = '3.
|
16
|
+
var VERSION = '3.10.0';
|
17
17
|
|
18
18
|
/** Used to compose bitmasks for wrapper metadata. */
|
19
19
|
var BIND_FLAG = 1,
|
@@ -34,9 +34,11 @@
|
|
34
34
|
var HOT_COUNT = 150,
|
35
35
|
HOT_SPAN = 16;
|
36
36
|
|
37
|
+
/** Used as the size to enable large array optimizations. */
|
38
|
+
var LARGE_ARRAY_SIZE = 200;
|
39
|
+
|
37
40
|
/** Used to indicate the type of lazy iteratees. */
|
38
|
-
var
|
39
|
-
LAZY_FILTER_FLAG = 1,
|
41
|
+
var LAZY_FILTER_FLAG = 1,
|
40
42
|
LAZY_MAP_FLAG = 2;
|
41
43
|
|
42
44
|
/** Used as the `TypeError` message for "Functions" methods. */
|
@@ -93,11 +95,10 @@
|
|
93
95
|
rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g;
|
94
96
|
|
95
97
|
/**
|
96
|
-
* Used to match `RegExp` [
|
97
|
-
*
|
98
|
-
* easier `eval` use and `Function` compilation.
|
98
|
+
* Used to match `RegExp` [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns)
|
99
|
+
* and those outlined by [`EscapeRegExpPattern`](http://ecma-international.org/ecma-262/6.0/#sec-escaperegexppattern).
|
99
100
|
*/
|
100
|
-
var reRegExpChars =
|
101
|
+
var reRegExpChars = /^[:!,]|[\\^$.*+?()[\]{}|\/]|(^[0-9a-fA-Fnrtuvx])|([\n\r\u2028\u2029])/g,
|
101
102
|
reHasRegExpChars = RegExp(reRegExpChars.source);
|
102
103
|
|
103
104
|
/** Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). */
|
@@ -106,7 +107,7 @@
|
|
106
107
|
/** Used to match backslashes in property paths. */
|
107
108
|
var reEscapeChar = /\\(\\)?/g;
|
108
109
|
|
109
|
-
/** Used to match [ES template delimiters](
|
110
|
+
/** Used to match [ES template delimiters](http://ecma-international.org/ecma-262/6.0/#sec-template-literal-lexical-components). */
|
110
111
|
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
|
111
112
|
|
112
113
|
/** Used to match `RegExp` flags from their coerced string values. */
|
@@ -138,25 +139,13 @@
|
|
138
139
|
return RegExp(upper + '+(?=' + upper + lower + ')|' + upper + '?' + lower + '|' + upper + '+|[0-9]+', 'g');
|
139
140
|
}());
|
140
141
|
|
141
|
-
/** Used to detect and test for whitespace. */
|
142
|
-
var whitespace = (
|
143
|
-
// Basic whitespace characters.
|
144
|
-
' \t\x0b\f\xa0\ufeff' +
|
145
|
-
|
146
|
-
// Line terminators.
|
147
|
-
'\n\r\u2028\u2029' +
|
148
|
-
|
149
|
-
// Unicode category "Zs" space separators.
|
150
|
-
'\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000'
|
151
|
-
);
|
152
|
-
|
153
142
|
/** Used to assign default `context` object properties. */
|
154
143
|
var contextProps = [
|
155
144
|
'Array', 'ArrayBuffer', 'Date', 'Error', 'Float32Array', 'Float64Array',
|
156
145
|
'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Math', 'Number',
|
157
|
-
'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', '
|
158
|
-
'
|
159
|
-
'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'
|
146
|
+
'Object', 'RegExp', 'Set', 'String', '_', 'clearTimeout', 'isFinite',
|
147
|
+
'parseFloat', 'parseInt', 'setTimeout', 'TypeError', 'Uint8Array',
|
148
|
+
'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap'
|
160
149
|
];
|
161
150
|
|
162
151
|
/** Used to fix the JScript `[[DontEnum]]` bug. */
|
@@ -198,13 +187,6 @@
|
|
198
187
|
cloneableTags[mapTag] = cloneableTags[setTag] =
|
199
188
|
cloneableTags[weakMapTag] = false;
|
200
189
|
|
201
|
-
/** Used as an internal `_.debounce` options object by `_.throttle`. */
|
202
|
-
var debounceOptions = {
|
203
|
-
'leading': false,
|
204
|
-
'maxWait': 0,
|
205
|
-
'trailing': false
|
206
|
-
};
|
207
|
-
|
208
190
|
/** Used to map latin-1 supplementary letters to basic latin letters. */
|
209
191
|
var deburredLetters = {
|
210
192
|
'\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
|
@@ -252,6 +234,15 @@
|
|
252
234
|
'object': true
|
253
235
|
};
|
254
236
|
|
237
|
+
/** Used to escape characters for inclusion in compiled regexes. */
|
238
|
+
var regexpEscapes = {
|
239
|
+
'0': 'x30', '1': 'x31', '2': 'x32', '3': 'x33', '4': 'x34',
|
240
|
+
'5': 'x35', '6': 'x36', '7': 'x37', '8': 'x38', '9': 'x39',
|
241
|
+
'A': 'x41', 'B': 'x42', 'C': 'x43', 'D': 'x44', 'E': 'x45', 'F': 'x46',
|
242
|
+
'a': 'x61', 'b': 'x62', 'c': 'x63', 'd': 'x64', 'e': 'x65', 'f': 'x66',
|
243
|
+
'n': 'x6e', 'r': 'x72', 't': 'x74', 'u': 'x75', 'v': 'x76', 'x': 'x78'
|
244
|
+
};
|
245
|
+
|
255
246
|
/** Used to escape characters for inclusion in compiled string literals. */
|
256
247
|
var stringEscapes = {
|
257
248
|
'\\': '\\',
|
@@ -392,9 +383,6 @@
|
|
392
383
|
* @returns {string} Returns the string.
|
393
384
|
*/
|
394
385
|
function baseToString(value) {
|
395
|
-
if (typeof value == 'string') {
|
396
|
-
return value;
|
397
|
-
}
|
398
386
|
return value == null ? '' : (value + '');
|
399
387
|
}
|
400
388
|
|
@@ -436,8 +424,8 @@
|
|
436
424
|
* sort them in ascending order.
|
437
425
|
*
|
438
426
|
* @private
|
439
|
-
* @param {Object} object The object to compare
|
440
|
-
* @param {Object} other The object to compare
|
427
|
+
* @param {Object} object The object to compare.
|
428
|
+
* @param {Object} other The other object to compare.
|
441
429
|
* @returns {number} Returns the sort order indicator for `object`.
|
442
430
|
*/
|
443
431
|
function compareAscending(object, other) {
|
@@ -445,16 +433,16 @@
|
|
445
433
|
}
|
446
434
|
|
447
435
|
/**
|
448
|
-
* Used by `_.sortByOrder` to compare multiple properties of
|
449
|
-
*
|
436
|
+
* Used by `_.sortByOrder` to compare multiple properties of a value to another
|
437
|
+
* and stable sort them.
|
450
438
|
*
|
451
|
-
* If `orders` is unspecified,
|
452
|
-
*
|
453
|
-
*
|
439
|
+
* If `orders` is unspecified, all valuess are sorted in ascending order. Otherwise,
|
440
|
+
* a value is sorted in ascending order if its corresponding order is "asc", and
|
441
|
+
* descending if "desc".
|
454
442
|
*
|
455
443
|
* @private
|
456
|
-
* @param {Object} object The object to compare
|
457
|
-
* @param {Object} other The object to compare
|
444
|
+
* @param {Object} object The object to compare.
|
445
|
+
* @param {Object} other The other object to compare.
|
458
446
|
* @param {boolean[]} orders The order to sort by for each property.
|
459
447
|
* @returns {number} Returns the sort order indicator for `object`.
|
460
448
|
*/
|
@@ -471,7 +459,8 @@
|
|
471
459
|
if (index >= ordersLength) {
|
472
460
|
return result;
|
473
461
|
}
|
474
|
-
|
462
|
+
var order = orders[index];
|
463
|
+
return result * ((order === 'asc' || order === true) ? 1 : -1);
|
475
464
|
}
|
476
465
|
}
|
477
466
|
// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
|
@@ -507,8 +496,25 @@
|
|
507
496
|
}
|
508
497
|
|
509
498
|
/**
|
510
|
-
* Used by `_.
|
511
|
-
*
|
499
|
+
* Used by `_.escapeRegExp` to escape characters for inclusion in compiled regexes.
|
500
|
+
*
|
501
|
+
* @private
|
502
|
+
* @param {string} chr The matched character to escape.
|
503
|
+
* @param {string} leadingChar The capture group for a leading character.
|
504
|
+
* @param {string} whitespaceChar The capture group for a whitespace character.
|
505
|
+
* @returns {string} Returns the escaped character.
|
506
|
+
*/
|
507
|
+
function escapeRegExpChar(chr, leadingChar, whitespaceChar) {
|
508
|
+
if (leadingChar) {
|
509
|
+
chr = regexpEscapes[chr];
|
510
|
+
} else if (whitespaceChar) {
|
511
|
+
chr = stringEscapes[chr];
|
512
|
+
}
|
513
|
+
return '\\' + chr;
|
514
|
+
}
|
515
|
+
|
516
|
+
/**
|
517
|
+
* Used by `_.template` to escape characters for inclusion in compiled string literals.
|
512
518
|
*
|
513
519
|
* @private
|
514
520
|
* @param {string} chr The matched character to escape.
|
@@ -740,9 +746,6 @@
|
|
740
746
|
objectProto = Object.prototype,
|
741
747
|
stringProto = String.prototype;
|
742
748
|
|
743
|
-
/** Used to detect DOM support. */
|
744
|
-
var document = (document = context.window) ? document.document : null;
|
745
|
-
|
746
749
|
/** Used to resolve the decompiled source of functions. */
|
747
750
|
var fnToString = Function.prototype.toString;
|
748
751
|
|
@@ -753,57 +756,42 @@
|
|
753
756
|
var idCounter = 0;
|
754
757
|
|
755
758
|
/**
|
756
|
-
* Used to resolve the [`toStringTag`](
|
759
|
+
* Used to resolve the [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
|
757
760
|
* of values.
|
758
761
|
*/
|
759
762
|
var objToString = objectProto.toString;
|
760
763
|
|
761
764
|
/** Used to restore the original `_` reference in `_.noConflict`. */
|
762
|
-
var oldDash =
|
765
|
+
var oldDash = root._;
|
763
766
|
|
764
767
|
/** Used to detect if a method is native. */
|
765
768
|
var reIsNative = RegExp('^' +
|
766
|
-
|
769
|
+
fnToString.call(hasOwnProperty).replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
|
767
770
|
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
|
768
771
|
);
|
769
772
|
|
770
773
|
/** Native method references. */
|
771
|
-
var ArrayBuffer =
|
772
|
-
bufferSlice = getNative(ArrayBuffer && new ArrayBuffer(0), 'slice'),
|
773
|
-
ceil = Math.ceil,
|
774
|
+
var ArrayBuffer = context.ArrayBuffer,
|
774
775
|
clearTimeout = context.clearTimeout,
|
775
|
-
floor = Math.floor,
|
776
|
-
getPrototypeOf = getNative(Object, 'getPrototypeOf'),
|
777
776
|
parseFloat = context.parseFloat,
|
778
|
-
|
777
|
+
pow = Math.pow,
|
779
778
|
propertyIsEnumerable = objectProto.propertyIsEnumerable,
|
780
779
|
Set = getNative(context, 'Set'),
|
781
780
|
setTimeout = context.setTimeout,
|
782
781
|
splice = arrayProto.splice,
|
783
|
-
Uint8Array =
|
782
|
+
Uint8Array = context.Uint8Array,
|
784
783
|
WeakMap = getNative(context, 'WeakMap');
|
785
784
|
|
786
|
-
/** Used to clone array buffers. */
|
787
|
-
var Float64Array = (function() {
|
788
|
-
// Safari 5 errors when using an array buffer to initialize a typed array
|
789
|
-
// where the array buffer's `byteLength` is not a multiple of the typed
|
790
|
-
// array's `BYTES_PER_ELEMENT`.
|
791
|
-
try {
|
792
|
-
var func = getNative(context, 'Float64Array'),
|
793
|
-
result = new func(new ArrayBuffer(10), 0, 1) && func;
|
794
|
-
} catch(e) {}
|
795
|
-
return result || null;
|
796
|
-
}());
|
797
|
-
|
798
785
|
/* Native method references for those with the same name as other `lodash` methods. */
|
799
|
-
var
|
786
|
+
var nativeCeil = Math.ceil,
|
787
|
+
nativeCreate = getNative(Object, 'create'),
|
788
|
+
nativeFloor = Math.floor,
|
800
789
|
nativeIsArray = getNative(Array, 'isArray'),
|
801
790
|
nativeIsFinite = context.isFinite,
|
802
791
|
nativeKeys = getNative(Object, 'keys'),
|
803
792
|
nativeMax = Math.max,
|
804
793
|
nativeMin = Math.min,
|
805
794
|
nativeNow = getNative(Date, 'now'),
|
806
|
-
nativeNumIsFinite = getNative(Number, 'isFinite'),
|
807
795
|
nativeParseInt = context.parseInt,
|
808
796
|
nativeRandom = Math.random;
|
809
797
|
|
@@ -816,11 +804,8 @@
|
|
816
804
|
MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
|
817
805
|
HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
|
818
806
|
|
819
|
-
/** Used as the size, in bytes, of each `Float64Array` element. */
|
820
|
-
var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0;
|
821
|
-
|
822
807
|
/**
|
823
|
-
* Used as the [maximum length](
|
808
|
+
* Used as the [maximum length](http://ecma-international.org/ecma-262/6.0/#sec-number.max_safe_integer)
|
824
809
|
* of an array-like value.
|
825
810
|
*/
|
826
811
|
var MAX_SAFE_INTEGER = 9007199254740991;
|
@@ -838,7 +823,7 @@
|
|
838
823
|
ctorByTag[int8Tag] = context.Int8Array;
|
839
824
|
ctorByTag[int16Tag] = context.Int16Array;
|
840
825
|
ctorByTag[int32Tag] = context.Int32Array;
|
841
|
-
ctorByTag[uint8Tag] =
|
826
|
+
ctorByTag[uint8Tag] = Uint8Array;
|
842
827
|
ctorByTag[uint8ClampedTag] = context.Uint8ClampedArray;
|
843
828
|
ctorByTag[uint16Tag] = context.Uint16Array;
|
844
829
|
ctorByTag[uint32Tag] = context.Uint32Array;
|
@@ -864,15 +849,16 @@
|
|
864
849
|
/**
|
865
850
|
* Creates a `lodash` object which wraps `value` to enable implicit chaining.
|
866
851
|
* Methods that operate on and return arrays, collections, and functions can
|
867
|
-
* be chained together. Methods that
|
868
|
-
* automatically end the chain returning the unwrapped
|
869
|
-
* may be enabled using `_.chain`. The execution of
|
870
|
-
* that is, execution is deferred until `_#value`
|
871
|
-
* called.
|
852
|
+
* be chained together. Methods that retrieve a single value or may return a
|
853
|
+
* primitive value will automatically end the chain returning the unwrapped
|
854
|
+
* value. Explicit chaining may be enabled using `_.chain`. The execution of
|
855
|
+
* chained methods is lazy, that is, execution is deferred until `_#value`
|
856
|
+
* is implicitly or explicitly called.
|
872
857
|
*
|
873
858
|
* Lazy evaluation allows several methods to support shortcut fusion. Shortcut
|
874
|
-
* fusion is an optimization
|
875
|
-
*
|
859
|
+
* fusion is an optimization strategy which merge iteratee calls; this can help
|
860
|
+
* to avoid the creation of intermediate data structures and greatly reduce the
|
861
|
+
* number of iteratee executions.
|
876
862
|
*
|
877
863
|
* Chaining is supported in custom builds as long as the `_#value` method is
|
878
864
|
* directly or indirectly included in the build.
|
@@ -895,36 +881,37 @@
|
|
895
881
|
* The chainable wrapper methods are:
|
896
882
|
* `after`, `ary`, `assign`, `at`, `before`, `bind`, `bindAll`, `bindKey`,
|
897
883
|
* `callback`, `chain`, `chunk`, `commit`, `compact`, `concat`, `constant`,
|
898
|
-
* `countBy`, `create`, `curry`, `debounce`, `defaults`, `
|
899
|
-
* `
|
900
|
-
* `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,
|
901
|
-
* `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
|
902
|
-
* `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
|
903
|
-
* `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,
|
904
|
-
* `memoize`, `merge`, `method`, `methodOf`, `mixin`,
|
905
|
-
* `
|
906
|
-
* `
|
907
|
-
* `
|
908
|
-
* `
|
909
|
-
* `
|
910
|
-
* `
|
911
|
-
* `
|
912
|
-
* `wrap`, `xor`, `zip`, `zipObject`, `zipWith`
|
884
|
+
* `countBy`, `create`, `curry`, `debounce`, `defaults`, `defaultsDeep`,
|
885
|
+
* `defer`, `delay`, `difference`, `drop`, `dropRight`, `dropRightWhile`,
|
886
|
+
* `dropWhile`, `fill`, `filter`, `flatten`, `flattenDeep`, `flow`, `flowRight`,
|
887
|
+
* `forEach`, `forEachRight`, `forIn`, `forInRight`, `forOwn`, `forOwnRight`,
|
888
|
+
* `functions`, `groupBy`, `indexBy`, `initial`, `intersection`, `invert`,
|
889
|
+
* `invoke`, `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`,
|
890
|
+
* `matchesProperty`, `memoize`, `merge`, `method`, `methodOf`, `mixin`,
|
891
|
+
* `modArgs`, `negate`, `omit`, `once`, `pairs`, `partial`, `partialRight`,
|
892
|
+
* `partition`, `pick`, `plant`, `pluck`, `property`, `propertyOf`, `pull`,
|
893
|
+
* `pullAt`, `push`, `range`, `rearg`, `reject`, `remove`, `rest`, `restParam`,
|
894
|
+
* `reverse`, `set`, `shuffle`, `slice`, `sort`, `sortBy`, `sortByAll`,
|
895
|
+
* `sortByOrder`, `splice`, `spread`, `take`, `takeRight`, `takeRightWhile`,
|
896
|
+
* `takeWhile`, `tap`, `throttle`, `thru`, `times`, `toArray`, `toPlainObject`,
|
897
|
+
* `transform`, `union`, `uniq`, `unshift`, `unzip`, `unzipWith`, `values`,
|
898
|
+
* `valuesIn`, `where`, `without`, `wrap`, `xor`, `zip`, `zipObject`, `zipWith`
|
913
899
|
*
|
914
900
|
* The wrapper methods that are **not** chainable by default are:
|
915
|
-
* `add`, `attempt`, `camelCase`, `capitalize`, `
|
916
|
-
* `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,
|
917
|
-
* `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,
|
918
|
-
* `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,
|
919
|
-
* `
|
920
|
-
* `
|
921
|
-
* `
|
922
|
-
* `
|
923
|
-
* `
|
924
|
-
* `
|
925
|
-
* `
|
926
|
-
* `
|
927
|
-
* `
|
901
|
+
* `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clone`, `cloneDeep`,
|
902
|
+
* `deburr`, `endsWith`, `escape`, `escapeRegExp`, `every`, `find`, `findIndex`,
|
903
|
+
* `findKey`, `findLast`, `findLastIndex`, `findLastKey`, `findWhere`, `first`,
|
904
|
+
* `floor`, `get`, `gt`, `gte`, `has`, `identity`, `includes`, `indexOf`,
|
905
|
+
* `inRange`, `isArguments`, `isArray`, `isBoolean`, `isDate`, `isElement`,
|
906
|
+
* `isEmpty`, `isEqual`, `isError`, `isFinite` `isFunction`, `isMatch`,
|
907
|
+
* `isNative`, `isNaN`, `isNull`, `isNumber`, `isObject`, `isPlainObject`,
|
908
|
+
* `isRegExp`, `isString`, `isUndefined`, `isTypedArray`, `join`, `kebabCase`,
|
909
|
+
* `last`, `lastIndexOf`, `lt`, `lte`, `max`, `min`, `noConflict`, `noop`,
|
910
|
+
* `now`, `pad`, `padLeft`, `padRight`, `parseInt`, `pop`, `random`, `reduce`,
|
911
|
+
* `reduceRight`, `repeat`, `result`, `round`, `runInContext`, `shift`, `size`,
|
912
|
+
* `snakeCase`, `some`, `sortedIndex`, `sortedLastIndex`, `startCase`,
|
913
|
+
* `startsWith`, `sum`, `template`, `trim`, `trimLeft`, `trimRight`, `trunc`,
|
914
|
+
* `unescape`, `uniqueId`, `value`, and `words`
|
928
915
|
*
|
929
916
|
* The wrapper method `sample` will return a wrapped value when `n` is provided,
|
930
917
|
* otherwise an unwrapped value is returned.
|
@@ -1007,15 +994,6 @@
|
|
1007
994
|
Ctor.prototype = { 'valueOf': x, 'y': x };
|
1008
995
|
for (var key in new Ctor) { props.push(key); }
|
1009
996
|
|
1010
|
-
/**
|
1011
|
-
* Detect if the `toStringTag` of `arguments` objects is resolvable
|
1012
|
-
* (all but Firefox < 4, IE < 9).
|
1013
|
-
*
|
1014
|
-
* @memberOf _.support
|
1015
|
-
* @type boolean
|
1016
|
-
*/
|
1017
|
-
support.argsTag = objToString.call(arguments) == argsTag;
|
1018
|
-
|
1019
997
|
/**
|
1020
998
|
* Detect if `name` or `message` properties of `Error.prototype` are
|
1021
999
|
* enumerable by default (IE < 9, Safari < 5.1).
|
@@ -1039,14 +1017,6 @@
|
|
1039
1017
|
*/
|
1040
1018
|
support.enumPrototypes = propertyIsEnumerable.call(Ctor, 'prototype');
|
1041
1019
|
|
1042
|
-
/**
|
1043
|
-
* Detect if the `toStringTag` of DOM nodes is resolvable (all but IE < 9).
|
1044
|
-
*
|
1045
|
-
* @memberOf _.support
|
1046
|
-
* @type boolean
|
1047
|
-
*/
|
1048
|
-
support.nodeTag = objToString.call(document) != objectTag;
|
1049
|
-
|
1050
1020
|
/**
|
1051
1021
|
* Detect if properties shadowing those on `Object.prototype` are non-enumerable.
|
1052
1022
|
*
|
@@ -1091,18 +1061,6 @@
|
|
1091
1061
|
* @type boolean
|
1092
1062
|
*/
|
1093
1063
|
support.unindexedChars = ('x'[0] + Object('x')[0]) != 'xx';
|
1094
|
-
|
1095
|
-
/**
|
1096
|
-
* Detect if the DOM is supported.
|
1097
|
-
*
|
1098
|
-
* @memberOf _.support
|
1099
|
-
* @type boolean
|
1100
|
-
*/
|
1101
|
-
try {
|
1102
|
-
support.dom = document.createDocumentFragment().nodeType === 11;
|
1103
|
-
} catch(e) {
|
1104
|
-
support.dom = false;
|
1105
|
-
}
|
1106
1064
|
}(1, 0));
|
1107
1065
|
|
1108
1066
|
/**
|
@@ -1176,13 +1134,12 @@
|
|
1176
1134
|
*/
|
1177
1135
|
function LazyWrapper(value) {
|
1178
1136
|
this.__wrapped__ = value;
|
1179
|
-
this.__actions__ =
|
1137
|
+
this.__actions__ = [];
|
1180
1138
|
this.__dir__ = 1;
|
1181
|
-
this.__dropCount__ = 0;
|
1182
1139
|
this.__filtered__ = false;
|
1183
|
-
this.__iteratees__ =
|
1140
|
+
this.__iteratees__ = [];
|
1184
1141
|
this.__takeCount__ = POSITIVE_INFINITY;
|
1185
|
-
this.__views__ =
|
1142
|
+
this.__views__ = [];
|
1186
1143
|
}
|
1187
1144
|
|
1188
1145
|
/**
|
@@ -1194,17 +1151,13 @@
|
|
1194
1151
|
* @returns {Object} Returns the cloned `LazyWrapper` object.
|
1195
1152
|
*/
|
1196
1153
|
function lazyClone() {
|
1197
|
-
var
|
1198
|
-
|
1199
|
-
views = this.__views__,
|
1200
|
-
result = new LazyWrapper(this.__wrapped__);
|
1201
|
-
|
1202
|
-
result.__actions__ = actions ? arrayCopy(actions) : null;
|
1154
|
+
var result = new LazyWrapper(this.__wrapped__);
|
1155
|
+
result.__actions__ = arrayCopy(this.__actions__);
|
1203
1156
|
result.__dir__ = this.__dir__;
|
1204
1157
|
result.__filtered__ = this.__filtered__;
|
1205
|
-
result.__iteratees__ =
|
1158
|
+
result.__iteratees__ = arrayCopy(this.__iteratees__);
|
1206
1159
|
result.__takeCount__ = this.__takeCount__;
|
1207
|
-
result.__views__ =
|
1160
|
+
result.__views__ = arrayCopy(this.__views__);
|
1208
1161
|
return result;
|
1209
1162
|
}
|
1210
1163
|
|
@@ -1237,22 +1190,25 @@
|
|
1237
1190
|
* @returns {*} Returns the unwrapped value.
|
1238
1191
|
*/
|
1239
1192
|
function lazyValue() {
|
1240
|
-
var array = this.__wrapped__.value()
|
1241
|
-
|
1242
|
-
|
1243
|
-
}
|
1244
|
-
var dir = this.__dir__,
|
1193
|
+
var array = this.__wrapped__.value(),
|
1194
|
+
dir = this.__dir__,
|
1195
|
+
isArr = isArray(array),
|
1245
1196
|
isRight = dir < 0,
|
1246
|
-
|
1197
|
+
arrLength = isArr ? array.length : 0,
|
1198
|
+
view = getView(0, arrLength, this.__views__),
|
1247
1199
|
start = view.start,
|
1248
1200
|
end = view.end,
|
1249
1201
|
length = end - start,
|
1250
1202
|
index = isRight ? end : (start - 1),
|
1251
|
-
takeCount = nativeMin(length, this.__takeCount__),
|
1252
1203
|
iteratees = this.__iteratees__,
|
1253
|
-
iterLength = iteratees
|
1204
|
+
iterLength = iteratees.length,
|
1254
1205
|
resIndex = 0,
|
1255
|
-
|
1206
|
+
takeCount = nativeMin(length, this.__takeCount__);
|
1207
|
+
|
1208
|
+
if (!isArr || arrLength < LARGE_ARRAY_SIZE || (arrLength == length && takeCount == length)) {
|
1209
|
+
return baseWrapperValue((isRight && isArr) ? array.reverse() : array, this.__actions__);
|
1210
|
+
}
|
1211
|
+
var result = [];
|
1256
1212
|
|
1257
1213
|
outer:
|
1258
1214
|
while (length-- && resIndex < takeCount) {
|
@@ -1264,30 +1220,16 @@
|
|
1264
1220
|
while (++iterIndex < iterLength) {
|
1265
1221
|
var data = iteratees[iterIndex],
|
1266
1222
|
iteratee = data.iteratee,
|
1267
|
-
type = data.type
|
1223
|
+
type = data.type,
|
1224
|
+
computed = iteratee(value);
|
1268
1225
|
|
1269
|
-
if (type ==
|
1270
|
-
|
1271
|
-
|
1272
|
-
|
1273
|
-
|
1274
|
-
|
1275
|
-
|
1276
|
-
var limit = data.limit;
|
1277
|
-
if (!(data.done = limit > -1 ? (data.count++ >= limit) : !iteratee(value))) {
|
1278
|
-
continue outer;
|
1279
|
-
}
|
1280
|
-
}
|
1281
|
-
} else {
|
1282
|
-
var computed = iteratee(value);
|
1283
|
-
if (type == LAZY_MAP_FLAG) {
|
1284
|
-
value = computed;
|
1285
|
-
} else if (!computed) {
|
1286
|
-
if (type == LAZY_FILTER_FLAG) {
|
1287
|
-
continue outer;
|
1288
|
-
} else {
|
1289
|
-
break outer;
|
1290
|
-
}
|
1226
|
+
if (type == LAZY_MAP_FLAG) {
|
1227
|
+
value = computed;
|
1228
|
+
} else if (!computed) {
|
1229
|
+
if (type == LAZY_FILTER_FLAG) {
|
1230
|
+
continue outer;
|
1231
|
+
} else {
|
1232
|
+
break outer;
|
1291
1233
|
}
|
1292
1234
|
}
|
1293
1235
|
}
|
@@ -1419,6 +1361,30 @@
|
|
1419
1361
|
|
1420
1362
|
/*------------------------------------------------------------------------*/
|
1421
1363
|
|
1364
|
+
/**
|
1365
|
+
* Creates a new array joining `array` with `other`.
|
1366
|
+
*
|
1367
|
+
* @private
|
1368
|
+
* @param {Array} array The array to join.
|
1369
|
+
* @param {Array} other The other array to join.
|
1370
|
+
* @returns {Array} Returns the new concatenated array.
|
1371
|
+
*/
|
1372
|
+
function arrayConcat(array, other) {
|
1373
|
+
var index = -1,
|
1374
|
+
length = array.length,
|
1375
|
+
othIndex = -1,
|
1376
|
+
othLength = other.length,
|
1377
|
+
result = Array(length + othLength);
|
1378
|
+
|
1379
|
+
while (++index < length) {
|
1380
|
+
result[index] = array[index];
|
1381
|
+
}
|
1382
|
+
while (++othIndex < othLength) {
|
1383
|
+
result[index++] = other[othIndex];
|
1384
|
+
}
|
1385
|
+
return result;
|
1386
|
+
}
|
1387
|
+
|
1422
1388
|
/**
|
1423
1389
|
* Copies the values of `source` to `array`.
|
1424
1390
|
*
|
@@ -1574,6 +1540,25 @@
|
|
1574
1540
|
return result;
|
1575
1541
|
}
|
1576
1542
|
|
1543
|
+
/**
|
1544
|
+
* Appends the elements of `values` to `array`.
|
1545
|
+
*
|
1546
|
+
* @private
|
1547
|
+
* @param {Array} array The array to modify.
|
1548
|
+
* @param {Array} values The values to append.
|
1549
|
+
* @returns {Array} Returns `array`.
|
1550
|
+
*/
|
1551
|
+
function arrayPush(array, values) {
|
1552
|
+
var index = -1,
|
1553
|
+
length = values.length,
|
1554
|
+
offset = array.length;
|
1555
|
+
|
1556
|
+
while (++index < length) {
|
1557
|
+
array[offset + index] = values[index];
|
1558
|
+
}
|
1559
|
+
return array;
|
1560
|
+
}
|
1561
|
+
|
1577
1562
|
/**
|
1578
1563
|
* A specialized version of `_.reduce` for arrays without support for callback
|
1579
1564
|
* shorthands and `this` binding.
|
@@ -1645,18 +1630,20 @@
|
|
1645
1630
|
}
|
1646
1631
|
|
1647
1632
|
/**
|
1648
|
-
* A specialized version of `_.sum` for arrays without support for
|
1633
|
+
* A specialized version of `_.sum` for arrays without support for callback
|
1634
|
+
* shorthands and `this` binding..
|
1649
1635
|
*
|
1650
1636
|
* @private
|
1651
1637
|
* @param {Array} array The array to iterate over.
|
1638
|
+
* @param {Function} iteratee The function invoked per iteration.
|
1652
1639
|
* @returns {number} Returns the sum.
|
1653
1640
|
*/
|
1654
|
-
function arraySum(array) {
|
1641
|
+
function arraySum(array, iteratee) {
|
1655
1642
|
var length = array.length,
|
1656
1643
|
result = 0;
|
1657
1644
|
|
1658
1645
|
while (length--) {
|
1659
|
-
result += +array[length] || 0;
|
1646
|
+
result += +iteratee(array[length]) || 0;
|
1660
1647
|
}
|
1661
1648
|
return result;
|
1662
1649
|
}
|
@@ -1863,7 +1850,7 @@
|
|
1863
1850
|
: (object ? value : {});
|
1864
1851
|
}
|
1865
1852
|
}
|
1866
|
-
// Check for circular references and return corresponding clone.
|
1853
|
+
// Check for circular references and return its corresponding clone.
|
1867
1854
|
stackA || (stackA = []);
|
1868
1855
|
stackB || (stackB = []);
|
1869
1856
|
|
@@ -1898,7 +1885,7 @@
|
|
1898
1885
|
if (isObject(prototype)) {
|
1899
1886
|
object.prototype = prototype;
|
1900
1887
|
var result = new object;
|
1901
|
-
object.prototype =
|
1888
|
+
object.prototype = undefined;
|
1902
1889
|
}
|
1903
1890
|
return result || {};
|
1904
1891
|
};
|
@@ -1940,7 +1927,7 @@
|
|
1940
1927
|
var index = -1,
|
1941
1928
|
indexOf = getIndexOf(),
|
1942
1929
|
isCommon = indexOf == baseIndexOf,
|
1943
|
-
cache = (isCommon && values.length >=
|
1930
|
+
cache = (isCommon && values.length >= LARGE_ARRAY_SIZE) ? createCache(values) : null,
|
1944
1931
|
valuesLength = values.length;
|
1945
1932
|
|
1946
1933
|
if (cache) {
|
@@ -2116,13 +2103,14 @@
|
|
2116
2103
|
* @param {Array} array The array to flatten.
|
2117
2104
|
* @param {boolean} [isDeep] Specify a deep flatten.
|
2118
2105
|
* @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
|
2106
|
+
* @param {Array} [result=[]] The initial result value.
|
2119
2107
|
* @returns {Array} Returns the new flattened array.
|
2120
2108
|
*/
|
2121
|
-
function baseFlatten(array, isDeep, isStrict) {
|
2109
|
+
function baseFlatten(array, isDeep, isStrict, result) {
|
2110
|
+
result || (result = []);
|
2111
|
+
|
2122
2112
|
var index = -1,
|
2123
|
-
length = array.length
|
2124
|
-
resIndex = -1,
|
2125
|
-
result = [];
|
2113
|
+
length = array.length;
|
2126
2114
|
|
2127
2115
|
while (++index < length) {
|
2128
2116
|
var value = array[index];
|
@@ -2130,16 +2118,12 @@
|
|
2130
2118
|
(isStrict || isArray(value) || isArguments(value))) {
|
2131
2119
|
if (isDeep) {
|
2132
2120
|
// Recursively flatten arrays (susceptible to call stack limits).
|
2133
|
-
|
2134
|
-
}
|
2135
|
-
|
2136
|
-
valLength = value.length;
|
2137
|
-
|
2138
|
-
while (++valIndex < valLength) {
|
2139
|
-
result[++resIndex] = value[valIndex];
|
2121
|
+
baseFlatten(value, isDeep, isStrict, result);
|
2122
|
+
} else {
|
2123
|
+
arrayPush(result, value);
|
2140
2124
|
}
|
2141
2125
|
} else if (!isStrict) {
|
2142
|
-
result[
|
2126
|
+
result[result.length] = value;
|
2143
2127
|
}
|
2144
2128
|
}
|
2145
2129
|
return result;
|
@@ -2496,7 +2480,7 @@
|
|
2496
2480
|
* @private
|
2497
2481
|
* @param {Object} object The destination object.
|
2498
2482
|
* @param {Object} source The source object.
|
2499
|
-
* @param {Function} [customizer] The function to customize
|
2483
|
+
* @param {Function} [customizer] The function to customize merged values.
|
2500
2484
|
* @param {Array} [stackA=[]] Tracks traversed source objects.
|
2501
2485
|
* @param {Array} [stackB=[]] Associates values with source counterparts.
|
2502
2486
|
* @returns {Object} Returns `object`.
|
@@ -2506,7 +2490,7 @@
|
|
2506
2490
|
return object;
|
2507
2491
|
}
|
2508
2492
|
var isSrcArr = isArrayLike(source) && (isArray(source) || isTypedArray(source)),
|
2509
|
-
props = isSrcArr ?
|
2493
|
+
props = isSrcArr ? undefined : keys(source);
|
2510
2494
|
|
2511
2495
|
arrayEach(props || source, function(srcValue, key) {
|
2512
2496
|
if (props) {
|
@@ -2545,7 +2529,7 @@
|
|
2545
2529
|
* @param {Object} source The source object.
|
2546
2530
|
* @param {string} key The key of the value to merge.
|
2547
2531
|
* @param {Function} mergeFunc The function to merge values.
|
2548
|
-
* @param {Function} [customizer] The function to customize
|
2532
|
+
* @param {Function} [customizer] The function to customize merged values.
|
2549
2533
|
* @param {Array} [stackA=[]] Tracks traversed source objects.
|
2550
2534
|
* @param {Array} [stackB=[]] Associates values with source counterparts.
|
2551
2535
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
@@ -2652,7 +2636,7 @@
|
|
2652
2636
|
* @returns {number} Returns the random number.
|
2653
2637
|
*/
|
2654
2638
|
function baseRandom(min, max) {
|
2655
|
-
return min +
|
2639
|
+
return min + nativeFloor(nativeRandom() * (max - min + 1));
|
2656
2640
|
}
|
2657
2641
|
|
2658
2642
|
/**
|
@@ -2818,7 +2802,7 @@
|
|
2818
2802
|
indexOf = getIndexOf(),
|
2819
2803
|
length = array.length,
|
2820
2804
|
isCommon = indexOf == baseIndexOf,
|
2821
|
-
isLarge = isCommon && length >=
|
2805
|
+
isLarge = isCommon && length >= LARGE_ARRAY_SIZE,
|
2822
2806
|
seen = isLarge ? createCache() : null,
|
2823
2807
|
result = [];
|
2824
2808
|
|
@@ -2917,11 +2901,8 @@
|
|
2917
2901
|
length = actions.length;
|
2918
2902
|
|
2919
2903
|
while (++index < length) {
|
2920
|
-
var
|
2921
|
-
|
2922
|
-
|
2923
|
-
push.apply(args, action.args);
|
2924
|
-
result = action.func.apply(action.thisArg, args);
|
2904
|
+
var action = actions[index];
|
2905
|
+
result = action.func.apply(action.thisArg, arrayPush([result], action.args));
|
2925
2906
|
}
|
2926
2907
|
return result;
|
2927
2908
|
}
|
@@ -2980,7 +2961,7 @@
|
|
2980
2961
|
valIsUndef = value === undefined;
|
2981
2962
|
|
2982
2963
|
while (low < high) {
|
2983
|
-
var mid =
|
2964
|
+
var mid = nativeFloor((low + high) / 2),
|
2984
2965
|
computed = iteratee(array[mid]),
|
2985
2966
|
isDef = computed !== undefined,
|
2986
2967
|
isReflexive = computed === computed;
|
@@ -3049,26 +3030,11 @@
|
|
3049
3030
|
* @returns {ArrayBuffer} Returns the cloned array buffer.
|
3050
3031
|
*/
|
3051
3032
|
function bufferClone(buffer) {
|
3052
|
-
|
3053
|
-
|
3054
|
-
if (!bufferSlice) {
|
3055
|
-
// PhantomJS has `ArrayBuffer` and `Uint8Array` but not `Float64Array`.
|
3056
|
-
bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) {
|
3057
|
-
var byteLength = buffer.byteLength,
|
3058
|
-
floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0,
|
3059
|
-
offset = floatLength * FLOAT64_BYTES_PER_ELEMENT,
|
3060
|
-
result = new ArrayBuffer(byteLength);
|
3033
|
+
var result = new ArrayBuffer(buffer.byteLength),
|
3034
|
+
view = new Uint8Array(result);
|
3061
3035
|
|
3062
|
-
|
3063
|
-
|
3064
|
-
view.set(new Float64Array(buffer, 0, floatLength));
|
3065
|
-
}
|
3066
|
-
if (byteLength != offset) {
|
3067
|
-
view = new Uint8Array(result, offset);
|
3068
|
-
view.set(new Uint8Array(buffer, offset));
|
3069
|
-
}
|
3070
|
-
return result;
|
3071
|
-
};
|
3036
|
+
view.set(new Uint8Array(buffer));
|
3037
|
+
return result;
|
3072
3038
|
}
|
3073
3039
|
|
3074
3040
|
/**
|
@@ -3087,7 +3053,7 @@
|
|
3087
3053
|
argsLength = nativeMax(args.length - holdersLength, 0),
|
3088
3054
|
leftIndex = -1,
|
3089
3055
|
leftLength = partials.length,
|
3090
|
-
result = Array(
|
3056
|
+
result = Array(leftLength + argsLength);
|
3091
3057
|
|
3092
3058
|
while (++leftIndex < leftLength) {
|
3093
3059
|
result[leftIndex] = partials[leftIndex];
|
@@ -3134,12 +3100,7 @@
|
|
3134
3100
|
}
|
3135
3101
|
|
3136
3102
|
/**
|
3137
|
-
* Creates a
|
3138
|
-
* object composed from the results of running each element in the collection
|
3139
|
-
* through an iteratee.
|
3140
|
-
*
|
3141
|
-
* **Note:** This function is used to create `_.countBy`, `_.groupBy`, `_.indexBy`,
|
3142
|
-
* and `_.partition`.
|
3103
|
+
* Creates a `_.countBy`, `_.groupBy`, `_.indexBy`, or `_.partition` function.
|
3143
3104
|
*
|
3144
3105
|
* @private
|
3145
3106
|
* @param {Function} setter The function to set keys and values of the accumulator object.
|
@@ -3169,10 +3130,7 @@
|
|
3169
3130
|
}
|
3170
3131
|
|
3171
3132
|
/**
|
3172
|
-
* Creates a
|
3173
|
-
* destination object.
|
3174
|
-
*
|
3175
|
-
* **Note:** This function is used to create `_.assign`, `_.defaults`, and `_.merge`.
|
3133
|
+
* Creates a `_.assign`, `_.defaults`, or `_.merge` function.
|
3176
3134
|
*
|
3177
3135
|
* @private
|
3178
3136
|
* @param {Function} assigner The function to assign values.
|
@@ -3283,9 +3241,9 @@
|
|
3283
3241
|
* @param {Array} [values] The values to cache.
|
3284
3242
|
* @returns {null|Object} Returns the new cache object if `Set` is supported, else `null`.
|
3285
3243
|
*/
|
3286
|
-
|
3287
|
-
return new SetCache(values);
|
3288
|
-
}
|
3244
|
+
function createCache(values) {
|
3245
|
+
return (nativeCreate && Set) ? new SetCache(values) : null;
|
3246
|
+
}
|
3289
3247
|
|
3290
3248
|
/**
|
3291
3249
|
* Creates a function that produces compound words out of the words in a
|
@@ -3320,7 +3278,7 @@
|
|
3320
3278
|
function createCtorWrapper(Ctor) {
|
3321
3279
|
return function() {
|
3322
3280
|
// Use a `switch` statement to work with class constructors.
|
3323
|
-
// See
|
3281
|
+
// See http://ecma-international.org/ecma-262/6.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
|
3324
3282
|
// for more details.
|
3325
3283
|
var args = arguments;
|
3326
3284
|
switch (args.length) {
|
@@ -3330,6 +3288,8 @@
|
|
3330
3288
|
case 3: return new Ctor(args[0], args[1], args[2]);
|
3331
3289
|
case 4: return new Ctor(args[0], args[1], args[2], args[3]);
|
3332
3290
|
case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
|
3291
|
+
case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
|
3292
|
+
case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
|
3333
3293
|
}
|
3334
3294
|
var thisBinding = baseCreate(Ctor.prototype),
|
3335
3295
|
result = Ctor.apply(thisBinding, args);
|
@@ -3350,15 +3310,34 @@
|
|
3350
3310
|
function createCurry(flag) {
|
3351
3311
|
function curryFunc(func, arity, guard) {
|
3352
3312
|
if (guard && isIterateeCall(func, arity, guard)) {
|
3353
|
-
arity =
|
3313
|
+
arity = undefined;
|
3354
3314
|
}
|
3355
|
-
var result = createWrapper(func, flag,
|
3315
|
+
var result = createWrapper(func, flag, undefined, undefined, undefined, undefined, undefined, arity);
|
3356
3316
|
result.placeholder = curryFunc.placeholder;
|
3357
3317
|
return result;
|
3358
3318
|
}
|
3359
3319
|
return curryFunc;
|
3360
3320
|
}
|
3361
3321
|
|
3322
|
+
/**
|
3323
|
+
* Creates a `_.defaults` or `_.defaultsDeep` function.
|
3324
|
+
*
|
3325
|
+
* @private
|
3326
|
+
* @param {Function} assigner The function to assign values.
|
3327
|
+
* @param {Function} customizer The function to customize assigned values.
|
3328
|
+
* @returns {Function} Returns the new defaults function.
|
3329
|
+
*/
|
3330
|
+
function createDefaults(assigner, customizer) {
|
3331
|
+
return restParam(function(args) {
|
3332
|
+
var object = args[0];
|
3333
|
+
if (object == null) {
|
3334
|
+
return object;
|
3335
|
+
}
|
3336
|
+
args.push(customizer);
|
3337
|
+
return assigner.apply(undefined, args);
|
3338
|
+
});
|
3339
|
+
}
|
3340
|
+
|
3362
3341
|
/**
|
3363
3342
|
* Creates a `_.max` or `_.min` function.
|
3364
3343
|
*
|
@@ -3370,11 +3349,11 @@
|
|
3370
3349
|
function createExtremum(comparator, exValue) {
|
3371
3350
|
return function(collection, iteratee, thisArg) {
|
3372
3351
|
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
|
3373
|
-
iteratee =
|
3352
|
+
iteratee = undefined;
|
3374
3353
|
}
|
3375
3354
|
iteratee = getCallback(iteratee, thisArg, 3);
|
3376
3355
|
if (iteratee.length == 1) {
|
3377
|
-
collection = toIterable(collection);
|
3356
|
+
collection = isArray(collection) ? collection : toIterable(collection);
|
3378
3357
|
var result = arrayExtremum(collection, iteratee, comparator, exValue);
|
3379
3358
|
if (!(collection.length && result === exValue)) {
|
3380
3359
|
return result;
|
@@ -3455,7 +3434,7 @@
|
|
3455
3434
|
throw new TypeError(FUNC_ERROR_TEXT);
|
3456
3435
|
}
|
3457
3436
|
if (!wrapper && LodashWrapper.prototype.thru && getFuncName(func) == 'wrapper') {
|
3458
|
-
wrapper = new LodashWrapper([]);
|
3437
|
+
wrapper = new LodashWrapper([], true);
|
3459
3438
|
}
|
3460
3439
|
}
|
3461
3440
|
index = wrapper ? -1 : length;
|
@@ -3463,7 +3442,7 @@
|
|
3463
3442
|
func = funcs[index];
|
3464
3443
|
|
3465
3444
|
var funcName = getFuncName(func),
|
3466
|
-
data = funcName == 'wrapper' ? getData(func) :
|
3445
|
+
data = funcName == 'wrapper' ? getData(func) : undefined;
|
3467
3446
|
|
3468
3447
|
if (data && isLaziable(data[0]) && data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) && !data[4].length && data[9] == 1) {
|
3469
3448
|
wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
|
@@ -3472,12 +3451,14 @@
|
|
3472
3451
|
}
|
3473
3452
|
}
|
3474
3453
|
return function() {
|
3475
|
-
var args = arguments
|
3476
|
-
|
3477
|
-
|
3454
|
+
var args = arguments,
|
3455
|
+
value = args[0];
|
3456
|
+
|
3457
|
+
if (wrapper && args.length == 1 && isArray(value) && value.length >= LARGE_ARRAY_SIZE) {
|
3458
|
+
return wrapper.plant(value).value();
|
3478
3459
|
}
|
3479
3460
|
var index = 0,
|
3480
|
-
result = length ? funcs[index].apply(this, args) :
|
3461
|
+
result = length ? funcs[index].apply(this, args) : value;
|
3481
3462
|
|
3482
3463
|
while (++index < length) {
|
3483
3464
|
result = funcs[index].call(this, result);
|
@@ -3581,7 +3562,7 @@
|
|
3581
3562
|
function createPartial(flag) {
|
3582
3563
|
var partialFunc = restParam(function(func, partials) {
|
3583
3564
|
var holders = replaceHolders(partials, partialFunc.placeholder);
|
3584
|
-
return createWrapper(func, flag,
|
3565
|
+
return createWrapper(func, flag, undefined, partials, holders);
|
3585
3566
|
});
|
3586
3567
|
return partialFunc;
|
3587
3568
|
}
|
@@ -3627,7 +3608,7 @@
|
|
3627
3608
|
isCurry = bitmask & CURRY_FLAG,
|
3628
3609
|
isCurryBound = bitmask & CURRY_BOUND_FLAG,
|
3629
3610
|
isCurryRight = bitmask & CURRY_RIGHT_FLAG,
|
3630
|
-
Ctor = isBindKey ?
|
3611
|
+
Ctor = isBindKey ? undefined : createCtorWrapper(func);
|
3631
3612
|
|
3632
3613
|
function wrapper() {
|
3633
3614
|
// Avoid `arguments` object use disqualifying optimizations by
|
@@ -3651,12 +3632,12 @@
|
|
3651
3632
|
|
3652
3633
|
length -= argsHolders.length;
|
3653
3634
|
if (length < arity) {
|
3654
|
-
var newArgPos = argPos ? arrayCopy(argPos) :
|
3635
|
+
var newArgPos = argPos ? arrayCopy(argPos) : undefined,
|
3655
3636
|
newArity = nativeMax(arity - length, 0),
|
3656
|
-
newsHolders = isCurry ? argsHolders :
|
3657
|
-
newHoldersRight = isCurry ?
|
3658
|
-
newPartials = isCurry ? args :
|
3659
|
-
newPartialsRight = isCurry ?
|
3637
|
+
newsHolders = isCurry ? argsHolders : undefined,
|
3638
|
+
newHoldersRight = isCurry ? undefined : argsHolders,
|
3639
|
+
newPartials = isCurry ? args : undefined,
|
3640
|
+
newPartialsRight = isCurry ? undefined : args;
|
3660
3641
|
|
3661
3642
|
bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
|
3662
3643
|
bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
|
@@ -3710,7 +3691,7 @@
|
|
3710
3691
|
}
|
3711
3692
|
var padLength = length - strLength;
|
3712
3693
|
chars = chars == null ? ' ' : (chars + '');
|
3713
|
-
return repeat(chars,
|
3694
|
+
return repeat(chars, nativeCeil(padLength / chars.length)).slice(0, padLength);
|
3714
3695
|
}
|
3715
3696
|
|
3716
3697
|
/**
|
@@ -3736,7 +3717,7 @@
|
|
3736
3717
|
argsLength = arguments.length,
|
3737
3718
|
leftIndex = -1,
|
3738
3719
|
leftLength = partials.length,
|
3739
|
-
args = Array(
|
3720
|
+
args = Array(leftLength + argsLength);
|
3740
3721
|
|
3741
3722
|
while (++leftIndex < leftLength) {
|
3742
3723
|
args[leftIndex] = partials[leftIndex];
|
@@ -3750,6 +3731,25 @@
|
|
3750
3731
|
return wrapper;
|
3751
3732
|
}
|
3752
3733
|
|
3734
|
+
/**
|
3735
|
+
* Creates a `_.ceil`, `_.floor`, or `_.round` function.
|
3736
|
+
*
|
3737
|
+
* @private
|
3738
|
+
* @param {string} methodName The name of the `Math` method to use when rounding.
|
3739
|
+
* @returns {Function} Returns the new round function.
|
3740
|
+
*/
|
3741
|
+
function createRound(methodName) {
|
3742
|
+
var func = Math[methodName];
|
3743
|
+
return function(number, precision) {
|
3744
|
+
precision = precision === undefined ? 0 : (+precision || 0);
|
3745
|
+
if (precision) {
|
3746
|
+
precision = pow(10, precision);
|
3747
|
+
return func(number * precision) / precision;
|
3748
|
+
}
|
3749
|
+
return func(number);
|
3750
|
+
};
|
3751
|
+
}
|
3752
|
+
|
3753
3753
|
/**
|
3754
3754
|
* Creates a `_.sortedIndex` or `_.sortedLastIndex` function.
|
3755
3755
|
*
|
@@ -3799,16 +3799,16 @@
|
|
3799
3799
|
var length = partials ? partials.length : 0;
|
3800
3800
|
if (!length) {
|
3801
3801
|
bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
|
3802
|
-
partials = holders =
|
3802
|
+
partials = holders = undefined;
|
3803
3803
|
}
|
3804
3804
|
length -= (holders ? holders.length : 0);
|
3805
3805
|
if (bitmask & PARTIAL_RIGHT_FLAG) {
|
3806
3806
|
var partialsRight = partials,
|
3807
3807
|
holdersRight = holders;
|
3808
3808
|
|
3809
|
-
partials = holders =
|
3809
|
+
partials = holders = undefined;
|
3810
3810
|
}
|
3811
|
-
var data = isBindKey ?
|
3811
|
+
var data = isBindKey ? undefined : getData(func),
|
3812
3812
|
newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];
|
3813
3813
|
|
3814
3814
|
if (data) {
|
@@ -3887,7 +3887,7 @@
|
|
3887
3887
|
* `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
|
3888
3888
|
*
|
3889
3889
|
* @private
|
3890
|
-
* @param {Object}
|
3890
|
+
* @param {Object} object The object to compare.
|
3891
3891
|
* @param {Object} other The other object to compare.
|
3892
3892
|
* @param {string} tag The `toStringTag` of the objects to compare.
|
3893
3893
|
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
@@ -4087,13 +4087,13 @@
|
|
4087
4087
|
* @private
|
4088
4088
|
* @param {number} start The start of the view.
|
4089
4089
|
* @param {number} end The end of the view.
|
4090
|
-
* @param {Array}
|
4090
|
+
* @param {Array} transforms The transformations to apply to the view.
|
4091
4091
|
* @returns {Object} Returns an object containing the `start` and `end`
|
4092
4092
|
* positions of the view.
|
4093
4093
|
*/
|
4094
4094
|
function getView(start, end, transforms) {
|
4095
4095
|
var index = -1,
|
4096
|
-
length = transforms
|
4096
|
+
length = transforms.length;
|
4097
4097
|
|
4098
4098
|
while (++index < length) {
|
4099
4099
|
var data = transforms[index],
|
@@ -4296,7 +4296,7 @@
|
|
4296
4296
|
/**
|
4297
4297
|
* Checks if `value` is a valid array-like length.
|
4298
4298
|
*
|
4299
|
-
* **Note:** This function is based on [`ToLength`](
|
4299
|
+
* **Note:** This function is based on [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength).
|
4300
4300
|
*
|
4301
4301
|
* @private
|
4302
4302
|
* @param {*} value The value to check.
|
@@ -4388,6 +4388,18 @@
|
|
4388
4388
|
return data;
|
4389
4389
|
}
|
4390
4390
|
|
4391
|
+
/**
|
4392
|
+
* Used by `_.defaultsDeep` to customize its `_.merge` use.
|
4393
|
+
*
|
4394
|
+
* @private
|
4395
|
+
* @param {*} objectValue The destination object property value.
|
4396
|
+
* @param {*} sourceValue The source object property value.
|
4397
|
+
* @returns {*} Returns the value to assign to the destination object.
|
4398
|
+
*/
|
4399
|
+
function mergeDefaults(objectValue, sourceValue) {
|
4400
|
+
return objectValue === undefined ? sourceValue : merge(objectValue, sourceValue, mergeDefaults);
|
4401
|
+
}
|
4402
|
+
|
4391
4403
|
/**
|
4392
4404
|
* A specialized version of `_.pick` which picks `object` properties specified
|
4393
4405
|
* by `props`.
|
@@ -4487,46 +4499,6 @@
|
|
4487
4499
|
};
|
4488
4500
|
}());
|
4489
4501
|
|
4490
|
-
/**
|
4491
|
-
* A fallback implementation of `_.isPlainObject` which checks if `value`
|
4492
|
-
* is an object created by the `Object` constructor or has a `[[Prototype]]`
|
4493
|
-
* of `null`.
|
4494
|
-
*
|
4495
|
-
* @private
|
4496
|
-
* @param {*} value The value to check.
|
4497
|
-
* @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
|
4498
|
-
*/
|
4499
|
-
function shimIsPlainObject(value) {
|
4500
|
-
var Ctor,
|
4501
|
-
support = lodash.support;
|
4502
|
-
|
4503
|
-
// Exit early for non `Object` objects.
|
4504
|
-
if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value)) ||
|
4505
|
-
(!hasOwnProperty.call(value, 'constructor') &&
|
4506
|
-
(Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor))) ||
|
4507
|
-
(!support.argsTag && isArguments(value))) {
|
4508
|
-
return false;
|
4509
|
-
}
|
4510
|
-
// IE < 9 iterates inherited properties before own properties. If the first
|
4511
|
-
// iterated property is an object's own property then there are no inherited
|
4512
|
-
// enumerable properties.
|
4513
|
-
var result;
|
4514
|
-
if (support.ownLast) {
|
4515
|
-
baseForIn(value, function(subValue, key, object) {
|
4516
|
-
result = hasOwnProperty.call(object, key);
|
4517
|
-
return false;
|
4518
|
-
});
|
4519
|
-
return result !== false;
|
4520
|
-
}
|
4521
|
-
// In most environments an object's own properties are iterated before
|
4522
|
-
// its inherited properties. If the last iterated property is an object's
|
4523
|
-
// own property then there are no inherited enumerable properties.
|
4524
|
-
baseForIn(value, function(subValue, key) {
|
4525
|
-
result = key;
|
4526
|
-
});
|
4527
|
-
return result === undefined || hasOwnProperty.call(value, result);
|
4528
|
-
}
|
4529
|
-
|
4530
4502
|
/**
|
4531
4503
|
* A fallback implementation of `Object.keys` which creates an array of the
|
4532
4504
|
* own enumerable property names of `object`.
|
@@ -4653,12 +4625,12 @@
|
|
4653
4625
|
if (guard ? isIterateeCall(array, size, guard) : size == null) {
|
4654
4626
|
size = 1;
|
4655
4627
|
} else {
|
4656
|
-
size = nativeMax(
|
4628
|
+
size = nativeMax(nativeFloor(size) || 1, 1);
|
4657
4629
|
}
|
4658
4630
|
var index = 0,
|
4659
4631
|
length = array ? array.length : 0,
|
4660
4632
|
resIndex = -1,
|
4661
|
-
result = Array(
|
4633
|
+
result = Array(nativeCeil(length / size));
|
4662
4634
|
|
4663
4635
|
while (index < length) {
|
4664
4636
|
result[++resIndex] = baseSlice(array, index, (index += size));
|
@@ -4697,7 +4669,7 @@
|
|
4697
4669
|
|
4698
4670
|
/**
|
4699
4671
|
* Creates an array of unique `array` values not included in the other
|
4700
|
-
* provided arrays using [`SameValueZero`](
|
4672
|
+
* provided arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
4701
4673
|
* for equality comparisons.
|
4702
4674
|
*
|
4703
4675
|
* @static
|
@@ -4712,7 +4684,7 @@
|
|
4712
4684
|
* // => [1, 3]
|
4713
4685
|
*/
|
4714
4686
|
var difference = restParam(function(array, values) {
|
4715
|
-
return isArrayLike(array)
|
4687
|
+
return (isObjectLike(array) && isArrayLike(array))
|
4716
4688
|
? baseDifference(array, baseFlatten(values, false, true))
|
4717
4689
|
: [];
|
4718
4690
|
});
|
@@ -5107,7 +5079,7 @@
|
|
5107
5079
|
|
5108
5080
|
/**
|
5109
5081
|
* Gets the index at which the first occurrence of `value` is found in `array`
|
5110
|
-
* using [`SameValueZero`](
|
5082
|
+
* using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
5111
5083
|
* for equality comparisons. If `fromIndex` is negative, it is used as the offset
|
5112
5084
|
* from the end of `array`. If `array` is sorted providing `true` for `fromIndex`
|
5113
5085
|
* performs a faster binary search.
|
@@ -5141,10 +5113,9 @@
|
|
5141
5113
|
if (typeof fromIndex == 'number') {
|
5142
5114
|
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex;
|
5143
5115
|
} else if (fromIndex) {
|
5144
|
-
var index = binaryIndex(array, value)
|
5145
|
-
|
5146
|
-
|
5147
|
-
if (value === value ? (value === other) : (other !== other)) {
|
5116
|
+
var index = binaryIndex(array, value);
|
5117
|
+
if (index < length &&
|
5118
|
+
(value === value ? (value === array[index]) : (array[index] !== array[index]))) {
|
5148
5119
|
return index;
|
5149
5120
|
}
|
5150
5121
|
return -1;
|
@@ -5171,7 +5142,7 @@
|
|
5171
5142
|
|
5172
5143
|
/**
|
5173
5144
|
* Creates an array of unique values that are included in all of the provided
|
5174
|
-
* arrays using [`SameValueZero`](
|
5145
|
+
* arrays using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
5175
5146
|
* for equality comparisons.
|
5176
5147
|
*
|
5177
5148
|
* @static
|
@@ -5292,7 +5263,7 @@
|
|
5292
5263
|
|
5293
5264
|
/**
|
5294
5265
|
* Removes all provided values from `array` using
|
5295
|
-
* [`SameValueZero`](
|
5266
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
5296
5267
|
* for equality comparisons.
|
5297
5268
|
*
|
5298
5269
|
* **Note:** Unlike `_.without`, this method mutates `array`.
|
@@ -5725,7 +5696,7 @@
|
|
5725
5696
|
|
5726
5697
|
/**
|
5727
5698
|
* Creates an array of unique values, in order, from all of the provided arrays
|
5728
|
-
* using [`SameValueZero`](
|
5699
|
+
* using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
5729
5700
|
* for equality comparisons.
|
5730
5701
|
*
|
5731
5702
|
* @static
|
@@ -5744,7 +5715,7 @@
|
|
5744
5715
|
|
5745
5716
|
/**
|
5746
5717
|
* Creates a duplicate-free version of an array, using
|
5747
|
-
* [`SameValueZero`](
|
5718
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
5748
5719
|
* for equality comparisons, in which only the first occurence of each element
|
5749
5720
|
* is kept. Providing `true` for `isSorted` performs a faster search algorithm
|
5750
5721
|
* for sorted arrays. If an iteratee function is provided it is invoked for
|
@@ -5798,7 +5769,7 @@
|
|
5798
5769
|
}
|
5799
5770
|
if (isSorted != null && typeof isSorted != 'boolean') {
|
5800
5771
|
thisArg = iteratee;
|
5801
|
-
iteratee = isIterateeCall(array, isSorted, thisArg) ?
|
5772
|
+
iteratee = isIterateeCall(array, isSorted, thisArg) ? undefined : isSorted;
|
5802
5773
|
isSorted = false;
|
5803
5774
|
}
|
5804
5775
|
var callback = getCallback();
|
@@ -5885,7 +5856,7 @@
|
|
5885
5856
|
|
5886
5857
|
/**
|
5887
5858
|
* Creates an array excluding all provided values using
|
5888
|
-
* [`SameValueZero`](
|
5859
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
5889
5860
|
* for equality comparisons.
|
5890
5861
|
*
|
5891
5862
|
* @static
|
@@ -5927,7 +5898,7 @@
|
|
5927
5898
|
var array = arguments[index];
|
5928
5899
|
if (isArrayLike(array)) {
|
5929
5900
|
var result = result
|
5930
|
-
? baseDifference(result, array)
|
5901
|
+
? arrayPush(baseDifference(result, array), baseDifference(array, result))
|
5931
5902
|
: array;
|
5932
5903
|
}
|
5933
5904
|
}
|
@@ -6149,16 +6120,16 @@
|
|
6149
6120
|
* @example
|
6150
6121
|
*
|
6151
6122
|
* var array = [1, 2];
|
6152
|
-
* var
|
6123
|
+
* var wrapped = _(array).push(3);
|
6153
6124
|
*
|
6154
6125
|
* console.log(array);
|
6155
6126
|
* // => [1, 2]
|
6156
6127
|
*
|
6157
|
-
*
|
6128
|
+
* wrapped = wrapped.commit();
|
6158
6129
|
* console.log(array);
|
6159
6130
|
* // => [1, 2, 3]
|
6160
6131
|
*
|
6161
|
-
*
|
6132
|
+
* wrapped.last();
|
6162
6133
|
* // => 3
|
6163
6134
|
*
|
6164
6135
|
* console.log(array);
|
@@ -6168,6 +6139,33 @@
|
|
6168
6139
|
return new LodashWrapper(this.value(), this.__chain__);
|
6169
6140
|
}
|
6170
6141
|
|
6142
|
+
/**
|
6143
|
+
* Creates a new array joining a wrapped array with any additional arrays
|
6144
|
+
* and/or values.
|
6145
|
+
*
|
6146
|
+
* @name concat
|
6147
|
+
* @memberOf _
|
6148
|
+
* @category Chain
|
6149
|
+
* @param {...*} [values] The values to concatenate.
|
6150
|
+
* @returns {Array} Returns the new concatenated array.
|
6151
|
+
* @example
|
6152
|
+
*
|
6153
|
+
* var array = [1];
|
6154
|
+
* var wrapped = _(array).concat(2, [3], [[4]]);
|
6155
|
+
*
|
6156
|
+
* console.log(wrapped.value());
|
6157
|
+
* // => [1, 2, 3, [4]]
|
6158
|
+
*
|
6159
|
+
* console.log(array);
|
6160
|
+
* // => [1]
|
6161
|
+
*/
|
6162
|
+
var wrapperConcat = restParam(function(values) {
|
6163
|
+
values = baseFlatten(values);
|
6164
|
+
return this.thru(function(array) {
|
6165
|
+
return arrayConcat(isArray(array) ? array : [toObject(array)], values);
|
6166
|
+
});
|
6167
|
+
});
|
6168
|
+
|
6171
6169
|
/**
|
6172
6170
|
* Creates a clone of the chained sequence planting `value` as the wrapped value.
|
6173
6171
|
*
|
@@ -6178,17 +6176,17 @@
|
|
6178
6176
|
* @example
|
6179
6177
|
*
|
6180
6178
|
* var array = [1, 2];
|
6181
|
-
* var
|
6179
|
+
* var wrapped = _(array).map(function(value) {
|
6182
6180
|
* return Math.pow(value, 2);
|
6183
6181
|
* });
|
6184
6182
|
*
|
6185
6183
|
* var other = [3, 4];
|
6186
|
-
* var
|
6184
|
+
* var otherWrapped = wrapped.plant(other);
|
6187
6185
|
*
|
6188
|
-
*
|
6186
|
+
* otherWrapped.value();
|
6189
6187
|
* // => [9, 16]
|
6190
6188
|
*
|
6191
|
-
*
|
6189
|
+
* wrapped.value();
|
6192
6190
|
* // => [1, 4]
|
6193
6191
|
*/
|
6194
6192
|
function wrapperPlant(value) {
|
@@ -6231,15 +6229,20 @@
|
|
6231
6229
|
*/
|
6232
6230
|
function wrapperReverse() {
|
6233
6231
|
var value = this.__wrapped__;
|
6232
|
+
|
6233
|
+
var interceptor = function(value) {
|
6234
|
+
return (wrapped && wrapped.__dir__ < 0) ? value : value.reverse();
|
6235
|
+
};
|
6234
6236
|
if (value instanceof LazyWrapper) {
|
6237
|
+
var wrapped = value;
|
6235
6238
|
if (this.__actions__.length) {
|
6236
|
-
|
6239
|
+
wrapped = new LazyWrapper(this);
|
6237
6240
|
}
|
6238
|
-
|
6241
|
+
wrapped = wrapped.reverse();
|
6242
|
+
wrapped.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
|
6243
|
+
return new LodashWrapper(wrapped, this.__chain__);
|
6239
6244
|
}
|
6240
|
-
return this.thru(
|
6241
|
-
return value.reverse();
|
6242
|
-
});
|
6245
|
+
return this.thru(interceptor);
|
6243
6246
|
}
|
6244
6247
|
|
6245
6248
|
/**
|
@@ -6400,7 +6403,7 @@
|
|
6400
6403
|
function every(collection, predicate, thisArg) {
|
6401
6404
|
var func = isArray(collection) ? arrayEvery : baseEvery;
|
6402
6405
|
if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
|
6403
|
-
predicate =
|
6406
|
+
predicate = undefined;
|
6404
6407
|
}
|
6405
6408
|
if (typeof predicate != 'function' || thisArg !== undefined) {
|
6406
6409
|
predicate = getCallback(predicate, thisArg, 3);
|
@@ -6674,7 +6677,7 @@
|
|
6674
6677
|
|
6675
6678
|
/**
|
6676
6679
|
* Checks if `value` is in `collection` using
|
6677
|
-
* [`SameValueZero`](
|
6680
|
+
* [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
6678
6681
|
* for equality comparisons. If `fromIndex` is negative, it is used as the offset
|
6679
6682
|
* from the end of `collection`.
|
6680
6683
|
*
|
@@ -6707,17 +6710,14 @@
|
|
6707
6710
|
collection = values(collection);
|
6708
6711
|
length = collection.length;
|
6709
6712
|
}
|
6710
|
-
if (!length) {
|
6711
|
-
return false;
|
6712
|
-
}
|
6713
6713
|
if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) {
|
6714
6714
|
fromIndex = 0;
|
6715
6715
|
} else {
|
6716
6716
|
fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0);
|
6717
6717
|
}
|
6718
6718
|
return (typeof collection == 'string' || !isArray(collection) && isString(collection))
|
6719
|
-
? (fromIndex
|
6720
|
-
: (getIndexOf(collection, target, fromIndex) > -1);
|
6719
|
+
? (fromIndex <= length && collection.indexOf(target, fromIndex) > -1)
|
6720
|
+
: (!!length && getIndexOf(collection, target, fromIndex) > -1);
|
6721
6721
|
}
|
6722
6722
|
|
6723
6723
|
/**
|
@@ -6799,7 +6799,7 @@
|
|
6799
6799
|
result = isArrayLike(collection) ? Array(collection.length) : [];
|
6800
6800
|
|
6801
6801
|
baseEach(collection, function(value) {
|
6802
|
-
var func = isFunc ? path : ((isProp && value != null) ? value[path] :
|
6802
|
+
var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
|
6803
6803
|
result[++index] = func ? func.apply(value, args) : invokePath(value, path, args);
|
6804
6804
|
});
|
6805
6805
|
return result;
|
@@ -6969,7 +6969,8 @@
|
|
6969
6969
|
* `_.reduce`, `_.reduceRight`, and `_.transform`.
|
6970
6970
|
*
|
6971
6971
|
* The guarded methods are:
|
6972
|
-
* `assign`, `defaults`, `includes`, `merge`, `sortByAll`,
|
6972
|
+
* `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `sortByAll`,
|
6973
|
+
* and `sortByOrder`
|
6973
6974
|
*
|
6974
6975
|
* @static
|
6975
6976
|
* @memberOf _
|
@@ -7199,7 +7200,7 @@
|
|
7199
7200
|
function some(collection, predicate, thisArg) {
|
7200
7201
|
var func = isArray(collection) ? arraySome : baseSome;
|
7201
7202
|
if (thisArg && isIterateeCall(collection, predicate, thisArg)) {
|
7202
|
-
predicate =
|
7203
|
+
predicate = undefined;
|
7203
7204
|
}
|
7204
7205
|
if (typeof predicate != 'function' || thisArg !== undefined) {
|
7205
7206
|
predicate = getCallback(predicate, thisArg, 3);
|
@@ -7260,7 +7261,7 @@
|
|
7260
7261
|
return [];
|
7261
7262
|
}
|
7262
7263
|
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
|
7263
|
-
iteratee =
|
7264
|
+
iteratee = undefined;
|
7264
7265
|
}
|
7265
7266
|
var index = -1;
|
7266
7267
|
iteratee = getCallback(iteratee, thisArg, 3);
|
@@ -7319,9 +7320,9 @@
|
|
7319
7320
|
|
7320
7321
|
/**
|
7321
7322
|
* This method is like `_.sortByAll` except that it allows specifying the
|
7322
|
-
* sort orders of the iteratees to sort by.
|
7323
|
-
*
|
7324
|
-
*
|
7323
|
+
* sort orders of the iteratees to sort by. If `orders` is unspecified, all
|
7324
|
+
* values are sorted in ascending order. Otherwise, a value is sorted in
|
7325
|
+
* ascending order if its corresponding order is "asc", and descending if "desc".
|
7325
7326
|
*
|
7326
7327
|
* If a property name is provided for an iteratee the created `_.property`
|
7327
7328
|
* style callback returns the property value of the given element.
|
@@ -7335,7 +7336,7 @@
|
|
7335
7336
|
* @category Collection
|
7336
7337
|
* @param {Array|Object|string} collection The collection to iterate over.
|
7337
7338
|
* @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
|
7338
|
-
* @param {boolean[]} orders The sort orders of `iteratees`.
|
7339
|
+
* @param {boolean[]} [orders] The sort orders of `iteratees`.
|
7339
7340
|
* @param- {Object} [guard] Enables use as a callback for functions like `_.reduce`.
|
7340
7341
|
* @returns {Array} Returns the new sorted array.
|
7341
7342
|
* @example
|
@@ -7348,7 +7349,7 @@
|
|
7348
7349
|
* ];
|
7349
7350
|
*
|
7350
7351
|
* // sort by `user` in ascending order and by `age` in descending order
|
7351
|
-
* _.map(_.sortByOrder(users, ['user', 'age'], [
|
7352
|
+
* _.map(_.sortByOrder(users, ['user', 'age'], ['asc', 'desc']), _.values);
|
7352
7353
|
* // => [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 42]]
|
7353
7354
|
*/
|
7354
7355
|
function sortByOrder(collection, iteratees, orders, guard) {
|
@@ -7356,7 +7357,7 @@
|
|
7356
7357
|
return [];
|
7357
7358
|
}
|
7358
7359
|
if (guard && isIterateeCall(iteratees, orders, guard)) {
|
7359
|
-
orders =
|
7360
|
+
orders = undefined;
|
7360
7361
|
}
|
7361
7362
|
if (!isArray(iteratees)) {
|
7362
7363
|
iteratees = iteratees == null ? [] : [iteratees];
|
@@ -7481,10 +7482,10 @@
|
|
7481
7482
|
*/
|
7482
7483
|
function ary(func, n, guard) {
|
7483
7484
|
if (guard && isIterateeCall(func, n, guard)) {
|
7484
|
-
n =
|
7485
|
+
n = undefined;
|
7485
7486
|
}
|
7486
7487
|
n = (func && n == null) ? func.length : nativeMax(+n || 0, 0);
|
7487
|
-
return createWrapper(func, ARY_FLAG,
|
7488
|
+
return createWrapper(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
|
7488
7489
|
}
|
7489
7490
|
|
7490
7491
|
/**
|
@@ -7519,7 +7520,7 @@
|
|
7519
7520
|
result = func.apply(this, arguments);
|
7520
7521
|
}
|
7521
7522
|
if (n <= 1) {
|
7522
|
-
func =
|
7523
|
+
func = undefined;
|
7523
7524
|
}
|
7524
7525
|
return result;
|
7525
7526
|
};
|
@@ -7827,9 +7828,9 @@
|
|
7827
7828
|
var leading = true;
|
7828
7829
|
trailing = false;
|
7829
7830
|
} else if (isObject(options)) {
|
7830
|
-
leading = options.leading;
|
7831
|
+
leading = !!options.leading;
|
7831
7832
|
maxWait = 'maxWait' in options && nativeMax(+options.maxWait || 0, wait);
|
7832
|
-
trailing = 'trailing' in options ? options.trailing : trailing;
|
7833
|
+
trailing = 'trailing' in options ? !!options.trailing : trailing;
|
7833
7834
|
}
|
7834
7835
|
|
7835
7836
|
function cancel() {
|
@@ -7839,41 +7840,35 @@
|
|
7839
7840
|
if (maxTimeoutId) {
|
7840
7841
|
clearTimeout(maxTimeoutId);
|
7841
7842
|
}
|
7843
|
+
lastCalled = 0;
|
7842
7844
|
maxTimeoutId = timeoutId = trailingCall = undefined;
|
7843
7845
|
}
|
7844
7846
|
|
7847
|
+
function complete(isCalled, id) {
|
7848
|
+
if (id) {
|
7849
|
+
clearTimeout(id);
|
7850
|
+
}
|
7851
|
+
maxTimeoutId = timeoutId = trailingCall = undefined;
|
7852
|
+
if (isCalled) {
|
7853
|
+
lastCalled = now();
|
7854
|
+
result = func.apply(thisArg, args);
|
7855
|
+
if (!timeoutId && !maxTimeoutId) {
|
7856
|
+
args = thisArg = undefined;
|
7857
|
+
}
|
7858
|
+
}
|
7859
|
+
}
|
7860
|
+
|
7845
7861
|
function delayed() {
|
7846
7862
|
var remaining = wait - (now() - stamp);
|
7847
7863
|
if (remaining <= 0 || remaining > wait) {
|
7848
|
-
|
7849
|
-
clearTimeout(maxTimeoutId);
|
7850
|
-
}
|
7851
|
-
var isCalled = trailingCall;
|
7852
|
-
maxTimeoutId = timeoutId = trailingCall = undefined;
|
7853
|
-
if (isCalled) {
|
7854
|
-
lastCalled = now();
|
7855
|
-
result = func.apply(thisArg, args);
|
7856
|
-
if (!timeoutId && !maxTimeoutId) {
|
7857
|
-
args = thisArg = null;
|
7858
|
-
}
|
7859
|
-
}
|
7864
|
+
complete(trailingCall, maxTimeoutId);
|
7860
7865
|
} else {
|
7861
7866
|
timeoutId = setTimeout(delayed, remaining);
|
7862
7867
|
}
|
7863
7868
|
}
|
7864
7869
|
|
7865
7870
|
function maxDelayed() {
|
7866
|
-
|
7867
|
-
clearTimeout(timeoutId);
|
7868
|
-
}
|
7869
|
-
maxTimeoutId = timeoutId = trailingCall = undefined;
|
7870
|
-
if (trailing || (maxWait !== wait)) {
|
7871
|
-
lastCalled = now();
|
7872
|
-
result = func.apply(thisArg, args);
|
7873
|
-
if (!timeoutId && !maxTimeoutId) {
|
7874
|
-
args = thisArg = null;
|
7875
|
-
}
|
7876
|
-
}
|
7871
|
+
complete(trailing, timeoutId);
|
7877
7872
|
}
|
7878
7873
|
|
7879
7874
|
function debounced() {
|
@@ -7913,7 +7908,7 @@
|
|
7913
7908
|
result = func.apply(thisArg, args);
|
7914
7909
|
}
|
7915
7910
|
if (isCalled && !timeoutId && !maxTimeoutId) {
|
7916
|
-
args = thisArg =
|
7911
|
+
args = thisArg = undefined;
|
7917
7912
|
}
|
7918
7913
|
return result;
|
7919
7914
|
}
|
@@ -8018,7 +8013,7 @@
|
|
8018
8013
|
*
|
8019
8014
|
* **Note:** The cache is exposed as the `cache` property on the memoized
|
8020
8015
|
* function. Its creation may be customized by replacing the `_.memoize.Cache`
|
8021
|
-
* constructor with one whose instances implement the [`Map`](
|
8016
|
+
* constructor with one whose instances implement the [`Map`](http://ecma-international.org/ecma-262/6.0/#sec-properties-of-the-map-prototype-object)
|
8022
8017
|
* method interface of `get`, `has`, and `set`.
|
8023
8018
|
*
|
8024
8019
|
* @static
|
@@ -8079,6 +8074,52 @@
|
|
8079
8074
|
return memoized;
|
8080
8075
|
}
|
8081
8076
|
|
8077
|
+
/**
|
8078
|
+
* Creates a function that runs each argument through a corresponding
|
8079
|
+
* transform function.
|
8080
|
+
*
|
8081
|
+
* @static
|
8082
|
+
* @memberOf _
|
8083
|
+
* @category Function
|
8084
|
+
* @param {Function} func The function to wrap.
|
8085
|
+
* @param {...(Function|Function[])} [transforms] The functions to transform
|
8086
|
+
* arguments, specified as individual functions or arrays of functions.
|
8087
|
+
* @returns {Function} Returns the new function.
|
8088
|
+
* @example
|
8089
|
+
*
|
8090
|
+
* function doubled(n) {
|
8091
|
+
* return n * 2;
|
8092
|
+
* }
|
8093
|
+
*
|
8094
|
+
* function square(n) {
|
8095
|
+
* return n * n;
|
8096
|
+
* }
|
8097
|
+
*
|
8098
|
+
* var modded = _.modArgs(function(x, y) {
|
8099
|
+
* return [x, y];
|
8100
|
+
* }, square, doubled);
|
8101
|
+
*
|
8102
|
+
* modded(1, 2);
|
8103
|
+
* // => [1, 4]
|
8104
|
+
*
|
8105
|
+
* modded(5, 10);
|
8106
|
+
* // => [25, 20]
|
8107
|
+
*/
|
8108
|
+
var modArgs = restParam(function(func, transforms) {
|
8109
|
+
transforms = baseFlatten(transforms);
|
8110
|
+
if (typeof func != 'function' || !arrayEvery(transforms, baseIsFunction)) {
|
8111
|
+
throw new TypeError(FUNC_ERROR_TEXT);
|
8112
|
+
}
|
8113
|
+
var length = transforms.length;
|
8114
|
+
return restParam(function(args) {
|
8115
|
+
var index = nativeMin(args.length, length);
|
8116
|
+
while (index--) {
|
8117
|
+
args[index] = transforms[index](args[index]);
|
8118
|
+
}
|
8119
|
+
return func.apply(this, args);
|
8120
|
+
});
|
8121
|
+
});
|
8122
|
+
|
8082
8123
|
/**
|
8083
8124
|
* Creates a function that negates the result of the predicate `func`. The
|
8084
8125
|
* `func` predicate is invoked with the `this` binding and arguments of the
|
@@ -8224,7 +8265,7 @@
|
|
8224
8265
|
* // => [3, 6, 9]
|
8225
8266
|
*/
|
8226
8267
|
var rearg = restParam(function(func, indexes) {
|
8227
|
-
return createWrapper(func, REARG_FLAG,
|
8268
|
+
return createWrapper(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes));
|
8228
8269
|
});
|
8229
8270
|
|
8230
8271
|
/**
|
@@ -8370,10 +8411,7 @@
|
|
8370
8411
|
leading = 'leading' in options ? !!options.leading : leading;
|
8371
8412
|
trailing = 'trailing' in options ? !!options.trailing : trailing;
|
8372
8413
|
}
|
8373
|
-
|
8374
|
-
debounceOptions.maxWait = +wait;
|
8375
|
-
debounceOptions.trailing = trailing;
|
8376
|
-
return debounce(func, wait, debounceOptions);
|
8414
|
+
return debounce(func, wait, { 'leading': leading, 'maxWait': +wait, 'trailing': trailing });
|
8377
8415
|
}
|
8378
8416
|
|
8379
8417
|
/**
|
@@ -8399,7 +8437,7 @@
|
|
8399
8437
|
*/
|
8400
8438
|
function wrap(value, wrapper) {
|
8401
8439
|
wrapper = wrapper == null ? identity : wrapper;
|
8402
|
-
return createWrapper(wrapper, PARTIAL_FLAG,
|
8440
|
+
return createWrapper(wrapper, PARTIAL_FLAG, undefined, [value], []);
|
8403
8441
|
}
|
8404
8442
|
|
8405
8443
|
/*------------------------------------------------------------------------*/
|
@@ -8585,14 +8623,8 @@
|
|
8585
8623
|
* // => false
|
8586
8624
|
*/
|
8587
8625
|
function isArguments(value) {
|
8588
|
-
return isObjectLike(value) && isArrayLike(value) &&
|
8589
|
-
|
8590
|
-
// Fallback for environments without a `toStringTag` for `arguments` objects.
|
8591
|
-
if (!support.argsTag) {
|
8592
|
-
isArguments = function(value) {
|
8593
|
-
return isObjectLike(value) && isArrayLike(value) &&
|
8594
|
-
hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
|
8595
|
-
};
|
8626
|
+
return isObjectLike(value) && isArrayLike(value) &&
|
8627
|
+
hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');
|
8596
8628
|
}
|
8597
8629
|
|
8598
8630
|
/**
|
@@ -8672,14 +8704,7 @@
|
|
8672
8704
|
* // => false
|
8673
8705
|
*/
|
8674
8706
|
function isElement(value) {
|
8675
|
-
return !!value && value.nodeType === 1 && isObjectLike(value) &&
|
8676
|
-
(lodash.support.nodeTag ? (objToString.call(value).indexOf('Element') > -1) : isHostObject(value));
|
8677
|
-
}
|
8678
|
-
// Fallback for environments without DOM support.
|
8679
|
-
if (!support.dom) {
|
8680
|
-
isElement = function(value) {
|
8681
|
-
return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
|
8682
|
-
};
|
8707
|
+
return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
|
8683
8708
|
}
|
8684
8709
|
|
8685
8710
|
/**
|
@@ -8794,7 +8819,7 @@
|
|
8794
8819
|
/**
|
8795
8820
|
* Checks if `value` is a finite primitive number.
|
8796
8821
|
*
|
8797
|
-
* **Note:** This method is based on [`Number.isFinite`](
|
8822
|
+
* **Note:** This method is based on [`Number.isFinite`](http://ecma-international.org/ecma-262/6.0/#sec-number.isfinite).
|
8798
8823
|
*
|
8799
8824
|
* @static
|
8800
8825
|
* @memberOf _
|
@@ -8818,9 +8843,9 @@
|
|
8818
8843
|
* _.isFinite(Infinity);
|
8819
8844
|
* // => false
|
8820
8845
|
*/
|
8821
|
-
|
8846
|
+
function isFinite(value) {
|
8822
8847
|
return typeof value == 'number' && nativeIsFinite(value);
|
8823
|
-
}
|
8848
|
+
}
|
8824
8849
|
|
8825
8850
|
/**
|
8826
8851
|
* Checks if `value` is classified as a `Function` object.
|
@@ -8838,12 +8863,12 @@
|
|
8838
8863
|
* _.isFunction(/abc/);
|
8839
8864
|
* // => false
|
8840
8865
|
*/
|
8841
|
-
|
8866
|
+
function isFunction(value) {
|
8842
8867
|
// The use of `Object#toString` avoids issues with the `typeof` operator
|
8843
8868
|
// in older versions of Chrome and Safari which return 'function' for regexes
|
8844
8869
|
// and Safari 8 equivalents which return 'object' for typed array constructors.
|
8845
|
-
return objToString.call(value) == funcTag;
|
8846
|
-
}
|
8870
|
+
return isObject(value) && objToString.call(value) == funcTag;
|
8871
|
+
}
|
8847
8872
|
|
8848
8873
|
/**
|
8849
8874
|
* Checks if `value` is the [language type](https://es5.github.io/#x8) of `Object`.
|
@@ -8967,7 +8992,7 @@
|
|
8967
8992
|
if (value == null) {
|
8968
8993
|
return false;
|
8969
8994
|
}
|
8970
|
-
if (
|
8995
|
+
if (isFunction(value)) {
|
8971
8996
|
return reIsNative.test(fnToString.call(value));
|
8972
8997
|
}
|
8973
8998
|
return isObjectLike(value) && (isHostObject(value) ? reIsNative : reIsHostCtor).test(value);
|
@@ -9049,17 +9074,33 @@
|
|
9049
9074
|
* _.isPlainObject(Object.create(null));
|
9050
9075
|
* // => true
|
9051
9076
|
*/
|
9052
|
-
|
9053
|
-
|
9077
|
+
function isPlainObject(value) {
|
9078
|
+
var Ctor;
|
9079
|
+
|
9080
|
+
// Exit early for non `Object` objects.
|
9081
|
+
if (!(isObjectLike(value) && objToString.call(value) == objectTag && !isHostObject(value) && !isArguments(value)) ||
|
9082
|
+
(!hasOwnProperty.call(value, 'constructor') && (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) {
|
9054
9083
|
return false;
|
9055
9084
|
}
|
9056
|
-
|
9057
|
-
|
9058
|
-
|
9059
|
-
|
9060
|
-
|
9061
|
-
|
9062
|
-
|
9085
|
+
// IE < 9 iterates inherited properties before own properties. If the first
|
9086
|
+
// iterated property is an object's own property then there are no inherited
|
9087
|
+
// enumerable properties.
|
9088
|
+
var result;
|
9089
|
+
if (lodash.support.ownLast) {
|
9090
|
+
baseForIn(value, function(subValue, key, object) {
|
9091
|
+
result = hasOwnProperty.call(object, key);
|
9092
|
+
return false;
|
9093
|
+
});
|
9094
|
+
return result !== false;
|
9095
|
+
}
|
9096
|
+
// In most environments an object's own properties are iterated before
|
9097
|
+
// its inherited properties. If the last iterated property is an object's
|
9098
|
+
// own property then there are no inherited enumerable properties.
|
9099
|
+
baseForIn(value, function(subValue, key) {
|
9100
|
+
result = key;
|
9101
|
+
});
|
9102
|
+
return result === undefined || hasOwnProperty.call(value, result);
|
9103
|
+
}
|
9063
9104
|
|
9064
9105
|
/**
|
9065
9106
|
* Checks if `value` is classified as a `RegExp` object.
|
@@ -9246,6 +9287,56 @@
|
|
9246
9287
|
|
9247
9288
|
/*------------------------------------------------------------------------*/
|
9248
9289
|
|
9290
|
+
/**
|
9291
|
+
* Recursively merges own enumerable properties of the source object(s), that
|
9292
|
+
* don't resolve to `undefined` into the destination object. Subsequent sources
|
9293
|
+
* overwrite property assignments of previous sources. If `customizer` is
|
9294
|
+
* provided it is invoked to produce the merged values of the destination and
|
9295
|
+
* source properties. If `customizer` returns `undefined` merging is handled
|
9296
|
+
* by the method instead. The `customizer` is bound to `thisArg` and invoked
|
9297
|
+
* with five arguments: (objectValue, sourceValue, key, object, source).
|
9298
|
+
*
|
9299
|
+
* @static
|
9300
|
+
* @memberOf _
|
9301
|
+
* @category Object
|
9302
|
+
* @param {Object} object The destination object.
|
9303
|
+
* @param {...Object} [sources] The source objects.
|
9304
|
+
* @param {Function} [customizer] The function to customize assigned values.
|
9305
|
+
* @param {*} [thisArg] The `this` binding of `customizer`.
|
9306
|
+
* @returns {Object} Returns `object`.
|
9307
|
+
* @example
|
9308
|
+
*
|
9309
|
+
* var users = {
|
9310
|
+
* 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
|
9311
|
+
* };
|
9312
|
+
*
|
9313
|
+
* var ages = {
|
9314
|
+
* 'data': [{ 'age': 36 }, { 'age': 40 }]
|
9315
|
+
* };
|
9316
|
+
*
|
9317
|
+
* _.merge(users, ages);
|
9318
|
+
* // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
|
9319
|
+
*
|
9320
|
+
* // using a customizer callback
|
9321
|
+
* var object = {
|
9322
|
+
* 'fruits': ['apple'],
|
9323
|
+
* 'vegetables': ['beet']
|
9324
|
+
* };
|
9325
|
+
*
|
9326
|
+
* var other = {
|
9327
|
+
* 'fruits': ['banana'],
|
9328
|
+
* 'vegetables': ['carrot']
|
9329
|
+
* };
|
9330
|
+
*
|
9331
|
+
* _.merge(object, other, function(a, b) {
|
9332
|
+
* if (_.isArray(a)) {
|
9333
|
+
* return a.concat(b);
|
9334
|
+
* }
|
9335
|
+
* });
|
9336
|
+
* // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
|
9337
|
+
*/
|
9338
|
+
var merge = createAssigner(baseMerge);
|
9339
|
+
|
9249
9340
|
/**
|
9250
9341
|
* Assigns own enumerable properties of source object(s) to the destination
|
9251
9342
|
* object. Subsequent sources overwrite property assignments of previous sources.
|
@@ -9254,7 +9345,7 @@
|
|
9254
9345
|
* (objectValue, sourceValue, key, object, source).
|
9255
9346
|
*
|
9256
9347
|
* **Note:** This method mutates `object` and is based on
|
9257
|
-
* [`Object.assign`](
|
9348
|
+
* [`Object.assign`](http://ecma-international.org/ecma-262/6.0/#sec-object.assign).
|
9258
9349
|
*
|
9259
9350
|
* @static
|
9260
9351
|
* @memberOf _
|
@@ -9321,7 +9412,7 @@
|
|
9321
9412
|
function create(prototype, properties, guard) {
|
9322
9413
|
var result = baseCreate(prototype);
|
9323
9414
|
if (guard && isIterateeCall(prototype, properties, guard)) {
|
9324
|
-
properties =
|
9415
|
+
properties = undefined;
|
9325
9416
|
}
|
9326
9417
|
return properties ? baseAssign(result, properties) : result;
|
9327
9418
|
}
|
@@ -9344,14 +9435,27 @@
|
|
9344
9435
|
* _.defaults({ 'user': 'barney' }, { 'age': 36 }, { 'user': 'fred' });
|
9345
9436
|
* // => { 'user': 'barney', 'age': 36 }
|
9346
9437
|
*/
|
9347
|
-
var defaults =
|
9348
|
-
|
9349
|
-
|
9350
|
-
|
9351
|
-
|
9352
|
-
|
9353
|
-
|
9354
|
-
|
9438
|
+
var defaults = createDefaults(assign, assignDefaults);
|
9439
|
+
|
9440
|
+
/**
|
9441
|
+
* This method is like `_.defaults` except that it recursively assigns
|
9442
|
+
* default properties.
|
9443
|
+
*
|
9444
|
+
* **Note:** This method mutates `object`.
|
9445
|
+
*
|
9446
|
+
* @static
|
9447
|
+
* @memberOf _
|
9448
|
+
* @category Object
|
9449
|
+
* @param {Object} object The destination object.
|
9450
|
+
* @param {...Object} [sources] The source objects.
|
9451
|
+
* @returns {Object} Returns `object`.
|
9452
|
+
* @example
|
9453
|
+
*
|
9454
|
+
* _.defaultsDeep({ 'user': { 'name': 'barney' } }, { 'user': { 'name': 'fred', 'age': 36 } });
|
9455
|
+
* // => { 'user': { 'name': 'barney', 'age': 36 } }
|
9456
|
+
*
|
9457
|
+
*/
|
9458
|
+
var defaultsDeep = createDefaults(merge, mergeDefaults);
|
9355
9459
|
|
9356
9460
|
/**
|
9357
9461
|
* This method is like `_.find` except that it returns the key of the first
|
@@ -9678,7 +9782,7 @@
|
|
9678
9782
|
*/
|
9679
9783
|
function invert(object, multiValue, guard) {
|
9680
9784
|
if (guard && isIterateeCall(object, multiValue, guard)) {
|
9681
|
-
multiValue =
|
9785
|
+
multiValue = undefined;
|
9682
9786
|
}
|
9683
9787
|
var index = -1,
|
9684
9788
|
props = keys(object),
|
@@ -9707,7 +9811,7 @@
|
|
9707
9811
|
* Creates an array of the own enumerable property names of `object`.
|
9708
9812
|
*
|
9709
9813
|
* **Note:** Non-object values are coerced to objects. See the
|
9710
|
-
* [ES spec](
|
9814
|
+
* [ES spec](http://ecma-international.org/ecma-262/6.0/#sec-object.keys)
|
9711
9815
|
* for more details.
|
9712
9816
|
*
|
9713
9817
|
* @static
|
@@ -9731,7 +9835,7 @@
|
|
9731
9835
|
* // => ['0', '1']
|
9732
9836
|
*/
|
9733
9837
|
var keys = !nativeKeys ? shimKeys : function(object) {
|
9734
|
-
var Ctor = object == null ?
|
9838
|
+
var Ctor = object == null ? undefined : object.constructor;
|
9735
9839
|
if ((typeof Ctor == 'function' && Ctor.prototype === object) ||
|
9736
9840
|
(typeof object == 'function' ? lodash.support.enumPrototypes : isArrayLike(object))) {
|
9737
9841
|
return shimKeys(object);
|
@@ -9883,56 +9987,6 @@
|
|
9883
9987
|
*/
|
9884
9988
|
var mapValues = createObjectMapper();
|
9885
9989
|
|
9886
|
-
/**
|
9887
|
-
* Recursively merges own enumerable properties of the source object(s), that
|
9888
|
-
* don't resolve to `undefined` into the destination object. Subsequent sources
|
9889
|
-
* overwrite property assignments of previous sources. If `customizer` is
|
9890
|
-
* provided it is invoked to produce the merged values of the destination and
|
9891
|
-
* source properties. If `customizer` returns `undefined` merging is handled
|
9892
|
-
* by the method instead. The `customizer` is bound to `thisArg` and invoked
|
9893
|
-
* with five arguments: (objectValue, sourceValue, key, object, source).
|
9894
|
-
*
|
9895
|
-
* @static
|
9896
|
-
* @memberOf _
|
9897
|
-
* @category Object
|
9898
|
-
* @param {Object} object The destination object.
|
9899
|
-
* @param {...Object} [sources] The source objects.
|
9900
|
-
* @param {Function} [customizer] The function to customize assigned values.
|
9901
|
-
* @param {*} [thisArg] The `this` binding of `customizer`.
|
9902
|
-
* @returns {Object} Returns `object`.
|
9903
|
-
* @example
|
9904
|
-
*
|
9905
|
-
* var users = {
|
9906
|
-
* 'data': [{ 'user': 'barney' }, { 'user': 'fred' }]
|
9907
|
-
* };
|
9908
|
-
*
|
9909
|
-
* var ages = {
|
9910
|
-
* 'data': [{ 'age': 36 }, { 'age': 40 }]
|
9911
|
-
* };
|
9912
|
-
*
|
9913
|
-
* _.merge(users, ages);
|
9914
|
-
* // => { 'data': [{ 'user': 'barney', 'age': 36 }, { 'user': 'fred', 'age': 40 }] }
|
9915
|
-
*
|
9916
|
-
* // using a customizer callback
|
9917
|
-
* var object = {
|
9918
|
-
* 'fruits': ['apple'],
|
9919
|
-
* 'vegetables': ['beet']
|
9920
|
-
* };
|
9921
|
-
*
|
9922
|
-
* var other = {
|
9923
|
-
* 'fruits': ['banana'],
|
9924
|
-
* 'vegetables': ['carrot']
|
9925
|
-
* };
|
9926
|
-
*
|
9927
|
-
* _.merge(object, other, function(a, b) {
|
9928
|
-
* if (_.isArray(a)) {
|
9929
|
-
* return a.concat(b);
|
9930
|
-
* }
|
9931
|
-
* });
|
9932
|
-
* // => { 'fruits': ['apple', 'banana'], 'vegetables': ['beet', 'carrot'] }
|
9933
|
-
*/
|
9934
|
-
var merge = createAssigner(baseMerge);
|
9935
|
-
|
9936
9990
|
/**
|
9937
9991
|
* The opposite of `_.pick`; this method creates an object composed of the
|
9938
9992
|
* own and inherited enumerable properties of `object` that are not omitted.
|
@@ -10163,7 +10217,7 @@
|
|
10163
10217
|
if (isArr) {
|
10164
10218
|
accumulator = isArray(object) ? new Ctor : [];
|
10165
10219
|
} else {
|
10166
|
-
accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype :
|
10220
|
+
accumulator = baseCreate(isFunction(Ctor) ? Ctor.prototype : undefined);
|
10167
10221
|
}
|
10168
10222
|
} else {
|
10169
10223
|
accumulator = {};
|
@@ -10266,7 +10320,7 @@
|
|
10266
10320
|
*/
|
10267
10321
|
function inRange(value, start, end) {
|
10268
10322
|
start = +start || 0;
|
10269
|
-
if (
|
10323
|
+
if (end === undefined) {
|
10270
10324
|
end = start;
|
10271
10325
|
start = 0;
|
10272
10326
|
} else {
|
@@ -10304,7 +10358,7 @@
|
|
10304
10358
|
*/
|
10305
10359
|
function random(min, max, floating) {
|
10306
10360
|
if (floating && isIterateeCall(min, max, floating)) {
|
10307
|
-
max = floating =
|
10361
|
+
max = floating = undefined;
|
10308
10362
|
}
|
10309
10363
|
var noMin = min == null,
|
10310
10364
|
noMax = max == null;
|
@@ -10491,8 +10545,8 @@
|
|
10491
10545
|
function escapeRegExp(string) {
|
10492
10546
|
string = baseToString(string);
|
10493
10547
|
return (string && reHasRegExpChars.test(string))
|
10494
|
-
? string.replace(reRegExpChars,
|
10495
|
-
: string;
|
10548
|
+
? string.replace(reRegExpChars, escapeRegExpChar)
|
10549
|
+
: (string || '(?:)');
|
10496
10550
|
}
|
10497
10551
|
|
10498
10552
|
/**
|
@@ -10549,8 +10603,8 @@
|
|
10549
10603
|
return string;
|
10550
10604
|
}
|
10551
10605
|
var mid = (length - strLength) / 2,
|
10552
|
-
leftLength =
|
10553
|
-
rightLength =
|
10606
|
+
leftLength = nativeFloor(mid),
|
10607
|
+
rightLength = nativeCeil(mid);
|
10554
10608
|
|
10555
10609
|
chars = createPadding('', rightLength, chars);
|
10556
10610
|
return chars.slice(0, leftLength) + string + chars;
|
@@ -10628,25 +10682,16 @@
|
|
10628
10682
|
* // => [6, 8, 10]
|
10629
10683
|
*/
|
10630
10684
|
function parseInt(string, radix, guard) {
|
10631
|
-
|
10685
|
+
// Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.
|
10686
|
+
// Chrome fails to trim leading <BOM> whitespace characters.
|
10687
|
+
// See https://code.google.com/p/v8/issues/detail?id=3109 for more details.
|
10688
|
+
if (guard ? isIterateeCall(string, radix, guard) : radix == null) {
|
10632
10689
|
radix = 0;
|
10690
|
+
} else if (radix) {
|
10691
|
+
radix = +radix;
|
10633
10692
|
}
|
10634
|
-
|
10635
|
-
|
10636
|
-
// Fallback for environments with pre-ES5 implementations.
|
10637
|
-
if (nativeParseInt(whitespace + '08') != 8) {
|
10638
|
-
parseInt = function(string, radix, guard) {
|
10639
|
-
// Firefox < 21 and Opera < 15 follow ES3 for `parseInt`.
|
10640
|
-
// Chrome fails to trim leading <BOM> whitespace characters.
|
10641
|
-
// See https://code.google.com/p/v8/issues/detail?id=3109 for more details.
|
10642
|
-
if (guard ? isIterateeCall(string, radix, guard) : radix == null) {
|
10643
|
-
radix = 0;
|
10644
|
-
} else if (radix) {
|
10645
|
-
radix = +radix;
|
10646
|
-
}
|
10647
|
-
string = trim(string);
|
10648
|
-
return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
|
10649
|
-
};
|
10693
|
+
string = trim(string);
|
10694
|
+
return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
|
10650
10695
|
}
|
10651
10696
|
|
10652
10697
|
/**
|
@@ -10682,7 +10727,7 @@
|
|
10682
10727
|
if (n % 2) {
|
10683
10728
|
result += string;
|
10684
10729
|
}
|
10685
|
-
n =
|
10730
|
+
n = nativeFloor(n / 2);
|
10686
10731
|
string += string;
|
10687
10732
|
} while (n);
|
10688
10733
|
|
@@ -10867,7 +10912,7 @@
|
|
10867
10912
|
var settings = lodash.templateSettings;
|
10868
10913
|
|
10869
10914
|
if (otherOptions && isIterateeCall(string, options, otherOptions)) {
|
10870
|
-
options = otherOptions =
|
10915
|
+
options = otherOptions = undefined;
|
10871
10916
|
}
|
10872
10917
|
string = baseToString(string);
|
10873
10918
|
options = assignWith(baseAssign({}, otherOptions || options), settings, assignOwnDefaults);
|
@@ -11103,7 +11148,7 @@
|
|
11103
11148
|
*/
|
11104
11149
|
function trunc(string, options, guard) {
|
11105
11150
|
if (guard && isIterateeCall(string, options, guard)) {
|
11106
|
-
options =
|
11151
|
+
options = undefined;
|
11107
11152
|
}
|
11108
11153
|
var length = DEFAULT_TRUNC_LENGTH,
|
11109
11154
|
omission = DEFAULT_TRUNC_OMISSION;
|
@@ -11198,7 +11243,7 @@
|
|
11198
11243
|
*/
|
11199
11244
|
function words(string, pattern, guard) {
|
11200
11245
|
if (guard && isIterateeCall(string, pattern, guard)) {
|
11201
|
-
pattern =
|
11246
|
+
pattern = undefined;
|
11202
11247
|
}
|
11203
11248
|
string = baseToString(string);
|
11204
11249
|
return string.match(pattern || reWords) || [];
|
@@ -11274,7 +11319,7 @@
|
|
11274
11319
|
*/
|
11275
11320
|
function callback(func, thisArg, guard) {
|
11276
11321
|
if (guard && isIterateeCall(func, thisArg, guard)) {
|
11277
|
-
thisArg =
|
11322
|
+
thisArg = undefined;
|
11278
11323
|
}
|
11279
11324
|
return isObjectLike(func)
|
11280
11325
|
? matches(func)
|
@@ -11475,8 +11520,8 @@
|
|
11475
11520
|
function mixin(object, source, options) {
|
11476
11521
|
if (options == null) {
|
11477
11522
|
var isObj = isObject(source),
|
11478
|
-
props = isObj ? keys(source) :
|
11479
|
-
methodNames = (props && props.length) ? baseFunctions(source, props) :
|
11523
|
+
props = isObj ? keys(source) : undefined,
|
11524
|
+
methodNames = (props && props.length) ? baseFunctions(source, props) : undefined;
|
11480
11525
|
|
11481
11526
|
if (!(methodNames ? methodNames.length : isObj)) {
|
11482
11527
|
methodNames = false;
|
@@ -11515,9 +11560,7 @@
|
|
11515
11560
|
result.__chain__ = chainAll;
|
11516
11561
|
return result;
|
11517
11562
|
}
|
11518
|
-
|
11519
|
-
push.apply(args, arguments);
|
11520
|
-
return func.apply(object, args);
|
11563
|
+
return func.apply(object, arrayPush([this.value()], arguments));
|
11521
11564
|
};
|
11522
11565
|
}(func));
|
11523
11566
|
}
|
@@ -11538,7 +11581,7 @@
|
|
11538
11581
|
* var lodash = _.noConflict();
|
11539
11582
|
*/
|
11540
11583
|
function noConflict() {
|
11541
|
-
|
11584
|
+
root._ = oldDash;
|
11542
11585
|
return this;
|
11543
11586
|
}
|
11544
11587
|
|
@@ -11647,7 +11690,7 @@
|
|
11647
11690
|
*/
|
11648
11691
|
function range(start, end, step) {
|
11649
11692
|
if (step && isIterateeCall(start, end, step)) {
|
11650
|
-
end = step =
|
11693
|
+
end = step = undefined;
|
11651
11694
|
}
|
11652
11695
|
start = +start || 0;
|
11653
11696
|
step = step == null ? 1 : (+step || 0);
|
@@ -11661,7 +11704,7 @@
|
|
11661
11704
|
// Use `Array(length)` so engines like Chakra and V8 avoid slower modes.
|
11662
11705
|
// See https://youtu.be/XAqIpGU8ZZk#t=17m25s for more details.
|
11663
11706
|
var index = -1,
|
11664
|
-
length = nativeMax(
|
11707
|
+
length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
|
11665
11708
|
result = Array(length);
|
11666
11709
|
|
11667
11710
|
while (++index < length) {
|
@@ -11699,7 +11742,7 @@
|
|
11699
11742
|
* // => also invokes `mage.castSpell(n)` three times
|
11700
11743
|
*/
|
11701
11744
|
function times(n, iteratee, thisArg) {
|
11702
|
-
n =
|
11745
|
+
n = nativeFloor(n);
|
11703
11746
|
|
11704
11747
|
// Exit early to avoid a JSC JIT bug in Safari 8
|
11705
11748
|
// where `Array(0)` is treated as `Array(1)`.
|
@@ -11761,6 +11804,50 @@
|
|
11761
11804
|
return (+augend || 0) + (+addend || 0);
|
11762
11805
|
}
|
11763
11806
|
|
11807
|
+
/**
|
11808
|
+
* Calculates `n` rounded up to `precision`.
|
11809
|
+
*
|
11810
|
+
* @static
|
11811
|
+
* @memberOf _
|
11812
|
+
* @category Math
|
11813
|
+
* @param {number} n The number to round up.
|
11814
|
+
* @param {number} [precision=0] The precision to round up to.
|
11815
|
+
* @returns {number} Returns the rounded up number.
|
11816
|
+
* @example
|
11817
|
+
*
|
11818
|
+
* _.ceil(4.006);
|
11819
|
+
* // => 5
|
11820
|
+
*
|
11821
|
+
* _.ceil(6.004, 2);
|
11822
|
+
* // => 6.01
|
11823
|
+
*
|
11824
|
+
* _.ceil(6040, -2);
|
11825
|
+
* // => 6100
|
11826
|
+
*/
|
11827
|
+
var ceil = createRound('ceil');
|
11828
|
+
|
11829
|
+
/**
|
11830
|
+
* Calculates `n` rounded down to `precision`.
|
11831
|
+
*
|
11832
|
+
* @static
|
11833
|
+
* @memberOf _
|
11834
|
+
* @category Math
|
11835
|
+
* @param {number} n The number to round down.
|
11836
|
+
* @param {number} [precision=0] The precision to round down to.
|
11837
|
+
* @returns {number} Returns the rounded down number.
|
11838
|
+
* @example
|
11839
|
+
*
|
11840
|
+
* _.floor(4.006);
|
11841
|
+
* // => 4
|
11842
|
+
*
|
11843
|
+
* _.floor(0.046, 2);
|
11844
|
+
* // => 0.04
|
11845
|
+
*
|
11846
|
+
* _.floor(4060, -2);
|
11847
|
+
* // => 4000
|
11848
|
+
*/
|
11849
|
+
var floor = createRound('floor');
|
11850
|
+
|
11764
11851
|
/**
|
11765
11852
|
* Gets the maximum value of `collection`. If `collection` is empty or falsey
|
11766
11853
|
* `-Infinity` is returned. If an iteratee function is provided it is invoked
|
@@ -11859,6 +11946,28 @@
|
|
11859
11946
|
*/
|
11860
11947
|
var min = createExtremum(lt, POSITIVE_INFINITY);
|
11861
11948
|
|
11949
|
+
/**
|
11950
|
+
* Calculates `n` rounded to `precision`.
|
11951
|
+
*
|
11952
|
+
* @static
|
11953
|
+
* @memberOf _
|
11954
|
+
* @category Math
|
11955
|
+
* @param {number} n The number to round.
|
11956
|
+
* @param {number} [precision=0] The precision to round to.
|
11957
|
+
* @returns {number} Returns the rounded number.
|
11958
|
+
* @example
|
11959
|
+
*
|
11960
|
+
* _.round(4.006);
|
11961
|
+
* // => 4
|
11962
|
+
*
|
11963
|
+
* _.round(4.006, 2);
|
11964
|
+
* // => 4.01
|
11965
|
+
*
|
11966
|
+
* _.round(4060, -2);
|
11967
|
+
* // => 4100
|
11968
|
+
*/
|
11969
|
+
var round = createRound('round');
|
11970
|
+
|
11862
11971
|
/**
|
11863
11972
|
* Gets the sum of the values in `collection`.
|
11864
11973
|
*
|
@@ -11893,17 +12002,11 @@
|
|
11893
12002
|
*/
|
11894
12003
|
function sum(collection, iteratee, thisArg) {
|
11895
12004
|
if (thisArg && isIterateeCall(collection, iteratee, thisArg)) {
|
11896
|
-
iteratee =
|
11897
|
-
}
|
11898
|
-
var callback = getCallback(),
|
11899
|
-
noIteratee = iteratee == null;
|
11900
|
-
|
11901
|
-
if (!(noIteratee && callback === baseCallback)) {
|
11902
|
-
noIteratee = false;
|
11903
|
-
iteratee = callback(iteratee, thisArg, 3);
|
12005
|
+
iteratee = undefined;
|
11904
12006
|
}
|
11905
|
-
|
11906
|
-
|
12007
|
+
iteratee = getCallback(iteratee, thisArg, 3);
|
12008
|
+
return iteratee.length == 1
|
12009
|
+
? arraySum(isArray(collection) ? collection : toIterable(collection), iteratee)
|
11907
12010
|
: baseSum(collection, iteratee);
|
11908
12011
|
}
|
11909
12012
|
|
@@ -11950,6 +12053,7 @@
|
|
11950
12053
|
lodash.curryRight = curryRight;
|
11951
12054
|
lodash.debounce = debounce;
|
11952
12055
|
lodash.defaults = defaults;
|
12056
|
+
lodash.defaultsDeep = defaultsDeep;
|
11953
12057
|
lodash.defer = defer;
|
11954
12058
|
lodash.delay = delay;
|
11955
12059
|
lodash.difference = difference;
|
@@ -11988,6 +12092,7 @@
|
|
11988
12092
|
lodash.method = method;
|
11989
12093
|
lodash.methodOf = methodOf;
|
11990
12094
|
lodash.mixin = mixin;
|
12095
|
+
lodash.modArgs = modArgs;
|
11991
12096
|
lodash.negate = negate;
|
11992
12097
|
lodash.omit = omit;
|
11993
12098
|
lodash.once = once;
|
@@ -12063,6 +12168,7 @@
|
|
12063
12168
|
lodash.attempt = attempt;
|
12064
12169
|
lodash.camelCase = camelCase;
|
12065
12170
|
lodash.capitalize = capitalize;
|
12171
|
+
lodash.ceil = ceil;
|
12066
12172
|
lodash.clone = clone;
|
12067
12173
|
lodash.cloneDeep = cloneDeep;
|
12068
12174
|
lodash.deburr = deburr;
|
@@ -12078,6 +12184,7 @@
|
|
12078
12184
|
lodash.findLastKey = findLastKey;
|
12079
12185
|
lodash.findWhere = findWhere;
|
12080
12186
|
lodash.first = first;
|
12187
|
+
lodash.floor = floor;
|
12081
12188
|
lodash.get = get;
|
12082
12189
|
lodash.gt = gt;
|
12083
12190
|
lodash.gte = gte;
|
@@ -12126,6 +12233,7 @@
|
|
12126
12233
|
lodash.reduceRight = reduceRight;
|
12127
12234
|
lodash.repeat = repeat;
|
12128
12235
|
lodash.result = result;
|
12236
|
+
lodash.round = round;
|
12129
12237
|
lodash.runInContext = runInContext;
|
12130
12238
|
lodash.size = size;
|
12131
12239
|
lodash.snakeCase = snakeCase;
|
@@ -12196,48 +12304,20 @@
|
|
12196
12304
|
lodash[methodName].placeholder = lodash;
|
12197
12305
|
});
|
12198
12306
|
|
12199
|
-
// Add `LazyWrapper` methods that accept an `iteratee` value.
|
12200
|
-
arrayEach(['dropWhile', 'filter', 'map', 'takeWhile'], function(methodName, type) {
|
12201
|
-
var isFilter = type != LAZY_MAP_FLAG,
|
12202
|
-
isDropWhile = type == LAZY_DROP_WHILE_FLAG;
|
12203
|
-
|
12204
|
-
LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {
|
12205
|
-
var filtered = this.__filtered__,
|
12206
|
-
result = (filtered && isDropWhile) ? new LazyWrapper(this) : this.clone(),
|
12207
|
-
iteratees = result.__iteratees__ || (result.__iteratees__ = []);
|
12208
|
-
|
12209
|
-
iteratees.push({
|
12210
|
-
'done': false,
|
12211
|
-
'count': 0,
|
12212
|
-
'index': 0,
|
12213
|
-
'iteratee': getCallback(iteratee, thisArg, 1),
|
12214
|
-
'limit': -1,
|
12215
|
-
'type': type
|
12216
|
-
});
|
12217
|
-
|
12218
|
-
result.__filtered__ = filtered || isFilter;
|
12219
|
-
return result;
|
12220
|
-
};
|
12221
|
-
});
|
12222
|
-
|
12223
12307
|
// Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
|
12224
12308
|
arrayEach(['drop', 'take'], function(methodName, index) {
|
12225
|
-
var whileName = methodName + 'While';
|
12226
|
-
|
12227
12309
|
LazyWrapper.prototype[methodName] = function(n) {
|
12228
|
-
var filtered = this.__filtered__
|
12229
|
-
|
12310
|
+
var filtered = this.__filtered__;
|
12311
|
+
if (filtered && !index) {
|
12312
|
+
return new LazyWrapper(this);
|
12313
|
+
}
|
12314
|
+
n = n == null ? 1 : nativeMax(nativeFloor(n) || 0, 0);
|
12230
12315
|
|
12231
|
-
|
12316
|
+
var result = this.clone();
|
12232
12317
|
if (filtered) {
|
12233
|
-
|
12234
|
-
result.__takeCount__ = nativeMin(result.__takeCount__, n);
|
12235
|
-
} else {
|
12236
|
-
last(result.__iteratees__).limit = n;
|
12237
|
-
}
|
12318
|
+
result.__takeCount__ = nativeMin(result.__takeCount__, n);
|
12238
12319
|
} else {
|
12239
|
-
|
12240
|
-
views.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });
|
12320
|
+
result.__views__.push({ 'size': n, 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') });
|
12241
12321
|
}
|
12242
12322
|
return result;
|
12243
12323
|
};
|
@@ -12245,9 +12325,18 @@
|
|
12245
12325
|
LazyWrapper.prototype[methodName + 'Right'] = function(n) {
|
12246
12326
|
return this.reverse()[methodName](n).reverse();
|
12247
12327
|
};
|
12328
|
+
});
|
12248
12329
|
|
12249
|
-
|
12250
|
-
|
12330
|
+
// Add `LazyWrapper` methods that accept an `iteratee` value.
|
12331
|
+
arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
|
12332
|
+
var type = index + 1,
|
12333
|
+
isFilter = type != LAZY_MAP_FLAG;
|
12334
|
+
|
12335
|
+
LazyWrapper.prototype[methodName] = function(iteratee, thisArg) {
|
12336
|
+
var result = this.clone();
|
12337
|
+
result.__iteratees__.push({ 'iteratee': getCallback(iteratee, thisArg, 1), 'type': type });
|
12338
|
+
result.__filtered__ = result.__filtered__ || isFilter;
|
12339
|
+
return result;
|
12251
12340
|
};
|
12252
12341
|
});
|
12253
12342
|
|
@@ -12265,7 +12354,7 @@
|
|
12265
12354
|
var dropName = 'drop' + (index ? '' : 'Right');
|
12266
12355
|
|
12267
12356
|
LazyWrapper.prototype[methodName] = function() {
|
12268
|
-
return this[dropName](1);
|
12357
|
+
return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
|
12269
12358
|
};
|
12270
12359
|
});
|
12271
12360
|
|
@@ -12294,10 +12383,13 @@
|
|
12294
12383
|
start = start == null ? 0 : (+start || 0);
|
12295
12384
|
|
12296
12385
|
var result = this;
|
12386
|
+
if (result.__filtered__ && (start > 0 || end < 0)) {
|
12387
|
+
return new LazyWrapper(result);
|
12388
|
+
}
|
12297
12389
|
if (start < 0) {
|
12298
|
-
result =
|
12390
|
+
result = result.takeRight(-start);
|
12299
12391
|
} else if (start) {
|
12300
|
-
result =
|
12392
|
+
result = result.drop(start);
|
12301
12393
|
}
|
12302
12394
|
if (end !== undefined) {
|
12303
12395
|
end = (+end || 0);
|
@@ -12306,21 +12398,25 @@
|
|
12306
12398
|
return result;
|
12307
12399
|
};
|
12308
12400
|
|
12401
|
+
LazyWrapper.prototype.takeRightWhile = function(predicate, thisArg) {
|
12402
|
+
return this.reverse().takeWhile(predicate, thisArg).reverse();
|
12403
|
+
};
|
12404
|
+
|
12309
12405
|
LazyWrapper.prototype.toArray = function() {
|
12310
|
-
return this.
|
12406
|
+
return this.take(POSITIVE_INFINITY);
|
12311
12407
|
};
|
12312
12408
|
|
12313
12409
|
// Add `LazyWrapper` methods to `lodash.prototype`.
|
12314
12410
|
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
|
12315
|
-
var
|
12411
|
+
var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
|
12412
|
+
retUnwrapped = /^(?:first|last)$/.test(methodName),
|
12413
|
+
lodashFunc = lodash[retUnwrapped ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName];
|
12414
|
+
|
12316
12415
|
if (!lodashFunc) {
|
12317
12416
|
return;
|
12318
12417
|
}
|
12319
|
-
var checkIteratee = /^(?:filter|map|reject)|While$/.test(methodName),
|
12320
|
-
retUnwrapped = /^(?:first|last)$/.test(methodName);
|
12321
|
-
|
12322
12418
|
lodash.prototype[methodName] = function() {
|
12323
|
-
var args = arguments,
|
12419
|
+
var args = retUnwrapped ? [1] : arguments,
|
12324
12420
|
chainAll = this.__chain__,
|
12325
12421
|
value = this.__wrapped__,
|
12326
12422
|
isHybrid = !!this.__actions__.length,
|
@@ -12329,28 +12425,30 @@
|
|
12329
12425
|
useLazy = isLazy || isArray(value);
|
12330
12426
|
|
12331
12427
|
if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
|
12332
|
-
//
|
12428
|
+
// Avoid lazy use if the iteratee has a "length" value other than `1`.
|
12333
12429
|
isLazy = useLazy = false;
|
12334
12430
|
}
|
12335
|
-
var onlyLazy = isLazy && !isHybrid;
|
12336
|
-
if (retUnwrapped && !chainAll) {
|
12337
|
-
return onlyLazy
|
12338
|
-
? func.call(value)
|
12339
|
-
: lodashFunc.call(lodash, this.value());
|
12340
|
-
}
|
12341
12431
|
var interceptor = function(value) {
|
12342
|
-
|
12343
|
-
|
12344
|
-
|
12432
|
+
return (retUnwrapped && chainAll)
|
12433
|
+
? lodashFunc(value, 1)[0]
|
12434
|
+
: lodashFunc.apply(undefined, arrayPush([value], args));
|
12345
12435
|
};
|
12346
|
-
if (useLazy) {
|
12347
|
-
var wrapper = onlyLazy ? value : new LazyWrapper(this),
|
12348
|
-
result = func.apply(wrapper, args);
|
12349
12436
|
|
12350
|
-
|
12351
|
-
|
12352
|
-
|
12437
|
+
var action = { 'func': thru, 'args': [interceptor], 'thisArg': undefined },
|
12438
|
+
onlyLazy = isLazy && !isHybrid;
|
12439
|
+
|
12440
|
+
if (retUnwrapped && !chainAll) {
|
12441
|
+
if (onlyLazy) {
|
12442
|
+
value = value.clone();
|
12443
|
+
value.__actions__.push(action);
|
12444
|
+
return func.call(value);
|
12353
12445
|
}
|
12446
|
+
return lodashFunc.call(undefined, this.value())[0];
|
12447
|
+
}
|
12448
|
+
if (!retUnwrapped && useLazy) {
|
12449
|
+
value = onlyLazy ? value : new LazyWrapper(this);
|
12450
|
+
var result = func.apply(value, args);
|
12451
|
+
result.__actions__.push(action);
|
12354
12452
|
return new LodashWrapper(result, chainAll);
|
12355
12453
|
}
|
12356
12454
|
return this.thru(interceptor);
|
@@ -12358,7 +12456,7 @@
|
|
12358
12456
|
});
|
12359
12457
|
|
12360
12458
|
// Add `Array` and `String` methods to `lodash.prototype`.
|
12361
|
-
arrayEach(['
|
12459
|
+
arrayEach(['join', 'pop', 'push', 'replace', 'shift', 'sort', 'splice', 'split', 'unshift'], function(methodName) {
|
12362
12460
|
var protoFunc = (/^(?:replace|split)$/.test(methodName) ? stringProto : arrayProto)[methodName],
|
12363
12461
|
chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
|
12364
12462
|
fixObjects = !support.spliceObjects && /^(?:pop|shift|splice)$/.test(methodName),
|
@@ -12396,7 +12494,7 @@
|
|
12396
12494
|
}
|
12397
12495
|
});
|
12398
12496
|
|
12399
|
-
realNames[createHybridWrapper(
|
12497
|
+
realNames[createHybridWrapper(undefined, BIND_KEY_FLAG).name] = [{ 'name': 'wrapper', 'func': undefined }];
|
12400
12498
|
|
12401
12499
|
// Add functions to the lazy wrapper.
|
12402
12500
|
LazyWrapper.prototype.clone = lazyClone;
|
@@ -12406,6 +12504,7 @@
|
|
12406
12504
|
// Add chaining functions to the `lodash` wrapper.
|
12407
12505
|
lodash.prototype.chain = wrapperChain;
|
12408
12506
|
lodash.prototype.commit = wrapperCommit;
|
12507
|
+
lodash.prototype.concat = wrapperConcat;
|
12409
12508
|
lodash.prototype.plant = wrapperPlant;
|
12410
12509
|
lodash.prototype.reverse = wrapperReverse;
|
12411
12510
|
lodash.prototype.toString = wrapperToString;
|