/pero

πŸ˜— Easy to use route-based tool for building large-scale command-line interfaces

Primary LanguageTypeScriptMIT LicenseMIT

pero logo

Pero

Route based CLI tool for creating large scale command line interfaces.

Build Status npm-v

Why?

Nowadays, we have commander.js and all the other cli tools to choose, but why we build yet another cli tool ?

In the real-world scenario, nested commands are so popular among large-scale projects. Pero is trying to solve this problem and also bring you with the progressive TypeScript support.

Feature

  • Route based, born to create nested CLI commands
  • ESBuild driven, really fast to compile your CLI project

Quick Tour

This project is under heavy development, APIs might be changed until the stable version is released. πŸ“Roadmap

1. Install

npm install pero --save
# or use
yarn add pero

2. Create a folder for CLI

mkdir src
cd $_ 
touch index.ts # or index.js

In the example above, index.ts is created in the root of the CLI source folder src, which is defined as the top-most command in CLI.

.
└── src
    └── index.ts

3. vim index.ts

Add the code and finish your first Pero app!

import { Command, Args } from 'pero'

export default (command: Command) => {
  // command registration: define your command here
  command
    .argument('[something]', 'your-description')
    .option('-e', 'environment')

  // action
  return (args: Args) => {
    // do something with user-input args here
    
    command.help() // print help message
  }
}

In Pero, we have to two steps in our runtime:

  • Step1: Registration, in the outer callback we have command passed as the first param, you can utilize this to define your command's arguments or options.
  • Step2: Action, in the inner callback we have args passed to, you may do something with user-input args

4. Compile and run

npx pero src --name "name-your-cli"

Your CLI will be emitted to dist

Run the code below, you will get the corresponding help message in the terminal.

node ./dist/pero.js

Advanced Usage

Nested Command

With the demo project introduced in the Quick Tour section, try to add a new folder under src folder, you will get the nested command right away! This is really cool.

.
└── src
    β”œβ”€β”€ build ## the sub-command we added
    β”‚    └── index.ts
    └── index.ts

To trigger the sub-command build, do the compilation first and run:

node ./dist/index.js build

You will see anything in the sub-command's action printed to the screen. Great!

πŸ“Roadmap

This project is under heavy development, you may refer to this to get the latest update!

Acknowledgement

Special thanks to @yisar132 for the logo, it's great!

LICENSE

MIT License Β© 2021 H