microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
add-signproj-for-microbuild1

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

src/common/entryPointHandler.ts

97lines · modeblame

8ee905e8digeff10 years ago1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
09f6024fHeniker4 years ago4import { ConsoleLogger } from "../extension/log/ConsoleLogger";
5import { ILogger } from "../extension/log/LogHelper";
34472878RedMickey5 years ago6import { ErrorHelper } from "./error/errorHelper";
7import { InternalError } from "./error/internalError";
8import { TelemetryHelper, ICommandTelemetryProperties } from "./telemetryHelper";
9import { TelemetryGenerator } from "./telemetryGenerators";
10import { Telemetry } from "./telemetry";
10873e11digeff10 years ago11
18d8ad2adigeff10 years ago12export enum ProcessType {
13Extension,
14Debugee,
27710197Vladimir Kotikov8 years ago15Debugger,
18d8ad2adigeff10 years ago16}
17
10873e11digeff10 years ago18/* This class should we used for each entry point of the code, so we handle telemetry and error reporting properly */
47958817digeff10 years ago19export class EntryPointHandler {
18d8ad2adigeff10 years ago20private processType: ProcessType;
10873e11digeff10 years ago21
0a68f8dbArtem Egorov8 years ago22constructor(processType: ProcessType, private logger: ILogger = new ConsoleLogger()) {
18d8ad2adigeff10 years ago23this.processType = processType;
10873e11digeff10 years ago24}
25
26/* This method should wrap any async entry points to the code, so we handle telemetry and error reporting properly */
34472878RedMickey5 years ago27public runFunction(
28taskName: string,
29error: InternalError,
30codeToRun: (telemetry: TelemetryGenerator) => Promise<void> | void,
31errorsAreFatal: boolean = false,
32extProps?: ICommandTelemetryProperties,
33): Promise<void> {
34return this.runFunctionWExtProps(
35taskName,
36extProps || {},
37error,
38codeToRun,
39errorsAreFatal,
40);
031832ffArtem Egorov7 years ago41}
42
34472878RedMickey5 years ago43public runFunctionWExtProps(
44taskName: string,
45extProps: ICommandTelemetryProperties,
46error: InternalError,
47codeToRun: (telemetry: TelemetryGenerator) => Promise<void> | void,
48errorsAreFatal: boolean = false,
49): Promise<void> {
50return this.handleErrors(
51error,
52TelemetryHelper.generate(taskName, extProps, codeToRun),
36a21645Heniker4 years ago53errorsAreFatal,
34472878RedMickey5 years ago54);
10873e11digeff10 years ago55}
56
41c61f9aJoshua Skelton10 years ago57// This method should wrap the entry point of the whole app, so we handle telemetry and error reporting properly
34472878RedMickey5 years ago58public runApp(
59appName: string,
60appVersion: string,
61error: InternalError,
62reporter: Telemetry.ITelemetryReporter,
63codeToRun: () => Promise<void> | void,
64extProps?: ICommandTelemetryProperties,
65): Promise<void> {
41c61f9aJoshua Skelton10 years ago66try {
18d8ad2adigeff10 years ago67Telemetry.init(appName, appVersion, reporter);
a432afe1Yuri Skorokhodov7 years ago68return this.runFunction(appName, error, codeToRun, true, extProps);
10873e11digeff10 years ago69} catch (error) {
0a68f8dbArtem Egorov8 years ago70this.logger.error(error);
10873e11digeff10 years ago71throw error;
72}
73}
74
34472878RedMickey5 years ago75private handleErrors(
76error: InternalError,
77resultOfCode: Promise<void>,
78errorsAreFatal: boolean,
79): Promise<void> {
80resultOfCode.catch(reason => {
18d8ad2adigeff10 years ago81const isDebugeeProcess = this.processType === ProcessType.Debugee;
82const shouldLogStack = !errorsAreFatal || isDebugeeProcess;
0a68f8dbArtem Egorov8 years ago83this.logger.error(error.message, ErrorHelper.wrapError(error, reason), shouldLogStack);
b2992671Joshua Skelton10 years ago84// For the debugee process we don't want to throw an exception because the debugger
85// will appear to the user if he turned on the VS Code uncaught exceptions feature.
0af0605cdigeff10 years ago86if (errorsAreFatal) {
18d8ad2adigeff10 years ago87if (isDebugeeProcess) {
6e4d7a62Joshua Skelton10 years ago88process.exit(1);
89} else {
90throw reason;
91}
10873e11digeff10 years ago92}
93});
1950c5e9Artem Egorov8 years ago94
95return resultOfCode;
10873e11digeff10 years ago96}
27710197Vladimir Kotikov8 years ago97}