microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.4.3

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/generalMobilePlatform.ts

83lines · 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 vscode from "vscode";
5import * as Q from "q";
6
7import {IRunOptions} from "./launchArgs";
8import {Packager, PackagerRunAs} from "../common/packager";
9import {PackagerStatus, PackagerStatusIndicator} from "./packagerStatusIndicator";
10import {SettingsHelper} from "./settingsHelper";
11import {OutputChannelLogger} from "./log/OutputChannelLogger";
12
13export interface MobilePlatformDeps {
14 packager?: Packager;
15 packageStatusIndicator?: PackagerStatusIndicator;
16}
17
18export type TargetType = "device" | "simulator";
19
20export class GeneralMobilePlatform {
21 protected projectPath: string;
22 protected platformName: string;
23 protected packager: Packager;
24 protected packageStatusIndicator: PackagerStatusIndicator;
25 protected logger: OutputChannelLogger;
26
27 protected static deviceString: TargetType = "device";
28 protected static simulatorString: TargetType = "simulator";
29
30 constructor(protected runOptions: IRunOptions, platformDeps: MobilePlatformDeps = {}) {
31 this.platformName = this.runOptions.platform;
32 this.projectPath = this.runOptions.projectRoot;
33 this.packager = platformDeps.packager || new Packager(vscode.workspace.rootPath, this.projectPath, SettingsHelper.getPackagerPort());
34 this.packageStatusIndicator = platformDeps.packageStatusIndicator || new PackagerStatusIndicator();
35 this.logger = OutputChannelLogger.getChannel(`React Native: Run ${this.platformName}`, true);
36 this.logger.clear();
37 }
38
39 public runApp(): Q.Promise<void> {
40 this.logger.info("Connected to packager. You can now open your app in the simulator.");
41 return Q.resolve<void>(void 0);
42 }
43
44 public enableJSDebuggingMode(): Q.Promise<void> {
45 this.logger.info("Debugger ready. Enable remote debugging in app.");
46 return Q.resolve<void>(void 0);
47 }
48
49 public disableJSDebuggingMode(): Q.Promise<void> {
50 this.logger.info("Debugger ready. Disable remote debugging in app.");
51 return Q.resolve<void>(void 0);
52 }
53
54 public startPackager(): Q.Promise<void> {
55 this.logger.info("Starting React Native Packager.");
56 return this.packager.isRunning().then((running) => {
57 if (running) {
58 if (this.packager.getRunningAs() !== PackagerRunAs.REACT_NATIVE) {
59 return this.packager.stop().then(() =>
60 this.packageStatusIndicator.updatePackagerStatus(PackagerStatus.PACKAGER_STOPPED)
61 );
62 }
63
64 this.logger.info("Attaching to running React Native packager");
65 }
66 return void 0;
67 })
68 .then(() => {
69 return this.packager.startAsReactNative();
70 })
71 .then(() =>
72 this.packageStatusIndicator.updatePackagerStatus(PackagerStatus.PACKAGER_STARTED));
73 }
74
75 public prewarmBundleCache(): Q.Promise<void> {
76 // generalMobilePlatform should do nothing here. Method should be overriden by children for specific behavior.
77 return Q.resolve<void>(void 0);
78 }
79
80 public getRunArgument(): string[] {
81 throw new Error("Not yet implemented: GeneralMobilePlatform.getRunArgument");
82 }
83}
84