1 | import { CliOptions, CliParsedCommandHandler, ParsedCliCommand } from './types';
|
2 | import { isFunction } from './utils';
|
3 |
|
4 | export const createRunHandler = (cliOptions: CliOptions = {}): CliParsedCommandHandler => {
|
5 | const runHandler = async (parsed: ParsedCliCommand): Promise<void | number> => {
|
6 |
|
7 | const commandOption = Object.keys(parsed.options)
|
8 | .filter(o => typeof parsed.options[o] !== 'undefined')
|
9 | .find(o => !!(parsed.optionDefinitions[o] && parsed.optionDefinitions[o].commandHandler));
|
10 |
|
11 |
|
12 | const parsedCmdHandler = commandOption
|
13 | ? parsed.optionDefinitions[commandOption].commandHandler
|
14 | : cliOptions.globalHandler;
|
15 |
|
16 | if (parsedCmdHandler) {
|
17 | if (isFunction(parsedCmdHandler)) {
|
18 | return Promise.resolve(parsedCmdHandler(parsed));
|
19 | } else {
|
20 | throw new Error(`runHandler Failed: commandHandler is not a function`);
|
21 | }
|
22 | } else if (parsed.command.handler) {
|
23 | return Promise.resolve(parsed.command.handler(parsed.arguments, parsed.options, parsed));
|
24 | }
|
25 | };
|
26 |
|
27 | return runHandler;
|
28 | };
|