Make console a module

This commit is contained in:
Anthony Laibe 2018-08-31 09:24:45 +01:00
parent 234d2d39a1
commit e0f73c7d22
8 changed files with 43 additions and 98 deletions

View File

@ -55,7 +55,6 @@ class EmbarkController {
let self = this; let self = this;
self.context = options.context || [constants.contexts.run, constants.contexts.build]; self.context = options.context || [constants.contexts.run, constants.contexts.build];
let Dashboard = require('./dashboard/dashboard.js'); let Dashboard = require('./dashboard/dashboard.js');
let REPL = require('./dashboard/repl.js');
let webServerConfig = { let webServerConfig = {
enabled: options.runWebserver enabled: options.runWebserver
@ -93,15 +92,6 @@ class EmbarkController {
async.parallel([ async.parallel([
function startDashboard(callback) { function startDashboard(callback) {
if (!options.useDashboard) { if (!options.useDashboard) {
new REPL({
env: engine.env,
plugins: engine.plugins,
version: engine.version,
events: engine.events,
logger: engine.logger,
ipc: engine.ipc,
config: engine.config
}).startConsole();
return callback(); return callback();
} }
@ -110,9 +100,7 @@ class EmbarkController {
logger: engine.logger, logger: engine.logger,
plugins: engine.plugins, plugins: engine.plugins,
version: self.version, version: self.version,
env: engine.env, env: engine.env
ipc: engine.ipc,
config: engine.config
}); });
dashboard.start(function () { dashboard.start(function () {
engine.logger.info(__('dashboard start')); engine.logger.info(__('dashboard start'));
@ -135,6 +123,7 @@ class EmbarkController {
engine.startService("storage"); engine.startService("storage");
engine.startService("codeGenerator"); engine.startService("codeGenerator");
engine.startService("namingSystem"); engine.startService("namingSystem");
engine.startService("console");
engine.events.on('check:backOnline:Ethereum', function () { engine.events.on('check:backOnline:Ethereum', function () {
engine.logger.info(__('Ethereum node detected') + '..'); engine.logger.info(__('Ethereum node detected') + '..');
@ -262,16 +251,6 @@ class EmbarkController {
webpackConfigName: options.webpackConfigName webpackConfigName: options.webpackConfigName
}); });
engine.init(); engine.init();
const repl = new REPL({
env: engine.env,
plugins: engine.plugins,
version: engine.version,
events: engine.events,
logger: engine.logger,
ipc: engine.ipc,
config: engine.config
});
repl.startConsole();
async.waterfall([ async.waterfall([
function startServices(callback) { function startServices(callback) {
let pluginList = engine.plugins.listPlugins(); let pluginList = engine.plugins.listPlugins();
@ -292,11 +271,13 @@ class EmbarkController {
engine.startService("codeGenerator"); engine.startService("codeGenerator");
engine.startService("webServer"); engine.startService("webServer");
engine.startService("namingSystem"); engine.startService("namingSystem");
engine.startService("console");
return callback(); return callback();
} }
engine.startService("codeRunner"); engine.startService("codeRunner");
engine.startService("console");
callback(); callback();
}); });
}, },
@ -345,7 +326,7 @@ class EmbarkController {
}); });
}, },
function startREPL(callback) { function startREPL(callback) {
repl.start(callback); new REPL({events: engine.events, env: engine.env}).start(callback);
} }
], function (err, _result) { ], function (err, _result) {
if (err) { if (err) {

View File

@ -2,7 +2,6 @@ let async = require('async');
let windowSize = require('window-size'); let windowSize = require('window-size');
let Monitor = require('./monitor.js'); let Monitor = require('./monitor.js');
let Console = require('./console.js');
class Dashboard { class Dashboard {
constructor(options) { constructor(options) {
@ -11,8 +10,6 @@ class Dashboard {
this.plugins = options.plugins; this.plugins = options.plugins;
this.version = options.version; this.version = options.version;
this.env = options.env; this.env = options.env;
this.ipc = options.ipc;
this.config = options.config;
this.events.on('firstDeploymentDone', this.checkWindowSize.bind(this)); this.events.on('firstDeploymentDone', this.checkWindowSize.bind(this));
this.events.on('outputDone', this.checkWindowSize.bind(this)); this.events.on('outputDone', this.checkWindowSize.bind(this));
@ -26,45 +23,23 @@ class Dashboard {
} }
start(done) { start(done) {
let console, monitor; let monitor;
let self = this;
async.waterfall([ monitor = new Monitor({env: this.env, events: this.events});
function startConsole(callback) { this.logger.logFunction = monitor.logEntry;
console = new Console({
events: self.events,
plugins: self.plugins,
version: self.version,
ipc: self.ipc,
logger: self.logger,
config: self.config
});
callback();
},
function startMonitor(callback) {
monitor = new Monitor({env: self.env, console: console, events: self.events});
self.logger.logFunction = monitor.logEntry;
self.events.on('contractsState', monitor.setContracts); this.events.on('contractsState', monitor.setContracts);
self.events.on('status', monitor.setStatus.bind(monitor)); this.events.on('status', monitor.setStatus.bind(monitor));
self.events.on('servicesState', monitor.availableServices.bind(monitor)); this.events.on('servicesState', monitor.availableServices.bind(monitor));
self.events.setCommandHandler("console:command", monitor.executeCmd.bind(monitor)); this.events.setCommandHandler("console:command", monitor.executeCmd.bind(monitor));
self.logger.info('========================'.bold.green); this.logger.info('========================'.bold.green);
self.logger.info((__('Welcome to Embark') + ' ' + self.version).yellow.bold); this.logger.info((__('Welcome to Embark') + ' ' + this.version).yellow.bold);
self.logger.info('========================'.bold.green); this.logger.info('========================'.bold.green);
// TODO: do this after monitor is rendered done();
callback();
}
], function () {
self.console = console;
self.monitor = monitor;
done();
});
} }
} }
module.exports = Dashboard; module.exports = Dashboard;

View File

@ -366,11 +366,10 @@ class Monitor {
} }
executeCmd(cmd, cb) { executeCmd(cmd, cb) {
const self = this; this.logText.log('console> '.bold.green + cmd);
self.logText.log('console> '.bold.green + cmd); this.events.request('console:executeCmd', cmd, (err, result) => {
self.console.executeCmd(cmd, function (err, result) {
let message = err || result; let message = err || result;
self.logText.log(message); this.logText.log(message);
if (cb) { if (cb) {
cb(message); cb(message);
} }

View File

@ -1,32 +1,13 @@
const repl = require("repl"); const repl = require("repl");
const util = require("util"); const util = require("util");
const Console = require('./console.js');
class REPL { class REPL {
constructor(options) { constructor(options) {
this.logger = options.logger;
this.env = options.env;
this.plugins = options.plugins;
this.events = options.events; this.events = options.events;
this.version = options.version; this.env = options.env
this.ipc = options.ipc;
this.config = options.config;
}
startConsole(){
this.console = new Console({
events: this.events,
plugins: this.plugins,
version: this.version,
ipc: this.ipc,
logger: this.logger,
config: this.config
});
} }
enhancedEval(cmd, context, filename, callback) { enhancedEval(cmd, context, filename, callback) {
this.console.executeCmd(cmd.trim(), callback); this.events.request('console:executeCmd', cmd.trim(), callback);
} }
enhancedWriter(output) { enhancedWriter(output) {
@ -38,7 +19,6 @@ class REPL {
} }
start(done) { start(done) {
this.startConsole();
this.replServer = repl.start({ this.replServer = repl.start({
prompt: "Embark (" + this.env + ") > ", prompt: "Embark (" + this.env + ") > ",
useGlobal: true, useGlobal: true,

View File

@ -60,6 +60,7 @@ class Engine {
"fileWatcher": this.fileWatchService, "fileWatcher": this.fileWatchService,
"webServer": this.webServerService, "webServer": this.webServerService,
"namingSystem": this.namingSystem, "namingSystem": this.namingSystem,
"console": this.console,
"web3": this.web3Service, "web3": this.web3Service,
"libraryManager": this.libraryManagerService, "libraryManager": this.libraryManagerService,
"processManager": this.processManagerService, "processManager": this.processManagerService,
@ -129,6 +130,17 @@ class Engine {
this.registerModule('ens'); this.registerModule('ens');
} }
console(_options) {
this.registerModule('console', {
events: this.events,
plugins: this.plugins,
version: this.version,
ipc: this.ipc,
logger: this.logger,
config: this.config
});
}
codeRunnerService(_options) { codeRunnerService(_options) {
const CodeRunner = require('./modules/coderunner/codeRunner.js'); const CodeRunner = require('./modules/coderunner/codeRunner.js');
this.codeRunner = new CodeRunner({ this.codeRunner = new CodeRunner({

View File

@ -13,7 +13,6 @@ class CodeRunner {
this.IpcClientListen(); this.IpcClientListen();
this.registerEvents(); this.registerEvents();
this.registerCommands(); this.registerCommands();
this.events.emit('runcode:ready');
} }
registerIpcEvents() { registerIpcEvents() {

View File

@ -1,9 +1,10 @@
let utils = require('../../lib/utils/utils.js'); let utils = require('../../utils/utils');
const EmbarkJS = require('embarkjs'); const EmbarkJS = require('embarkjs');
const IpfsApi = require('ipfs-api'); const IpfsApi = require('ipfs-api');
const Web3 = require('web3'); const Web3 = require('web3');
class Console { class Console {
constructor(options) { constructor(_embark, options) {
this.events = options.events; this.events = options.events;
this.plugins = options.plugins; this.plugins = options.plugins;
this.version = options.version; this.version = options.version;
@ -14,7 +15,7 @@ class Console {
if (this.ipc.isServer()) { if (this.ipc.isServer()) {
this.ipc.on('console:executeCmd', this.executeCmd.bind(this)); this.ipc.on('console:executeCmd', this.executeCmd.bind(this));
} }
this.events.setCommandHandler("console:executeCmd", this.executeCmd.bind(this));
this.registerEmbarkJs(); this.registerEmbarkJs();
} }
@ -72,11 +73,9 @@ class Console {
} }
registerEmbarkJs() { registerEmbarkJs() {
this.events.on('runcode:ready', () => { this.events.emit('runcode:register', 'IpfsApi', IpfsApi, false);
this.events.emit('runcode:register', 'IpfsApi', IpfsApi, false); this.events.emit('runcode:register', 'Web3', Web3, false);
this.events.emit('runcode:register', 'Web3', Web3, false); this.events.emit('runcode:register', 'EmbarkJS', EmbarkJS, false);
this.events.emit('runcode:register', 'EmbarkJS', EmbarkJS, false);
});
this.events.on('code-generator-ready', () => { this.events.on('code-generator-ready', () => {
if (this.ipc.connected) { if (this.ipc.connected) {

View File

@ -1,5 +1,5 @@
/*globals describe, it*/ /*globals describe, it*/
let Console = require('../cmd/dashboard/console.js'); let Console = require('../lib/modules/console/');
let Plugins = require('../lib/core/plugins.js'); let Plugins = require('../lib/core/plugins.js');
let IPC = require('../lib/core/ipc.js'); let IPC = require('../lib/core/ipc.js');
let assert = require('assert'); let assert = require('assert');
@ -8,8 +8,8 @@ let version = require('../package.json').version;
describe('embark.Console', function() { describe('embark.Console', function() {
let ipc = new IPC({ipcRole: 'none'}); let ipc = new IPC({ipcRole: 'none'});
let plugins = new Plugins({plugins: {}}); let plugins = new Plugins({plugins: {}});
let events = {on: () => {}} let events = {on: () => {}, setCommandHandler: () => {}, emit: () => {}};
let console = new Console({plugins, version, ipc, events}); let console = new Console({}, {plugins, version, ipc, events});
describe('#executeCmd', function() { describe('#executeCmd', function() {