microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
2db9ac850d4b22dd97b01aa5e98bb5b469cddb3a

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/debugger/direct/directDebugSession.ts

198lines · modeblame

2c19da7fRedMickey6 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
4import * as vscode from "vscode";
5import { ProjectVersionHelper } from "../../common/projectVersionHelper";
984ca036RedMickey6 years ago6import { logger } from "vscode-debugadapter";
2c19da7fRedMickey6 years ago7import { TelemetryHelper } from "../../common/telemetryHelper";
8import { DebugProtocol } from "vscode-debugprotocol";
259c018fYuri Skorokhodov5 years ago9import { HermesCDPMessageHandler } from "../../cdp-proxy/CDPMessageHandlers/hermesCDPMessageHandler";
2c19da7fRedMickey6 years ago10import { DebugSessionBase, IAttachRequestArgs, ILaunchRequestArgs } from "../debugSessionBase";
1bdccb66RedMickey6 years ago11import { JsDebugConfigAdapter } from "../jsDebugConfigAdapter";
984ca036RedMickey6 years ago12import { DebuggerEndpointHelper } from "../../cdp-proxy/debuggerEndpointHelper";
5514e287RedMickey6 years ago13import { ErrorHelper } from "../../common/error/errorHelper";
14import { InternalErrorCode } from "../../common/error/internalErrorCode";
2c19da7fRedMickey6 years ago15import * as nls from "vscode-nls";
259c018fYuri Skorokhodov5 years ago16import { IOSDirectCDPMessageHandler } from "../../cdp-proxy/CDPMessageHandlers/iOSDirectCDPMessageHandler";
17import { PlatformType } from "../../extension/launchArgs";
18import { IWDPHelper } from "./IWDPHelper";
19
2d8af448Yuri Skorokhodov6 years ago20nls.config({ messageFormat: nls.MessageFormat.bundle, bundleFormat: nls.BundleFormat.standalone })();
2c19da7fRedMickey6 years ago21const localize = nls.loadMessageBundle();
22
23export class DirectDebugSession extends DebugSessionBase {
24
984ca036RedMickey6 years ago25private debuggerEndpointHelper: DebuggerEndpointHelper;
ebbd64f1RedMickey6 years ago26private onDidTerminateDebugSessionHandler: vscode.Disposable;
259c018fYuri Skorokhodov5 years ago27private iOSWKDebugProxyHelper: IWDPHelper;
984ca036RedMickey6 years ago28
2c19da7fRedMickey6 years ago29constructor(session: vscode.DebugSession) {
30super(session);
984ca036RedMickey6 years ago31this.debuggerEndpointHelper = new DebuggerEndpointHelper();
259c018fYuri Skorokhodov5 years ago32this.iOSWKDebugProxyHelper = new IWDPHelper();
ebbd64f1RedMickey6 years ago33
34this.onDidTerminateDebugSessionHandler = vscode.debug.onDidTerminateDebugSession(
35this.handleTerminateDebugSession.bind(this)
36);
2c19da7fRedMickey6 years ago37}
38
984ca036RedMickey6 years ago39protected async launchRequest(response: DebugProtocol.LaunchResponse, launchArgs: ILaunchRequestArgs, request?: DebugProtocol.Request): Promise<void> {
2c19da7fRedMickey6 years ago40let extProps = {
41platform: {
42value: launchArgs.platform,
43isPii: false,
44},
45isDirect: {
46value: true,
47isPii: false,
48},
49};
50
51return new Promise<void>((resolve, reject) => this.initializeSettings(launchArgs)
52.then(() => {
53logger.log("Launching the application");
259c018fYuri Skorokhodov5 years ago54logger.verbose(`Launching the application: ${JSON.stringify(launchArgs, null, 2)}`);
55return ProjectVersionHelper.getReactNativeVersions(launchArgs.cwd, launchArgs.platform === PlatformType.Windows);
5514e287RedMickey6 years ago56})
57.then(versions => {
58extProps = TelemetryHelper.addPropertyToTelemetryProperties(versions.reactNativeVersion, "reactNativeVersion", extProps);
259c018fYuri Skorokhodov5 years ago59if (launchArgs.platform === PlatformType.Windows) {
5514e287RedMickey6 years ago60extProps = TelemetryHelper.addPropertyToTelemetryProperties(versions.reactNativeWindowsVersion, "reactNativeWindowsVersion", extProps);
61}
62return TelemetryHelper.generate("launch", extProps, (generator) => {
63return this.appLauncher.launch(launchArgs)
64.then(() => {
65if (launchArgs.enableDebug) {
66launchArgs.port = launchArgs.port || this.appLauncher.getPackagerPort(launchArgs.cwd);
67this.attachRequest(response, launchArgs).then(() => {
68resolve();
2c19da7fRedMickey6 years ago69}).catch((e) => reject(e));
5514e287RedMickey6 years ago70} else {
71this.sendResponse(response);
72resolve();
73}
2c19da7fRedMickey6 years ago74});
5514e287RedMickey6 years ago75});
76})
77.catch((err) => {
78reject(ErrorHelper.getInternalError(InternalErrorCode.ApplicationLaunchFailed, err.message || err));
79})
80)
259c018fYuri Skorokhodov5 years ago81.catch(err => this.showError(err, response));
2c19da7fRedMickey6 years ago82}
83
259c018fYuri Skorokhodov5 years ago84protected async attachRequest(response: DebugProtocol.AttachResponse, attachArgs: IAttachRequestArgs, request?: DebugProtocol.Request): Promise<void> {
2c19da7fRedMickey6 years ago85let extProps = {
86platform: {
87value: attachArgs.platform,
88isPii: false,
89},
90isDirect: {
91value: true,
92isPii: false,
93},
94};
95
259c018fYuri Skorokhodov5 years ago96attachArgs.webkitRangeMin = attachArgs.webkitRangeMin || 9223;
97attachArgs.webkitRangeMax = attachArgs.webkitRangeMax || 9322;
98
2c19da7fRedMickey6 years ago99this.previousAttachArgs = attachArgs;
100
101return new Promise<void>((resolve, reject) => this.initializeSettings(attachArgs)
102.then(() => {
103logger.log("Attaching to the application");
259c018fYuri Skorokhodov5 years ago104logger.verbose(`Attaching to the application: ${JSON.stringify(attachArgs, null, 2)}`);
5514e287RedMickey6 years ago105return ProjectVersionHelper.getReactNativeVersions(attachArgs.cwd, true);
106})
107.then(versions => {
108extProps = TelemetryHelper.addPropertyToTelemetryProperties(versions.reactNativeVersion, "reactNativeVersion", extProps);
109if (!ProjectVersionHelper.isVersionError(versions.reactNativeWindowsVersion)) {
110extProps = TelemetryHelper.addPropertyToTelemetryProperties(versions.reactNativeWindowsVersion, "reactNativeWindowsVersion", extProps);
111}
112return TelemetryHelper.generate("attach", extProps, (generator) => {
259c018fYuri Skorokhodov5 years ago113attachArgs.port = attachArgs.platform === PlatformType.iOS ?
114attachArgs.port || IWDPHelper.iOS_WEBKIT_DEBUG_PROXY_DEFAULT_PORT :
115attachArgs.port || this.appLauncher.getPackagerPort(attachArgs.cwd);
5514e287RedMickey6 years ago116logger.log(`Connecting to ${attachArgs.port} port`);
117return this.appLauncher.getRnCdpProxy().stopServer()
259c018fYuri Skorokhodov5 years ago118.then(() => this.appLauncher.getRnCdpProxy().initializeServer(
119attachArgs.platform === PlatformType.iOS ?
120new IOSDirectCDPMessageHandler() :
121new HermesCDPMessageHandler(),
122this.cdpProxyLogLevel)
123)
124.then(() => {
125if (attachArgs.platform === PlatformType.iOS) {
126return this.iOSWKDebugProxyHelper.startiOSWebkitDebugProxy(attachArgs.port, attachArgs.webkitRangeMin, attachArgs.webkitRangeMax)
127.then(() => this.iOSWKDebugProxyHelper.getSimulatorProxyPort(attachArgs))
128.then((results) => {
129attachArgs.port = results.targetPort;
130});
131} else {
132return Promise.resolve();
133}
134})
9fc07913JiglioNero5 years ago135.then(() => this.appLauncher.getPackager().start())
5514e287RedMickey6 years ago136.then(() => this.debuggerEndpointHelper.retryGetWSEndpoint(
137`http://localhost:${attachArgs.port}`,
13890,
139this.cancellationTokenSource.token
140))
141.then((browserInspectUri) => {
142this.appLauncher.getRnCdpProxy().setBrowserInspectUri(browserInspectUri);
143this.establishDebugSession(attachArgs, resolve);
2c19da7fRedMickey6 years ago144})
5514e287RedMickey6 years ago145.catch(e => reject(e));
146});
147})
148.catch((err) => {
149reject(ErrorHelper.getInternalError(InternalErrorCode.CouldNotAttachToDebugger, err.message || err));
150})
151)
259c018fYuri Skorokhodov5 years ago152.catch(err => this.showError(err, response));
2c19da7fRedMickey6 years ago153}
154
984ca036RedMickey6 years ago155protected async disconnectRequest(response: DebugProtocol.DisconnectResponse, args: DebugProtocol.DisconnectArguments, request?: DebugProtocol.Request): Promise<void> {
259c018fYuri Skorokhodov5 years ago156this.iOSWKDebugProxyHelper.cleanUp();
ebbd64f1RedMickey6 years ago157this.onDidTerminateDebugSessionHandler.dispose();
2c19da7fRedMickey6 years ago158super.disconnectRequest(response, args, request);
159}
160
5d47053fRedMickey6 years ago161protected establishDebugSession(attachArgs: IAttachRequestArgs, resolve?: (value?: void | PromiseLike<void> | undefined) => void): void {
1bdccb66RedMickey6 years ago162const attachConfiguration = JsDebugConfigAdapter.createDebuggingConfigForRNHermes(
163attachArgs,
164this.appLauncher.getCdpProxyPort(),
165this.session.id
166);
b7451aefRedMickey6 years ago167
168vscode.debug.startDebugging(
169this.appLauncher.getWorkspaceFolder(),
1bdccb66RedMickey6 years ago170attachConfiguration,
ebbd64f1RedMickey6 years ago171{
172parentSession: this.session,
173consoleMode: vscode.DebugConsoleMode.MergeWithParent,
174}
b7451aefRedMickey6 years ago175)
259c018fYuri Skorokhodov5 years ago176.then((childDebugSessionStarted: boolean) => {
177if (childDebugSessionStarted) {
178if (resolve) {
179resolve();
180}
181} else {
182throw new Error(localize("CouldNotStartChildDebugSession", "Couldn't start child debug session"));
b7451aefRedMickey6 years ago183}
259c018fYuri Skorokhodov5 years ago184},
185err => {
186throw err;
187});
b7451aefRedMickey6 years ago188}
ebbd64f1RedMickey6 years ago189
190private handleTerminateDebugSession(debugSession: vscode.DebugSession) {
191if (
192debugSession.configuration.rnDebugSessionId === this.session.id
193&& debugSession.type === this.pwaNodeSessionName
194) {
a2ddbba5RedMickey5 years ago195vscode.commands.executeCommand(this.stopCommand, this.session);
ebbd64f1RedMickey6 years ago196}
197}
2c19da7fRedMickey6 years ago198}