inspect-code

1.0.0 • Public • Published

inspect-code

Run code and get every expression's value. Powering js-playgrounds.

npm version build status dependency status dev dependency status ISC-licensed chat on gitter

How it works

inspect-code takes a string of code, instruments it to spy on every expression and uses lolex to make setTimeout & co. run sync in the end. After running it inside Node's vm, 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, it is limited by runtime limitations such as runtime errors.

Caveats

  • The code has only access to things inside the sandbox.
  • Code that does any stack trace magic will behave differently.
  • Parsing & instrumenting will make it slower than vm.runInNewContext (run the benchmarks).
  • There are unsolved problems like spread operators, async/await, etc.

Installing

npm install inspect-code

Usage

Imagine you want to analyze the following piece of code.

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.

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.

Package Sidebar

Install

npm i inspect-code

Weekly Downloads

1

Version

1.0.0

License

ISC

Last publish

Collaborators

  • derhuerst