JavaScript expression parsing and evaluation.
⚠️ UNMAINTAINED: Theexpression-evalnpm 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.
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;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"
}
}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.4Alternatively, use evalAsync for asynchronous evaluation.
import{compile}from'expression-eval';constfn=compile('foo.bar + 10');fn({foo: {bar: 'baz'}});// 'baz10'Alternatively, use compileAsync for asynchronous compilation.
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.
MIT License.