Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

async-autocomplete-cli

Package Overview
Dependencies
Maintainers
1
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

async-autocomplete-cli

tool for prompting the user to select from a list of choices, where the choices are fetched asynchronously, and new choices are fetched as the user types

  • 1.0.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

async-autocomplete-cli

CircleCI semantic-release Commitizen friendly npm version

A CLI prompt that allows the user to select from a list of choices, where the choices are fetched asynchronously (e.g. from a request to a remote server). The user can type filter text and new choices matching that filter text will be fetched.

Based upon prompts; this basically a stripped-down fork of that repo.

Usage Example

npm i --save async-autocomplete-cli
const { asyncAutocomplete } = require('async-autocomplete-cli')

async function go() {
  const instance = await asyncAutocomplete({
    message: 'Select an AWS EC2 Instance',
    suggest: async (input, cancelationToken, yield) => {
      const results = []
      if (!input) {
        // getRecentSelectedInstances not implemented in this example.
        results.push(...(await getRecentSelectedInstances()))
        yield(results)
      }

      const Filters = []
      if (input)
        Filters.push({
          Name: 'tag:Name',
          Values: [`*${input}*`],
        })
      const args = { MaxResults: 100 }
      if (Filters.length) args.Filters = Filters
      const request = ec2.describeInstances(args)
      cancelationToken.on('canceled', () => request.abort())

      if (cancelationToken.canceled) return []

      const { Reservations } = await request.promise()
      for (const { Instances } of Reservations || []) {
        for (const Instance of Instances || []) {
          const { InstanceId, Tags = [] } = Instance
          const name = (Tags.find(t => t.Key === 'Name') || {}).Value
          results.push({
            title: `${InstanceId} ${name || ''}`,
            value: Instance,
            initial: !results.length,
          })
        }
      }

      if (!results.length) {
        results.push({
          title: `No matching EC2 Instances found${
            input ? ` with name starting with ${input}` : ''
          }`,
        })
      }

      return results
    },
  })
}

go()

API

asyncAutocomplete(options)

The suggest function will be called with:

  • The user input (a string, may be empty)
  • A cancelationToken. This is an EventEmitter that will event 'canceled' when the user input has changed. It also has a canceled property that is initially false and becomes true when the user input has changed. You must handle the 'canceled' event if you want choices for the latest user input to load ASAP.
  • A yield function you can call with an array of choices objects [{ title, value }, ...]. You can also return the final choices, but calling this function allows you to change the choices even if the user input remains the same. For example, you might want to save what the user has recently selected to a local file, and show the recent selections immediately while waiting to load other choices from the server.

Options

ParamTypeDescription
messagestringPrompt message to display
suggestfunctionFunction to fetch choices
limitnumberMax number of results to show. Defaults to 10
stylestringRender style (default, password, invisible, emoji). Defaults to 'default'
clearFirstbooleanThe first ESCAPE keypress will clear the input

Keywords

FAQs

Package last updated on 20 Jan 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc