A conditional expression compiler (MIT Licensed)
μExpr is a compiler for conditional expressions and filters/matchers that can be stored in JSON. It is similar in purpose to https://jsonlogic.com/ with the following differences:
- Simplified syntax, without objects
- Reduced scope that focuses on matching (emitting either
true
orfalse
) - Attains native (25x faster) runtime performance by using
new Function()
with carefully placed guards
import {
compileExpr,
compileMatcher,
compileFilter
} from "../src/uExpr.mjs";
let matcher = compileMatcher(
['||',
['^', '.name', 'foo'],
['&&',
['==', '.meta.dataTopic', 'unsubscribe'],
['some', '.fields', ['==', '.type', 'string']]
],
]
);
If you were to write this logic by hand it would look like this:
let matcher = ($, $i = 0) => (
$.name.startsWith("foo") ||
(
$.meta.dataTopic == "unsubscribe" &&
$.fields.some(($, $i) => $.type == "string")
)
);
Now you can use the compiled function as the callback to Array.filter()
:
let frames = [
{
name: 'foobar',
meta: {
dataTopic: 'subscribe'
},
fields: [
{
type: 'number'
},
]
},
{
name: 'something',
meta: {
dataTopic: 'unsubscribe'
},
fields: [
{
type: 'string'
},
]
},
{
name: 'other',
meta: {
dataTopic: 'cancellation'
},
fields: [
{
type: 'string'
},
]
},
];
let filtered = frames.filter(matcher);