UNPKG

node-jet

Version:

Jet Realtime Message Bus for the Web. Daemon and Peer implementation.

43 lines (42 loc) 1.47 kB
import { InvalidArgument } from '../errors.js'; import { getValue } from '../utils.js'; const generators = { equals: (field, other) => (x) => getValue(x, field) === other, lessThan: (field, other) => (x) => getValue(x, field) < other, equalsNot: (field, other) => (x) => getValue(x, field) !== other, greaterThan: (field, other) => (x) => getValue(x, field) > other, isType: (field, other) => (x) => typeof getValue(x, field) === other }; const generatePredicate = (field, rule) => { const gen = generators[rule.operator]; if (!gen) { throw new InvalidArgument('unknown rule ' + rule.operator); } if (rule.value === null) { throw new InvalidArgument('unknown value cant be nullish'); } return gen(field, rule.value); }; const createValuePredicates = (valueOptions) => { const predicates = []; Object.entries(valueOptions).forEach(([field, rule]) => { predicates.push(generatePredicate(field, rule)); }); return predicates; }; export const create = (options) => { if (options.value) { const predicates = createValuePredicates(options.value); return (value) => { if (value === undefined) return false; for (let i = 0; i < predicates.length; ++i) { if (!predicates[i](value)) { return false; } } return true; }; } return () => true; };