vorpal icon indicating copy to clipboard operation
vorpal copied to clipboard

Can't prompt for more input when running action selected in CLI options

Open soletan opened this issue 8 years ago • 2 comments

Using code provided in https://github.com/dthree/vorpal/issues/171#issuecomment-298230095 I can't use this.prompt() to ask user additional things. Obviously this is due to ui.js requiring to have some parent which is missing then.

According to the template given in comment linked before, when I write an action like this:

Vorpal
	.command( "some-cmd", "some command" )
	.action( function( args, cb ) {
		Promise.resolve( this.prompt( [ {
			type: "string",
			message: "enter your name: ",
			name: "username",
		} ] )
			.then( repl ? cb : null );
	} );

the prompt is showing up when running in REPL mode, but it's omitted when running script with some-cmd selected on CLI like this:

$ node myscript.js some-cmd

I was able to fix this issue by explicitly assigning current command's parent to the UI prior to prompting but I bet this isn't safe due to monkey-patching some more static part of Vorpal from a more instance-like part of code.

Vorpal
	.command( "some-cmd", "some command" )
	.action( function( args, cb ) {
		if ( !repl && !Vorpal.ui.parent ) {
			Vorpal.ui.parent = this.parent;
		}

		Promise.resolve( this.prompt( [ {
			type: "string",
			message: "enter your name: ",
			name: "username",
		} ] )
			.then( repl ? cb : null );
	} );

soletan avatar Aug 06 '17 18:08 soletan

Have you tried returning the promise from action instead of relying on the callback?

milesj avatar Aug 07 '17 19:08 milesj

Using callback is actually required due to #171 as callback isn't to be used in every case. In addition the Promise.resolve() is used here for this.prompt() is returning undefined w/o the fix resulting in a ReferenceError.

soletan avatar Aug 07 '17 19:08 soletan