UNPKG

mingo

Version:

MongoDB query language for in-memory objects

26 lines (25 loc) 927 B
import { ComputeOptions, computeValue } from "../../../core/_internal"; import { assert, has, isArray, isNil, isObject, isString } from "../../../util"; import { errExpectArray, errExpectString } from "../_internal"; const $map = (obj, expr, options) => { assert( isObject(expr) && has(expr, "input", "in"), "$map expects object { input, as, in }" ); const input = computeValue(obj, expr.input, null, options); const foe = options.failOnError; if (isNil(input)) return null; if (!isArray(input)) return errExpectArray(foe, "$map 'input'"); if (!isNil(expr.as) && !isString(expr.as)) return errExpectString(foe, "$map 'as'"); const copts = ComputeOptions.init(options); const k = expr.as || "this"; const locals = { variables: { [k]: null } }; return input.map((o) => { locals.variables[k] = o; return computeValue(obj, expr.in, null, copts.update(locals)); }); }; export { $map };