microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.14.2

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/generalMobilePlatform.ts

173lines · 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 Egorov7 years ago8import {Packager} from "../common/packager";
9import {PackagerStatusIndicator, PackagerStatus} from "./packagerStatusIndicator";
0a68f8dbArtem Egorov8 years ago10import {SettingsHelper} from "./settingsHelper";
11import {OutputChannelLogger} from "./log/OutputChannelLogger";
d7d405aeYuri Skorokhodov7 years ago12import * as nls from "vscode-nls";
13const localize = nls.loadMessageBundle();
0a68f8dbArtem Egorov8 years ago14
15export interface MobilePlatformDeps {
16packager?: Packager;
17}
18
19export type TargetType = "device" | "simulator";
20
21export class GeneralMobilePlatform {
22protected projectPath: string;
23protected platformName: string;
24protected packager: Packager;
25protected logger: OutputChannelLogger;
26
27protected static deviceString: TargetType = "device";
28protected static simulatorString: TargetType = "simulator";
df8c800dArtem Egorov8 years ago29protected static NO_PACKAGER_VERSION = "0.42.0";
0a68f8dbArtem Egorov8 years ago30
db6fd42aRuslan Bikkinin7 years ago31public runArguments: string[];
32
0a68f8dbArtem Egorov8 years ago33constructor(protected runOptions: IRunOptions, platformDeps: MobilePlatformDeps = {}) {
34this.platformName = this.runOptions.platform;
35this.projectPath = this.runOptions.projectRoot;
2e432a9eArtem Egorov8 years ago36this.packager = platformDeps.packager || new Packager(this.runOptions.workspaceRoot, this.projectPath, SettingsHelper.getPackagerPort(this.runOptions.workspaceRoot), new PackagerStatusIndicator());
aca27f7fYuri Skorokhodov7 years ago37this.logger = OutputChannelLogger.getChannel(localize("ReactNativeRunPlatform", "React Native: Run {0}", this.platformName), true);
0a68f8dbArtem Egorov8 years ago38this.logger.clear();
db6fd42aRuslan Bikkinin7 years ago39this.runArguments = this.getRunArguments();
0a68f8dbArtem Egorov8 years ago40}
41
42public runApp(): Q.Promise<void> {
d7d405aeYuri Skorokhodov7 years ago43this.logger.info(localize("ConnectedToPackager", "Connected to packager. You can now open your app in the simulator."));
0a68f8dbArtem Egorov8 years ago44return Q.resolve<void>(void 0);
45}
46
47public enableJSDebuggingMode(): Q.Promise<void> {
d7d405aeYuri Skorokhodov7 years ago48this.logger.info(localize("DebuggerReadyEnableRemoteDebuggingInApp", "Debugger ready. Enable remote debugging in app."));
0a68f8dbArtem Egorov8 years ago49return Q.resolve<void>(void 0);
50}
51
52public disableJSDebuggingMode(): Q.Promise<void> {
d7d405aeYuri Skorokhodov7 years ago53this.logger.info(localize("DebuggerReadyDisableRemoteDebuggingInApp", "Debugger ready. Disable remote debugging in app."));
0a68f8dbArtem Egorov8 years ago54return Q.resolve<void>(void 0);
55}
56
4787ec09Artem Egorov7 years ago57public beforeStartPackager(): Q.Promise<void> {
58return Q.resolve<void>(void 0);
59}
60
0a68f8dbArtem Egorov8 years ago61public startPackager(): Q.Promise<void> {
d7d405aeYuri Skorokhodov7 years ago62this.logger.info(localize("StartingReactNativePackager", "Starting React Native Packager."));
4787ec09Artem Egorov7 years ago63return this.packager.isRunning()
64.then((running) => {
0a68f8dbArtem Egorov8 years ago65if (running) {
4787ec09Artem Egorov7 years ago66if (this.packager.getPackagerStatus() !== PackagerStatus.PACKAGER_STARTED) {
67return this.packager.stop();
0a68f8dbArtem Egorov8 years ago68}
69
d7d405aeYuri Skorokhodov7 years ago70this.logger.info(localize("AttachingToRunningReactNativePackager", "Attaching to running React Native packager"));
0a68f8dbArtem Egorov8 years ago71}
72return void 0;
73})
4787ec09Artem Egorov7 years ago74.then(() => {
75return this.packager.start();
76});
0a68f8dbArtem Egorov8 years ago77}
78
79public prewarmBundleCache(): Q.Promise<void> {
80// generalMobilePlatform should do nothing here. Method should be overriden by children for specific behavior.
81return Q.resolve<void>(void 0);
82}
83
116c3cb0Ruslan Bikkinin7 years ago84public static getOptFromRunArgs(runArguments: any[], optName: string, binary: boolean = false): any {
85if (runArguments.length > 0) {
86const optIdx = runArguments.indexOf(optName);
87let result: any = undefined;
db6fd42aRuslan Bikkinin7 years ago88
89if (optIdx > -1) {
116c3cb0Ruslan Bikkinin7 years ago90result = binary ? true : runArguments[optIdx + 1];
db6fd42aRuslan Bikkinin7 years ago91} else {
116c3cb0Ruslan Bikkinin7 years ago92for (let i = 0; i < runArguments.length; i++) {
93const arg = runArguments[i];
db6fd42aRuslan Bikkinin7 years ago94if (arg.indexOf(optName) > -1) {
116c3cb0Ruslan Bikkinin7 years ago95if (binary) {
96result = true;
97} else {
98const tokens = arg.split("=");
99if (tokens.length > 1) {
100result = tokens[1].trim();
101} else {
102result = undefined;
103}
104}
db6fd42aRuslan Bikkinin7 years ago105}
106}
107}
108
116c3cb0Ruslan Bikkinin7 years ago109// Binary parameters can either exists (e.g. be true) or be absent. You can not pass false binary parameter.
db6fd42aRuslan Bikkinin7 years ago110if (binary) {
116c3cb0Ruslan Bikkinin7 years ago111if (result === undefined) {
112return undefined;
113} else {
114return true;
115}
db6fd42aRuslan Bikkinin7 years ago116}
117
118if (result) {
119try {
120return JSON.parse(result);
121} catch (err) {
116c3cb0Ruslan Bikkinin7 years ago122// simple string value, return as is
db6fd42aRuslan Bikkinin7 years ago123return result;
124}
125}
126}
127
128return undefined;
129}
130
cbc7ac5bArtem Egorov7 years ago131public getRunArguments(): string[] {
db6fd42aRuslan Bikkinin7 years ago132throw new Error("Not yet implemented: GeneralMobilePlatform.getRunArguments");
133}
134
e26a1f43Artem Egorov8 years ago135public getEnvArgument(): any {
136let args = this.runOptions;
8457d3fbArtem Egorov8 years ago137let env = process.env;
e26a1f43Artem Egorov8 years ago138
139if (args.envFile) {
140let buffer = fs.readFileSync(args.envFile, "utf8");
141
142// Strip BOM
143if (buffer && buffer[0] === "\uFEFF") {
144buffer = buffer.substr(1);
145}
146
147buffer.split("\n").forEach((line: string) => {
148const r = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/);
149if (r !== null) {
150const key = r[1];
8457d3fbArtem Egorov8 years ago151if (!env[key]) { // .env variables never overwrite existing variables
e26a1f43Artem Egorov8 years ago152let value = r[2] || "";
153if (value.length > 0 && value.charAt(0) === "\"" && value.charAt(value.length - 1) === "\"") {
154value = value.replace(/\\n/gm, "\n");
155}
156env[key] = value.replace(/(^['"]|['"]$)/g, "");
157}
158}
159});
8457d3fbArtem Egorov8 years ago160}
e26a1f43Artem Egorov8 years ago161
8457d3fbArtem Egorov8 years ago162if (args.env) {
e26a1f43Artem Egorov8 years ago163// launch config env vars overwrite .env vars
164for (let key in args.env) {
165if (args.env.hasOwnProperty(key)) {
166env[key] = args.env[key];
167}
168}
169}
170
8457d3fbArtem Egorov8 years ago171return env;
e26a1f43Artem Egorov8 years ago172}
0a68f8dbArtem Egorov8 years ago173}