UNPKG

iter-tools-es

Version:
64 lines (52 loc) 1.41 kB
const { wrapWithIterableIterator } = require('../../internal/iterable.js'); const { isInteger, isIntegerOrInfinite } = require('../../internal/number.js'); const { isObject } = require('../is-object/is-object.js'); const { notUndefined } = require('../not-undefined/not-undefined.js'); function* __range(start = 0, end = Infinity, step = 1) { for (let i = start; step > 0 ? i < end : i > end; i += step) { yield i; } } exports.__range = __range; const range = /*#__PURE__*/wrapWithIterableIterator(__range, { growRight: true, validateArgs(args) { let [optsOrEndOrStart, end = Infinity, step] = args; let start; if (isObject(optsOrEndOrStart)) { ({ start, end, step } = optsOrEndOrStart); } else { if (args.length > 1) { start = optsOrEndOrStart; } else { end = optsOrEndOrStart; } } if (notUndefined(start) && !isInteger(start)) { throw new TypeError('The specified start was not an integer'); } if (notUndefined(end) && !isIntegerOrInfinite(end)) { throw new TypeError('The specified end was not an integer or infinite'); } if (notUndefined(step) && !isInteger(step, true)) { throw new TypeError('The specified step was not a non-zero integer'); } args[0] = start; args[1] = end; args[2] = step; } }); exports.range = range;