Skip to content

slince/expression-language.js

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

71 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Expression-language.js

Build Status Coverage Status NPM version GitHub license

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

Installation

Install via npm.

npm install expression-language.js --save

or yarn.

yarn add expression-language.js

Getting Started

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

LICENSE

The MIT license. See MIT