lodash-rails 4.16.6 → 4.17.2

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: 0d248b315ca3c39114125653a2c8461329cba0f3
4
- data.tar.gz: 7ad073112e6bff73df5507441a3d38f2faf81875
3
+ metadata.gz: 71c27c620c28739345fd82e4ef9be84fb3e21f02
4
+ data.tar.gz: 59d36f9b1aabce710afda4f4102894ddb38d6b56
5
5
  SHA512:
6
- metadata.gz: 488c0396641d03d98521c15705df36cd1d9354d2fb2057b39b9245063d614d45ab95afe0bb8b4f2eb35f9d4311c12c20e9aca66d6fea19de56a7c3ce0811c69e
7
- data.tar.gz: c5e41e2ee27171546bd5edde67469623a982b725b62c6e1668896fc59f0da64e05658493d4b99ffb8bdaec225b19005265037be1bdbb668d7ca8bcaa39c35510
6
+ metadata.gz: 2b50ca45973f7f56aeaf14bd118f3db873810769884ab7f885bc1ba411b0ee17e76ab0bfd7ceef7419870a3a61cbee1c04d8840ea95535ec6cc9f16bbdc26625
7
+ data.tar.gz: d870f9e4fa8312b2b6554ace284aecf94804bc9e238295cf0107f8417262137d41a6d7392a127ff9f69614626653333267025556be1ac287675c34aa8c218b0a
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.16.6:
21
+ lodash 4.17.2:
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.16.6"
3
+ VERSION = "4.17.2"
4
4
  end
5
5
  end
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * lodash (Custom Build) <https://lodash.com/>
3
+ * Lodash (Custom Build) <https://lodash.com/>
4
4
  * Build: `lodash core -o ./dist/lodash.core.js`
5
5
  * Copyright JS Foundation and other contributors <https://js.foundation/>
6
6
  * Released under MIT license <https://lodash.com/license>
@@ -13,18 +13,18 @@
13
13
  var undefined;
14
14
 
15
15
  /** Used as the semantic version number. */
16
- var VERSION = '4.16.6';
16
+ var VERSION = '4.17.2';
17
17
 
18
18
  /** Error message constants. */
19
19
  var FUNC_ERROR_TEXT = 'Expected a function';
20
20
 
21
- /** Used to compose bitmasks for function metadata. */
22
- var BIND_FLAG = 1,
23
- PARTIAL_FLAG = 32;
21
+ /** Used to compose bitmasks for value comparisons. */
22
+ var COMPARE_PARTIAL_FLAG = 1,
23
+ COMPARE_UNORDERED_FLAG = 2;
24
24
 
25
- /** Used to compose bitmasks for comparison styles. */
26
- var UNORDERED_COMPARE_FLAG = 1,
27
- PARTIAL_COMPARE_FLAG = 2;
25
+ /** Used to compose bitmasks for function metadata. */
26
+ var WRAP_BIND_FLAG = 1,
27
+ WRAP_PARTIAL_FLAG = 32;
28
28
 
29
29
  /** Used as references for various `Number` constants. */
30
30
  var INFINITY = 1 / 0,
@@ -662,22 +662,21 @@
662
662
  * @private
663
663
  * @param {*} value The value to compare.
664
664
  * @param {*} other The other value to compare.
665
+ * @param {boolean} bitmask The bitmask flags.
666
+ * 1 - Unordered comparison
667
+ * 2 - Partial comparison
665
668
  * @param {Function} [customizer] The function to customize comparisons.
666
- * @param {boolean} [bitmask] The bitmask of comparison flags.
667
- * The bitmask may be composed of the following flags:
668
- * 1 - Unordered comparison
669
- * 2 - Partial comparison
670
669
  * @param {Object} [stack] Tracks traversed `value` and `other` objects.
671
670
  * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
672
671
  */
673
- function baseIsEqual(value, other, customizer, bitmask, stack) {
672
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
674
673
  if (value === other) {
675
674
  return true;
676
675
  }
677
676
  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
678
677
  return value !== value && other !== other;
679
678
  }
680
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
679
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
681
680
  }
682
681
 
683
682
  /**
@@ -688,14 +687,13 @@
688
687
  * @private
689
688
  * @param {Object} object The object to compare.
690
689
  * @param {Object} other The other object to compare.
690
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
691
+ * @param {Function} customizer The function to customize comparisons.
691
692
  * @param {Function} equalFunc The function to determine equivalents of values.
692
- * @param {Function} [customizer] The function to customize comparisons.
693
- * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
694
- * for more details.
695
693
  * @param {Object} [stack] Tracks traversed `object` and `other` objects.
696
694
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
697
695
  */
698
- function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
696
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
699
697
  var objIsArr = isArray(object),
700
698
  othIsArr = isArray(other),
701
699
  objTag = arrayTag,
@@ -727,12 +725,12 @@
727
725
  stack.push([other, object]);
728
726
  if (isSameTag && !objIsObj) {
729
727
  var result = (objIsArr)
730
- ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
731
- : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
728
+ ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
729
+ : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
732
730
  stack.pop();
733
731
  return result;
734
732
  }
735
- if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
733
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
736
734
  var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
737
735
  othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
738
736
 
@@ -740,7 +738,7 @@
740
738
  var objUnwrapped = objIsWrapped ? object.value() : object,
741
739
  othUnwrapped = othIsWrapped ? other.value() : other;
742
740
 
743
- var result = equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
741
+ var result = equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
744
742
  stack.pop();
745
743
  return result;
746
744
  }
@@ -748,7 +746,7 @@
748
746
  if (!isSameTag) {
749
747
  return false;
750
748
  }
751
- var result = equalObjects(object, other, equalFunc, customizer, bitmask, stack);
749
+ var result = equalObjects(object, other, bitmask, customizer, equalFunc, stack);
752
750
  stack.pop();
753
751
  return result;
754
752
  }
@@ -830,7 +828,7 @@
830
828
  while (length--) {
831
829
  var key = props[length];
832
830
  if (!(key in object &&
833
- baseIsEqual(source[key], object[key], undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG)
831
+ baseIsEqual(source[key], object[key], COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG)
834
832
  )) {
835
833
  return false;
836
834
  }
@@ -845,7 +843,7 @@
845
843
  *
846
844
  * @private
847
845
  * @param {Object} object The source object.
848
- * @param {string[]} props The property identifiers to pick.
846
+ * @param {string[]} paths The property paths to pick.
849
847
  * @returns {Object} Returns the new object.
850
848
  */
851
849
  function basePick(object, props) {
@@ -1162,7 +1160,7 @@
1162
1160
  if (typeof func != 'function') {
1163
1161
  throw new TypeError(FUNC_ERROR_TEXT);
1164
1162
  }
1165
- var isBind = bitmask & BIND_FLAG,
1163
+ var isBind = bitmask & WRAP_BIND_FLAG,
1166
1164
  Ctor = createCtor(func);
1167
1165
 
1168
1166
  function wrapper() {
@@ -1191,15 +1189,14 @@
1191
1189
  * @private
1192
1190
  * @param {Array} array The array to compare.
1193
1191
  * @param {Array} other The other array to compare.
1194
- * @param {Function} equalFunc The function to determine equivalents of values.
1192
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
1195
1193
  * @param {Function} customizer The function to customize comparisons.
1196
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
1197
- * for more details.
1194
+ * @param {Function} equalFunc The function to determine equivalents of values.
1198
1195
  * @param {Object} stack Tracks traversed `array` and `other` objects.
1199
1196
  * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
1200
1197
  */
1201
- function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
1202
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
1198
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
1199
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
1203
1200
  arrLength = array.length,
1204
1201
  othLength = other.length;
1205
1202
 
@@ -1208,7 +1205,7 @@
1208
1205
  }
1209
1206
  var index = -1,
1210
1207
  result = true,
1211
- seen = (bitmask & UNORDERED_COMPARE_FLAG) ? [] : undefined;
1208
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? [] : undefined;
1212
1209
 
1213
1210
  // Ignore non-index properties.
1214
1211
  while (++index < arrLength) {
@@ -1227,7 +1224,7 @@
1227
1224
  if (seen) {
1228
1225
  if (!baseSome(other, function(othValue, othIndex) {
1229
1226
  if (!indexOf(seen, othIndex) &&
1230
- (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
1227
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
1231
1228
  return seen.push(othIndex);
1232
1229
  }
1233
1230
  })) {
@@ -1236,7 +1233,7 @@
1236
1233
  }
1237
1234
  } else if (!(
1238
1235
  arrValue === othValue ||
1239
- equalFunc(arrValue, othValue, customizer, bitmask, stack)
1236
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
1240
1237
  )) {
1241
1238
  result = false;
1242
1239
  break;
@@ -1256,14 +1253,13 @@
1256
1253
  * @param {Object} object The object to compare.
1257
1254
  * @param {Object} other The other object to compare.
1258
1255
  * @param {string} tag The `toStringTag` of the objects to compare.
1259
- * @param {Function} equalFunc The function to determine equivalents of values.
1256
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
1260
1257
  * @param {Function} customizer The function to customize comparisons.
1261
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
1262
- * for more details.
1258
+ * @param {Function} equalFunc The function to determine equivalents of values.
1263
1259
  * @param {Object} stack Tracks traversed `object` and `other` objects.
1264
1260
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
1265
1261
  */
1266
- function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
1262
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
1267
1263
  switch (tag) {
1268
1264
 
1269
1265
  case boolTag:
@@ -1294,15 +1290,14 @@
1294
1290
  * @private
1295
1291
  * @param {Object} object The object to compare.
1296
1292
  * @param {Object} other The other object to compare.
1297
- * @param {Function} equalFunc The function to determine equivalents of values.
1293
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
1298
1294
  * @param {Function} customizer The function to customize comparisons.
1299
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
1300
- * for more details.
1295
+ * @param {Function} equalFunc The function to determine equivalents of values.
1301
1296
  * @param {Object} stack Tracks traversed `object` and `other` objects.
1302
1297
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
1303
1298
  */
1304
- function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
1305
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
1299
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
1300
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
1306
1301
  objProps = keys(object),
1307
1302
  objLength = objProps.length,
1308
1303
  othProps = keys(other),
@@ -1329,7 +1324,7 @@
1329
1324
  var compared;
1330
1325
  // Recursively compare objects (susceptible to call stack limits).
1331
1326
  if (!(compared === undefined
1332
- ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
1327
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
1333
1328
  : compared
1334
1329
  )) {
1335
1330
  result = false;
@@ -1444,15 +1439,6 @@
1444
1439
  */
1445
1440
  var setToString = identity;
1446
1441
 
1447
- /**
1448
- * Converts `value` to a string key if it's not a string or symbol.
1449
- *
1450
- * @private
1451
- * @param {*} value The value to inspect.
1452
- * @returns {string|symbol} Returns the key.
1453
- */
1454
- var toKey = String;
1455
-
1456
1442
  /*------------------------------------------------------------------------*/
1457
1443
 
1458
1444
  /**
@@ -2273,7 +2259,7 @@
2273
2259
  * // => 'hi fred!'
2274
2260
  */
2275
2261
  var bind = baseRest(function(func, thisArg, partials) {
2276
- return createPartial(func, BIND_FLAG | PARTIAL_FLAG, thisArg, partials);
2262
+ return createPartial(func, WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG, thisArg, partials);
2277
2263
  });
2278
2264
 
2279
2265
  /**
@@ -3307,7 +3293,7 @@
3307
3293
  * @memberOf _
3308
3294
  * @category Object
3309
3295
  * @param {Object} object The source object.
3310
- * @param {...(string|string[])} [props] The property identifiers to pick.
3296
+ * @param {...(string|string[])} [paths] The property paths to pick.
3311
3297
  * @returns {Object} Returns the new object.
3312
3298
  * @example
3313
3299
  *
@@ -3316,8 +3302,8 @@
3316
3302
  * _.pick(object, ['a', 'c']);
3317
3303
  * // => { 'a': 1, 'c': 3 }
3318
3304
  */
3319
- var pick = flatRest(function(object, props) {
3320
- return object == null ? {} : basePick(object, baseMap(props, toKey));
3305
+ var pick = flatRest(function(object, paths) {
3306
+ return object == null ? {} : basePick(object, paths);
3321
3307
  });
3322
3308
 
3323
3309
  /**
@@ -1,29 +1,29 @@
1
1
  /**
2
2
  * @license
3
- * lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
3
+ * Lodash (Custom Build) lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE
4
4
  * Build: `lodash core -o ./dist/lodash.core.js`
5
5
  */
6
6
  ;(function(){function n(n){return K(n)&&pn.call(n,"callee")&&!bn.call(n,"callee")}function t(n,t){return n.push.apply(n,t),n}function r(n){return function(t){return null==t?nn:t[n]}}function e(n,t,r,e,u){return u(n,function(n,u,o){r=e?(e=false,n):t(r,n,u,o)}),r}function u(n,t){return d(t,function(t){return n[t]})}function o(n){return n instanceof i?n:new i(n)}function i(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t}function c(n,t,r,e){return n===nn||M(n,ln[r])&&!pn.call(e,r)?t:n}function f(n,t,r){
7
7
  if(typeof n!="function")throw new TypeError("Expected a function");return setTimeout(function(){n.apply(nn,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===nn?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(n,r,e,u,o){var i=-1,c=n.length;for(e||(e=D),o||(o=[]);++i<c;){var f=n[i];0<r&&e(f)?1<r?s(f,r-1,e,u,o):t(o,f):u||(o[o.length]=f);
8
- }return o}function h(n,t){return n&&On(n,t,qn)}function v(n,t){return p(t,function(t){return V(n[t])})}function y(n,t){return n>t}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!K(t)?n!==n&&t!==t:g(n,t,b,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=hn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=hn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);
9
- var p=En(o,function(t){return t[0]==n}),s=En(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=M(+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&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o),
10
- o.pop(),r):(i=i?n.value():n,f=f?t.value():t,r=r(i,f,e,u,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?Y:(typeof n=="object"?m:r)(n)}function j(n,t){return n<t}function d(n,t){var r=-1,e=U(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function m(n){var t=_n(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&&b(n[u],r[u],nn,3)))return false}return true}}function O(n,t){return n=Object(n),G(t,function(t,r){return r in n&&(t[r]=n[r]),
8
+ }return o}function h(n,t){return n&&On(n,t,In)}function v(n,t){return p(t,function(t){return V(n[t])})}function y(n,t){return n>t}function b(n,t,r,e,u){return n===t||(null==n||null==t||!H(n)&&!K(t)?n!==n&&t!==t:g(n,t,r,e,b,u))}function g(n,t,r,e,u,o){var i=Nn(n),c=Nn(t),f="[object Array]",a="[object Array]";i||(f=hn.call(n),f="[object Arguments]"==f?"[object Object]":f),c||(a=hn.call(t),a="[object Arguments]"==a?"[object Object]":a);var l="[object Object]"==f,c="[object Object]"==a,a=f==a;o||(o=[]);
9
+ var p=An(o,function(t){return t[0]==n}),s=An(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=M(+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 1&r||(i=l&&pn.call(n,"__wrapped__"),f=c&&pn.call(t,"__wrapped__"),!i&&!f)?!!a&&(r=R(n,t,r,e,u,o),
10
+ o.pop(),r):(i=i?n.value():n,f=f?t.value():t,r=u(i,f,r,e,o),o.pop(),r)}function _(n){return typeof n=="function"?n:null==n?Y:(typeof n=="object"?m:r)(n)}function j(n,t){return n<t}function d(n,t){var r=-1,e=U(n)?Array(n.length):[];return mn(n,function(n,u,o){e[++r]=t(n,u,o)}),e}function m(n){var t=_n(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&&b(n[u],r[u],3)))return false}return true}}function O(n,t){return n=Object(n),G(t,function(t,r){return r in n&&(t[r]=n[r]),
11
11
  t},{})}function x(n){return xn(q(n,void 0,Y),n+"")}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(n,r){return G(r,function(n,r){return r.func.apply(r.thisArg,t([n],r.args))},n)}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):nn;
12
- if(f===nn&&(f=n[c]),u)r[c]=f;else{var a=r,l=a[c];pn.call(a,c)&&M(l,f)&&(f!==nn||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]:nn,o=3<n.length&&typeof o=="function"?(u--,o):nn;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function F(n){return function(){var t=arguments,r=dn(n.prototype),t=n.apply(r,t);return H(t)?t:r}}function T(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==on&&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=F(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?[]:nn;++c<i;){var l=n[c],p=t[c];if(void 0!==nn){f=false;break}if(a){if(!w(t,function(n,t){if(!z(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;
14
- if(f!=a&&!i)return false;for(var l=f;l--;){var p=c[l];if(!(i?p in t:pn.call(t,p)))return false}for(a=true;++l<f;){var p=c[l],s=n[p],h=t[p];if(void 0!==nn||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(t){return Sn(t)||n(t)}function I(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function q(n,t,r){
12
+ if(f===nn&&(f=n[c]),u)r[c]=f;else{var a=r,l=a[c];pn.call(a,c)&&M(l,f)&&(f!==nn||c in a)||(a[c]=f)}}return r}function F(n){return x(function(t,r){var e=-1,u=r.length,o=1<u?r[u-1]:nn,o=3<n.length&&typeof o=="function"?(u--,o):nn;for(t=Object(t);++e<u;){var i=r[e];i&&n(t,i,e,o)}return t})}function S(n){return function(){var t=arguments,r=dn(n.prototype),t=n.apply(r,t);return H(t)?t:r}}function T(n,t,r){function e(){for(var o=-1,i=arguments.length,c=-1,f=r.length,a=Array(f+i),l=this&&this!==on&&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=S(n);return e}function B(n,t,r,e,u,o){var i=n.length,c=t.length;if(i!=c&&!(1&r&&c>i))return false;for(var c=-1,f=true,a=2&r?[]:nn;++c<i;){var l=n[c],p=t[c];if(void 0!==nn){f=false;break}if(a){if(!w(t,function(n,t){if(!z(a,t)&&(l===n||u(l,n,r,e,o)))return a.push(t)})){f=false;break}}else if(l!==p&&!u(l,p,r,e,o)){f=false;break}}return f}function R(n,t,r,e,u,o){var i=1&r,c=In(n),f=c.length,a=In(t).length;
14
+ if(f!=a&&!i)return false;for(var l=f;l--;){var p=c[l];if(!(i?p in t:pn.call(t,p)))return false}for(a=true;++l<f;){var p=c[l],s=n[p],h=t[p];if(void 0!==nn||s!==h&&!u(s,h,r,e,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(t){return Nn(t)||n(t)}function I(n){var t=[];if(null!=n)for(var r in Object(n))t.push(r);return t}function q(n,t,r){
15
15
  return t=jn(t===nn?n.length-1:t,0),function(){for(var e=arguments,u=-1,o=jn(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(null==n?0:n.length)?s(n,1):[]}function P(n){return n&&n.length?n[0]:nn}function z(n,t,r){var e=null==n?0:n.length;r=typeof r=="number"?0>r?jn(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 C(n,t){return mn(n,_(t))}function G(n,t,r){return e(n,_(t),r,3>arguments.length,mn);
16
16
  }function J(n,t){var r;if(typeof t!="function")throw new TypeError("Expected a function");return n=Fn(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=nn),r}}function M(n,t){return n===t||n!==n&&t!==t}function U(n){var t;return(t=null!=n)&&(t=n.length,t=typeof t=="number"&&-1<t&&0==t%1&&9007199254740991>=t),t&&!V(n)}function V(n){return!!H(n)&&(n=hn.call(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function H(n){var t=typeof n;
17
- return null!=n&&("object"==t||"function"==t)}function K(n){return null!=n&&typeof n=="object"}function L(n){return typeof n=="number"||K(n)&&"[object Number]"==hn.call(n)}function Q(n){return typeof n=="string"||!Sn(n)&&K(n)&&"[object String]"==hn.call(n)}function W(n){return typeof n=="string"?n:null==n?"":n+""}function X(n){return null==n?[]:u(n,qn(n))}function Y(n){return n}function Z(n,r,e){var u=qn(r),o=v(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=v(r,qn(r)));var i=!(H(e)&&"chain"in e&&!e.chain),c=V(n);
17
+ return null!=n&&("object"==t||"function"==t)}function K(n){return null!=n&&typeof n=="object"}function L(n){return typeof n=="number"||K(n)&&"[object Number]"==hn.call(n)}function Q(n){return typeof n=="string"||!Nn(n)&&K(n)&&"[object String]"==hn.call(n)}function W(n){return typeof n=="string"?n:null==n?"":n+""}function X(n){return null==n?[]:u(n,In(n))}function Y(n){return n}function Z(n,r,e){var u=In(r),o=v(r,u);null!=e||H(r)&&(o.length||!u.length)||(e=r,r=n,n=this,o=v(r,In(r)));var i=!(H(e)&&"chain"in e&&!e.chain),c=V(n);
18
18
  return mn(o,function(e){var u=r[e];n[e]=u,c&&(n.prototype[e]=function(){var r=this.__chain__;if(i||r){var e=n(this.__wrapped__);return(e.__actions__=E(this.__actions__)).push({func:u,args:arguments,thisArg:n}),e.__chain__=r,e}return u.apply(n,t([this.value()],arguments))})}),n}var nn,tn=1/0,rn=/[&<>"']/g,en=RegExp(rn.source),un=typeof self=="object"&&self&&self.Object===Object&&self,on=typeof global=="object"&&global&&global.Object===Object&&global||un||Function("return this")(),cn=(un=typeof exports=="object"&&exports&&!exports.nodeType&&exports)&&typeof module=="object"&&module&&!module.nodeType&&module,fn=function(n){
19
19
  return function(t){return null==n?nn:n[t]}}({"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;"}),an=Array.prototype,ln=Object.prototype,pn=ln.hasOwnProperty,sn=0,hn=ln.toString,vn=on._,yn=Object.create,bn=ln.propertyIsEnumerable,gn=on.isFinite,_n=function(n,t){return function(r){return n(t(r))}}(Object.keys,Object),jn=Math.max,dn=function(){function n(){}return function(t){return H(t)?yn?yn(t):(n.prototype=t,t=new n,n.prototype=nn,t):{}}}();i.prototype=dn(o.prototype),i.prototype.constructor=i;
20
- var mn=function(n,t){return function(r,e){if(null==r)return r;if(!U(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(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=Y,An=String,En=function(n){return function(t,r,e){var u=Object(t);if(!U(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]:nn}}(function(n,t,r){
21
- var e=null==n?0:n.length;if(!e)return-1;r=null==r?0:Fn(r),0>r&&(r=jn(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){return T(n,t,r)}),kn=x(function(n,t){return f(n,1,t)}),Nn=x(function(n,t,r){return f(n,Tn(t)||0,r)}),Sn=Array.isArray,Fn=Number,Tn=Number,Bn=S(function(n,t){N(t,_n(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(nn,c),Dn.apply(nn,n)}),qn=_n,$n=I,Pn=function(n){
22
- return xn(q(n,nn,$),n+"")}(function(n,t){return null==n?{}:O(n,d(t,An))});o.assignIn=Rn,o.before=J,o.bind=wn,o.chain=function(n){return n=o(n),n.__chain__=true,n},o.compact=function(n){return p(n,Boolean)},o.concat=function(){var n=arguments.length;if(!n)return[];for(var r=Array(n-1),e=arguments[0];n--;)r[n-1]=arguments[n];return t(Sn(e)?E(e):[e],s(r,1))},o.create=function(n,t){var r=dn(n);return null==t?r:Bn(r,t)},o.defaults=In,o.defer=kn,o.delay=Nn,o.filter=function(n,t){return p(n,_(t))},o.flatten=$,
23
- o.flattenDeep=function(n){return(null==n?0:n.length)?s(n,tn):[]},o.iteratee=_,o.keys=qn,o.map=function(n,t){return d(n,_(t))},o.matches=function(n){return m(Bn({},n))},o.mixin=Z,o.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");return function(){return!n.apply(this,arguments)}},o.once=function(n){return J(2,n)},o.pick=Pn,o.slice=function(n,t,r){var e=null==n?0:n.length;return r=r===nn?e:+r,e?A(n,null==t?0:+t,r):[]},o.sortBy=function(n,t){var e=0;return t=_(t),
24
- d(d(n,function(n,r,u){return{value:n,index:e++,criteria:t(n,r,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==nn,o=null===r,i=r===r,c=e!==nn,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;break n}}r=0}return r||n.index-t.index}),r("value"))},o.tap=function(n,t){return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return U(n)?n.length?E(n):[]:X(n)},o.values=X,o.extend=Rn,Z(o,o),o.clone=function(n){
25
- return H(n)?Sn(n)?E(n):N(n,_n(n)):n},o.escape=function(n){return(n=W(n))&&en.test(n)?n.replace(rn,fn):n},o.every=function(n,t,r){return t=r?nn:t,a(n,_(t))},o.find=En,o.forEach=C,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=P,o.identity=Y,o.indexOf=z,o.isArguments=n,o.isArray=Sn,o.isBoolean=function(n){return true===n||false===n||K(n)&&"[object Boolean]"==hn.call(n)},o.isDate=function(n){return K(n)&&"[object Date]"==hn.call(n)},o.isEmpty=function(t){return U(t)&&(Sn(t)||Q(t)||V(t.splice)||n(t))?!t.length:!_n(t).length;
26
- },o.isEqual=function(n,t){return b(n,t)},o.isFinite=function(n){return typeof n=="number"&&gn(n)},o.isFunction=V,o.isNaN=function(n){return L(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=L,o.isObject=H,o.isRegExp=function(n){return K(n)&&"[object RegExp]"==hn.call(n)},o.isString=Q,o.isUndefined=function(n){return n===nn},o.last=function(n){var t=null==n?0:n.length;return t?n[t-1]:nn},o.max=function(n){return n&&n.length?l(n,Y,y):nn},o.min=function(n){return n&&n.length?l(n,Y,j):nn},
27
- o.noConflict=function(){return on._===this&&(on._=vn),this},o.noop=function(){},o.reduce=G,o.result=function(n,t,r){return t=null==n?nn:n[t],t===nn&&(t=r),V(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=U(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?nn:t,w(n,_(t))},o.uniqueId=function(n){var t=++sn;return W(n)+t},o.each=C,o.first=P,Z(o,function(){var n={};return h(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.16.6",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){
28
- var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){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)})}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return k(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(on._=o,
20
+ var mn=function(n,t){return function(r,e){if(null==r)return r;if(!U(r))return n(r,e);for(var u=r.length,o=t?u:-1,i=Object(r);(t?o--:++o<u)&&false!==e(i[o],o,i););return r}}(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=Y,An=function(n){return function(t,r,e){var u=Object(t);if(!U(t)){var o=_(r);t=In(t),r=function(n){return o(u[n],n,u)}}return r=n(t,r,e),-1<r?u[o?t[r]:r]:nn}}(function(n,t,r){var e=null==n?0:n.length;
21
+ if(!e)return-1;r=null==r?0:Fn(r),0>r&&(r=jn(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}),En=x(function(n,t,r){return T(n,t,r)}),wn=x(function(n,t){return f(n,1,t)}),kn=x(function(n,t,r){return f(n,Sn(t)||0,r)}),Nn=Array.isArray,Fn=Number,Sn=Number,Tn=F(function(n,t){N(t,_n(t),n)}),Bn=F(function(n,t){N(t,I(t),n)}),Rn=F(function(n,t,r,e){N(t,qn(t),n,e)}),Dn=x(function(n){return n.push(nn,c),Rn.apply(nn,n)}),In=_n,qn=I,$n=function(n){return xn(q(n,nn,$),n+"");
22
+ }(function(n,t){return null==n?{}:O(n,t)});o.assignIn=Bn,o.before=J,o.bind=En,o.chain=function(n){return n=o(n),n.__chain__=true,n},o.compact=function(n){return p(n,Boolean)},o.concat=function(){var n=arguments.length;if(!n)return[];for(var r=Array(n-1),e=arguments[0];n--;)r[n-1]=arguments[n];return t(Nn(e)?E(e):[e],s(r,1))},o.create=function(n,t){var r=dn(n);return null==t?r:Tn(r,t)},o.defaults=Dn,o.defer=wn,o.delay=kn,o.filter=function(n,t){return p(n,_(t))},o.flatten=$,o.flattenDeep=function(n){
23
+ return(null==n?0:n.length)?s(n,tn):[]},o.iteratee=_,o.keys=In,o.map=function(n,t){return d(n,_(t))},o.matches=function(n){return m(Tn({},n))},o.mixin=Z,o.negate=function(n){if(typeof n!="function")throw new TypeError("Expected a function");return function(){return!n.apply(this,arguments)}},o.once=function(n){return J(2,n)},o.pick=$n,o.slice=function(n,t,r){var e=null==n?0:n.length;return r=r===nn?e:+r,e?A(n,null==t?0:+t,r):[]},o.sortBy=function(n,t){var e=0;return t=_(t),d(d(n,function(n,r,u){return{
24
+ value:n,index:e++,criteria:t(n,r,u)}}).sort(function(n,t){var r;n:{r=n.criteria;var e=t.criteria;if(r!==e){var u=r!==nn,o=null===r,i=r===r,c=e!==nn,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;break n}}r=0}return r||n.index-t.index}),r("value"))},o.tap=function(n,t){return t(n),n},o.thru=function(n,t){return t(n)},o.toArray=function(n){return U(n)?n.length?E(n):[]:X(n)},o.values=X,o.extend=Bn,Z(o,o),o.clone=function(n){return H(n)?Nn(n)?E(n):N(n,_n(n)):n;
25
+ },o.escape=function(n){return(n=W(n))&&en.test(n)?n.replace(rn,fn):n},o.every=function(n,t,r){return t=r?nn:t,a(n,_(t))},o.find=An,o.forEach=C,o.has=function(n,t){return null!=n&&pn.call(n,t)},o.head=P,o.identity=Y,o.indexOf=z,o.isArguments=n,o.isArray=Nn,o.isBoolean=function(n){return true===n||false===n||K(n)&&"[object Boolean]"==hn.call(n)},o.isDate=function(n){return K(n)&&"[object Date]"==hn.call(n)},o.isEmpty=function(t){return U(t)&&(Nn(t)||Q(t)||V(t.splice)||n(t))?!t.length:!_n(t).length},o.isEqual=function(n,t){
26
+ return b(n,t)},o.isFinite=function(n){return typeof n=="number"&&gn(n)},o.isFunction=V,o.isNaN=function(n){return L(n)&&n!=+n},o.isNull=function(n){return null===n},o.isNumber=L,o.isObject=H,o.isRegExp=function(n){return K(n)&&"[object RegExp]"==hn.call(n)},o.isString=Q,o.isUndefined=function(n){return n===nn},o.last=function(n){var t=null==n?0:n.length;return t?n[t-1]:nn},o.max=function(n){return n&&n.length?l(n,Y,y):nn},o.min=function(n){return n&&n.length?l(n,Y,j):nn},o.noConflict=function(){return on._===this&&(on._=vn),
27
+ this},o.noop=function(){},o.reduce=G,o.result=function(n,t,r){return t=null==n?nn:n[t],t===nn&&(t=r),V(t)?t.call(n):t},o.size=function(n){return null==n?0:(n=U(n)?n:_n(n),n.length)},o.some=function(n,t,r){return t=r?nn:t,w(n,_(t))},o.uniqueId=function(n){var t=++sn;return W(n)+t},o.each=C,o.first=P,Z(o,function(){var n={};return h(o,function(t,r){pn.call(o.prototype,r)||(n[r]=t)}),n}(),{chain:false}),o.VERSION="4.17.2",mn("pop join replace reverse split push shift sort splice unshift".split(" "),function(n){
28
+ var t=(/^(?:replace|split)$/.test(n)?String.prototype:an)[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|join|replace|shift)$/.test(n);o.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(Nn(u)?u:[],n)}return this[r](function(r){return t.apply(Nn(r)?r:[],n)})}}),o.prototype.toJSON=o.prototype.valueOf=o.prototype.value=function(){return k(this.__wrapped__,this.__actions__)},typeof define=="function"&&typeof define.amd=="object"&&define.amd?(on._=o,
29
29
  define(function(){return o})):cn?((cn.exports=o)._=o,un._=o):on._=o}).call(this);
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * @license
3
- * lodash <https://lodash.com/>
3
+ * Lodash <https://lodash.com/>
4
4
  * Copyright JS Foundation and other contributors <https://js.foundation/>
5
5
  * Released under MIT license <https://lodash.com/license>
6
6
  * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
@@ -12,13 +12,13 @@
12
12
  var undefined;
13
13
 
14
14
  /** Used as the semantic version number. */
15
- var VERSION = '4.16.6';
15
+ var VERSION = '4.17.2';
16
16
 
17
17
  /** Used as the size to enable large array optimizations. */
18
18
  var LARGE_ARRAY_SIZE = 200;
19
19
 
20
20
  /** Error message constants. */
21
- var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://github.com/es-shims.',
21
+ var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
22
22
  FUNC_ERROR_TEXT = 'Expected a function';
23
23
 
24
24
  /** Used to stand-in for `undefined` hash values. */
@@ -30,21 +30,26 @@
30
30
  /** Used as the internal argument placeholder. */
31
31
  var PLACEHOLDER = '__lodash_placeholder__';
32
32
 
33
+ /** Used to compose bitmasks for cloning. */
34
+ var CLONE_DEEP_FLAG = 1,
35
+ CLONE_FLAT_FLAG = 2,
36
+ CLONE_SYMBOLS_FLAG = 4;
37
+
38
+ /** Used to compose bitmasks for value comparisons. */
39
+ var COMPARE_PARTIAL_FLAG = 1,
40
+ COMPARE_UNORDERED_FLAG = 2;
41
+
33
42
  /** Used to compose bitmasks for function metadata. */
34
- var BIND_FLAG = 1,
35
- BIND_KEY_FLAG = 2,
36
- CURRY_BOUND_FLAG = 4,
37
- CURRY_FLAG = 8,
38
- CURRY_RIGHT_FLAG = 16,
39
- PARTIAL_FLAG = 32,
40
- PARTIAL_RIGHT_FLAG = 64,
41
- ARY_FLAG = 128,
42
- REARG_FLAG = 256,
43
- FLIP_FLAG = 512;
44
-
45
- /** Used to compose bitmasks for comparison styles. */
46
- var UNORDERED_COMPARE_FLAG = 1,
47
- PARTIAL_COMPARE_FLAG = 2;
43
+ var WRAP_BIND_FLAG = 1,
44
+ WRAP_BIND_KEY_FLAG = 2,
45
+ WRAP_CURRY_BOUND_FLAG = 4,
46
+ WRAP_CURRY_FLAG = 8,
47
+ WRAP_CURRY_RIGHT_FLAG = 16,
48
+ WRAP_PARTIAL_FLAG = 32,
49
+ WRAP_PARTIAL_RIGHT_FLAG = 64,
50
+ WRAP_ARY_FLAG = 128,
51
+ WRAP_REARG_FLAG = 256,
52
+ WRAP_FLIP_FLAG = 512;
48
53
 
49
54
  /** Used as default options for `_.truncate`. */
50
55
  var DEFAULT_TRUNC_LENGTH = 30,
@@ -72,15 +77,15 @@
72
77
 
73
78
  /** Used to associate wrap methods with their bit flags. */
74
79
  var wrapFlags = [
75
- ['ary', ARY_FLAG],
76
- ['bind', BIND_FLAG],
77
- ['bindKey', BIND_KEY_FLAG],
78
- ['curry', CURRY_FLAG],
79
- ['curryRight', CURRY_RIGHT_FLAG],
80
- ['flip', FLIP_FLAG],
81
- ['partial', PARTIAL_FLAG],
82
- ['partialRight', PARTIAL_RIGHT_FLAG],
83
- ['rearg', REARG_FLAG]
80
+ ['ary', WRAP_ARY_FLAG],
81
+ ['bind', WRAP_BIND_FLAG],
82
+ ['bindKey', WRAP_BIND_KEY_FLAG],
83
+ ['curry', WRAP_CURRY_FLAG],
84
+ ['curryRight', WRAP_CURRY_RIGHT_FLAG],
85
+ ['flip', WRAP_FLIP_FLAG],
86
+ ['partial', WRAP_PARTIAL_FLAG],
87
+ ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
88
+ ['rearg', WRAP_REARG_FLAG]
84
89
  ];
85
90
 
86
91
  /** `Object#toString` result references. */
@@ -199,8 +204,10 @@
199
204
 
200
205
  /** Used to compose unicode character classes. */
201
206
  var rsAstralRange = '\\ud800-\\udfff',
202
- rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
203
- rsComboSymbolsRange = '\\u20d0-\\u20f0',
207
+ rsComboMarksRange = '\\u0300-\\u036f',
208
+ reComboHalfMarksRange = '\\ufe20-\\ufe2f',
209
+ rsComboSymbolsRange = '\\u20d0-\\u20ff',
210
+ rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
204
211
  rsDingbatRange = '\\u2700-\\u27bf',
205
212
  rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
206
213
  rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
@@ -215,7 +222,7 @@
215
222
  var rsApos = "['\u2019]",
216
223
  rsAstral = '[' + rsAstralRange + ']',
217
224
  rsBreak = '[' + rsBreakRange + ']',
218
- rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
225
+ rsCombo = '[' + rsComboRange + ']',
219
226
  rsDigits = '\\d+',
220
227
  rsDingbat = '[' + rsDingbatRange + ']',
221
228
  rsLower = '[' + rsLowerRange + ']',
@@ -267,7 +274,7 @@
267
274
  ].join('|'), 'g');
268
275
 
269
276
  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
270
- var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboMarksRange + rsComboSymbolsRange + rsVarRange + ']');
277
+ var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');
271
278
 
272
279
  /** Used to detect strings that need a more robust regexp to match words. */
273
280
  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
@@ -430,7 +437,7 @@
430
437
  /** Used to access faster Node.js helpers. */
431
438
  var nodeUtil = (function() {
432
439
  try {
433
- return freeProcess && freeProcess.binding('util');
440
+ return freeProcess && freeProcess.binding && freeProcess.binding('util');
434
441
  } catch (e) {}
435
442
  }());
436
443
 
@@ -2558,6 +2565,19 @@
2558
2565
  return object && copyObject(source, keys(source), object);
2559
2566
  }
2560
2567
 
2568
+ /**
2569
+ * The base implementation of `_.assignIn` without support for multiple sources
2570
+ * or `customizer` functions.
2571
+ *
2572
+ * @private
2573
+ * @param {Object} object The destination object.
2574
+ * @param {Object} source The source object.
2575
+ * @returns {Object} Returns `object`.
2576
+ */
2577
+ function baseAssignIn(object, source) {
2578
+ return object && copyObject(source, keysIn(source), object);
2579
+ }
2580
+
2561
2581
  /**
2562
2582
  * The base implementation of `assignValue` and `assignMergeValue` without
2563
2583
  * value checks.
@@ -2585,7 +2605,7 @@
2585
2605
  *
2586
2606
  * @private
2587
2607
  * @param {Object} object The object to iterate over.
2588
- * @param {string[]} paths The property paths of elements to pick.
2608
+ * @param {string[]} paths The property paths to pick.
2589
2609
  * @returns {Array} Returns the picked elements.
2590
2610
  */
2591
2611
  function baseAt(object, paths) {
@@ -2627,16 +2647,22 @@
2627
2647
  *
2628
2648
  * @private
2629
2649
  * @param {*} value The value to clone.
2630
- * @param {boolean} [isDeep] Specify a deep clone.
2631
- * @param {boolean} [isFull] Specify a clone including symbols.
2650
+ * @param {boolean} bitmask The bitmask flags.
2651
+ * 1 - Deep clone
2652
+ * 2 - Flatten inherited properties
2653
+ * 4 - Clone symbols
2632
2654
  * @param {Function} [customizer] The function to customize cloning.
2633
2655
  * @param {string} [key] The key of `value`.
2634
2656
  * @param {Object} [object] The parent object of `value`.
2635
2657
  * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
2636
2658
  * @returns {*} Returns the cloned value.
2637
2659
  */
2638
- function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
2639
- var result;
2660
+ function baseClone(value, bitmask, customizer, key, object, stack) {
2661
+ var result,
2662
+ isDeep = bitmask & CLONE_DEEP_FLAG,
2663
+ isFlat = bitmask & CLONE_FLAT_FLAG,
2664
+ isFull = bitmask & CLONE_SYMBOLS_FLAG;
2665
+
2640
2666
  if (customizer) {
2641
2667
  result = object ? customizer(value, key, object, stack) : customizer(value);
2642
2668
  }
@@ -2660,9 +2686,11 @@
2660
2686
  return cloneBuffer(value, isDeep);
2661
2687
  }
2662
2688
  if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
2663
- result = initCloneObject(isFunc ? {} : value);
2689
+ result = (isFlat || isFunc) ? {} : initCloneObject(value);
2664
2690
  if (!isDeep) {
2665
- return copySymbols(value, baseAssign(result, value));
2691
+ return isFlat
2692
+ ? copySymbolsIn(value, baseAssignIn(result, value))
2693
+ : copySymbols(value, baseAssign(result, value));
2666
2694
  }
2667
2695
  } else {
2668
2696
  if (!cloneableTags[tag]) {
@@ -2679,14 +2707,18 @@
2679
2707
  }
2680
2708
  stack.set(value, result);
2681
2709
 
2682
- var props = isArr ? undefined : (isFull ? getAllKeys : keys)(value);
2710
+ var keysFunc = isFull
2711
+ ? (isFlat ? getAllKeysIn : getAllKeys)
2712
+ : (isFlat ? keysIn : keys);
2713
+
2714
+ var props = isArr ? undefined : keysFunc(value);
2683
2715
  arrayEach(props || value, function(subValue, key) {
2684
2716
  if (props) {
2685
2717
  key = subValue;
2686
2718
  subValue = value[key];
2687
2719
  }
2688
2720
  // Recursively populate clone (susceptible to call stack limits).
2689
- assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
2721
+ assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
2690
2722
  });
2691
2723
  return result;
2692
2724
  }
@@ -3024,7 +3056,7 @@
3024
3056
  * @returns {*} Returns the resolved value.
3025
3057
  */
3026
3058
  function baseGet(object, path) {
3027
- path = isKey(path, object) ? [path] : castPath(path);
3059
+ path = castPath(path, object);
3028
3060
 
3029
3061
  var index = 0,
3030
3062
  length = path.length;
@@ -3210,12 +3242,9 @@
3210
3242
  * @returns {*} Returns the result of the invoked method.
3211
3243
  */
3212
3244
  function baseInvoke(object, path, args) {
3213
- if (!isKey(path, object)) {
3214
- path = castPath(path);
3215
- object = parent(object, path);
3216
- path = last(path);
3217
- }
3218
- var func = object == null ? object : object[toKey(path)];
3245
+ path = castPath(path, object);
3246
+ object = parent(object, path);
3247
+ var func = object == null ? object : object[toKey(last(path))];
3219
3248
  return func == null ? undefined : apply(func, object, args);
3220
3249
  }
3221
3250
 
@@ -3259,22 +3288,21 @@
3259
3288
  * @private
3260
3289
  * @param {*} value The value to compare.
3261
3290
  * @param {*} other The other value to compare.
3291
+ * @param {boolean} bitmask The bitmask flags.
3292
+ * 1 - Unordered comparison
3293
+ * 2 - Partial comparison
3262
3294
  * @param {Function} [customizer] The function to customize comparisons.
3263
- * @param {boolean} [bitmask] The bitmask of comparison flags.
3264
- * The bitmask may be composed of the following flags:
3265
- * 1 - Unordered comparison
3266
- * 2 - Partial comparison
3267
3295
  * @param {Object} [stack] Tracks traversed `value` and `other` objects.
3268
3296
  * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
3269
3297
  */
3270
- function baseIsEqual(value, other, customizer, bitmask, stack) {
3298
+ function baseIsEqual(value, other, bitmask, customizer, stack) {
3271
3299
  if (value === other) {
3272
3300
  return true;
3273
3301
  }
3274
3302
  if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
3275
3303
  return value !== value && other !== other;
3276
3304
  }
3277
- return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
3305
+ return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
3278
3306
  }
3279
3307
 
3280
3308
  /**
@@ -3285,14 +3313,13 @@
3285
3313
  * @private
3286
3314
  * @param {Object} object The object to compare.
3287
3315
  * @param {Object} other The other object to compare.
3316
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
3317
+ * @param {Function} customizer The function to customize comparisons.
3288
3318
  * @param {Function} equalFunc The function to determine equivalents of values.
3289
- * @param {Function} [customizer] The function to customize comparisons.
3290
- * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
3291
- * for more details.
3292
3319
  * @param {Object} [stack] Tracks traversed `object` and `other` objects.
3293
3320
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
3294
3321
  */
3295
- function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
3322
+ function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
3296
3323
  var objIsArr = isArray(object),
3297
3324
  othIsArr = isArray(other),
3298
3325
  objTag = arrayTag,
@@ -3320,10 +3347,10 @@
3320
3347
  if (isSameTag && !objIsObj) {
3321
3348
  stack || (stack = new Stack);
3322
3349
  return (objIsArr || isTypedArray(object))
3323
- ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
3324
- : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
3350
+ ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
3351
+ : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
3325
3352
  }
3326
- if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
3353
+ if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
3327
3354
  var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
3328
3355
  othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
3329
3356
 
@@ -3332,14 +3359,14 @@
3332
3359
  othUnwrapped = othIsWrapped ? other.value() : other;
3333
3360
 
3334
3361
  stack || (stack = new Stack);
3335
- return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
3362
+ return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
3336
3363
  }
3337
3364
  }
3338
3365
  if (!isSameTag) {
3339
3366
  return false;
3340
3367
  }
3341
3368
  stack || (stack = new Stack);
3342
- return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
3369
+ return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
3343
3370
  }
3344
3371
 
3345
3372
  /**
@@ -3397,7 +3424,7 @@
3397
3424
  var result = customizer(objValue, srcValue, key, object, source, stack);
3398
3425
  }
3399
3426
  if (!(result === undefined
3400
- ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
3427
+ ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
3401
3428
  : result
3402
3429
  )) {
3403
3430
  return false;
@@ -3587,7 +3614,7 @@
3587
3614
  var objValue = get(object, path);
3588
3615
  return (objValue === undefined && objValue === srcValue)
3589
3616
  ? hasIn(object, path)
3590
- : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
3617
+ : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
3591
3618
  };
3592
3619
  }
3593
3620
 
@@ -3749,13 +3776,13 @@
3749
3776
  *
3750
3777
  * @private
3751
3778
  * @param {Object} object The source object.
3752
- * @param {string[]} props The property identifiers to pick.
3779
+ * @param {string[]} paths The property paths to pick.
3753
3780
  * @returns {Object} Returns the new object.
3754
3781
  */
3755
- function basePick(object, props) {
3782
+ function basePick(object, paths) {
3756
3783
  object = Object(object);
3757
- return basePickBy(object, props, function(value, key) {
3758
- return key in object;
3784
+ return basePickBy(object, paths, function(value, path) {
3785
+ return hasIn(object, path);
3759
3786
  });
3760
3787
  }
3761
3788
 
@@ -3764,21 +3791,21 @@
3764
3791
  *
3765
3792
  * @private
3766
3793
  * @param {Object} object The source object.
3767
- * @param {string[]} props The property identifiers to pick from.
3794
+ * @param {string[]} paths The property paths to pick.
3768
3795
  * @param {Function} predicate The function invoked per property.
3769
3796
  * @returns {Object} Returns the new object.
3770
3797
  */
3771
- function basePickBy(object, props, predicate) {
3798
+ function basePickBy(object, paths, predicate) {
3772
3799
  var index = -1,
3773
- length = props.length,
3800
+ length = paths.length,
3774
3801
  result = {};
3775
3802
 
3776
3803
  while (++index < length) {
3777
- var key = props[index],
3778
- value = object[key];
3804
+ var path = paths[index],
3805
+ value = baseGet(object, path);
3779
3806
 
3780
- if (predicate(value, key)) {
3781
- baseAssignValue(result, key, value);
3807
+ if (predicate(value, path)) {
3808
+ baseSet(result, castPath(path, object), value);
3782
3809
  }
3783
3810
  }
3784
3811
  return result;
@@ -3854,17 +3881,8 @@
3854
3881
  var previous = index;
3855
3882
  if (isIndex(index)) {
3856
3883
  splice.call(array, index, 1);
3857
- }
3858
- else if (!isKey(index, array)) {
3859
- var path = castPath(index),
3860
- object = parent(array, path);
3861
-
3862
- if (object != null) {
3863
- delete object[toKey(last(path))];
3864
- }
3865
- }
3866
- else {
3867
- delete array[toKey(index)];
3884
+ } else {
3885
+ baseUnset(array, index);
3868
3886
  }
3869
3887
  }
3870
3888
  }
@@ -3985,7 +4003,7 @@
3985
4003
  if (!isObject(object)) {
3986
4004
  return object;
3987
4005
  }
3988
- path = isKey(path, object) ? [path] : castPath(path);
4006
+ path = castPath(path, object);
3989
4007
 
3990
4008
  var index = -1,
3991
4009
  length = path.length,
@@ -4322,15 +4340,13 @@
4322
4340
  *
4323
4341
  * @private
4324
4342
  * @param {Object} object The object to modify.
4325
- * @param {Array|string} path The path of the property to unset.
4343
+ * @param {Array|string} path The property path to unset.
4326
4344
  * @returns {boolean} Returns `true` if the property is deleted, else `false`.
4327
4345
  */
4328
4346
  function baseUnset(object, path) {
4329
- path = isKey(path, object) ? [path] : castPath(path);
4347
+ path = castPath(path, object);
4330
4348
  object = parent(object, path);
4331
-
4332
- var key = toKey(last(path));
4333
- return !(object != null && hasOwnProperty.call(object, key)) || delete object[key];
4349
+ return object == null || delete object[toKey(last(path))];
4334
4350
  }
4335
4351
 
4336
4352
  /**
@@ -4470,10 +4486,14 @@
4470
4486
  *
4471
4487
  * @private
4472
4488
  * @param {*} value The value to inspect.
4489
+ * @param {Object} [object] The object to query keys on.
4473
4490
  * @returns {Array} Returns the cast property path array.
4474
4491
  */
4475
- function castPath(value) {
4476
- return isArray(value) ? value : stringToPath(value);
4492
+ function castPath(value, object) {
4493
+ if (isArray(value)) {
4494
+ return value;
4495
+ }
4496
+ return isKey(value, object) ? [value] : stringToPath(toString(value));
4477
4497
  }
4478
4498
 
4479
4499
  /**
@@ -4567,7 +4587,7 @@
4567
4587
  * @returns {Object} Returns the cloned map.
4568
4588
  */
4569
4589
  function cloneMap(map, isDeep, cloneFunc) {
4570
- var array = isDeep ? cloneFunc(mapToArray(map), true) : mapToArray(map);
4590
+ var array = isDeep ? cloneFunc(mapToArray(map), CLONE_DEEP_FLAG) : mapToArray(map);
4571
4591
  return arrayReduce(array, addMapEntry, new map.constructor);
4572
4592
  }
4573
4593
 
@@ -4594,7 +4614,7 @@
4594
4614
  * @returns {Object} Returns the cloned set.
4595
4615
  */
4596
4616
  function cloneSet(set, isDeep, cloneFunc) {
4597
- var array = isDeep ? cloneFunc(setToArray(set), true) : setToArray(set);
4617
+ var array = isDeep ? cloneFunc(setToArray(set), CLONE_DEEP_FLAG) : setToArray(set);
4598
4618
  return arrayReduce(array, addSetEntry, new set.constructor);
4599
4619
  }
4600
4620
 
@@ -4829,7 +4849,7 @@
4829
4849
  }
4830
4850
 
4831
4851
  /**
4832
- * Copies own symbol properties of `source` to `object`.
4852
+ * Copies own symbols of `source` to `object`.
4833
4853
  *
4834
4854
  * @private
4835
4855
  * @param {Object} source The object to copy symbols from.
@@ -4840,6 +4860,18 @@
4840
4860
  return copyObject(source, getSymbols(source), object);
4841
4861
  }
4842
4862
 
4863
+ /**
4864
+ * Copies own and inherited symbols of `source` to `object`.
4865
+ *
4866
+ * @private
4867
+ * @param {Object} source The object to copy symbols from.
4868
+ * @param {Object} [object={}] The object to copy symbols to.
4869
+ * @returns {Object} Returns `object`.
4870
+ */
4871
+ function copySymbolsIn(source, object) {
4872
+ return copyObject(source, getSymbolsIn(source), object);
4873
+ }
4874
+
4843
4875
  /**
4844
4876
  * Creates a function like `_.groupBy`.
4845
4877
  *
@@ -4954,7 +4986,7 @@
4954
4986
  * @returns {Function} Returns the new wrapped function.
4955
4987
  */
4956
4988
  function createBind(func, bitmask, thisArg) {
4957
- var isBind = bitmask & BIND_FLAG,
4989
+ var isBind = bitmask & WRAP_BIND_FLAG,
4958
4990
  Ctor = createCtor(func);
4959
4991
 
4960
4992
  function wrapper() {
@@ -5127,7 +5159,7 @@
5127
5159
  data = funcName == 'wrapper' ? getData(func) : undefined;
5128
5160
 
5129
5161
  if (data && isLaziable(data[0]) &&
5130
- data[1] == (ARY_FLAG | CURRY_FLAG | PARTIAL_FLAG | REARG_FLAG) &&
5162
+ data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
5131
5163
  !data[4].length && data[9] == 1
5132
5164
  ) {
5133
5165
  wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
@@ -5176,11 +5208,11 @@
5176
5208
  * @returns {Function} Returns the new wrapped function.
5177
5209
  */
5178
5210
  function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
5179
- var isAry = bitmask & ARY_FLAG,
5180
- isBind = bitmask & BIND_FLAG,
5181
- isBindKey = bitmask & BIND_KEY_FLAG,
5182
- isCurried = bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG),
5183
- isFlip = bitmask & FLIP_FLAG,
5211
+ var isAry = bitmask & WRAP_ARY_FLAG,
5212
+ isBind = bitmask & WRAP_BIND_FLAG,
5213
+ isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
5214
+ isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
5215
+ isFlip = bitmask & WRAP_FLIP_FLAG,
5184
5216
  Ctor = isBindKey ? undefined : createCtor(func);
5185
5217
 
5186
5218
  function wrapper() {
@@ -5331,7 +5363,7 @@
5331
5363
  * @returns {Function} Returns the new wrapped function.
5332
5364
  */
5333
5365
  function createPartial(func, bitmask, thisArg, partials) {
5334
- var isBind = bitmask & BIND_FLAG,
5366
+ var isBind = bitmask & WRAP_BIND_FLAG,
5335
5367
  Ctor = createCtor(func);
5336
5368
 
5337
5369
  function wrapper() {
@@ -5413,17 +5445,17 @@
5413
5445
  * @returns {Function} Returns the new wrapped function.
5414
5446
  */
5415
5447
  function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
5416
- var isCurry = bitmask & CURRY_FLAG,
5448
+ var isCurry = bitmask & WRAP_CURRY_FLAG,
5417
5449
  newHolders = isCurry ? holders : undefined,
5418
5450
  newHoldersRight = isCurry ? undefined : holders,
5419
5451
  newPartials = isCurry ? partials : undefined,
5420
5452
  newPartialsRight = isCurry ? undefined : partials;
5421
5453
 
5422
- bitmask |= (isCurry ? PARTIAL_FLAG : PARTIAL_RIGHT_FLAG);
5423
- bitmask &= ~(isCurry ? PARTIAL_RIGHT_FLAG : PARTIAL_FLAG);
5454
+ bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
5455
+ bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
5424
5456
 
5425
- if (!(bitmask & CURRY_BOUND_FLAG)) {
5426
- bitmask &= ~(BIND_FLAG | BIND_KEY_FLAG);
5457
+ if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
5458
+ bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
5427
5459
  }
5428
5460
  var newData = [
5429
5461
  func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
@@ -5501,17 +5533,16 @@
5501
5533
  * @private
5502
5534
  * @param {Function|string} func The function or method name to wrap.
5503
5535
  * @param {number} bitmask The bitmask flags.
5504
- * The bitmask may be composed of the following flags:
5505
- * 1 - `_.bind`
5506
- * 2 - `_.bindKey`
5507
- * 4 - `_.curry` or `_.curryRight` of a bound function
5508
- * 8 - `_.curry`
5509
- * 16 - `_.curryRight`
5510
- * 32 - `_.partial`
5511
- * 64 - `_.partialRight`
5512
- * 128 - `_.rearg`
5513
- * 256 - `_.ary`
5514
- * 512 - `_.flip`
5536
+ * 1 - `_.bind`
5537
+ * 2 - `_.bindKey`
5538
+ * 4 - `_.curry` or `_.curryRight` of a bound function
5539
+ * 8 - `_.curry`
5540
+ * 16 - `_.curryRight`
5541
+ * 32 - `_.partial`
5542
+ * 64 - `_.partialRight`
5543
+ * 128 - `_.rearg`
5544
+ * 256 - `_.ary`
5545
+ * 512 - `_.flip`
5515
5546
  * @param {*} [thisArg] The `this` binding of `func`.
5516
5547
  * @param {Array} [partials] The arguments to be partially applied.
5517
5548
  * @param {Array} [holders] The `partials` placeholder indexes.
@@ -5521,20 +5552,20 @@
5521
5552
  * @returns {Function} Returns the new wrapped function.
5522
5553
  */
5523
5554
  function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
5524
- var isBindKey = bitmask & BIND_KEY_FLAG;
5555
+ var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
5525
5556
  if (!isBindKey && typeof func != 'function') {
5526
5557
  throw new TypeError(FUNC_ERROR_TEXT);
5527
5558
  }
5528
5559
  var length = partials ? partials.length : 0;
5529
5560
  if (!length) {
5530
- bitmask &= ~(PARTIAL_FLAG | PARTIAL_RIGHT_FLAG);
5561
+ bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
5531
5562
  partials = holders = undefined;
5532
5563
  }
5533
5564
  ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
5534
5565
  arity = arity === undefined ? arity : toInteger(arity);
5535
5566
  length -= holders ? holders.length : 0;
5536
5567
 
5537
- if (bitmask & PARTIAL_RIGHT_FLAG) {
5568
+ if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
5538
5569
  var partialsRight = partials,
5539
5570
  holdersRight = holders;
5540
5571
 
@@ -5559,14 +5590,14 @@
5559
5590
  ? (isBindKey ? 0 : func.length)
5560
5591
  : nativeMax(newData[9] - length, 0);
5561
5592
 
5562
- if (!arity && bitmask & (CURRY_FLAG | CURRY_RIGHT_FLAG)) {
5563
- bitmask &= ~(CURRY_FLAG | CURRY_RIGHT_FLAG);
5593
+ if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
5594
+ bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
5564
5595
  }
5565
- if (!bitmask || bitmask == BIND_FLAG) {
5596
+ if (!bitmask || bitmask == WRAP_BIND_FLAG) {
5566
5597
  var result = createBind(func, bitmask, thisArg);
5567
- } else if (bitmask == CURRY_FLAG || bitmask == CURRY_RIGHT_FLAG) {
5598
+ } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
5568
5599
  result = createCurry(func, bitmask, arity);
5569
- } else if ((bitmask == PARTIAL_FLAG || bitmask == (BIND_FLAG | PARTIAL_FLAG)) && !holders.length) {
5600
+ } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
5570
5601
  result = createPartial(func, bitmask, thisArg, partials);
5571
5602
  } else {
5572
5603
  result = createHybrid.apply(undefined, newData);
@@ -5582,15 +5613,14 @@
5582
5613
  * @private
5583
5614
  * @param {Array} array The array to compare.
5584
5615
  * @param {Array} other The other array to compare.
5585
- * @param {Function} equalFunc The function to determine equivalents of values.
5616
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
5586
5617
  * @param {Function} customizer The function to customize comparisons.
5587
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
5588
- * for more details.
5618
+ * @param {Function} equalFunc The function to determine equivalents of values.
5589
5619
  * @param {Object} stack Tracks traversed `array` and `other` objects.
5590
5620
  * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
5591
5621
  */
5592
- function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
5593
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
5622
+ function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
5623
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
5594
5624
  arrLength = array.length,
5595
5625
  othLength = other.length;
5596
5626
 
@@ -5604,7 +5634,7 @@
5604
5634
  }
5605
5635
  var index = -1,
5606
5636
  result = true,
5607
- seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
5637
+ seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
5608
5638
 
5609
5639
  stack.set(array, other);
5610
5640
  stack.set(other, array);
@@ -5630,7 +5660,7 @@
5630
5660
  if (seen) {
5631
5661
  if (!arraySome(other, function(othValue, othIndex) {
5632
5662
  if (!cacheHas(seen, othIndex) &&
5633
- (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
5663
+ (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
5634
5664
  return seen.push(othIndex);
5635
5665
  }
5636
5666
  })) {
@@ -5639,7 +5669,7 @@
5639
5669
  }
5640
5670
  } else if (!(
5641
5671
  arrValue === othValue ||
5642
- equalFunc(arrValue, othValue, customizer, bitmask, stack)
5672
+ equalFunc(arrValue, othValue, bitmask, customizer, stack)
5643
5673
  )) {
5644
5674
  result = false;
5645
5675
  break;
@@ -5661,14 +5691,13 @@
5661
5691
  * @param {Object} object The object to compare.
5662
5692
  * @param {Object} other The other object to compare.
5663
5693
  * @param {string} tag The `toStringTag` of the objects to compare.
5664
- * @param {Function} equalFunc The function to determine equivalents of values.
5694
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
5665
5695
  * @param {Function} customizer The function to customize comparisons.
5666
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
5667
- * for more details.
5696
+ * @param {Function} equalFunc The function to determine equivalents of values.
5668
5697
  * @param {Object} stack Tracks traversed `object` and `other` objects.
5669
5698
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
5670
5699
  */
5671
- function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
5700
+ function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
5672
5701
  switch (tag) {
5673
5702
  case dataViewTag:
5674
5703
  if ((object.byteLength != other.byteLength) ||
@@ -5706,7 +5735,7 @@
5706
5735
  var convert = mapToArray;
5707
5736
 
5708
5737
  case setTag:
5709
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
5738
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
5710
5739
  convert || (convert = setToArray);
5711
5740
 
5712
5741
  if (object.size != other.size && !isPartial) {
@@ -5717,11 +5746,11 @@
5717
5746
  if (stacked) {
5718
5747
  return stacked == other;
5719
5748
  }
5720
- bitmask |= UNORDERED_COMPARE_FLAG;
5749
+ bitmask |= COMPARE_UNORDERED_FLAG;
5721
5750
 
5722
5751
  // Recursively compare objects (susceptible to call stack limits).
5723
5752
  stack.set(object, other);
5724
- var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
5753
+ var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
5725
5754
  stack['delete'](object);
5726
5755
  return result;
5727
5756
 
@@ -5740,15 +5769,14 @@
5740
5769
  * @private
5741
5770
  * @param {Object} object The object to compare.
5742
5771
  * @param {Object} other The other object to compare.
5743
- * @param {Function} equalFunc The function to determine equivalents of values.
5772
+ * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
5744
5773
  * @param {Function} customizer The function to customize comparisons.
5745
- * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
5746
- * for more details.
5774
+ * @param {Function} equalFunc The function to determine equivalents of values.
5747
5775
  * @param {Object} stack Tracks traversed `object` and `other` objects.
5748
5776
  * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
5749
5777
  */
5750
- function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
5751
- var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
5778
+ function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
5779
+ var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
5752
5780
  objProps = keys(object),
5753
5781
  objLength = objProps.length,
5754
5782
  othProps = keys(other),
@@ -5786,7 +5814,7 @@
5786
5814
  }
5787
5815
  // Recursively compare objects (susceptible to call stack limits).
5788
5816
  if (!(compared === undefined
5789
- ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
5817
+ ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
5790
5818
  : compared
5791
5819
  )) {
5792
5820
  result = false;
@@ -5983,7 +6011,7 @@
5983
6011
  }
5984
6012
 
5985
6013
  /**
5986
- * Creates an array of the own enumerable symbol properties of `object`.
6014
+ * Creates an array of the own enumerable symbols of `object`.
5987
6015
  *
5988
6016
  * @private
5989
6017
  * @param {Object} object The object to query.
@@ -5992,8 +6020,7 @@
5992
6020
  var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
5993
6021
 
5994
6022
  /**
5995
- * Creates an array of the own and inherited enumerable symbol properties
5996
- * of `object`.
6023
+ * Creates an array of the own and inherited enumerable symbols of `object`.
5997
6024
  *
5998
6025
  * @private
5999
6026
  * @param {Object} object The object to query.
@@ -6091,7 +6118,7 @@
6091
6118
  * @returns {boolean} Returns `true` if `path` exists, else `false`.
6092
6119
  */
6093
6120
  function hasPath(object, path, hasFunc) {
6094
- path = isKey(path, object) ? [path] : castPath(path);
6121
+ path = castPath(path, object);
6095
6122
 
6096
6123
  var index = -1,
6097
6124
  length = path.length,
@@ -6425,22 +6452,22 @@
6425
6452
  var bitmask = data[1],
6426
6453
  srcBitmask = source[1],
6427
6454
  newBitmask = bitmask | srcBitmask,
6428
- isCommon = newBitmask < (BIND_FLAG | BIND_KEY_FLAG | ARY_FLAG);
6455
+ isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
6429
6456
 
6430
6457
  var isCombo =
6431
- ((srcBitmask == ARY_FLAG) && (bitmask == CURRY_FLAG)) ||
6432
- ((srcBitmask == ARY_FLAG) && (bitmask == REARG_FLAG) && (data[7].length <= source[8])) ||
6433
- ((srcBitmask == (ARY_FLAG | REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == CURRY_FLAG));
6458
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
6459
+ ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
6460
+ ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
6434
6461
 
6435
6462
  // Exit early if metadata can't be merged.
6436
6463
  if (!(isCommon || isCombo)) {
6437
6464
  return data;
6438
6465
  }
6439
6466
  // Use source `thisArg` if available.
6440
- if (srcBitmask & BIND_FLAG) {
6467
+ if (srcBitmask & WRAP_BIND_FLAG) {
6441
6468
  data[2] = source[2];
6442
6469
  // Set when currying a bound function.
6443
- newBitmask |= bitmask & BIND_FLAG ? 0 : CURRY_BOUND_FLAG;
6470
+ newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
6444
6471
  }
6445
6472
  // Compose partial arguments.
6446
6473
  var value = source[3];
@@ -6462,7 +6489,7 @@
6462
6489
  data[7] = value;
6463
6490
  }
6464
6491
  // Use source `ary` if it's smaller.
6465
- if (srcBitmask & ARY_FLAG) {
6492
+ if (srcBitmask & WRAP_ARY_FLAG) {
6466
6493
  data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
6467
6494
  }
6468
6495
  // Use source `arity` if one is not provided.
@@ -6568,7 +6595,7 @@
6568
6595
  * @returns {*} Returns the parent value.
6569
6596
  */
6570
6597
  function parent(object, path) {
6571
- return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
6598
+ return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
6572
6599
  }
6573
6600
 
6574
6601
  /**
@@ -6708,8 +6735,6 @@
6708
6735
  * @returns {Array} Returns the property path array.
6709
6736
  */
6710
6737
  var stringToPath = memoizeCapped(function(string) {
6711
- string = toString(string);
6712
-
6713
6738
  var result = [];
6714
6739
  if (reLeadingDot.test(string)) {
6715
6740
  result.push('');
@@ -8779,7 +8804,7 @@
8779
8804
  * @memberOf _
8780
8805
  * @since 1.0.0
8781
8806
  * @category Seq
8782
- * @param {...(string|string[])} [paths] The property paths of elements to pick.
8807
+ * @param {...(string|string[])} [paths] The property paths to pick.
8783
8808
  * @returns {Object} Returns the new `lodash` wrapper instance.
8784
8809
  * @example
8785
8810
  *
@@ -9444,12 +9469,10 @@
9444
9469
  var invokeMap = baseRest(function(collection, path, args) {
9445
9470
  var index = -1,
9446
9471
  isFunc = typeof path == 'function',
9447
- isProp = isKey(path),
9448
9472
  result = isArrayLike(collection) ? Array(collection.length) : [];
9449
9473
 
9450
9474
  baseEach(collection, function(value) {
9451
- var func = isFunc ? path : ((isProp && value != null) ? value[path] : undefined);
9452
- result[++index] = func ? apply(func, value, args) : baseInvoke(value, path, args);
9475
+ result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
9453
9476
  });
9454
9477
  return result;
9455
9478
  });
@@ -9998,7 +10021,7 @@
9998
10021
  function ary(func, n, guard) {
9999
10022
  n = guard ? undefined : n;
10000
10023
  n = (func && n == null) ? func.length : n;
10001
- return createWrap(func, ARY_FLAG, undefined, undefined, undefined, undefined, n);
10024
+ return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
10002
10025
  }
10003
10026
 
10004
10027
  /**
@@ -10071,10 +10094,10 @@
10071
10094
  * // => 'hi fred!'
10072
10095
  */
10073
10096
  var bind = baseRest(function(func, thisArg, partials) {
10074
- var bitmask = BIND_FLAG;
10097
+ var bitmask = WRAP_BIND_FLAG;
10075
10098
  if (partials.length) {
10076
10099
  var holders = replaceHolders(partials, getHolder(bind));
10077
- bitmask |= PARTIAL_FLAG;
10100
+ bitmask |= WRAP_PARTIAL_FLAG;
10078
10101
  }
10079
10102
  return createWrap(func, bitmask, thisArg, partials, holders);
10080
10103
  });
@@ -10125,10 +10148,10 @@
10125
10148
  * // => 'hiya fred!'
10126
10149
  */
10127
10150
  var bindKey = baseRest(function(object, key, partials) {
10128
- var bitmask = BIND_FLAG | BIND_KEY_FLAG;
10151
+ var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
10129
10152
  if (partials.length) {
10130
10153
  var holders = replaceHolders(partials, getHolder(bindKey));
10131
- bitmask |= PARTIAL_FLAG;
10154
+ bitmask |= WRAP_PARTIAL_FLAG;
10132
10155
  }
10133
10156
  return createWrap(key, bitmask, object, partials, holders);
10134
10157
  });
@@ -10176,7 +10199,7 @@
10176
10199
  */
10177
10200
  function curry(func, arity, guard) {
10178
10201
  arity = guard ? undefined : arity;
10179
- var result = createWrap(func, CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
10202
+ var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
10180
10203
  result.placeholder = curry.placeholder;
10181
10204
  return result;
10182
10205
  }
@@ -10221,7 +10244,7 @@
10221
10244
  */
10222
10245
  function curryRight(func, arity, guard) {
10223
10246
  arity = guard ? undefined : arity;
10224
- var result = createWrap(func, CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
10247
+ var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
10225
10248
  result.placeholder = curryRight.placeholder;
10226
10249
  return result;
10227
10250
  }
@@ -10466,7 +10489,7 @@
10466
10489
  * // => ['d', 'c', 'b', 'a']
10467
10490
  */
10468
10491
  function flip(func) {
10469
- return createWrap(func, FLIP_FLAG);
10492
+ return createWrap(func, WRAP_FLIP_FLAG);
10470
10493
  }
10471
10494
 
10472
10495
  /**
@@ -10677,7 +10700,7 @@
10677
10700
  */
10678
10701
  var partial = baseRest(function(func, partials) {
10679
10702
  var holders = replaceHolders(partials, getHolder(partial));
10680
- return createWrap(func, PARTIAL_FLAG, undefined, partials, holders);
10703
+ return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
10681
10704
  });
10682
10705
 
10683
10706
  /**
@@ -10714,7 +10737,7 @@
10714
10737
  */
10715
10738
  var partialRight = baseRest(function(func, partials) {
10716
10739
  var holders = replaceHolders(partials, getHolder(partialRight));
10717
- return createWrap(func, PARTIAL_RIGHT_FLAG, undefined, partials, holders);
10740
+ return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
10718
10741
  });
10719
10742
 
10720
10743
  /**
@@ -10740,7 +10763,7 @@
10740
10763
  * // => ['a', 'b', 'c']
10741
10764
  */
10742
10765
  var rearg = flatRest(function(func, indexes) {
10743
- return createWrap(func, REARG_FLAG, undefined, undefined, undefined, indexes);
10766
+ return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
10744
10767
  });
10745
10768
 
10746
10769
  /**
@@ -11003,7 +11026,7 @@
11003
11026
  * // => true
11004
11027
  */
11005
11028
  function clone(value) {
11006
- return baseClone(value, false, true);
11029
+ return baseClone(value, CLONE_SYMBOLS_FLAG);
11007
11030
  }
11008
11031
 
11009
11032
  /**
@@ -11039,7 +11062,7 @@
11039
11062
  */
11040
11063
  function cloneWith(value, customizer) {
11041
11064
  customizer = typeof customizer == 'function' ? customizer : undefined;
11042
- return baseClone(value, false, true, customizer);
11065
+ return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
11043
11066
  }
11044
11067
 
11045
11068
  /**
@@ -11061,7 +11084,7 @@
11061
11084
  * // => false
11062
11085
  */
11063
11086
  function cloneDeep(value) {
11064
- return baseClone(value, true, true);
11087
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
11065
11088
  }
11066
11089
 
11067
11090
  /**
@@ -11094,7 +11117,7 @@
11094
11117
  */
11095
11118
  function cloneDeepWith(value, customizer) {
11096
11119
  customizer = typeof customizer == 'function' ? customizer : undefined;
11097
- return baseClone(value, true, true, customizer);
11120
+ return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
11098
11121
  }
11099
11122
 
11100
11123
  /**
@@ -11543,7 +11566,7 @@
11543
11566
  function isEqualWith(value, other, customizer) {
11544
11567
  customizer = typeof customizer == 'function' ? customizer : undefined;
11545
11568
  var result = customizer ? customizer(value, other) : undefined;
11546
- return result === undefined ? baseIsEqual(value, other, customizer) : !!result;
11569
+ return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
11547
11570
  }
11548
11571
 
11549
11572
  /**
@@ -12686,7 +12709,7 @@
12686
12709
  * @since 1.0.0
12687
12710
  * @category Object
12688
12711
  * @param {Object} object The object to iterate over.
12689
- * @param {...(string|string[])} [paths] The property paths of elements to pick.
12712
+ * @param {...(string|string[])} [paths] The property paths to pick.
12690
12713
  * @returns {Array} Returns the picked values.
12691
12714
  * @example
12692
12715
  *
@@ -13413,15 +13436,16 @@
13413
13436
 
13414
13437
  /**
13415
13438
  * The opposite of `_.pick`; this method creates an object composed of the
13416
- * own and inherited enumerable string keyed properties of `object` that are
13417
- * not omitted.
13439
+ * own and inherited enumerable property paths of `object` that are not omitted.
13440
+ *
13441
+ * **Note:** This method is considerably slower than `_.pick`.
13418
13442
  *
13419
13443
  * @static
13420
13444
  * @since 0.1.0
13421
13445
  * @memberOf _
13422
13446
  * @category Object
13423
13447
  * @param {Object} object The source object.
13424
- * @param {...(string|string[])} [props] The property identifiers to omit.
13448
+ * @param {...(string|string[])} [paths] The property paths to omit.
13425
13449
  * @returns {Object} Returns the new object.
13426
13450
  * @example
13427
13451
  *
@@ -13430,12 +13454,26 @@
13430
13454
  * _.omit(object, ['a', 'c']);
13431
13455
  * // => { 'b': '2' }
13432
13456
  */
13433
- var omit = flatRest(function(object, props) {
13457
+ var omit = flatRest(function(object, paths) {
13458
+ var result = {};
13434
13459
  if (object == null) {
13435
- return {};
13460
+ return result;
13461
+ }
13462
+ var isDeep = false;
13463
+ paths = arrayMap(paths, function(path) {
13464
+ path = castPath(path, object);
13465
+ isDeep || (isDeep = path.length > 1);
13466
+ return path;
13467
+ });
13468
+ copyObject(object, getAllKeysIn(object), result);
13469
+ if (isDeep) {
13470
+ result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG);
13471
+ }
13472
+ var length = paths.length;
13473
+ while (length--) {
13474
+ baseUnset(result, paths[length]);
13436
13475
  }
13437
- props = arrayMap(props, toKey);
13438
- return basePick(object, baseDifference(getAllKeysIn(object), props));
13476
+ return result;
13439
13477
  });
13440
13478
 
13441
13479
  /**
@@ -13470,7 +13508,7 @@
13470
13508
  * @memberOf _
13471
13509
  * @category Object
13472
13510
  * @param {Object} object The source object.
13473
- * @param {...(string|string[])} [props] The property identifiers to pick.
13511
+ * @param {...(string|string[])} [paths] The property paths to pick.
13474
13512
  * @returns {Object} Returns the new object.
13475
13513
  * @example
13476
13514
  *
@@ -13479,8 +13517,8 @@
13479
13517
  * _.pick(object, ['a', 'c']);
13480
13518
  * // => { 'a': 1, 'c': 3 }
13481
13519
  */
13482
- var pick = flatRest(function(object, props) {
13483
- return object == null ? {} : basePick(object, arrayMap(props, toKey));
13520
+ var pick = flatRest(function(object, paths) {
13521
+ return object == null ? {} : basePick(object, paths);
13484
13522
  });
13485
13523
 
13486
13524
  /**
@@ -13502,7 +13540,16 @@
13502
13540
  * // => { 'a': 1, 'c': 3 }
13503
13541
  */
13504
13542
  function pickBy(object, predicate) {
13505
- return object == null ? {} : basePickBy(object, getAllKeysIn(object), getIteratee(predicate));
13543
+ if (object == null) {
13544
+ return {};
13545
+ }
13546
+ var props = arrayMap(getAllKeysIn(object), function(prop) {
13547
+ return [prop];
13548
+ });
13549
+ predicate = getIteratee(predicate);
13550
+ return basePickBy(object, props, function(value, path) {
13551
+ return predicate(value, path[0]);
13552
+ });
13506
13553
  }
13507
13554
 
13508
13555
  /**
@@ -13535,15 +13582,15 @@
13535
13582
  * // => 'default'
13536
13583
  */
13537
13584
  function result(object, path, defaultValue) {
13538
- path = isKey(path, object) ? [path] : castPath(path);
13585
+ path = castPath(path, object);
13539
13586
 
13540
13587
  var index = -1,
13541
13588
  length = path.length;
13542
13589
 
13543
13590
  // Ensure the loop is entered when path is empty.
13544
13591
  if (!length) {
13545
- object = undefined;
13546
13592
  length = 1;
13593
+ object = undefined;
13547
13594
  }
13548
13595
  while (++index < length) {
13549
13596
  var value = object == null ? undefined : object[toKey(path[index])];
@@ -15273,7 +15320,7 @@
15273
15320
  * // => [{ 'a': 1, 'b': 2 }]
15274
15321
  */
15275
15322
  function conforms(source) {
15276
- return baseConforms(baseClone(source, true));
15323
+ return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
15277
15324
  }
15278
15325
 
15279
15326
  /**
@@ -15435,7 +15482,7 @@
15435
15482
  * // => ['def']
15436
15483
  */
15437
15484
  function iteratee(func) {
15438
- return baseIteratee(typeof func == 'function' ? func : baseClone(func, true));
15485
+ return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
15439
15486
  }
15440
15487
 
15441
15488
  /**
@@ -15467,7 +15514,7 @@
15467
15514
  * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
15468
15515
  */
15469
15516
  function matches(source) {
15470
- return baseMatches(baseClone(source, true));
15517
+ return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
15471
15518
  }
15472
15519
 
15473
15520
  /**
@@ -15497,7 +15544,7 @@
15497
15544
  * // => { 'a': 4, 'b': 5, 'c': 6 }
15498
15545
  */
15499
15546
  function matchesProperty(path, srcValue) {
15500
- return baseMatchesProperty(path, baseClone(srcValue, true));
15547
+ return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
15501
15548
  }
15502
15549
 
15503
15550
  /**
@@ -16053,7 +16100,7 @@
16053
16100
  if (isArray(value)) {
16054
16101
  return arrayMap(value, toKey);
16055
16102
  }
16056
- return isSymbol(value) ? [value] : copyArray(stringToPath(value));
16103
+ return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
16057
16104
  }
16058
16105
 
16059
16106
  /**
@@ -16957,7 +17004,7 @@
16957
17004
  }
16958
17005
  });
16959
17006
 
16960
- realNames[createHybrid(undefined, BIND_KEY_FLAG).name] = [{
17007
+ realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
16961
17008
  'name': 'wrapper',
16962
17009
  'func': undefined
16963
17010
  }];