A simplified, promise-style CLI utility for programs written in nodejs.
Initial 0.1.0 is underdocumented but functional; you'll have to dig through the tests for an accurate picture of its use.
Istanbul coverage report says:
=============================== Coverage summary ===============================
Statements : 74.19% ( 161/217 )
Branches : 51.14% ( 45/88 )
Functions : 75% ( 18/24 )
Lines : 74.42% ( 160/215 )
================================================================================
... so there is a little ways to go yet.
npm install prg
es5
var program = require('prg');
es6
import program from 'prg';
#!/usr/bin/env node
'use strict';
let prg = require('prg');
let pkg = require('./package');
let validate = require('./lib/validate');
let Service = require('./lib/service');
let stderr = console.error.bind(console);
// Specify the arguments we expect, ours are specified in the package...
let spec = pkg.config.options;
// Always provide your package, it is used to gen help/usage.
prg.create(pkg)
// The spec also contributes to help/usage -- but it is optional.
.spec(spec)
// This simple example only runs a 'main' function/command;
// args are parsed from the command line and prepared in an
// options object according to your spec.
.run((program, options) =>
// its a good idea to provide your own last minute validation
validate(options)
// but eventually you just want to run your program.
.then(options => {
let service = new Service(options);
service.on('error', stderr);
process.on('SIGTERM', () => service.terminate());
process.on('SIGINT', () => service.interrupt());
return service.start();
})
// oh, and it is always a good idea to tell the user about errors.
.catch(err => program.usage(err))
)
.catch(err => stderr('' + (err.stack || err)));
Specs are important to prg
because they convey what is expected when parsing the command line arguments.
argv
– a long-form command line parameter such as--docker-tls-path
def
– contains the option's default value.env
– the name of an environement variable that supplies the option; e.g.DOCKER_TLS_PATH
.flag
– indicates whether the option is a flag.ptr
– a JSON Pointer indicating the location on theoptions
object where the value should reside such as/docker/tls/path
.required
– indicates whether the option is required.validate
– the name of a built-in or user-supplied validation function.