index.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. var readline = require('readline');
  2. var log = require('hlogger').createLogger("shell");
  3. var path = require('path');
  4. var shellActivator = {
  5. start(context) {
  6. this.context = context;
  7. this.manager = context.manager;
  8. this.stdout = process.stdout;
  9. this.registerCommands(context);
  10. this.cli = readline.createInterface(process.stdin,this.stdout,(str) => this.completer(str));
  11. this.cli.setPrompt("HCI> ");
  12. this.cli.on('line',(cmd) => {
  13. if(cmd.length == "") {this.cli.prompt(); return;}
  14. var [cmd,...args] = cmd.split(/\s/);
  15. var req = { cmd:cmd, args:args }
  16. var res = this.stdout;
  17. context
  18. .emit("cmd:" + cmd,req,res)
  19. .done(()=> {
  20. this.cli.prompt();
  21. });
  22. });
  23. this.cli.prompt();
  24. },
  25. stop(context) {
  26. log.info("Closing cli");
  27. this.cli.close();
  28. },
  29. completer(str) {
  30. var hits = this.manager.listeners
  31. .filter((v)=> {
  32. var re = new RegExp("^"+ this.context.name + ":cmd:" +str + ".*");
  33. if(re.test(v.name)) {
  34. return v;
  35. }
  36. }).map((v) => v.name.split(":")[2] + " ");
  37. return [hits,str];
  38. },
  39. output(str) {
  40. this.stdout.write(str + "\n");
  41. },
  42. registerCommands(context) {
  43. }
  44. }
  45. module.exports.bundleActivator = shellActivator;