Expression.js is an engine for javascript that can compile and evaluate expressions written in typescript.
Install via npm
.
npm install expression.js --save
or yarn
.
yarn add expression.js
Example:
import {Evaluator} from "expression.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