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/exponent/exponentPlatform.ts

104lines · 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";
3c871141Yuri Skorokhodov7 years ago10import { QRCodeContentProvider } from "../qrCodeContentProvider";
0a68f8dbArtem Egorov8 years ago11
12import * as vscode from "vscode";
13import * as Q from "q";
4787ec09Artem Egorov8 years ago14import * as XDL from "./xdlInterface";
15import * as url from "url";
0a68f8dbArtem Egorov8 years ago16
3c871141Yuri Skorokhodov7 years ago17
0a68f8dbArtem Egorov8 years ago18export class ExponentPlatform extends GeneralMobilePlatform {
19private exponentTunnelPath: string | null;
2e432a9eArtem Egorov8 years ago20private exponentHelper: ExponentHelper;
3c871141Yuri Skorokhodov7 years ago21private qrCodeContentProvider: QRCodeContentProvider = new QRCodeContentProvider();
0a68f8dbArtem Egorov8 years ago22
23constructor(runOptions: IRunOptions, platformDeps: MobilePlatformDeps = {}) {
24super(runOptions, platformDeps);
2e432a9eArtem Egorov8 years ago25this.exponentHelper = new ExponentHelper(runOptions.workspaceRoot, runOptions.projectRoot);
0a68f8dbArtem Egorov8 years ago26this.exponentTunnelPath = null;
27}
28
29public runApp(): Q.Promise<void> {
031832ffArtem Egorov8 years ago30const extProps = {
31platform: {
32value: "exponent",
33isPii: false,
4787ec09Artem Egorov8 years ago34},
031832ffArtem Egorov8 years ago35};
4787ec09Artem Egorov8 years ago36
031832ffArtem Egorov8 years ago37return TelemetryHelper.generate("ExponentPlatform.runApp", extProps, () => {
38return this.exponentHelper.loginToExponent(
39(message, password) => {
40return Q.Promise((resolve, reject) => {
41vscode.window.showInputBox({ placeHolder: message, password: password })
42.then(login => {
43resolve(login || "");
44}, reject);
45});
46},
47(message) => {
48return Q.Promise((resolve, reject) => {
49vscode.window.showInformationMessage(message)
50.then(password => {
51resolve(password || "");
52}, reject);
53});
54}
55)
56.then(() =>
57XDL.setOptions(this.projectPath, { packagerPort: this.packager.port })
58)
59.then(() =>
60XDL.startExponentServer(this.projectPath)
61)
62.then(() =>
63XDL.startTunnels(this.projectPath)
64)
65.then(() =>
66XDL.getUrl(this.projectPath, { dev: true, minify: false })
67).then(exponentUrl => {
68return "exp://" + url.parse(exponentUrl).host;
69})
70.catch(reason => {
71return Q.reject<string>(reason);
72})
73.then(exponentUrl => {
3c871141Yuri Skorokhodov7 years ago74let exponentPage = vscode.window.createWebviewPanel("Expo QR Code", "Expo QR Code", vscode.ViewColumn.Two, { });
75exponentPage.webview.html = this.qrCodeContentProvider.provideTextDocumentContent(vscode.Uri.parse(exponentUrl));
031832ffArtem Egorov8 years ago76return exponentUrl;
77})
78.then(exponentUrl => {
79if (!exponentUrl) {
80return Q.reject<void>(ErrorHelper.getInternalError(InternalErrorCode.ExpectedExponentTunnelPath,
81"No link provided by exponent. Is your project correctly setup?"));
82}
83this.exponentTunnelPath = exponentUrl;
84const outputMessage = `Application is running on Exponent. Open your exponent app at ${this.exponentTunnelPath} to see it.`;
85this.logger.info(outputMessage);
86
87return Q.resolve(void 0);
88});
4787ec09Artem Egorov8 years ago89});
90}
91
92public beforeStartPackager(): Q.Promise<void> {
93return this.exponentHelper.configureExponentEnvironment();
0a68f8dbArtem Egorov8 years ago94}
95
96public enableJSDebuggingMode(): Q.Promise<void> {
97this.logger.info("Application is running on Exponent. Please shake device and select 'Debug JS Remotely' to enable debugging.");
98return Q.resolve<void>(void 0);
99}
db6fd42aRuslan Bikkinin7 years ago100
cbc7ac5bArtem Egorov7 years ago101public getRunArguments(): string[] {
db6fd42aRuslan Bikkinin7 years ago102return [];
103}
0a68f8dbArtem Egorov8 years ago104}