microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.10.2

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/exponentPlatform.ts

110lines · 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 Egorov7 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 Egorov7 years ago14import * as XDL from "./xdlInterface";
15import * as url from "url";
d7d405aeYuri Skorokhodov7 years ago16import * as nls from "vscode-nls";
17const localize = nls.loadMessageBundle();
0a68f8dbArtem Egorov8 years ago18
3c871141Yuri Skorokhodov7 years ago19
0a68f8dbArtem Egorov8 years ago20export class ExponentPlatform extends GeneralMobilePlatform {
21private exponentTunnelPath: string | null;
2e432a9eArtem Egorov8 years ago22private exponentHelper: ExponentHelper;
3c871141Yuri Skorokhodov7 years ago23private qrCodeContentProvider: QRCodeContentProvider = new QRCodeContentProvider();
0a68f8dbArtem Egorov8 years ago24
25constructor(runOptions: IRunOptions, platformDeps: MobilePlatformDeps = {}) {
26super(runOptions, platformDeps);
2e432a9eArtem Egorov8 years ago27this.exponentHelper = new ExponentHelper(runOptions.workspaceRoot, runOptions.projectRoot);
0a68f8dbArtem Egorov8 years ago28this.exponentTunnelPath = null;
29}
30
31public runApp(): Q.Promise<void> {
031832ffArtem Egorov7 years ago32const extProps = {
33platform: {
34value: "exponent",
35isPii: false,
4787ec09Artem Egorov7 years ago36},
031832ffArtem Egorov7 years ago37};
4787ec09Artem Egorov7 years ago38
031832ffArtem Egorov7 years ago39return TelemetryHelper.generate("ExponentPlatform.runApp", extProps, () => {
40return this.exponentHelper.loginToExponent(
41(message, password) => {
42return Q.Promise((resolve, reject) => {
43vscode.window.showInputBox({ placeHolder: message, password: password })
44.then(login => {
45resolve(login || "");
46}, reject);
47});
48},
49(message) => {
50return Q.Promise((resolve, reject) => {
79069a37Ruslan Bikkinin7 years ago51const okButton = { title: "Ok" };
52const cancelButton = { title: "Cancel", isCloseAffordance: true };
53vscode.window.showInformationMessage(message, {modal: true}, okButton, cancelButton)
54.then(answer => {
55if (answer === cancelButton) {
d7d405aeYuri Skorokhodov7 years ago56reject(ErrorHelper.getInternalError(InternalErrorCode.UserCancelledExpoLogin));
79069a37Ruslan Bikkinin7 years ago57}
58resolve("");
031832ffArtem Egorov7 years ago59}, reject);
60});
61}
62)
63.then(() =>
64XDL.setOptions(this.projectPath, { packagerPort: this.packager.port })
65)
66.then(() =>
67XDL.startExponentServer(this.projectPath)
68)
69.then(() =>
70XDL.startTunnels(this.projectPath)
71)
72.then(() =>
73XDL.getUrl(this.projectPath, { dev: true, minify: false })
74).then(exponentUrl => {
75return "exp://" + url.parse(exponentUrl).host;
76})
77.catch(reason => {
78return Q.reject<string>(reason);
79})
80.then(exponentUrl => {
3c871141Yuri Skorokhodov7 years ago81let exponentPage = vscode.window.createWebviewPanel("Expo QR Code", "Expo QR Code", vscode.ViewColumn.Two, { });
82exponentPage.webview.html = this.qrCodeContentProvider.provideTextDocumentContent(vscode.Uri.parse(exponentUrl));
031832ffArtem Egorov7 years ago83return exponentUrl;
84})
85.then(exponentUrl => {
86if (!exponentUrl) {
10f9b914Yuri Skorokhodov7 years ago87return Q.reject<void>(ErrorHelper.getInternalError(InternalErrorCode.ExpectedExponentTunnelPath));
031832ffArtem Egorov7 years ago88}
89this.exponentTunnelPath = exponentUrl;
d7d405aeYuri Skorokhodov7 years ago90const outputMessage = localize("ApplicationIsRunningOnExponentOpenToSeeIt", "Application is running on Expo. Open your Expo app at {0} to see it.", this.exponentTunnelPath);
031832ffArtem Egorov7 years ago91this.logger.info(outputMessage);
92
93return Q.resolve(void 0);
94});
4787ec09Artem Egorov7 years ago95});
96}
97
98public beforeStartPackager(): Q.Promise<void> {
99return this.exponentHelper.configureExponentEnvironment();
0a68f8dbArtem Egorov8 years ago100}
101
102public enableJSDebuggingMode(): Q.Promise<void> {
d7d405aeYuri Skorokhodov7 years ago103this.logger.info(localize("ApplicationIsRunningOnExponentShakeDeviceForRemoteDebugging", "Application is running on Expo. Please shake device and select 'Debug JS Remotely' to enable debugging."));
0a68f8dbArtem Egorov8 years ago104return Q.resolve<void>(void 0);
105}
db6fd42aRuslan Bikkinin7 years ago106
cbc7ac5bArtem Egorov7 years ago107public getRunArguments(): string[] {
db6fd42aRuslan Bikkinin7 years ago108return [];
109}
0a68f8dbArtem Egorov8 years ago110}