iter-tools-es
Version:
The iterable toolbox
40 lines (32 loc) • 955 B
JavaScript
const {
isInteger,
isPositiveInteger,
isIntegerOrInfinite
} = require('../../../internal/number.js');
const {
isObject
} = require('../../is-object/is-object.js');
const makeValidateArgs = methodName => function validateArgs(args) {
let [, optsOrStart = 0, end = Infinity, step = 1] = args;
let start = typeof optsOrStart === 'number' ? optsOrStart : undefined;
if (isObject(optsOrStart)) {
({
start = 0,
end = Infinity,
step = 1
} = optsOrStart);
}
if (!isInteger(start)) {
throw new TypeError(`start argument to ${methodName} must be a number`);
}
if (!isIntegerOrInfinite(end)) {
throw new TypeError(`end argument to ${methodName} must be an integer or infinte`);
}
if (!isPositiveInteger(step)) {
throw new TypeError(`step argument to ${methodName} must be a integer > 0`);
}
args[1] = start;
args[2] = end;
args[3] = step;
};
exports.makeValidateArgs = makeValidateArgs;