Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
2.20.3
->12.1.0
Release Notes
tj/commander.js (commander)
v12.1.0
Compare Source
Added
v12.0.0
Compare Source
Added
.addHelpOption()
as another way of configuring built-in help option ([#2006]).helpCommand()
for configuring built-in help command ([#2087])Fixed
passThroughOptions
constraints when using.addCommand
and throw if parent command does not have.enablePositionalOptions()
enabled ([#1937])Changed
.storeOptionsAsProperties()
after setting an option value ([#1928])@api private
with documented@private
([#1949]).addHelpCommand()
now takes a Command (passing string or boolean still works as before but deprecated) ([#2087])Deprecated
.addHelpCommand()
passing string or boolean (use.helpCommand()
or pass a Command) ([#2087])Removed
program
export instead) ([#2017])Migration Tips
global program
If you are using the deprecated default import of the global Command object, you need to switch to using a named import (or create a new
Command
).option and command clashes
A couple of configuration problems now throw an error, which will pick up issues in existing programs:
v11.1.0
Compare Source
Fixed
OptionValueSource
to allow any string, to match supported use of custom sources ([#1983])Command.version()
can also be used as getter ([#1982])Commands.executableDir()
, for when not configured ([#1965])Added
registeredArguments
property onCommand
with the array of definedArgument
(likeCommand.options
forOption
) ([#2010])envVar
,presetArg
([#2019])argChoices
,defaultValue
,defaultValueDescription
([#2019])Changed
Deprecated
Command._args
was private anyway, but now available asregisteredArguments
([#2010])v11.0.0
Compare Source
Fixed
Changed
v10.0.1
Compare Source
Added
Fixed
Option.optionFlags
property from TypeScript definition ([#1844])Changed
.implies()
([#1854])v10.0.0
Compare Source
Added
Changed
v9.5.0
Compare Source
Added
.getOptionValueSourceWithGlobals()
([#1832])showGlobalOptions
for.configureHelp{}
andHelp
([#1828])v9.4.1
Compare Source
Fixed
.setOptionValue()
now also clears option source ([#1795])implied
toOptionValueSource
for option values set by using.implies()
([#1794])undefined
to return type of.getOptionValueSource()
([#1794])Changed
v9.4.0
Compare Source
Added
preSubcommand
hook called before direct subcommands ([#1763])Fixed
InvalidOptionArgumentError
in esm ([#1756])Changed
v9.3.0
Compare Source
Added
.summary()
for a short summary to use instead of description when listing subcommands in help ([#1726])Option.implies()
to set other option values when the option is specified ([#1724])Fixed
string[]
to.options()
default value parameter type for use with variadic options ([#1721])Deprecated
-ws
) ([#1718])v9.2.0
Compare Source
Added
Fixed
Changed
String.prototype.substr
([#1706])v9.1.0
Compare Source
Added
.conflicts()
to set conflicting options which can not be specified together ([#1678])v9.0.0
Compare Source
Added
.executableDir()
for custom search for subcommands ([#1571])Option
to.option()
or.requiredOption()
([#1655])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])Changed
showSuggestionAfterError
is now on by default ([#1657])executableFile
([#1571])executableFile
([#1571]).choices()
([#1667]).parse()
,.parseAsync()
,.aliases()
([#1669])Fixed
Removed
require.main.filename
when script not known from arguments passed to.parse()
(can supply details using.name()
, and.executableDir()
orexecutableFile
) ([#1571])v8.3.0
Compare Source
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
Compare Source
Added
.showSuggestionAfterError()
to show suggestions after unknown command or unknown option ([#1590])Option
support for values from environment variables using.env()
([#1587])Changed
Removed
Option
methodargumentRejected
v8.1.0
Compare Source
Added
.copyInheritedSettings()
([#1557])Argument
methods for.argRequired()
and.argOptional()
([#1567])v8.0.0
Compare Source
Added
.argument(name, description)
for adding command-arguments ([#1490]).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]).opts()
return type using TypeScript generics ([#1539]).getOptionValue()
and.setOptionValue()
([#1521])Changed
.parseAsync()
is now declared asasync
([#1513])Help
method.visibleArguments()
returns array ofArgument
([#1490])CommanderError
codecommander.invalidOptionArgument
renamedcommander.invalidArgument
([#1508]).addTextHelp()
callback no longer allows result ofundefined
, now juststring
([#1516])index.tab
into a file per class ([#1522]).showHelpAfteError()
) ([#1534])Command
property.arg
initialised to empty array (was previously undefined) ([#1529])Deprecated
cmd.description(desc, argDescriptions)
for adding argument descriptions ([#1490]).argument(name, description)
instead)InvalidOptionArgumentError
(replaced byInvalidArgumentError
) ([#1508])Removed
Command
object ([#1520])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.
$ 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:
Or, you might choose to show the help after any user error:
v7.2.0
Compare Source
Added
parent
property onCommand
([#1475]).attributeName()
onOption
([#1483])Changed
v7.1.0
Compare Source
Added
.cjs
to list of expected script file extensions ([#1449])Fixed
process.mainModule
([#1448])command('*')
and call when command line includes options ([#1464])on('command:*', ...)
and call when command line includes unknown options ([#1464])Changed
v7.0.0
Compare Source
Added
.enablePositionalOptions()
to let program and subcommand reuse same option ([#1427]).passThroughOptions()
to pass options through to other programs without needing--
([#1427]).allowExcessArguments(false)
to show an error message if there are too many command-arguments on command line for the action handler ([#1409]).configureOutput()
to modify use of stdout and stderr or customise display of errors ([#1387]).addHelpText()
to add text before or after the built-in help, for just current command or also for all subcommands ([#1296]).createOption()
to support subclassing of automatically created options (like.createCommand()
) ([#1380])Changed
program.opts()
.storeOptionsAsProperties()
.help()
and.outputHelp()
(removed from README) ([#1296])process.stderr.write()
instead ofconsole.error()
.on('--help')
(removed from README) ([#1296])Fixed
Deleted
.passCommandToAction()
([#1409]).allowExcessArguments(false)
Migration Tips
The biggest change is the parsed option values. Previously the options were stored by default as properties on the command object, and now the options are stored separately.
If you wish to restore the old behaviour and get running quickly you can call
.storeOptionsAsProperties()
.To allow you to move to the new code patterns incrementally, the action handler will be passed the command twice,
to match the new "options" and "command" parameters (see below).
program options
Use the
.opts()
method to access the options. This is available on any command but is used most with the program.action handler
The action handler gets passed a parameter for each command-argument you declared. Previously by default the next parameter was the command object with the options as properties. Now the next two parameters are instead the options and the command. If you
only accessed the options there may be no code changes required.
If you already set
.storeOptionsAsProperties(false)
you may still need to adjust your code.v6.2.1
Compare Source
Fixed
v6.2.0
Compare Source
Added
.description()
to describe command arguments ([#1353])Fixed
Changed
v6.1.0
Compare Source
Added
.combineFlagAndOptionalValue(false)
to ease upgrade path from older versions of Commander ([#1326]).helpOption(false)
([#1325])argumentDescription
to.description()
([#1323])Changed
Fixed
v6.0.0
Compare Source
Added
-n
accessed asopts().n
(previously uppercase)Fixed
v5.1.0
Compare Source
Added
addCommand()
forhidden
andisDefault
([#1232])Fixed
helpOption
([#1248])Changed
arguments
to improve auto-generated help in editors ([#1235]).command()
configurationnoHelp
tohidden
(but not remove old support) ([#1232])v5.0.0
Compare Source
Added
.addCommand()
for adding a separately configured command ([#764] [#1149]).addHelpCommand()
([#1149])-a -b -p 80
can be written as-abp80
) ([#1145]).parseOption()
includes short flag and long flag expansions ([#1145]).helpInformation()
returns help text as a string, previously a private routine ([#1169]).parse()
implicitly usesprocess.argv
if arguments not specified ([#1172]).parse()
arguments "from", if not following node conventions ([#512] [#1172])commands
property ofCommand
([#1184])program
property ([#1195])createCommand
factory method to simplify subclassing ([#1191])Fixed
command:*
for executable subcommands ([#809] [#1149])Changed
.args
contains command arguments with just recognised options removed ([#1032] [#1138]).option()
([#1119]).allowUnknownOption()
([#802] [#1138]).args
-ab
or--foo=bar
) ([#1145]).parseOptions()
([#1138])args
in returned result renamedoperands
and does not include anything after first unknown optionunknown
in returned result has arguments after first unknown option including operands, not just options and values.on('command:*', callback)
and other command events passed (changed) results from.parseOptions
, i.e. operands and unknown ([#1138])this
rather thanCommand
([#1180]).parseAsync
returnsPromise<this>
to be consistent with.parse()
([#1180])Removed
@types/node
([#1146])normalize
(the functionality has been integrated intoparseOptions
) ([#1145])parseExpectedArgs
is now private ([#1149])Migration Tips
If you use
.on('command:*')
or more complicated tests to detect an unrecognised subcommand, you may be able to delete the code and rely on the default behaviour.If you use
program.args
or more complicated tests to detect a missing subcommand, you may be able to delete the code and rely on the default behaviour.If you use
.command('*')
to add a default command, you may be be able to switch toisDefault:true
with a named command.If you want to continue combining short options with optional values as though they were boolean flags, set
combineFlagAndOptionalValue(false)
to expand
-fb
to-f -b
rather than-f b
.v4.1.1
Compare Source
Fixed
.action()
should include Promise for async ([#1157])v4.1.0
Compare Source
Added
.parseAsync
to use instead of.parse
if supply async action handlers ([#806] [#1118])Fixed
Changed
ts-node
in testsv4.0.1
Compare Source
Fixed
v4.0.0
Compare Source
Added
.exitOverride()
allows override of calls toprocess.exit
for additional error handling and to keep program running ([#1040]).requiredOptions()
([#1071])Changed
Fixed
command:*
event to include unknown argumentscustomFds
option from call tochild_process.spawn
([#1052])Migration Tips
Testing for no arguments
If you were previously using code like:
a partial replacement is:
v3.0.2
Compare Source
Fixed
Changed
v3.0.1
Compare Source
Added
executableFile
in CommandOptions ([#1028])Changed
const
rather thanvar
in README ([#1026])Fixed
v3.0.0
Compare Source
.command('clone', 'clone description', { executableFile: 'myClone' })
.command
to contrast action handler vs git-style executable. ([#938] [#990]).command
. ([#938] [#990])-p 80
can also be supplied as-p80
node --harmony myCommand.js clone
.version
([#963])program.version('0.0.1', '-v, --vers', 'output the current version')
.helpOption(flags, description)
routine to customise help flags and description ([#963]).helpOption('-e, --HELP', 'read more information')
--foo
and--no-foo
--no-foo
on cli now emitsoption:no-foo
(previouslyoption:foo
)--no-foo
after defining--foo
leaves the default value unchanged (previously set it to false)node --inspect myCommand.js clone
Migration Tips
The custom event for a negated option like
--no-foo
isoption:no-foo
(previouslyoption:foo
).When using TypeScript, adding a command does not allow an explicit
undefined
for an unwanted executable description (e.gfor a command with an action handler).
Configuration
📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.