microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.6.13

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/exponentPlatform.ts

96lines · 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
031832ffArtem Egorov8 years ago4import { ErrorHelper } from "../../common/error/errorHelper";
5import { InternalErrorCode } from "../../common/error/internalErrorCode";
6import { IRunOptions } from "../launchArgs";
7import { GeneralMobilePlatform, MobilePlatformDeps } from "../generalMobilePlatform";
8import { ExponentHelper } from "./exponentHelper";
9import { TelemetryHelper } from "../../common/telemetryHelper";
0a68f8dbArtem Egorov8 years ago10
11import * as vscode from "vscode";
12import * as Q from "q";
4787ec09Artem Egorov8 years ago13import * as XDL from "./xdlInterface";
14import * as url from "url";
0a68f8dbArtem Egorov8 years ago15
16export class ExponentPlatform extends GeneralMobilePlatform {
17private exponentTunnelPath: string | null;
2e432a9eArtem Egorov8 years ago18private exponentHelper: ExponentHelper;
0a68f8dbArtem Egorov8 years ago19
20constructor(runOptions: IRunOptions, platformDeps: MobilePlatformDeps = {}) {
21super(runOptions, platformDeps);
2e432a9eArtem Egorov8 years ago22this.exponentHelper = new ExponentHelper(runOptions.workspaceRoot, runOptions.projectRoot);
0a68f8dbArtem Egorov8 years ago23this.exponentTunnelPath = null;
24}
25
26public runApp(): Q.Promise<void> {
031832ffArtem Egorov8 years ago27const extProps = {
28platform: {
29value: "exponent",
30isPii: false,
4787ec09Artem Egorov8 years ago31},
031832ffArtem Egorov8 years ago32};
4787ec09Artem Egorov8 years ago33
031832ffArtem Egorov8 years ago34return TelemetryHelper.generate("ExponentPlatform.runApp", extProps, () => {
35return this.exponentHelper.loginToExponent(
36(message, password) => {
37return Q.Promise((resolve, reject) => {
38vscode.window.showInputBox({ placeHolder: message, password: password })
39.then(login => {
40resolve(login || "");
41}, reject);
42});
43},
44(message) => {
45return Q.Promise((resolve, reject) => {
46vscode.window.showInformationMessage(message)
47.then(password => {
48resolve(password || "");
49}, reject);
50});
51}
52)
53.then(() =>
54XDL.setOptions(this.projectPath, { packagerPort: this.packager.port })
55)
56.then(() =>
57XDL.startExponentServer(this.projectPath)
58)
59.then(() =>
60XDL.startTunnels(this.projectPath)
61)
62.then(() =>
63XDL.getUrl(this.projectPath, { dev: true, minify: false })
64).then(exponentUrl => {
65return "exp://" + url.parse(exponentUrl).host;
66})
67.catch(reason => {
68return Q.reject<string>(reason);
69})
70.then(exponentUrl => {
71vscode.commands.executeCommand("vscode.previewHtml", vscode.Uri.parse(exponentUrl), 1, "Expo QR code");
72return exponentUrl;
73})
74.then(exponentUrl => {
75if (!exponentUrl) {
76return Q.reject<void>(ErrorHelper.getInternalError(InternalErrorCode.ExpectedExponentTunnelPath,
77"No link provided by exponent. Is your project correctly setup?"));
78}
79this.exponentTunnelPath = exponentUrl;
80const outputMessage = `Application is running on Exponent. Open your exponent app at ${this.exponentTunnelPath} to see it.`;
81this.logger.info(outputMessage);
82
83return Q.resolve(void 0);
84});
4787ec09Artem Egorov8 years ago85});
86}
87
88public beforeStartPackager(): Q.Promise<void> {
89return this.exponentHelper.configureExponentEnvironment();
0a68f8dbArtem Egorov8 years ago90}
91
92public enableJSDebuggingMode(): Q.Promise<void> {
93this.logger.info("Application is running on Exponent. Please shake device and select 'Debug JS Remotely' to enable debugging.");
94return Q.resolve<void>(void 0);
95}
96}