A javascript self-interpreter with a focus on sandboxed execution and runtime introspection.
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;
The esper()
function takes an options object as it only parameter.
Type: boolean
Default: false
If true, force all code to be run in strict mode.
Type: string
Default: link
Type: boolean
Default: false
If true, the interpreter's internal stack will be added to the stack trace of exceptions.
Type: Integer
Default: Infinity
The number of AST nodes methods like .runSync()
will evaluate before giving up. Set this
to prevent infinite loops.
Type: boolean
Default: true
Creates a global named Esper
inside the interpreter with introspection and metaprogramming functions.
Esper utilizes the webpack build system to create a single file suitable for use in the browser.
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. |
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.
Minify the resulting build using UglifyJS.
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.