UNPKG

mingo

Version:

MongoDB query language for in-memory objects

40 lines (39 loc) 1.03 kB
import { assert, isNumber } from "../../util"; import { applyUpdate, DEFAULT_OPTIONS, walkExpression } from "./_internal"; const BIT_OPS = ["and", "or", "xor"]; const $bit = (obj, expr, arrayFilters = [], options = DEFAULT_OPTIONS) => { return walkExpression( expr, arrayFilters, options, (val, node, queries) => { const op = Object.keys(val); assert( op.length === 1 && BIT_OPS.includes(op[0]), `Invalid bit operator '${op[0]}'. Must be one of 'and', 'or', or 'xor'.` ); return applyUpdate( obj, node, queries, (o, k) => { let n = o[k]; const v = val[op[0]]; if (n !== void 0 && !(isNumber(n) && isNumber(v))) return false; n = n || 0; if (op[0] === "and") return (o[k] = n & v) !== n; if (op[0] === "or") return (o[k] = n | v) !== n; if (op[0] === "xor") return (o[k] = n ^ v) !== n; }, { buildGraph: true } ); } ); }; export { $bit };