[![NPM version ](https://badge.fury.io/js/argv.png )](http://badge.fury.io/js/argv) ![Test Runner ](https://github.com/codenothing/argv/actions/workflows/main.yml/badge.svg ) [![Code Climate ](https://codeclimate.com/github/codenothing/argv.png )](https://codeclimate.com/github/codenothing/argv)
# argv
`argv` is a simple, zero dependency, command line argument parser for NodeJS. For a more feature-full CLI parser, checkout [Commander.js ](https://www.npmjs.com/package/commander ) or [Yargs ](https://www.npmjs.com/package/yargs )
### Installation
```bash
$ npm install argv
```
### Usage
```js
var argv = require( 'argv' );
var args = argv.option( options ).run();
-> { targets: [], options: {} }
```
### Run
Runs the argument parser on the global arguments. Custom arguments array can be used by passing into this method
```js
// Parses default arguments 'process.argv.slice( 2 )'
argv.run();
// Parses array instead
argv.run(["--option=123", "-o", "123"]);
```
### Options
`argv` is a strict argument parser, which means all options must be defined before parsing starts.
```js
argv.option({
name: "option",
short: "o",
type: "string",
description: "Defines an option for your script",
example: "'script --option=value' or 'script -o value'",
onset: function (args) {
args; // Object of current arguments parsed
},
});
```
### Modules
Modules are nested commands for more complicated scripts. Each module has it's own set of options that
have to be defined independently of the root options.
```js
argv.mod({
mod: 'module',
description: 'Description of what the module is used for',
options: [ list of options ]
});
```
### Types
Types convert option values to useful JS objects. They are defined along with each option.
- `string` : Ensure values are strings
- `path` : Converts value into a fully resolved path.
- `integer | int` : Converts value into an integer
- `float` : Converts value into a float number
- `boolean | bool` : Converts value into a boolean object. 'true' and '1' are converted to true, everything else is false.
- `csv` : Converts value into an array by splitting on comma's.
- `list` : Allows for option to be defined multiple times, and each value added to an array
- `[list|csv],[type]` : Combo type that allows you to create a list or csv and convert each individual value into a type.
```js
argv.option([
{
name: 'option',
type: 'csv,int'
},
{
name: 'path',
short: 'p',
type: 'list,path'
}
]);
// csv and int combo
$ script --option=123,456.001,789.01
-> option: [ 123, 456, 789 ]
// list and path combo
$ script -p /path/to/file1 -p /path/to/file2
-> option: [ '/path/to/file1', '/path/to/file2' ]
```
You can also create your own custom type for special conversions.
```js
argv.type( 'squared', function( value ) {
value = parseFloat( value );
return value * value;
});
argv.option({
name: 'square',
short: 's',
type: 'squared'
});
$ script -s 2
-> 4
```
### Version
Defining the scripts version number will add the version option and print it out when asked.
```js
argv.version( 'v1.0' );
$ script --version
v1.0
```
### Info
Custom information can be displayed at the top of the help printout using this method
```js
argv.info( 'Special script info' );
$ script --help
Special script info
... Rest of Help Doc ...
```
### Clear
If you have competing scripts accessing the `argv` object, you can clear out any previous options that may have been set.
```js
argv.clear().option([new options()]);
```
### Help
`argv` injects a default help option initially and on clears. The help() method triggers the help printout.
```js
argv.help();
```