Note: cli-kit is under development.
cli-kit

Everything you need to make awesome Command Line Interfaces.
Features
- Command line parsing
- Support for command hierarchies
- Auto-generated help
Installation
yarn add cli-kit --save
or
npm i cli-kit --save
Usage
import CLI from 'cli-kit';
new CLI({
options: {
'-f, --force': 'use the force',
'--timeout [value]': {
desc: 'the timeout duration',
type: 'int'
}
}
})
.exec()
.then(({ argv, _ }) => {
console.log('options:', argv);
console.log('args:', _);
})
.catch(console.error);
Architecture
In cli-kit, commands and options are grouped into "contexts". The main CLI instance defines the
"global context". Each command defines a new context. Each context can have its own commands,
options, and arguments. What you end up with is a hierarchy of contexts.
When cli-kit parses the command line arguments, it will check each argument against the global
context to see if the argument can be identified as a known command, option, or argument. If it
finds a command, it adds the command's context to a stack and re-parses any unidentified arguments.
This allows you to create deep and dynamic hierarchies of commands, options, and arguments.
API
class CLI
A CLI
intance defines a global context for which you add commands, options, and arguments.
Extends Context
> HookEmitter
.
constuctor(opts)
Example
const cli = new CLI({
args: [
'<arg1>',
'[arg2]',
'arg3',
{
name: 'arg4',
desc: undefined,
hidden: false,
multiple: false,
required: false,
type: 'string'
},
'arg4...'
],
camelCase: true,
commands: {
'some-command': {
action({ argv, _ }) {
console.log('options:', argv);
console.log('args:', _);
},
aliases: [ 'another-command' ],
args: [],
camelCase: true,
commands: {},
desc: undefined,
hidden: false,
options: {},
title: undefined
}
},
defaultCommand: undefined,
desc: undefined,
help: true,
helpExitCode: undefined,
name: 'program',
options: {
},
title: 'Global',
version: null
});
exec(args)
Parses the command line args and executes a command, if found.
-
args
: Array<String>
(optional)
An array of arguments. Each argument is expected to be a string.
Defaults to process.argv.slice(2)
.
Returns a Promise
that resolves an Arguments
object. This object will contain the parsed options
in argv
and arguments in _
.
Example
cli.exec()
.then(({ argv, _ }) => {
console.log('options:', argv);
console.log('args:', _);
});
class Context
Base class for CLI
and Command
classes.
Extends HookEmitter
.
argument(arg)
Adds an argument to a CLI
or Command
.
-
arg
: Argument
, Object
, or String
.
An argument descriptor. Either an Argument
instance or an Object
to pass into a Argument
constructor.
An argument requires a name
.
Returns a reference to the CLI
or Command
.
Example
cli.argument('foo');
cli.argument('[wiz]');
cli.argument('<pow>');
cli.argument({
name: 'bar',
type: 'int'
});
cli.argument(new Argument('baz'));
command(cmd, opts)
Adds a command to a CLI
or Command
.
TODO
option(optOrFormat, group, params)
Adds an option or group of options to a CLI
or Command
.
TODO
cli-kit vs other libraries
NOTE: Following data is incomplete and further research is required.
| cli-kit | commander.js | yargs | dashdash | Caporal.js | n-args | meow | nomnom | optimist | minimist | inquirer | promptly | fields |
---|
Actively maintained (within last year) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :warning: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: |
Parses command line arguments | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :x: | :x: | :x: |
"command" support | :white_check_mark: | :white_check_mark: | :white_check_mark: | | | | | | | | | | |
"options" support | :white_check_mark: | :white_check_mark: | :white_check_mark: | | | | | | | | | | |
"flags" support | :white_check_mark: | :white_check_mark: | :white_check_mark: | | | | | | | | | | |
"argument" support | :white_check_mark: | :white_check_mark: | :white_check_mark: | | | | | | | | | | |
Value data type coercion | :white_check_mark: | :white_check_mark: | Numbers only | | | | | | | | | | |
Custom option/argument validation | Coming soon! | :white_check_mark: | | | | | | | | | | | |
Prompting support | Coming soon! | :x: | | | | | | | | | | | |
Built-in prompt types | Coming soon! | :x: | | | | | | | | | | | |
License
MIT