microsoft/vscode-react-native

Public

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

CodeCommitsIssuesPull requestsActionsInsightsSecurity
1.7.0

Branches

Tags

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

Clone

HTTPS

Download ZIP

src/extension/exponent/xdlInterface.ts

150lines · 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
65e55367RedMickey4 years ago4import { join as pathJoin } from "path";
7059d307Patricio Beltran9 years ago5import * as XDLPackage from "xdl";
242759feJiglioNero5 years ago6import * as MetroConfigPackage from "metro-config";
716f31d0JiglioNero5 years ago7import { PackageLoader, PackageConfig } from "../../common/packageLoader";
65e55367RedMickey4 years ago8import { removeModuleFromRequireCacheByName } from "../../common/utils";
716f31d0JiglioNero5 years ago9import { SettingsHelper } from "../settingsHelper";
0a68f8dbArtem Egorov8 years ago10
00a26245RedMickey5 years ago11const XDL_PACKAGE = "xdl";
242759feJiglioNero5 years ago12const METRO_CONFIG_PACKAGE = "@expo/metro-config";
13
716f31d0JiglioNero5 years ago14const xdlPackageConfig = new PackageConfig(
15XDL_PACKAGE,
16SettingsHelper.getExpoDependencyVersion(XDL_PACKAGE),
17);
18const metroConfigPackageConfig = new PackageConfig(
19METRO_CONFIG_PACKAGE,
c0dc4020etatanova4 years ago20SettingsHelper.getExpoDependencyVersion(METRO_CONFIG_PACKAGE),
716f31d0JiglioNero5 years ago21);
22
23const ngrokPackageConfig = new PackageConfig(
24xdlPackageConfig.getPackageName(),
25xdlPackageConfig.getVersion(),
26"build/start/resolveNgrok",
27);
28
29// There is the problem with '--no-save' flag for 'npm install' command for npm v6.
30// Installing npm dependencies with the `--no-save` flag will remove
31// other dependencies that were installed previously in the same manner (https://github.com/npm/cli/issues/1460).
32// So we should workaround it passing all packages for install to only one npm install command
33const EXPO_DEPS: PackageConfig[] = [xdlPackageConfig, metroConfigPackageConfig];
242759feJiglioNero5 years ago34
716f31d0JiglioNero5 years ago35export const getXDLPackage: () => Promise<
242759feJiglioNero5 years ago36typeof XDLPackage
37> = PackageLoader.getInstance().generateGetPackageFunction<typeof XDLPackage>(
716f31d0JiglioNero5 years ago38xdlPackageConfig,
242759feJiglioNero5 years ago39...EXPO_DEPS,
40);
716f31d0JiglioNero5 years ago41export const getMetroConfigPackage: () => Promise<
242759feJiglioNero5 years ago42typeof MetroConfigPackage
43> = PackageLoader.getInstance().generateGetPackageFunction<typeof MetroConfigPackage>(
716f31d0JiglioNero5 years ago44metroConfigPackageConfig,
efb436fcRedMickey5 years ago45...EXPO_DEPS,
46);
716f31d0JiglioNero5 years ago47export const getNgrokResolver: () => Promise<XDLPackage.ResolveNgrok> = PackageLoader.getInstance().generateGetPackageFunction<XDLPackage.ResolveNgrok>(
48ngrokPackageConfig,
242759feJiglioNero5 years ago49...EXPO_DEPS,
50);
7059d307Patricio Beltran9 years ago51
52export type IUser = XDLPackage.IUser;
53
0d77292aJiglioNero4 years ago54export async function configReactNativeVersionWarnings(): Promise<void> {
55(await getXDLPackage()).Config.validation.reactNativeVersionWarnings = false;
7059d307Patricio Beltran9 years ago56}
57
0d77292aJiglioNero4 years ago58export async function attachLoggerStream(
34472878RedMickey5 years ago59rootPath: string,
60options?: XDLPackage.IBunyanStream | any,
61): Promise<void> {
0d77292aJiglioNero4 years ago62(await getXDLPackage()).ProjectUtils.attachLoggerStream(rootPath, options);
7059d307Patricio Beltran9 years ago63}
64
0d77292aJiglioNero4 years ago65export async function currentUser(): Promise<XDLPackage.IUser> {
66const xdl = await getXDLPackage();
67return await (xdl.User
68? xdl.User.getCurrentUserAsync()
69: xdl.UserManager.getCurrentUserAsync());
7059d307Patricio Beltran9 years ago70}
71
0d77292aJiglioNero4 years ago72export async function login(username: string, password: string): Promise<XDLPackage.IUser> {
73const xdl = await getXDLPackage();
74return await (xdl.User
75? xdl.User.loginAsync("user-pass", { username: username, password: password })
76: xdl.UserManager.loginAsync("user-pass", {
77username: username,
78password: password,
79}));
7059d307Patricio Beltran9 years ago80}
81
0d77292aJiglioNero4 years ago82export async function getExpoSdkVersions(): Promise<XDLPackage.SDKVersions> {
83return (await getXDLPackage()).Versions.sdkVersionsAsync();
8f50947fRedMickey5 years ago84}
85
0d77292aJiglioNero4 years ago86export async function getReleasedExpoSdkVersions(): Promise<XDLPackage.SDKVersions> {
87return (await getXDLPackage()).Versions.releasedSdkVersionsAsync();
7059d307Patricio Beltran9 years ago88}
89
0d77292aJiglioNero4 years ago90export async function publish(
34472878RedMickey5 years ago91projectRoot: string,
92options?: XDLPackage.IPublishOptions,
93): Promise<XDLPackage.IPublishResponse> {
0d77292aJiglioNero4 years ago94return (await getXDLPackage()).Project.publishAsync(projectRoot, options);
7059d307Patricio Beltran9 years ago95}
96
ec230406RedMickey4 years ago97export async function setOptions(projectRoot: string, options: XDLPackage.IOptions): Promise<void> {
98await (await getXDLPackage()).ProjectSettings.setPackagerInfoAsync(projectRoot, options);
7059d307Patricio Beltran9 years ago99}
100
0d77292aJiglioNero4 years ago101export async function startExponentServer(projectRoot: string): Promise<void> {
102await (await getXDLPackage()).Project.startExpoServerAsync(projectRoot);
7059d307Patricio Beltran9 years ago103}
104
0d77292aJiglioNero4 years ago105export async function startTunnels(projectRoot: string): Promise<void> {
106await (await getXDLPackage()).Project.startTunnelsAsync(projectRoot);
7059d307Patricio Beltran9 years ago107}
108
0d77292aJiglioNero4 years ago109export async function getUrl(
110projectRoot: string,
111options?: XDLPackage.IUrlOptions,
112): Promise<string> {
113return (await getXDLPackage()).UrlUtils.constructManifestUrlAsync(projectRoot, options);
7059d307Patricio Beltran9 years ago114}
115
0d77292aJiglioNero4 years ago116export async function stopAll(projectRoot: string): Promise<void> {
117await (await getXDLPackage()).Project.stopAsync(projectRoot);
7059d307Patricio Beltran9 years ago118}
62c4de22RedMickey6 years ago119
0d77292aJiglioNero4 years ago120export async function startAdbReverse(projectRoot: string): Promise<boolean> {
121return (await getXDLPackage()).Android.startAdbReverseAsync(projectRoot);
62c4de22RedMickey6 years ago122}
123
0d77292aJiglioNero4 years ago124export async function stopAdbReverse(projectRoot: string): Promise<void> {
125await (await getXDLPackage()).Android.stopAdbReverseAsync(projectRoot);
242759feJiglioNero5 years ago126}
127
0d77292aJiglioNero4 years ago128export async function getMetroConfig(
129projectRoot: string,
130): Promise<MetroConfigPackage.IMetroConfig> {
131return (await getMetroConfigPackage()).loadAsync(projectRoot);
62c4de22RedMickey6 years ago132}
efb436fcRedMickey5 years ago133
0d77292aJiglioNero4 years ago134export async function isNgrokInstalled(projectRoot: string): Promise<boolean> {
135const ngrokResolver = await getNgrokResolver();
136try {
137const ngrok = await ngrokResolver.resolveNgrokAsync(projectRoot, {
138shouldPrompt: false,
139autoInstall: false,
65e55367RedMickey4 years ago140});
0d77292aJiglioNero4 years ago141return !!ngrok;
142} catch (err) {
143// If unsupported version of the "@expo/ngrok" package was detected, we need to update the package.
144// Since the "require" method used to parse the "ngrok⁄package.json" file in the "xdl" package caches
145// all processed modules, we have to remove this file from cache to be able to require a new version
146// of that file after the update of the "@expo/ngrok" package
147removeModuleFromRequireCacheByName(pathJoin("ngrok", "package.json"));
148throw err;
149}
efb436fcRedMickey5 years ago150}