Package detail

commandpost

vvakame601.6kMIT1.4.0

commandline option parser

readme

commandpost Circle CI

commandpost is a command-line options parser. This library is inspired by commander.

commander is very user-friendly, but not TypeScript-friendly. commandpost aims to improve this. Of course, commandpost can also be used from an ordinary JavaScript program. :+1:

Installation

$ npm install --save commandpost

How to Use

Basic Usage

$ cat cli.ts
import * as commandpost from "commandpost";

let root = commandpost
    .create<{ spice: string[]; }, { food: string; }>("dinner <food>")
    .version("1.0.0", "-v, --version")
    .description("today's dinner!")
    .option("-s, --spice <name>", "What spice do you want? default: pepper")
    .action((opts, args) => {
        console.log(`Your dinner is ${args.food} with ${opts.spice[0] || "pepper"}!`);
    });

commandpost
    .exec(root, process.argv)
    .catch(err => {
        if (err instanceof Error) {
            console.error(err.stack);
        } else {
            console.error(err);
        }
        process.exit(1);
    });

$ node cli.js --help
  Usage: dinner [options] [--] <food>

  Options:

    -s, --spice <name>  What spice do you want? default: pepper

$ node cli.js -s "soy sause" "fillet steak"
Your dinner is fillet steak with soy sause!

Commands

A top-level command is created by the commandpost.create function.

commandpost also supports sub-commands. A sub-command is created by using the topLevelCommand.subCommand method. Refer to this example for a demonstration.

commandpost can automatically generate help and command usage messages based on your configuration. For best results, it is recommended that you should set .version and .description for your top-level command.

Options

// shorthand & formal option with a required parameter. value is converted to string[].
cmd.option("-c, --config <configFile>", "Read setting from specified config file path");

// option with optional parameter. value is converted to string[].
cmd.option("-c, --config [configFile]", "Read setting from specified config file path");

// option without parameter (flag). option value is converted to boolean and defaults to `false`.
cmd.option("--suppress-warning", "Suppress warning");

// option with `--no-` prefix. option value is converted to boolean and defaults to true.
cmd.option("--no-type-checking", "Type checking disabled");

If you want to handle unknown options, you can use the .allowUnknownOption method.

Arguments

// required argument
commandpost.create<{}, { food: string; }>("dinner <food>");

// optional argument
commandpost.create<{}, { food: string; }>("dinner [food]");

// variadic argument
commandpost.create<{}, { foods: string[]; }>("dinner <food...>");

Examples

Contributing

This package's author, vvakame, is not a native English speaker. My first language is Japanese. If you find incorrect English, please send me a pull request.

changelog

1.4.0 (2018-10-25)

Features

  • commandpost: don't require source-map-support and es6-promise (034286d)
  • commandpost: update dependencies (d634217)
  • example: update examples (ab7b815)

1.3.0 (2018-01-18)

Features

  • commandpost: use CommandpostError instead of Error (fc0dc87)

1.2.1 (2017-08-15)

Bug Fixes

  • commandpost: fix naming of long name option with default value (c29986c)

1.2.0 (2017-07-24)

Features

  • commandpost: add strict: true option to tsconfig.json (94272cb)
  • commandpost: export Option & Argument from index.ts fixes #5 (884cf85)
  • commandpost: update dependencies (c41bb6e)

1.1.0 (2017-06-28)

Features

  • commandpost: show root description to help text fixes #4 (5e5b7fb)
  • commandpost: update dependencies (86c44c7)

1.0.1 (2016-09-23)

Features

  • commandpost: update dependencies, use TypeScript 2.0.3 (015b1bd)