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 🙏

© 2026 – Pkg Stats / Ryan Hefner

axy-cli-opts

v0.0.4

Published

Simplest Parser Command Line Arguments

Downloads

4

Readme

Simplest Parser Command Line Arguments (Node.js)

How to use

Install:

npm install --save axy-cli-opts

Use:

var opts = require("axy-cli-opts");

var args = opts.parse();

Agreement of the CLI Arguments

The library work with follow format of command line arguments.

For example:

node index.js --opt=value -x2 -f arg1 arg2

All components that begin with - is short options. That begin with -- is long options. All others is arguments.

Long Options

--opt=value. Here opt is the option name, value is the option value.

--opt it is "flag". Value of this option is TRUE.

--opt= it is not flag. Value of this options is empty string.

Short Options

Short options consist of a signle character. The value immediately follows the option name (without spaces).

-qwer is option q with value wer. Analogue of --q=wer.

-q is flag.

Multiple Options

mysqldump --add-locks --compress --ignore-table=log --ignore-table=sessions database

In the example the option --ignore-table was specified multiple times. The values of such options are stored into an array.

parse([argv: string[] [, format: object]):object

The library provides two methods: parse() and help(). parse() returns values of options.

Simple Format

If the argument format is not specified then the library loads all options without cheking without distinguishing between short and long and etc.

console.log(opts.parse());

Run:

node index.js -a -b2 --opt=1 --opt=2 arg1 arg2

Out:

{
    args: [ // list of arguments
        'arg1',
        'arg2'
    ],
    options: { // values of options
        a: true,  // -a - flag
        b: '2',   // -b2
        opt: ['1', '2']  // multiple option
    }
};

If the first argument argv is not specified used process.argv.slice(2). argv taken the array of cli components.

opts.parse(["-a", "-b2", "--opt=1", "arg"]);

Format

If the argument format is specified then options are checked and loaded in accordance with it.

It is dictionary: the long option name => the option format. The options format contains the follows fields.

short (string)

The short alias for the long name. Short options can not exist by themselves. Just as an alias.

var format = {
    one: {
        short: "o"
    },
    two: {
        short: "t"
    }
};

opts.parse(["--one=1",  "-t2"], format); // {args: [], options: {one: "1", two: "2"}}

opts.parse(["--one=1", "-x3"], format); // Error: Unknown option '-x'
flag (boolean)

Indicates that the option is a flag.

var format = {
    one: {
        short: "o",
        flag: true
    },
    two: {
        short: "t"
    }
};

opts.parse(["-o",  "-t2"], format); // {args: [], options: {one: true, two: '2'}}

opts.parse(["-o1", "-t2"], format); // Error: Option '--one' is flag

opts.parse(["-o", "-t"], format); // Error: Option '--two' is not flag
mixed (boolean)

Allows the option marked as flag also take other values.

type (string)

Type validation. Defines three types: string (by default), int and id.

int is an integer, id is a positive integer > 0.

var format = {
    id: {
        type: "id"
    }
};

opts.parse(["--id=-3"], format); // Option '--id' must be a positive integer

The values cast to number type (in other cases it will be a string).

many (boolean)

Allows multiple options.

var format = {
    one: {
        short: "o"
    },
    two: {
        short: "t",
        many: true
    }
};


opts.parse(["-o1", "-t2", "--two=3", "-t4"], format); // {args: [], options: {one: '1', two: ['2', '3', '4']}}

opts.parse(["-o1", "-t2"], format); // {args: [], options: {one: '1', two: ['2']}}

opts.parse(["-o1", "-o2", "-t3"], format); // Error: Duplicate option '--one'

Each value of many-option will passes all the checks in other format fields.

defaults (any)

parse() returns all options that specified in the format. If any option is not specified, then used defaults field. If this field is not specified, it option is required.

var format = {
    one: {
    },
    two: {
        defaults: "value"
    }
};

opts.parse(["--one=1"], format); // {args: [], options: {one: '1', two: 'value'}}

opts.parse(["--two=2"], format); // Error: Required option '--one'
defaults and many

For many options:

If defaults is scalar and the option is not specified used an array [defaults] for result.

If defaults is scalar and the option is specified then defaults is erased.

If defaults is array then specified values will be added to this array.

var format = {
    one: {
        many: true,
        defaults: 1
    },
    two: {
        many: true,
        defaults: 2
    },
    three: {
        many: true,
        type: "id",
        defaults: [3, 4]
    }
};

var args = ["--two=5", "--two=6", "--three=7", "--three=8"];

console.log(opts.parse(args, format));

/* Result:
{
args: [],
options: {
    one: [1],
    two: ['5', '6'],
    three: [3, 4, '7', '8'],
}
}
*/
filter (function)

This function calls after other validations (type and flag). The result of this function uses as option value. The function can act as a validator - just throws an exception.

The arguments list of the filter:

  • value - the value from CLI arguments list
  • name - the option name
  • current - the current value of the option (for many-options could contains an array of previous options)

The filter called in the context of the format array of this option.

description and descriptionVal

See help() method.

Other values

Any other values may be used in the filter.

help(format: object): string

Returns the help information about the options format.

var format = {
    version: {
        short: "v",
        flag: true,
        description: "print version",
    },
    'icu-data-dir': {
        description: "set ICU data load path to dir\n(overrides NODE_ICU_DATA)",
        descriptionVal: "dir"
    },
    'enable-ssl-2': {
        flag: true,
        description: "enable ssl2"
    },
    'help': {
        short: "h",
        flag: true,
    }
};

console.log(opts.help(format));

Output:

--enable-ssl-2     enable ssl2
-h, --help
--icu-data-dir=dir set ICU data load path to dir
                   (overrides NODE_ICU_DATA)
-v, --version      print version

Example

var opts = require("axy-cli-opts");
var format = {
    // ...
};

try {
    var args = opts.parse(null, format);
} catch (e) {
    console.log("Error: " + e.message);
    console.log("Format: ./script.js <options> argument");
    console.log("");
    console.log(opts.help(format));
    process.exit(1);
}