codecombat / esper.js

A javascript self-interpreter with a focus on sandboxed execution and runtime introspection.
MIT License
98 stars 19 forks source link

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

Demo | Run Tests | API Docs

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.

License

The MIT License

Contributing

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

Checklist for contributing:

Big Thanks

Cross-browser Testing Platform and Open Source <3 Provided by Sauce Labs