mingo
Version:
MongoDB query language for in-memory objects
27 lines (26 loc) • 902 B
JavaScript
import { evalExpr } from "../../../core/_internal";
import { assert, isArray, isInteger } from "../../../util";
import { errExpectInteger } from "../_internal";
const $range = (obj, expr, options) => {
assert(
isArray(expr) && expr.length > 1 && expr.length < 4,
"$range expects array(3)"
);
const [start, end, arg3] = evalExpr(obj, expr, options);
const foe = options.failOnError;
const step = arg3 ?? 1;
if (!isInteger(start)) return errExpectInteger(foe, `$range arg1 <start>`);
if (!isInteger(end)) return errExpectInteger(foe, `$range arg2 <end>`);
if (!isInteger(step) || step === 0)
return errExpectInteger(foe, `$range arg3 <step>`, { min: 0, max: 0 });
const result = new Array();
let counter = start;
while (counter < end && step > 0 || counter > end && step < 0) {
result.push(counter);
counter += step;
}
return result;
};
export {
$range
};