forked from NativeScript/nativescript-cli
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnativescript-cli.ts
77 lines (67 loc) · 2.27 KB
/
nativescript-cli.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
require("./bootstrap");
import * as shelljs from "shelljs";
shelljs.config.silent = true;
shelljs.config.fatal = true;
import { installUncaughtExceptionListener } from "./common/errors";
import { settlePromises } from "./common/helpers";
import { injector } from "./common/yok";
import {
ErrorCodes,
IErrors,
ICommandDispatcher,
IMessagesService,
} from "./common/declarations";
import {
IExtensibilityService,
IExtensionData,
} from "./common/definitions/extensibility";
import { IInitializeService } from "./definitions/initialize-service";
installUncaughtExceptionListener(
process.exit.bind(process, ErrorCodes.UNCAUGHT)
);
const logger: ILogger = injector.resolve("logger");
const originalProcessOn = process.on;
process.on = (event: string, listener: any): any => {
if (event === "SIGINT") {
logger.trace(
`Trying to handle SIGINT event. CLI overrides this behavior and does not allow handling SIGINT as this causes issues with Ctrl + C in terminal.`
);
const msg = "The stackTrace of the location trying to handle SIGINT is:";
const stackTrace = new Error(msg).stack || "";
logger.trace(stackTrace.replace(`Error: ${msg}`, msg));
} else {
return originalProcessOn.apply(process, [event, listener]);
}
};
/* tslint:disable:no-floating-promises */
(async () => {
const config: Config.IConfig = injector.resolve("$config");
const err: IErrors = injector.resolve("$errors");
err.printCallStack = config.DEBUG;
const $initializeService = injector.resolve<IInitializeService>(
"initializeService"
);
await $initializeService.initialize();
const extensibilityService: IExtensibilityService = injector.resolve(
"extensibilityService"
);
try {
await settlePromises<IExtensionData>(extensibilityService.loadExtensions());
} catch (err) {
logger.trace("Unable to load extensions. Error is: ", err);
}
const commandDispatcher: ICommandDispatcher = injector.resolve(
"commandDispatcher"
);
const messages: IMessagesService = injector.resolve("$messagesService");
messages.pathsToMessageJsonFiles = [
/* Place client-specific json message file paths here */
];
if (process.argv[2] === "completion") {
await commandDispatcher.completeCommand();
} else {
await commandDispatcher.dispatchCommand();
}
injector.dispose();
})();
/* tslint:enable:no-floating-promises */