microsoft/vscode-react-native

Public

mirrored fromhttps://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
1.11.2

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/commands/networkInspector.ts

109lines · modecode

1// 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 assert from "assert";
5import * as nls from "vscode-nls";
6import * as vscode from "vscode";
7import { ErrorHelper } from "../../common/error/errorHelper";
8import { InternalErrorCode } from "../../common/error/internalErrorCode";
9import { AdbHelper } from "../android/adb";
10import { AndroidDeviceTracker } from "../android/androidDeviceTracker";
11import { IOSDeviceTracker } from "../ios/iOSDeviceTracker";
12import { OutputChannelLogger } from "../log/OutputChannelLogger";
13import { NetworkInspectorServer } from "../networkInspector/networkInspectorServer";
14import { CONTEXT_VARIABLES_NAMES } from "../../common/contextVariablesNames";
15import { InspectorViewFactory } from "../networkInspector/views/inspectorViewFactory";
16import { Command } from "./util/command";
17
18nls.config({
19 messageFormat: nls.MessageFormat.bundle,
20 bundleFormat: nls.BundleFormat.standalone,
21})();
22const localize = nls.loadMessageBundle();
23
24interface NetworkInspectorModule {
25 networkInspector: NetworkInspectorServer;
26 androidDeviceTracker: AndroidDeviceTracker;
27 iOSDeviceTracker: IOSDeviceTracker | undefined;
28}
29
30// #todo!> commands should not maintain state
31let networkInspectorModule: NetworkInspectorModule | undefined;
32
33export class StartNetworkInspector extends Command {
34 codeName = "startNetworkInspector";
35 label = "Run Network Inspector";
36 requiresTrust = false;
37 error = ErrorHelper.getInternalError(InternalErrorCode.CouldNotStartNetworkInspector);
38
39 async baseFn(): Promise<void> {
40 assert(this.project);
41
42 const logger = OutputChannelLogger.getMainChannel();
43
44 if (networkInspectorModule) {
45 logger.info(
46 localize(
47 "AnotherNetworkInspectorAlreadyRun",
48 "Another Network inspector is already running",
49 ),
50 );
51 return;
52 }
53
54 const adbHelper = new AdbHelper(
55 this.project.getPackager().getProjectPath(),
56 this.project.getOrUpdateNodeModulesRoot(),
57 );
58 const networkInspector = new NetworkInspectorServer();
59 const androidDeviceTracker = new AndroidDeviceTracker(adbHelper);
60 const iOSDeviceTracker =
61 (process.platform === "darwin" && new IOSDeviceTracker()) || undefined;
62
63 networkInspectorModule = {
64 networkInspector,
65 androidDeviceTracker,
66 iOSDeviceTracker,
67 };
68
69 try {
70 if (iOSDeviceTracker) {
71 await iOSDeviceTracker.start();
72 }
73 await androidDeviceTracker.start();
74 await networkInspector.start(adbHelper);
75 void vscode.commands.executeCommand(
76 "setContext",
77 CONTEXT_VARIABLES_NAMES.IS_RNT_NETWORK_INSPECTOR_RUNNING,
78 true,
79 );
80 } catch (err) {
81 await stopNetworkInspector();
82 throw err;
83 }
84 }
85}
86
87export class StopNetworkInspector extends Command {
88 codeName = "stopNetworkInspector";
89 label = "Stop Network Inspector";
90 requiresTrust = false;
91 error = ErrorHelper.getInternalError(InternalErrorCode.CouldNotStopNetworkInspector);
92
93 async baseFn(): Promise<void> {
94 await stopNetworkInspector();
95 }
96}
97
98async function stopNetworkInspector() {
99 networkInspectorModule?.androidDeviceTracker?.stop();
100 networkInspectorModule?.iOSDeviceTracker?.stop();
101 await networkInspectorModule?.networkInspector?.stop();
102 networkInspectorModule = undefined;
103 InspectorViewFactory.clearCache();
104 void vscode.commands.executeCommand(
105 "setContext",
106 CONTEXT_VARIABLES_NAMES.IS_RNT_NETWORK_INSPECTOR_RUNNING,
107 false,
108 );
109}
110