UNPKG

foop

Version:

interfaces that describe their intentions.

52 lines (50 loc) 4.54 kB
var MAX_32_BIT = require('../native/MAX_32_BIT') var toInt32 = require('../cast/toInt32') var isStringPrimitive = require('./stringPrimitive') /** * This implements "is array index" which the ECMAString spec defines as: * > A String property name P is an array index if and only if * > ToString(ToUint32(P)) is equal to P and ToUint32(P) is not equal * > to 2^32−1. * * @since 5.0.0-beta.6 * @name isValidArrayIndex * * @param {string | number} x value to check * @return {boolean} x isValidArrayIndex * * {@link http://www.ecma-international.org/ecma-262/6.0/#sec-array-exotic-objects emca-array-exotic-objects} * {@link https://github.com/andrewplummer/Sugar/blob/master/lib/common.js#L815 sugar-isarrayindex} * {@link https://github.com/facebook/immutable-js/blob/master/src/TrieUtils.js#L58 immutablejs-trieutils} * @see {@link immutablejs-trieutils} * @see {@link emca-array-exotic-objects} * @see {@link sugar-isarrayindex} * @see cast/toInt32 * @see cast/toIndex * @see is/validIndex * * * @example * * isValidArrayIndex(100) //=> true * isValidArrayIndex('100') //=> true * isValidArrayIndex('100.1') //=> false * isValidArrayIndex('eh') //=> false * */ module.exports = function isValidArrayIndex(x) { // @TODO ensure this is good ternary, could be 1 line if // or `!isNumberPrimitive` if (isStringPrimitive(x)) { if ('' + toInt32(x) !== x || toInt32(x) === MAX_32_BIT) { return false } else { return true } } else { return true } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRBcnJheUluZGV4LmpzIiwic291cmNlcyI6WyJ2YWxpZEFycmF5SW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgTUFYXzMyX0JJVCA9IHJlcXVpcmUoJy4uL25hdGl2ZS9NQVhfMzJfQklUJylcbmNvbnN0IHRvSW50MzIgPSByZXF1aXJlKCcuLi9jYXN0L3RvSW50MzInKVxuY29uc3QgaXNTdHJpbmdQcmltaXRpdmUgPSByZXF1aXJlKCcuL3N0cmluZ1ByaW1pdGl2ZScpXG5cbi8qKlxuICogVGhpcyBpbXBsZW1lbnRzIFwiaXMgYXJyYXkgaW5kZXhcIiB3aGljaCB0aGUgRUNNQVN0cmluZyBzcGVjIGRlZmluZXMgYXM6XG4gKiA+IEEgU3RyaW5nIHByb3BlcnR5IG5hbWUgUCBpcyBhbiBhcnJheSBpbmRleCBpZiBhbmQgb25seSBpZlxuICogPiBUb1N0cmluZyhUb1VpbnQzMihQKSkgaXMgZXF1YWwgdG8gUCBhbmQgVG9VaW50MzIoUCkgaXMgbm90IGVxdWFsXG4gKiA+IHRvIDJeMzLiiJIxLlxuICpcbiAqIEBzaW5jZSA1LjAuMC1iZXRhLjZcbiAqIEBuYW1lIGlzVmFsaWRBcnJheUluZGV4XG4gKlxuICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXJ9IHggdmFsdWUgdG8gY2hlY2tcbiAqIEByZXR1cm4ge2Jvb2xlYW59IHggaXNWYWxpZEFycmF5SW5kZXhcbiAqXG4gKiB7QGxpbmsgaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzYuMC8jc2VjLWFycmF5LWV4b3RpYy1vYmplY3RzIGVtY2EtYXJyYXktZXhvdGljLW9iamVjdHN9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2FuZHJld3BsdW1tZXIvU3VnYXIvYmxvYi9tYXN0ZXIvbGliL2NvbW1vbi5qcyNMODE1IHN1Z2FyLWlzYXJyYXlpbmRleH1cbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svaW1tdXRhYmxlLWpzL2Jsb2IvbWFzdGVyL3NyYy9UcmllVXRpbHMuanMjTDU4IGltbXV0YWJsZWpzLXRyaWV1dGlsc31cbiAqIEBzZWUge0BsaW5rIGltbXV0YWJsZWpzLXRyaWV1dGlsc31cbiAqIEBzZWUge0BsaW5rIGVtY2EtYXJyYXktZXhvdGljLW9iamVjdHN9XG4gKiBAc2VlIHtAbGluayBzdWdhci1pc2FycmF5aW5kZXh9XG4gKiBAc2VlIGNhc3QvdG9JbnQzMlxuICogQHNlZSBjYXN0L3RvSW5kZXhcbiAqIEBzZWUgaXMvdmFsaWRJbmRleFxuICpcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIGlzVmFsaWRBcnJheUluZGV4KDEwMCkgICAgICAgICAvLz0+IHRydWVcbiAqICAgIGlzVmFsaWRBcnJheUluZGV4KCcxMDAnKSAgICAgICAvLz0+IHRydWVcbiAqICAgIGlzVmFsaWRBcnJheUluZGV4KCcxMDAuMScpICAgICAvLz0+IGZhbHNlXG4gKiAgICBpc1ZhbGlkQXJyYXlJbmRleCgnZWgnKSAgICAgICAgLy89PiBmYWxzZVxuICpcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc1ZhbGlkQXJyYXlJbmRleCh4KSB7XG4gIC8vIEBUT0RPIGVuc3VyZSB0aGlzIGlzIGdvb2QgdGVybmFyeSwgY291bGQgYmUgMSBsaW5lIGlmXG4gIC8vIG9yIGAhaXNOdW1iZXJQcmltaXRpdmVgXG4gIGlmIChpc1N0cmluZ1ByaW1pdGl2ZSh4KSkge1xuICAgIGlmICgnJyArIHRvSW50MzIoeCkgIT09IHggfHwgdG9JbnQzMih4KSA9PT0gTUFYXzMyX0JJVCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cbiAgZWxzZSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNvbnN0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7QUFDbERBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO0FBQzFDQSxHQUFLLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLG1CQUFtQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ3RELE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxpQkFBaUIsQ0FBQyxDQUFDLEVBQUU7OztFQUc3QyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFO0lBQ3hCLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLFVBQVUsRUFBRTtNQUN0RCxPQUFPLEtBQUs7S0FDYjtTQUNJO01BQ0gsT0FBTyxJQUFJO0tBQ1o7R0FDRjtPQUNJO0lBQ0gsT0FBTyxJQUFJO0dBQ1o7Q0FDRjsifQ==