UNPKG

mingo

Version:

MongoDB query language for in-memory objects

35 lines (34 loc) 863 B
import { assert, isNumber } from "../../util"; import { applyUpdate, DEFAULT_OPTIONS, walkExpression } from "./_internal"; function $inc(expr, arrayFilters = [], options = DEFAULT_OPTIONS) { for (const amount of Object.values(expr)) { assert(isNumber(amount), `Cannot increment with non-numeric argument.`); } return (obj) => { return walkExpression( expr, arrayFilters, options, (val, node, queries) => { return applyUpdate( obj, node, queries, (o, k) => { if (isNumber(o[k]) || o[k] === void 0) { const previous = o[k]; o[k] ||= 0; o[k] += val; return o[k] !== previous; } return false; }, { buildGraph: true } ); } ); }; } export { $inc };