esper.js
A javascript self-interpreter with a focus on sandboxed execution and runtime introspection.
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:
- 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.
Big Thanks
Cross-browser Testing Platform and Open Source <3 Provided by Sauce Labs