Expression-language.js is an engine for javascript that can compile and evaluate expressions written in typescript.
Install via npm
.
npm install expression-language.js --save
or yarn
.
yarn add expression-language.js
Example:
import {Evaluator} from "expression-language.js";
const evaluator = new Evaluator();
// assume your have the following expr.
const expr = "user.ip in allowedIps and user.role is 'admin'";
const context = {
user: {
ip: "127.0.0.1",
role: "admin"
},
allowedIps: ["127.0.0.1", "... other ip"]
};
if (evaluator.evaluate(expr, context)) {
// yes. you're allowed.
doSomething();
}
Supported binary & unary.
Binary
Operator | Sample |
---|---|
or |
alias of ` |
` | |
and |
alias of && |
&& |
a && b |
` | ` |
^ |
a ^ b |
& |
a & b |
== |
a == b |
=== |
a === b |
is |
alias of === |
!= |
a != b |
!== |
a !== b |
< |
a < b |
> |
a > b |
>= |
a >= b |
<= |
a <= b |
in |
10 in [8,10,12] |
<< |
a << b |
>> |
a >> b |
|
a b |
- |
a - b |
~ |
a ~ b |
* |
a * b |
/ |
a / b |
% |
a % b |
Unary
Operator | Sample |
---|---|
|
10 |
- |
-10 |
! |
!a |
not |
alias of ! |
|
a or a |
-- |
-- a or a -- |
Function call.
evaluator.evaluate('say("hello", "world")', {
say: function (left, right) {
return left ' ' right;
}
});
// will output "hello world".
Method also supported.
evaluator.evaluate('people.say("hello", "world")', {
people: {
say: function (left, right) {
return left ' ' right;
}
}
});
You can write multi expressions, separated by SEMICOLON(;); However, evaluator will only return the value of the last expr.
evaluator.evaluate('12; "abc"'); //will ouput "abc"
Assign statement is also supported.
evaluator.evaluate('a = 10; a 2'); //will ouput 12
The MIT license. See MIT