GithubHelp home page GithubHelp logo

hpohlmeyer / inquirer.js Goto Github PK

View Code? Open in Web Editor NEW

This project forked from sboudrias/inquirer.js

0.0 0.0 0.0 437.66 MB

A collection of common interactive command line user interfaces.

License: MIT License

Shell 0.03% JavaScript 60.62% TypeScript 39.36%

inquirer.js's Introduction

Inquirer Logo

Inquirer

npm FOSSA Status

A collection of common interactive command line user interfaces.

List prompt

Give it a try in your own terminal!

npx @inquirer/demo@latest

Installation

npm install @inquirer/prompts

yarn add @inquirer/prompts

Inquirer recently underwent a rewrite from the ground up to reduce the package size and improve performance. The previous version of the package is still maintained (though not actively developed), and offered hundreds of community contributed prompts that might not have been migrated to the latest API. If this is what you're looking for, the previous package is over here.

Usage

import { input } from '@inquirer/prompts';

const answer = await input({ message: 'Enter your name' });

Prompts

Input prompt

import { input } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Select prompt

import { select } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Checkbox prompt

import { checkbox } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Confirm prompt

import { confirm } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Password prompt

import { password } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Expand prompt closed Expand prompt expanded

import { expand } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Launches an instance of the users preferred editor on a temporary file. Once the user exits their editor, the content of the temporary file is read as the answer. The editor used is determined by reading the $VISUAL or $EDITOR environment variables. If neither of those are present, the OS default is used (notepad on Windows, vim on Mac or Linux.)

import { editor } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Raw list prompt

import { rawlist } from '@inquirer/prompts';

See documentation for usage example and options documentation.

Create your own prompts

The API documentation is over here, and our testing utilities here.

Advanced usage

All inquirer prompts are a function taking 2 arguments. The first argument is the prompt configuration (unique to each prompt). The second is providing contextual or runtime configuration.

The context options are:

Property Type Required Description
input NodeJS.ReadableStream no The stdin stream (defaults to process.stdin)
output NodeJS.WritableStream no The stdout stream (defaults to process.stdout)
clearPromptOnDone boolean no If true, we'll clear the screen after the prompt is answered

Example:

import { confirm } from '@inquirer/prompts';

const allowEmail = await confirm(
  { message: 'Do you allow us to send you email?' },
  {
    output: new Stream.Writable({
      write(chunk, _encoding, next) {
        // Do something
        next();
      },
    }),
    clearPromptOnDone: true,
  },
);

Canceling prompt

All prompt functions are returning a cancelable promise. This special promise type has a cancel method that'll cancel and cleanup the prompt.

On calling cancel, the answer promise will become rejected.

import { confirm } from '@inquirer/prompts';

const answer = confirm(...); // note: for this you cannot use `await`

answer.cancel();

Recipes

Get answers in an object

When asking many questions, you might not want to keep one variable per answer everywhere. In which case, you can put the answer inside an object.

import { input, confirm } from '@inquirer/prompts';

const answers = {
  firstName: await input({ message: "What's your first name?" }),
  allowEmail: await confirm({ message: 'Do you allow us to send you email?' }),
};

console.log(answers.firstName);

Ask a question conditionally

Maybe some questions depend on some other question's answer.

import { input, confirm } from '@inquirer/prompts';

const allowEmail = await confirm({ message: 'Do you allow us to send you email?' });

let email;
if (allowEmail) {
  email = await input({ message: 'What is your email address' });
}

Get default value after timeout

import { setTimeout } from 'node:timers/promises';
import { input } from '@inquirer/prompts';

const answer = input(...);

const defaultValue = setTimeout(5000).then(() => {
  answer.cancel();
  return 'default answer';
});

const answer = await Promise.race([defaultValue, answer])

Using as pre-commit/git hooks, or scripts

By default scripts ran from tools like husky/lint-staged might not run inside an interactive shell. In non-interactive shell, Inquirer cannot run, and users cannot send keypress events to the process.

For it to work, you must make sure you start a tty (or "interactive" input stream.)

If those scripts are set within your package.json, you can define the stream like so:

  "precommit": "my-script < /dev/tty"

Or if in a shell script file, you'll do it like so: (on Windows that's likely your only option)

#!/bin/sh
exec < /dev/tty

node my-script.js

Community prompts

If you created a cool prompt, send us a PR adding it to the list below!

Interactive List Prompt
Select a choice either with arrow keys + Enter or by pressing a key associated with a choice.

? Choose an option:
>   Run command (D)
    Quit (Q)

License

Copyright (c) 2023 Simon Boudrias (twitter: @vaxilart)
Licensed under the MIT license.

inquirer.js's People

Contributors

sboudrias avatar greenkeeper[bot] avatar litomore avatar zonemeen avatar sindresorhus avatar dependabot[bot] avatar tdp17 avatar mshima avatar danielchatfield avatar mokkabonna avatar akwangho avatar jimmywarting avatar artfuldev avatar mrkmg avatar snyk-bot avatar owings1 avatar jcready avatar vweevers avatar wtgtybhertgeghgtwtg avatar user3587412 avatar tklun avatar adiktofsugar avatar sarthology avatar sanarisan avatar ruyadorno avatar starpit avatar lukecotter avatar jhorbulyk avatar froren avatar danielruf avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.