lodash-rails 4.15.0 → 4.16.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7c8cfaf02f025c0237884f7445e04a949a48e1f4
4
- data.tar.gz: a337adee730d7851c3eb1f541f4998bd1b070587
3
+ metadata.gz: 3fbb6e7d8fbc58878e2efeb6be1977d971dc38f7
4
+ data.tar.gz: 341419b93c8391a6c6f67cbde81c311c036457a4
5
5
  SHA512:
6
- metadata.gz: efad0ea319fa7a79b97ead47ba398f476dbf3a934d80045e141dbb06588f5eea535f763f5f68c0d4022769a85bc8fdbaad144f6b37c80bb62b2f4871f8f31a93
7
- data.tar.gz: 27424a596c0b6090021039ee5a0c311d33dfe17d8e3ad99d03bc7e342919cdcea5399371b2709267b57bdc837d0cc1a616c4ba42bf51e9e986228868a530d9b9
6
+ metadata.gz: 53539968cf3fb6087024fc7b34d9a0774428ce11d4e329e8d43377d74936cb825d1d3762f4e1f0dd8d167ff19c9e0c09f15f44d79d03d6ba7b19572c923807e8
7
+ data.tar.gz: 56dfaeae8234e9e064815bc627762b704bdaa495432150dd88408364b7e24c0b5a3ed2b0ac00d82e6ced5c570aa2905d86ccb0834523b0b24403f21a3276c48e
data/README.md CHANGED
@@ -18,7 +18,7 @@ Add the necessary library to `app/assets/javascripts/application.js`:
18
18
 
19
19
  ## What's included?
20
20
 
21
- lodash 4.15.0:
21
+ lodash 4.16.1:
22
22
 
23
23
  * lodash.core.js
24
24
  * lodash.core.min.js
@@ -1,5 +1,5 @@
1
1
  module LoDash
2
2
  module Rails
3
- VERSION = "4.15.0"
3
+ VERSION = "4.16.1"
4
4
  end
5
5
  end
@@ -13,7 +13,7 @@
13
13
  var undefined;
14
14
 
15
15
  /** Used as the semantic version number. */
16
- var VERSION = '4.15.0';
16
+ var VERSION = '4.16.1';
17
17
 
18
18
  /** Used as the `TypeError` message for "Functions" methods. */
19
19
  var FUNC_ERROR_TEXT = 'Expected a function';
@@ -44,7 +44,7 @@
44
44
  stringTag = '[object String]';
45
45
 
46
46
  /** Used to match HTML entities and HTML characters. */
47
- var reUnescapedHtml = /[&<>"'`]/g,
47
+ var reUnescapedHtml = /[&<>"']/g,
48
48
  reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
49
49
 
50
50
  /** Used to map characters to HTML entities. */
@@ -53,8 +53,7 @@
53
53
  '<': '&lt;',
54
54
  '>': '&gt;',
55
55
  '"': '&quot;',
56
- "'": '&#39;',
57
- '`': '&#96;'
56
+ "'": '&#39;'
58
57
  };
59
58
 
60
59
  /** Detect free variable `global` from Node.js. */
@@ -183,17 +182,6 @@
183
182
  */
184
183
  var escapeHtmlChar = basePropertyOf(htmlEscapes);
185
184
 
186
- /**
187
- * Checks if `value` is a host object in IE < 9.
188
- *
189
- * @private
190
- * @param {*} value The value to check.
191
- * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
192
- */
193
- function isHostObject() {
194
- return false;
195
- }
196
-
197
185
  /**
198
186
  * Creates a unary function that invokes `func` with its argument transformed.
199
187
  *
@@ -414,10 +402,23 @@
414
402
  var objValue = object[key];
415
403
  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
416
404
  (value === undefined && !(key in object))) {
417
- object[key] = value;
405
+ baseAssignValue(object, key, value);
418
406
  }
419
407
  }
420
408
 
409
+ /**
410
+ * The base implementation of `assignValue` and `assignMergeValue` without
411
+ * value checks.
412
+ *
413
+ * @private
414
+ * @param {Object} object The object to modify.
415
+ * @param {string} key The key of the property to assign.
416
+ * @param {*} value The value to assign.
417
+ */
418
+ function baseAssignValue(object, key, value) {
419
+ object[key] = value;
420
+ }
421
+
421
422
  /**
422
423
  * The base implementation of `_.create` without support for assigning
423
424
  * properties to the created object.
@@ -674,8 +675,8 @@
674
675
  othTag = objectToString.call(other);
675
676
  othTag = othTag == argsTag ? objectTag : othTag;
676
677
  }
677
- var objIsObj = objTag == objectTag && !isHostObject(object),
678
- othIsObj = othTag == objectTag && !isHostObject(other),
678
+ var objIsObj = objTag == objectTag,
679
+ othIsObj = othTag == objectTag,
679
680
  isSameTag = objTag == othTag;
680
681
 
681
682
  stack || (stack = []);
@@ -832,24 +833,7 @@
832
833
  * @returns {Function} Returns the new function.
833
834
  */
834
835
  function baseRest(func, start) {
835
- start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
836
- return function() {
837
- var args = arguments,
838
- index = -1,
839
- length = nativeMax(args.length - start, 0),
840
- array = Array(length);
841
-
842
- while (++index < length) {
843
- array[index] = args[start + index];
844
- }
845
- index = -1;
846
- var otherArgs = Array(start + 1);
847
- while (++index < start) {
848
- otherArgs[index] = args[index];
849
- }
850
- otherArgs[start] = array;
851
- return func.apply(this, otherArgs);
852
- };
836
+ return setToString(overRest(func, start, identity), func + '');
853
837
  }
854
838
 
855
839
  /**
@@ -979,6 +963,7 @@
979
963
  * @returns {Object} Returns `object`.
980
964
  */
981
965
  function copyObject(source, props, object, customizer) {
966
+ var isNew = !object;
982
967
  object || (object = {});
983
968
 
984
969
  var index = -1,
@@ -991,7 +976,14 @@
991
976
  ? customizer(object[key], source[key], key, object, source)
992
977
  : undefined;
993
978
 
994
- assignValue(object, key, newValue === undefined ? source[key] : newValue);
979
+ if (newValue === undefined) {
980
+ newValue = source[key];
981
+ }
982
+ if (isNew) {
983
+ baseAssignValue(object, key, newValue);
984
+ } else {
985
+ assignValue(object, key, newValue);
986
+ }
995
987
  }
996
988
  return object;
997
989
  }
@@ -1326,6 +1318,17 @@
1326
1318
  return result;
1327
1319
  }
1328
1320
 
1321
+ /**
1322
+ * A specialized version of `baseRest` which flattens the rest array.
1323
+ *
1324
+ * @private
1325
+ * @param {Function} func The function to apply a rest parameter to.
1326
+ * @returns {Function} Returns the new function.
1327
+ */
1328
+ function flatRest(func) {
1329
+ return setToString(overRest(func, undefined, flatten), func + '');
1330
+ }
1331
+
1329
1332
  /**
1330
1333
  * Checks if `value` is a flattenable `arguments` object or array.
1331
1334
  *
@@ -1356,6 +1359,46 @@
1356
1359
  return result;
1357
1360
  }
1358
1361
 
1362
+ /**
1363
+ * A specialized version of `baseRest` which transforms the rest array.
1364
+ *
1365
+ * @private
1366
+ * @param {Function} func The function to apply a rest parameter to.
1367
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
1368
+ * @param {Function} transform The rest array transform.
1369
+ * @returns {Function} Returns the new function.
1370
+ */
1371
+ function overRest(func, start, transform) {
1372
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
1373
+ return function() {
1374
+ var args = arguments,
1375
+ index = -1,
1376
+ length = nativeMax(args.length - start, 0),
1377
+ array = Array(length);
1378
+
1379
+ while (++index < length) {
1380
+ array[index] = args[start + index];
1381
+ }
1382
+ index = -1;
1383
+ var otherArgs = Array(start + 1);
1384
+ while (++index < start) {
1385
+ otherArgs[index] = args[index];
1386
+ }
1387
+ otherArgs[start] = transform(array);
1388
+ return func.apply(this, otherArgs);
1389
+ };
1390
+ }
1391
+
1392
+ /**
1393
+ * Sets the `toString` method of `func` to return `string`.
1394
+ *
1395
+ * @private
1396
+ * @param {Function} func The function to modify.
1397
+ * @param {Function} string The `toString` result.
1398
+ * @returns {Function} Returns `func`.
1399
+ */
1400
+ var setToString = identity;
1401
+
1359
1402
  /**
1360
1403
  * Converts `value` to a string key if it's not a string or symbol.
1361
1404
  *
@@ -1409,17 +1452,18 @@
1409
1452
  * // => [1]
1410
1453
  */
1411
1454
  function concat() {
1412
- var length = arguments.length,
1413
- args = Array(length ? length - 1 : 0),
1455
+ var length = arguments.length;
1456
+ if (!length) {
1457
+ return [];
1458
+ }
1459
+ var args = Array(length - 1),
1414
1460
  array = arguments[0],
1415
1461
  index = length;
1416
1462
 
1417
1463
  while (index--) {
1418
1464
  args[index - 1] = arguments[index];
1419
1465
  }
1420
- return length
1421
- ? arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1))
1422
- : [];
1466
+ return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
1423
1467
  }
1424
1468
 
1425
1469
  /**
@@ -1905,7 +1949,7 @@
1905
1949
  * @see _.forEachRight
1906
1950
  * @example
1907
1951
  *
1908
- * _([1, 2]).forEach(function(value) {
1952
+ * _.forEach([1, 2], function(value) {
1909
1953
  * console.log(value);
1910
1954
  * });
1911
1955
  * // => Logs `1` then `2`.
@@ -2099,16 +2143,11 @@
2099
2143
  * { 'user': 'barney', 'age': 34 }
2100
2144
  * ];
2101
2145
  *
2102
- * _.sortBy(users, function(o) { return o.user; });
2146
+ * _.sortBy(users, [function(o) { return o.user; }]);
2103
2147
  * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
2104
2148
  *
2105
2149
  * _.sortBy(users, ['user', 'age']);
2106
2150
  * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
2107
- *
2108
- * _.sortBy(users, 'user', function(o) {
2109
- * return Math.floor(o.age / 10);
2110
- * });
2111
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
2112
2151
  */
2113
2152
  function sortBy(collection, iteratee) {
2114
2153
  var index = 0;
@@ -2212,7 +2251,7 @@
2212
2251
  * _.defer(function(text) {
2213
2252
  * console.log(text);
2214
2253
  * }, 'deferred');
2215
- * // => Logs 'deferred' after one or more milliseconds.
2254
+ * // => Logs 'deferred' after one millisecond.
2216
2255
  */
2217
2256
  var defer = baseRest(function(func, args) {
2218
2257
  return baseDelay(func, 1, args);
@@ -2698,7 +2737,7 @@
2698
2737
  */
2699
2738
  function isObject(value) {
2700
2739
  var type = typeof value;
2701
- return !!value && (type == 'object' || type == 'function');
2740
+ return value != null && (type == 'object' || type == 'function');
2702
2741
  }
2703
2742
 
2704
2743
  /**
@@ -2726,7 +2765,7 @@
2726
2765
  * // => false
2727
2766
  */
2728
2767
  function isObjectLike(value) {
2729
- return !!value && typeof value == 'object';
2768
+ return value != null && typeof value == 'object';
2730
2769
  }
2731
2770
 
2732
2771
  /**
@@ -3263,8 +3302,8 @@
3263
3302
  * _.pick(object, ['a', 'c']);
3264
3303
  * // => { 'a': 1, 'c': 3 }
3265
3304
  */
3266
- var pick = baseRest(function(object, props) {
3267
- return object == null ? {} : basePick(object, baseMap(baseFlatten(props, 1), toKey));
3305
+ var pick = flatRest(function(object, props) {
3306
+ return object == null ? {} : basePick(object, baseMap(props, toKey));
3268
3307
  });
3269
3308
 
3270
3309
  /**
@@ -3337,8 +3376,8 @@
3337
3376
  /*------------------------------------------------------------------------*/
3338
3377
 
3339
3378
  /**
3340
- * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to
3341
- * their corresponding HTML entities.
3379
+ * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
3380
+ * corresponding HTML entities.
3342
3381
  *
3343
3382
  * **Note:** No other characters are escaped. To escape additional
3344
3383
  * characters use a third-party library like [_he_](https://mths.be/he).
@@ -3349,12 +3388,6 @@
3349
3388
  * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
3350
3389
  * (under "semi-related fun fact") for more details.
3351
3390
  *
3352
- * Backticks are escaped because in IE < 9, they can break out of
3353
- * attribute values or HTML comments. See [#59](https://html5sec.org/#59),
3354
- * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
3355
- * [#133](https://html5sec.org/#133) of the
3356
- * [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.
3357
- *
3358
3391
  * When working with HTML you should always
3359
3392
  * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
3360
3393
  * XSS vectors.
@@ -3,26 +3,26 @@
3
3
  * lodash (Custom Build) /license | Underscore.js 1.8.3 underscorejs.org/LICENSE
4
4
  * Build: `lodash core -o ./dist/lodash.core.js`
5
5
  */
6
- ;(function(){function n(n,t){return n.push.apply(n,t),n}function t(n){return function(t){return null==t?Z:t[n]}}function r(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function e(n,t){return d(t,function(t){return n[t]})}function u(n){return n instanceof o?n:new o(n)}function o(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function i(n,t,r,e){return n===Z||J(n,an[r])&&!ln.call(e,r)?t:n}function c(n){return V(n)?vn(n):{}}function f(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");
7
- return setTimeout(function(){n.apply(Z,r)},t)}function a(n,t){var r=true;return jn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function l(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===Z?i===i:r(i,c)))var c=i,f=o}return f}function p(n,t){var r=[];return jn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function s(t,r,e,u,o){var i=-1,c=t.length;for(e||(e=D),o||(o=[]);++i<c;){var f=t[i];0<r&&e(f)?1<r?s(f,r-1,e,u,o):n(o,f):u||(o[o.length]=f)}return o}function h(n,t){return n&&dn(n,t,Rn);
8
- }function v(n,t){return p(t,function(t){return U(n[t])})}function b(n,t){return n>t}function y(n,t,r,e,u){return n===t||(null==n||null==t||!V(n)&&!H(t)?n!==n&&t!==t:g(n,t,y,r,e,u))}function g(n,t,r,e,u,o){var i=wn(n),c=wn(t),f="[object Array]",a="[object Array]";i||(f=sn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=sn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f&&true,c="[object Object]"==a&&true,a=f==a;o||(o=[]);var p=On(o,function(t){return t[0]==n;
9
- }),s=On(o,function(n){return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=B(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=J(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 2&u||(i=l&&ln.call(n,"__wrapped__"),f=c&&ln.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,
10
- f=f?t.value():t,r=r(i,f,e,u,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?X:(typeof n=="object"?m:t)(n)}function j(n,t){return n<t}function d(n,t){var r=-1,e=P(n)?Array(n.length):[];return jn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function m(n){var t=gn(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&y(n[u],r[u],Z,3)))return false}return true}}function O(n,t){return n=Object(n),C(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function x(n){
11
- var t;return t=_n(t===Z?n.length-1:t,0),function(){for(var r=arguments,e=-1,u=_n(r.length-t,0),o=Array(u);++e<u;)o[e]=r[t+e];for(e=-1,u=Array(t+1);++e<t;)u[e]=r[e];return u[t]=o,n.apply(this,u)}}function A(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function E(n){return A(n,0,n.length)}function w(n,t){var r;return jn(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function k(t,r){return C(r,function(t,r){return r.func.apply(r.thisArg,n([t],r.args));
12
- },t)}function N(n,t,r,e){r||(r={});for(var u=-1,o=t.length;++u<o;){var i=t[u],c=e?e(r[i],n[i],i,r,n):Z,f=r,a=i,i=c===Z?n[i]:c,c=f[a];ln.call(f,a)&&J(c,i)&&(i!==Z||a in f)||(f[a]=i)}return r}function S(n){return x(function(t,r){var e=-1,u=r.length,o=1<u?r[u-1]:Z,o=3<n.length&&typeof o=="function"?(u--,o):Z;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function T(n){return function(){var t=arguments,r=c(n.prototype),t=n.apply(r,t);return V(t)?t:r}}function F(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==un&&this instanceof e?u:n;++c<f;)a[c]=r[c];
13
- for(;i--;)a[c++]=arguments[++o];return l.apply(t,a)}if(typeof n!="function")throw new TypeError("Expected a function");var u=T(n);return e}function B(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(2&u&&c>i))return false;for(var c=-1,f=true,a=1&u?[]:Z;++c<i;){var l=n[c],p=t[c];if(void 0!==Z){f=false;break}if(a){if(!w(t,function(n,t){if(!$(a,t)&&(l===n||r(l,n,e,u,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!r(l,p,e,u,o)){f=false;break}}return f}function R(n,t,r,e,u,o){var i=2&u,c=Rn(n),f=c.length,a=Rn(t).length;
14
- if(f!=a&&!i)return false;for(var l=f;l--;){var p=c[l];if(!(i?p in t:ln.call(t,p)))return false}for(a=true;++l<f;){var p=c[l],s=n[p],h=t[p];if(void 0!==Z||s!==h&&!r(s,h,e,u,o)){a=false;break}i||(i="constructor"==p)}return a&&!i&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(a=false)),a}function D(n){return wn(n)||M(n)}function I(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function q(n){
15
- return n&&n.length?n[0]:Z}function $(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?_n(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1}function z(n,t){return jn(n,_(t))}function C(n,t,e){return r(n,_(t),e,3>arguments.length,jn)}function G(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=kn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=Z),r}}function J(n,t){return n===t||n!==n&&t!==t}function M(n){
16
- return H(n)&&P(n)&&ln.call(n,"callee")&&(!bn.call(n,"callee")||"[object Arguments]"==sn.call(n))}function P(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!U(n)}function U(n){return n=V(n)?sn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n}function V(n){var t=typeof n;return!!n&&("object"==t||"function"==t)}function H(n){return!!n&&typeof n=="object"}function K(n){return typeof n=="number"||H(n)&&"[object Number]"==sn.call(n)}
17
- function L(n){return typeof n=="string"||!wn(n)&&H(n)&&"[object String]"==sn.call(n)}function Q(n){return typeof n=="string"?n:null==n?"":n+""}function W(n){return n?e(n,Rn(n)):[]}function X(n){return n}function Y(t,r,e){var u=Rn(r),o=v(r,u);null!=e||V(r)&&(o.length||!u.length)||(e=r,r=t,t=this,o=v(r,Rn(r)));var i=!(V(e)&&"chain"in e&&!e.chain),c=U(t);return jn(o,function(e){var u=r[e];t[e]=u,c&&(t.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=t(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({
18
- func:u,args:arguments,thisArg:t}),e.__chain__=r,e}return u.apply(t,n([this.value()],arguments))})}),t}var Z,nn=1/0,tn=/[&<>"'`]/g,rn=RegExp(tn.source),en=typeof self=="object"&&self&&self.Object===Object&&self,un=typeof global=="object"&&global&&global.Object===Object&&global||en||Function("return this")(),on=(en=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,cn=function(n){return function(t){return null==n?Z:n[t]}}({"&":"&amp;",
19
- "<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","`":"&#96;"}),fn=Array.prototype,an=Object.prototype,ln=an.hasOwnProperty,pn=0,sn=an.toString,hn=un._,vn=Object.create,bn=an.propertyIsEnumerable,yn=un.isFinite,gn=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),_n=Math.max;o.prototype=c(u.prototype),o.prototype.constructor=o;var jn=function(n,t){return function(r,e){if(null==r)return r;if(!P(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););
20
- return r}}(h),dn=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}(),mn=String,On=function(n){return function(t,r,e){var u=Object(t);if(!P(t)){var o=_(r);t=Rn(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:Z}}(function(n,t,r){var e=n?n.length:0;if(!e)return-1;r=null==r?0:kn(r),0>r&&(r=_n(e+r,0));n:{for(t=_(t),e=n.length,r+=-1;++r<e;)if(t(n[r],r,n)){n=r;break n}n=-1}return n}),xn=x(function(n,t,r){
21
- return F(n,t,r)}),An=x(function(n,t){return f(n,1,t)}),En=x(function(n,t,r){return f(n,Nn(t)||0,r)}),wn=Array.isArray,kn=Number,Nn=Number,Sn=S(function(n,t){N(t,gn(t),n)}),Tn=S(function(n,t){N(t,I(t),n)}),Fn=S(function(n,t,r,e){N(t,Dn(t),n,e)}),Bn=x(function(n){return n.push(Z,i),Fn.apply(Z,n)}),Rn=gn,Dn=I,In=x(function(n,t){return null==n?{}:O(n,d(s(t,1),mn))});u.assignIn=Tn,u.before=G,u.bind=xn,u.chain=function(n){return n=u(n),n.__chain__=true,n},u.compact=function(n){return p(n,Boolean)},u.concat=function(){
22
- for(var t=arguments.length,r=Array(t?t-1:0),e=arguments[0],u=t;u--;)r[u-1]=arguments[u];return t?n(wn(e)?E(e):[e],s(r,1)):[]},u.create=function(n,t){var r=c(n);return t?Sn(r,t):r},u.defaults=Bn,u.defer=An,u.delay=En,u.filter=function(n,t){return p(n,_(t))},u.flatten=function(n){return n&&n.length?s(n,1):[]},u.flattenDeep=function(n){return n&&n.length?s(n,nn):[]},u.iteratee=_,u.keys=Rn,u.map=function(n,t){return d(n,_(t))},u.matches=function(n){return m(Sn({},n))},u.mixin=Y,u.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");
23
- return function(){return!n.apply(this,arguments)}},u.once=function(n){return G(2,n)},u.pick=In,u.slice=function(n,t,r){var e=n?n.length:0;return r=r===Z?e:+r,e?A(n,null==t?0:+t,r):[]},u.sortBy=function(n,r){var e=0;return r=_(r),d(d(n,function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==Z,o=null===r,i=r===r,c=e!==Z,f=null===e,a=e===e;if(!f&&r>e||o&&c&&a||!u&&a||!i){r=1;break n}if(!o&&r<e||f&&u&&i||!c&&i||!a){r=-1;
24
- break n}}r=0}return r||n.index-t.index}),t("value"))},u.tap=function(n,t){return t(n),n},u.thru=function(n,t){return t(n)},u.toArray=function(n){return P(n)?n.length?E(n):[]:W(n)},u.values=W,u.extend=Tn,Y(u,u),u.clone=function(n){return V(n)?wn(n)?E(n):N(n,gn(n)):n},u.escape=function(n){return(n=Q(n))&&rn.test(n)?n.replace(tn,cn):n},u.every=function(n,t,r){return t=r?Z:t,a(n,_(t))},u.find=On,u.forEach=z,u.has=function(n,t){return null!=n&&ln.call(n,t)},u.head=q,u.identity=X,u.indexOf=$,u.isArguments=M,
25
- u.isArray=wn,u.isBoolean=function(n){return true===n||false===n||H(n)&&"[object Boolean]"==sn.call(n)},u.isDate=function(n){return H(n)&&"[object Date]"==sn.call(n)},u.isEmpty=function(n){return P(n)&&(wn(n)||L(n)||U(n.splice)||M(n))?!n.length:!gn(n).length},u.isEqual=function(n,t){return y(n,t)},u.isFinite=function(n){return typeof n=="number"&&yn(n)},u.isFunction=U,u.isNaN=function(n){return K(n)&&n!=+n},u.isNull=function(n){return null===n},u.isNumber=K,u.isObject=V,u.isRegExp=function(n){return V(n)&&"[object RegExp]"==sn.call(n);
26
- },u.isString=L,u.isUndefined=function(n){return n===Z},u.last=function(n){var t=n?n.length:0;return t?n[t-1]:Z},u.max=function(n){return n&&n.length?l(n,X,b):Z},u.min=function(n){return n&&n.length?l(n,X,j):Z},u.noConflict=function(){return un._===this&&(un._=hn),this},u.noop=function(){},u.reduce=C,u.result=function(n,t,r){return t=null==n?Z:n[t],t===Z&&(t=r),U(t)?t.call(n):t},u.size=function(n){return null==n?0:(n=P(n)?n:gn(n),n.length)},u.some=function(n,t,r){return t=r?Z:t,w(n,_(t))},u.uniqueId=function(n){
27
- var t=++pn;return Q(n)+t},u.each=z,u.first=q,Y(u,function(){var n={};return h(u,function(t,r){ln.call(u.prototype,r)||(n[r]=t)}),n}(),{chain:false}),u.VERSION="4.15.0",jn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:fn)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);u.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(wn(u)?u:[],n);
28
- }return this[r](function(r){return t.apply(wn(r)?r:[],n)})}}),u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=function(){return k(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(un._=u, define(function(){return u})):on?((on.exports=u)._=u,en._=u):un._=u}).call(this);
6
+ ;(function(){function n(n,t){return n.push.apply(n,t),n}function t(n){return function(t){return null==t?tn:t[n]}}function r(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function e(n,t){return d(t,function(t){return n[t]})}function u(n){return n instanceof o?n:new o(n)}function o(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function i(n,t,r,e){return n===tn||P(n,pn[r])&&!sn.call(e,r)?t:n}function c(n){return K(n)?yn(n):{}}function f(n,t,r){if(typeof n!="function")throw new TypeError("Expected a function");
7
+ return setTimeout(function(){n.apply(tn,r)},t)}function a(n,t){var r=true;return mn(n,function(n,e,u){return r=!!t(n,e,u)}),r}function l(n,t,r){for(var e=-1,u=n.length;++e<u;){var o=n[e],i=t(o);if(null!=i&&(c===tn?i===i:r(i,c)))var c=i,f=o}return f}function p(n,t){var r=[];return mn(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function s(t,r,e,u,o){var i=-1,c=t.length;for(e||(e=D),o||(o=[]);++i<c;){var f=t[i];0<r&&e(f)?1<r?s(f,r-1,e,u,o):n(o,f):u||(o[o.length]=f)}return o}function h(n,t){return n&&On(n,t,qn);
8
+ }function v(n,t){return p(t,function(t){return H(n[t])})}function b(n,t){return n>t}function y(n,t,r,e,u){return n===t||(null==n||null==t||!K(n)&&!L(t)?n!==n&&t!==t:g(n,t,y,r,e,u))}function g(n,t,r,e,u,o){var i=Sn(n),c=Sn(t),f="[object Array]",a="[object Array]";i||(f=vn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=vn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);var p=En(o,function(t){return t[0]==n}),s=En(o,function(n){
9
+ return n[0]==t});if(p&&s)return p[1]==t;if(o.push([n,t]),o.push([t,n]),a&&!l){if(i)r=B(n,t,r,e,u,o);else n:{switch(f){case"[object Boolean]":case"[object Date]":case"[object Number]":r=P(+n,+t);break n;case"[object Error]":r=n.name==t.name&&n.message==t.message;break n;case"[object RegExp]":case"[object String]":r=n==t+"";break n}r=false}return o.pop(),r}return 2&u||(i=l&&sn.call(n,"__wrapped__"),f=c&&sn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o),o.pop(),r):(i=i?n.value():n,f=f?t.value():t,
10
+ r=r(i,f,e,u,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?Z:(typeof n=="object"?m:t)(n)}function j(n,t){return n<t}function d(n,t){var r=-1,e=V(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function m(n){var t=jn(n);return function(r){var e=t.length;if(null==r)return!e;for(r=Object(r);e--;){var u=t[e];if(!(u in r&&y(n[u],r[u],tn,3)))return false}return true}}function O(n,t){return n=Object(n),J(t,function(t,r){return r in n&&(t[r]=n[r]),t},{})}function x(n){return xn(q(n,void 0,Z),n+"");
11
+ }function A(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Array(u);++e<u;)r[e]=n[e+t];return r}function E(n){return A(n,0,n.length)}function w(n,t){var r;return mn(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}function k(t,r){return J(r,function(t,r){return r.func.apply(r.thisArg,n([t],r.args))},t)}function N(n,t,r,e){var u=!r;r||(r={});for(var o=-1,i=t.length;++o<i;){var c=t[o],f=e?e(r[c],n[c],c,r,n):tn;if(f===tn&&(f=n[c]),u)r[c]=f;else{var a=r,l=a[c];
12
+ sn.call(a,c)&&P(l,f)&&(f!==tn||c in a)||(a[c]=f)}}return r}function S(n){return x(function(t,r){var e=-1,u=r.length,o=1<u?r[u-1]:tn,o=3<n.length&&typeof o=="function"?(u--,o):tn;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function T(n){return function(){var t=arguments,r=c(n.prototype),t=n.apply(r,t);return K(t)?t:r}}function F(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==cn&&this instanceof e?u:n;++c<f;)a[c]=r[c];for(;i--;)a[c++]=arguments[++o];
13
+ return l.apply(t,a)}if(typeof n!="function")throw new TypeError("Expected a function");var u=T(n);return e}function B(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(2&u&&c>i))return false;for(var c=-1,f=true,a=1&u?[]:tn;++c<i;){var l=n[c],p=t[c];if(void 0!==tn){f=false;break}if(a){if(!w(t,function(n,t){if(!C(a,t)&&(l===n||r(l,n,e,u,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!r(l,p,e,u,o)){f=false;break}}return f}function R(n,t,r,e,u,o){var i=2&u,c=qn(n),f=c.length,a=qn(t).length;if(f!=a&&!i)return false;
14
+ for(var l=f;l--;){var p=c[l];if(!(i?p in t:sn.call(t,p)))return false}for(a=true;++l<f;){var p=c[l],s=n[p],h=t[p];if(void 0!==tn||s!==h&&!r(s,h,e,u,o)){a=false;break}i||(i="constructor"==p)}return a&&!i&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(a=false)),a}function D(n){return Sn(n)||U(n)}function I(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function q(n,t,r){return t=dn(t===tn?n.length-1:t,0),
15
+ function(){for(var e=arguments,u=-1,o=dn(e.length-t,0),i=Array(o);++u<o;)i[u]=e[t+u];for(u=-1,o=Array(t+1);++u<t;)o[u]=e[u];return o[t]=r(i),n.apply(this,o)}}function $(n){return n&&n.length?s(n,1):[]}function z(n){return n&&n.length?n[0]:tn}function C(n,t,r){var e=n?n.length:0;r=typeof r=="number"?0>r?dn(e+r,0):r:0,r=(r||0)-1;for(var u=t===t;++r<e;){var o=n[r];if(u?o===t:o!==o)return r}return-1}function G(n,t){return mn(n,_(t))}function J(n,t,e){return r(n,_(t),e,3>arguments.length,mn)}function M(n,t){
16
+ var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Tn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=tn),r}}function P(n,t){return n===t||n!==n&&t!==t}function U(n){return L(n)&&V(n)&&sn.call(n,"callee")&&(!gn.call(n,"callee")||"[object Arguments]"==vn.call(n))}function V(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!H(n)}function H(n){return n=K(n)?vn.call(n):"","[object Function]"==n||"[object GeneratorFunction]"==n;
17
+ }function K(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function L(n){return null!=n&&typeof n=="object"}function Q(n){return typeof n=="number"||L(n)&&"[object Number]"==vn.call(n)}function W(n){return typeof n=="string"||!Sn(n)&&L(n)&&"[object String]"==vn.call(n)}function X(n){return typeof n=="string"?n:null==n?"":n+""}function Y(n){return n?e(n,qn(n)):[]}function Z(n){return n}function nn(t,r,e){var u=qn(r),o=v(r,u);null!=e||K(r)&&(o.length||!u.length)||(e=r,r=t,t=this,o=v(r,qn(r)));
18
+ var i=!(K(e)&&"chain"in e&&!e.chain),c=H(t);return mn(o,function(e){var u=r[e];t[e]=u,c&&(t.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=t(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({func:u,args:arguments,thisArg:t}),e.__chain__=r,e}return u.apply(t,n([this.value()],arguments))})}),t}var tn,rn=1/0,en=/[&<>"']/g,un=RegExp(en.source),on=typeof self=="object"&&self&&self.Object===Object&&self,cn=typeof global=="object"&&global&&global.Object===Object&&global||on||Function("return this")(),fn=(on=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,an=function(n){
19
+ return function(t){return null==n?tn:n[t]}}({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),ln=Array.prototype,pn=Object.prototype,sn=pn.hasOwnProperty,hn=0,vn=pn.toString,bn=cn._,yn=Object.create,gn=pn.propertyIsEnumerable,_n=cn.isFinite,jn=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),dn=Math.max;o.prototype=c(u.prototype),o.prototype.constructor=o;var mn=function(n,t){return function(r,e){if(null==r)return r;if(!V(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););
20
+ return r}}(h),On=function(n){return function(t,r,e){var u=-1,o=Object(t);e=e(t);for(var i=e.length;i--;){var c=e[n?i:++u];if(false===r(o[c],c,o))break}return t}}(),xn=Z,An=String,En=function(n){return function(t,r,e){var u=Object(t);if(!V(t)){var o=_(r);t=qn(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:tn}}(function(n,t,r){var e=n?n.length:0;if(!e)return-1;r=null==r?0:Tn(r),0>r&&(r=dn(e+r,0));n:{for(t=_(t),e=n.length,r+=-1;++r<e;)if(t(n[r],r,n)){n=r;break n}n=-1}return n}),wn=x(function(n,t,r){
21
+ return F(n,t,r)}),kn=x(function(n,t){return f(n,1,t)}),Nn=x(function(n,t,r){return f(n,Fn(t)||0,r)}),Sn=Array.isArray,Tn=Number,Fn=Number,Bn=S(function(n,t){N(t,jn(t),n)}),Rn=S(function(n,t){N(t,I(t),n)}),Dn=S(function(n,t,r,e){N(t,$n(t),n,e)}),In=x(function(n){return n.push(tn,i),Dn.apply(tn,n)}),qn=jn,$n=I,zn=function(n){return xn(q(n,tn,$),n+"")}(function(n,t){return null==n?{}:O(n,d(t,An))});u.assignIn=Rn,u.before=M,u.bind=wn,u.chain=function(n){return n=u(n),n.__chain__=true,n},u.compact=function(n){
22
+ return p(n,Boolean)},u.concat=function(){var t=arguments.length;if(!t)return[];for(var r=Array(t-1),e=arguments[0];t--;)r[t-1]=arguments[t];return n(Sn(e)?E(e):[e],s(r,1))},u.create=function(n,t){var r=c(n);return t?Bn(r,t):r},u.defaults=In,u.defer=kn,u.delay=Nn,u.filter=function(n,t){return p(n,_(t))},u.flatten=$,u.flattenDeep=function(n){return n&&n.length?s(n,rn):[]},u.iteratee=_,u.keys=qn,u.map=function(n,t){return d(n,_(t))},u.matches=function(n){return m(Bn({},n))},u.mixin=nn,u.negate=function(n){
23
+ if(typeof n!="function")throw new TypeError("Expected a function");return function(){return!n.apply(this,arguments)}},u.once=function(n){return M(2,n)},u.pick=zn,u.slice=function(n,t,r){var e=n?n.length:0;return r=r===tn?e:+r,e?A(n,null==t?0:+t,r):[]},u.sortBy=function(n,r){var e=0;return r=_(r),d(d(n,function(n,t,u){return{value:n,index:e++,criteria:r(n,t,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==tn,o=null===r,i=r===r,c=e!==tn,f=null===e,a=e===e;if(!f&&r>e||o&&c&&a||!u&&a||!i){
24
+ r=1;break n}if(!o&&r<e||f&&u&&i||!c&&i||!a){r=-1;break n}}r=0}return r||n.index-t.index}),t("value"))},u.tap=function(n,t){return t(n),n},u.thru=function(n,t){return t(n)},u.toArray=function(n){return V(n)?n.length?E(n):[]:Y(n)},u.values=Y,u.extend=Rn,nn(u,u),u.clone=function(n){return K(n)?Sn(n)?E(n):N(n,jn(n)):n},u.escape=function(n){return(n=X(n))&&un.test(n)?n.replace(en,an):n},u.every=function(n,t,r){return t=r?tn:t,a(n,_(t))},u.find=En,u.forEach=G,u.has=function(n,t){return null!=n&&sn.call(n,t);
25
+ },u.head=z,u.identity=Z,u.indexOf=C,u.isArguments=U,u.isArray=Sn,u.isBoolean=function(n){return true===n||false===n||L(n)&&"[object Boolean]"==vn.call(n)},u.isDate=function(n){return L(n)&&"[object Date]"==vn.call(n)},u.isEmpty=function(n){return V(n)&&(Sn(n)||W(n)||H(n.splice)||U(n))?!n.length:!jn(n).length},u.isEqual=function(n,t){return y(n,t)},u.isFinite=function(n){return typeof n=="number"&&_n(n)},u.isFunction=H,u.isNaN=function(n){return Q(n)&&n!=+n},u.isNull=function(n){return null===n},u.isNumber=Q,
26
+ u.isObject=K,u.isRegExp=function(n){return K(n)&&"[object RegExp]"==vn.call(n)},u.isString=W,u.isUndefined=function(n){return n===tn},u.last=function(n){var t=n?n.length:0;return t?n[t-1]:tn},u.max=function(n){return n&&n.length?l(n,Z,b):tn},u.min=function(n){return n&&n.length?l(n,Z,j):tn},u.noConflict=function(){return cn._===this&&(cn._=bn),this},u.noop=function(){},u.reduce=J,u.result=function(n,t,r){return t=null==n?tn:n[t],t===tn&&(t=r),H(t)?t.call(n):t},u.size=function(n){return null==n?0:(n=V(n)?n:jn(n),
27
+ n.length)},u.some=function(n,t,r){return t=r?tn:t,w(n,_(t))},u.uniqueId=function(n){var t=++hn;return X(n)+t},u.each=G,u.first=z,nn(u,function(){var n={};return h(u,function(t,r){sn.call(u.prototype,r)||(n[r]=t)}),n}(),{chain:false}),u.VERSION="4.16.1",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){var t=(/^(?:replace|split)$/.test(n)?String.prototype:ln)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);u.prototype[n]=function(){
28
+ var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Sn(u)?u:[],n)}return this[r](function(r){return t.apply(Sn(r)?r:[],n)})}}),u.prototype.toJSON=u.prototype.valueOf=u.prototype.value=function(){return k(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(cn._=u, define(function(){return u})):fn?((fn.exports=u)._=u,on._=u):cn._=u}).call(this);
@@ -12,7 +12,7 @@
12
12
  var undefined;
13
13
 
14
14
  /** Used as the semantic version number. */
15
- var VERSION = '4.15.0';
15
+ var VERSION = '4.16.1';
16
16
 
17
17
  /** Used as the size to enable large array optimizations. */
18
18
  var LARGE_ARRAY_SIZE = 200;
@@ -23,6 +23,9 @@
23
23
  /** Used to stand-in for `undefined` hash values. */
24
24
  var HASH_UNDEFINED = '__lodash_hash_undefined__';
25
25
 
26
+ /** Used as the maximum memoize cache size. */
27
+ var MAX_MEMOIZE_SIZE = 500;
28
+
26
29
  /** Used as the internal argument placeholder. */
27
30
  var PLACEHOLDER = '__lodash_placeholder__';
28
31
 
@@ -47,7 +50,7 @@
47
50
  DEFAULT_TRUNC_OMISSION = '...';
48
51
 
49
52
  /** Used to detect hot functions by number of calls within a span of milliseconds. */
50
- var HOT_COUNT = 150,
53
+ var HOT_COUNT = 500,
51
54
  HOT_SPAN = 16;
52
55
 
53
56
  /** Used to indicate the type of lazy iteratees. */
@@ -116,8 +119,8 @@
116
119
  reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
117
120
 
118
121
  /** Used to match HTML entities and HTML characters. */
119
- var reEscapedHtml = /&(?:amp|lt|gt|quot|#39|#96);/g,
120
- reUnescapedHtml = /[&<>"'`]/g,
122
+ var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
123
+ reUnescapedHtml = /[&<>"']/g,
121
124
  reHasEscapedHtml = RegExp(reEscapedHtml.source),
122
125
  reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
123
126
 
@@ -164,9 +167,6 @@
164
167
  /** Used to match `RegExp` flags from their coerced string values. */
165
168
  var reFlags = /\w*$/;
166
169
 
167
- /** Used to detect hexadecimal string values. */
168
- var reHasHexPrefix = /^0x/i;
169
-
170
170
  /** Used to detect bad signed hexadecimal string values. */
171
171
  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
172
172
 
@@ -361,7 +361,7 @@
361
361
  '\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
362
362
  '\u0132': 'IJ', '\u0133': 'ij',
363
363
  '\u0152': 'Oe', '\u0153': 'oe',
364
- '\u0149': "'n", '\u017f': 'ss'
364
+ '\u0149': "'n", '\u017f': 's'
365
365
  };
366
366
 
367
367
  /** Used to map characters to HTML entities. */
@@ -370,8 +370,7 @@
370
370
  '<': '&lt;',
371
371
  '>': '&gt;',
372
372
  '"': '&quot;',
373
- "'": '&#39;',
374
- '`': '&#96;'
373
+ "'": '&#39;'
375
374
  };
376
375
 
377
376
  /** Used to map HTML entities to characters. */
@@ -380,8 +379,7 @@
380
379
  '&lt;': '<',
381
380
  '&gt;': '>',
382
381
  '&quot;': '"',
383
- '&#39;': "'",
384
- '&#96;': '`'
382
+ '&#39;': "'"
385
383
  };
386
384
 
387
385
  /** Used to escape characters for inclusion in compiled string literals. */
@@ -822,18 +820,9 @@
822
820
  * @returns {number} Returns the index of the matched value, else `-1`.
823
821
  */
824
822
  function baseIndexOf(array, value, fromIndex) {
825
- if (value !== value) {
826
- return baseFindIndex(array, baseIsNaN, fromIndex);
827
- }
828
- var index = fromIndex - 1,
829
- length = array.length;
830
-
831
- while (++index < length) {
832
- if (array[index] === value) {
833
- return index;
834
- }
835
- }
836
- return -1;
823
+ return value === value
824
+ ? strictIndexOf(array, value, fromIndex)
825
+ : baseFindIndex(array, baseIsNaN, fromIndex);
837
826
  }
838
827
 
839
828
  /**
@@ -1038,7 +1027,7 @@
1038
1027
  }
1039
1028
 
1040
1029
  /**
1041
- * Checks if a cache value for `key` exists.
1030
+ * Checks if a `cache` value for `key` exists.
1042
1031
  *
1043
1032
  * @private
1044
1033
  * @param {Object} cache The cache to query.
@@ -1096,7 +1085,7 @@
1096
1085
 
1097
1086
  while (length--) {
1098
1087
  if (array[length] === placeholder) {
1099
- result++;
1088
+ ++result;
1100
1089
  }
1101
1090
  }
1102
1091
  return result;
@@ -1166,25 +1155,6 @@
1166
1155
  return reHasUnicodeWord.test(string);
1167
1156
  }
1168
1157
 
1169
- /**
1170
- * Checks if `value` is a host object in IE < 9.
1171
- *
1172
- * @private
1173
- * @param {*} value The value to check.
1174
- * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
1175
- */
1176
- function isHostObject(value) {
1177
- // Many host objects are `Object` objects that can coerce to strings
1178
- // despite having improperly defined `toString` methods.
1179
- var result = false;
1180
- if (value != null && typeof value.toString != 'function') {
1181
- try {
1182
- result = !!(value + '');
1183
- } catch (e) {}
1184
- }
1185
- return result;
1186
- }
1187
-
1188
1158
  /**
1189
1159
  * Converts `iterator` to an array.
1190
1160
  *
@@ -1292,6 +1262,48 @@
1292
1262
  return result;
1293
1263
  }
1294
1264
 
1265
+ /**
1266
+ * A specialized version of `_.indexOf` which performs strict equality
1267
+ * comparisons of values, i.e. `===`.
1268
+ *
1269
+ * @private
1270
+ * @param {Array} array The array to inspect.
1271
+ * @param {*} value The value to search for.
1272
+ * @param {number} fromIndex The index to search from.
1273
+ * @returns {number} Returns the index of the matched value, else `-1`.
1274
+ */
1275
+ function strictIndexOf(array, value, fromIndex) {
1276
+ var index = fromIndex - 1,
1277
+ length = array.length;
1278
+
1279
+ while (++index < length) {
1280
+ if (array[index] === value) {
1281
+ return index;
1282
+ }
1283
+ }
1284
+ return -1;
1285
+ }
1286
+
1287
+ /**
1288
+ * A specialized version of `_.lastIndexOf` which performs strict equality
1289
+ * comparisons of values, i.e. `===`.
1290
+ *
1291
+ * @private
1292
+ * @param {Array} array The array to inspect.
1293
+ * @param {*} value The value to search for.
1294
+ * @param {number} fromIndex The index to search from.
1295
+ * @returns {number} Returns the index of the matched value, else `-1`.
1296
+ */
1297
+ function strictLastIndexOf(array, value, fromIndex) {
1298
+ var index = fromIndex + 1;
1299
+ while (index--) {
1300
+ if (array[index] === value) {
1301
+ return index;
1302
+ }
1303
+ }
1304
+ return index;
1305
+ }
1306
+
1295
1307
  /**
1296
1308
  * Gets the number of symbols in `string`.
1297
1309
  *
@@ -1337,7 +1349,7 @@
1337
1349
  function unicodeSize(string) {
1338
1350
  var result = reUnicode.lastIndex = 0;
1339
1351
  while (reUnicode.test(string)) {
1340
- result++;
1352
+ ++result;
1341
1353
  }
1342
1354
  return result;
1343
1355
  }
@@ -1392,17 +1404,10 @@
1392
1404
  * lodash.isFunction(lodash.bar);
1393
1405
  * // => true
1394
1406
  *
1395
- * // Use `context` to stub `Date#getTime` use in `_.now`.
1396
- * var stubbed = _.runInContext({
1397
- * 'Date': function() {
1398
- * return { 'getTime': stubGetTime };
1399
- * }
1400
- * });
1401
- *
1402
1407
  * // Create a suped-up `defer` in Node.js.
1403
1408
  * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
1404
1409
  */
1405
- function runInContext(context) {
1410
+ var runInContext = (function runInContext(context) {
1406
1411
  context = context ? _.defaults(root.Object(), context, _.pick(root, contextProps)) : root;
1407
1412
 
1408
1413
  /** Built-in constructor references. */
@@ -1462,6 +1467,7 @@
1462
1467
  var Buffer = moduleExports ? context.Buffer : undefined,
1463
1468
  Symbol = context.Symbol,
1464
1469
  Uint8Array = context.Uint8Array,
1470
+ defineProperty = Object.defineProperty,
1465
1471
  getPrototype = overArg(Object.getPrototypeOf, Object),
1466
1472
  iteratorSymbol = Symbol ? Symbol.iterator : undefined,
1467
1473
  objectCreate = Object.create,
@@ -1484,6 +1490,7 @@
1484
1490
  nativeKeys = overArg(Object.keys, Object),
1485
1491
  nativeMax = Math.max,
1486
1492
  nativeMin = Math.min,
1493
+ nativeNow = Date.now,
1487
1494
  nativeParseInt = context.parseInt,
1488
1495
  nativeRandom = Math.random,
1489
1496
  nativeReverse = arrayProto.reverse;
@@ -1494,22 +1501,12 @@
1494
1501
  Promise = getNative(context, 'Promise'),
1495
1502
  Set = getNative(context, 'Set'),
1496
1503
  WeakMap = getNative(context, 'WeakMap'),
1497
- nativeCreate = getNative(Object, 'create');
1498
-
1499
- /* Used to set `toString` methods. */
1500
- var defineProperty = (function() {
1501
- var func = getNative(Object, 'defineProperty'),
1502
- name = getNative.name;
1503
-
1504
- return (name && name.length > 2) ? func : undefined;
1505
- }());
1504
+ nativeCreate = getNative(Object, 'create'),
1505
+ nativeDefineProperty = getNative(Object, 'defineProperty');
1506
1506
 
1507
1507
  /** Used to store function metadata. */
1508
1508
  var metaMap = WeakMap && new WeakMap;
1509
1509
 
1510
- /** Detect if properties shadowing those on `Object.prototype` are non-enumerable. */
1511
- var nonEnumShadows = !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf');
1512
-
1513
1510
  /** Used to lookup unminified function names. */
1514
1511
  var realNames = {};
1515
1512
 
@@ -1897,6 +1894,7 @@
1897
1894
  */
1898
1895
  function hashClear() {
1899
1896
  this.__data__ = nativeCreate ? nativeCreate(null) : {};
1897
+ this.size = 0;
1900
1898
  }
1901
1899
 
1902
1900
  /**
@@ -1910,7 +1908,9 @@
1910
1908
  * @returns {boolean} Returns `true` if the entry was removed, else `false`.
1911
1909
  */
1912
1910
  function hashDelete(key) {
1913
- return this.has(key) && delete this.__data__[key];
1911
+ var result = this.has(key) && delete this.__data__[key];
1912
+ this.size -= result ? 1 : 0;
1913
+ return result;
1914
1914
  }
1915
1915
 
1916
1916
  /**
@@ -1957,6 +1957,7 @@
1957
1957
  */
1958
1958
  function hashSet(key, value) {
1959
1959
  var data = this.__data__;
1960
+ this.size += this.has(key) ? 0 : 1;
1960
1961
  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
1961
1962
  return this;
1962
1963
  }
@@ -1997,6 +1998,7 @@
1997
1998
  */
1998
1999
  function listCacheClear() {
1999
2000
  this.__data__ = [];
2001
+ this.size = 0;
2000
2002
  }
2001
2003
 
2002
2004
  /**
@@ -2021,6 +2023,7 @@
2021
2023
  } else {
2022
2024
  splice.call(data, index, 1);
2023
2025
  }
2026
+ --this.size;
2024
2027
  return true;
2025
2028
  }
2026
2029
 
@@ -2068,6 +2071,7 @@
2068
2071
  index = assocIndexOf(data, key);
2069
2072
 
2070
2073
  if (index < 0) {
2074
+ ++this.size;
2071
2075
  data.push([key, value]);
2072
2076
  } else {
2073
2077
  data[index][1] = value;
@@ -2110,6 +2114,7 @@
2110
2114
  * @memberOf MapCache
2111
2115
  */
2112
2116
  function mapCacheClear() {
2117
+ this.size = 0;
2113
2118
  this.__data__ = {
2114
2119
  'hash': new Hash,
2115
2120
  'map': new (Map || ListCache),
@@ -2127,7 +2132,9 @@
2127
2132
  * @returns {boolean} Returns `true` if the entry was removed, else `false`.
2128
2133
  */
2129
2134
  function mapCacheDelete(key) {
2130
- return getMapData(this, key)['delete'](key);
2135
+ var result = getMapData(this, key)['delete'](key);
2136
+ this.size -= result ? 1 : 0;
2137
+ return result;
2131
2138
  }
2132
2139
 
2133
2140
  /**
@@ -2167,7 +2174,11 @@
2167
2174
  * @returns {Object} Returns the map cache instance.
2168
2175
  */
2169
2176
  function mapCacheSet(key, value) {
2170
- getMapData(this, key).set(key, value);
2177
+ var data = getMapData(this, key),
2178
+ size = data.size;
2179
+
2180
+ data.set(key, value);
2181
+ this.size += data.size == size ? 0 : 1;
2171
2182
  return this;
2172
2183
  }
2173
2184
 
@@ -2240,7 +2251,8 @@
2240
2251
  * @param {Array} [entries] The key-value pairs to cache.
2241
2252
  */
2242
2253
  function Stack(entries) {
2243
- this.__data__ = new ListCache(entries);
2254
+ var data = this.__data__ = new ListCache(entries);
2255
+ this.size = data.size;
2244
2256
  }
2245
2257
 
2246
2258
  /**
@@ -2252,6 +2264,7 @@
2252
2264
  */
2253
2265
  function stackClear() {
2254
2266
  this.__data__ = new ListCache;
2267
+ this.size = 0;
2255
2268
  }
2256
2269
 
2257
2270
  /**
@@ -2264,7 +2277,11 @@
2264
2277
  * @returns {boolean} Returns `true` if the entry was removed, else `false`.
2265
2278
  */
2266
2279
  function stackDelete(key) {
2267
- return this.__data__['delete'](key);
2280
+ var data = this.__data__,
2281
+ result = data['delete'](key);
2282
+
2283
+ this.size = data.size;
2284
+ return result;
2268
2285
  }
2269
2286
 
2270
2287
  /**
@@ -2304,16 +2321,18 @@
2304
2321
  * @returns {Object} Returns the stack cache instance.
2305
2322
  */
2306
2323
  function stackSet(key, value) {
2307
- var cache = this.__data__;
2308
- if (cache instanceof ListCache) {
2309
- var pairs = cache.__data__;
2324
+ var data = this.__data__;
2325
+ if (data instanceof ListCache) {
2326
+ var pairs = data.__data__;
2310
2327
  if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
2311
2328
  pairs.push([key, value]);
2329
+ this.size = ++data.size;
2312
2330
  return this;
2313
2331
  }
2314
- cache = this.__data__ = new MapCache(pairs);
2332
+ data = this.__data__ = new MapCache(pairs);
2315
2333
  }
2316
- cache.set(key, value);
2334
+ data.set(key, value);
2335
+ this.size = data.size;
2317
2336
  return this;
2318
2337
  }
2319
2338
 
@@ -2353,6 +2372,44 @@
2353
2372
  return result;
2354
2373
  }
2355
2374
 
2375
+ /**
2376
+ * A specialized version of `_.sample` for arrays without support for iteratee
2377
+ * shorthands.
2378
+ *
2379
+ * @private
2380
+ * @param {Array} array The array to sample.
2381
+ * @returns {*} Returns the random element.
2382
+ */
2383
+ function arraySample(array) {
2384
+ var length = array.length;
2385
+ return length ? array[baseRandom(0, length - 1)] : undefined;
2386
+ }
2387
+
2388
+ /**
2389
+ * A specialized version of `_.sampleSize` for arrays.
2390
+ *
2391
+ * @private
2392
+ * @param {Array} array The array to sample.
2393
+ * @param {number} n The number of elements to sample.
2394
+ * @returns {Array} Returns the random elements.
2395
+ */
2396
+ function arraySampleSize(array, n) {
2397
+ var result = arrayShuffle(array);
2398
+ result.length = baseClamp(n, 0, result.length);
2399
+ return result;
2400
+ }
2401
+
2402
+ /**
2403
+ * A specialized version of `_.shuffle` for arrays.
2404
+ *
2405
+ * @private
2406
+ * @param {Array} array The array to shuffle.
2407
+ * @returns {Array} Returns the new shuffled array.
2408
+ */
2409
+ function arrayShuffle(array) {
2410
+ return shuffleSelf(copyArray(array));
2411
+ }
2412
+
2356
2413
  /**
2357
2414
  * Used by `_.defaults` to customize its `_.assignIn` use.
2358
2415
  *
@@ -2383,7 +2440,7 @@
2383
2440
  function assignMergeValue(object, key, value) {
2384
2441
  if ((value !== undefined && !eq(object[key], value)) ||
2385
2442
  (typeof key == 'number' && value === undefined && !(key in object))) {
2386
- object[key] = value;
2443
+ baseAssignValue(object, key, value);
2387
2444
  }
2388
2445
  }
2389
2446
 
@@ -2401,7 +2458,7 @@
2401
2458
  var objValue = object[key];
2402
2459
  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
2403
2460
  (value === undefined && !(key in object))) {
2404
- object[key] = value;
2461
+ baseAssignValue(object, key, value);
2405
2462
  }
2406
2463
  }
2407
2464
 
@@ -2454,6 +2511,28 @@
2454
2511
  return object && copyObject(source, keys(source), object);
2455
2512
  }
2456
2513
 
2514
+ /**
2515
+ * The base implementation of `assignValue` and `assignMergeValue` without
2516
+ * value checks.
2517
+ *
2518
+ * @private
2519
+ * @param {Object} object The object to modify.
2520
+ * @param {string} key The key of the property to assign.
2521
+ * @param {*} value The value to assign.
2522
+ */
2523
+ function baseAssignValue(object, key, value) {
2524
+ if (key == '__proto__' && defineProperty) {
2525
+ defineProperty(object, key, {
2526
+ 'configurable': true,
2527
+ 'enumerable': true,
2528
+ 'value': value,
2529
+ 'writable': true
2530
+ });
2531
+ } else {
2532
+ object[key] = value;
2533
+ }
2534
+ }
2535
+
2457
2536
  /**
2458
2537
  * The base implementation of `_.at` without support for individual paths.
2459
2538
  *
@@ -2534,9 +2613,6 @@
2534
2613
  return cloneBuffer(value, isDeep);
2535
2614
  }
2536
2615
  if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
2537
- if (isHostObject(value)) {
2538
- return object ? value : {};
2539
- }
2540
2616
  result = initCloneObject(isFunc ? {} : value);
2541
2617
  if (!isDeep) {
2542
2618
  return copySymbols(value, baseAssign(result, value));
@@ -3180,8 +3256,8 @@
3180
3256
  othTag = getTag(other);
3181
3257
  othTag = othTag == argsTag ? objectTag : othTag;
3182
3258
  }
3183
- var objIsObj = objTag == objectTag && !isHostObject(object),
3184
- othIsObj = othTag == objectTag && !isHostObject(other),
3259
+ var objIsObj = objTag == objectTag,
3260
+ othIsObj = othTag == objectTag,
3185
3261
  isSameTag = objTag == othTag;
3186
3262
 
3187
3263
  if (isSameTag && !objIsObj) {
@@ -3286,7 +3362,7 @@
3286
3362
  if (!isObject(value) || isMasked(value)) {
3287
3363
  return false;
3288
3364
  }
3289
- var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
3365
+ var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
3290
3366
  return pattern.test(toSource(value));
3291
3367
  }
3292
3368
 
@@ -3644,7 +3720,7 @@
3644
3720
  value = object[key];
3645
3721
 
3646
3722
  if (predicate(value, key)) {
3647
- result[key] = value;
3723
+ baseAssignValue(result, key, value);
3648
3724
  }
3649
3725
  }
3650
3726
  return result;
@@ -3810,24 +3886,7 @@
3810
3886
  * @returns {Function} Returns the new function.
3811
3887
  */
3812
3888
  function baseRest(func, start) {
3813
- start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
3814
- return function() {
3815
- var args = arguments,
3816
- index = -1,
3817
- length = nativeMax(args.length - start, 0),
3818
- array = Array(length);
3819
-
3820
- while (++index < length) {
3821
- array[index] = args[start + index];
3822
- }
3823
- index = -1;
3824
- var otherArgs = Array(start + 1);
3825
- while (++index < start) {
3826
- otherArgs[index] = args[index];
3827
- }
3828
- otherArgs[start] = array;
3829
- return apply(func, this, otherArgs);
3830
- };
3889
+ return setToString(overRest(func, start, identity), func + '');
3831
3890
  }
3832
3891
 
3833
3892
  /**
@@ -3871,7 +3930,7 @@
3871
3930
  }
3872
3931
 
3873
3932
  /**
3874
- * The base implementation of `setData` without support for hot loop detection.
3933
+ * The base implementation of `setData` without support for hot loop shorting.
3875
3934
  *
3876
3935
  * @private
3877
3936
  * @param {Function} func The function to associate metadata with.
@@ -3883,6 +3942,23 @@
3883
3942
  return func;
3884
3943
  };
3885
3944
 
3945
+ /**
3946
+ * The base implementation of `setToString` without support for hot loop shorting.
3947
+ *
3948
+ * @private
3949
+ * @param {Function} func The function to modify.
3950
+ * @param {Function} string The `toString` result.
3951
+ * @returns {Function} Returns `func`.
3952
+ */
3953
+ var baseSetToString = !nativeDefineProperty ? identity : function(func, string) {
3954
+ return nativeDefineProperty(func, 'toString', {
3955
+ 'configurable': true,
3956
+ 'enumerable': false,
3957
+ 'value': constant(string),
3958
+ 'writable': true
3959
+ });
3960
+ };
3961
+
3886
3962
  /**
3887
3963
  * The base implementation of `_.slice` without an iteratee call guard.
3888
3964
  *
@@ -4297,6 +4373,17 @@
4297
4373
  return isArray(value) ? value : stringToPath(value);
4298
4374
  }
4299
4375
 
4376
+ /**
4377
+ * A `baseRest` alias which can be replaced with `identity` by module
4378
+ * replacement plugins.
4379
+ *
4380
+ * @private
4381
+ * @type {Function}
4382
+ * @param {Function} func The function to apply a rest parameter to.
4383
+ * @returns {Function} Returns the new function.
4384
+ */
4385
+ var castRest = baseRest;
4386
+
4300
4387
  /**
4301
4388
  * Casts `array` to a slice if it's needed.
4302
4389
  *
@@ -4611,6 +4698,7 @@
4611
4698
  * @returns {Object} Returns `object`.
4612
4699
  */
4613
4700
  function copyObject(source, props, object, customizer) {
4701
+ var isNew = !object;
4614
4702
  object || (object = {});
4615
4703
 
4616
4704
  var index = -1,
@@ -4623,7 +4711,14 @@
4623
4711
  ? customizer(object[key], source[key], key, object, source)
4624
4712
  : undefined;
4625
4713
 
4626
- assignValue(object, key, newValue === undefined ? source[key] : newValue);
4714
+ if (newValue === undefined) {
4715
+ newValue = source[key];
4716
+ }
4717
+ if (isNew) {
4718
+ baseAssignValue(object, key, newValue);
4719
+ } else {
4720
+ assignValue(object, key, newValue);
4721
+ }
4627
4722
  }
4628
4723
  return object;
4629
4724
  }
@@ -4902,9 +4997,7 @@
4902
4997
  * @returns {Function} Returns the new flow function.
4903
4998
  */
4904
4999
  function createFlow(fromRight) {
4905
- return baseRest(function(funcs) {
4906
- funcs = baseFlatten(funcs, 1);
4907
-
5000
+ return flatRest(function(funcs) {
4908
5001
  var length = funcs.length,
4909
5002
  index = length,
4910
5003
  prereq = LodashWrapper.prototype.thru;
@@ -5087,11 +5180,8 @@
5087
5180
  * @returns {Function} Returns the new over function.
5088
5181
  */
5089
5182
  function createOver(arrayFunc) {
5090
- return baseRest(function(iteratees) {
5091
- iteratees = (iteratees.length == 1 && isArray(iteratees[0]))
5092
- ? arrayMap(iteratees[0], baseUnary(getIteratee()))
5093
- : arrayMap(baseFlatten(iteratees, 1), baseUnary(getIteratee()));
5094
-
5183
+ return flatRest(function(iteratees) {
5184
+ iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
5095
5185
  return baseRest(function(args) {
5096
5186
  var thisArg = this;
5097
5187
  return arrayFunc(iteratees, function(iteratee) {
@@ -5434,9 +5524,9 @@
5434
5524
  // Recursively compare arrays (susceptible to call stack limits).
5435
5525
  if (seen) {
5436
5526
  if (!arraySome(other, function(othValue, othIndex) {
5437
- if (!seen.has(othIndex) &&
5527
+ if (!cacheHas(seen, othIndex) &&
5438
5528
  (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
5439
- return seen.add(othIndex);
5529
+ return seen.push(othIndex);
5440
5530
  }
5441
5531
  })) {
5442
5532
  result = false;
@@ -5616,6 +5706,17 @@
5616
5706
  return result;
5617
5707
  }
5618
5708
 
5709
+ /**
5710
+ * A specialized version of `baseRest` which flattens the rest array.
5711
+ *
5712
+ * @private
5713
+ * @param {Function} func The function to apply a rest parameter to.
5714
+ * @returns {Function} Returns the new function.
5715
+ */
5716
+ function flatRest(func) {
5717
+ return setToString(overRest(func, undefined, flatten), func + '');
5718
+ }
5719
+
5619
5720
  /**
5620
5721
  * Creates an array of own enumerable property names and symbols of `object`.
5621
5722
  *
@@ -5784,8 +5885,7 @@
5784
5885
  */
5785
5886
  var getTag = baseGetTag;
5786
5887
 
5787
- // Fallback for data views, maps, sets, and weak maps in IE 11,
5788
- // for data views in Edge < 14, and promises in Node.js.
5888
+ // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
5789
5889
  if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
5790
5890
  (Map && getTag(new Map) != mapTag) ||
5791
5891
  (Promise && getTag(Promise.resolve()) != promiseTag) ||
@@ -5861,9 +5961,9 @@
5861
5961
  function hasPath(object, path, hasFunc) {
5862
5962
  path = isKey(path, object) ? [path] : castPath(path);
5863
5963
 
5864
- var result,
5865
- index = -1,
5866
- length = path.length;
5964
+ var index = -1,
5965
+ length = path.length,
5966
+ result = false;
5867
5967
 
5868
5968
  while (++index < length) {
5869
5969
  var key = toKey(path[index]);
@@ -5872,10 +5972,10 @@
5872
5972
  }
5873
5973
  object = object[key];
5874
5974
  }
5875
- if (result) {
5975
+ if (result || ++index != length) {
5876
5976
  return result;
5877
5977
  }
5878
- var length = object ? object.length : 0;
5978
+ length = object ? object.length : 0;
5879
5979
  return !!length && isLength(length) && isIndex(key, length) &&
5880
5980
  (isArray(object) || isArguments(object));
5881
5981
  }
@@ -5970,9 +6070,11 @@
5970
6070
  * @returns {string} Returns the modified source.
5971
6071
  */
5972
6072
  function insertWrapDetails(source, details) {
5973
- var length = details.length,
5974
- lastIndex = length - 1;
5975
-
6073
+ var length = details.length;
6074
+ if (!length) {
6075
+ return source;
6076
+ }
6077
+ var lastIndex = length - 1;
5976
6078
  details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
5977
6079
  details = details.join(length > 2 ? ', ' : ' ');
5978
6080
  return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
@@ -6151,6 +6253,26 @@
6151
6253
  };
6152
6254
  }
6153
6255
 
6256
+ /**
6257
+ * A specialized version of `_.memoize` which clears the memoized function's
6258
+ * cache when it exceeds `MAX_MEMOIZE_SIZE`.
6259
+ *
6260
+ * @private
6261
+ * @param {Function} func The function to have its output memoized.
6262
+ * @returns {Function} Returns the new memoized function.
6263
+ */
6264
+ function memoizeCapped(func) {
6265
+ var result = memoize(func, function(key) {
6266
+ if (cache.size === MAX_MEMOIZE_SIZE) {
6267
+ cache.clear();
6268
+ }
6269
+ return key;
6270
+ });
6271
+
6272
+ var cache = result.cache;
6273
+ return result;
6274
+ }
6275
+
6154
6276
  /**
6155
6277
  * Merges the function metadata of `source` into `data`.
6156
6278
  *
@@ -6264,6 +6386,36 @@
6264
6386
  return result;
6265
6387
  }
6266
6388
 
6389
+ /**
6390
+ * A specialized version of `baseRest` which transforms the rest array.
6391
+ *
6392
+ * @private
6393
+ * @param {Function} func The function to apply a rest parameter to.
6394
+ * @param {number} [start=func.length-1] The start position of the rest parameter.
6395
+ * @param {Function} transform The rest array transform.
6396
+ * @returns {Function} Returns the new function.
6397
+ */
6398
+ function overRest(func, start, transform) {
6399
+ start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
6400
+ return function() {
6401
+ var args = arguments,
6402
+ index = -1,
6403
+ length = nativeMax(args.length - start, 0),
6404
+ array = Array(length);
6405
+
6406
+ while (++index < length) {
6407
+ array[index] = args[start + index];
6408
+ }
6409
+ index = -1;
6410
+ var otherArgs = Array(start + 1);
6411
+ while (++index < start) {
6412
+ otherArgs[index] = args[index];
6413
+ }
6414
+ otherArgs[start] = transform(array);
6415
+ return apply(func, this, otherArgs);
6416
+ };
6417
+ }
6418
+
6267
6419
  /**
6268
6420
  * Gets the parent value at `path` of `object`.
6269
6421
  *
@@ -6312,25 +6464,7 @@
6312
6464
  * @param {*} data The metadata.
6313
6465
  * @returns {Function} Returns `func`.
6314
6466
  */
6315
- var setData = (function() {
6316
- var count = 0,
6317
- lastCalled = 0;
6318
-
6319
- return function(key, value) {
6320
- var stamp = now(),
6321
- remaining = HOT_SPAN - (stamp - lastCalled);
6322
-
6323
- lastCalled = stamp;
6324
- if (remaining > 0) {
6325
- if (++count >= HOT_COUNT) {
6326
- return key;
6327
- }
6328
- } else {
6329
- count = 0;
6330
- }
6331
- return baseSetData(key, value);
6332
- };
6333
- }());
6467
+ var setData = shortOut(baseSetData);
6334
6468
 
6335
6469
  /**
6336
6470
  * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
@@ -6344,6 +6478,16 @@
6344
6478
  return root.setTimeout(func, wait);
6345
6479
  };
6346
6480
 
6481
+ /**
6482
+ * Sets the `toString` method of `func` to return `string`.
6483
+ *
6484
+ * @private
6485
+ * @param {Function} func The function to modify.
6486
+ * @param {Function} string The `toString` result.
6487
+ * @returns {Function} Returns `func`.
6488
+ */
6489
+ var setToString = shortOut(baseSetToString);
6490
+
6347
6491
  /**
6348
6492
  * Sets the `toString` method of `wrapper` to mimic the source of `reference`
6349
6493
  * with wrapper details in a comment at the top of the source body.
@@ -6354,14 +6498,61 @@
6354
6498
  * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
6355
6499
  * @returns {Function} Returns `wrapper`.
6356
6500
  */
6357
- var setWrapToString = !defineProperty ? identity : function(wrapper, reference, bitmask) {
6501
+ function setWrapToString(wrapper, reference, bitmask) {
6358
6502
  var source = (reference + '');
6359
- return defineProperty(wrapper, 'toString', {
6360
- 'configurable': true,
6361
- 'enumerable': false,
6362
- 'value': constant(insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)))
6363
- });
6364
- };
6503
+ return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
6504
+ }
6505
+
6506
+ /**
6507
+ * Creates a function that'll short out and invoke `identity` instead
6508
+ * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
6509
+ * milliseconds.
6510
+ *
6511
+ * @private
6512
+ * @param {Function} func The function to restrict.
6513
+ * @returns {Function} Returns the new shortable function.
6514
+ */
6515
+ function shortOut(func) {
6516
+ var count = 0,
6517
+ lastCalled = 0;
6518
+
6519
+ return function() {
6520
+ var stamp = nativeNow(),
6521
+ remaining = HOT_SPAN - (stamp - lastCalled);
6522
+
6523
+ lastCalled = stamp;
6524
+ if (remaining > 0) {
6525
+ if (++count >= HOT_COUNT) {
6526
+ return arguments[0];
6527
+ }
6528
+ } else {
6529
+ count = 0;
6530
+ }
6531
+ return func.apply(undefined, arguments);
6532
+ };
6533
+ }
6534
+
6535
+ /**
6536
+ * A specialized version of `arrayShuffle` which mutates `array`.
6537
+ *
6538
+ * @private
6539
+ * @param {Array} array The array to shuffle.
6540
+ * @returns {Array} Returns `array`.
6541
+ */
6542
+ function shuffleSelf(array) {
6543
+ var index = -1,
6544
+ length = array.length,
6545
+ lastIndex = length - 1;
6546
+
6547
+ while (++index < length) {
6548
+ var rand = baseRandom(index, lastIndex),
6549
+ value = array[rand];
6550
+
6551
+ array[rand] = array[index];
6552
+ array[index] = value;
6553
+ }
6554
+ return array;
6555
+ }
6365
6556
 
6366
6557
  /**
6367
6558
  * Converts `string` to a property path array.
@@ -6370,7 +6561,7 @@
6370
6561
  * @param {string} string The string to convert.
6371
6562
  * @returns {Array} Returns the property path array.
6372
6563
  */
6373
- var stringToPath = memoize(function(string) {
6564
+ var stringToPath = memoizeCapped(function(string) {
6374
6565
  string = toString(string);
6375
6566
 
6376
6567
  var result = [];
@@ -6549,24 +6740,25 @@
6549
6740
  * // => [1]
6550
6741
  */
6551
6742
  function concat() {
6552
- var length = arguments.length,
6553
- args = Array(length ? length - 1 : 0),
6743
+ var length = arguments.length;
6744
+ if (!length) {
6745
+ return [];
6746
+ }
6747
+ var args = Array(length - 1),
6554
6748
  array = arguments[0],
6555
6749
  index = length;
6556
6750
 
6557
6751
  while (index--) {
6558
6752
  args[index - 1] = arguments[index];
6559
6753
  }
6560
- return length
6561
- ? arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1))
6562
- : [];
6754
+ return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
6563
6755
  }
6564
6756
 
6565
6757
  /**
6566
6758
  * Creates an array of `array` values not included in the other given arrays
6567
6759
  * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
6568
- * for equality comparisons. The order of result values is determined by the
6569
- * order they occur in the first array.
6760
+ * for equality comparisons. The order and references of result values are
6761
+ * determined by the first array.
6570
6762
  *
6571
6763
  * **Note:** Unlike `_.pullAll`, this method returns a new array.
6572
6764
  *
@@ -6592,8 +6784,9 @@
6592
6784
  /**
6593
6785
  * This method is like `_.difference` except that it accepts `iteratee` which
6594
6786
  * is invoked for each element of `array` and `values` to generate the criterion
6595
- * by which they're compared. Result values are chosen from the first array.
6596
- * The iteratee is invoked with one argument: (value).
6787
+ * by which they're compared. The order and references of result values are
6788
+ * determined by the first array. The iteratee is invoked with one argument:
6789
+ * (value).
6597
6790
  *
6598
6791
  * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
6599
6792
  *
@@ -6626,9 +6819,9 @@
6626
6819
 
6627
6820
  /**
6628
6821
  * This method is like `_.difference` except that it accepts `comparator`
6629
- * which is invoked to compare elements of `array` to `values`. Result values
6630
- * are chosen from the first array. The comparator is invoked with two arguments:
6631
- * (arrVal, othVal).
6822
+ * which is invoked to compare elements of `array` to `values`. The order and
6823
+ * references of result values are determined by the first array. The comparator
6824
+ * is invoked with two arguments: (arrVal, othVal).
6632
6825
  *
6633
6826
  * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
6634
6827
  *
@@ -7122,8 +7315,8 @@
7122
7315
  /**
7123
7316
  * Creates an array of unique values that are included in all given arrays
7124
7317
  * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
7125
- * for equality comparisons. The order of result values is determined by the
7126
- * order they occur in the first array.
7318
+ * for equality comparisons. The order and references of result values are
7319
+ * determined by the first array.
7127
7320
  *
7128
7321
  * @static
7129
7322
  * @memberOf _
@@ -7146,8 +7339,9 @@
7146
7339
  /**
7147
7340
  * This method is like `_.intersection` except that it accepts `iteratee`
7148
7341
  * which is invoked for each element of each `arrays` to generate the criterion
7149
- * by which they're compared. Result values are chosen from the first array.
7150
- * The iteratee is invoked with one argument: (value).
7342
+ * by which they're compared. The order and references of result values are
7343
+ * determined by the first array. The iteratee is invoked with one argument:
7344
+ * (value).
7151
7345
  *
7152
7346
  * @static
7153
7347
  * @memberOf _
@@ -7181,9 +7375,9 @@
7181
7375
 
7182
7376
  /**
7183
7377
  * This method is like `_.intersection` except that it accepts `comparator`
7184
- * which is invoked to compare elements of `arrays`. Result values are chosen
7185
- * from the first array. The comparator is invoked with two arguments:
7186
- * (arrVal, othVal).
7378
+ * which is invoked to compare elements of `arrays`. The order and references
7379
+ * of result values are determined by the first array. The comparator is
7380
+ * invoked with two arguments: (arrVal, othVal).
7187
7381
  *
7188
7382
  * @static
7189
7383
  * @memberOf _
@@ -7281,21 +7475,11 @@
7281
7475
  var index = length;
7282
7476
  if (fromIndex !== undefined) {
7283
7477
  index = toInteger(fromIndex);
7284
- index = (
7285
- index < 0
7286
- ? nativeMax(length + index, 0)
7287
- : nativeMin(index, length - 1)
7288
- ) + 1;
7289
- }
7290
- if (value !== value) {
7291
- return baseFindIndex(array, baseIsNaN, index - 1, true);
7478
+ index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
7292
7479
  }
7293
- while (index--) {
7294
- if (array[index] === value) {
7295
- return index;
7296
- }
7297
- }
7298
- return -1;
7480
+ return value === value
7481
+ ? strictLastIndexOf(array, value, index)
7482
+ : baseFindIndex(array, baseIsNaN, index, true);
7299
7483
  }
7300
7484
 
7301
7485
  /**
@@ -7457,9 +7641,7 @@
7457
7641
  * console.log(pulled);
7458
7642
  * // => ['b', 'd']
7459
7643
  */
7460
- var pullAt = baseRest(function(array, indexes) {
7461
- indexes = baseFlatten(indexes, 1);
7462
-
7644
+ var pullAt = flatRest(function(array, indexes) {
7463
7645
  var length = array ? array.length : 0,
7464
7646
  result = baseAt(array, indexes);
7465
7647
 
@@ -8034,8 +8216,9 @@
8034
8216
  /**
8035
8217
  * Creates a duplicate-free version of an array, using
8036
8218
  * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
8037
- * for equality comparisons, in which only the first occurrence of each
8038
- * element is kept.
8219
+ * for equality comparisons, in which only the first occurrence of each element
8220
+ * is kept. The order of result values is determined by the order they occur
8221
+ * in the array.
8039
8222
  *
8040
8223
  * @static
8041
8224
  * @memberOf _
@@ -8057,7 +8240,9 @@
8057
8240
  /**
8058
8241
  * This method is like `_.uniq` except that it accepts `iteratee` which is
8059
8242
  * invoked for each element in `array` to generate the criterion by which
8060
- * uniqueness is computed. The iteratee is invoked with one argument: (value).
8243
+ * uniqueness is computed. The order of result values is determined by the
8244
+ * order they occur in the array. The iteratee is invoked with one argument:
8245
+ * (value).
8061
8246
  *
8062
8247
  * @static
8063
8248
  * @memberOf _
@@ -8084,8 +8269,9 @@
8084
8269
 
8085
8270
  /**
8086
8271
  * This method is like `_.uniq` except that it accepts `comparator` which
8087
- * is invoked to compare elements of `array`. The comparator is invoked with
8088
- * two arguments: (arrVal, othVal).
8272
+ * is invoked to compare elements of `array`. The order of result values is
8273
+ * determined by the order they occur in the array.The comparator is invoked
8274
+ * with two arguments: (arrVal, othVal).
8089
8275
  *
8090
8276
  * @static
8091
8277
  * @memberOf _
@@ -8227,8 +8413,9 @@
8227
8413
  /**
8228
8414
  * This method is like `_.xor` except that it accepts `iteratee` which is
8229
8415
  * invoked for each element of each `arrays` to generate the criterion by
8230
- * which by which they're compared. The iteratee is invoked with one argument:
8231
- * (value).
8416
+ * which by which they're compared. The order of result values is determined
8417
+ * by the order they occur in the arrays. The iteratee is invoked with one
8418
+ * argument: (value).
8232
8419
  *
8233
8420
  * @static
8234
8421
  * @memberOf _
@@ -8257,8 +8444,9 @@
8257
8444
 
8258
8445
  /**
8259
8446
  * This method is like `_.xor` except that it accepts `comparator` which is
8260
- * invoked to compare elements of `arrays`. The comparator is invoked with
8261
- * two arguments: (arrVal, othVal).
8447
+ * invoked to compare elements of `arrays`. The order of result values is
8448
+ * determined by the order they occur in the arrays. The comparator is invoked
8449
+ * with two arguments: (arrVal, othVal).
8262
8450
  *
8263
8451
  * @static
8264
8452
  * @memberOf _
@@ -8475,8 +8663,7 @@
8475
8663
  * _(object).at(['a[0].b.c', 'a[1]']).value();
8476
8664
  * // => [3, 4]
8477
8665
  */
8478
- var wrapperAt = baseRest(function(paths) {
8479
- paths = baseFlatten(paths, 1);
8666
+ var wrapperAt = flatRest(function(paths) {
8480
8667
  var length = paths.length,
8481
8668
  start = length ? paths[0] : 0,
8482
8669
  value = this.__wrapped__,
@@ -8741,7 +8928,11 @@
8741
8928
  * // => { '3': 2, '5': 1 }
8742
8929
  */
8743
8930
  var countBy = createAggregator(function(result, value, key) {
8744
- hasOwnProperty.call(result, key) ? ++result[key] : (result[key] = 1);
8931
+ if (hasOwnProperty.call(result, key)) {
8932
+ ++result[key];
8933
+ } else {
8934
+ baseAssignValue(result, key, 1);
8935
+ }
8745
8936
  });
8746
8937
 
8747
8938
  /**
@@ -8996,7 +9187,7 @@
8996
9187
  * @see _.forEachRight
8997
9188
  * @example
8998
9189
  *
8999
- * _([1, 2]).forEach(function(value) {
9190
+ * _.forEach([1, 2], function(value) {
9000
9191
  * console.log(value);
9001
9192
  * });
9002
9193
  * // => Logs `1` then `2`.
@@ -9064,7 +9255,7 @@
9064
9255
  if (hasOwnProperty.call(result, key)) {
9065
9256
  result[key].push(value);
9066
9257
  } else {
9067
- result[key] = [value];
9258
+ baseAssignValue(result, key, [value]);
9068
9259
  }
9069
9260
  });
9070
9261
 
@@ -9177,7 +9368,7 @@
9177
9368
  * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
9178
9369
  */
9179
9370
  var keyBy = createAggregator(function(result, value, key) {
9180
- result[key] = value;
9371
+ baseAssignValue(result, key, value);
9181
9372
  });
9182
9373
 
9183
9374
  /**
@@ -9437,10 +9628,7 @@
9437
9628
  * // => 2
9438
9629
  */
9439
9630
  function sample(collection) {
9440
- var array = isArrayLike(collection) ? collection : values(collection),
9441
- length = array.length;
9442
-
9443
- return length > 0 ? array[baseRandom(0, length - 1)] : undefined;
9631
+ return arraySample(isArrayLike(collection) ? collection : values(collection));
9444
9632
  }
9445
9633
 
9446
9634
  /**
@@ -9464,25 +9652,12 @@
9464
9652
  * // => [2, 3, 1]
9465
9653
  */
9466
9654
  function sampleSize(collection, n, guard) {
9467
- var index = -1,
9468
- result = toArray(collection),
9469
- length = result.length,
9470
- lastIndex = length - 1;
9471
-
9472
9655
  if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
9473
9656
  n = 1;
9474
9657
  } else {
9475
- n = baseClamp(toInteger(n), 0, length);
9476
- }
9477
- while (++index < n) {
9478
- var rand = baseRandom(index, lastIndex),
9479
- value = result[rand];
9480
-
9481
- result[rand] = result[index];
9482
- result[index] = value;
9658
+ n = toInteger(n);
9483
9659
  }
9484
- result.length = n;
9485
- return result;
9660
+ return arraySampleSize(isArrayLike(collection) ? collection : values(collection), n);
9486
9661
  }
9487
9662
 
9488
9663
  /**
@@ -9501,7 +9676,10 @@
9501
9676
  * // => [4, 1, 3, 2]
9502
9677
  */
9503
9678
  function shuffle(collection) {
9504
- return sampleSize(collection, MAX_ARRAY_LENGTH);
9679
+ return shuffleSelf(isArrayLike(collection)
9680
+ ? copyArray(collection)
9681
+ : values(collection)
9682
+ );
9505
9683
  }
9506
9684
 
9507
9685
  /**
@@ -9606,16 +9784,11 @@
9606
9784
  * { 'user': 'barney', 'age': 34 }
9607
9785
  * ];
9608
9786
  *
9609
- * _.sortBy(users, function(o) { return o.user; });
9787
+ * _.sortBy(users, [function(o) { return o.user; }]);
9610
9788
  * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
9611
9789
  *
9612
9790
  * _.sortBy(users, ['user', 'age']);
9613
9791
  * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]
9614
- *
9615
- * _.sortBy(users, 'user', function(o) {
9616
- * return Math.floor(o.age / 10);
9617
- * });
9618
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
9619
9792
  */
9620
9793
  var sortBy = baseRest(function(collection, iteratees) {
9621
9794
  if (collection == null) {
@@ -10130,7 +10303,7 @@
10130
10303
  * _.defer(function(text) {
10131
10304
  * console.log(text);
10132
10305
  * }, 'deferred');
10133
- * // => Logs 'deferred' after one or more milliseconds.
10306
+ * // => Logs 'deferred' after one millisecond.
10134
10307
  */
10135
10308
  var defer = baseRest(function(func, args) {
10136
10309
  return baseDelay(func, 1, args);
@@ -10238,14 +10411,14 @@
10238
10411
  return cache.get(key);
10239
10412
  }
10240
10413
  var result = func.apply(this, args);
10241
- memoized.cache = cache.set(key, result);
10414
+ memoized.cache = cache.set(key, result) || cache;
10242
10415
  return result;
10243
10416
  };
10244
10417
  memoized.cache = new (memoize.Cache || MapCache);
10245
10418
  return memoized;
10246
10419
  }
10247
10420
 
10248
- // Assign cache to `_.memoize`.
10421
+ // Expose `MapCache`.
10249
10422
  memoize.Cache = MapCache;
10250
10423
 
10251
10424
  /**
@@ -10337,7 +10510,7 @@
10337
10510
  * func(10, 5);
10338
10511
  * // => [100, 10]
10339
10512
  */
10340
- var overArgs = baseRest(function(func, transforms) {
10513
+ var overArgs = castRest(function(func, transforms) {
10341
10514
  transforms = (transforms.length == 1 && isArray(transforms[0]))
10342
10515
  ? arrayMap(transforms[0], baseUnary(getIteratee()))
10343
10516
  : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
@@ -10451,8 +10624,8 @@
10451
10624
  * rearged('b', 'c', 'a')
10452
10625
  * // => ['a', 'b', 'c']
10453
10626
  */
10454
- var rearg = baseRest(function(func, indexes) {
10455
- return createWrap(func, REARG_FLAG, undefined, undefined, undefined, baseFlatten(indexes, 1));
10627
+ var rearg = flatRest(function(func, indexes) {
10628
+ return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes);
10456
10629
  });
10457
10630
 
10458
10631
  /**
@@ -11128,7 +11301,7 @@
11128
11301
  * // => false
11129
11302
  */
11130
11303
  function isElement(value) {
11131
- return !!value && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
11304
+ return value != null && value.nodeType === 1 && isObjectLike(value) && !isPlainObject(value);
11132
11305
  }
11133
11306
 
11134
11307
  /**
@@ -11174,7 +11347,7 @@
11174
11347
  if (tag == mapTag || tag == setTag) {
11175
11348
  return !value.size;
11176
11349
  }
11177
- if (nonEnumShadows || isPrototype(value)) {
11350
+ if (isPrototype(value)) {
11178
11351
  return !nativeKeys(value).length;
11179
11352
  }
11180
11353
  for (var key in value) {
@@ -11423,7 +11596,7 @@
11423
11596
  */
11424
11597
  function isObject(value) {
11425
11598
  var type = typeof value;
11426
- return !!value && (type == 'object' || type == 'function');
11599
+ return value != null && (type == 'object' || type == 'function');
11427
11600
  }
11428
11601
 
11429
11602
  /**
@@ -11451,7 +11624,7 @@
11451
11624
  * // => false
11452
11625
  */
11453
11626
  function isObjectLike(value) {
11454
- return !!value && typeof value == 'object';
11627
+ return value != null && typeof value == 'object';
11455
11628
  }
11456
11629
 
11457
11630
  /**
@@ -11715,8 +11888,7 @@
11715
11888
  * // => true
11716
11889
  */
11717
11890
  function isPlainObject(value) {
11718
- if (!isObjectLike(value) ||
11719
- objectToString.call(value) != objectTag || isHostObject(value)) {
11891
+ if (!isObjectLike(value) || objectToString.call(value) != objectTag) {
11720
11892
  return false;
11721
11893
  }
11722
11894
  var proto = getPrototype(value);
@@ -12273,7 +12445,7 @@
12273
12445
  * // => { 'a': 1, 'c': 3 }
12274
12446
  */
12275
12447
  var assign = createAssigner(function(object, source) {
12276
- if (nonEnumShadows || isPrototype(source) || isArrayLike(source)) {
12448
+ if (isPrototype(source) || isArrayLike(source)) {
12277
12449
  copyObject(source, keys(source), object);
12278
12450
  return;
12279
12451
  }
@@ -12401,9 +12573,7 @@
12401
12573
  * _.at(object, ['a[0].b.c', 'a[1]']);
12402
12574
  * // => [3, 4]
12403
12575
  */
12404
- var at = baseRest(function(object, paths) {
12405
- return baseAt(object, baseFlatten(paths, 1));
12406
- });
12576
+ var at = flatRest(baseAt);
12407
12577
 
12408
12578
  /**
12409
12579
  * Creates an object that inherits from the `prototype` object. If a
@@ -13006,7 +13176,7 @@
13006
13176
  iteratee = getIteratee(iteratee, 3);
13007
13177
 
13008
13178
  baseForOwn(object, function(value, key, object) {
13009
- result[iteratee(value, key, object)] = value;
13179
+ baseAssignValue(result, iteratee(value, key, object), value);
13010
13180
  });
13011
13181
  return result;
13012
13182
  }
@@ -13044,7 +13214,7 @@
13044
13214
  iteratee = getIteratee(iteratee, 3);
13045
13215
 
13046
13216
  baseForOwn(object, function(value, key, object) {
13047
- result[key] = iteratee(value, key, object);
13217
+ baseAssignValue(result, key, iteratee(value, key, object));
13048
13218
  });
13049
13219
  return result;
13050
13220
  }
@@ -13088,7 +13258,7 @@
13088
13258
  * This method is like `_.merge` except that it accepts `customizer` which
13089
13259
  * is invoked to produce the merged values of the destination and source
13090
13260
  * properties. If `customizer` returns `undefined`, merging is handled by the
13091
- * method instead. The `customizer` is invoked with seven arguments:
13261
+ * method instead. The `customizer` is invoked with six arguments:
13092
13262
  * (objValue, srcValue, key, object, source, stack).
13093
13263
  *
13094
13264
  * **Note:** This method mutates `object`.
@@ -13138,11 +13308,11 @@
13138
13308
  * _.omit(object, ['a', 'c']);
13139
13309
  * // => { 'b': '2' }
13140
13310
  */
13141
- var omit = baseRest(function(object, props) {
13311
+ var omit = flatRest(function(object, props) {
13142
13312
  if (object == null) {
13143
13313
  return {};
13144
13314
  }
13145
- props = arrayMap(baseFlatten(props, 1), toKey);
13315
+ props = arrayMap(props, toKey);
13146
13316
  return basePick(object, baseDifference(getAllKeysIn(object), props));
13147
13317
  });
13148
13318
 
@@ -13187,8 +13357,8 @@
13187
13357
  * _.pick(object, ['a', 'c']);
13188
13358
  * // => { 'a': 1, 'c': 3 }
13189
13359
  */
13190
- var pick = baseRest(function(object, props) {
13191
- return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey));
13360
+ var pick = flatRest(function(object, props) {
13361
+ return object == null ? {} : basePick(object, arrayMap(props, toKey));
13192
13362
  });
13193
13363
 
13194
13364
  /**
@@ -13842,8 +14012,8 @@
13842
14012
  }
13843
14013
 
13844
14014
  /**
13845
- * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to
13846
- * their corresponding HTML entities.
14015
+ * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
14016
+ * corresponding HTML entities.
13847
14017
  *
13848
14018
  * **Note:** No other characters are escaped. To escape additional
13849
14019
  * characters use a third-party library like [_he_](https://mths.be/he).
@@ -13854,12 +14024,6 @@
13854
14024
  * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
13855
14025
  * (under "semi-related fun fact") for more details.
13856
14026
  *
13857
- * Backticks are escaped because in IE < 9, they can break out of
13858
- * attribute values or HTML comments. See [#59](https://html5sec.org/#59),
13859
- * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
13860
- * [#133](https://html5sec.org/#133) of the
13861
- * [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.
13862
- *
13863
14027
  * When working with HTML you should always
13864
14028
  * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
13865
14029
  * XSS vectors.
@@ -14102,15 +14266,12 @@
14102
14266
  * // => [6, 8, 10]
14103
14267
  */
14104
14268
  function parseInt(string, radix, guard) {
14105
- // Chrome fails to trim leading <BOM> whitespace characters.
14106
- // See https://bugs.chromium.org/p/v8/issues/detail?id=3109 for more details.
14107
14269
  if (guard || radix == null) {
14108
14270
  radix = 0;
14109
14271
  } else if (radix) {
14110
14272
  radix = +radix;
14111
14273
  }
14112
- string = toString(string).replace(reTrim, '');
14113
- return nativeParseInt(string, radix || (reHasHexPrefix.test(string) ? 16 : 10));
14274
+ return nativeParseInt(toString(string), radix || 0);
14114
14275
  }
14115
14276
 
14116
14277
  /**
@@ -14349,7 +14510,8 @@
14349
14510
  * compiled({ 'user': 'barney' });
14350
14511
  * // => 'hello barney!'
14351
14512
  *
14352
- * // Use the ES delimiter as an alternative to the default "interpolate" delimiter.
14513
+ * // Use the ES template literal delimiter as an "interpolate" delimiter.
14514
+ * // Disable support by replacing the "interpolate" delimiter.
14353
14515
  * var compiled = _.template('hello ${ user }!');
14354
14516
  * compiled({ 'user': 'pebbles' });
14355
14517
  * // => 'hello pebbles!'
@@ -14750,7 +14912,7 @@
14750
14912
 
14751
14913
  /**
14752
14914
  * The inverse of `_.escape`; this method converts the HTML entities
14753
- * `&amp;`, `&lt;`, `&gt;`, `&quot;`, `&#39;`, and `&#96;` in `string` to
14915
+ * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to
14754
14916
  * their corresponding characters.
14755
14917
  *
14756
14918
  * **Note:** No other HTML entities are unescaped. To unescape additional
@@ -14904,10 +15066,10 @@
14904
15066
  * jQuery(element).on('click', view.click);
14905
15067
  * // => Logs 'clicked docs' when clicked.
14906
15068
  */
14907
- var bindAll = baseRest(function(object, methodNames) {
14908
- arrayEach(baseFlatten(methodNames, 1), function(key) {
15069
+ var bindAll = flatRest(function(object, methodNames) {
15070
+ arrayEach(methodNames, function(key) {
14909
15071
  key = toKey(key);
14910
- object[key] = bind(object[key], object);
15072
+ baseAssignValue(object, key, bind(object[key], object));
14911
15073
  });
14912
15074
  return object;
14913
15075
  });
@@ -16698,7 +16860,7 @@
16698
16860
  lodash.prototype[iteratorSymbol] = wrapperToIterator;
16699
16861
  }
16700
16862
  return lodash;
16701
- }
16863
+ });
16702
16864
 
16703
16865
  /*--------------------------------------------------------------------------*/
16704
16866