JSPM

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

The simple way to create beautiful CLIs.

Package Exports

  • @stacksjs/cli
  • @stacksjs/cli/dist/index.mjs

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@stacksjs/cli) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

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 little while...')
    }, 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:

esno 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 ❤️