Skip to content

derhuerst/inspect-code

Repository files navigation

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.

About

Run code and get the value of every expression.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published