Skip to content

A javascript self-interpreter with a focus on sandboxed execution and runtime introspection.

License

Notifications You must be signed in to change notification settings

Extersky/esper.js

 
 

Repository files navigation

esper.js

A javascript self-interpreter with a focus on sandboxed execution and runtime introspection.

NPM version NPM downloads MIT License Build Status Coverage Status

Usage

At the most basic level, esper's eval function can be used as a safe replacement for the native eval function.

var four = esper.eval('2+2');

More functionality is available via an Engine object.

var engine = esper({
	
});

engine.addGlobal('two', 2);
engine.load('2+two');
var result = engine.runSync();
result.toNative() === 4;

Options

The esper() function takes an options object as it only parameter.

strict

Type: boolean Default: false

If true, force all code to be run in strict mode.

foreignObjectMode

Type: string Default: link

addInternalStack

Type: boolean Default: false

If true, the interpreter's internal stack will be added to the stack trace of exceptions.

executionLimit

Type: Integer Default: Infinity

The number of AST nodes methods like .runSync() will evaluate before giving up. Set this to prevent infinite loops.

exposeEsperGlobal

Type: boolean Default: true

Creates a global named Esper inside the interpreter with introspection and metaprogramming functions.

Building

Esper utilizes the webpack build system to create a single file suitable for use in the browser.

--env.profile=<profile>

Profile Use
web The default profile. Creates an single ES5 compatible file with self contained regenerator-runtime and es6 polyfills.
modern Creates an single ES6 compatible file. More performance than web, but requires a modern browser.
nashorn Crates a single file targeting the Java Nashorn engine. Uses Nashorn's parser instead of embedded esprima.

--env.test

Creates a test builds that embeds the unit tests. Including this file in a <script> tag will take over the page and display the test output in real time.

--env.min

Minify the resulting build using UglifyJS.

Contributing

If you'd like to contribute, please sign the CodeCombat contributor license agreement so we can accept your pull requests.

Checklist for contributing:

  • All tests pass. npm run test
  • No code style problems. npm run style
  • Code coverage increased. npm run cover
  • webpack --test build passes test in browser.

License

The MIT License

About

A javascript self-interpreter with a focus on sandboxed execution and runtime introspection.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 98.9%
  • Other 1.1%