keypress-prompt

0.3.2 • Public • Published

keypress-prompt Build Status

NPM

keypress-prompt is a simple prompter to get a single character or digit on the console:

  • returns a promise
  • automatically lowercases the answer to avoid any issue with case
  • triggered on a single keypress (no need to press enter)
  • limited to single character choices
  • does work with numeric choices and attempts to coerce input to choice type
  • rejects promise if ctrl-c is pressed

Example of prompting for a character

$ cat character.js
var prompter = require('keypress-prompt');

prompter
  .prompt('Are you crazy', ['y', 'n'])
  .then(function(choice) {
      console.log('choice', choice);
  });

$ node character.js
Are you crazy [y, n]: n
choice n

Example of prompting for a number

$ cat number.js
var prompter = require('keypress-prompt');

prompter
  .prompt('Number of diners', [1, 2, 3, 4, 5])
  .then(function(choice) {
      console.log('choice', choice);
  });

$ node number.js
Number of diners [1, 2, 3, 4, 5]: 2
choice 2

Note that internally keypress-prompt attempts to coerce the input to the type of the provided choices. If the match is an integer, it will return an integer so in this example, 2 is of type 'number'. It is assumed you won't do something silly like prompt with options like [1, '1']. It will work just maybe not quite how you want it to.

Bailing out

If Ctrl-C is press at the prompt, the promise will be rejected.

Testing

fakeKeypress is provided for use in tests. For example:

it('lowercases the input to avoid issues with case', function(done) {
    var promise = prompter.prompt('Yes or no', ['y', 'n']);

    prompter.fakeKeypress('N');

    promise.then(
        function(key) {
            expect(key).toBe('n');
            done();
        },
        function() {
            expect('promise').toBe('not rejected');
            done();
        }
    );
});

To send Ctrl-C:

fakeKeypress('c', {
    name: 'c',
    ctrl: true
});

Readme

Keywords

none

Package Sidebar

Install

npm i keypress-prompt

Weekly Downloads

2

Version

0.3.2

License

none

Last publish

Collaborators

  • cymen