|
|
|
|
@@ -1,5 +1,5 @@
|
|
|
|
|
/**
|
|
|
|
|
* lodash 4.4.2 (Custom Build) <https://lodash.com/>
|
|
|
|
|
* lodash (Custom Build) <https://lodash.com/>
|
|
|
|
|
* Build: `lodash modularize exports="npm" -o ./`
|
|
|
|
|
* Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
|
|
|
|
* Released under MIT license <https://lodash.com/license>
|
|
|
|
|
@@ -16,7 +16,8 @@ var MAX_SAFE_INTEGER = 9007199254740991;
|
|
|
|
|
|
|
|
|
|
/** `Object#toString` result references. */
|
|
|
|
|
var funcTag = '[object Function]',
|
|
|
|
|
genTag = '[object GeneratorFunction]';
|
|
|
|
|
genTag = '[object GeneratorFunction]',
|
|
|
|
|
symbolTag = '[object Symbol]';
|
|
|
|
|
|
|
|
|
|
/** Used to detect unsigned integer values. */
|
|
|
|
|
var reIsUint = /^(?:0|[1-9]\d*)$/;
|
|
|
|
|
@@ -66,7 +67,7 @@ function baseSortBy(array, comparer) {
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {Function} func The function to cap arguments for.
|
|
|
|
|
* @returns {Function} Returns the new function.
|
|
|
|
|
* @returns {Function} Returns the new capped function.
|
|
|
|
|
*/
|
|
|
|
|
function baseUnary(func) {
|
|
|
|
|
return function(value) {
|
|
|
|
|
@@ -74,93 +75,6 @@ function baseUnary(func) {
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Compares values to sort them in ascending order.
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {*} value The value to compare.
|
|
|
|
|
* @param {*} other The other value to compare.
|
|
|
|
|
* @returns {number} Returns the sort order indicator for `value`.
|
|
|
|
|
*/
|
|
|
|
|
function compareAscending(value, other) {
|
|
|
|
|
if (value !== other) {
|
|
|
|
|
var valIsNull = value === null,
|
|
|
|
|
valIsUndef = value === undefined,
|
|
|
|
|
valIsReflexive = value === value;
|
|
|
|
|
|
|
|
|
|
var othIsNull = other === null,
|
|
|
|
|
othIsUndef = other === undefined,
|
|
|
|
|
othIsReflexive = other === other;
|
|
|
|
|
|
|
|
|
|
if ((value > other && !othIsNull) || !valIsReflexive ||
|
|
|
|
|
(valIsNull && !othIsUndef && othIsReflexive) ||
|
|
|
|
|
(valIsUndef && othIsReflexive)) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
if ((value < other && !valIsNull) || !othIsReflexive ||
|
|
|
|
|
(othIsNull && !valIsUndef && valIsReflexive) ||
|
|
|
|
|
(othIsUndef && valIsReflexive)) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Used by `_.orderBy` to compare multiple properties of a value to another
|
|
|
|
|
* and stable sort them.
|
|
|
|
|
*
|
|
|
|
|
* If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
|
|
|
|
|
* specify an order of "desc" for descending or "asc" for ascending sort order
|
|
|
|
|
* of corresponding values.
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {Object} object The object to compare.
|
|
|
|
|
* @param {Object} other The other object to compare.
|
|
|
|
|
* @param {boolean[]|string[]} orders The order to sort by for each property.
|
|
|
|
|
* @returns {number} Returns the sort order indicator for `object`.
|
|
|
|
|
*/
|
|
|
|
|
function compareMultiple(object, other, orders) {
|
|
|
|
|
var index = -1,
|
|
|
|
|
objCriteria = object.criteria,
|
|
|
|
|
othCriteria = other.criteria,
|
|
|
|
|
length = objCriteria.length,
|
|
|
|
|
ordersLength = orders.length;
|
|
|
|
|
|
|
|
|
|
while (++index < length) {
|
|
|
|
|
var result = compareAscending(objCriteria[index], othCriteria[index]);
|
|
|
|
|
if (result) {
|
|
|
|
|
if (index >= ordersLength) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
var order = orders[index];
|
|
|
|
|
return result * (order == 'desc' ? -1 : 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
|
|
|
|
|
// that causes it, under certain circumstances, to provide the same value for
|
|
|
|
|
// `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
|
|
|
|
|
// for more details.
|
|
|
|
|
//
|
|
|
|
|
// This also ensures a stable sort in V8 and other engines.
|
|
|
|
|
// See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
|
|
|
|
|
return object.index - other.index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if `value` is a valid array-like index.
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {*} value The value to check.
|
|
|
|
|
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
|
|
|
|
|
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
|
|
|
|
|
*/
|
|
|
|
|
function isIndex(value, length) {
|
|
|
|
|
value = (typeof value == 'number' || reIsUint.test(value)) ? +value : -1;
|
|
|
|
|
length = length == null ? MAX_SAFE_INTEGER : length;
|
|
|
|
|
return value > -1 && value % 1 == 0 && value < length;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/** Used for built-in method references. */
|
|
|
|
|
var objectProto = Object.prototype;
|
|
|
|
|
|
|
|
|
|
@@ -219,7 +133,7 @@ function baseOrderBy(collection, iteratees, orders) {
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {string} key The key of the property to get.
|
|
|
|
|
* @returns {Function} Returns the new function.
|
|
|
|
|
* @returns {Function} Returns the new accessor function.
|
|
|
|
|
*/
|
|
|
|
|
function baseProperty(key) {
|
|
|
|
|
return function(object) {
|
|
|
|
|
@@ -227,6 +141,85 @@ function baseProperty(key) {
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Compares values to sort them in ascending order.
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {*} value The value to compare.
|
|
|
|
|
* @param {*} other The other value to compare.
|
|
|
|
|
* @returns {number} Returns the sort order indicator for `value`.
|
|
|
|
|
*/
|
|
|
|
|
function compareAscending(value, other) {
|
|
|
|
|
if (value !== other) {
|
|
|
|
|
var valIsDefined = value !== undefined,
|
|
|
|
|
valIsNull = value === null,
|
|
|
|
|
valIsReflexive = value === value,
|
|
|
|
|
valIsSymbol = isSymbol(value);
|
|
|
|
|
|
|
|
|
|
var othIsDefined = other !== undefined,
|
|
|
|
|
othIsNull = other === null,
|
|
|
|
|
othIsReflexive = other === other,
|
|
|
|
|
othIsSymbol = isSymbol(other);
|
|
|
|
|
|
|
|
|
|
if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
|
|
|
|
|
(valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
|
|
|
|
|
(valIsNull && othIsDefined && othIsReflexive) ||
|
|
|
|
|
(!valIsDefined && othIsReflexive) ||
|
|
|
|
|
!valIsReflexive) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
|
|
|
|
|
(othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
|
|
|
|
|
(othIsNull && valIsDefined && valIsReflexive) ||
|
|
|
|
|
(!othIsDefined && valIsReflexive) ||
|
|
|
|
|
!othIsReflexive) {
|
|
|
|
|
return -1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Used by `_.orderBy` to compare multiple properties of a value to another
|
|
|
|
|
* and stable sort them.
|
|
|
|
|
*
|
|
|
|
|
* If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
|
|
|
|
|
* specify an order of "desc" for descending or "asc" for ascending sort order
|
|
|
|
|
* of corresponding values.
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {Object} object The object to compare.
|
|
|
|
|
* @param {Object} other The other object to compare.
|
|
|
|
|
* @param {boolean[]|string[]} orders The order to sort by for each property.
|
|
|
|
|
* @returns {number} Returns the sort order indicator for `object`.
|
|
|
|
|
*/
|
|
|
|
|
function compareMultiple(object, other, orders) {
|
|
|
|
|
var index = -1,
|
|
|
|
|
objCriteria = object.criteria,
|
|
|
|
|
othCriteria = other.criteria,
|
|
|
|
|
length = objCriteria.length,
|
|
|
|
|
ordersLength = orders.length;
|
|
|
|
|
|
|
|
|
|
while (++index < length) {
|
|
|
|
|
var result = compareAscending(objCriteria[index], othCriteria[index]);
|
|
|
|
|
if (result) {
|
|
|
|
|
if (index >= ordersLength) {
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
var order = orders[index];
|
|
|
|
|
return result * (order == 'desc' ? -1 : 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
|
|
|
|
|
// that causes it, under certain circumstances, to provide the same value for
|
|
|
|
|
// `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
|
|
|
|
|
// for more details.
|
|
|
|
|
//
|
|
|
|
|
// This also ensures a stable sort in V8 and other engines.
|
|
|
|
|
// See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
|
|
|
|
|
return object.index - other.index;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Gets the "length" property value of `object`.
|
|
|
|
|
*
|
|
|
|
|
@@ -252,6 +245,21 @@ function isFlattenableIteratee(value) {
|
|
|
|
|
return isArray(value) && !(value.length == 2 && !isFunction(value[0]));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if `value` is a valid array-like index.
|
|
|
|
|
*
|
|
|
|
|
* @private
|
|
|
|
|
* @param {*} value The value to check.
|
|
|
|
|
* @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
|
|
|
|
|
* @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
|
|
|
|
|
*/
|
|
|
|
|
function isIndex(value, length) {
|
|
|
|
|
length = length == null ? MAX_SAFE_INTEGER : length;
|
|
|
|
|
return !!length &&
|
|
|
|
|
(typeof value == 'number' || reIsUint.test(value)) &&
|
|
|
|
|
(value > -1 && value % 1 == 0 && value < length);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if the given arguments are from an iteratee call.
|
|
|
|
|
*
|
|
|
|
|
@@ -507,6 +515,57 @@ function isObject(value) {
|
|
|
|
|
return !!value && (type == 'object' || type == 'function');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if `value` is object-like. A value is object-like if it's not `null`
|
|
|
|
|
* and has a `typeof` result of "object".
|
|
|
|
|
*
|
|
|
|
|
* @static
|
|
|
|
|
* @memberOf _
|
|
|
|
|
* @since 4.0.0
|
|
|
|
|
* @category Lang
|
|
|
|
|
* @param {*} value The value to check.
|
|
|
|
|
* @returns {boolean} Returns `true` if `value` is object-like, else `false`.
|
|
|
|
|
* @example
|
|
|
|
|
*
|
|
|
|
|
* _.isObjectLike({});
|
|
|
|
|
* // => true
|
|
|
|
|
*
|
|
|
|
|
* _.isObjectLike([1, 2, 3]);
|
|
|
|
|
* // => true
|
|
|
|
|
*
|
|
|
|
|
* _.isObjectLike(_.noop);
|
|
|
|
|
* // => false
|
|
|
|
|
*
|
|
|
|
|
* _.isObjectLike(null);
|
|
|
|
|
* // => false
|
|
|
|
|
*/
|
|
|
|
|
function isObjectLike(value) {
|
|
|
|
|
return !!value && typeof value == 'object';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Checks if `value` is classified as a `Symbol` primitive or object.
|
|
|
|
|
*
|
|
|
|
|
* @static
|
|
|
|
|
* @memberOf _
|
|
|
|
|
* @since 4.0.0
|
|
|
|
|
* @category Lang
|
|
|
|
|
* @param {*} value The value to check.
|
|
|
|
|
* @returns {boolean} Returns `true` if `value` is correctly classified,
|
|
|
|
|
* else `false`.
|
|
|
|
|
* @example
|
|
|
|
|
*
|
|
|
|
|
* _.isSymbol(Symbol.iterator);
|
|
|
|
|
* // => true
|
|
|
|
|
*
|
|
|
|
|
* _.isSymbol('abc');
|
|
|
|
|
* // => false
|
|
|
|
|
*/
|
|
|
|
|
function isSymbol(value) {
|
|
|
|
|
return typeof value == 'symbol' ||
|
|
|
|
|
(isObjectLike(value) && objectToString.call(value) == symbolTag);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* This method returns the first argument given to it.
|
|
|
|
|
*
|
|
|
|
|
|