cli-input
Version:
Prompt and user input library.
138 lines (98 loc) • 4.03 kB
Markdown
Table of Contents
=================
* [Prompt](#prompt)
* [Install](#install)
* [Features](#features)
* [Documentation](#documentation)
* [Usage](#usage)
* [Options](#options)
* [Prompt](#prompt-1)
* [prompt(options, cb)](#promptoptions-cb)
* [run(prompts, cb)](#runprompts-cb)
* [select(options, cb)](#selectoptions-cb)
* [multiline(options, cb)](#multilineoptions-cb)
* [Examples](#examples)
* [Developer](#developer)
* [Test](#test)
* [Readme](#readme)
Prompt
======
Prompt and user input library, a component of the [toolkit](https://github.com/freeformsystems/cli-toolkit).
## Install
```
npm i cli-input --save
```
## Features
* ANSI escape sequences fully supported.
* Comprehensive history file support.
* Tab completion functions.
* Schema validation.
* Native type coercion.
* Infinite REPL prompts.
* Collate multiple prompts (set) into an object.
* Collections of common prompt sets (username/password etc).
* Question prompts (arbitrary input).
* Confirmation prompts (binary response).
* Silent prompts (passwords etc).
* Select option lists.
* Multiline input.
## Documentation
See the [examples](https://github.com/freeformsystems/cli-input/blob/master/example), [test specifications](https://github.com/freeformsystems/cli-input/blob/master/test/spec) have a poke around the source and see below.
## Usage
```javascript
var prompt = require('cli-input');
var ps = prompt({infinite: true});
ps.on('value', function(value, options, ps) {
// do something with value
})
ps.run();
```
### Options
The `Prompt` class accepts the following options at instantiation:
* `input`: Input stream, default is `process.stdin`.
* `output`: Output stream, default is `process.stdout`.
* `prompt`: Default prompt string, defaults to `>`.
* `replace`: Replacement character for silent prompts, default is `*`.
* `infinite`: Whether the prompt should be displayed infinitely, default is `false`.
* `native`: Object that defines configuration for native type coercion, default is `null`.
* `restore`: When running in infinite mode and another set of prompts is executed, should the default infinite prompt be displayed at the end of the run, default is `true`.
* `repeat`: Repeat prompt on invalid input, default is `true`.
* `trim`: Remove leading and trailing whitespace from input lines, default is `false`.
* `split`: Split line into an array on the specified string or regexp, default is `null`.
* `delimiter`: Default value for the `:delimiter` format property, default is `⚡`.
* `name`: Default value for the `:name` format property, default is `path.basename(process.argv[1])`.
* `format`: Prompt format string specification, default is `:name :delimiter :location :status :message :default`.
### Prompt
#### prompt(options, cb)
Show a single prompt.
#### run(prompts, cb)
Run an array of prompt definitions and invoke callback with the result. The result contains a `map` property which maps the definitions `key` to the input value.
#### select(options, cb)
Display select menu output followed by a prompt.
#### multiline(options, cb)
Capture multiline input.
***Note this overrides several internal readline module methods, use with discretion***.
## Examples
Examples are in the [example](https://github.com/freeformsystems/cli-input/blob/master/example) directory, execute an example with:
```
node example/repl.js
```
***Caution: the above example executes commands via the shell, be careful.***
## Developer
### Test
Run all tests with code coverage:
```
npm test
```
Execute an individual test with:
```
npm run pretest && NODE_ENV=test ./node_modules/.bin/mocha --reporter list ./test/spec/confirm.js
```
### Readme
To build the readme file from the partial definitions (requires [mdp](https://github.com/freeformsystems/mdp)):
```
npm run readme
```
Generated by [mdp(1)](https://github.com/freeformsystems/mdp).
[toolkit]: https://github.com/freeformsystems/cli-toolkit
[mdp]: https://github.com/freeformsystems/mdp