Skip to content
This repository was archived by the owner on Jun 23, 2023. It is now read-only.

Repository files navigation

expression-eval

Latest NPM releaseMinzipped sizeLicenseCI

JavaScript expression parsing and evaluation.

⚠️UNMAINTAINED: The expression-eval npm package is no longer maintained. The package was originally published as part of a now-completed personal project, and I do not have incentives to continue maintenance. Please feel free to use the code, but be aware that support and updates will not be available.

⚠️SECURITY NOTICE: As mentioned under Security below, this library does not attempt to provide a secure sandbox for evaluation. Evaluation involving user inputs (expressions or values) may lead to unsafe behavior. If your project requires a secure sandbox, consider alternatives such as vm2.

Powered by jsep.

Installation

Install:

npm install --save expression-eval

Import:

// ES6import{parse,eval}from'expression-eval';// CommonJSconst{ parse, eval }=require('expression-eval');// UMD / standalone scriptconst{ parse, eval }=window.expressionEval;

API

Parsing

import{parse}from'expression-eval';constast=parse('1 + foo');

The result of the parse is an AST (abstract syntax tree), like:

{
"type": "BinaryExpression",
"operator": "+",
"left": {
"type": "Literal",
"value": 1,
"raw": "1"
},
"right": {
"type": "Identifier",
"name": "foo"
}
}

Evaluation

import{parse,eval}from'expression-eval';constast=parse('a + b / c');// abstract syntax tree (AST)constvalue=eval(ast,{a: 2,b: 2,c: 5});// 2.4

Alternatively, use evalAsync for asynchronous evaluation.

Compilation

import{compile}from'expression-eval';constfn=compile('foo.bar + 10');fn({foo: {bar: 'baz'}});// 'baz10'

Alternatively, use compileAsync for asynchronous compilation.

Security

Although this package does avoid the use of eval(), it cannot guarantee that user-provided expressions, or user-provided inputs to evaluation, will not modify the state or behavior of your application. This library does not attempt to provide a secure sandbox for evaluation. Evaluation of arbitrary user inputs (expressions or values) may lead to unsafe behavior. If your project requires a secure sandbox, consider alternatives such as vm2.

License

MIT License.

About

JavaScript expression parsing and evaluation.

Resources

Stars

200 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages