microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
0.13.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/xdlInterface.ts

122lines · 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
66412fdfRuslan Bikkinin7 years ago14const XDL_PACKAGE = "@expo/xdl";
94cd5149Artem Egorov8 years ago15const EXPO_DEPS: string[] = [
66412fdfRuslan Bikkinin7 years ago16XDL_PACKAGE,
94cd5149Artem Egorov8 years ago17"@expo/ngrok", // devDependencies for xdl
18];
19
0d827d9bJimmy Thomson9 years ago20let xdlPackage: Q.Promise<typeof XDLPackage>;
7059d307Patricio Beltran9 years ago21
22function getPackage(): Q.Promise<typeof XDLPackage> {
23if (xdlPackage) {
0d827d9bJimmy Thomson9 years ago24return xdlPackage;
7059d307Patricio Beltran9 years ago25}
26// Don't do the require if we don't actually need it
27try {
d7d405aeYuri Skorokhodov7 years ago28logger.debug("Getting exponent dependency.");
66412fdfRuslan Bikkinin7 years ago29const xdl = require(XDL_PACKAGE);
0d827d9bJimmy Thomson9 years ago30xdlPackage = Q(xdl);
31return xdlPackage;
a57e740bPatricio Beltran9 years ago32} catch (e) {
b0af599cJimmy Thomson9 years ago33if (e.code === "MODULE_NOT_FOUND") {
0a68f8dbArtem Egorov8 years ago34logger.debug("Dependency not present. Installing it...");
b0af599cJimmy Thomson9 years ago35} else {
36throw e;
37}
7059d307Patricio Beltran9 years ago38}
0a68f8dbArtem Egorov8 years ago39let commandExecutor = new CommandExecutor(path.dirname(require.resolve("../../../")), logger);
0d827d9bJimmy Thomson9 years ago40xdlPackage = commandExecutor.spawnWithProgress(HostPlatform.getNpmCliCommand("npm"),
833e37c7Vladimir Kotikov8 years ago41["install", ...EXPO_DEPS, "--verbose", "--no-save"],
0a68f8dbArtem Egorov8 years ago42{ verbosity: CommandVerbosity.PROGRESS })
0d827d9bJimmy Thomson9 years ago43.then((): typeof XDLPackage => {
66412fdfRuslan Bikkinin7 years ago44return require(XDL_PACKAGE);
7059d307Patricio Beltran9 years ago45});
0d827d9bJimmy Thomson9 years ago46return xdlPackage;
7059d307Patricio Beltran9 years ago47}
48
49export type IUser = XDLPackage.IUser;
50
51export function configReactNativeVersionWargnings(): Q.Promise<void> {
52return getPackage()
53.then((xdl) => {
54xdl.Config.validation.reactNativeVersionWarnings = false;
55});
56}
57
94cd5149Artem Egorov8 years ago58export function attachLoggerStream(rootPath: string, options?: XDLPackage.IBunyanStream | any): Q.Promise<void> {
7059d307Patricio Beltran9 years ago59return getPackage()
60.then((xdl) =>
61xdl.ProjectUtils.attachLoggerStream(rootPath, options));
62}
63
94cd5149Artem Egorov8 years ago64export function supportedVersions(): Q.Promise<string[]> {
7059d307Patricio Beltran9 years ago65return getPackage()
66.then((xdl) =>
67xdl.Versions.facebookReactNativeVersionsAsync());
68}
69
70export function currentUser(): Q.Promise<XDLPackage.IUser> {
71return getPackage()
72.then((xdl) =>
4aec730eYuri Skorokhodov6 years ago73xdl.User ? xdl.User.getCurrentUserAsync() : xdl.UserManager.getCurrentUserAsync());
7059d307Patricio Beltran9 years ago74}
75
76export function login(username: string, password: string): Q.Promise<XDLPackage.IUser> {
77return getPackage()
78.then((xdl) =>
4aec730eYuri Skorokhodov6 years ago79xdl.User ? xdl.User.loginAsync("user-pass", { username: username, password: password }) : xdl.UserManager.loginAsync("user-pass", { username: username, password: password }));
7059d307Patricio Beltran9 years ago80}
81
82export function mapVersion(reactNativeVersion: string): Q.Promise<string> {
83return getPackage()
84.then((xdl) =>
4d1fa3fdNikita Matrosov9 years ago85xdl.Versions.facebookReactNativeVersionToExpoVersionAsync(reactNativeVersion));
7059d307Patricio Beltran9 years ago86}
87
88export function publish(projectRoot: string, options?: XDLPackage.IPublishOptions): Q.Promise<XDLPackage.IPublishResponse> {
89return getPackage()
90.then((xdl) =>
91xdl.Project.publishAsync(projectRoot, options));
92}
93
94export function setOptions(projectRoot: string, options?: XDLPackage.IOptions): Q.Promise<void> {
95return getPackage()
96.then((xdl) =>
97xdl.Project.setOptionsAsync(projectRoot, options));
98}
99
100export function startExponentServer(projectRoot: string): Q.Promise<void> {
101return getPackage()
102.then((xdl) =>
4d1fa3fdNikita Matrosov9 years ago103xdl.Project.startExpoServerAsync(projectRoot));
7059d307Patricio Beltran9 years ago104}
105
106export function startTunnels(projectRoot: string): Q.Promise<void> {
107return getPackage()
108.then((xdl) =>
109xdl.Project.startTunnelsAsync(projectRoot));
110}
111
112export function getUrl(projectRoot: string, options?: XDLPackage.IUrlOptions): Q.Promise<string> {
113return getPackage()
114.then((xdl) =>
115xdl.Project.getUrlAsync(projectRoot, options));
116}
117
118export function stopAll(projectRoot: string): Q.Promise<void> {
119return getPackage()
120.then((xdl) =>
121xdl.Project.stopAsync(projectRoot));
122}