lodash-rails 4.16.6 → 4.17.2

Sign up to get free protection for your applications and to get access to all the features.
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
  }];