# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.)

## [3.0.2] (2019-09-27)

### Fixed

* Improve tracking of executable subcommands.

### Changed

* update development dependencies

## [3.0.1] (2019-08-30)

### Added

* .name and .usage to README ([#1010])
* Table of Contents to README ([#1010])
* TypeScript definition for `executableFile` in CommandOptions ([#1028])

### Changed

* consistently use `const` rather than `var` in README ([#1026])

### Fixed

* help for sub commands with custom executableFile ([#1018])

3.0.0 / 2019-08-08
=================

  * Add option to specify executable file name ([#999])
    * e.g. `.command('clone', 'clone description', { executableFile: 'myClone' })`
  * Change docs for `.command` to contrast action handler vs git-style executable. ([#938] [#990])
  * **Breaking** Change TypeScript to use overloaded function for `.command`. ([#938] [#990])
  * Change to use straight quotes around strings in error messages (like 'this' instead of `this') ([#915])
  * Add TypeScript "reference types" for node ([#974])
  * Add support for hyphen as an option argument in subcommands ([#697])
  * Add support for a short option flag and its value to be concatenated for action handler subcommands ([#599])
    * e.g. `-p 80` can also be supplied as `-p80`
  * Add executable arguments to spawn in win32, for git-style executables ([#611])
    * e.g. `node --harmony myCommand.js clone`
  * Add parent command as prefix of subcommand in help ([#980])
  * Add optional custom description to `.version` ([#963])
    * e.g. `program.version('0.0.1', '-v, --vers', 'output the current version')`
  * Add `.helpOption(flags, description)` routine to customise help flags and description ([#963])
    * e.g. `.helpOption('-e, --HELP', 'read more information')`
  * Fix behavior of --no-* options ([#795])
    * can now define both `--foo` and `--no-foo`
    * **Breaking** custom event listeners: `--no-foo` on cli now emits `option:no-foo` (previously `option:foo`)
    * **Breaking** default value: defining `--no-foo` after defining `--foo` leaves the default value unchanged (previously set it to false)
    * allow boolean default value, such as from environment ([#987])
  * Increment inspector port for spawned subcommands ([#991])
    * e.g. `node --inspect myCommand.js clone`

Example Breaking Changes
------------------------

The custom event for a negated option like `--no-foo` is `option:no-foo` (previously `option:foo`).

```js
program
  .option('--no-foo')
  .on('option:no-foo', () => {
    console.log('removing foo');
  });
```

When using TypeScript, adding a command does not allow an explicit `undefined` for an unwanted executable description (e.g
for a command with an action handler).

```js
program
  .command('action1', undefined, { noHelp: true }) // No longer valid
  .command('action2', { noHelp: true }) // Correct
```

3.0.0-0 Prerelease / 2019-07-28
==============================

(Released as 3.0.0)

2.20.0 / 2019-04-02
==================

  * fix: resolve symbolic links completely when hunting for subcommands (#935)
  * Update index.d.ts (#930)
  * Update Readme.md (#924)
  * Remove --save option as it isn't required anymore (#918)
  * Add link to the license file (#900)
  * Added example of receiving args from options (#858)
  * Added missing semicolon (#882)
  * Add extension to .eslintrc (#876)

2.19.0 / 2018-10-02
==================

  * Removed newline after Options and Commands headers (#864)
  * Bugfix - Error output (#862)
  * Fix to change default value to string (#856)

2.18.0 / 2018-09-07
==================

  * Standardize help output (#853)
  * chmod 644 travis.yml (#851)
  * add support for execute typescript subcommand via ts-node (#849)

2.17.1 / 2018-08-07
==================

  * Fix bug in command emit (#844)

2.17.0 / 2018-08-03
==================

  * fixed newline output after help information (#833)
  * Fix to emit the action even without command (#778)
  * npm update (#823)

2.16.0 / 2018-06-29
==================

  * Remove Makefile and `test/run` (#821)
  * Make 'npm test' run on Windows (#820)
  * Add badge to display install size (#807)
  * chore: cache node_modules (#814)
  * chore: remove Node.js 4 (EOL), add Node.js 10 (#813)
  * fixed typo in readme (#812)
  * Fix types (#804)
  * Update eslint to resolve vulnerabilities in lodash (#799)
  * updated readme with custom event listeners. (#791)
  * fix tests (#794)

2.15.0 / 2018-03-07
==================

  * Update downloads badge to point to graph of downloads over time instead of duplicating link to npm
  * Arguments description

2.14.1 / 2018-02-07
==================

  * Fix typing of help function

2.14.0 / 2018-02-05
==================

  * only register the option:version event once
  * Fixes issue #727: Passing empty string for option on command is set to undefined
  * enable eqeqeq rule
  * resolves #754 add linter configuration to project
  * resolves #560 respect custom name for version option
  * document how to override the version flag
  * document using options per command

2.13.0 / 2018-01-09
==================

  * Do not print default for --no-
  * remove trailing spaces in command help
  * Update CI's Node.js to LTS and latest version
  * typedefs: Command and Option types added to commander namespace

2.12.2 / 2017-11-28
==================

  * fix: typings are not shipped

2.12.1 / 2017-11-23
==================

  * Move @types/node to dev dependency

2.12.0 / 2017-11-22
==================

  * add attributeName() method to Option objects
  * Documentation updated for options with --no prefix
  * typings: `outputHelp` takes a string as the first parameter
  * typings: use overloads
  * feat(typings): update to match js api
  * Print default value in option help
  * Fix translation error
  * Fail when using same command and alias (#491)
  * feat(typings): add help callback
  * fix bug when description is add after command with options (#662)
  * Format js code
  * Rename History.md to CHANGELOG.md (#668)
  * feat(typings): add typings to support TypeScript (#646)
  * use current node

2.11.0 / 2017-07-03
==================

  * Fix help section order and padding (#652)
  * feature: support for signals to subcommands (#632)
  * Fixed #37, --help should not display first (#447)
  * Fix translation errors. (#570)
  * Add package-lock.json
  * Remove engines
  * Upgrade package version
  * Prefix events to prevent conflicts between commands and options (#494)
  * Removing dependency on graceful-readlink
  * Support setting name in #name function and make it chainable
  * Add .vscode directory to .gitignore (Visual Studio Code metadata)
  * Updated link to ruby commander in readme files

2.10.0 / 2017-06-19
==================

  * Update .travis.yml. drop support for older node.js versions.
  * Fix require arguments in README.md
  * On SemVer you do not start from 0.0.1
  * Add missing semi colon in readme
  * Add save param to npm install
  * node v6 travis test
  * Update Readme_zh-CN.md
  * Allow literal '--' to be passed-through as an argument
  * Test subcommand alias help
  * link build badge to master branch
  * Support the alias of Git style sub-command
  * added keyword commander for better search result on npm
  * Fix Sub-Subcommands
  * test node.js stable
  * Fixes TypeError when a command has an option called `--description`
  * Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets.
  * Add chinese Readme file

2.9.0 / 2015-10-13
==================

  * Add option `isDefault` to set default subcommand #415 @Qix-
  * Add callback to allow filtering or post-processing of help text #434 @djulien
  * Fix `undefined` text in help information close #414 #416 @zhiyelee

2.8.1 / 2015-04-22
==================

 * Back out `support multiline description` Close #396 #397

2.8.0 / 2015-04-07
==================

  * Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee
  * Fix bug in Git-style sub-commands #372 @zhiyelee
  * Allow commands to be hidden from help #383 @tonylukasavage
  * When git-style sub-commands are in use, yet none are called, display help #382 @claylo
  * Add ability to specify arguments syntax for top-level command #258 @rrthomas
  * Support multiline descriptions #208 @zxqfox

2.7.1 / 2015-03-11
==================

 * Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367.

2.7.0 / 2015-03-09
==================

 * Fix git-style bug when installed globally. Close #335 #349 @zhiyelee
 * Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage
 * Add support for camelCase on `opts()`. Close #353  @nkzawa
 * Add node.js 0.12 and io.js to travis.yml
 * Allow RegEx options. #337 @palanik
 * Fixes exit code when sub-command failing.  Close #260 #332 @pirelenito
 * git-style `bin` files in $PATH make sense. Close #196 #327  @zhiyelee

2.6.0 / 2014-12-30
==================

  * added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee
  * Add application description to the help msg. Close #112 @dalssoft

2.5.1 / 2014-12-15
==================

  * fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee

2.5.0 / 2014-10-24
==================

 * add support for variadic arguments. Closes #277 @whitlockjc

2.4.0 / 2014-10-17
==================

 * fixed a bug on executing the coercion function of subcommands option. Closes #270
 * added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage
 * added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage
 * fixed a bug on subcommand name. Closes #248 @jonathandelgado
 * fixed function normalize doesn’t honor option terminator. Closes #216 @abbr

2.3.0 / 2014-07-16
==================

 * add command alias'. Closes PR #210
 * fix: Typos. Closes #99
 * fix: Unused fs module. Closes #217

2.2.0 / 2014-03-29
==================

 * add passing of previous option value
 * fix: support subcommands on windows. Closes #142
 * Now the defaultValue passed as the second argument of the coercion function.

2.1.0 / 2013-11-21
==================

 * add: allow cflag style option params, unit test, fixes #174

2.0.0 / 2013-07-18
==================

 * remove input methods (.prompt, .confirm, etc)

1.3.2 / 2013-07-18
==================

 * add support for sub-commands to co-exist with the original command

1.3.1 / 2013-07-18
==================

 * add quick .runningCommand hack so you can opt-out of other logic when running a sub command

1.3.0 / 2013-07-09
==================

 * add EACCES error handling
 * fix sub-command --help

1.2.0 / 2013-06-13
==================

 * allow "-" hyphen as an option argument
 * support for RegExp coercion

1.1.1 / 2012-11-20
==================

  * add more sub-command padding
  * fix .usage() when args are present. Closes #106

1.1.0 / 2012-11-16
==================

  * add git-style executable subcommand support. Closes #94

1.0.5 / 2012-10-09
==================

  * fix `--name` clobbering. Closes #92
  * fix examples/help. Closes #89

1.0.4 / 2012-09-03
==================

  * add `outputHelp()` method.

1.0.3 / 2012-08-30
==================

  * remove invalid .version() defaulting

1.0.2 / 2012-08-24
==================

  * add `--foo=bar` support [arv]
  * fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus]

1.0.1 / 2012-08-03
==================

  * fix issue #56
  * fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode())

1.0.0 / 2012-07-05
==================

  * add support for optional option descriptions
  * add defaulting of `.version()` to package.json's version

0.6.1 / 2012-06-01
==================

  * Added: append (yes or no) on confirmation
  * Added: allow node.js v0.7.x

0.6.0 / 2012-04-10
==================

  * Added `.prompt(obj, callback)` support. Closes #49
  * Added default support to .choose(). Closes #41
  * Fixed the choice example

0.5.1 / 2011-12-20
==================

  * Fixed `password()` for recent nodes. Closes #36

0.5.0 / 2011-12-04
==================

  * Added sub-command option support [itay]

0.4.3 / 2011-12-04
==================

  * Fixed custom help ordering. Closes #32

0.4.2 / 2011-11-24
==================

  * Added travis support
  * Fixed: line-buffered input automatically trimmed. Closes #31

0.4.1 / 2011-11-18
==================

  * Removed listening for "close" on --help

0.4.0 / 2011-11-15
==================

  * Added support for `--`. Closes #24

0.3.3 / 2011-11-14
==================

  * Fixed: wait for close event when writing help info [Jerry Hamlet]

0.3.2 / 2011-11-01
==================

  * Fixed long flag definitions with values [felixge]

0.3.1 / 2011-10-31
==================

  * Changed `--version` short flag to `-V` from `-v`
  * Changed `.version()` so it's configurable [felixge]

0.3.0 / 2011-10-31
==================

  * Added support for long flags only. Closes #18

0.2.1 / 2011-10-24
==================

  * "node": ">= 0.4.x < 0.7.0". Closes #20

0.2.0 / 2011-09-26
==================

  * Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs]

0.1.0 / 2011-08-24
==================

  * Added support for custom `--help` output

0.0.5 / 2011-08-18
==================

  * Changed: when the user enters nothing prompt for password again
  * Fixed issue with passwords beginning with numbers [NuckChorris]

0.0.4 / 2011-08-15
==================

  * Fixed `Commander#args`

0.0.3 / 2011-08-15
==================

  * Added default option value support

0.0.2 / 2011-08-15
==================

  * Added mask support to `Command#password(str[, mask], fn)`
  * Added `Command#password(str, fn)`

0.0.1 / 2010-01-03
==================

  * Initial release

[#599]: https://github.com/tj/commander.js/issues/599
[#611]: https://github.com/tj/commander.js/issues/611
[#697]: https://github.com/tj/commander.js/issues/697
[#795]: https://github.com/tj/commander.js/issues/795
[#915]: https://github.com/tj/commander.js/issues/915
[#938]: https://github.com/tj/commander.js/issues/938
[#963]: https://github.com/tj/commander.js/issues/963
[#974]: https://github.com/tj/commander.js/issues/974
[#980]: https://github.com/tj/commander.js/issues/980
[#987]: https://github.com/tj/commander.js/issues/987
[#990]: https://github.com/tj/commander.js/issues/990
[#991]: https://github.com/tj/commander.js/issues/991
[#999]: https://github.com/tj/commander.js/issues/999
[#1010]: https://github.com/tj/commander.js/pull/1010
[#1018]: https://github.com/tj/commander.js/pull/1018
[#1026]: https://github.com/tj/commander.js/pull/1026
[#1028]: https://github.com/tj/commander.js/pull/1028

[Unreleased]: https://github.com/tj/commander.js/compare/master...develop
[3.0.1]: https://github.com/tj/commander.js/compare/v3.0.0...v3.0.1
