microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
5514e2871f80044eedbe4f8290b3e9bdbf098c97

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/xdlInterface.ts

136lines · modecode

1// Copyright (c) Microsoft Corporation. All rights reserved.
2// Licensed under the MIT license. See LICENSE file in the project root for details.
3
4import {CommandExecutor, CommandVerbosity} from "../../common/commandExecutor";
5import {HostPlatform} from "../../common/hostPlatform";
6import {OutputChannelLogger} from "../log/OutputChannelLogger";
7
8import * as XDLPackage from "xdl";
9import * as path from "path";
10import * as Q from "q";
11import { findFileInFolderHierarchy } from "../../common/extensionHelper";
12import customRequire from "../../common/customRequire";
13
14const logger: OutputChannelLogger = OutputChannelLogger.getMainChannel();
15
16const XDL_PACKAGE = "@expo/xdl";
17const EXPO_DEPS: string[] = [
18 XDL_PACKAGE,
19 "@expo/ngrok", // devDependencies for xdl
20];
21
22let xdlPackage: Q.Promise<typeof XDLPackage>;
23
24function getPackage(): Q.Promise<typeof XDLPackage> {
25 if (xdlPackage) {
26 return xdlPackage;
27 }
28 // Don't do the require if we don't actually need it
29 try {
30 logger.debug("Getting exponent dependency.");
31 const xdl = customRequire(XDL_PACKAGE);
32 xdlPackage = Q(xdl);
33 return xdlPackage;
34 } catch (e) {
35 if (e.code === "MODULE_NOT_FOUND") {
36 logger.debug("Dependency not present. Installing it...");
37 } else {
38 throw e;
39 }
40 }
41 let commandExecutor = new CommandExecutor(path.dirname(findFileInFolderHierarchy(__dirname, "package.json") || __dirname), logger);
42 xdlPackage = commandExecutor.spawnWithProgress(HostPlatform.getNpmCliCommand("npm"),
43 ["install", ...EXPO_DEPS, "--verbose", "--no-save"],
44 { verbosity: CommandVerbosity.PROGRESS })
45 .then((): typeof XDLPackage => {
46 return customRequire(XDL_PACKAGE);
47 });
48 return xdlPackage;
49}
50
51export type IUser = XDLPackage.IUser;
52
53export function configReactNativeVersionWargnings(): Q.Promise<void> {
54 return getPackage()
55 .then((xdl) => {
56 xdl.Config.validation.reactNativeVersionWarnings = false;
57 });
58}
59
60export function attachLoggerStream(rootPath: string, options?: XDLPackage.IBunyanStream | any): Q.Promise<void> {
61 return getPackage()
62 .then((xdl) =>
63 xdl.ProjectUtils.attachLoggerStream(rootPath, options));
64}
65
66export function supportedVersions(): Q.Promise<string[]> {
67 return getPackage()
68 .then((xdl) =>
69 xdl.Versions.facebookReactNativeVersionsAsync());
70}
71
72export function currentUser(): Q.Promise<XDLPackage.IUser> {
73 return getPackage()
74 .then((xdl) =>
75 xdl.User ? xdl.User.getCurrentUserAsync() : xdl.UserManager.getCurrentUserAsync());
76}
77
78export function login(username: string, password: string): Q.Promise<XDLPackage.IUser> {
79 return getPackage()
80 .then((xdl) =>
81 xdl.User ? xdl.User.loginAsync("user-pass", { username: username, password: password }) : xdl.UserManager.loginAsync("user-pass", { username: username, password: password }));
82}
83
84export function mapVersion(reactNativeVersion: string): Q.Promise<string> {
85 return getPackage()
86 .then((xdl) =>
87 xdl.Versions.facebookReactNativeVersionToExpoVersionAsync(reactNativeVersion));
88}
89
90export function publish(projectRoot: string, options?: XDLPackage.IPublishOptions): Q.Promise<XDLPackage.IPublishResponse> {
91 return getPackage()
92 .then((xdl) =>
93 xdl.Project.publishAsync(projectRoot, options));
94}
95
96export function setOptions(projectRoot: string, options?: XDLPackage.IOptions): Q.Promise<void> {
97 return getPackage()
98 .then((xdl) =>
99 xdl.Project.setOptionsAsync(projectRoot, options));
100}
101
102export function startExponentServer(projectRoot: string): Q.Promise<void> {
103 return getPackage()
104 .then((xdl) =>
105 xdl.Project.startExpoServerAsync(projectRoot));
106}
107
108export function startTunnels(projectRoot: string): Q.Promise<void> {
109 return getPackage()
110 .then((xdl) =>
111 xdl.Project.startTunnelsAsync(projectRoot));
112}
113
114export function getUrl(projectRoot: string, options?: XDLPackage.IUrlOptions): Q.Promise<string> {
115 return getPackage()
116 .then((xdl) =>
117 xdl.Project.getUrlAsync(projectRoot, options));
118}
119
120export function stopAll(projectRoot: string): Q.Promise<void> {
121 return getPackage()
122 .then((xdl) =>
123 xdl.Project.stopAsync(projectRoot));
124}
125
126export function startAdbReverse(projectRoot: string): Q.Promise<boolean> {
127 return getPackage()
128 .then((xdl) =>
129 xdl.Android.startAdbReverseAsync(projectRoot));
130}
131
132export function stopAdbReverse(projectRoot: string): Q.Promise<void> {
133 return getPackage()
134 .then((xdl) =>
135 xdl.Android.stopAdbReverseAsync(projectRoot));
136}
137