Open electrotype opened 3 years ago
In case it helps someone one day, I found an ugly workaround to get the executed command, so I can display its help in case of a validation error:
let mainCommand;
const runOriginal = caporal['_run'].bind(caporal);
caporal['_run'] = async function(result, cmd) {
mainCommand = cmd;
return await runOriginal(result, cmd);
};
try {
await caporal.run();
} catch (err) {
/* use "mainCommand" if defined */
}
I'd like to be able to automatically display the full help of a
command
when a validation fails.Let's say a command has a
--port
option with an associatedvalidator: caporal.NUMBER
validator. I call this command using--port notNumber
: I would like to be able to catch the generated error (in mycatch
block) and manually callawait caporal.exec(['help', COMMAND_NAME]);
in order to display the full help of the command! But the executedcommand
is currently not provided in themeta
section, on such error.Also, it would be appreciated if all errors had a dedicated
code
. For example:code: INVALID_OPTION_VALUE
, so we can know without a doubt what the error is and be able to react to it as we want. Yes, Caporal errors currently have aname
, but this value is the name of the error's constructor (if I'm not mistaken), and this name is actually minified in your distributed code... So not very solid, in my opinion.