cel-js
is a powerful and efficient parser and evaluator for Google's Common Expression Language (CEL), built on the robust foundation of the Chevrotain parsing library. This library aims to provide a seamless and easy-to-use interface for working with CEL in JavaScript environments.
Try out cel-js
in your browser with the live demo.
- 🚀 Fast and Efficient Parsing: Leverages Chevrotain for high-performance parsing and evaluation
- 🌍 Isomorphic: Ready for server and browser
- 📦 ESM support
- 📚 Supported CEL Features:
- Literals
- int
- uint
- double
- bool
- string
- bytes
- list
- map
- null
- Conditional Operators
- Ternary (
condition ? true : false
) - Logical And (
&&
) - Logical Or (
||
)
- Ternary (
- Equality Operators (
==
,!=
) - Relational Operators (
<
,<=
,>
,>=
,in
) - Arithmetic Operators (
+
,-
,*
,/
,%
) - Identifiers
- Dot Notation (
foo.bar
) - Index Notation (
foo["bar"]
)
- Dot Notation (
- Macros: (
exists
,has
,size
, etc.)- Exists (
exists(foo)
) - Has (
has(foo, "bar")
) - Size (
size(foo)
)
- Exists (
- Unary Operators (
!true
,-123
)
- Literals
To install cel-js
, use npm:
npm i cel-js
import { evaluate, parse } from 'cel-js'
// use `evaluate` to parse and evaluate an expression
evaluate('2 + 2 * 2') // => 6
evaluate('"foo" + "bar"') // => 'foobar'
evaluate('user.role == "admin"', { user: { role: 'admin' } }) // => true
// use `parse` to parse an expression, useful for validation purposes
const result = parse('2 + 2')
if (!result.isSuccess) {
throw new Error('Invalid syntax')
}
// you can reuse the result of `parse` to evaluate the expression
evaluate(result.cst) // => 4
- Errors types and messages are not 100% consistent with the cel-go implementation