1 | #!/usr/bin/env node
|
2 |
|
3 | 'use strict';
|
4 |
|
5 | const commandLineArgs = require('command-line-args');
|
6 | const commandLineCommands = require('command-line-commands');
|
7 | const getUsage = require('command-line-usage');
|
8 |
|
9 |
|
10 | const konzola = require('../lib/konzola');
|
11 | const packageJson = require('../package.json');
|
12 | const optionDefinitions = require('../lib/cli/optionDefinitons');
|
13 |
|
14 | const {
|
15 | name,
|
16 | version,
|
17 | } = packageJson;
|
18 |
|
19 | const commands = require('../lib/cli/commands');
|
20 |
|
21 | (async () => {
|
22 | konzola.header(`${name} ${version}`, {
|
23 | prefix: konzola.chalk.blue('\u2601'),
|
24 | });
|
25 |
|
26 |
|
27 | const handleException = (ex) => {
|
28 | if (ex.message)
|
29 | konzola.info(ex.message);
|
30 | if (ex.stack)
|
31 | konzola.info(ex.stack);
|
32 | konzola.exit(ex.code || 1);
|
33 | };
|
34 |
|
35 | process.on('uncaughtException', handleException);
|
36 | process.on('unhandledRejection', handleException);
|
37 |
|
38 |
|
39 | const validCommands = Object.keys(commands);
|
40 |
|
41 | let parsed;
|
42 |
|
43 | try {
|
44 | parsed = commandLineCommands([null, ...validCommands]);
|
45 | } catch (ex) {
|
46 | konzola.error(`Unknown command '${ex.command}`);
|
47 | konzola.exit(1);
|
48 | }
|
49 |
|
50 | if (!parsed.command)
|
51 | parsed.command = 'help';
|
52 |
|
53 | const command = commands[parsed.command];
|
54 |
|
55 | const validOptionDefinitions = [...(await command.getOptionDefinitions()), ...optionDefinitions];
|
56 | const args = commandLineArgs(validOptionDefinitions, { argv: parsed.argv, partial: true });
|
57 |
|
58 |
|
59 | try {
|
60 | if (parsed.command !== 'help' && args.help) {
|
61 | konzola.info(getUsage([
|
62 | { header: 'Options', optionList: validOptionDefinitions.filter(i => !i.doNotShowInfo) },
|
63 | ]));
|
64 | return;
|
65 | }
|
66 |
|
67 | await command.run({
|
68 | name, version, konzola, optionDefinitions, commands,
|
69 | }, args);
|
70 | } catch (e) {
|
71 | handleException(e);
|
72 | }
|
73 | })();
|