UNPKG

foop

Version:

interfaces that describe their intentions.

44 lines (40 loc) 3.77 kB
var size = require('../util/size') var isValidArrayIndex = require('../is/validArrayIndex') var isStringPrimitive = require('../is/stringPrimitive') var toInt32 = require('../cast/toInt32') var toLength = require('../cast/toLength') /** * @name toIndex * @alias castToIndex * * @since 5.0.0-beta.6 * @memberOf cast * * @param {number} index index to cast * @param {number | Array} [list=1] number or array * @return {number} valid index * * {@link https://github.com/facebook/immutable-js/blob/master/src/TrieUtils.js#L58 immutable-js-toindex} * {@link https://tc39.github.io/ecma262/#sec-toindex emca-toindex} * @see {@link emca-toindex} * @see {@link immutable-js-toindex} * * @see cast/toLength * @see cast/toInt32 * @see cast/toSize * @see is/validArrayIndex * @see is/stringPrimitive */ module.exports = function toIndex(index, list) { if (isValidArrayIndex(index) && isStringPrimitive(index)) { index = toInt32(index) } index = toLength(index) // below 0, add index (keep above 0) // else, index return index < 0 // @NOTE ensure above 0 if index is way below 0 ? (size(list || 1) + index) || 1 : index } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9JbmRleC5qcyIsInNvdXJjZXMiOlsidG9JbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBzaXplID0gcmVxdWlyZSgnLi4vdXRpbC9zaXplJylcbmNvbnN0IGlzVmFsaWRBcnJheUluZGV4ID0gcmVxdWlyZSgnLi4vaXMvdmFsaWRBcnJheUluZGV4JylcbmNvbnN0IGlzU3RyaW5nUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaXMvc3RyaW5nUHJpbWl0aXZlJylcbmNvbnN0IHRvSW50MzIgPSByZXF1aXJlKCcuLi9jYXN0L3RvSW50MzInKVxuY29uc3QgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9jYXN0L3RvTGVuZ3RoJylcblxuLyoqXG4gKiBAbmFtZSB0b0luZGV4XG4gKiBAYWxpYXMgY2FzdFRvSW5kZXhcbiAqXG4gKiBAc2luY2UgNS4wLjAtYmV0YS42XG4gKiBAbWVtYmVyT2YgY2FzdFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBpbmRleCB0byBjYXN0XG4gKiBAcGFyYW0ge251bWJlciB8IEFycmF5fSBbbGlzdD0xXSBudW1iZXIgb3IgYXJyYXlcbiAqIEByZXR1cm4ge251bWJlcn0gdmFsaWQgaW5kZXhcbiAqXG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2ltbXV0YWJsZS1qcy9ibG9iL21hc3Rlci9zcmMvVHJpZVV0aWxzLmpzI0w1OCBpbW11dGFibGUtanMtdG9pbmRleH1cbiAqIHtAbGluayBodHRwczovL3RjMzkuZ2l0aHViLmlvL2VjbWEyNjIvI3NlYy10b2luZGV4IGVtY2EtdG9pbmRleH1cbiAqIEBzZWUge0BsaW5rIGVtY2EtdG9pbmRleH1cbiAqIEBzZWUge0BsaW5rIGltbXV0YWJsZS1qcy10b2luZGV4fVxuICpcbiAqIEBzZWUgY2FzdC90b0xlbmd0aFxuICogQHNlZSBjYXN0L3RvSW50MzJcbiAqIEBzZWUgY2FzdC90b1NpemVcbiAqIEBzZWUgaXMvdmFsaWRBcnJheUluZGV4XG4gKiBAc2VlIGlzL3N0cmluZ1ByaW1pdGl2ZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHRvSW5kZXgoaW5kZXgsIGxpc3QpIHtcbiAgaWYgKGlzVmFsaWRBcnJheUluZGV4KGluZGV4KSAmJiBpc1N0cmluZ1ByaW1pdGl2ZShpbmRleCkpIHtcbiAgICBpbmRleCA9IHRvSW50MzIoaW5kZXgpXG4gIH1cblxuICBpbmRleCA9IHRvTGVuZ3RoKGluZGV4KVxuXG4gIC8vIGJlbG93IDAsIGFkZCBpbmRleCAoa2VlcCBhYm92ZSAwKVxuICAvLyBlbHNlLCBpbmRleFxuICByZXR1cm4gaW5kZXggPCAwXG4gICAgLy8gQE5PVEUgZW5zdXJlIGFib3ZlIDAgaWYgaW5kZXggaXMgd2F5IGJlbG93IDBcbiAgICA/IChzaXplKGxpc3QgfHwgMSkgKyBpbmRleCkgfHwgMVxuICAgIDogaW5kZXhcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUNwQ0EsR0FBSyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUMxREEsR0FBSyxDQUFDLGlCQUFpQixHQUFHLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQztBQUMxREEsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsaUJBQWlCLENBQUM7QUFDMUNBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUF3QjVDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsU0FBUyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRTtFQUM3QyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ3hELEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDO0dBQ3ZCOztFQUVELEtBQUssR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDOzs7O0VBSXZCLE9BQU8sS0FBSyxHQUFHLENBQUM7O01BRVosQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUM7TUFDOUIsS0FBSztDQUNWOyJ9