microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.4.3

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/xdlInterface.ts

121lines · modeblame

7059d307Patricio Beltran9 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
0a68f8dbArtem Egorov8 years ago4import {CommandExecutor, CommandVerbosity} from "../../common/commandExecutor";
5import {HostPlatform} from "../../common/hostPlatform";
6import {OutputChannelLogger} from "../log/OutputChannelLogger";
7059d307Patricio Beltran9 years ago7
8import * as XDLPackage from "xdl";
0d827d9bJimmy Thomson9 years ago9import * as path from "path";
7059d307Patricio Beltran9 years ago10import * as Q from "q";
11
0a68f8dbArtem Egorov8 years ago12const logger: OutputChannelLogger = OutputChannelLogger.getMainChannel();
13
94cd5149Artem Egorov8 years ago14const EXPO_DEPS: string[] = [
15"xdl",
16"@expo/ngrok", // devDependencies for xdl
17];
18
0d827d9bJimmy Thomson9 years ago19let xdlPackage: Q.Promise<typeof XDLPackage>;
7059d307Patricio Beltran9 years ago20
21function getPackage(): Q.Promise<typeof XDLPackage> {
22if (xdlPackage) {
0d827d9bJimmy Thomson9 years ago23return xdlPackage;
7059d307Patricio Beltran9 years ago24}
25// Don't do the require if we don't actually need it
26try {
0a68f8dbArtem Egorov8 years ago27logger.debug("Getting exponent dependecy.");
0d827d9bJimmy Thomson9 years ago28const xdl = require("xdl");
29xdlPackage = Q(xdl);
30return xdlPackage;
a57e740bPatricio Beltran9 years ago31} catch (e) {
b0af599cJimmy Thomson9 years ago32if (e.code === "MODULE_NOT_FOUND") {
0a68f8dbArtem Egorov8 years ago33logger.debug("Dependency not present. Installing it...");
b0af599cJimmy Thomson9 years ago34} else {
35throw e;
36}
7059d307Patricio Beltran9 years ago37}
0a68f8dbArtem Egorov8 years ago38let commandExecutor = new CommandExecutor(path.dirname(require.resolve("../../../")), logger);
0d827d9bJimmy Thomson9 years ago39xdlPackage = commandExecutor.spawnWithProgress(HostPlatform.getNpmCliCommand("npm"),
833e37c7Vladimir Kotikov8 years ago40["install", ...EXPO_DEPS, "--verbose", "--no-save"],
0a68f8dbArtem Egorov8 years ago41{ verbosity: CommandVerbosity.PROGRESS })
0d827d9bJimmy Thomson9 years ago42.then((): typeof XDLPackage => {
43return require("xdl");
7059d307Patricio Beltran9 years ago44});
0d827d9bJimmy Thomson9 years ago45return xdlPackage;
7059d307Patricio Beltran9 years ago46}
47
48export type IUser = XDLPackage.IUser;
49
50export function configReactNativeVersionWargnings(): Q.Promise<void> {
51return getPackage()
52.then((xdl) => {
53xdl.Config.validation.reactNativeVersionWarnings = false;
54});
55}
56
94cd5149Artem Egorov8 years ago57export function attachLoggerStream(rootPath: string, options?: XDLPackage.IBunyanStream | any): Q.Promise<void> {
7059d307Patricio Beltran9 years ago58return getPackage()
59.then((xdl) =>
60xdl.ProjectUtils.attachLoggerStream(rootPath, options));
61}
62
94cd5149Artem Egorov8 years ago63export function supportedVersions(): Q.Promise<string[]> {
7059d307Patricio Beltran9 years ago64return getPackage()
65.then((xdl) =>
66xdl.Versions.facebookReactNativeVersionsAsync());
67}
68
69export function currentUser(): Q.Promise<XDLPackage.IUser> {
70return getPackage()
71.then((xdl) =>
72xdl.User.getCurrentUserAsync());
73}
74
75export function login(username: string, password: string): Q.Promise<XDLPackage.IUser> {
76return getPackage()
77.then((xdl) =>
4d1fa3fdNikita Matrosov9 years ago78xdl.User.loginAsync("user-pass", { username: username, password: password }));
7059d307Patricio Beltran9 years ago79}
80
81export function mapVersion(reactNativeVersion: string): Q.Promise<string> {
82return getPackage()
83.then((xdl) =>
4d1fa3fdNikita Matrosov9 years ago84xdl.Versions.facebookReactNativeVersionToExpoVersionAsync(reactNativeVersion));
7059d307Patricio Beltran9 years ago85}
86
87export function publish(projectRoot: string, options?: XDLPackage.IPublishOptions): Q.Promise<XDLPackage.IPublishResponse> {
88return getPackage()
89.then((xdl) =>
90xdl.Project.publishAsync(projectRoot, options));
91}
92
93export function setOptions(projectRoot: string, options?: XDLPackage.IOptions): Q.Promise<void> {
94return getPackage()
95.then((xdl) =>
96xdl.Project.setOptionsAsync(projectRoot, options));
97}
98
99export function startExponentServer(projectRoot: string): Q.Promise<void> {
100return getPackage()
101.then((xdl) =>
4d1fa3fdNikita Matrosov9 years ago102xdl.Project.startExpoServerAsync(projectRoot));
7059d307Patricio Beltran9 years ago103}
104
105export function startTunnels(projectRoot: string): Q.Promise<void> {
106return getPackage()
107.then((xdl) =>
108xdl.Project.startTunnelsAsync(projectRoot));
109}
110
111export function getUrl(projectRoot: string, options?: XDLPackage.IUrlOptions): Q.Promise<string> {
112return getPackage()
113.then((xdl) =>
114xdl.Project.getUrlAsync(projectRoot, options));
115}
116
117export function stopAll(projectRoot: string): Q.Promise<void> {
118return getPackage()
119.then((xdl) =>
120xdl.Project.stopAsync(projectRoot));
121}