• Stars
    star
    148
  • Rank 249,983 (Top 5 %)
  • Language
    JavaScript
  • License
    MIT License
  • Created almost 12 years ago
  • Updated almost 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Simple command line prompting utility for nodejs

promptly

NPM version Downloads Build Status Coverage Status Dependency status Dev Dependency status

Simple command line prompting utility.

Installation

$ npm install promptly

API

.prompt(message, [options])

Prompts for a value, printing the message and waiting for the input.
Returns a promise that resolves with the input.

Available options:

Name Description Type Default
default The default value to use if the user provided an empty input string undefined
trim Trims the user input boolean true
validator A validator or an array of validators function/array undefined
retry Retry if any of the validators fail boolean true
silent Do not print what the user types boolean false
replace Replace each character with the specified string when silent is true string ''
input Input stream to read from Stream process.stdin
output Output stream to write to Stream process.stdout
timeout Timeout in ms number 0
useDefaultOnTimeout Return default value if timed out boolean false

The same options are available to all functions but with different default values.

Examples

  • Ask for a name:

    const promptly = require('promptly');
    
    (async () => {
        const name = await promptly.prompt('Name: ');
        console.log(name);
    })();
  • Ask for a name with a constraint (non-empty value and length > 2):

    const promptly = require('promptly');
    
    const validator = function (value) {
        if (value.length < 2) {
            throw new Error('Min length of 2');
        }
    
        return value;
    };
    
    (async () => {
        const name = await promptly.prompt('Name: ', { validator });
        // Since retry is true by default, promptly will keep asking for a name until it is valid
        // Between each prompt, the error message from the validator will be printed
        console.log('Name is:', name);
    })();
  • Same as above but do not retry automatically:

    const promptly = require('promptly');
    
    const validator = function (value) {
        if (value.length < 2) {
            throw new Error('Min length of 2');
        }
    
        return value;
    };
    
    (async () => {
        try {
            const name = await promptly.prompt('Name: ', { validator, retry: false });
            console.log('Name is:', name);
        } catch (err) {
            console.error('Invalid name:')
            console.error(`- ${err.message}`);
        }
    })();
  • Ask for a name with timeout:

    const promptly = require('promptly');
    
    (async () => {
        const name = await promptly.prompt('Name: ', { timeout: 3000 });
        console.log(name);
    })();

    It throws an Error("timed out") if timeout is reached and no default value is provided

Validators

The validators have two purposes: to check and transform input. They can be asynchronous or synchronous

const validator = (value) => {
    // Validation example, throwing an error when invalid
    if (value.length !== 2) {
        throw new Error('Length must be 2');
    }

    // Parse the value, modifying it
    return value.replace('aa', 'bb');
}

const asyncValidator = async (value) => {
    await myfunc();
    return value;
}

.confirm(message, [options])

Ask the user for confirmation, printing the message and waiting for the input.
Returns a promise that resolves with the answer.

Truthy values are: y, yes and 1. Falsy values are n, no, and 0.
Comparison is made in a case insensitive way.

The options are the same as prompt, except that trim defaults to false.

Examples

  • Ask to confirm something important:

    const promptly = require('promptly');
    
    (async () => {
        const answer = await promptly.confirm('Are you really sure? ');
    
        console.log('Answer:', answer);
    })();

.choose(message, choices, [options])

Ask the user to choose between multiple choices (array of choices), printing the message and waiting for the input.
Returns a promise that resolves with the choice.

The options are the same as prompt, except that trim defaults to false.

Examples

  • Ask to choose between:

    const promptly = require('promptly');
    
    (async () => {
        const choice = await promptly.choose('Do you want an apple or an orange? ', ['apple', 'orange']);
    
        console.log('Choice:', choice);
    })();

.password(message, [options])

Prompts for a password, printing the message and waiting for the input.
Returns a promise that resolves with the password.

The options are the same as prompt, except that trim and silent default to false and default is an empty string (to allow empty passwords).

Examples

  • Ask for a password:

    const promptly = require('promptly');
    
    (async () => {
        const password = await promptly.password('Type a password: ');
    
        console.log('Password:', password);
    })();
  • Ask for a password but mask the input with *:

    const promptly = require('promptly');
    
    (async () => {
        const password = await promptly.password('Type a password: ', { replace: '*' });
    
        console.log('Password:', password);
    })();

Tests

$ npm test
$ npm test -- --watch during development

License

Released under the MIT License.

More Repositories

1

node-cross-spawn

A cross platform solution to node's spawn and spawnSync
JavaScript
1,067
star
2

next-layout

Add persistent and nested layouts to your Next.js projects in a declarative way
JavaScript
257
star
3

node-proper-lockfile

An inter-process and inter-machine lockfile utility that works on a local or network file system.
JavaScript
221
star
4

gatsby-plugin-ipfs

Adds support for deploying Gatsby to IPFS by ensuring that assets are relative
JavaScript
113
star
5

next-router-scroll

Take control of when scroll is updated and restored in your Next.js projects.
JavaScript
105
star
6

next-with-moxy

MOXY's boilerplate to accelerate the setup of new Next.js based web applications
JavaScript
101
star
7

js-proper-url-join

Like path.join but for a URL
JavaScript
40
star
8

next-intl

Library to integrate react-intl with Next.js.
JavaScript
40
star
9

webpack-isomorphic-dev-middleware

The webpack-dev-middleware, but for isomorphic applications
JavaScript
39
star
10

react-with-moxy

MOXY's boilerplate to create isomorphic react applications
JavaScript
36
star
11

js-deep-for-each

Recursively iterates over collections arrays and objects
JavaScript
35
star
12

node-token-dealer

Circumvent API rate limits by having several API tokens and let the dealer manage and give them to you
JavaScript
24
star
13

react-native-with-moxy

MOXY's boilerplate to accelerate the setup of new React Native mobile apps
JavaScript
22
star
14

js-class-is

Enhances a JavaScript class by adding an is<Class> property to compare types between realms.
JavaScript
17
star
15

webpack-isomorphic-compiler

A compiler that makes your life easier if you are building isomorphic webpack powered apps, that is, single page applications with server-side rendering
JavaScript
16
star
16

react-page-swapper

An orchestrator that eases out the implementation of page transitions
JavaScript
15
star
17

eslint-config

MOXY eslint configuration to be used across several JavaScript projects
JavaScript
14
star
18

react-carousel

A React carousel component that aims to be as flexible as possible
JavaScript
14
star
19

react-contentful-image

A react image renderer that uses the Contentful Images API.
JavaScript
12
star
20

ugo

An extensible and composable cli
12
star
21

next-sitemaps

An API handler and a plugin that enables your Next.js application to have working sitemaps
JavaScript
12
star
22

js-keyboard-only-outlines

Disable outlines caused by navigation methods other than keyboard
JavaScript
11
star
23

next-common-files

Next.js plugins that configure webpack with loaders for common files
JavaScript
9
star
24

react-promiseful

A React component and hook to render children conditionally based on a promise state
JavaScript
9
star
25

postcss-preset

PostCSS preset to be used at MOXY
JavaScript
8
star
26

next-env

Next.js plugin to pass environment variables to Next.js's configuration
JavaScript
8
star
27

webpack-sane-compiler

A webpack compiler wrapper that provides a nicer API
JavaScript
8
star
28

react-lib-template

This template aims to make the implementation of react component packages easier and more methodic.
JavaScript
8
star
29

stylelint-config

MOXY stylelint configuration to be used across several CSS projects
JavaScript
8
star
30

next-pre-compression

Next.js plugin to compress static assets at build time and serve them instead of having to compress on-the-fly
JavaScript
8
star
31

node-gh-issues-stats

Collect statistical information about issues of a GitHub repository
JavaScript
8
star
32

next-link

A component that enables client-side transitions between routes as well as external URLs.
JavaScript
7
star
33

redux-mock-store-await-actions

Waits for specific actions to be dispatched or a timeout expires
JavaScript
7
star
34

webpack-isomorphic-compiler-reporter

Beautiful reporting for webpack-isomorphic-compiler compilation events
JavaScript
7
star
35

react-split-text

A react component that wraps each word of a sentence into a <span> element.
JavaScript
6
star
36

yargs-get-help

Get the help output from a yargs instance
JavaScript
6
star
37

js-chained-config

Use a chaining API to generate and simplify the modification of configs
JavaScript
5
star
38

babel-preset

Babel preset to be used at MOXY
JavaScript
5
star
39

yargs-unparser

Converts back a yargs argv object to its original array form
5
star
40

workshop-react

A workshop to introduce developers to React, presented in the Aveiro University
JavaScript
5
star
41

next-compile-node-modules

Next.js plugin to compile all node_modules using Babel
JavaScript
5
star
42

yargs-promise-handler

Adds support for promises to yargs handlers and allows them to be composable
JavaScript
5
star
43

react-wait-for-react

Easily render a splash screen and loader while your React app is not yet interactive, optionally waiting for a promise as well
JavaScript
5
star
44

react-app-rewire-css-modules-extensionless

Enables CSS modules without any special extension for CRA apps using react-app-rewired
JavaScript
5
star
45

react-keyboard-only-outlines

Disable outlines caused by navigation methods other than keyboard
JavaScript
4
star
46

webpack-sane-compiler-notifier

Notify webpack compilation status to your operating system when using webpack-sane-compiler
JavaScript
4
star
47

react-icon

A component to render svg icons.
JavaScript
4
star
48

next-rest-api

Aims to ease the development of REST APIs in Next.js
JavaScript
4
star
49

next-seo

Manage document head SEO metadata in your Next.js projects with a simple data structure.
JavaScript
4
star
50

node-fetch-coverage

Fetch the code coverage from an open-source GIT repository, using a variety of well-known coverage services
JavaScript
4
star
51

webpack-sane-compiler-reporter

Beautiful reporting for webpack-sane-compiler compilation events
JavaScript
4
star
52

react-modal

A modal, built on top of react-modal, that also fixes the scrollable body in iOS
JavaScript
3
star
53

node-is-regular-file

Checks if a path is a regular file
JavaScript
3
star
54

react-navigation

Set of react components, hooks and providers to easily kickoff a navigation environment in web projects.
JavaScript
3
star
55

webpack-isomorphic-compiler-notifier

Notify webpack compilation status to your operating system when using webpack-isomorphic-compiler
JavaScript
3
star
56

js-pico-signals

A very simple signal library inspired by the 'signals' package
JavaScript
3
star
57

react-svg

MOXY'S base SVG component.
JavaScript
3
star
58

next-button

A react button that doubles down as a link.
JavaScript
3
star
59

jest-config

MOXY's Jest configuration to be used across several JavaScript projects
JavaScript
3
star
60

react-contentful-rich-text

A react component that transforms a contentful rich text structure to html.
JavaScript
3
star
61

react-animate-text

A react component that animates text per word and/or per line.
JavaScript
2
star
62

react-with-moxy-scripts

This package includes scripts and configuration used by react-with-moxy
2
star
63

create-next-routes

A CLI to manage Next.js routes
JavaScript
2
star
64

react-redata

React data container for isomorphic applications, providing a unified and performant load & reload pattern
JavaScript
2
star
65

react-circle

MOXY's circle animation component
JavaScript
2
star
66

next-webpack-oneof

Wraps all webpack loader rules into a single oneOf rule
JavaScript
2
star
67

rfcs-oss

RFCs for additions or changes to MOXY open-source projects
2
star
68

workshop-leveling-up-with-redux

Redux workshop composed by an introductory section, followed by some advanced aspects.
JavaScript
2
star
69

react-ellipsis

Moxy's base Ellipsis component.
JavaScript
1
star
70

react-app-rewire-external-svg-loader

Enables external-svg-loader for CRA apps using react-app-rewired
JavaScript
1
star
71

react-accordion

MOXY's base Accordion component.
JavaScript
1
star
72

next-with-router-ref

An alternative to Next.js withRouter HOC that supports refs by forwarding them
JavaScript
1
star
73

react-dropdown

A Dropdown component for React, based on react-select.
JavaScript
1
star
74

express-ensure-content-type

Express middleware that ensures requests match the specified content-type.
JavaScript
1
star
75

workshop-the-hitchhikers-guide-to-react

React workshop composed by an introductory section, followed by some advanced aspects.
JavaScript
1
star
76

redux-await-actions

Waits for specific actions to be dispatched or a timeout expires.
JavaScript
1
star