meval
Version:
Mimic eval in given context
114 lines (90 loc) • 2.62 kB
Markdown
# meval - m(imic) eval
[](https://travis-ci.com/marverix/meval)
[](releases)
[](LICENSE)
## Info
* This is **not** a "safe JavaScript eval"!
* This library only mimics `eval()` functionality to some point.
* It always returns the value of given expression. You always need to provide context in which it will be executed (context **must be** an Object).
* Pure JavaScript! No dependencies! ^^,
* Minified version is only ~16KB
### What's working
* one-argument operators:
* `! ...`
* `~ ...`
* `+ ...`
* `- ...`
* `typeof ...`
* two-argument operators:
* `... . ...` (member accessor)
* `... * ...`
* `... / ...`
* `... % ...`
* `... + ...`
* `... - ...`
* `... >= ...`
* `... <= ...`
* `... > ...`
* `... < ...`
* `... instanceof ...`
* `... in ...`
* `... === ...`
* `... !== ...`
* `... == ...`
* `... != ...`
* `... && ...`
* `... || ...`
* three-argument operator:
* `... ? ... : ...`
* Strings, Numbers (both Integers and Floats) and Booleans
* Node: Interpolation in Strings is not planned for now to be implemented
* properties:
* `undefined`
* `null`
* `NaN`
* `Infinity`
* grouping (paranthesis)
* calling methods
* support nested methods (e.g. `foo(1, bar(item.a, item.b))`)
* accessing allowed global Object:
* `Date`
* `Math`
* `Number`
* `String`
* `Array`
* `Object`
* mixing above
### TODO
* one-argument operators:
* `new` (I don't know if it's good idea?)
## Usage
### Install
It's UMD package, so you can use it both: client-side (browser) and server-side (node.js).
Probably you want to just intall it with `npm`:
```sh
npm install --save meval
```
And then just require it:
```js
const meval = require('meval');
```
But if you don't want to use `npm`, you can always simply download eg. minified version right from [Releases](releases).
### Run
```js
/**
* @param {String} expression Expression to be parsed
* @param {Object} context Context for expression
*/
meval(expression, context)
```
### Example
```js
<< meval('item.a + item.b * 5', { item: { a: 2, b: 3 } })
>> 17
```
## Authors
* **Marek Sierociński** - [marverix](https://github.com/marverix)
See also the list of [contributors](https://github.com/marverix/meval/contributors)
who participated in this project.
## License
This project is licensed under the ISC License - see the [LICENSE](LICENSE) file for details.