UNPKG

mingo

Version:

MongoDB query language for in-memory objects

27 lines (26 loc) 902 B
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 };