microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
8a67e140aee58da792b1e9c1c17358a98d5a3704

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/common/exponent/xdlInterface.ts

120lines · 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 "../commandExecutor";
5import {HostPlatform} from "../hostPlatform";
6import {Log} from "../log/log";
7
8import * as XDLPackage from "xdl";
9import * as path from "path";
10import * as Q from "q";
11
12const EXPO_DEPS: string[] = [
13 "xdl",
14 "@expo/ngrok", // devDependencies for xdl
15];
16
17let xdlPackage: Q.Promise<typeof XDLPackage>;
18
19function getPackage(): Q.Promise<typeof XDLPackage> {
20 if (xdlPackage) {
21 return xdlPackage;
22 }
23 // Don't do the require if we don't actually need it
24 try {
25 Log.logMessage("Getting exponent dependecy.", false);
26 const xdl = require("xdl");
27 xdlPackage = Q(xdl);
28 return xdlPackage;
29 } catch (e) {
30 if (e.code === "MODULE_NOT_FOUND") {
31 Log.logMessage("Dependency not present. Installing it...", false);
32 } else {
33 throw e;
34 }
35 }
36 let commandExecutor = new CommandExecutor();
37 xdlPackage = commandExecutor.spawnWithProgress(HostPlatform.getNpmCliCommand("npm"),
38 ["install", ...EXPO_DEPS, "--verbose", "--no-save"],
39 { verbosity: CommandVerbosity.PROGRESS,
40 cwd: path.dirname(require.resolve("../../../"))})
41 .then((): typeof XDLPackage => {
42 return require("xdl");
43 });
44 return xdlPackage;
45}
46
47export type IUser = XDLPackage.IUser;
48
49export function configReactNativeVersionWargnings(): Q.Promise<void> {
50 return getPackage()
51 .then((xdl) => {
52 xdl.Config.validation.reactNativeVersionWarnings = false;
53 });
54}
55
56export function attachLoggerStream(rootPath: string, options?: XDLPackage.IBunyanStream | any): Q.Promise<void> {
57 return getPackage()
58 .then((xdl) =>
59 xdl.ProjectUtils.attachLoggerStream(rootPath, options));
60}
61
62export function supportedVersions(): Q.Promise<string[]> {
63 return getPackage()
64 .then((xdl) =>
65 xdl.Versions.facebookReactNativeVersionsAsync());
66}
67
68export function currentUser(): Q.Promise<XDLPackage.IUser> {
69 return getPackage()
70 .then((xdl) =>
71 xdl.User.getCurrentUserAsync());
72}
73
74export function login(username: string, password: string): Q.Promise<XDLPackage.IUser> {
75 return getPackage()
76 .then((xdl) =>
77 xdl.User.loginAsync("user-pass", { username: username, password: password }));
78}
79
80export function mapVersion(reactNativeVersion: string): Q.Promise<string> {
81 return getPackage()
82 .then((xdl) =>
83 xdl.Versions.facebookReactNativeVersionToExpoVersionAsync(reactNativeVersion));
84}
85
86export function publish(projectRoot: string, options?: XDLPackage.IPublishOptions): Q.Promise<XDLPackage.IPublishResponse> {
87 return getPackage()
88 .then((xdl) =>
89 xdl.Project.publishAsync(projectRoot, options));
90}
91
92export function setOptions(projectRoot: string, options?: XDLPackage.IOptions): Q.Promise<void> {
93 return getPackage()
94 .then((xdl) =>
95 xdl.Project.setOptionsAsync(projectRoot, options));
96}
97
98export function startExponentServer(projectRoot: string): Q.Promise<void> {
99 return getPackage()
100 .then((xdl) =>
101 xdl.Project.startExpoServerAsync(projectRoot));
102}
103
104export function startTunnels(projectRoot: string): Q.Promise<void> {
105 return getPackage()
106 .then((xdl) =>
107 xdl.Project.startTunnelsAsync(projectRoot));
108}
109
110export function getUrl(projectRoot: string, options?: XDLPackage.IUrlOptions): Q.Promise<string> {
111 return getPackage()
112 .then((xdl) =>
113 xdl.Project.getUrlAsync(projectRoot, options));
114}
115
116export function stopAll(projectRoot: string): Q.Promise<void> {
117 return getPackage()
118 .then((xdl) =>
119 xdl.Project.stopAsync(projectRoot));
120}
121