1.0.1 • Published 2 years ago

expression-language.js v1.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

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

OperatorSample
oralias of ||
||a || b
andalias of &&
&&a && b
|a | b
^a ^ b
&a & b
==a == b
===a === b
isalias of ===
!=a != b
!==a !== b
<a < b
>a > b
>=a >= b
<=a <= b
in10 in [8,10,12]
<<a << b
>>a >> b
+a + b
-a - b
~a ~ b
*a * b
/a / b
%a % b

Unary

OperatorSample
++10
--10
!!a
notalias 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