npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

apic-toolkit

v1.1.22

Published

<h1 align="center"> <br> <br> <img width="320" src="media/logo.png" alt="Api Connect"> <br> <br> <br> </h1>

Downloads

6

Readme

npm dependents Downloads

example to publishing an api with one comment. See more prompt examples

Created by [itayp1][itay] , Apic-toolkit is fast, easy to use, and lightweight, while also being powerful for the most advanced use cases.

  • Fast - publish api direct from your editor
  • Easy to implement - you need you create small configuration file and thats it.
  • Easy to use - one click and you published a new version of the api.
  • Flexible - Have a seperate configuration file that you can edit every time.
  • Pluggable - Add advanced features to Enquirer using plugins.
  • Well tested - All prompts are well-tested, and tests are easy to create without having to use brittle, hacky solutions to spy on prompts or "inject" values.
  • Examples - There are numerous examples available to help you get started.

If you like apic-toolkit, please consider starring to show your support. Thanks!

❯ Getting started

Get started with Enquirer, the most powerful and easy-to-use Node.js library for creating interactive CLI prompts.

❯ Install

Install with npm:

$ npm install apic-toolkit -g

❯ Prerequisite

You need to install the apiconnect tool if you want to use the publishing option in this product to intall the apiconnect use the following command

$ npm install apiconnect

❯ Prompts

This section is about Apic-toolkit prompts: what they look like, how they work, how to run them, available options.

Built-in prompts

Yaml2Script

Prompt that auto-completes as the user types, and returns the selected value as a string.

Example Usage

Script2Yaml

Related prompts

↑ back to: Getting Started · Prompts


publishing Api

Prompt that asks for username and password to authenticate the user. The default implementation of authenticate function in BasicAuth prompt is to compare the username and password with the values supplied while running the prompt. The implementer is expected to override the authenticate function with a custom logic such as making an API request to a server to authenticate the username and password entered and expect a token back.

Example Usage

const { BasicAuth } = require('enquirer');

const prompt = new BasicAuth({
  name: 'password',
  message: 'Please enter your password',
  username: 'rajat-sr',
  password: '123',
  showPassword: true,
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

↑ back to: Getting Started · Prompts


Generate Configuration Yaml

Prompt that returns true or false.

Example Usage

const { Confirm } = require('enquirer');

const prompt = new Confirm({
  name: 'question',
  message: 'Want to answer?',
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Form Prompt

Prompt that allows the user to enter and submit multiple values on a single terminal screen.

Example Usage

const { Form } = require('enquirer');

const prompt = new Form({
  name: 'user',
  message: 'Please provide the following information:',
  choices: [
    { name: 'firstname', message: 'First Name', initial: 'Jon' },
    { name: 'lastname', message: 'Last Name', initial: 'Schlinkert' },
    { name: 'username', message: 'GitHub username', initial: 'jonschlinkert' },
  ],
});

prompt
  .run()
  .then((value) => console.log('Answer:', value))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Input Prompt

Prompt that takes user input and returns a string.

Example Usage

const { Input } = require('enquirer');
const prompt = new Input({
  message: 'What is your username?',
  initial: 'jonschlinkert',
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.log);

You can use data-store to store input history that the user can cycle through (see source).

Related prompts

↑ back to: Getting Started · Prompts


Invisible Prompt

Prompt that takes user input, hides it from the terminal, and returns a string.

Example Usage

const { Invisible } = require('enquirer');
const prompt = new Invisible({
  name: 'secret',
  message: 'What is your secret?',
});

prompt
  .run()
  .then((answer) => console.log('Answer:', { secret: answer }))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


List Prompt

Prompt that returns a list of values, created by splitting the user input. The default split character is , with optional trailing whitespace.

Example Usage

const { List } = require('enquirer');
const prompt = new List({
  name: 'keywords',
  message: 'Type comma-separated keywords',
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


MultiSelect Prompt

Prompt that allows the user to select multiple items from a list of options.

Example Usage

const { MultiSelect } = require('enquirer');

const prompt = new MultiSelect({
  name: 'value',
  message: 'Pick your favorite colors',
  limit: 7,
  choices: [
    { name: 'aqua', value: '#00ffff' },
    { name: 'black', value: '#000000' },
    { name: 'blue', value: '#0000ff' },
    { name: 'fuchsia', value: '#ff00ff' },
    { name: 'gray', value: '#808080' },
    { name: 'green', value: '#008000' },
    { name: 'lime', value: '#00ff00' },
    { name: 'maroon', value: '#800000' },
    { name: 'navy', value: '#000080' },
    { name: 'olive', value: '#808000' },
    { name: 'purple', value: '#800080' },
    { name: 'red', value: '#ff0000' },
    { name: 'silver', value: '#c0c0c0' },
    { name: 'teal', value: '#008080' },
    { name: 'white', value: '#ffffff' },
    { name: 'yellow', value: '#ffff00' },
  ],
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

// Answer: ['aqua', 'blue', 'fuchsia']

Example key-value pairs

Optionally, pass a result function and use the .map method to return an object of key-value pairs of the selected names and values: example

const { MultiSelect } = require('enquirer');

const prompt = new MultiSelect({
  name: 'value',
  message: 'Pick your favorite colors',
  limit: 7,
  choices: [
    { name: 'aqua', value: '#00ffff' },
    { name: 'black', value: '#000000' },
    { name: 'blue', value: '#0000ff' },
    { name: 'fuchsia', value: '#ff00ff' },
    { name: 'gray', value: '#808080' },
    { name: 'green', value: '#008000' },
    { name: 'lime', value: '#00ff00' },
    { name: 'maroon', value: '#800000' },
    { name: 'navy', value: '#000080' },
    { name: 'olive', value: '#808000' },
    { name: 'purple', value: '#800080' },
    { name: 'red', value: '#ff0000' },
    { name: 'silver', value: '#c0c0c0' },
    { name: 'teal', value: '#008080' },
    { name: 'white', value: '#ffffff' },
    { name: 'yellow', value: '#ffff00' },
  ],
  result(names) {
    return this.map(names);
  },
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

// Answer: { aqua: '#00ffff', blue: '#0000ff', fuchsia: '#ff00ff' }

Related prompts

↑ back to: Getting Started · Prompts


Numeral Prompt

Prompt that takes a number as input.

Example Usage

const { NumberPrompt } = require('enquirer');

const prompt = new NumberPrompt({
  name: 'number',
  message: 'Please enter a number',
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Password Prompt

Prompt that takes user input and masks it in the terminal. Also see the invisible prompt

Example Usage

const { Password } = require('enquirer');

const prompt = new Password({
  name: 'password',
  message: 'What is your password?',
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Quiz Prompt

Prompt that allows the user to play multiple-choice quiz questions.

Example Usage

const { Quiz } = require('enquirer');

const prompt = new Quiz({
  name: 'countries',
  message: 'How many countries are there in the world?',
  choices: ['165', '175', '185', '195', '205'],
  correctChoice: 3,
});

prompt
  .run()
  .then((answer) => {
    if (answer.correct) {
      console.log('Correct!');
    } else {
      console.log(`Wrong! Correct answer is ${answer.correctAnswer}`);
    }
  })
  .catch(console.error);

Quiz Options

| Option | Type | Required | Description | | --------------- | -------- | -------- | ----------------------------------------------------- | | choices | array | Yes | The list of possible answers to the quiz question. | | correctChoice | number | Yes | Index of the correct choice from the choices array. |

↑ back to: Getting Started · Prompts


Survey Prompt

Prompt that allows the user to provide feedback for a list of questions.

Example Usage

const { Survey } = require('enquirer');

const prompt = new Survey({
  name: 'experience',
  message: 'Please rate your experience',
  scale: [
    { name: '1', message: 'Strongly Disagree' },
    { name: '2', message: 'Disagree' },
    { name: '3', message: 'Neutral' },
    { name: '4', message: 'Agree' },
    { name: '5', message: 'Strongly Agree' },
  ],
  margin: [0, 0, 2, 1],
  choices: [
    {
      name: 'interface',
      message: 'The website has a friendly interface.',
    },
    {
      name: 'navigation',
      message: 'The website is easy to navigate.',
    },
    {
      name: 'images',
      message: 'The website usually has good images.',
    },
    {
      name: 'upload',
      message: 'The website makes it easy to upload images.',
    },
    {
      name: 'colors',
      message: 'The website has a pleasing color palette.',
    },
  ],
});

prompt
  .run()
  .then((value) => console.log('ANSWERS:', value))
  .catch(console.error);

Related prompts


Scale Prompt

A more compact version of the Survey prompt, the Scale prompt allows the user to quickly provide feedback using a Likert Scale.

Example Usage

const { Scale } = require('enquirer');
const prompt = new Scale({
  name: 'experience',
  message: 'Please rate your experience',
  scale: [
    { name: '1', message: 'Strongly Disagree' },
    { name: '2', message: 'Disagree' },
    { name: '3', message: 'Neutral' },
    { name: '4', message: 'Agree' },
    { name: '5', message: 'Strongly Agree' },
  ],
  margin: [0, 0, 2, 1],
  choices: [
    {
      name: 'interface',
      message: 'The website has a friendly interface.',
      initial: 2,
    },
    {
      name: 'navigation',
      message: 'The website is easy to navigate.',
      initial: 2,
    },
    {
      name: 'images',
      message: 'The website usually has good images.',
      initial: 2,
    },
    {
      name: 'upload',
      message: 'The website makes it easy to upload images.',
      initial: 2,
    },
    {
      name: 'colors',
      message: 'The website has a pleasing color palette.',
      initial: 2,
    },
  ],
});

prompt
  .run()
  .then((value) => console.log('ANSWERS:', value))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Select Prompt

Prompt that allows the user to select from a list of options.

Example Usage

const { Select } = require('enquirer');

const prompt = new Select({
  name: 'color',
  message: 'Pick a flavor',
  choices: ['apple', 'grape', 'watermelon', 'cherry', 'orange'],
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Sort Prompt

Prompt that allows the user to sort items in a list.

Example

In this example, custom styling is applied to the returned values to make it easier to see what's happening.

Example Usage

const colors = require('ansi-colors');
const { Sort } = require('enquirer');
const prompt = new Sort({
  name: 'colors',
  message: 'Sort the colors in order of preference',
  hint: 'Top is best, bottom is worst',
  numbered: true,
  choices: ['red', 'white', 'green', 'cyan', 'yellow'].map((n) => ({
    name: n,
    message: colors[n](n),
  })),
});

prompt
  .run()
  .then(function (answer = []) {
    console.log(answer);
    console.log('Your preferred order of colors is:');
    console.log(answer.map((key) => colors[key](key)).join('\n'));
  })
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Snippet Prompt

Prompt that allows the user to replace placeholders in a snippet of code or text.

Example Usage

const semver = require('semver');
const { Snippet } = require('enquirer');
const prompt = new Snippet({
  name: 'username',
  message: 'Fill out the fields in package.json',
  required: true,
  fields: [
    {
      name: 'author_name',
      message: 'Author Name',
    },
    {
      name: 'version',
      validate(value, state, item, index) {
        if (item && item.name === 'version' && !semver.valid(value)) {
          return prompt.styles.danger('version should be a valid semver value');
        }
        return true;
      },
    },
  ],
  template: `{
  "name": "\${name}",
  "description": "\${description}",
  "version": "\${version}",
  "homepage": "https://github.com/\${username}/\${name}",
  "author": "\${author_name} (https://github.com/\${username})",
  "repository": "\${username}/\${name}",
  "license": "\${license:ISC}"
}
`,
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer.result))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Toggle Prompt

Prompt that allows the user to toggle between two values then returns true or false.

Example Usage

const { Toggle } = require('enquirer');

const prompt = new Toggle({
  message: 'Want to answer?',
  enabled: 'Yep',
  disabled: 'Nope',
});

prompt
  .run()
  .then((answer) => console.log('Answer:', answer))
  .catch(console.error);

Related prompts

↑ back to: Getting Started · Prompts


Prompt Types

There are 5 (soon to be 6!) type classes:

Each type is a low-level class that may be used as a starting point for creating higher level prompts. Continue reading to learn how.

ArrayPrompt

The ArrayPrompt class is used for creating prompts that display a list of choices in the terminal. For example, Enquirer uses this class as the basis for the Select and Survey prompts.

Options

In addition to the options available to all prompts, Array prompts also support the following options.

| Option | Required? | Type | Description | | ----------- | ------------- | ---------------- | ----------------------------------------------------------------------------------------------------------------------- | --- | | autofocus | no | string\|number | The index or name of the choice that should have focus when the prompt loads. Only one choice may have focus at a time. | | | stdin | no | stream | The input stream to use for emitting keypress events. Defaults to process.stdin. | | stdout | no | stream | The output stream to use for writing the prompt to the terminal. Defaults to process.stdout. | | |

Properties

Array prompts have the following instance properties and getters.

| Property name | Type | Description | | ----------------- | --------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | choices | array | Array of choices that have been normalized from choices passed on the prompt options. | | cursor | number | Position of the cursor relative to the user input (string). | | enabled | array | Returns an array of enabled choices. | | focused | array | Returns the currently selected choice in the visible list of choices. This is similar to the concept of focus in HTML and CSS. Focused choices are always visible (on-screen). When a list of choices is longer than the list of visible choices, and an off-screen choice is focused, the list will scroll to the focused choice and re-render. | | focused | Gets the currently selected choice. Equivalent to prompt.choices[prompt.index]. | | index | number | Position of the pointer in the visible list (array) of choices. | | limit | number | The number of choices to display on-screen. | | selected | array | Either a list of enabled choices (when options.multiple is true) or the currently focused choice. | | visible | string | |

Methods

| Method | Description | | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | pointer() | Returns the visual symbol to use to identify the choice that currently has focus. The symbol is often used for this. The pointer is not always visible, as with the autocomplete prompt. | | indicator() | Returns the visual symbol that indicates whether or not a choice is checked/enabled. | | focus() | Sets focus on a choice, if it can be focused. |

Choices

Array prompts support the choices option, which is the array of choices users will be able to select from when rendered in the terminal.

Type: string|object

Example

const { prompt } = require('enquirer');

const questions = [
  {
    type: 'select',
    name: 'color',
    message: 'Favorite color?',
    initial: 1,
    choices: [
      { name: 'red', message: 'Red', value: '#ff0000' }, //<= choice object
      { name: 'green', message: 'Green', value: '#00ff00' }, //<= choice object
      { name: 'blue', message: 'Blue', value: '#0000ff' }, //<= choice object
    ],
  },
];

let answers = await prompt(questions);
console.log('Answer:', answers.color);

Defining choices

Whether defined as a string or object, choices are normalized to the following interface:

{
  name: string;
  message: string | undefined;
  value: string | undefined;
  hint: string | undefined;
  disabled: boolean | string | undefined;
}

Example

const question = {
  name: 'fruit',
  message: 'Favorite fruit?',
  choices: ['Apple', 'Orange', 'Raspberry'],
};

Normalizes to the following when the prompt is run:

const question = {
  name: 'fruit',
  message: 'Favorite fruit?',
  choices: [
    { name: 'Apple', message: 'Apple', value: 'Apple' },
    { name: 'Orange', message: 'Orange', value: 'Orange' },
    { name: 'Raspberry', message: 'Raspberry', value: 'Raspberry' },
  ],
};

Choice properties

The following properties are supported on choice objects.

| Option | Type | Description | | ----------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | name | string | The unique key to identify a choice | | message | string | The message to display in the terminal. name is used when this is undefined. | | value | string | Value to associate with the choice. Useful for creating key-value pairs from user choices. name is used when this is undefined. | | choices | array | Array of "child" choices. | | hint | string | Help message to display next to a choice. | | role | string | Determines how the choice will be displayed. Currently the only role supported is separator. Additional roles may be added in the future (like heading, etc). Please create a [feature request] | | enabled | boolean | Enabled a choice by default. This is only supported when options.multiple is true or on prompts that support multiple choices, like MultiSelect. | | disabled | boolean\|string | Disable a choice so that it cannot be selected. This value may either be true, false, or a message to display. | | indicator | string\|function | Custom indicator to render for a choice (like a check or radio button). |

Related prompts


AuthPrompt

The AuthPrompt is used to create prompts to log in user using any authentication method. For example, Enquirer uses this class as the basis for the BasicAuth Prompt. You can also find prompt examples in examples/auth/ folder that utilizes AuthPrompt to create OAuth based authentication prompt or a prompt that authenticates using time-based OTP, among others.

AuthPrompt has a factory function that creates an instance of AuthPrompt class and it expects an authenticate function, as an argument, which overrides the authenticate function of the AuthPrompt class.

Methods

| Method | Description | | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | authenticate() | Contain all the authentication logic. This function should be overridden to implement custom authentication logic. The default authenticate function throws an error if no other function is provided. |

Choices

Auth prompt supports the choices option, which is the similar to the choices used in Form Prompt.

Example

const { AuthPrompt } = require('enquirer');

function authenticate(value, state) {
  if (value.username === this.options.username && value.password === this.options.password) {
    return true;
  }
  return false;
}

const CustomAuthPrompt = AuthPrompt.create(authenticate);

const prompt = new CustomAuthPrompt({
  name: 'password',
  message: 'Please enter your password',
  username: 'rajat-sr',
  password: '1234567',
  choices: [
    { name: 'username', message: 'username' },
    { name: 'password', message: 'password' },
  ],
});

prompt
  .run()
  .then((answer) => console.log('Authenticated?', answer))
  .catch(console.error);

Related prompts


BooleanPrompt

The BooleanPrompt class is used for creating prompts that display and return a boolean value.

const { BooleanPrompt } = require('enquirer');

const prompt = new BooleanPrompt({
  header: '========================',
  message: 'Do you love enquirer?',
  footer: '========================',
});

prompt
  .run()
  .then((answer) => console.log('Selected:', answer))
  .catch(console.error);

Returns: boolean


NumberPrompt

The NumberPrompt class is used for creating prompts that display and return a numerical value.

const { NumberPrompt } = require('enquirer');

const prompt = new NumberPrompt({
  header: '************************',
  message: 'Input the Numbers:',
  footer: '************************',
});

prompt
  .run()
  .then((answer) => console.log('Numbers are:', answer))
  .catch(console.error);

Returns: string|number (number, or number formatted as a string)


StringPrompt

The StringPrompt class is used for creating prompts that display and return a string value.

const { StringPrompt } = require('enquirer');

const prompt = new StringPrompt({
  header: '************************',
  message: 'Input the String:',
  footer: '************************',
});

prompt
  .run()
  .then((answer) => console.log('String is:', answer))
  .catch(console.error);

Returns: string

❯ Custom prompts

With Enquirer 2.0, custom prompts are easier than ever to create and use.

How do I create a custom prompt?

Custom prompts are created by extending either:

  • Enquirer's Prompt class
  • one of the built-in prompts, or
  • low-level types.
const { Prompt } = require('enquirer');

class HaiKarate extends Prompt {
  constructor(options = {}) {
    super(options);
    this.value = options.initial || 0;
    this.cursorHide();
  }
  up() {
    this.value++;
    this.render();
  }
  down() {
    this.value--;
    this.render();
  }
  render() {
    this.clear(); // clear previously rendered prompt from the terminal
    this.write(`${this.state.message}: ${this.value}`);
  }
}

// Use the prompt by creating an instance of your custom prompt class.
const prompt = new HaiKarate({
  message: 'How many sprays do you want?',
  initial: 10,
});

prompt
  .run()
  .then((answer) => console.log('Sprays:', answer))
  .catch(console.error);

If you want to be able to specify your prompt by type so that it may be used alongside other prompts, you will need to first create an instance of Enquirer.

const Enquirer = require('enquirer');
const enquirer = new Enquirer();

Then use the .register() method to add your custom prompt.

enquirer.register('haikarate', HaiKarate);

Now you can do the following when defining "questions".

let spritzer = require('cologne-drone');
let answers = await enquirer.prompt([
  {
    type: 'haikarate',
    name: 'cologne',
    message: 'How many sprays do you need?',
    initial: 10,
    async onSubmit(name, value) {
      await spritzer.activate(value); //<= activate drone
      return value;
    },
  },
]);

❯ Key Bindings

All prompts

These key combinations may be used with all prompts.

| command | description | | ------------------------------ | -------------------------------------- | | ctrl + c | Cancel the prompt. | | ctrl + g | Reset the prompt to its initial state. |

Move cursor

These combinations may be used on prompts that support user input (eg. input prompt, password prompt, and invisible prompt).

| command | description | | ------------------------------ | ---------------------------------------- | | left | Move the cursor back one character. | | right | Move the cursor forward one character. | | ctrl + a | Move cursor to the start of the line | | ctrl + e | Move cursor to the end of the line | | ctrl + b | Move cursor back one character | | ctrl + f | Move cursor forward one character | | ctrl + x | Toggle between first and cursor position |

Edit Input

These key combinations may be used on prompts that support user input (eg. input prompt, password prompt, and invisible prompt).

| command | description | | ------------------------------ | ---------------------------------------- | | ctrl + a | Move cursor to the start of the line | | ctrl + e | Move cursor to the end of the line | | ctrl + b | Move cursor back one character | | ctrl + f | Move cursor forward one character | | ctrl + x | Toggle between first and cursor position |

| command (Mac) | command (Windows) | description | | ----------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | delete | backspace | Delete one character to the left. | | fn + delete | delete | Delete one character to the right. | | option + up | alt + up | Scroll to the previous item in history (Input prompt only, when history is enabled). | | option + down | alt + down | Scroll to the next item in history (Input prompt only, when history is enabled). |

Select choices

These key combinations may be used on prompts that support multiple choices, such as the multiselect prompt, or the select prompt when the multiple options is true.

| command | description | | ----------------- | -------------------------------------------------------------------------------------------------------------------- | | space | Toggle the currently selected choice when options.multiple is true. | | number | Move the pointer to the choice at the given index. Also toggles the selected choice when options.multiple is true. | | a | Toggle all choices to be enabled or disabled. | | i | Invert the current selection of choices. | | g | Toggle the current choice group. |

Hide/show choices

| command | description | | ------------------------------- | ---------------------------------------------- | | fn + up | Decrease the number of visible choices by one. | | fn + down | Increase the number of visible choices by one. |

Move/lock Pointer

| command | description | | ---------------------------------- | -------------------------------------------------------------------------------------------------------------------- | | number | Move the pointer to the choice at the given index. Also toggles the selected choice when options.multiple is true. | | up | Move the pointer up. | | down | Move the pointer down. | | ctrl + a | Move the pointer to the first visible choice. | | ctrl + e | Move the pointer to the last visible choice. | | shift + up | Scroll up one choice without changing pointer position (locks the pointer while scrolling). | | shift + down | Scroll down one choice without changing pointer position (locks the pointer while scrolling). |

| command (Mac) | command (Windows) | description | | -------------------------------- | --------------------- | ---------------------------------------------------------- | | fn + left | home | Move the pointer to the first choice in the choices array. | | fn + right | end | Move the pointer to the last choice in the choices array. |

❯ Release History

Please see CHANGELOG.md.

❯ Performance

System specs

MacBook Pro, Intel Core i7, 2.5 GHz, 16 GB.

Load time

Time it takes for the module to load the first time (average of 3 runs):

enquirer: 4.013ms
inquirer: 286.717ms

❯ About

Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.

Todo

We're currently working on documentation for the following items. Please star and watch the repository for updates!

  • [ ] Customizing symbols
  • [ ] Customizing styles (palette)
  • [ ] Customizing rendered input
  • [ ] Customizing returned values
  • [ ] Customizing key bindings
  • [ ] Question validation
  • [ ] Choice validation
  • [ ] Skipping questions
  • [ ] Async choices
  • [ ] Async timers: loaders, spinners and other animations
  • [ ] Links to examples

Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:

$ npm install && npm test
$ yarn && yarn test

(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)

To generate the readme, run the following command:

$ npm install -g verbose/verb#dev verb-generate-readme && verb

Contributors

| Commits | Contributor | | ----------- | ----------------------------------------------------- | | 287 | jonschlinkert | | 86 | doowb | | 32 | rajat-sr | | 20 | 318097 | | 15 | g-plane | | 12 | pixelass | | 5 | adityavyas611 | | 5 | satotake | | 3 | tunnckoCore | | 3 | Ovyerus | | 3 | sw-yx | | 2 | DanielRuf | | 2 | GabeL7r | | 1 | ahmadawais | | 1 | AlCalzone | | 1 | hipstersmoothie | | 1 | TrySound | | 1 | brentjanderson | | 1 | danieldelcore | | 1 | ImgBotApp | | 1 | jsonkao | | 1 | knpwrs | | 1 | yeskunall | | 1 | mischah | | 1 | renarsvilnis | | 1 | sbugert | | 1 | stephencweiss | | 1 | skellock | | 1 | whxaxes |

Author

Jon Schlinkert

Credit

Thanks to derhuerst, creator of prompt libraries such as prompt-skeleton, which influenced some of the concepts we used in our prompts.

License

Copyright © 2018-present, Jon Schlinkert. Released under the MIT License.