src/index.js
'use strict';
/* @flow */
let Engine;
function esper(opts) {
return new Engine(opts);
}
module.exports = esper;
Engine = require('./Engine');
esper.plugins = {'lang-javascript': require('./lang-javascript.js')};
esper.Engine = Engine;
esper.Evaluator = require('./Evaluator');
esper.Value = require('./Value');
esper.PrimitiveValue = require('./values/PrimitiveValue');
esper.ASTPreprocessor = require('./ASTPreprocessor');
esper.FutureValue = require('./values/FutureValue');
esper.SmartLinkValue = require('./values/SmartLinkValue');
esper.ObjectValue = require('./values/ObjectValue');
esper.StringValue = require('./values/StringValue');
esper.EasyNativeFunction = require('./values/EasyNativeFunction');
esper.EasyObjectValue = require('./values/EasyObjectValue');
esper.CompletionRecord = require('./CompletionRecord');
esper.Realm = require('./Realm');
esper.EvaluatorHandlers = require('./EvaluatorHandlers');
esper.eval = function(source) {
return new Engine().evalSync(source).toNative();
};
esper.version = require('../package.json').version;
esper.languages = {
javascript: esper.plugins['lang-javascript']
};
esper.hooks = {
setupEngine: []
}
esper.plugin = function(name) {
let pl;
if ( !esper.plugins[name] ) {
//console.log("Loading ", name, '../plugins/' + name + '/index.js');
let pl = require('../plugins/' + name + '/index.js');
if ( name != pl.name ) throw new Error(`Loaded plugin as "${name}" but it had name "${pl.name}"`);
if ( !esper.plugins[name] ) esper._registerPlugin(pl);
}
return esper.plugins[name];
};
esper._registerPlugin = function(pl) {
if ( typeof pl.init !== 'function' ) throw new Error('Tried to add a plugin without an init method.');
if ( typeof pl.name !== 'string' ) throw new Error('Tried to add a plugin without a name.');
esper.plugins[pl.name] = pl;
pl.init(esper);
};
var list = require('../plugin-list.js');
esper.pluginList = list;
for ( let pl in list ) {
if ( list[pl] == 'bundle' ) esper.plugin(pl);
}