UNPKG

cli-input

Version:

Prompt and user input library.

138 lines (98 loc) 4.03 kB
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