var readline = require('readline'); var log = require('hlogger').createLogger("shell"); var path = require('path'); var shellActivator = { start(context) { this.context = context; this.manager = context.manager; this.stdout = process.stdout; this.registerCommands(context); this.cli = readline.createInterface(process.stdin,this.stdout,(str) => this.completer(str)); this.cli.setPrompt("HCI> "); this.cli.on('line',(cmd) => { if(cmd.length == "") {this.cli.prompt(); return;} var [cmd,...args] = cmd.split(/\s/); var req = { cmd:cmd, args:args } var res = this.stdout; context .emit("cmd:" + cmd,req,res) .done((evt)=> { if(evt.count == 0) { context.emit("cmd",req,res).done(() => { this.cli.prompt() }); } this.cli.prompt(); }); }); this.cli.prompt(); }, stop(context) { log.info("Closing cli"); this.cli.close(); }, completer(str) { var hits = this.manager.listeners .filter((v)=> { var re = new RegExp("^"+ this.context.name + ":cmd:" +str + ".*"); if(re.test(v.name)) { return v; } }).map((v) => v.name.split(":")[2] + " "); return [hits,str]; }, output(str) { this.stdout.write(str + "\n"); }, registerCommands(context) { } } module.exports.bundleActivator = shellActivator;