dthree / vorpal

Node's framework for interactive CLIs
http://vorpal.js.org
MIT License
5.64k stars 280 forks source link

Hitting CTRL+C while in Inquirer prompt breaks everything #42

Open scotthovestadt opened 8 years ago

scotthovestadt commented 8 years ago

The output looks like this:

(^C again to quit)
function (str) {
  if (str === undefined) {
    return this._delimiter;
  }
  this._delimiter = String(str).trim() + ' ';
  if (this.isLocal()) {
    this.parent.ui.refresh();
  } else {
    this.parent._send('vantage-delimiter-downstream', 'downstream', {value: str, sessionId: this.id});
  }
  return this;
}
_

You can still type but nothing happens. Only way to recover is hitting CTRL+C again.

dthree commented 8 years ago

Yikes! Okay will check out.

hiteshbal91 commented 8 years ago

Hi Team,

Is above issue solved?

scotthovestadt commented 8 years ago

Issue is still present.

dthree commented 8 years ago

Hey Scott - sorry I haven't been very active recently. A lot of things are changing in life right now, so I haven't had too much time for OSS. Hope to get back fairly soon and close all these issues.

Otherwise, all your help's been very appreciated. I wouldn't mind adding you to the Vorpal team, if you're down with that.

scotthovestadt commented 8 years ago

Don't worry about it; that's how open source is sometimes. You contribute when you can, and mostly when you need it yourself. ;)

I would appreciate the abilities to accept pull requests and deploy code to npm if possible.

dthree commented 8 years ago

Okay Scott, giving you access now.

Feel free to make any patches you need, obviously add tests as you go. Just check with me before committing anything that alters the API, or any breaking changes.

Thanks for all your help!

dthree commented 8 years ago

Okay this should be good now. Can you please try it? v1.5.2

scotthovestadt commented 8 years ago

No luck.

C17PR768G8WP:cli shovestadt$ cli
cli:
function (str) {
  if (str === undefined) {
    return this._delimiter;
  }
  this._delimiter = String(str).trim() + ' ';
  if (this.isLocal()) {
    this.parent.ui.refresh();
  } else {
    this.parent._send('vantage-delimiter-downstream', 'downstream', {value: str, sessionId: this.id});
  }
  return this;
}
function (str) {
  if (str === undefined) {
    return this._delimiter;
  }
  this._delimiter = String(str).trim() + ' ';
  if (this.isLocal()) {
    this.parent.ui.refresh();
  } else {
    this.parent._send('vantage-delimiter-downstream', 'downstream', {value: str, sessionId: this.id});
  }
  return this;
Username: test
Password:

^C/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:75
    throw e;
    ^

TypeError: Cannot read property 'removeListener' of null
    at [object Object].UI.close (/usr/local/lib/node_modules/cli/node_modules/inquirer/lib/ui/baseUI.js:45:10)
    at [object Object].PromptUI.onCompletion (/usr/local/lib/node_modules/cli/node_modules/inquirer/lib/ui/prompt.js:54:8)
    at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.completed (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:1550:12)
    at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onCompleted (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:1489:14)
    at Subject.Rx.Subject.addProperties.onCompleted (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:5871:19)
    at Subject.tryCatcher (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:63:31)
    at AutoDetachObserverPrototype.completed (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:5796:56)
    at AutoDetachObserver.Rx.internals.AbstractObserver.AbstractObserver.onCompleted (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:1489:14)
    at AutoDetachObserver.tryCatcher (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:63:31)
    at AutoDetachObserverPrototype.completed (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:5796:56)
    at AutoDetachObserver.Rx.internals.AbstractObserver.AbstractObserver.onCompleted (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:1489:14)
    at InnerObserver.onCompleted (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:2966:65)
    at InnerObserver.tryCatcher (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:63:31)
    at AutoDetachObserverPrototype.completed (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:5796:56)
    at AutoDetachObserver.Rx.internals.AbstractObserver.AbstractObserver.onCompleted (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:1489:14)
    at AutoDetachObserver.tryCatcher (/usr/local/lib/node_modules/cli/node_modules/rx-lite/rx.lite.js:63:31)
dthree commented 8 years ago

Can you show me the code with the inquirer prompt?

scotthovestadt commented 8 years ago
// Login command only available in CLI, requires user input.
vorpal
  .command('login [userKey] [userSecret]')
  .description('Set user key and user secret key.')
  .action(function(args, callback) {
    this.prompt([
      {
        type: 'input',
        name: 'userKey',
        message: 'User key: ',
        validate: (input) => {
          return input.length > 10;
        }
      },
      {
        type: 'input',
        name: 'userSecret',
        message: 'User secret key: ',
        validate: (input) => {
          return input.length > 20;
        }
      }
    ], (answers) => {
      self.userKey = self.commands.userKey = answers.userKey;
      self.userSecret = self.commands.userSecret = answers.userSecret;
      callback();
    });
  });
}
dthree commented 8 years ago

Thanks. Checking it out.

dthree commented 8 years ago

Oh - haha - it only breaks on multi-inputs. Looks like the Inquirer cancellation doesn't handle an array of inputs.

dthree commented 8 years ago

Ugh. Cancelling inquirer prompts is literally the messiest part of my code, because Inquirer doesn't support command cancellation, so I have to hack it. This is going to take longer to fix.

shayne commented 8 years ago

Running into this as well... where's the like button? :+1:

dthree commented 8 years ago

Got it. This one's... gnarly. Will try to work on it some more soon.

joseph1125 commented 6 years ago

This problem still exists and breaks the REPL