filter-lang
v1.0.3
Published
A no dependency library for generating arbitrary filter functions.
Maintainers
Readme
filter-lang
A lightweight parser and compiler for evaluating filter expressions against JavaScript objects.
Define conditions like 'age > 30 AND name != "Bob"' and compile them into executable functions.
Useful for when your PM says to add arbitrarily complex filters to an app.
Installation
npm install filter-lang
Usage
import generateFilter from "filter-lang";
const data = [
{ name: "Alice", age: 30, contact: { email: "[email protected]" } },
{ name: "Bob", age: 40, contact: { email: "[email protected]" } },
{ name: "Cindy", age: 25, contact: { email: "[email protected]" } },
];
// Build a filter function from a string expression
const filterFn = generateFilter('age > 30 OR "yahoo" IN contact.email');
// Apply it to your data
const result = data.filter(filterFn);
console.log(result);
// [
// { name: "Bob", age: 40, contact: { email: "[email protected]" } },
// { name: "Cindy", age: 25, contact: { email: "[email protected]" } }
// ]Syntax
Expressions are written as strings. They are parsed into an AST, then compiled into JavaScript functions.
Operators
- Logic
- AND, OR, NOT(expr)
- Comparisons
- =, !=, >, <, >=, <=
- IN (checks if left value is contained in right string/array)
- Special
- HAS field — true if object has the property and it is not null
Values
- Numbers: 42
- Strings: "Alice"
- Variables: property paths using dot notation, e.g. contact.email
Grouping
- Use parentheses (...) to group expressions.
Examples
// Age greater than 30
const f1 = generateFilter('age > 30');
// Name is exactly "Bob"
const f2 = generateFilter('name = "Bob"');
// Name is not Bob
const f3 = generateFilter('name != "Bob"');
// Email contains "yahoo"
const f4 = generateFilter('"yahoo" IN contact.email');
// Object has property "phone"
const f5 = generateFilter('HAS phone');
// dateOfBirth is empty
const f6 = generateFilter('NOT(HAS dateOfBirth)');API
generateFilter(expression: string) => (obj: object) => boolean
Parses and compiles a filter expression string into a function that tests an object.
License
MIT
