Run code and get every expression's value. Powering js-playgrounds
.
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.
- 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.
npm install inspect-code
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 ]
}
]
If you have a question, found a bug or want to propose a feature, have a look at the issues page.