lodash.forin
Advanced tools
Comparing version 4.3.1 to 4.4.0
201
index.js
@@ -16,4 +16,3 @@ /** | ||
funcTag = '[object Function]', | ||
genTag = '[object GeneratorFunction]', | ||
stringTag = '[object String]'; | ||
genTag = '[object GeneratorFunction]'; | ||
@@ -23,25 +22,3 @@ /** Used to detect unsigned integer values. */ | ||
/** Detect free variable `global` from Node.js. */ | ||
var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; | ||
/** Detect free variable `self`. */ | ||
var freeSelf = typeof self == 'object' && self && self.Object === Object && self; | ||
/** Used as a reference to the global object. */ | ||
var root = freeGlobal || freeSelf || Function('return this')(); | ||
/** | ||
* The base implementation of `_.property` without support for deep paths. | ||
* | ||
* @private | ||
* @param {string} key The key of the property to get. | ||
* @returns {Function} Returns the new accessor function. | ||
*/ | ||
function baseProperty(key) { | ||
return function(object) { | ||
return object == null ? undefined : object[key]; | ||
}; | ||
} | ||
/** | ||
* The base implementation of `_.times` without support for iteratee shorthands | ||
@@ -65,19 +42,2 @@ * or max array length checks. | ||
/** | ||
* Converts `iterator` to an array. | ||
* | ||
* @private | ||
* @param {Object} iterator The iterator to convert. | ||
* @returns {Array} Returns the converted array. | ||
*/ | ||
function iteratorToArray(iterator) { | ||
var data, | ||
result = []; | ||
while (!(data = iterator.next()).done) { | ||
result.push(data.value); | ||
} | ||
return result; | ||
} | ||
/** Used for built-in method references. */ | ||
@@ -91,3 +51,3 @@ var objectProto = Object.prototype; | ||
* Used to resolve the | ||
* [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring) | ||
* [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) | ||
* of values. | ||
@@ -98,7 +58,32 @@ */ | ||
/** Built-in value references. */ | ||
var Reflect = root.Reflect, | ||
enumerate = Reflect ? Reflect.enumerate : undefined, | ||
propertyIsEnumerable = objectProto.propertyIsEnumerable; | ||
var propertyIsEnumerable = objectProto.propertyIsEnumerable; | ||
/** | ||
* 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; | ||
} | ||
/** | ||
* The base implementation of `baseForOwn` which iterates over `object` | ||
@@ -117,4 +102,3 @@ * properties returned by `keysFunc` and invokes `iteratee` for each property. | ||
/** | ||
* 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. | ||
* | ||
@@ -126,7 +110,12 @@ * @private | ||
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); | ||
} | ||
} | ||
@@ -136,9 +125,2 @@ return result; | ||
// Fallback for IE < 9 with es6-shim. | ||
if (enumerate && !propertyIsEnumerable.call({ 'valueOf': 1 }, 'valueOf')) { | ||
baseKeysIn = function(object) { | ||
return iteratorToArray(enumerate(object)); | ||
}; | ||
} | ||
/** | ||
@@ -169,32 +151,2 @@ * Creates a base function for methods like `_.forIn` and `_.forOwn`. | ||
/** | ||
* Gets the "length" property value of `object`. | ||
* | ||
* **Note:** This function is used to avoid a | ||
* [JIT bug](https://bugs.webkit.org/show_bug.cgi?id=142792) that affects | ||
* Safari on at least iOS 8.1-8.3 ARM64. | ||
* | ||
* @private | ||
* @param {Object} object The object to query. | ||
* @returns {*} Returns the "length" value. | ||
*/ | ||
var getLength = baseProperty('length'); | ||
/** | ||
* Creates an array of index keys for `object` values of arrays, | ||
* `arguments` objects, and strings, otherwise `null` is returned. | ||
* | ||
* @private | ||
* @param {Object} object The object to query. | ||
* @returns {Array|null} Returns index keys, else `null`. | ||
*/ | ||
function indexKeys(object) { | ||
var length = object ? object.length : undefined; | ||
if (isLength(length) && | ||
(isArray(object) || isString(object) || isArguments(object))) { | ||
return baseTimes(length, String); | ||
} | ||
return null; | ||
} | ||
/** | ||
* Checks if `value` is a valid array-like index. | ||
@@ -229,2 +181,21 @@ * | ||
/** | ||
* This function is like | ||
* [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) | ||
* except that it includes inherited enumerable properties. | ||
* | ||
* @private | ||
* @param {Object} object The object to query. | ||
* @returns {Array} Returns the array of property names. | ||
*/ | ||
function nativeKeysIn(object) { | ||
var result = []; | ||
if (object != null) { | ||
for (var key in Object(object)) { | ||
result.push(key); | ||
} | ||
} | ||
return result; | ||
} | ||
/** | ||
* Checks if `value` is likely an `arguments` object. | ||
@@ -248,3 +219,3 @@ * | ||
function isArguments(value) { | ||
// Safari 8.1 incorrectly makes `arguments.callee` enumerable in strict mode. | ||
// Safari 8.1 makes `arguments.callee` enumerable in strict mode. | ||
return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') && | ||
@@ -305,3 +276,3 @@ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag); | ||
function isArrayLike(value) { | ||
return value != null && isLength(getLength(value)) && !isFunction(value); | ||
return value != null && isLength(value.length) && !isFunction(value); | ||
} | ||
@@ -357,4 +328,3 @@ | ||
// The use of `Object#toString` avoids issues with the `typeof` operator | ||
// in Safari 8 which returns 'object' for typed array and weak map constructors, | ||
// and PhantomJS 1.9 which returns 'function' for `NodeList` instances. | ||
// in Safari 8-9 which returns 'object' for typed array and other constructors. | ||
var tag = isObject(value) ? objectToString.call(value) : ''; | ||
@@ -367,4 +337,4 @@ return tag == funcTag || tag == genTag; | ||
* | ||
* **Note:** This function is loosely based on | ||
* [`ToLength`](http://ecma-international.org/ecma-262/6.0/#sec-tolength). | ||
* **Note:** This method is loosely based on | ||
* [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). | ||
* | ||
@@ -376,4 +346,3 @@ * @static | ||
* @param {*} value The value to check. | ||
* @returns {boolean} Returns `true` if `value` is a valid length, | ||
* else `false`. | ||
* @returns {boolean} Returns `true` if `value` is a valid length, else `false`. | ||
* @example | ||
@@ -400,3 +369,3 @@ * | ||
* Checks if `value` is the | ||
* [language type](http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-language-types) | ||
* [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) | ||
* of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) | ||
@@ -458,24 +427,2 @@ * | ||
/** | ||
* Checks if `value` is classified as a `String` primitive or object. | ||
* | ||
* @static | ||
* @since 0.1.0 | ||
* @memberOf _ | ||
* @category Lang | ||
* @param {*} value The value to check. | ||
* @returns {boolean} Returns `true` if `value` is a string, else `false`. | ||
* @example | ||
* | ||
* _.isString('abc'); | ||
* // => true | ||
* | ||
* _.isString(1); | ||
* // => false | ||
*/ | ||
function isString(value) { | ||
return typeof value == 'string' || | ||
(!isArray(value) && isObjectLike(value) && objectToString.call(value) == stringTag); | ||
} | ||
/** | ||
* Iterates over own and inherited enumerable string keyed properties of an | ||
@@ -538,19 +485,3 @@ * object and invokes `iteratee` for each property. The iteratee is invoked | ||
function keysIn(object) { | ||
var index = -1, | ||
isProto = isPrototype(object), | ||
props = baseKeysIn(object), | ||
propsLength = props.length, | ||
indexes = indexKeys(object), | ||
skipIndexes = !!indexes, | ||
result = indexes || [], | ||
length = result.length; | ||
while (++index < propsLength) { | ||
var key = props[index]; | ||
if (!(skipIndexes && (key == 'length' || isIndex(key, length))) && | ||
!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { | ||
result.push(key); | ||
} | ||
} | ||
return result; | ||
return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); | ||
} | ||
@@ -557,0 +488,0 @@ |
{ | ||
"name": "lodash.forin", | ||
"version": "4.3.1", | ||
"version": "4.4.0", | ||
"description": "The lodash method `_.forIn` exported as a module.", | ||
@@ -5,0 +5,0 @@ "homepage": "https://lodash.com/", |
@@ -1,2 +0,2 @@ | ||
# lodash.forin v4.3.1 | ||
# lodash.forin v4.4.0 | ||
@@ -18,2 +18,2 @@ The [lodash](https://lodash.com/) method `_.forIn` exported as a [Node.js](https://nodejs.org/) module. | ||
See the [documentation](https://lodash.com/docs#forIn) or [package source](https://github.com/lodash/lodash/blob/4.3.1-npm-packages/lodash.forin) for more details. | ||
See the [documentation](https://lodash.com/docs#forIn) or [package source](https://github.com/lodash/lodash/blob/4.4.0-npm-packages/lodash.forin) for more details. |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
0
15588
458