mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-01-29 14:37:49 +00:00
Compare commits
24 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
94ac73824f | ||
|
|
28663c1e27 | ||
|
|
cbf5cb1162 | ||
|
|
6d4f76888f | ||
|
|
51ed7e7707 | ||
|
|
6b3e0da93c | ||
|
|
35cdf6513b | ||
|
|
07c844053e | ||
|
|
35805ec250 | ||
|
|
692aabae13 | ||
|
|
764eccfdc0 | ||
|
|
f10bb8b80b | ||
|
|
b7e3b3febd | ||
|
|
e8cff1ef54 | ||
|
|
723c02dbfa | ||
|
|
ce0b51888c | ||
|
|
a83b4ebd53 | ||
|
|
7da4c55415 | ||
|
|
9055c4e483 | ||
|
|
2b1eb3f480 | ||
|
|
94ba2e24e8 | ||
|
|
8bff780a94 | ||
|
|
f18e5950b9 | ||
|
|
365d103439 |
29
LICENSE
29
LICENSE
@@ -1,7 +1,17 @@
|
||||
Copyright 2012-2016 The Dojo Foundation <http://dojofoundation.org/>
|
||||
Based on Underscore.js, copyright 2009-2016 Jeremy Ashkenas,
|
||||
Copyright jQuery Foundation and other contributors <https://jquery.org/>
|
||||
|
||||
Based on Underscore.js, copyright Jeremy Ashkenas,
|
||||
DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals. For exact contribution history, see the revision history
|
||||
available at https://github.com/lodash/lodash
|
||||
|
||||
The following license applies to all parts of this software except as
|
||||
documented below:
|
||||
|
||||
====
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
@@ -20,3 +30,18 @@ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
====
|
||||
|
||||
Copyright and related rights for sample code are waived via CC0. Sample
|
||||
code is defined as all source code displayed within the prose of the
|
||||
documentation.
|
||||
|
||||
CC0: http://creativecommons.org/publicdomain/zero/1.0/
|
||||
|
||||
====
|
||||
|
||||
Files located in the node_modules and vendor directories are externally
|
||||
maintained libraries used by this software which have their own
|
||||
licenses; we recommend you read them, as their terms may differ from the
|
||||
terms above.
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
# lodash-es v4.1.0
|
||||
# lodash-es v4.16.0
|
||||
|
||||
The [lodash](https://lodash.com/) library exported as [ES](http://www.ecma-international.org/ecma-262/6.0/) modules.
|
||||
The [Lodash](https://lodash.com/) library exported as [ES](http://www.ecma-international.org/ecma-262/6.0/) modules.
|
||||
|
||||
Generated using [lodash-cli](https://www.npmjs.com/package/lodash-cli):
|
||||
```bash
|
||||
```shell
|
||||
$ lodash modularize exports=es -o ./
|
||||
```
|
||||
|
||||
See the [package source](https://github.com/lodash/lodash/tree/4.1.0-es) for more details.
|
||||
See the [package source](https://github.com/lodash/lodash/tree/4.16.0-es) for more details.
|
||||
|
||||
7
_DataView.js
Normal file
7
_DataView.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import getNative from './_getNative.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var DataView = getNative(root, 'DataView');
|
||||
|
||||
export default DataView;
|
||||
33
_Hash.js
33
_Hash.js
@@ -1,17 +1,32 @@
|
||||
import nativeCreate from './_nativeCreate';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
import hashClear from './_hashClear.js';
|
||||
import hashDelete from './_hashDelete.js';
|
||||
import hashGet from './_hashGet.js';
|
||||
import hashHas from './_hashHas.js';
|
||||
import hashSet from './_hashSet.js';
|
||||
|
||||
/**
|
||||
* Creates an hash object.
|
||||
* Creates a hash object.
|
||||
*
|
||||
* @private
|
||||
* @returns {Object} Returns the new hash object.
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function Hash() {}
|
||||
function Hash(entries) {
|
||||
var index = -1,
|
||||
length = entries ? entries.length : 0;
|
||||
|
||||
// Avoid inheriting from `Object.prototype` when possible.
|
||||
Hash.prototype = nativeCreate ? nativeCreate(null) : objectProto;
|
||||
this.clear();
|
||||
while (++index < length) {
|
||||
var entry = entries[index];
|
||||
this.set(entry[0], entry[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add methods to `Hash`.
|
||||
Hash.prototype.clear = hashClear;
|
||||
Hash.prototype['delete'] = hashDelete;
|
||||
Hash.prototype.get = hashGet;
|
||||
Hash.prototype.has = hashHas;
|
||||
Hash.prototype.set = hashSet;
|
||||
|
||||
export default Hash;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import baseCreate from './_baseCreate';
|
||||
import baseLodash from './_baseLodash';
|
||||
import baseCreate from './_baseCreate.js';
|
||||
import baseLodash from './_baseLodash.js';
|
||||
|
||||
/** Used as references for the maximum length and index of an array. */
|
||||
var MAX_ARRAY_LENGTH = 4294967295;
|
||||
@@ -8,6 +8,7 @@ var MAX_ARRAY_LENGTH = 4294967295;
|
||||
* Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {*} value The value to wrap.
|
||||
*/
|
||||
function LazyWrapper(value) {
|
||||
@@ -20,6 +21,7 @@ function LazyWrapper(value) {
|
||||
this.__views__ = [];
|
||||
}
|
||||
|
||||
// Ensure `LazyWrapper` is an instance of `baseLodash`.
|
||||
LazyWrapper.prototype = baseCreate(baseLodash.prototype);
|
||||
LazyWrapper.prototype.constructor = LazyWrapper;
|
||||
|
||||
|
||||
32
_ListCache.js
Normal file
32
_ListCache.js
Normal file
@@ -0,0 +1,32 @@
|
||||
import listCacheClear from './_listCacheClear.js';
|
||||
import listCacheDelete from './_listCacheDelete.js';
|
||||
import listCacheGet from './_listCacheGet.js';
|
||||
import listCacheHas from './_listCacheHas.js';
|
||||
import listCacheSet from './_listCacheSet.js';
|
||||
|
||||
/**
|
||||
* Creates an list cache object.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function ListCache(entries) {
|
||||
var index = -1,
|
||||
length = entries ? entries.length : 0;
|
||||
|
||||
this.clear();
|
||||
while (++index < length) {
|
||||
var entry = entries[index];
|
||||
this.set(entry[0], entry[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add methods to `ListCache`.
|
||||
ListCache.prototype.clear = listCacheClear;
|
||||
ListCache.prototype['delete'] = listCacheDelete;
|
||||
ListCache.prototype.get = listCacheGet;
|
||||
ListCache.prototype.has = listCacheHas;
|
||||
ListCache.prototype.set = listCacheSet;
|
||||
|
||||
export default ListCache;
|
||||
@@ -1,12 +1,12 @@
|
||||
import baseCreate from './_baseCreate';
|
||||
import baseLodash from './_baseLodash';
|
||||
import baseCreate from './_baseCreate.js';
|
||||
import baseLodash from './_baseLodash.js';
|
||||
|
||||
/**
|
||||
* The base constructor for creating `lodash` wrapper objects.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to wrap.
|
||||
* @param {boolean} [chainAll] Enable chaining for all wrapper methods.
|
||||
* @param {boolean} [chainAll] Enable explicit method chain sequences.
|
||||
*/
|
||||
function LodashWrapper(value, chainAll) {
|
||||
this.__wrapped__ = value;
|
||||
|
||||
4
_Map.js
4
_Map.js
@@ -1,5 +1,5 @@
|
||||
import getNative from './_getNative';
|
||||
import root from './_root';
|
||||
import getNative from './_getNative.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var Map = getNative(root, 'Map');
|
||||
|
||||
31
_MapCache.js
31
_MapCache.js
@@ -1,31 +1,32 @@
|
||||
import mapClear from './_mapClear';
|
||||
import mapDelete from './_mapDelete';
|
||||
import mapGet from './_mapGet';
|
||||
import mapHas from './_mapHas';
|
||||
import mapSet from './_mapSet';
|
||||
import mapCacheClear from './_mapCacheClear.js';
|
||||
import mapCacheDelete from './_mapCacheDelete.js';
|
||||
import mapCacheGet from './_mapCacheGet.js';
|
||||
import mapCacheHas from './_mapCacheHas.js';
|
||||
import mapCacheSet from './_mapCacheSet.js';
|
||||
|
||||
/**
|
||||
* Creates a map cache object to store key-value pairs.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [values] The values to cache.
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function MapCache(values) {
|
||||
function MapCache(entries) {
|
||||
var index = -1,
|
||||
length = values ? values.length : 0;
|
||||
length = entries ? entries.length : 0;
|
||||
|
||||
this.clear();
|
||||
while (++index < length) {
|
||||
var entry = values[index];
|
||||
var entry = entries[index];
|
||||
this.set(entry[0], entry[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add functions to the `MapCache`.
|
||||
MapCache.prototype.clear = mapClear;
|
||||
MapCache.prototype['delete'] = mapDelete;
|
||||
MapCache.prototype.get = mapGet;
|
||||
MapCache.prototype.has = mapHas;
|
||||
MapCache.prototype.set = mapSet;
|
||||
// Add methods to `MapCache`.
|
||||
MapCache.prototype.clear = mapCacheClear;
|
||||
MapCache.prototype['delete'] = mapCacheDelete;
|
||||
MapCache.prototype.get = mapCacheGet;
|
||||
MapCache.prototype.has = mapCacheHas;
|
||||
MapCache.prototype.set = mapCacheSet;
|
||||
|
||||
export default MapCache;
|
||||
|
||||
7
_Promise.js
Normal file
7
_Promise.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import getNative from './_getNative.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var Promise = getNative(root, 'Promise');
|
||||
|
||||
export default Promise;
|
||||
@@ -1,6 +0,0 @@
|
||||
import root from './_root';
|
||||
|
||||
/** Built-in value references. */
|
||||
var Reflect = root.Reflect;
|
||||
|
||||
export default Reflect;
|
||||
4
_Set.js
4
_Set.js
@@ -1,5 +1,5 @@
|
||||
import getNative from './_getNative';
|
||||
import root from './_root';
|
||||
import getNative from './_getNative.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var Set = getNative(root, 'Set');
|
||||
|
||||
15
_SetCache.js
15
_SetCache.js
@@ -1,11 +1,13 @@
|
||||
import MapCache from './_MapCache';
|
||||
import cachePush from './_cachePush';
|
||||
import MapCache from './_MapCache.js';
|
||||
import setCacheAdd from './_setCacheAdd.js';
|
||||
import setCacheHas from './_setCacheHas.js';
|
||||
|
||||
/**
|
||||
*
|
||||
* Creates a set cache object to store unique values.
|
||||
* Creates an array cache object to store unique values.
|
||||
*
|
||||
* @private
|
||||
* @constructor
|
||||
* @param {Array} [values] The values to cache.
|
||||
*/
|
||||
function SetCache(values) {
|
||||
@@ -14,11 +16,12 @@ function SetCache(values) {
|
||||
|
||||
this.__data__ = new MapCache;
|
||||
while (++index < length) {
|
||||
this.push(values[index]);
|
||||
this.add(values[index]);
|
||||
}
|
||||
}
|
||||
|
||||
// Add functions to the `SetCache`.
|
||||
SetCache.prototype.push = cachePush;
|
||||
// Add methods to `SetCache`.
|
||||
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
|
||||
SetCache.prototype.has = setCacheHas;
|
||||
|
||||
export default SetCache;
|
||||
|
||||
28
_Stack.js
28
_Stack.js
@@ -1,27 +1,23 @@
|
||||
import stackClear from './_stackClear';
|
||||
import stackDelete from './_stackDelete';
|
||||
import stackGet from './_stackGet';
|
||||
import stackHas from './_stackHas';
|
||||
import stackSet from './_stackSet';
|
||||
import ListCache from './_ListCache.js';
|
||||
import stackClear from './_stackClear.js';
|
||||
import stackDelete from './_stackDelete.js';
|
||||
import stackGet from './_stackGet.js';
|
||||
import stackHas from './_stackHas.js';
|
||||
import stackSet from './_stackSet.js';
|
||||
|
||||
/**
|
||||
* Creates a stack cache object to store key-value pairs.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} [values] The values to cache.
|
||||
* @constructor
|
||||
* @param {Array} [entries] The key-value pairs to cache.
|
||||
*/
|
||||
function Stack(values) {
|
||||
var index = -1,
|
||||
length = values ? values.length : 0;
|
||||
|
||||
this.clear();
|
||||
while (++index < length) {
|
||||
var entry = values[index];
|
||||
this.set(entry[0], entry[1]);
|
||||
}
|
||||
function Stack(entries) {
|
||||
var data = this.__data__ = new ListCache(entries);
|
||||
this.size = data.size;
|
||||
}
|
||||
|
||||
// Add functions to the `Stack` cache.
|
||||
// Add methods to `Stack`.
|
||||
Stack.prototype.clear = stackClear;
|
||||
Stack.prototype['delete'] = stackDelete;
|
||||
Stack.prototype.get = stackGet;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import root from './_root';
|
||||
import root from './_root.js';
|
||||
|
||||
/** Built-in value references. */
|
||||
var Symbol = root.Symbol;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import root from './_root';
|
||||
import root from './_root.js';
|
||||
|
||||
/** Built-in value references. */
|
||||
var Uint8Array = root.Uint8Array;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import getNative from './_getNative';
|
||||
import root from './_root';
|
||||
import getNative from './_getNative.js';
|
||||
import root from './_root.js';
|
||||
|
||||
/* Built-in method references that are verified to be native. */
|
||||
var WeakMap = getNative(root, 'WeakMap');
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
* @returns {Object} Returns `map`.
|
||||
*/
|
||||
function addMapEntry(map, pair) {
|
||||
// Don't return `map.set` because it's not chainable in IE 11.
|
||||
map.set(pair[0], pair[1]);
|
||||
return map;
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
* @returns {Object} Returns `set`.
|
||||
*/
|
||||
function addSetEntry(set, value) {
|
||||
// Don't return `set.add` because it's not chainable in IE 11.
|
||||
set.add(value);
|
||||
return set;
|
||||
}
|
||||
|
||||
@@ -5,12 +5,11 @@
|
||||
* @private
|
||||
* @param {Function} func The function to invoke.
|
||||
* @param {*} thisArg The `this` binding of `func`.
|
||||
* @param {...*} [args] The arguments to invoke `func` with.
|
||||
* @param {Array} args The arguments to invoke `func` with.
|
||||
* @returns {*} Returns the result of `func`.
|
||||
*/
|
||||
function apply(func, thisArg, args) {
|
||||
var length = args ? args.length : 0;
|
||||
switch (length) {
|
||||
switch (args.length) {
|
||||
case 0: return func.call(thisArg);
|
||||
case 1: return func.call(thisArg, args[0]);
|
||||
case 2: return func.call(thisArg, args[0], args[1]);
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* A specialized version of `baseAggregator` for arrays.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} setter The function to set `accumulator` values.
|
||||
* @param {Function} iteratee The iteratee to transform keys.
|
||||
* @param {Object} accumulator The initial aggregated object.
|
||||
@@ -10,7 +10,7 @@
|
||||
*/
|
||||
function arrayAggregator(array, setter, iteratee, accumulator) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
length = array ? array.length : 0;
|
||||
|
||||
while (++index < length) {
|
||||
var value = array[index];
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
/**
|
||||
* Creates a new array concatenating `array` with `other`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The first array to concatenate.
|
||||
* @param {Array} other The second array to concatenate.
|
||||
* @returns {Array} Returns the new concatenated array.
|
||||
*/
|
||||
function arrayConcat(array, other) {
|
||||
var index = -1,
|
||||
length = array.length,
|
||||
othIndex = -1,
|
||||
othLength = other.length,
|
||||
result = Array(length + othLength);
|
||||
|
||||
while (++index < length) {
|
||||
result[index] = array[index];
|
||||
}
|
||||
while (++othIndex < othLength) {
|
||||
result[index++] = other[othIndex];
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export default arrayConcat;
|
||||
@@ -3,13 +3,13 @@
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array} Returns `array`.
|
||||
*/
|
||||
function arrayEach(array, iteratee) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
length = array ? array.length : 0;
|
||||
|
||||
while (++index < length) {
|
||||
if (iteratee(array[index], index, array) === false) {
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array} Returns `array`.
|
||||
*/
|
||||
function arrayEachRight(array, iteratee) {
|
||||
var length = array.length;
|
||||
var length = array ? array.length : 0;
|
||||
|
||||
while (length--) {
|
||||
if (iteratee(array[length], length, array) === false) {
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`.
|
||||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||||
* else `false`.
|
||||
*/
|
||||
function arrayEvery(array, predicate) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
length = array ? array.length : 0;
|
||||
|
||||
while (++index < length) {
|
||||
if (!predicate(array[index], index, array)) {
|
||||
|
||||
@@ -3,20 +3,20 @@
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {Array} Returns the new filtered array.
|
||||
*/
|
||||
function arrayFilter(array, predicate) {
|
||||
var index = -1,
|
||||
length = array.length,
|
||||
resIndex = -1,
|
||||
length = array ? array.length : 0,
|
||||
resIndex = 0,
|
||||
result = [];
|
||||
|
||||
while (++index < length) {
|
||||
var value = array[index];
|
||||
if (predicate(value, index, array)) {
|
||||
result[++resIndex] = value;
|
||||
result[resIndex++] = value;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import baseIndexOf from './_baseIndexOf';
|
||||
import baseIndexOf from './_baseIndexOf.js';
|
||||
|
||||
/**
|
||||
* A specialized version of `_.includes` for arrays without support for
|
||||
* specifying an index to search from.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to search.
|
||||
* @param {Array} [array] The array to inspect.
|
||||
* @param {*} target The value to search for.
|
||||
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
||||
*/
|
||||
function arrayIncludes(array, value) {
|
||||
return !!array.length && baseIndexOf(array, value, 0) > -1;
|
||||
var length = array ? array.length : 0;
|
||||
return !!length && baseIndexOf(array, value, 0) > -1;
|
||||
}
|
||||
|
||||
export default arrayIncludes;
|
||||
|
||||
@@ -1,16 +1,15 @@
|
||||
/**
|
||||
* A specialized version of `_.includesWith` for arrays without support for
|
||||
* specifying an index to search from.
|
||||
* This function is like `arrayIncludes` except that it accepts a comparator.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to search.
|
||||
* @param {Array} [array] The array to inspect.
|
||||
* @param {*} target The value to search for.
|
||||
* @param {Function} comparator The comparator invoked per element.
|
||||
* @returns {boolean} Returns `true` if `target` is found, else `false`.
|
||||
*/
|
||||
function arrayIncludesWith(array, value, comparator) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
length = array ? array.length : 0;
|
||||
|
||||
while (++index < length) {
|
||||
if (comparator(value, array[index])) {
|
||||
|
||||
39
_arrayLikeKeys.js
Normal file
39
_arrayLikeKeys.js
Normal file
@@ -0,0 +1,39 @@
|
||||
import baseTimes from './_baseTimes.js';
|
||||
import isArguments from './isArguments.js';
|
||||
import isArray from './isArray.js';
|
||||
import isIndex from './_isIndex.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Creates an array of the enumerable property names of the array-like `value`.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to query.
|
||||
* @param {boolean} inherited Specify returning inherited property names.
|
||||
* @returns {Array} Returns the array of property names.
|
||||
*/
|
||||
function arrayLikeKeys(value, inherited) {
|
||||
// Safari 8.1 makes `arguments.callee` enumerable in strict mode.
|
||||
// Safari 9 makes `arguments.length` enumerable in strict mode.
|
||||
var result = (isArray(value) || isArguments(value))
|
||||
? baseTimes(value.length, String)
|
||||
: [];
|
||||
|
||||
var length = result.length,
|
||||
skipIndexes = !!length;
|
||||
|
||||
for (var key in value) {
|
||||
if ((inherited || hasOwnProperty.call(value, key)) &&
|
||||
!(skipIndexes && (key == 'length' || isIndex(key, length)))) {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export default arrayLikeKeys;
|
||||
@@ -3,13 +3,13 @@
|
||||
* shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Array} Returns the new mapped array.
|
||||
*/
|
||||
function arrayMap(array, iteratee) {
|
||||
var index = -1,
|
||||
length = array.length,
|
||||
length = array ? array.length : 0,
|
||||
result = Array(length);
|
||||
|
||||
while (++index < length) {
|
||||
|
||||
@@ -3,15 +3,16 @@
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @param {*} [accumulator] The initial value.
|
||||
* @param {boolean} [initAccum] Specify using the first element of `array` as the initial value.
|
||||
* @param {boolean} [initAccum] Specify using the first element of `array` as
|
||||
* the initial value.
|
||||
* @returns {*} Returns the accumulated value.
|
||||
*/
|
||||
function arrayReduce(array, iteratee, accumulator, initAccum) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
length = array ? array.length : 0;
|
||||
|
||||
if (initAccum && length) {
|
||||
accumulator = array[++index];
|
||||
|
||||
@@ -3,14 +3,15 @@
|
||||
* iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @param {*} [accumulator] The initial value.
|
||||
* @param {boolean} [initAccum] Specify using the last element of `array` as the initial value.
|
||||
* @param {boolean} [initAccum] Specify using the last element of `array` as
|
||||
* the initial value.
|
||||
* @returns {*} Returns the accumulated value.
|
||||
*/
|
||||
function arrayReduceRight(array, iteratee, accumulator, initAccum) {
|
||||
var length = array.length;
|
||||
var length = array ? array.length : 0;
|
||||
if (initAccum && length) {
|
||||
accumulator = array[--length];
|
||||
}
|
||||
|
||||
16
_arraySample.js
Normal file
16
_arraySample.js
Normal file
@@ -0,0 +1,16 @@
|
||||
import baseRandom from './_baseRandom.js';
|
||||
|
||||
/**
|
||||
* A specialized version of `_.sample` for arrays without support for iteratee
|
||||
* shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to sample.
|
||||
* @returns {*} Returns the random element.
|
||||
*/
|
||||
function arraySample(array) {
|
||||
var length = array.length;
|
||||
return length ? array[baseRandom(0, length - 1)] : undefined;
|
||||
}
|
||||
|
||||
export default arraySample;
|
||||
18
_arraySampleSize.js
Normal file
18
_arraySampleSize.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import arrayShuffle from './_arrayShuffle.js';
|
||||
import baseClamp from './_baseClamp.js';
|
||||
|
||||
/**
|
||||
* A specialized version of `_.sampleSize` for arrays.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to sample.
|
||||
* @param {number} n The number of elements to sample.
|
||||
* @returns {Array} Returns the random elements.
|
||||
*/
|
||||
function arraySampleSize(array, n) {
|
||||
var result = arrayShuffle(array);
|
||||
result.length = baseClamp(n, 0, result.length);
|
||||
return result;
|
||||
}
|
||||
|
||||
export default arraySampleSize;
|
||||
15
_arrayShuffle.js
Normal file
15
_arrayShuffle.js
Normal file
@@ -0,0 +1,15 @@
|
||||
import copyArray from './_copyArray.js';
|
||||
import shuffleSelf from './_shuffleSelf.js';
|
||||
|
||||
/**
|
||||
* A specialized version of `_.shuffle` for arrays.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to shuffle.
|
||||
* @returns {Array} Returns the new shuffled array.
|
||||
*/
|
||||
function arrayShuffle(array) {
|
||||
return shuffleSelf(copyArray(array));
|
||||
}
|
||||
|
||||
export default arrayShuffle;
|
||||
@@ -3,13 +3,14 @@
|
||||
* shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to iterate over.
|
||||
* @param {Array} [array] The array to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {boolean} Returns `true` if any element passes the predicate check, else `false`.
|
||||
* @returns {boolean} Returns `true` if any element passes the predicate check,
|
||||
* else `false`.
|
||||
*/
|
||||
function arraySome(array, predicate) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
length = array ? array.length : 0;
|
||||
|
||||
while (++index < length) {
|
||||
if (predicate(array[index], index, array)) {
|
||||
|
||||
12
_asciiSize.js
Normal file
12
_asciiSize.js
Normal file
@@ -0,0 +1,12 @@
|
||||
import baseProperty from './_baseProperty.js';
|
||||
|
||||
/**
|
||||
* Gets the size of an ASCII `string`.
|
||||
*
|
||||
* @private
|
||||
* @param {string} string The string inspect.
|
||||
* @returns {number} Returns the string size.
|
||||
*/
|
||||
var asciiSize = baseProperty('length');
|
||||
|
||||
export default asciiSize;
|
||||
12
_asciiToArray.js
Normal file
12
_asciiToArray.js
Normal file
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* Converts an ASCII `string` to an array.
|
||||
*
|
||||
* @private
|
||||
* @param {string} string The string to convert.
|
||||
* @returns {Array} Returns the converted array.
|
||||
*/
|
||||
function asciiToArray(string) {
|
||||
return string.split('');
|
||||
}
|
||||
|
||||
export default asciiToArray;
|
||||
15
_asciiWords.js
Normal file
15
_asciiWords.js
Normal file
@@ -0,0 +1,15 @@
|
||||
/** Used to match words composed of alphanumeric characters. */
|
||||
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
|
||||
|
||||
/**
|
||||
* Splits an ASCII `string` into an array of its words.
|
||||
*
|
||||
* @private
|
||||
* @param {string} The string to inspect.
|
||||
* @returns {Array} Returns the words of `string`.
|
||||
*/
|
||||
function asciiWords(string) {
|
||||
return string.match(reAsciiWord) || [];
|
||||
}
|
||||
|
||||
export default asciiWords;
|
||||
@@ -1,4 +1,4 @@
|
||||
import eq from './eq';
|
||||
import eq from './eq.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
import eq from './eq';
|
||||
import baseAssignValue from './_baseAssignValue.js';
|
||||
import eq from './eq.js';
|
||||
|
||||
/**
|
||||
* This function is like `assignValue` except that it doesn't assign `undefined` values.
|
||||
* This function is like `assignValue` except that it doesn't assign
|
||||
* `undefined` values.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to modify.
|
||||
@@ -11,7 +13,7 @@ import eq from './eq';
|
||||
function assignMergeValue(object, key, value) {
|
||||
if ((value !== undefined && !eq(object[key], value)) ||
|
||||
(typeof key == 'number' && value === undefined && !(key in object))) {
|
||||
object[key] = value;
|
||||
baseAssignValue(object, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import eq from './eq';
|
||||
import baseAssignValue from './_baseAssignValue.js';
|
||||
import eq from './eq.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
@@ -8,7 +9,7 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* Assigns `value` to `key` of `object` if the existing value is not equivalent
|
||||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/6.0/#sec-samevaluezero)
|
||||
* using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
|
||||
* for equality comparisons.
|
||||
*
|
||||
* @private
|
||||
@@ -18,10 +19,9 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
*/
|
||||
function assignValue(object, key, value) {
|
||||
var objValue = object[key];
|
||||
if ((!eq(objValue, value) ||
|
||||
(eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) ||
|
||||
if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
|
||||
(value === undefined && !(key in object))) {
|
||||
object[key] = value;
|
||||
baseAssignValue(object, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
16
_assocGet.js
16
_assocGet.js
@@ -1,16 +0,0 @@
|
||||
import assocIndexOf from './_assocIndexOf';
|
||||
|
||||
/**
|
||||
* Gets the associative array value for `key`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to query.
|
||||
* @param {string} key The key of the value to get.
|
||||
* @returns {*} Returns the entry value.
|
||||
*/
|
||||
function assocGet(array, key) {
|
||||
var index = assocIndexOf(array, key);
|
||||
return index < 0 ? undefined : array[index][1];
|
||||
}
|
||||
|
||||
export default assocGet;
|
||||
15
_assocHas.js
15
_assocHas.js
@@ -1,15 +0,0 @@
|
||||
import assocIndexOf from './_assocIndexOf';
|
||||
|
||||
/**
|
||||
* Checks if an associative array value for `key` exists.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to query.
|
||||
* @param {string} key The key of the entry to check.
|
||||
* @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
|
||||
*/
|
||||
function assocHas(array, key) {
|
||||
return assocIndexOf(array, key) > -1;
|
||||
}
|
||||
|
||||
export default assocHas;
|
||||
@@ -1,11 +1,10 @@
|
||||
import eq from './eq';
|
||||
import eq from './eq.js';
|
||||
|
||||
/**
|
||||
* Gets the index at which the first occurrence of `key` is found in `array`
|
||||
* of key-value pairs.
|
||||
* Gets the index at which the `key` is found in `array` of key-value pairs.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to search.
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {*} key The key to search for.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
|
||||
20
_assocSet.js
20
_assocSet.js
@@ -1,20 +0,0 @@
|
||||
import assocIndexOf from './_assocIndexOf';
|
||||
|
||||
/**
|
||||
* Sets the associative array `key` to `value`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to modify.
|
||||
* @param {string} key The key of the value to set.
|
||||
* @param {*} value The value to set.
|
||||
*/
|
||||
function assocSet(array, key, value) {
|
||||
var index = assocIndexOf(array, key);
|
||||
if (index < 0) {
|
||||
array.push([key, value]);
|
||||
} else {
|
||||
array[index][1] = value;
|
||||
}
|
||||
}
|
||||
|
||||
export default assocSet;
|
||||
@@ -1,4 +1,4 @@
|
||||
import baseEach from './_baseEach';
|
||||
import baseEach from './_baseEach.js';
|
||||
|
||||
/**
|
||||
* Aggregates elements of `collection` on `accumulator` with keys transformed
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import copyObject from './_copyObject';
|
||||
import keys from './keys';
|
||||
import copyObject from './_copyObject.js';
|
||||
import keys from './keys.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.assign` without support for multiple sources
|
||||
|
||||
26
_baseAssignValue.js
Normal file
26
_baseAssignValue.js
Normal file
@@ -0,0 +1,26 @@
|
||||
/** Built-in value references. */
|
||||
var defineProperty = Object.defineProperty;
|
||||
|
||||
/**
|
||||
* The base implementation of `assignValue` and `assignMergeValue` without
|
||||
* value checks.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to modify.
|
||||
* @param {string} key The key of the property to assign.
|
||||
* @param {*} value The value to assign.
|
||||
*/
|
||||
function baseAssignValue(object, key, value) {
|
||||
if (key == '__proto__' && defineProperty) {
|
||||
defineProperty(object, key, {
|
||||
'configurable': true,
|
||||
'enumerable': true,
|
||||
'value': value,
|
||||
'writable': true
|
||||
});
|
||||
} else {
|
||||
object[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
export default baseAssignValue;
|
||||
@@ -1,4 +1,4 @@
|
||||
import get from './get';
|
||||
import get from './get.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.at` without support for individual paths.
|
||||
@@ -6,7 +6,7 @@ import get from './get';
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {string[]} paths The property paths of elements to pick.
|
||||
* @returns {Array} Returns the new array of picked elements.
|
||||
* @returns {Array} Returns the picked elements.
|
||||
*/
|
||||
function baseAt(object, paths) {
|
||||
var index = -1,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* The base implementation of `_.clamp` which doesn't coerce arguments to numbers.
|
||||
* The base implementation of `_.clamp` which doesn't coerce arguments.
|
||||
*
|
||||
* @private
|
||||
* @param {number} number The number to clamp.
|
||||
|
||||
@@ -1,17 +1,19 @@
|
||||
import Stack from './_Stack';
|
||||
import arrayEach from './_arrayEach';
|
||||
import assignValue from './_assignValue';
|
||||
import baseAssign from './_baseAssign';
|
||||
import baseForOwn from './_baseForOwn';
|
||||
import copyArray from './_copyArray';
|
||||
import copySymbols from './_copySymbols';
|
||||
import getTag from './_getTag';
|
||||
import initCloneArray from './_initCloneArray';
|
||||
import initCloneByTag from './_initCloneByTag';
|
||||
import initCloneObject from './_initCloneObject';
|
||||
import isArray from './isArray';
|
||||
import isHostObject from './_isHostObject';
|
||||
import isObject from './isObject';
|
||||
import Stack from './_Stack.js';
|
||||
import arrayEach from './_arrayEach.js';
|
||||
import assignValue from './_assignValue.js';
|
||||
import baseAssign from './_baseAssign.js';
|
||||
import cloneBuffer from './_cloneBuffer.js';
|
||||
import copyArray from './_copyArray.js';
|
||||
import copySymbols from './_copySymbols.js';
|
||||
import getAllKeys from './_getAllKeys.js';
|
||||
import getTag from './_getTag.js';
|
||||
import initCloneArray from './_initCloneArray.js';
|
||||
import initCloneByTag from './_initCloneByTag.js';
|
||||
import initCloneObject from './_initCloneObject.js';
|
||||
import isArray from './isArray.js';
|
||||
import isBuffer from './isBuffer.js';
|
||||
import isObject from './isObject.js';
|
||||
import keys from './keys.js';
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var argsTag = '[object Arguments]',
|
||||
@@ -31,6 +33,7 @@ var argsTag = '[object Arguments]',
|
||||
weakMapTag = '[object WeakMap]';
|
||||
|
||||
var arrayBufferTag = '[object ArrayBuffer]',
|
||||
dataViewTag = '[object DataView]',
|
||||
float32Tag = '[object Float32Array]',
|
||||
float64Tag = '[object Float64Array]',
|
||||
int8Tag = '[object Int8Array]',
|
||||
@@ -44,16 +47,16 @@ var arrayBufferTag = '[object ArrayBuffer]',
|
||||
/** Used to identify `toStringTag` values supported by `_.clone`. */
|
||||
var cloneableTags = {};
|
||||
cloneableTags[argsTag] = cloneableTags[arrayTag] =
|
||||
cloneableTags[arrayBufferTag] = cloneableTags[boolTag] =
|
||||
cloneableTags[dateTag] = cloneableTags[float32Tag] =
|
||||
cloneableTags[float64Tag] = cloneableTags[int8Tag] =
|
||||
cloneableTags[int16Tag] = cloneableTags[int32Tag] =
|
||||
cloneableTags[mapTag] = cloneableTags[numberTag] =
|
||||
cloneableTags[objectTag] = cloneableTags[regexpTag] =
|
||||
cloneableTags[setTag] = cloneableTags[stringTag] =
|
||||
cloneableTags[symbolTag] = cloneableTags[uint8Tag] =
|
||||
cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] =
|
||||
cloneableTags[uint32Tag] = true;
|
||||
cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
|
||||
cloneableTags[boolTag] = cloneableTags[dateTag] =
|
||||
cloneableTags[float32Tag] = cloneableTags[float64Tag] =
|
||||
cloneableTags[int8Tag] = cloneableTags[int16Tag] =
|
||||
cloneableTags[int32Tag] = cloneableTags[mapTag] =
|
||||
cloneableTags[numberTag] = cloneableTags[objectTag] =
|
||||
cloneableTags[regexpTag] = cloneableTags[setTag] =
|
||||
cloneableTags[stringTag] = cloneableTags[symbolTag] =
|
||||
cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
|
||||
cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
|
||||
cloneableTags[errorTag] = cloneableTags[funcTag] =
|
||||
cloneableTags[weakMapTag] = false;
|
||||
|
||||
@@ -64,13 +67,14 @@ cloneableTags[weakMapTag] = false;
|
||||
* @private
|
||||
* @param {*} value The value to clone.
|
||||
* @param {boolean} [isDeep] Specify a deep clone.
|
||||
* @param {boolean} [isFull] Specify a clone including symbols.
|
||||
* @param {Function} [customizer] The function to customize cloning.
|
||||
* @param {string} [key] The key of `value`.
|
||||
* @param {Object} [object] The parent object of `value`.
|
||||
* @param {Object} [stack] Tracks traversed objects and their clone counterparts.
|
||||
* @returns {*} Returns the cloned value.
|
||||
*/
|
||||
function baseClone(value, isDeep, customizer, key, object, stack) {
|
||||
function baseClone(value, isDeep, isFull, customizer, key, object, stack) {
|
||||
var result;
|
||||
if (customizer) {
|
||||
result = object ? customizer(value, key, object, stack) : customizer(value);
|
||||
@@ -91,18 +95,19 @@ function baseClone(value, isDeep, customizer, key, object, stack) {
|
||||
var tag = getTag(value),
|
||||
isFunc = tag == funcTag || tag == genTag;
|
||||
|
||||
if (isBuffer(value)) {
|
||||
return cloneBuffer(value, isDeep);
|
||||
}
|
||||
if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
|
||||
if (isHostObject(value)) {
|
||||
return object ? value : {};
|
||||
}
|
||||
result = initCloneObject(isFunc ? {} : value);
|
||||
if (!isDeep) {
|
||||
return copySymbols(value, baseAssign(result, value));
|
||||
}
|
||||
} else {
|
||||
return cloneableTags[tag]
|
||||
? initCloneByTag(value, tag, isDeep)
|
||||
: (object ? value : {});
|
||||
if (!cloneableTags[tag]) {
|
||||
return object ? value : {};
|
||||
}
|
||||
result = initCloneByTag(value, tag, baseClone, isDeep);
|
||||
}
|
||||
}
|
||||
// Check for circular references and return its corresponding clone.
|
||||
@@ -113,11 +118,18 @@ function baseClone(value, isDeep, customizer, key, object, stack) {
|
||||
}
|
||||
stack.set(value, result);
|
||||
|
||||
// Recursively populate clone (susceptible to call stack limits).
|
||||
(isArr ? arrayEach : baseForOwn)(value, function(subValue, key) {
|
||||
assignValue(result, key, baseClone(subValue, isDeep, customizer, key, value, stack));
|
||||
if (!isArr) {
|
||||
var props = isFull ? getAllKeys(value) : keys(value);
|
||||
}
|
||||
arrayEach(props || value, function(subValue, key) {
|
||||
if (props) {
|
||||
key = subValue;
|
||||
subValue = value[key];
|
||||
}
|
||||
// Recursively populate clone (susceptible to call stack limits).
|
||||
assignValue(result, key, baseClone(subValue, isDeep, isFull, customizer, key, value, stack));
|
||||
});
|
||||
return isArr ? result : copySymbols(value, result);
|
||||
return result;
|
||||
}
|
||||
|
||||
export default baseClone;
|
||||
|
||||
@@ -1,31 +1,17 @@
|
||||
import keys from './keys';
|
||||
import baseConformsTo from './_baseConformsTo.js';
|
||||
import keys from './keys.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.conforms` which doesn't clone `source`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} source The object of property predicates to conform to.
|
||||
* @returns {Function} Returns the new function.
|
||||
* @returns {Function} Returns the new spec function.
|
||||
*/
|
||||
function baseConforms(source) {
|
||||
var props = keys(source),
|
||||
length = props.length;
|
||||
|
||||
var props = keys(source);
|
||||
return function(object) {
|
||||
if (object == null) {
|
||||
return !length;
|
||||
}
|
||||
var index = length;
|
||||
while (index--) {
|
||||
var key = props[index],
|
||||
predicate = source[key],
|
||||
value = object[key];
|
||||
|
||||
if ((value === undefined && !(key in Object(object))) || !predicate(value)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
return baseConformsTo(object, source, props);
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
27
_baseConformsTo.js
Normal file
27
_baseConformsTo.js
Normal file
@@ -0,0 +1,27 @@
|
||||
/**
|
||||
* The base implementation of `_.conformsTo` which accepts `props` to check.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to inspect.
|
||||
* @param {Object} source The object of property predicates to conform to.
|
||||
* @returns {boolean} Returns `true` if `object` conforms, else `false`.
|
||||
*/
|
||||
function baseConformsTo(object, source, props) {
|
||||
var length = props.length;
|
||||
if (object == null) {
|
||||
return !length;
|
||||
}
|
||||
object = Object(object);
|
||||
while (length--) {
|
||||
var key = props[length],
|
||||
predicate = source[key],
|
||||
value = object[key];
|
||||
|
||||
if ((value === undefined && !(key in object)) || !predicate(value)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
export default baseConformsTo;
|
||||
@@ -1,4 +1,7 @@
|
||||
import isObject from './isObject';
|
||||
import isObject from './isObject.js';
|
||||
|
||||
/** Built-in value references. */
|
||||
var objectCreate = Object.create;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.create` without support for assigning
|
||||
@@ -8,16 +11,8 @@ import isObject from './isObject';
|
||||
* @param {Object} prototype The object to inherit from.
|
||||
* @returns {Object} Returns the new object.
|
||||
*/
|
||||
var baseCreate = (function() {
|
||||
function object() {}
|
||||
return function(prototype) {
|
||||
if (isObject(prototype)) {
|
||||
object.prototype = prototype;
|
||||
var result = new object;
|
||||
object.prototype = undefined;
|
||||
}
|
||||
return result || {};
|
||||
};
|
||||
}());
|
||||
function baseCreate(proto) {
|
||||
return isObject(proto) ? objectCreate(proto) : {};
|
||||
}
|
||||
|
||||
export default baseCreate;
|
||||
|
||||
@@ -2,14 +2,14 @@
|
||||
var FUNC_ERROR_TEXT = 'Expected a function';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.delay` and `_.defer` which accepts an array
|
||||
* of `func` arguments.
|
||||
* The base implementation of `_.delay` and `_.defer` which accepts `args`
|
||||
* to provide to `func`.
|
||||
*
|
||||
* @private
|
||||
* @param {Function} func The function to delay.
|
||||
* @param {number} wait The number of milliseconds to delay invocation.
|
||||
* @param {Object} args The arguments provide to `func`.
|
||||
* @returns {number} Returns the timer id.
|
||||
* @param {Array} args The arguments to provide to `func`.
|
||||
* @returns {number|Object} Returns the timer id or timeout object.
|
||||
*/
|
||||
function baseDelay(func, wait, args) {
|
||||
if (typeof func != 'function') {
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import SetCache from './_SetCache';
|
||||
import arrayIncludes from './_arrayIncludes';
|
||||
import arrayIncludesWith from './_arrayIncludesWith';
|
||||
import arrayMap from './_arrayMap';
|
||||
import baseUnary from './_baseUnary';
|
||||
import cacheHas from './_cacheHas';
|
||||
import SetCache from './_SetCache.js';
|
||||
import arrayIncludes from './_arrayIncludes.js';
|
||||
import arrayIncludesWith from './_arrayIncludesWith.js';
|
||||
import arrayMap from './_arrayMap.js';
|
||||
import baseUnary from './_baseUnary.js';
|
||||
import cacheHas from './_cacheHas.js';
|
||||
|
||||
/** Used as the size to enable large array optimizations. */
|
||||
var LARGE_ARRAY_SIZE = 200;
|
||||
|
||||
/**
|
||||
* The base implementation of methods like `_.difference` without support for
|
||||
* excluding multiple arrays or iteratee shorthands.
|
||||
* The base implementation of methods like `_.difference` without support
|
||||
* for excluding multiple arrays or iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
@@ -47,6 +47,7 @@ function baseDifference(array, values, iteratee, comparator) {
|
||||
var value = array[index],
|
||||
computed = iteratee ? iteratee(value) : value;
|
||||
|
||||
value = (comparator || value !== 0) ? value : 0;
|
||||
if (isCommon && computed === computed) {
|
||||
var valuesIndex = valuesLength;
|
||||
while (valuesIndex--) {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import baseForOwn from './_baseForOwn';
|
||||
import createBaseEach from './_createBaseEach';
|
||||
import baseForOwn from './_baseForOwn.js';
|
||||
import createBaseEach from './_createBaseEach.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forEach` without support for iteratee shorthands.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import baseForOwnRight from './_baseForOwnRight';
|
||||
import createBaseEach from './_createBaseEach';
|
||||
import baseForOwnRight from './_baseForOwnRight.js';
|
||||
import createBaseEach from './_createBaseEach.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forEachRight` without support for iteratee shorthands.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import baseEach from './_baseEach';
|
||||
import baseEach from './_baseEach.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.every` without support for iteratee shorthands.
|
||||
@@ -6,7 +6,8 @@ import baseEach from './_baseEach';
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to iterate over.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @returns {boolean} Returns `true` if all elements pass the predicate check, else `false`
|
||||
* @returns {boolean} Returns `true` if all elements pass the predicate check,
|
||||
* else `false`
|
||||
*/
|
||||
function baseEvery(collection, predicate) {
|
||||
var result = true;
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
import isSymbol from './isSymbol.js';
|
||||
|
||||
/**
|
||||
* The base implementation of methods like `_.max` and `_.min` which accepts a
|
||||
* `comparator` to determine the extremum value.
|
||||
@@ -17,7 +19,7 @@ function baseExtremum(array, iteratee, comparator) {
|
||||
current = iteratee(value);
|
||||
|
||||
if (current != null && (computed === undefined
|
||||
? current === current
|
||||
? (current === current && !isSymbol(current))
|
||||
: comparator(current, computed)
|
||||
)) {
|
||||
var computed = current,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import toInteger from './toInteger';
|
||||
import toLength from './toLength';
|
||||
import toInteger from './toInteger.js';
|
||||
import toLength from './toLength.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.fill` without an iteratee call guard.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import baseEach from './_baseEach';
|
||||
import baseEach from './_baseEach.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.filter` without support for iteratee shorthands.
|
||||
|
||||
24
_baseFind.js
24
_baseFind.js
@@ -1,24 +0,0 @@
|
||||
/**
|
||||
* The base implementation of methods like `_.find` and `_.findKey`, without
|
||||
* support for iteratee shorthands, which iterates over `collection` using
|
||||
* `eachFunc`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to search.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @param {Function} eachFunc The function to iterate over `collection`.
|
||||
* @param {boolean} [retKey] Specify returning the key of the found element instead of the element itself.
|
||||
* @returns {*} Returns the found element or its key, else `undefined`.
|
||||
*/
|
||||
function baseFind(collection, predicate, eachFunc, retKey) {
|
||||
var result;
|
||||
eachFunc(collection, function(value, key, collection) {
|
||||
if (predicate(value, key, collection)) {
|
||||
result = retKey ? key : value;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
export default baseFind;
|
||||
@@ -3,14 +3,15 @@
|
||||
* support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to search.
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @param {number} fromIndex The index to search from.
|
||||
* @param {boolean} [fromRight] Specify iterating from right to left.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
function baseFindIndex(array, predicate, fromRight) {
|
||||
function baseFindIndex(array, predicate, fromIndex, fromRight) {
|
||||
var length = array.length,
|
||||
index = fromRight ? length : -1;
|
||||
index = fromIndex + (fromRight ? 1 : -1);
|
||||
|
||||
while ((fromRight ? index-- : ++index < length)) {
|
||||
if (predicate(array[index], index, array)) {
|
||||
|
||||
23
_baseFindKey.js
Normal file
23
_baseFindKey.js
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* The base implementation of methods like `_.findKey` and `_.findLastKey`,
|
||||
* without support for iteratee shorthands, which iterates over `collection`
|
||||
* using `eachFunc`.
|
||||
*
|
||||
* @private
|
||||
* @param {Array|Object} collection The collection to inspect.
|
||||
* @param {Function} predicate The function invoked per iteration.
|
||||
* @param {Function} eachFunc The function to iterate over `collection`.
|
||||
* @returns {*} Returns the found element or its key, else `undefined`.
|
||||
*/
|
||||
function baseFindKey(collection, predicate, eachFunc) {
|
||||
var result;
|
||||
eachFunc(collection, function(value, key, collection) {
|
||||
if (predicate(value, key, collection)) {
|
||||
result = key;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
export default baseFindKey;
|
||||
@@ -1,31 +1,30 @@
|
||||
import arrayPush from './_arrayPush';
|
||||
import isArguments from './isArguments';
|
||||
import isArray from './isArray';
|
||||
import isArrayLikeObject from './isArrayLikeObject';
|
||||
import arrayPush from './_arrayPush.js';
|
||||
import isFlattenable from './_isFlattenable.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.flatten` with support for restricting flattening.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to flatten.
|
||||
* @param {boolean} [isDeep] Specify a deep flatten.
|
||||
* @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
|
||||
* @param {number} depth The maximum recursion depth.
|
||||
* @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
|
||||
* @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
|
||||
* @param {Array} [result=[]] The initial result value.
|
||||
* @returns {Array} Returns the new flattened array.
|
||||
*/
|
||||
function baseFlatten(array, isDeep, isStrict, result) {
|
||||
result || (result = []);
|
||||
|
||||
function baseFlatten(array, depth, predicate, isStrict, result) {
|
||||
var index = -1,
|
||||
length = array.length;
|
||||
|
||||
predicate || (predicate = isFlattenable);
|
||||
result || (result = []);
|
||||
|
||||
while (++index < length) {
|
||||
var value = array[index];
|
||||
if (isArrayLikeObject(value) &&
|
||||
(isStrict || isArray(value) || isArguments(value))) {
|
||||
if (isDeep) {
|
||||
if (depth > 0 && predicate(value)) {
|
||||
if (depth > 1) {
|
||||
// Recursively flatten arrays (susceptible to call stack limits).
|
||||
baseFlatten(value, isDeep, isStrict, result);
|
||||
baseFlatten(value, depth - 1, predicate, isStrict, result);
|
||||
} else {
|
||||
arrayPush(result, value);
|
||||
}
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import createBaseFor from './_createBaseFor';
|
||||
import createBaseFor from './_createBaseFor.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `baseForIn` and `baseForOwn` which iterates
|
||||
* over `object` properties returned by `keysFunc` invoking `iteratee` for
|
||||
* each property. Iteratee functions may exit iteration early by explicitly
|
||||
* returning `false`.
|
||||
* The base implementation of `baseForOwn` which iterates over `object`
|
||||
* properties returned by `keysFunc` and invokes `iteratee` for each property.
|
||||
* Iteratee functions may exit iteration early by explicitly returning `false`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
|
||||
@@ -1,16 +0,0 @@
|
||||
import baseFor from './_baseFor';
|
||||
import keysIn from './keysIn';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forIn` without support for iteratee shorthands.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to iterate over.
|
||||
* @param {Function} iteratee The function invoked per iteration.
|
||||
* @returns {Object} Returns `object`.
|
||||
*/
|
||||
function baseForIn(object, iteratee) {
|
||||
return object == null ? object : baseFor(object, iteratee, keysIn);
|
||||
}
|
||||
|
||||
export default baseForIn;
|
||||
@@ -1,5 +1,5 @@
|
||||
import baseFor from './_baseFor';
|
||||
import keys from './keys';
|
||||
import baseFor from './_baseFor.js';
|
||||
import keys from './keys.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forOwn` without support for iteratee shorthands.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import baseForRight from './_baseForRight';
|
||||
import keys from './keys';
|
||||
import baseForRight from './_baseForRight.js';
|
||||
import keys from './keys.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.forOwnRight` without support for iteratee shorthands.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import createBaseFor from './_createBaseFor';
|
||||
import createBaseFor from './_createBaseFor.js';
|
||||
|
||||
/**
|
||||
* This function is like `baseFor` except that it iterates over properties
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import arrayFilter from './_arrayFilter';
|
||||
import isFunction from './isFunction';
|
||||
import arrayFilter from './_arrayFilter.js';
|
||||
import isFunction from './isFunction.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.functions` which creates an array of
|
||||
* `object` function property names filtered from those provided.
|
||||
* `object` function property names filtered from `props`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to inspect.
|
||||
* @param {Array} props The property names to filter.
|
||||
* @returns {Array} Returns the new array of filtered property names.
|
||||
* @returns {Array} Returns the function names.
|
||||
*/
|
||||
function baseFunctions(object, props) {
|
||||
return arrayFilter(props, function(key) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import baseToPath from './_baseToPath';
|
||||
import isKey from './_isKey';
|
||||
import castPath from './_castPath.js';
|
||||
import isKey from './_isKey.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.get` without support for default values.
|
||||
@@ -10,13 +11,13 @@ import isKey from './_isKey';
|
||||
* @returns {*} Returns the resolved value.
|
||||
*/
|
||||
function baseGet(object, path) {
|
||||
path = isKey(path, object) ? [path + ''] : baseToPath(path);
|
||||
path = isKey(path, object) ? [path] : castPath(path);
|
||||
|
||||
var index = 0,
|
||||
length = path.length;
|
||||
|
||||
while (object != null && index < length) {
|
||||
object = object[path[index++]];
|
||||
object = object[toKey(path[index++])];
|
||||
}
|
||||
return (index && index == length) ? object : undefined;
|
||||
}
|
||||
|
||||
20
_baseGetAllKeys.js
Normal file
20
_baseGetAllKeys.js
Normal file
@@ -0,0 +1,20 @@
|
||||
import arrayPush from './_arrayPush.js';
|
||||
import isArray from './isArray.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `getAllKeys` and `getAllKeysIn` which uses
|
||||
* `keysFunc` and `symbolsFunc` to get the enumerable property names and
|
||||
* symbols of `object`.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @param {Function} keysFunc The function to get the keys of `object`.
|
||||
* @param {Function} symbolsFunc The function to get the symbols of `object`.
|
||||
* @returns {Array} Returns the array of property names and symbols.
|
||||
*/
|
||||
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
|
||||
var result = keysFunc(object);
|
||||
return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
|
||||
}
|
||||
|
||||
export default baseGetAllKeys;
|
||||
22
_baseGetTag.js
Normal file
22
_baseGetTag.js
Normal file
@@ -0,0 +1,22 @@
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/**
|
||||
* Used to resolve the
|
||||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||||
* of values.
|
||||
*/
|
||||
var objectToString = objectProto.toString;
|
||||
|
||||
/**
|
||||
* The base implementation of `getTag`.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to query.
|
||||
* @returns {string} Returns the `toStringTag`.
|
||||
*/
|
||||
function baseGetTag(value) {
|
||||
return objectToString.call(value);
|
||||
}
|
||||
|
||||
export default baseGetTag;
|
||||
14
_baseGt.js
Normal file
14
_baseGt.js
Normal file
@@ -0,0 +1,14 @@
|
||||
/**
|
||||
* The base implementation of `_.gt` which doesn't coerce arguments.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to compare.
|
||||
* @param {*} other The other value to compare.
|
||||
* @returns {boolean} Returns `true` if `value` is greater than `other`,
|
||||
* else `false`.
|
||||
*/
|
||||
function baseGt(value, other) {
|
||||
return value > other;
|
||||
}
|
||||
|
||||
export default baseGt;
|
||||
11
_baseHas.js
11
_baseHas.js
@@ -4,23 +4,16 @@ var objectProto = Object.prototype;
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/** Built-in value references. */
|
||||
var getPrototypeOf = Object.getPrototypeOf;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.has` without support for deep paths.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @param {Object} [object] The object to query.
|
||||
* @param {Array|string} key The key to check.
|
||||
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
||||
*/
|
||||
function baseHas(object, key) {
|
||||
// Avoid a bug in IE 10-11 where objects with a [[Prototype]] of `null`,
|
||||
// that are composed entirely of index properties, return `false` for
|
||||
// `hasOwnProperty` checks of them.
|
||||
return hasOwnProperty.call(object, key) ||
|
||||
(typeof object == 'object' && key in object && getPrototypeOf(object) === null);
|
||||
return object != null && hasOwnProperty.call(object, key);
|
||||
}
|
||||
|
||||
export default baseHas;
|
||||
|
||||
@@ -2,12 +2,12 @@
|
||||
* The base implementation of `_.hasIn` without support for deep paths.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @param {Object} [object] The object to query.
|
||||
* @param {Array|string} key The key to check.
|
||||
* @returns {boolean} Returns `true` if `key` exists, else `false`.
|
||||
*/
|
||||
function baseHasIn(object, key) {
|
||||
return key in Object(object);
|
||||
return object != null && key in Object(object);
|
||||
}
|
||||
|
||||
export default baseHasIn;
|
||||
|
||||
@@ -3,7 +3,7 @@ var nativeMax = Math.max,
|
||||
nativeMin = Math.min;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.inRange` which doesn't coerce arguments to numbers.
|
||||
* The base implementation of `_.inRange` which doesn't coerce arguments.
|
||||
*
|
||||
* @private
|
||||
* @param {number} number The number to check.
|
||||
|
||||
@@ -1,27 +1,20 @@
|
||||
import indexOfNaN from './_indexOfNaN';
|
||||
import baseFindIndex from './_baseFindIndex.js';
|
||||
import baseIsNaN from './_baseIsNaN.js';
|
||||
import strictIndexOf from './_strictIndexOf.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.indexOf` without `fromIndex` bounds checks.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to search.
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {*} value The value to search for.
|
||||
* @param {number} fromIndex The index to search from.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
function baseIndexOf(array, value, fromIndex) {
|
||||
if (value !== value) {
|
||||
return indexOfNaN(array, fromIndex);
|
||||
}
|
||||
var index = fromIndex - 1,
|
||||
length = array.length;
|
||||
|
||||
while (++index < length) {
|
||||
if (array[index] === value) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
return value === value
|
||||
? strictIndexOf(array, value, fromIndex)
|
||||
: baseFindIndex(array, baseIsNaN, fromIndex);
|
||||
}
|
||||
|
||||
export default baseIndexOf;
|
||||
|
||||
23
_baseIndexOfWith.js
Normal file
23
_baseIndexOfWith.js
Normal file
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* This function is like `baseIndexOf` except that it accepts a comparator.
|
||||
*
|
||||
* @private
|
||||
* @param {Array} array The array to inspect.
|
||||
* @param {*} value The value to search for.
|
||||
* @param {number} fromIndex The index to search from.
|
||||
* @param {Function} comparator The comparator invoked per element.
|
||||
* @returns {number} Returns the index of the matched value, else `-1`.
|
||||
*/
|
||||
function baseIndexOfWith(array, value, fromIndex, comparator) {
|
||||
var index = fromIndex - 1,
|
||||
length = array.length;
|
||||
|
||||
while (++index < length) {
|
||||
if (comparator(array[index], value)) {
|
||||
return index;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
export default baseIndexOfWith;
|
||||
@@ -1,9 +1,12 @@
|
||||
import SetCache from './_SetCache';
|
||||
import arrayIncludes from './_arrayIncludes';
|
||||
import arrayIncludesWith from './_arrayIncludesWith';
|
||||
import arrayMap from './_arrayMap';
|
||||
import baseUnary from './_baseUnary';
|
||||
import cacheHas from './_cacheHas';
|
||||
import SetCache from './_SetCache.js';
|
||||
import arrayIncludes from './_arrayIncludes.js';
|
||||
import arrayIncludesWith from './_arrayIncludesWith.js';
|
||||
import arrayMap from './_arrayMap.js';
|
||||
import baseUnary from './_baseUnary.js';
|
||||
import cacheHas from './_cacheHas.js';
|
||||
|
||||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||||
var nativeMin = Math.min;
|
||||
|
||||
/**
|
||||
* The base implementation of methods like `_.intersection`, without support
|
||||
@@ -17,9 +20,11 @@ import cacheHas from './_cacheHas';
|
||||
*/
|
||||
function baseIntersection(arrays, iteratee, comparator) {
|
||||
var includes = comparator ? arrayIncludesWith : arrayIncludes,
|
||||
length = arrays[0].length,
|
||||
othLength = arrays.length,
|
||||
othIndex = othLength,
|
||||
caches = Array(othLength),
|
||||
maxLength = Infinity,
|
||||
result = [];
|
||||
|
||||
while (othIndex--) {
|
||||
@@ -27,26 +32,33 @@ function baseIntersection(arrays, iteratee, comparator) {
|
||||
if (othIndex && iteratee) {
|
||||
array = arrayMap(array, baseUnary(iteratee));
|
||||
}
|
||||
caches[othIndex] = !comparator && (iteratee || array.length >= 120)
|
||||
maxLength = nativeMin(array.length, maxLength);
|
||||
caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
|
||||
? new SetCache(othIndex && array)
|
||||
: undefined;
|
||||
}
|
||||
array = arrays[0];
|
||||
|
||||
var index = -1,
|
||||
length = array.length,
|
||||
seen = caches[0];
|
||||
|
||||
outer:
|
||||
while (++index < length) {
|
||||
while (++index < length && result.length < maxLength) {
|
||||
var value = array[index],
|
||||
computed = iteratee ? iteratee(value) : value;
|
||||
|
||||
if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator))) {
|
||||
var othIndex = othLength;
|
||||
value = (comparator || value !== 0) ? value : 0;
|
||||
if (!(seen
|
||||
? cacheHas(seen, computed)
|
||||
: includes(result, computed, comparator)
|
||||
)) {
|
||||
othIndex = othLength;
|
||||
while (--othIndex) {
|
||||
var cache = caches[othIndex];
|
||||
if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator))) {
|
||||
if (!(cache
|
||||
? cacheHas(cache, computed)
|
||||
: includes(arrays[othIndex], computed, comparator))
|
||||
) {
|
||||
continue outer;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import baseForOwn from './_baseForOwn';
|
||||
import baseForOwn from './_baseForOwn.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.invert` and `_.invertBy` which inverts
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import apply from './_apply';
|
||||
import baseToPath from './_baseToPath';
|
||||
import isKey from './_isKey';
|
||||
import last from './last';
|
||||
import parent from './_parent';
|
||||
import apply from './_apply.js';
|
||||
import castPath from './_castPath.js';
|
||||
import isKey from './_isKey.js';
|
||||
import last from './last.js';
|
||||
import parent from './_parent.js';
|
||||
import toKey from './_toKey.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.invoke` without support for individual
|
||||
@@ -16,11 +17,11 @@ import parent from './_parent';
|
||||
*/
|
||||
function baseInvoke(object, path, args) {
|
||||
if (!isKey(path, object)) {
|
||||
path = baseToPath(path);
|
||||
path = castPath(path);
|
||||
object = parent(object, path);
|
||||
path = last(path);
|
||||
}
|
||||
var func = object == null ? object : object[path];
|
||||
var func = object == null ? object : object[toKey(path)];
|
||||
return func == null ? undefined : apply(func, object, args);
|
||||
}
|
||||
|
||||
|
||||
26
_baseIsArrayBuffer.js
Normal file
26
_baseIsArrayBuffer.js
Normal file
@@ -0,0 +1,26 @@
|
||||
import isObjectLike from './isObjectLike.js';
|
||||
|
||||
var arrayBufferTag = '[object ArrayBuffer]';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/**
|
||||
* Used to resolve the
|
||||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||||
* of values.
|
||||
*/
|
||||
var objectToString = objectProto.toString;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isArrayBuffer` without Node.js optimizations.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
|
||||
*/
|
||||
function baseIsArrayBuffer(value) {
|
||||
return isObjectLike(value) && objectToString.call(value) == arrayBufferTag;
|
||||
}
|
||||
|
||||
export default baseIsArrayBuffer;
|
||||
27
_baseIsDate.js
Normal file
27
_baseIsDate.js
Normal file
@@ -0,0 +1,27 @@
|
||||
import isObjectLike from './isObjectLike.js';
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var dateTag = '[object Date]';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/**
|
||||
* Used to resolve the
|
||||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||||
* of values.
|
||||
*/
|
||||
var objectToString = objectProto.toString;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isDate` without Node.js optimizations.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is a date object, else `false`.
|
||||
*/
|
||||
function baseIsDate(value) {
|
||||
return isObjectLike(value) && objectToString.call(value) == dateTag;
|
||||
}
|
||||
|
||||
export default baseIsDate;
|
||||
@@ -1,6 +1,6 @@
|
||||
import baseIsEqualDeep from './_baseIsEqualDeep';
|
||||
import isObject from './isObject';
|
||||
import isObjectLike from './isObjectLike';
|
||||
import baseIsEqualDeep from './_baseIsEqualDeep.js';
|
||||
import isObject from './isObject.js';
|
||||
import isObjectLike from './isObjectLike.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isEqual` which supports partial comparisons
|
||||
|
||||
@@ -1,11 +1,10 @@
|
||||
import Stack from './_Stack';
|
||||
import equalArrays from './_equalArrays';
|
||||
import equalByTag from './_equalByTag';
|
||||
import equalObjects from './_equalObjects';
|
||||
import getTag from './_getTag';
|
||||
import isArray from './isArray';
|
||||
import isHostObject from './_isHostObject';
|
||||
import isTypedArray from './isTypedArray';
|
||||
import Stack from './_Stack.js';
|
||||
import equalArrays from './_equalArrays.js';
|
||||
import equalByTag from './_equalByTag.js';
|
||||
import equalObjects from './_equalObjects.js';
|
||||
import getTag from './_getTag.js';
|
||||
import isArray from './isArray.js';
|
||||
import isTypedArray from './isTypedArray.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var PARTIAL_COMPARE_FLAG = 2;
|
||||
@@ -31,7 +30,8 @@ var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
* @param {Object} other The other object to compare.
|
||||
* @param {Function} equalFunc The function to determine equivalents of values.
|
||||
* @param {Function} [customizer] The function to customize comparisons.
|
||||
* @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual` for more details.
|
||||
* @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
|
||||
* for more details.
|
||||
* @param {Object} [stack] Tracks traversed `object` and `other` objects.
|
||||
* @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
|
||||
*/
|
||||
@@ -43,41 +43,39 @@ function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
|
||||
|
||||
if (!objIsArr) {
|
||||
objTag = getTag(object);
|
||||
if (objTag == argsTag) {
|
||||
objTag = objectTag;
|
||||
} else if (objTag != objectTag) {
|
||||
objIsArr = isTypedArray(object);
|
||||
}
|
||||
objTag = objTag == argsTag ? objectTag : objTag;
|
||||
}
|
||||
if (!othIsArr) {
|
||||
othTag = getTag(other);
|
||||
if (othTag == argsTag) {
|
||||
othTag = objectTag;
|
||||
} else if (othTag != objectTag) {
|
||||
othIsArr = isTypedArray(other);
|
||||
}
|
||||
othTag = othTag == argsTag ? objectTag : othTag;
|
||||
}
|
||||
var objIsObj = objTag == objectTag && !isHostObject(object),
|
||||
othIsObj = othTag == objectTag && !isHostObject(other),
|
||||
var objIsObj = objTag == objectTag,
|
||||
othIsObj = othTag == objectTag,
|
||||
isSameTag = objTag == othTag;
|
||||
|
||||
if (isSameTag && !(objIsArr || objIsObj)) {
|
||||
return equalByTag(object, other, objTag, equalFunc, customizer, bitmask);
|
||||
if (isSameTag && !objIsObj) {
|
||||
stack || (stack = new Stack);
|
||||
return (objIsArr || isTypedArray(object))
|
||||
? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
|
||||
: equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
|
||||
}
|
||||
var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
|
||||
if (!isPartial) {
|
||||
if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
|
||||
var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
|
||||
othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
|
||||
|
||||
if (objIsWrapped || othIsWrapped) {
|
||||
return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, customizer, bitmask, stack);
|
||||
var objUnwrapped = objIsWrapped ? object.value() : object,
|
||||
othUnwrapped = othIsWrapped ? other.value() : other;
|
||||
|
||||
stack || (stack = new Stack);
|
||||
return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
|
||||
}
|
||||
}
|
||||
if (!isSameTag) {
|
||||
return false;
|
||||
}
|
||||
stack || (stack = new Stack);
|
||||
return (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, bitmask, stack);
|
||||
return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
|
||||
}
|
||||
|
||||
export default baseIsEqualDeep;
|
||||
|
||||
18
_baseIsMap.js
Normal file
18
_baseIsMap.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import getTag from './_getTag.js';
|
||||
import isObjectLike from './isObjectLike.js';
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var mapTag = '[object Map]';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isMap` without Node.js optimizations.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is a map, else `false`.
|
||||
*/
|
||||
function baseIsMap(value) {
|
||||
return isObjectLike(value) && getTag(value) == mapTag;
|
||||
}
|
||||
|
||||
export default baseIsMap;
|
||||
@@ -1,5 +1,5 @@
|
||||
import Stack from './_Stack';
|
||||
import baseIsEqual from './_baseIsEqual';
|
||||
import Stack from './_Stack.js';
|
||||
import baseIsEqual from './_baseIsEqual.js';
|
||||
|
||||
/** Used to compose bitmasks for comparison styles. */
|
||||
var UNORDERED_COMPARE_FLAG = 1,
|
||||
@@ -44,9 +44,10 @@ function baseIsMatch(object, source, matchData, customizer) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
var stack = new Stack,
|
||||
result = customizer ? customizer(objValue, srcValue, key, object, source, stack) : undefined;
|
||||
|
||||
var stack = new Stack;
|
||||
if (customizer) {
|
||||
var result = customizer(objValue, srcValue, key, object, source, stack);
|
||||
}
|
||||
if (!(result === undefined
|
||||
? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
|
||||
: result
|
||||
|
||||
12
_baseIsNaN.js
Normal file
12
_baseIsNaN.js
Normal file
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* The base implementation of `_.isNaN` without support for number objects.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
|
||||
*/
|
||||
function baseIsNaN(value) {
|
||||
return value !== value;
|
||||
}
|
||||
|
||||
export default baseIsNaN;
|
||||
47
_baseIsNative.js
Normal file
47
_baseIsNative.js
Normal file
@@ -0,0 +1,47 @@
|
||||
import isFunction from './isFunction.js';
|
||||
import isMasked from './_isMasked.js';
|
||||
import isObject from './isObject.js';
|
||||
import toSource from './_toSource.js';
|
||||
|
||||
/**
|
||||
* Used to match `RegExp`
|
||||
* [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
|
||||
*/
|
||||
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
|
||||
|
||||
/** Used to detect host constructors (Safari). */
|
||||
var reIsHostCtor = /^\[object .+?Constructor\]$/;
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var funcProto = Function.prototype,
|
||||
objectProto = Object.prototype;
|
||||
|
||||
/** Used to resolve the decompiled source of functions. */
|
||||
var funcToString = funcProto.toString;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/** Used to detect if a method is native. */
|
||||
var reIsNative = RegExp('^' +
|
||||
funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
|
||||
.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
|
||||
);
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isNative` without bad shim checks.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is a native function,
|
||||
* else `false`.
|
||||
*/
|
||||
function baseIsNative(value) {
|
||||
if (!isObject(value) || isMasked(value)) {
|
||||
return false;
|
||||
}
|
||||
var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
|
||||
return pattern.test(toSource(value));
|
||||
}
|
||||
|
||||
export default baseIsNative;
|
||||
27
_baseIsRegExp.js
Normal file
27
_baseIsRegExp.js
Normal file
@@ -0,0 +1,27 @@
|
||||
import isObject from './isObject.js';
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var regexpTag = '[object RegExp]';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/**
|
||||
* Used to resolve the
|
||||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||||
* of values.
|
||||
*/
|
||||
var objectToString = objectProto.toString;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isRegExp` without Node.js optimizations.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
|
||||
*/
|
||||
function baseIsRegExp(value) {
|
||||
return isObject(value) && objectToString.call(value) == regexpTag;
|
||||
}
|
||||
|
||||
export default baseIsRegExp;
|
||||
18
_baseIsSet.js
Normal file
18
_baseIsSet.js
Normal file
@@ -0,0 +1,18 @@
|
||||
import getTag from './_getTag.js';
|
||||
import isObjectLike from './isObjectLike.js';
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var setTag = '[object Set]';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isSet` without Node.js optimizations.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is a set, else `false`.
|
||||
*/
|
||||
function baseIsSet(value) {
|
||||
return isObjectLike(value) && getTag(value) == setTag;
|
||||
}
|
||||
|
||||
export default baseIsSet;
|
||||
69
_baseIsTypedArray.js
Normal file
69
_baseIsTypedArray.js
Normal file
@@ -0,0 +1,69 @@
|
||||
import isLength from './isLength.js';
|
||||
import isObjectLike from './isObjectLike.js';
|
||||
|
||||
/** `Object#toString` result references. */
|
||||
var argsTag = '[object Arguments]',
|
||||
arrayTag = '[object Array]',
|
||||
boolTag = '[object Boolean]',
|
||||
dateTag = '[object Date]',
|
||||
errorTag = '[object Error]',
|
||||
funcTag = '[object Function]',
|
||||
mapTag = '[object Map]',
|
||||
numberTag = '[object Number]',
|
||||
objectTag = '[object Object]',
|
||||
regexpTag = '[object RegExp]',
|
||||
setTag = '[object Set]',
|
||||
stringTag = '[object String]',
|
||||
weakMapTag = '[object WeakMap]';
|
||||
|
||||
var arrayBufferTag = '[object ArrayBuffer]',
|
||||
dataViewTag = '[object DataView]',
|
||||
float32Tag = '[object Float32Array]',
|
||||
float64Tag = '[object Float64Array]',
|
||||
int8Tag = '[object Int8Array]',
|
||||
int16Tag = '[object Int16Array]',
|
||||
int32Tag = '[object Int32Array]',
|
||||
uint8Tag = '[object Uint8Array]',
|
||||
uint8ClampedTag = '[object Uint8ClampedArray]',
|
||||
uint16Tag = '[object Uint16Array]',
|
||||
uint32Tag = '[object Uint32Array]';
|
||||
|
||||
/** Used to identify `toStringTag` values of typed arrays. */
|
||||
var typedArrayTags = {};
|
||||
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
|
||||
typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
|
||||
typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
|
||||
typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
|
||||
typedArrayTags[uint32Tag] = true;
|
||||
typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
|
||||
typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
|
||||
typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
|
||||
typedArrayTags[errorTag] = typedArrayTags[funcTag] =
|
||||
typedArrayTags[mapTag] = typedArrayTags[numberTag] =
|
||||
typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
|
||||
typedArrayTags[setTag] = typedArrayTags[stringTag] =
|
||||
typedArrayTags[weakMapTag] = false;
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/**
|
||||
* Used to resolve the
|
||||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
|
||||
* of values.
|
||||
*/
|
||||
var objectToString = objectProto.toString;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.isTypedArray` without Node.js optimizations.
|
||||
*
|
||||
* @private
|
||||
* @param {*} value The value to check.
|
||||
* @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
|
||||
*/
|
||||
function baseIsTypedArray(value) {
|
||||
return isObjectLike(value) &&
|
||||
isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
|
||||
}
|
||||
|
||||
export default baseIsTypedArray;
|
||||
@@ -1,8 +1,8 @@
|
||||
import baseMatches from './_baseMatches';
|
||||
import baseMatchesProperty from './_baseMatchesProperty';
|
||||
import identity from './identity';
|
||||
import isArray from './isArray';
|
||||
import property from './property';
|
||||
import baseMatches from './_baseMatches.js';
|
||||
import baseMatchesProperty from './_baseMatchesProperty.js';
|
||||
import identity from './identity.js';
|
||||
import isArray from './isArray.js';
|
||||
import property from './property.js';
|
||||
|
||||
/**
|
||||
* The base implementation of `_.iteratee`.
|
||||
@@ -12,14 +12,15 @@ import property from './property';
|
||||
* @returns {Function} Returns the iteratee.
|
||||
*/
|
||||
function baseIteratee(value) {
|
||||
var type = typeof value;
|
||||
if (type == 'function') {
|
||||
// Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
|
||||
// See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
|
||||
if (typeof value == 'function') {
|
||||
return value;
|
||||
}
|
||||
if (value == null) {
|
||||
return identity;
|
||||
}
|
||||
if (type == 'object') {
|
||||
if (typeof value == 'object') {
|
||||
return isArray(value)
|
||||
? baseMatchesProperty(value[0], value[1])
|
||||
: baseMatches(value);
|
||||
|
||||
25
_baseKeys.js
25
_baseKeys.js
@@ -1,17 +1,30 @@
|
||||
/* Built-in method references for those with the same name as other `lodash` methods. */
|
||||
var nativeKeys = Object.keys;
|
||||
import isPrototype from './_isPrototype.js';
|
||||
import nativeKeys from './_nativeKeys.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.keys` which doesn't skip the constructor
|
||||
* property of prototypes or treat sparse arrays as dense.
|
||||
* The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
|
||||
*
|
||||
* @private
|
||||
* @type Function
|
||||
* @param {Object} object The object to query.
|
||||
* @returns {Array} Returns the array of property names.
|
||||
*/
|
||||
function baseKeys(object) {
|
||||
return nativeKeys(Object(object));
|
||||
if (!isPrototype(object)) {
|
||||
return nativeKeys(object);
|
||||
}
|
||||
var result = [];
|
||||
for (var key in Object(object)) {
|
||||
if (hasOwnProperty.call(object, key) && key != 'constructor') {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export default baseKeys;
|
||||
|
||||
@@ -1,36 +1,33 @@
|
||||
import Reflect from './_Reflect';
|
||||
import iteratorToArray from './_iteratorToArray';
|
||||
import isObject from './isObject.js';
|
||||
import isPrototype from './_isPrototype.js';
|
||||
import nativeKeysIn from './_nativeKeysIn.js';
|
||||
|
||||
/** Used for built-in method references. */
|
||||
var objectProto = Object.prototype;
|
||||
|
||||
/** Built-in value references. */
|
||||
var enumerate = Reflect ? Reflect.enumerate : undefined,
|
||||
propertyIsEnumerable = objectProto.propertyIsEnumerable;
|
||||
/** Used to check objects for own properties. */
|
||||
var hasOwnProperty = objectProto.hasOwnProperty;
|
||||
|
||||
/**
|
||||
* The base implementation of `_.keysIn` which doesn't skip the constructor
|
||||
* property of prototypes or treat sparse arrays as dense.
|
||||
* The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
|
||||
*
|
||||
* @private
|
||||
* @param {Object} object The object to query.
|
||||
* @returns {Array} Returns the array of property names.
|
||||
*/
|
||||
function baseKeysIn(object) {
|
||||
object = object == null ? object : Object(object);
|
||||
if (!isObject(object)) {
|
||||
return nativeKeysIn(object);
|
||||
}
|
||||
var isProto = isPrototype(object),
|
||||
result = [];
|
||||
|
||||
var result = [];
|
||||
for (var key in object) {
|
||||
result.push(key);
|
||||
if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
|
||||
result.push(key);
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// Fallback for IE < 9 with es6-shim.
|
||||
if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) {
|
||||
baseKeysIn = function(object) {
|
||||
return iteratorToArray(enumerate(object));
|
||||
};
|
||||
}
|
||||
|
||||
export default baseKeysIn;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* The function whose prototype all chaining wrappers inherit from.
|
||||
* The function whose prototype chain sequence wrappers inherit from.
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user