Action
An action is a function executed when the program or one of its commands is run. Actions can be synchronous functions - or asynchronous by returning a Promise.
Setting an action
.action(( params: ActionParameters ) => unknown | Promise<unknown>)
Actions take the following object as their only parameter:
interface ActionParameters {
/**
* Parsed command line arguments
*/
args: ParsedArgumentsObject
/**
* If the `dash` (double dash) config property is enabled,
* this *array* will contain all arguments present
* after '--'.
*/
ddash: ParsedArguments
/**
* Parsed command line options
*/
options: ParsedOptions
/**
* Program instance
*/
program: Program
/**
* Contextual command, if any
*/
command?: Command
/**
* Logger instance
*/
logger: Logger
}
Checkout the full ActionParameters interface.
If an error is thrown within an action, or if the Promise returned is finally rejected, Caporal will display the error in the terminal. By default, only the error message will be displayed. If your program is run using the --verbose
global option, the error stack will also be displayed.
Examples
Here are some actions examples.
logger
Using // You'll likely want to use those 3 properties
program.action(function ({ args, options, logger }) {
// make use of the provided logger
logger.info("My command was called with: ")
logger.info("args: %j", args)
logger.info("options: %j", options)
})
Throwing an error
program.action(function ({ args, options, logger }) {
if (options.myOption !== "value") {
// Caporal will automatically print this error
throw Error("Something bad happened!")
}
})
Async action
In this example, if the request succeeds, "Request succeeded!" will be displayed. If the fetch promise is rejected, Caporal will automatically print the error.
// Async action
program.action(function ({ args, options, logger }) {
return fetch("https://my.url").then((response) => {
logger.info("Request succeeded!")
})
})