## option-definition * [option-definition](#module_option-definition) * [OptionDefinition](#exp_module_option-definition--OptionDefinition) ⏏ * [.name](#module_option-definition--OptionDefinition+name) : string * [.type](#module_option-definition--OptionDefinition+type) : function * [.alias](#module_option-definition--OptionDefinition+alias) : string * [.multiple](#module_option-definition--OptionDefinition+multiple) : boolean * [.lazyMultiple](#module_option-definition--OptionDefinition+lazyMultiple) : boolean * [.defaultOption](#module_option-definition--OptionDefinition+defaultOption) : boolean * [.defaultValue](#module_option-definition--OptionDefinition+defaultValue) : \* * [.group](#module_option-definition--OptionDefinition+group) : string \| Array.<string> ### OptionDefinition ⏏ Describes a command-line option. Additionally, if generating a usage guide with [command-line-usage](https://github.com/75lb/command-line-usage) you could optionally add `description` and `typeLabel` properties to each definition. **Kind**: Exported class #### option.name : string The only required definition property is `name`, so the simplest working example is ```js const optionDefinitions = [ { name: 'file' }, { name: 'depth' } ] ``` Where a `type` property is not specified it will default to `String`. | # | Command line args | .parse() output | | --- | -------------------- | ------------ | | 1 | `--file` | `{ file: null }` | | 2 | `--file lib.js` | `{ file: 'lib.js' }` | | 3 | `--depth 2` | `{ depth: '2' }` | Unicode option names and aliases are valid, for example: ```js const optionDefinitions = [ { name: 'один' }, { name: '两' }, { name: 'три', alias: 'т' } ] ``` **Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition) #### option.type : function The `type` value is a setter function (you receive the output from this), enabling you to be specific about the type and value received. The most common values used are `String` (the default), `Number` and `Boolean` but you can use a custom function, for example: ```js const fs = require('fs') class FileDetails { constructor (filename) { this.filename = filename this.exists = fs.existsSync(filename) } } const cli = commandLineArgs([ { name: 'file', type: filename => new FileDetails(filename) }, { name: 'depth', type: Number } ]) ``` | # | Command line args| .parse() output | | --- | ----------------- | ------------ | | 1 | `--file asdf.txt` | `{ file: { filename: 'asdf.txt', exists: false } }` | The `--depth` option expects a `Number`. If no value was set, you will receive `null`. | # | Command line args | .parse() output | | --- | ----------------- | ------------ | | 2 | `--depth` | `{ depth: null }` | | 3 | `--depth 2` | `{ depth: 2 }` | **Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition) **Default**: String #### option.alias : string getopt-style short option names. Can be any single character (unicode included) except a digit or hyphen. ```js const optionDefinitions = [ { name: 'hot', alias: 'h', type: Boolean }, { name: 'discount', alias: 'd', type: Boolean }, { name: 'courses', alias: 'c' , type: Number } ] ``` | # | Command line | .parse() output | | --- | ------------ | ------------ | | 1 | `-hcd` | `{ hot: true, courses: null, discount: true }` | | 2 | `-hdc 3` | `{ hot: true, discount: true, courses: 3 }` | **Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition) #### option.multiple : boolean Set this flag if the option takes a list of values. You will receive an array of values, each passed through the `type` function (if specified). ```js const optionDefinitions = [ { name: 'files', type: String, multiple: true } ] ``` Note, examples 1 and 3 below demonstrate "greedy" parsing which can be disabled by using `lazyMultiple`. | # | Command line | .parse() output | | --- | ------------ | ------------ | | 1 | `--files one.js two.js` | `{ files: [ 'one.js', 'two.js' ] }` | | 2 | `--files one.js --files two.js` | `{ files: [ 'one.js', 'two.js' ] }` | | 3 | `--files *` | `{ files: [ 'one.js', 'two.js' ] }` | **Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition) #### option.lazyMultiple : boolean Identical to `multiple` but with greedy parsing disabled. ```js const optionDefinitions = [ { name: 'files', lazyMultiple: true }, { name: 'verbose', alias: 'v', type: Boolean, lazyMultiple: true } ] ``` | # | Command line | .parse() output | | --- | ------------ | ------------ | | 1 | `--files one.js --files two.js` | `{ files: [ 'one.js', 'two.js' ] }` | | 2 | `-vvv` | `{ verbose: [ true, true, true ] }` | **Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition) #### option.defaultOption : boolean Any values unaccounted for by an option definition will be set on the `defaultOption`. This flag is typically set on the most commonly-used option to make for more concise usage (i.e. `$ example *.js` instead of `$ example --files *.js`). ```js const optionDefinitions = [ { name: 'files', multiple: true, defaultOption: true } ] ``` | # | Command line | .parse() output | | --- | ------------ | ------------ | | 1 | `--files one.js two.js` | `{ files: [ 'one.js', 'two.js' ] }` | | 2 | `one.js two.js` | `{ files: [ 'one.js', 'two.js' ] }` | | 3 | `*` | `{ files: [ 'one.js', 'two.js' ] }` | **Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition) #### option.defaultValue : \* An initial value for the option. ```js const optionDefinitions = [ { name: 'files', multiple: true, defaultValue: [ 'one.js' ] }, { name: 'max', type: Number, defaultValue: 3 } ] ``` | # | Command line | .parse() output | | --- | ------------ | ------------ | | 1 | | `{ files: [ 'one.js' ], max: 3 }` | | 2 | `--files two.js` | `{ files: [ 'two.js' ], max: 3 }` | | 3 | `--max 4` | `{ files: [ 'one.js' ], max: 4 }` | **Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition) #### option.group : string \| Array.<string> When your app has a large amount of options it makes sense to organise them in groups. There are two automatic groups: `_all` (contains all options) and `_none` (contains options without a `group` specified in their definition). ```js const optionDefinitions = [ { name: 'verbose', group: 'standard' }, { name: 'help', group: [ 'standard', 'main' ] }, { name: 'compress', group: [ 'server', 'main' ] }, { name: 'static', group: 'server' }, { name: 'debug' } ] ```
#Command Line.parse() output
1--verbose

{
 _all: { verbose: true },
 standard: { verbose: true }
}
2--debug

{
 _all: { debug: true },
 _none: { debug: true }
}
3--verbose --debug --compress

{
 _all: {
   verbose: true,
   debug: true,
   compress: true
 },
 standard: { verbose: true },
 server: { compress: true },
 main: { compress: true },
 _none: { debug: true }
}
4--compress

{
 _all: { compress: true },
 server: { compress: true },
 main: { compress: true }
}
**Kind**: instance property of [OptionDefinition](#exp_module_option-definition--OptionDefinition)