JSPM

  • Created
  • Published
  • Downloads 61342
  • Score
    100M100P100Q144453F
  • License MIT

The simple way to create beautiful CLIs.

Package Exports

  • @stacksjs/cli

Readme

Stacks CLI

The simple way to build beautiful CLIs.

☘️ Features

  • 🎨 Easily create beautiful CLI apps
  • ⚡️ Lightweight, user-friendly, interactive prompts
  • 🚦 Elegant terminal spinners
  • ⛑️ Helper methods to run commands

🤖 Usage

pnpm i -D @stacksjs/cli

Now, you can use it in your project:

// command.ts
// you may create create a relatively complex CLI UI/UX via the following:
import { command, log, prompts, spawn, spinner, ExitCode, italic } from '@stacksjs/cli'

const stacks = command('stacks')

stacks
  .command('example', 'A dummy command') // pnpm buddy example
  .option('-i, --install', 'The install option', { default: true })
  .action(async (options) => {
    if (options.install)
      await install()

    const answer = await prompts.select({
      type: 'select',
      message: 'Are you trying to run this command?',
      choices: [
        { title: 'Run the command', value: 'run' },
        { title: 'Do not run the command', value: 'do-not-run' },
      ],
    })

    if (answer === 'run')
      install()
    else if (answer === 'do-not-run')
      log.info('Not running the command')
    else process.exit(ExitCode.InvalidArgument)
  })

async function install() {
  try {
    const spin = spinner('Running...').start()
    setTimeout(() => {
      spin.text = italic('This may take a few moments...')
    }, 5000)
    await spawn('pnpm install')
    spin.stop()
  } catch (error) {
    log.error(error)
  }
}

command.help() // automatically expose a -h and --help flag
command.version(version) // automatically expose a -v and --version flag
command.parse() // parse the command

You may now run the command via:

tsx command.ts

To view a more detailed example, check out Buddy.

You may also use any of the following CLI utilities:

import {
  log,
  ansi256Bg, bold, dim, hidden, inverse, italic, link, reset, strikethrough, underline,
  bgBlack, bgBlue, bgCyan, bgGray, bgGreen, bgLightBlue, bgLightCyan, bgLightGray, bgLightGreen, bgLightMagenta, bgLightRed, bgLightYellow, bgMagenta, bgRed, bgWhite, bgYellow,
  black, blue, cyan, gray, green, lightBlue, lightCyan, lightGray, lightGreen, lightMagenta, lightRed, lightYellow, magenta, red, white, yellow,
} from '@stacksjs/cli'

log.info(`hello ${bold(italic('world'))`)

To view the full documentation, please visit https://stacksjs.dev/cli.

🧪 Testing

pnpm test

📈 Changelog

Please see our releases page for more information on what has changed recently.

🚜 Contributing

Please review the Contributing Guide for details.

🏝 Community

For help, discussion about best practices, or any other conversation that would benefit from being searchable:

Discussions on GitHub

For casual chit-chat with others using this package:

Join the Stacks Discord Server

🙏🏼 Credits

Many thanks to the following core technologies & people who have contributed to this package:

📄 License

The MIT License (MIT). Please see LICENSE for more information.

Made with ❤️