microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.7.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/generalMobilePlatform.ts

157lines · modeblame

0a68f8dbArtem Egorov8 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 Q from "q";
e26a1f43Artem Egorov8 years ago5import * as fs from "fs";
0a68f8dbArtem Egorov8 years ago6
7import {IRunOptions} from "./launchArgs";
4787ec09Artem Egorov8 years ago8import {Packager} from "../common/packager";
9import {PackagerStatusIndicator, PackagerStatus} from "./packagerStatusIndicator";
0a68f8dbArtem Egorov8 years ago10import {SettingsHelper} from "./settingsHelper";
11import {OutputChannelLogger} from "./log/OutputChannelLogger";
12
13export interface MobilePlatformDeps {
14packager?: Packager;
15}
16
17export type TargetType = "device" | "simulator";
18
19export class GeneralMobilePlatform {
20protected projectPath: string;
21protected platformName: string;
22protected packager: Packager;
23protected logger: OutputChannelLogger;
24
25protected static deviceString: TargetType = "device";
26protected static simulatorString: TargetType = "simulator";
df8c800dArtem Egorov8 years ago27protected static NO_PACKAGER_VERSION = "0.42.0";
0a68f8dbArtem Egorov8 years ago28
db6fd42aRuslan Bikkinin7 years ago29public runArguments: string[];
30
0a68f8dbArtem Egorov8 years ago31constructor(protected runOptions: IRunOptions, platformDeps: MobilePlatformDeps = {}) {
32this.platformName = this.runOptions.platform;
33this.projectPath = this.runOptions.projectRoot;
2e432a9eArtem Egorov8 years ago34this.packager = platformDeps.packager || new Packager(this.runOptions.workspaceRoot, this.projectPath, SettingsHelper.getPackagerPort(this.runOptions.workspaceRoot), new PackagerStatusIndicator());
0a68f8dbArtem Egorov8 years ago35this.logger = OutputChannelLogger.getChannel(`React Native: Run ${this.platformName}`, true);
36this.logger.clear();
db6fd42aRuslan Bikkinin7 years ago37this.runArguments = this.getRunArguments();
0a68f8dbArtem Egorov8 years ago38}
39
40public runApp(): Q.Promise<void> {
41this.logger.info("Connected to packager. You can now open your app in the simulator.");
42return Q.resolve<void>(void 0);
43}
44
45public enableJSDebuggingMode(): Q.Promise<void> {
46this.logger.info("Debugger ready. Enable remote debugging in app.");
47return Q.resolve<void>(void 0);
48}
49
50public disableJSDebuggingMode(): Q.Promise<void> {
51this.logger.info("Debugger ready. Disable remote debugging in app.");
52return Q.resolve<void>(void 0);
53}
54
4787ec09Artem Egorov8 years ago55public beforeStartPackager(): Q.Promise<void> {
56return Q.resolve<void>(void 0);
57}
58
0a68f8dbArtem Egorov8 years ago59public startPackager(): Q.Promise<void> {
60this.logger.info("Starting React Native Packager.");
4787ec09Artem Egorov8 years ago61return this.packager.isRunning()
62.then((running) => {
0a68f8dbArtem Egorov8 years ago63if (running) {
4787ec09Artem Egorov8 years ago64if (this.packager.getPackagerStatus() !== PackagerStatus.PACKAGER_STARTED) {
65return this.packager.stop();
0a68f8dbArtem Egorov8 years ago66}
67
68this.logger.info("Attaching to running React Native packager");
69}
70return void 0;
71})
4787ec09Artem Egorov8 years ago72.then(() => {
73return this.packager.start();
74});
0a68f8dbArtem Egorov8 years ago75}
76
77public prewarmBundleCache(): Q.Promise<void> {
78// generalMobilePlatform should do nothing here. Method should be overriden by children for specific behavior.
79return Q.resolve<void>(void 0);
80}
81
db6fd42aRuslan Bikkinin7 years ago82protected getOptFromRunArgs(optName: string, binary: boolean = false): any {
83if (this.runArguments.length > 0) {
84const optIdx = this.runArguments.indexOf(optName);
85let result: any = false;
86
87if (optIdx > -1) {
88result = binary ? true : this.runArguments[optIdx + 1];
89} else {
90for (let i = 0; i < this.runArguments.length; i++) {
91const arg = this.runArguments[i];
92if (arg.indexOf(optName) > -1) {
93result = binary ? true : arg.split("=")[1].trim();
94}
95}
96}
97
98if (binary) {
99return !!result;
100}
101
102if (result) {
103try {
104return JSON.parse(result);
105} catch (err) {
106// sipmle string value, return as is
107return result;
108}
109}
110}
111
112return undefined;
113}
114
cbc7ac5bArtem Egorov7 years ago115public getRunArguments(): string[] {
db6fd42aRuslan Bikkinin7 years ago116throw new Error("Not yet implemented: GeneralMobilePlatform.getRunArguments");
117}
118
e26a1f43Artem Egorov8 years ago119public getEnvArgument(): any {
120let args = this.runOptions;
8457d3fbArtem Egorov8 years ago121let env = process.env;
e26a1f43Artem Egorov8 years ago122
123if (args.envFile) {
124let buffer = fs.readFileSync(args.envFile, "utf8");
125
126// Strip BOM
127if (buffer && buffer[0] === "\uFEFF") {
128buffer = buffer.substr(1);
129}
130
131buffer.split("\n").forEach((line: string) => {
132const r = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);
133if (r !== null) {
134const key = r[1];
8457d3fbArtem Egorov8 years ago135if (!env[key]) { // .env variables never overwrite existing variables
e26a1f43Artem Egorov8 years ago136let value = r[2] || "";
137if (value.length > 0 && value.charAt(0) === "\"" && value.charAt(value.length - 1) === "\"") {
138value = value.replace(/\\n/gm, "\n");
139}
140env[key] = value.replace(/(^['"]|['"]$)/g, "");
141}
142}
143});
8457d3fbArtem Egorov8 years ago144}
e26a1f43Artem Egorov8 years ago145
8457d3fbArtem Egorov8 years ago146if (args.env) {
e26a1f43Artem Egorov8 years ago147// launch config env vars overwrite .env vars
148for (let key in args.env) {
149if (args.env.hasOwnProperty(key)) {
150env[key] = args.env[key];
151}
152}
153}
154
8457d3fbArtem Egorov8 years ago155return env;
e26a1f43Artem Egorov8 years ago156}
0a68f8dbArtem Egorov8 years ago157}