UNPKG

1.7 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3'use strict';
4
5const commandLineArgs = require('command-line-args');
6const commandLineCommands = require('command-line-commands');
7const getUsage = require('command-line-usage');
8
9
10const konzola = require('../lib/konzola');
11const packageJson = require('../package.json');
12const optionDefinitions = require('../lib/cli/optionDefinitons');
13
14const {
15 name,
16 version,
17} = packageJson;
18
19const commands = require('../lib/cli/commands');
20
21(async () => {
22 konzola.header(`${name} ${version}`, {
23 prefix: konzola.chalk.blue('\u2601'),
24 });
25
26 // #region Exception handling
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 // #endregion
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})();