Generic boolean expression evaluation in JavaScript. Inspired by go-bexpr.
js-bexpr is a JavaScript library to provide generic boolean expression evaluation for JavaScript objects. Under the hood, js-bexpr uses json-pointer, meaning that any path within an object that can be expressed via that library can be used with js-bexpr.
const { makeEvaluator } = require('js-bexpr');
const context = {
foo: {
x: 5,
y: 'foo',
z: true,
test1: 'yes',
test2: 'no'
},
bar: {
x: 42,
y: 'bar',
z: false,
test1: 'no',
test2: 'yes'
}
};
const expressions = [
'"/foo/x" == 5',
'"/bar/y" == "bar"',
'"/foo/baz" == true',
// will error in evaluator creation
'"/bar/test1" != nosuchtoken',
// will error in evaluator creation
'"/foo/test2" == nosuchtoken'
];
expressions.forEach((expression) => {
try {
const evaluate = makeEvaluator(expression);
const result = evaluate(context);
console.log(`Result of expression ${expression} evaluation: ${result}`);
} catch (e) {
console.error(`Failed to run evaluation of expression ${expression}: ${e}`);
}
});
This will output:
Result of expression "/foo/x" == 5 evaluation: true
Result of expression "/bar/y" == "bar" evaluation: true
Result of expression "/foo/baz" == true evaluation: false
Failed to run evaluation of expression "/bar/hidden" != yes: SyntaxError: Expected boolean, null, number, string, or whitespace but "n" found.
Failed to run evaluation of expression "/foo/unexported" == no: SyntaxError: Expected boolean, null, number, string, or whitespace but "n" found.
not
operator is not supported.==
!=
in
not in