Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/derhuerst/inspect-code
Run code and get the value of every expression.
https://github.com/derhuerst/inspect-code
Last synced: 5 days ago
JSON representation
Run code and get the value of every expression.
- Host: GitHub
- URL: https://github.com/derhuerst/inspect-code
- Owner: derhuerst
- License: isc
- Created: 2016-08-15T14:48:51.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2020-08-01T10:59:48.000Z (over 4 years ago)
- Last Synced: 2024-10-03T23:57:52.265Z (about 1 month ago)
- Language: JavaScript
- Homepage: https://github.com/derhuerst/inspect-code
- Size: 65.4 KB
- Stars: 15
- Watchers: 4
- Forks: 1
- Open Issues: 3
-
Metadata Files:
- Readme: readme.md
- License: license.md
Awesome Lists containing this project
README
# *inspect-code*
**Run code and get every expression's value.** Powering [`js-playgrounds`](https://github.com/derhuerst/js-playgrounds).
[![npm version](https://img.shields.io/npm/v/inspect-code.svg)](https://www.npmjs.com/package/inspect-code)
[![build status](https://img.shields.io/travis/derhuerst/inspect-code.svg)](https://travis-ci.org/derhuerst/inspect-code)
[![dependency status](https://img.shields.io/david/derhuerst/inspect-code.svg)](https://david-dm.org/derhuerst/inspect-code)
[![dev dependency status](https://img.shields.io/david/dev/derhuerst/inspect-code.svg)](https://david-dm.org/derhuerst/inspect-code#info=devDependencies)
![ISC-licensed](https://img.shields.io/github/license/derhuerst/inspect-code.svg)
[![chat on gitter](https://badges.gitter.im/derhuerst.svg)](https://gitter.im/derhuerst)## How it works
*inspect-code* takes a string of code, **instruments it to spy on every expression and uses [`lolex`](https://github.com/sinonjs/lolex) to make `setTimeout` & co. run sync** in the end. After running it inside [Node's `vm`](https://nodejs.org/api/vm.html), it returns every expression, with its code and values. This is similar to what JS code coverage tools do.
Note that, because this module executes the code instead of doing [static analysis](https://en.wikipedia.org/wiki/Static_program_analysis), it is limited by runtime limitations such as runtime errors.
## Caveats
- The code has only access to [things inside the sandbox](lib/sandbox.js).
- Code that does any stack trace magic will behave differently.
- Parsing & instrumenting will make it slower than `vm.runInNewContext` (run the [benchmarks](benchmark.js)).
- There are unsolved problems like spread operators, `async`/`await`, etc.## Installing
```shell
npm install inspect-code
```## Usage
Imagine you want to analyze the following piece of code.
```js
const code = `\
const a = x => x - 1
const b = [1, 2, 3]
const c = b[a(b.length)]
c + 1`
````inspect` will return a list of results, each with `start`, `end`, `code`, `value` and `isException`.
```js
const inspect = require('inspect-code')console.log(inspect(code))
``````
[
{
start: { line: 0, column: 15 },
end: { line: 0, column: 20 },
code: 'x - 1',
values: [ 2 ]
}, {
start: { line: 1, column: 10 },
end: { line: 1, column: 19 },
code: '[1, 2, 3]',
values: [ [ 1, 2, 3 ] ]
}, {
start: { line: 2, column: 14 },
end: { line: 2, column: 22 },
code: 'b.length',
values: [ 3 ]
}, {
start: { line: 2, column: 12 },
end: { line: 2, column: 23 },
code: 'a(b.length)',
values: [ 2 ]
}, {
start: { line: 2, column: 10 },
end: { line: 2, column: 24 },
code: 'b[a(b.length)]',
values: [ 3 ]
}, {
start: { line: 3, column: 0 },
end: { line: 3, column: 5 },
code: 'c + 1',
values: [ 4 ]
}
]
```## Contributing
If you **have a question**, **found a bug** or want to **propose a feature**, have a look at [the issues page](https://github.com/derhuerst/inspect-code/issues).