# node-eval

> require or eval modules

Latest version **2.0.0** (published 2017-11-12) · MIT license · 0 weekly downloads

## Install

```sh
npm install node-eval
pnpm add node-eval
yarn add node-eval
bun add node-eval
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 2.0.0 |
| Published | 2017-11-12 |
| First published | 2016-04-27 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Node | >= 4 |
| Dependencies | 1 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 35 |
| Author | Vasiliy Loginevskiy |
| Maintainers | blond, qfox, yeti-or |
| Keywords | eval, require |

## Links

- npm: https://www.npmjs.com/package/node-eval
- Repository: https://github.com/nodules/node-eval
- Homepage: https://github.com/nodules/node-eval#readme
- Issues: https://github.com/nodules/node-eval/issues
- npm.io page: https://npm.io/package/node-eval

## Dependencies (1)

- [path-is-absolute](https://npm.io/package/path-is-absolute.md) 1.0.1

## Recent versions

- 2.0.0 (latest) — 2017-11-12
- 1.1.1 — 2017-09-19
- 1.1.0 — 2016-10-21
- 1.0.4 — 2016-10-15
- 1.0.3 — 2016-07-13
- 1.0.2 — 2016-05-16
- 1.0.1 — 2016-05-10
- 1.0.0 — 2016-04-27

## README

# node-eval

Eval JS-expression, CommonJS modules and JSON with ease.

[![NPM Status][npm-img]][npm]
[![Travis Status][test-img]][travis]
[![Coverage Status][coveralls-img]][coveralls]
[![Dependency Status][david-img]][david]

[npm]:           http://www.npmjs.org/package/node-eval
[npm-img]:       https://img.shields.io/npm/v/node-eval.svg

[travis]:        https://travis-ci.org/node-eval/node-eval
[test-img]:      https://img.shields.io/travis/node-eval/node-eval/master.svg?label=tests

[coveralls]:     https://coveralls.io/r/node-eval/node-eval
[coveralls-img]: https://img.shields.io/coveralls/node-eval/node-eval/master.svg

[david]:         https://david-dm.org/node-eval/node-evalenb/enb
[david-img]:     https://img.shields.io/david/node-eval/node-eval/master.svg

## Usage

### JS-expression

```js
const nodeEval = require('node-eval');

nodeEval('42 * 42'); // 1764
```

### CommonJS

```js
const nodeEval = require('node-eval');
const moduleContents =
`
    const package = require('./package.json');

    module.exports = {
        name: package.name
    };
`;

nodeEval(moduleContents, './index.js'); // filename need to provide required info to resolve relative paths inside evaluating code

// ➜ { name: 'node-eval' }
```

### JSON

```js
const nodeEval = require('node-eval');
const jsonContents = '{ "name": "node-eval" }';

nodeEval(requireContents, 'my.json'); // filename need to `node-eval` determinate json format by extention

// ➜ { name: 'node-eval' }
```

## API

### nodeEval(contents[, filename, context])

#### contents

Type: `string`

The JS-expression, CommonJS module contents or JSON contents.

#### filename

Type: `string`

The path to file which contents we execute.

The `node-eval` determinate format by extension. If filename ends with `.json` extention, its contents will be parsing with `JSON.parse`. If filename ends with `.js`, its contents will be evaluating with [vm](https://nodejs.org/dist/latest/docs/api/vm.html).

By default expected JS-expression or CommonJS module contents.

```js
const nodeEval = require('node-eval');

nodeEval('42 * 42'/* js by default */); // 1764
nodeEval('42 * 42', 'my.js'); // 1764
nodeEval('{ "name": "node-eval" }', 'my.json'); // '{ name: 'node-eval' }'
```

To evaluating CommonJS module contents filename is required to resolve relative paths inside evaluating code.

```js
const nodeEval = require('node-eval');
const moduleContents =
`
    const package = require('./package.json'); // to resolve this require need to know the path of current module (./index.js)

    module.exports = {
        name: package.name
    };
`;

nodeEval(moduleContents, './index.js'); // filename need to provide required info to resolve relative paths inside evaluating code
```

Internally `node-eval` will resolve passed relative paths using the place it's called (like `require` do).

It may spend additional processor's time on it, so better to pass in absolute path.

```js
const fs = require('fs');
const nodeEval = require('node-eval');

// For example, current path is "/repos/project/lib/file.js".
const modulePath = '../files/another.js';
const moduleContents = fs.readFileSync(modulePath, 'utf-8');

// '../files/another.js' will be resolved to '/repos/project/files/another.js'
nodeEval(moduleContents, modulePath);
```

#### context

Type: `Object`

The object to provide into execute method.

If `context` is specified, then module contents will be evaluating with `vm.runInNewContext`.

If `context` is not specified, then module contents will be evaluating with `vm.runInThisContext`.

With `context` you can provide some like-a-global variables into `node-eval`.

```js
const nodeEval = require('node-eval');

const secretKey = '^___^';
const contents = 'module.exports = secretKey;';

nodeEval(content, { secretKey }); // '^___^'
```

## Related

* [file-eval](https://github.com/node-eval/file-eval)

---
_Source: https://npm.io/package/node-eval · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
