# 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.) ## [4.1.1] (2020-02-02) ### Fixed * TypeScript definition for `.action()` should include Promise for async ([#1157]) ## [4.1.0] (2020-01-06) ### Added * two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102]) * see storeOptionsAsProperties and passCommandToAction in README * `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118]) ### Fixed * Remove trailing blanks from wrapped help text ([#1096]) ### Changed * update dependencies * extend security coverage for Commander 2.x to 2020-02-03 * improvements to README * improvements to TypeScript definition documentation * move old versions out of main CHANGELOG * removed explicit use of `ts-node` in tests ## [4.0.1] (2019-11-12) ### Fixed * display help when requested, even if there are missing required options ([#1091]) ## [4.0.0] (2019-11-02) ### Added * automatically wrap and indent help descriptions for options and commands ([#1051]) * `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040]) * support for declaring required options with `.requiredOptions()` ([#1071]) * GitHub Actions support ([#1027]) * translation links in README ### Changed * dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035]) * call default subcommand even when there are unknown options ([#1047]) * *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053]) ### Fixed * *Breaking* keep command object out of program.args when action handler called ([#1048]) * also, action handler now passed array of unknown arguments * complain about unknown options when program argument supplied and action handler ([#1049]) * this changes parameters to `command:*` event to include unknown arguments * removed deprecated `customFds` option from call to `child_process.spawn` ([#1052]) * rework TypeScript declarations to bring all types into imported namespace ([#1081]) ### Migration Tips #### Testing for no arguments If you were previously using code like: ```js if (!program.args.length) ... ``` a partial replacement is: ```js if (program.rawArgs.length < 3) ... ``` ## [4.0.0-1] Prerelease (2019-10-08) (Released in 4.0.0) ## [4.0.0-0] Prerelease (2019-10-01) (Released in 4.0.0) ## [2.20.1] (2019-09-29) ### Fixed * Improve tracking of executable subcommands. ### Changed * update development dependencies ## [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` ### Migration Tips 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) ## Older versions * [1.x](./changelogs/CHANGELOG-1.md) * [0.x](./changelogs/CHANGELOG-0.md) [#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 [#806]: https://github.com/tj/commander.js/issues/806 [#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 [#993]: https://github.com/tj/commander.js/issues/993 [#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 [#1027]: https://github.com/tj/commander.js/pull/1027 [#1028]: https://github.com/tj/commander.js/pull/1028 [#1035]: https://github.com/tj/commander.js/pull/1035 [#1040]: https://github.com/tj/commander.js/pull/1040 [#1047]: https://github.com/tj/commander.js/pull/1047 [#1048]: https://github.com/tj/commander.js/pull/1048 [#1049]: https://github.com/tj/commander.js/pull/1049 [#1051]: https://github.com/tj/commander.js/pull/1051 [#1052]: https://github.com/tj/commander.js/pull/1052 [#1053]: https://github.com/tj/commander.js/pull/1053 [#1071]: https://github.com/tj/commander.js/pull/1071 [#1081]: https://github.com/tj/commander.js/pull/1081 [#1091]: https://github.com/tj/commander.js/pull/1091 [#1096]: https://github.com/tj/commander.js/pull/1096 [#1102]: https://github.com/tj/commander.js/pull/1102 [#1118]: https://github.com/tj/commander.js/pull/1118 [#1157]: https://github.com/tj/commander.js/pull/1157 [Unreleased]: https://github.com/tj/commander.js/compare/master...develop [4.1.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.1.1 [4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0 [4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1 [4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0 [4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1 [4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0 [3.0.2]: https://github.com/tj/commander.js/compare/v3.0.1...v3.0.2 [3.0.1]: https://github.com/tj/commander.js/compare/v3.0.0...v3.0.1 [3.0.0]: https://github.com/tj/commander.js/compare/v2.20.1...v3.0.0 [2.20.1]: https://github.com/tj/commander.js/compare/v2.20.0...v2.20.1