mingo
Version:
MongoDB query language for in-memory objects
26 lines (25 loc) • 750 B
JavaScript
import { evalExpr } from "../../../core/_internal";
import { assert, isArray, isNil, isNumber } from "../../../util";
import { errExpectArray, errInvalidArgs } from "../_internal";
const $pow = (obj, expr, options) => {
assert(isArray(expr) && expr.length === 2, "$pow expects array(2)");
const args = evalExpr(obj, expr, options);
const foe = options.failOnError;
let t_num = true;
for (const v of args) {
if (isNil(v)) return null;
t_num &&= isNumber(v);
}
if (!t_num) {
return errExpectArray(foe, "$pow", {
size: 2,
type: "number"
});
}
if (args[0] === 0 && args[1] < 0)
errInvalidArgs(foe, "$pow cannot raise 0 to a negative exponent");
return Math.pow(args[0], args[1]);
};
export {
$pow
};