Skip to content

Releases: tj/commander.js

9.0.0-1

14 Jan 20:35
Compare
Choose a tag to compare
9.0.0-1 Pre-release
Pre-release

Added

  • .error() for generating errors from client code just like Commander generated errors, with support for .configureOutput(), .exitOverride(), and .showHelpAfterError() (#1675)
  • .optsWithGlobals() to return merged local and global options (#1671)

9.0.0-0

22 Dec 05:47
253f4ff
Compare
Choose a tag to compare
9.0.0-0 Pre-release
Pre-release

Added

  • simpler ECMAScript import (#1589)
  • Option.preset() allows specifying value/arg for option when used without option-argument (especially optional, but also boolean option) (#1652)
  • .executableDir() for custom search for subcommands (#1571)
  • throw with helpful message if pass Option to .option() or .requiredOption() (#1655)

Changed

  • Breaking: Commander 9 requires Node.js v12.20.0 or higher
  • update package-lock.json to lockfile@2 format (#1659)
  • showSuggestionAfterError is now on by default (#1657)
  • Breaking: default value specified for boolean option now always used as default value (see .preset() to match some previous behaviours) (#1652)
  • default value for boolean option only shown in help if true/false (#1652)
  • use command name as prefix for subcommand stand-alone executable name (with fallback to script name for backwards compatibility) (#1571)
  • allow absolute path with executableFile (#1571)
  • removed restriction that nested subcommands must specify executableFile (#1571)

Fixed

  • option with optional argument not supplied on command line now works when option already has a value, whether from default value or from previous arguments (#1652)

Removed

  • Breaking: removed internal fallback to require.main.filename when script not known from arguments passed to .parse() (can supply details using .name(), and .executableDir() or executableFile) (#1571)

v8.3.0

22 Oct 07:03
Compare
Choose a tag to compare

Added

  • .getOptionValueSource() and .setOptionValueWithSource(), where expected values for source are one of 'default', 'env', 'config', 'cli' (#1613)

Deprecated

  • .command('*'), use default command instead (#1612)
  • on('command:*'), use .showSuggestionAfterError() instead (#1612)

v8.2.0

10 Sep 07:01
Compare
Choose a tag to compare

Added

  • .showSuggestionAfterError() to show suggestions after unknown command or unknown option (#1590)
  • add Option support for values from environment variables using .env() (#1587)

Changed

  • show error for unknown global option before subcommand (rather than just help) (#1590)

Removed

  • TypeScript declaration of unimplemented Option method argumentRejected

v8.1.0

27 Jul 03:57
Compare
Choose a tag to compare

Added

  • .copyInheritedSettings() (#1557)
  • update Chinese translations for Commander v8 (#1570)
  • Argument methods for .argRequired() and .argOptional() (#1567)

v8.0.0

25 Jun 08:25
80054ba
Compare
Choose a tag to compare

Added

  • .argument(name, description) for adding command-arguments (#1490)
    • supports default value for optional command-arguments (#1508)
    • supports custom processing function (#1508)
  • .createArgument() factory method (#1497)
  • .addArgument() (#1490)
  • Argument supports .choices() (#1525)
  • .showHelpAfterError() to display full help or a custom message after an error (#1534)
  • .hook() with support for 'preAction' and 'postAction' callbacks (#1514)
  • client typing of .opts() return type using TypeScript generics (#1539)
  • the number of command-arguments is checked for programs without an action handler (#1502)
  • .getOptionValue() and .setOptionValue() (#1521)

Changed

  • refactor and simplify TypeScript declarations (with no default export) (#1520)
  • .parseAsync() is now declared as async (#1513)
  • Breaking: Help method .visibleArguments() returns array of Argument (#1490)
  • Breaking: Commander 8 requires Node.js 12 or higher (#1500)
  • Breaking: CommanderError code commander.invalidOptionArgument renamed commander.invalidArgument (#1508)
  • Breaking: TypeScript declaration for .addTextHelp() callback no longer allows result of undefined, now just string (#1516)
  • refactor index.tab into a file per class (#1522)
  • remove help suggestion from "unknown command" error message (see .showHelpAfteError()) (#1534)
  • Command property .arg initialised to empty array (was previously undefined) (#1529)
  • update dependencies

Deprecated

  • second parameter of cmd.description(desc, argDescriptions) for adding argument descriptions (#1490)
    • (use new .argument(name, description) instead)
  • InvalidOptionArgumentError (replaced by InvalidArgumentError) (#1508)

Removed

  • Breaking: TypeScript declaration for default export of global Command object (#1520)
    • (still available as named program export)

Migration Tips

If you have a simple program without an action handler, you will now get an error if
there are missing command-arguments.

program
  .option('-d, --debug')
  .arguments('<file>');
program.parse();
$ node trivial.js 
error: missing required argument 'file'

If you want to show the help in this situation, you could check the arguments before parsing:

if (process.argv.length === 2)
  program.help();
program.parse();

Or, you might choose to show the help after any user error:

program.showHelpAfterError();

8.0.0-2

06 Jun 04:37
0e204e8
Compare
Choose a tag to compare
8.0.0-2 Pre-release
Pre-release

Added

  • .showHelpAfterError() to display full help or a custom message after an error (#1534)
  • custom argument processing function also called without action handler (only with action handler in v8.0.0-0) (#1529)

Changed

  • remove help suggestion from "unknown command" error message (see .showHelpAfteError()) (#1534)
  • Command property .arg initialised to empty array (was previously undefined) (#1529)

8.0.0-1

31 May 07:33
5ddc41b
Compare
Choose a tag to compare
8.0.0-1 Pre-release
Pre-release

Added

  • .addArgument() (#1490)
  • Argument supports .choices() (#1525)
  • client typing of .opts() return type using TypeScript generics (#1539)

Changed

  • refactor index.tab into a file per class (#1522)
  • update dependencies

8.0.0-0

22 May 23:34
ff7658c
Compare
Choose a tag to compare
8.0.0-0 Pre-release
Pre-release

Added

  • .getOptionValue() and .setOptionValue() (#1521)
  • .hook() with support for 'preAction' and 'postAction' callbacks (#1514)
  • .argument(name, description) for adding command-arguments (#1490)
    • supports default value for optional command-arguments (#1508)
    • supports custom processing function (#1508)
  • .createArgument() factory method (#1497)
  • the number of command-arguments is checked for programs without an action handler (#1502)

Changed

  • refactor and simplify TypeScript declarations (with no default export) (#1520)
  • .parseAsync() is now declared as async (#1513)
  • Breaking: Help method .visibleArguments() returns array of Argument (#1490)
  • Breaking: Commander 8 requires Node.js 12 or higher (#1500)
  • Breaking: CommanderError code commander.invalidOptionArgument renamed commander.invalidArgument (#1508)
  • Breaking: TypeScript declaration for .addTextHelp() callback no longer allows result of undefined, now just string (#1516)

Deprecated

  • second parameter of cmd.description(desc, argDescriptions) for adding argument descriptions (#1490)
    • (use new .argument(name, description) instead)
  • InvalidOptionArgumentError (replaced by InvalidArgumentError) (#1508)

Removed

  • Breaking: TypeScript declaration for default export of global Command object (#1520)
    • (still available as named program export)

v7.2.0

21 Mar 21:57
Compare
Choose a tag to compare

Added

  • TypeScript typing for parent property on Command (#1475)
  • TypeScript typing for .attributeName() on Option (#1483)
  • support information in package (#1477)

Changed

  • improvements to error messages, README, and tests
  • update dependencies