Skip to content

An engine that can compile and evaluate expressions written in javascript

License

Notifications You must be signed in to change notification settings

Flint194/expression.js

 
 

Repository files navigation

Expression.js

Build Status Coverage Status NPM version GitHub license

Expression.js is an engine for javascript that can compile and evaluate expressions written in typescript.

Installation

Install via npm.

npm install expression.js --save

or yarn.

yarn add expression.js

Getting Started

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

LICENSE

The MIT license. See MIT

About

An engine that can compile and evaluate expressions written in javascript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 96.0%
  • JavaScript 4.0%