microsoft/vscode-react-native

Public

mirrored fromhttps://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
1.5.2

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/xdlInterface.ts

142lines · 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 * as XDLPackage from "xdl";
5import * as MetroConfigPackage from "metro-config";
6import { PackageLoader, PackageConfig } from "../../common/packageLoader";
7import { SettingsHelper } from "../settingsHelper";
8
9const XDL_PACKAGE = "xdl";
10const METRO_CONFIG_PACKAGE = "@expo/metro-config";
11
12const xdlPackageConfig = new PackageConfig(
13 XDL_PACKAGE,
14 SettingsHelper.getExpoDependencyVersion(XDL_PACKAGE),
15);
16const metroConfigPackageConfig = new PackageConfig(
17 METRO_CONFIG_PACKAGE,
18 SettingsHelper.getExpoDependencyVersion("metroConfig"),
19);
20
21const ngrokPackageConfig = new PackageConfig(
22 xdlPackageConfig.getPackageName(),
23 xdlPackageConfig.getVersion(),
24 "build/start/resolveNgrok",
25);
26
27// There is the problem with '--no-save' flag for 'npm install' command for npm v6.
28// Installing npm dependencies with the `--no-save` flag will remove
29// other dependencies that were installed previously in the same manner (https://github.com/npm/cli/issues/1460).
30// So we should workaround it passing all packages for install to only one npm install command
31const EXPO_DEPS: PackageConfig[] = [xdlPackageConfig, metroConfigPackageConfig];
32
33export const getXDLPackage: () => Promise<
34 typeof XDLPackage
35> = PackageLoader.getInstance().generateGetPackageFunction<typeof XDLPackage>(
36 xdlPackageConfig,
37 ...EXPO_DEPS,
38);
39export const getMetroConfigPackage: () => Promise<
40 typeof MetroConfigPackage
41> = PackageLoader.getInstance().generateGetPackageFunction<typeof MetroConfigPackage>(
42 metroConfigPackageConfig,
43 ...EXPO_DEPS,
44);
45export const getNgrokResolver: () => Promise<XDLPackage.ResolveNgrok> = PackageLoader.getInstance().generateGetPackageFunction<XDLPackage.ResolveNgrok>(
46 ngrokPackageConfig,
47 ...EXPO_DEPS,
48);
49
50export type IUser = XDLPackage.IUser;
51
52export function configReactNativeVersionWarnings(): Promise<void> {
53 return getXDLPackage().then(xdl => {
54 xdl.Config.validation.reactNativeVersionWarnings = false;
55 });
56}
57
58export function attachLoggerStream(
59 rootPath: string,
60 options?: XDLPackage.IBunyanStream | any,
61): Promise<void> {
62 return getXDLPackage().then(xdl => xdl.ProjectUtils.attachLoggerStream(rootPath, options));
63}
64
65export function currentUser(): Promise<XDLPackage.IUser> {
66 return getXDLPackage().then(xdl =>
67 xdl.User ? xdl.User.getCurrentUserAsync() : xdl.UserManager.getCurrentUserAsync(),
68 );
69}
70
71export function login(username: string, password: string): Promise<XDLPackage.IUser> {
72 return getXDLPackage().then(xdl =>
73 xdl.User
74 ? xdl.User.loginAsync("user-pass", { username: username, password: password })
75 : xdl.UserManager.loginAsync("user-pass", {
76 username: username,
77 password: password,
78 }),
79 );
80}
81
82export function getExpoSdkVersions(): Promise<XDLPackage.SDKVersions> {
83 return getXDLPackage().then(xdl => xdl.Versions.sdkVersionsAsync());
84}
85
86export function getReleasedExpoSdkVersions(): Promise<XDLPackage.SDKVersions> {
87 return getXDLPackage().then(xdl => xdl.Versions.releasedSdkVersionsAsync());
88}
89
90export function publish(
91 projectRoot: string,
92 options?: XDLPackage.IPublishOptions,
93): Promise<XDLPackage.IPublishResponse> {
94 return getXDLPackage().then(xdl => xdl.Project.publishAsync(projectRoot, options));
95}
96
97export function setOptions(projectRoot: string, options?: XDLPackage.IOptions): Promise<void> {
98 return getXDLPackage().then(xdl => xdl.Project.setOptionsAsync(projectRoot, options));
99}
100
101export function startExponentServer(projectRoot: string): Promise<void> {
102 return getXDLPackage().then(xdl => xdl.Project.startExpoServerAsync(projectRoot));
103}
104
105export function startTunnels(projectRoot: string): Promise<void> {
106 return getXDLPackage().then(xdl => xdl.Project.startTunnelsAsync(projectRoot));
107}
108
109export function getUrl(projectRoot: string, options?: XDLPackage.IUrlOptions): Promise<string> {
110 return getXDLPackage().then(xdl =>
111 xdl.UrlUtils.constructManifestUrlAsync(projectRoot, options),
112 );
113}
114
115export function stopAll(projectRoot: string): Promise<void> {
116 return getXDLPackage().then(xdl => xdl.Project.stopAsync(projectRoot));
117}
118
119export function startAdbReverse(projectRoot: string): Promise<boolean> {
120 return getXDLPackage().then(xdl => xdl.Android.startAdbReverseAsync(projectRoot));
121}
122
123export function stopAdbReverse(projectRoot: string): Promise<void> {
124 return getXDLPackage().then(xdl => xdl.Android.stopAdbReverseAsync(projectRoot));
125}
126
127export function getMetroConfig(projectRoot: string): Promise<MetroConfigPackage.IMetroConfig> {
128 return getMetroConfigPackage().then(metroConfigPackage =>
129 metroConfigPackage.loadAsync(projectRoot),
130 );
131}
132
133export function isNgrokInstalled(projectRoot: string): Promise<boolean> {
134 return getNgrokResolver()
135 .then(ngrokResolver =>
136 ngrokResolver.resolveNgrokAsync(projectRoot, {
137 shouldPrompt: false,
138 autoInstall: false,
139 }),
140 )
141 .then(ngrok => !!ngrok);
142}
143