npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

cb-clihp

v1.2.0

Published

A Lightweight Command Line Interface (CLI) Helper

Downloads

20

Readme

Clihp

v1.1.0

A lightweight Command Line Interface (CLI) helper.

Usage

Install the module using npm install --save cb-clihp, and load the module. After loaded, the Clihp object will be available on the global object.

require('cb-clihp');

// Creating parser instance.
var clp = new Clihp.Parser();

// Creating helper instance.
var clh = new Clihp.Helper();

When parsing the CLI call, Clihp will mark the first argv as the command name. Aruments that paired with (=) will be marked as config, arguments started with single or double dash (-) without (=) will be marked as option, and the rest will be marked as value.

Example

node app.js build api app --host="localhost" --port=2343 --verbose

From that sample, the result will be:

  • clp.cmd: build
  • clp.val: [ "api", "app" ]
  • clp.cfg: { '--host': 'localhost', '--port': 2343 }
  • clp.opt: [ '--verbose' ]

Parser Properties

  • .cmd - A string represent the command name, taken from the first env. E.g: build
  • .opt - An array contains options list. Options are string that started with single or double dash. E.g: --version, -v
  • .val - An array contains values list. Values are string that not started with single or double dash. E.g: script, style
  • .cfg - An object contains configs. Configs are string that paired with =. E.g: host=localhost, port=8023

Example

node app.js build script host=localhost port=3000 --verbose

app.js

require('cb-clihp');

var clp = new Clihp.Parser();

console.log(clp.cmd); // build
console.log(clp.opt); // ['--verbose']
console.log(clp.val); // ['script']
console.log(clp.cfg); // { 'host': 'localhost', 'port': 3000 }

Parser Methods

All parser methods are accept multiple arguments. The examples below is related to the sample above.

.ask(QUESTIONS, CALLBACK)

A wrapper of Inquirer.prompt() module. For more informations about the QUESTIONS and CALLBACK, please refer to Inquirer Docs.


.hasopt(OPTIONS...)

Check does the cli has options.

Example

clp.hasopt('--verbose', '-vb'); // True
clp.hasopt('--debug');          // False

.hasval(VALUES...)

Check does the cli has values.

Example

clp.hasval('script'); // True
clp.hasval('styles'); // False

.hascfg(CONFIGS...)

Check does the cli has configs.

Example

clp.hascfg('host', 'port');   // True
clp.hascfg('envi');           // False

Helper

With helper, you can easily create a CLI app with simple steps, including showing the helps on the console. When creating helper, the class will create a default commands to show the help (-h, --help, help) and show the version (-v, --version, version).

Example (app.js)

// Creating helper instance.
new Clihp.Helper()

// Setting up the CLI helper.
    .setup({
        name    : 'Clihp',
        info    : 'A Lightweight Command Line Interface (CLI) Helper',
        version : require('./package.json').version,
        usage   : `node app.js command [options...]`,
        prefix  : [
            `-->`,
            `-------- CLI HELPER ----------------------------------->`,
            `-->`,
        ]
    })

    // Adding commands
    .add('cmd', {
        name  : 'start',
        alias : '-s',
        about : 'Start the server',
        usage : 'node app.js start host=hostname\r\n',
        exec( val, cfg, opt ) {
            if ( this.hasopt('--verbose') ) {
                console.log('Starting server');
            }

            if ( !this.hascfg('host') ) {
                this.help('The host config is required!');
            }
            else {
                console.log(`Server running at "${this.cfg.host}"`);
            }
        }
    })
    .add('cmd', {
        name  : 'stop',
        alias : '-q',
        about : 'Stop the server',
        usage : 'node app.js stop\r\n',

        exec ( val, cfg, opt ) {
            console.log('Stopping server');
        }
    })

    // Adding configs
    .add('cfg', {
        name  : 'host',
        type  : 'String',
        about : 'Server hostname'
    })
    .add('cfg', {
        name  : 'port',
        type  : 'Number',
        about : 'Server port'
    })

    // Adding options
    .add('opt', {
        name  : '--verbose',
        alias : '-b',
        about : 'Display the logs on the screen'
    })
    .add('opt', {
        name  : '--debug',
        alias : '-d, -g',
        about : 'Debug the process'
    })

    // Initialize the helper. Helper will never working without running this method.
    .init();
node app.js --help

Running the command above will resulting:

CBLoggy

node app.js start host=localhost --verbose

Running the command above will resulting:

Starting server

Methods

.setup(OPTIONS)

Setting up the CLI helper to show the help header.


.add(TYPE, OPTIONS)

Add commands, configs, and options to the helper. Add command with default as name will makes that command as default handler.

Default handler is used when no arguments defined on the CLI call, or the given command is not found. If no default command defined, then the Clihp will show warning when the CLI called without arguments.

Example

Say the app will use server as name.

#! /usr/bin/env node

new Clihp.Helper()
	.add('cmd', {
  		name: 'default',
        exec: function(val, cfg, opt) {
  			console.log(this.cmd, val, cfg, opt);
		}
	});
# Call without arguments, will show warning when no default command registered.
server

# Call with undefined command (index.js), will use default command if registered.
server index.js --host=localhost --port=8080 --verbose

Usage

cli.add(type, options);
  • type - String cmd, cfg, or opt. Cmd is to add command, cfg is to add config, and opt is to add option.
  • options - Object contains the command or option options.
    • name - [Required] String the primary command/option name.
    • alias - [Optional] String the command/option alias, separated by ,.
    • about - [Optional] String about the command/option. Leave blank to hide the command on the helper.
    • usage - [Optional] String about the how to use the command.
    • type - [Optional] String about the config value type.
    • exec - [Required] Function that will be executed when the command name is match with the command from cli. Optional for adding options and configs. The function call will receive (arg, cfg, opt) arguments. The function also will become the helper it self.

.help(MESSAGES)

Show the cli helps, with or without message.

Example

clp.help('The command is not registered!');

.init()

Run the Clihp Helper to get the CLI call to run the registered command.


TODOS


Changelog

v1.2.0 - (Feb 24, 2016)

  • Added clp.ask(questions, callback) to wrap the Inquirer module.
  • Added ability to set multiple config name with single value. E.g: cli-cmd set-env DB_USERNAME=DB_PASSWORD=DB_DATABASE=docker will resulting { DB_USERNAME: 'docker', DB_PASSWORD: 'docker', DB_DATABSE: 'docker }`

v1.1.0 - (Feb 17, 2016)

  • Call default command if no arguments defined, or the given command is not registered. If default command is not registered, will show warning.
  • Change the exec arguments order from (opt, val, cfg) to (val, cfg, opt)
  • Leave options.about and options.usage blank to hide the commands from help.
  • Added Configs group to the helper. $.add('cfg', OPTIONS)
  • Added ability to use Array[String…] and String on options.about and options.usage