microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.6.9

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/exponentPlatform.ts

86lines · 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 {ErrorHelper} from "../../common/error/errorHelper";
5import {InternalErrorCode} from "../../common/error/internalErrorCode";
6import {IRunOptions} from "../launchArgs";
7import {GeneralMobilePlatform, MobilePlatformDeps} from "../generalMobilePlatform";
8import {ExponentHelper} from "./exponentHelper";
9
10import * as vscode from "vscode";
11import * as Q from "q";
12import {PackagerRunAs} from "../../common/packager";
13import {PackagerStatus} from "../packagerStatusIndicator";
14
15export class ExponentPlatform extends GeneralMobilePlatform {
16private exponentTunnelPath: string | null;
2e432a9eArtem Egorov8 years ago17private exponentHelper: ExponentHelper;
0a68f8dbArtem Egorov8 years ago18
19constructor(runOptions: IRunOptions, platformDeps: MobilePlatformDeps = {}) {
20super(runOptions, platformDeps);
2e432a9eArtem Egorov8 years ago21this.exponentHelper = new ExponentHelper(runOptions.workspaceRoot, runOptions.projectRoot);
0a68f8dbArtem Egorov8 years ago22this.exponentTunnelPath = null;
23}
24
25public runApp(): Q.Promise<void> {
26const outputMessage = `Application is running on Exponent. Open your exponent app at ${this.exponentTunnelPath} to see it.`;
27this.logger.info(outputMessage);
28return Q.resolve<void>(void 0);
29}
30
31public enableJSDebuggingMode(): Q.Promise<void> {
32this.logger.info("Application is running on Exponent. Please shake device and select 'Debug JS Remotely' to enable debugging.");
33return Q.resolve<void>(void 0);
34}
35
36public startPackager(): Q.Promise<void> {
37this.logger.info("Starting Exponent Packager.");
38return this.packager.isRunning().then((running) => {
39if (running) {
40if (this.packager.getRunningAs() !== PackagerRunAs.EXPONENT) {
41return this.packager.stop().then(() =>
2e432a9eArtem Egorov8 years ago42this.packager.statusIndicator.updatePackagerStatus(PackagerStatus.PACKAGER_STOPPED));
0a68f8dbArtem Egorov8 years ago43}
44
45this.logger.info("Attaching to running Exponent packager");
46}
47return void 0;
48}).then(() =>
49this.exponentHelper.configureExponentEnvironment()
50).then(() =>
51this.exponentHelper.loginToExponent(
52(message, password) => {
53return Q.Promise((resolve, reject) => {
54vscode.window.showInputBox({ placeHolder: message, password: password })
2e432a9eArtem Egorov8 years ago55.then(login => {
56resolve(login || "");
57}, reject);
0a68f8dbArtem Egorov8 years ago58});
59},
60(message) => {
61return Q.Promise((resolve, reject) => {
62vscode.window.showInformationMessage(message)
2e432a9eArtem Egorov8 years ago63.then(password => {
64resolve(password || "");
65}, reject);
0a68f8dbArtem Egorov8 years ago66});
67}
68))
69.then(() => {
70return this.packager.startAsExponent();
71})
72.then(exponentUrl => {
73vscode.commands.executeCommand("vscode.previewHtml", vscode.Uri.parse(exponentUrl), 1, "Expo QR code");
2e432a9eArtem Egorov8 years ago74this.packager.statusIndicator.updatePackagerStatus(PackagerStatus.EXPONENT_PACKAGER_STARTED);
0a68f8dbArtem Egorov8 years ago75return exponentUrl;
76})
77.then(exponentUrl => {
78if (!exponentUrl) {
79return Q.reject<void>(ErrorHelper.getInternalError(InternalErrorCode.ExpectedExponentTunnelPath,
80"No link provided by exponent. Is your project correctly setup?"));
81}
82this.exponentTunnelPath = exponentUrl;
83return Q.resolve(void 0);
84});
85}
86}