@expo/cli 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +106 -0
- package/build/bin/cli +125 -0
- package/build/bin/cli.map +1 -0
- package/build/src/api/endpoint.js +17 -0
- package/build/src/api/endpoint.js.map +1 -0
- package/build/src/api/getExpoGoIntermediateCertificate.js +21 -0
- package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -0
- package/build/src/api/getExpoSchema.js +69 -0
- package/build/src/api/getExpoSchema.js.map +1 -0
- package/build/src/api/getNativeModuleVersions.js +31 -0
- package/build/src/api/getNativeModuleVersions.js.map +1 -0
- package/build/src/api/getProject.js +19 -0
- package/build/src/api/getProject.js.map +1 -0
- package/build/src/api/getProjectDevelopmentCertificate.js +24 -0
- package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -0
- package/build/src/api/getVersions.js +37 -0
- package/build/src/api/getVersions.js.map +1 -0
- package/build/src/api/graphql/client.js +104 -0
- package/build/src/api/graphql/client.js.map +1 -0
- package/build/src/api/graphql/generated.js +113 -0
- package/build/src/api/graphql/generated.js.map +1 -0
- package/build/src/api/graphql/queries/UserQuery.js +43 -0
- package/build/src/api/graphql/queries/UserQuery.js.map +1 -0
- package/build/src/api/rest/cache/FileSystemCache.js +79 -0
- package/build/src/api/rest/cache/FileSystemCache.js.map +1 -0
- package/build/src/api/rest/cache/response.js +31 -0
- package/build/src/api/rest/cache/response.js.map +1 -0
- package/build/src/api/rest/cache/wrapFetchWithCache.js +156 -0
- package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -0
- package/build/src/api/rest/client.js +94 -0
- package/build/src/api/rest/client.js.map +1 -0
- package/build/src/api/rest/client.types.js +6 -0
- package/build/src/api/rest/client.types.js.map +1 -0
- package/build/src/api/rest/wrapFetchWithBaseUrl.js +20 -0
- package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -0
- package/build/src/api/rest/wrapFetchWithOffline.js +39 -0
- package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -0
- package/build/src/api/rest/wrapFetchWithProgress.js +59 -0
- package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -0
- package/build/src/api/settings.js +11 -0
- package/build/src/api/settings.js.map +1 -0
- package/build/src/api/signManifest.js +38 -0
- package/build/src/api/signManifest.js.map +1 -0
- package/build/src/api/updateDevelopmentSession.js +74 -0
- package/build/src/api/updateDevelopmentSession.js.map +1 -0
- package/build/src/api/user/UserSettings.js +71 -0
- package/build/src/api/user/UserSettings.js.map +1 -0
- package/build/src/api/user/actions.js +97 -0
- package/build/src/api/user/actions.js.map +1 -0
- package/build/src/api/user/otp.js +139 -0
- package/build/src/api/user/otp.js.map +1 -0
- package/build/src/api/user/user.js +114 -0
- package/build/src/api/user/user.js.map +1 -0
- package/build/src/config/configAsync.js +118 -0
- package/build/src/config/configAsync.js.map +1 -0
- package/build/src/config/index.js +85 -0
- package/build/src/config/index.js.map +1 -0
- package/build/src/install/checkPackages.js +74 -0
- package/build/src/install/checkPackages.js.map +1 -0
- package/build/src/install/index.js +76 -0
- package/build/src/install/index.js.map +1 -0
- package/build/src/install/installAsync.js +103 -0
- package/build/src/install/installAsync.js.map +1 -0
- package/build/src/install/resolveOptions.js +99 -0
- package/build/src/install/resolveOptions.js.map +1 -0
- package/build/src/install/utils/autoAddConfigPlugins.js +87 -0
- package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -0
- package/build/src/log.js +74 -0
- package/build/src/log.js.map +1 -0
- package/build/src/login/index.js +76 -0
- package/build/src/login/index.js.map +1 -0
- package/build/src/logout/index.js +63 -0
- package/build/src/logout/index.js.map +1 -0
- package/build/src/prebuild/clearNativeFolder.js +137 -0
- package/build/src/prebuild/clearNativeFolder.js.map +1 -0
- package/build/src/prebuild/configureProjectAsync.js +68 -0
- package/build/src/prebuild/configureProjectAsync.js.map +1 -0
- package/build/src/prebuild/copyTemplateFiles.js +124 -0
- package/build/src/prebuild/copyTemplateFiles.js.map +1 -0
- package/build/src/prebuild/ensureConfigAsync.js +86 -0
- package/build/src/prebuild/ensureConfigAsync.js.map +1 -0
- package/build/src/prebuild/index.js +101 -0
- package/build/src/prebuild/index.js.map +1 -0
- package/build/src/prebuild/prebuildAsync.js +112 -0
- package/build/src/prebuild/prebuildAsync.js.map +1 -0
- package/build/src/prebuild/resolveOptions.js +97 -0
- package/build/src/prebuild/resolveOptions.js.map +1 -0
- package/build/src/prebuild/resolveTemplate.js +157 -0
- package/build/src/prebuild/resolveTemplate.js.map +1 -0
- package/build/src/prebuild/updateFromTemplate.js +102 -0
- package/build/src/prebuild/updateFromTemplate.js.map +1 -0
- package/build/src/prebuild/updatePackageJson.js +236 -0
- package/build/src/prebuild/updatePackageJson.js.map +1 -0
- package/build/src/prebuild/writeMetroConfig.js +89 -0
- package/build/src/prebuild/writeMetroConfig.js.map +1 -0
- package/build/src/register/index.js +63 -0
- package/build/src/register/index.js.map +1 -0
- package/build/src/register/registerAsync.js +37 -0
- package/build/src/register/registerAsync.js.map +1 -0
- package/build/src/start/doctor/Prerequisite.js +47 -0
- package/build/src/start/doctor/Prerequisite.js.map +1 -0
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +68 -0
- package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -0
- package/build/src/start/doctor/apple/XcodePrerequisite.js +115 -0
- package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -0
- package/build/src/start/doctor/apple/XcrunPrerequisite.js +65 -0
- package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -0
- package/build/src/start/doctor/dependencies/bundledNativeModules.js +64 -0
- package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -0
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +131 -0
- package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -0
- package/build/src/start/doctor/dependencies/getMissingPackages.js +95 -0
- package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -0
- package/build/src/start/doctor/dependencies/getVersionedPackages.js +119 -0
- package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -0
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +147 -0
- package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -0
- package/build/src/start/doctor/ngrok/ExternalModule.js +164 -0
- package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -0
- package/build/src/start/doctor/ngrok/NgrokResolver.js +17 -0
- package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -0
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +142 -0
- package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -0
- package/build/src/start/doctor/typescript/updateTSConfig.js +92 -0
- package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -0
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +112 -0
- package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -0
- package/build/src/start/index.js +126 -0
- package/build/src/start/index.js.map +1 -0
- package/build/src/start/interface/KeyPressHandler.js +99 -0
- package/build/src/start/interface/KeyPressHandler.js.map +1 -0
- package/build/src/start/interface/commandsTable.js +175 -0
- package/build/src/start/interface/commandsTable.js.map +1 -0
- package/build/src/start/interface/interactiveActions.js +134 -0
- package/build/src/start/interface/interactiveActions.js.map +1 -0
- package/build/src/start/interface/startInterface.js +217 -0
- package/build/src/start/interface/startInterface.js.map +1 -0
- package/build/src/start/platforms/AppIdResolver.js +44 -0
- package/build/src/start/platforms/AppIdResolver.js.map +1 -0
- package/build/src/start/platforms/DeviceManager.js +43 -0
- package/build/src/start/platforms/DeviceManager.js.map +1 -0
- package/build/src/start/platforms/ExpoGoInstaller.js +108 -0
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
- package/build/src/start/platforms/PlatformManager.js +96 -0
- package/build/src/start/platforms/PlatformManager.js.map +1 -0
- package/build/src/start/platforms/android/ADBServer.js +127 -0
- package/build/src/start/platforms/android/ADBServer.js.map +1 -0
- package/build/src/start/platforms/android/AndroidAppIdResolver.js +40 -0
- package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -0
- package/build/src/start/platforms/android/AndroidDeviceManager.js +171 -0
- package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -0
- package/build/src/start/platforms/android/AndroidPlatformManager.js +35 -0
- package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -0
- package/build/src/start/platforms/android/activateWindow.js +78 -0
- package/build/src/start/platforms/android/activateWindow.js.map +1 -0
- package/build/src/start/platforms/android/adb.js +230 -0
- package/build/src/start/platforms/android/adb.js.map +1 -0
- package/build/src/start/platforms/android/adbReverse.js +84 -0
- package/build/src/start/platforms/android/adbReverse.js.map +1 -0
- package/build/src/start/platforms/android/emulator.js +118 -0
- package/build/src/start/platforms/android/emulator.js.map +1 -0
- package/build/src/start/platforms/android/getDevices.js +36 -0
- package/build/src/start/platforms/android/getDevices.js.map +1 -0
- package/build/src/start/platforms/android/promptAndroidDevice.js +60 -0
- package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -0
- package/build/src/start/platforms/ios/AppleAppIdResolver.js +46 -0
- package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -0
- package/build/src/start/platforms/ios/AppleDeviceManager.js +201 -0
- package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -0
- package/build/src/start/platforms/ios/ApplePlatformManager.js +31 -0
- package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -0
- package/build/src/start/platforms/ios/assertSystemRequirements.js +16 -0
- package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -0
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +85 -0
- package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -0
- package/build/src/start/platforms/ios/getBestSimulator.js +101 -0
- package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -0
- package/build/src/start/platforms/ios/promptAppleDevice.js +60 -0
- package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -0
- package/build/src/start/platforms/ios/simctl.js +229 -0
- package/build/src/start/platforms/ios/simctl.js.map +1 -0
- package/build/src/start/platforms/ios/xcrun.js +67 -0
- package/build/src/start/platforms/ios/xcrun.js.map +1 -0
- package/build/src/start/project/devices.js +77 -0
- package/build/src/start/project/devices.js.map +1 -0
- package/build/src/start/project/dotExpo.js +74 -0
- package/build/src/start/project/dotExpo.js.map +1 -0
- package/build/src/start/project/settings.js +13 -0
- package/build/src/start/project/settings.js.map +1 -0
- package/build/src/start/resolveOptions.js +156 -0
- package/build/src/start/resolveOptions.js.map +1 -0
- package/build/src/start/server/AsyncNgrok.js +173 -0
- package/build/src/start/server/AsyncNgrok.js.map +1 -0
- package/build/src/start/server/BundlerDevServer.js +252 -0
- package/build/src/start/server/BundlerDevServer.js.map +1 -0
- package/build/src/start/server/DevServerManager.js +142 -0
- package/build/src/start/server/DevServerManager.js.map +1 -0
- package/build/src/start/server/DevelopmentSession.js +104 -0
- package/build/src/start/server/DevelopmentSession.js.map +1 -0
- package/build/src/start/server/UrlCreator.js +158 -0
- package/build/src/start/server/UrlCreator.js.map +1 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js +100 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -0
- package/build/src/start/server/metro/MetroTerminalReporter.js +178 -0
- package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -0
- package/build/src/start/server/metro/TerminalReporter.js +87 -0
- package/build/src/start/server/metro/TerminalReporter.js.map +1 -0
- package/build/src/start/server/metro/TerminalReporter.types.js +6 -0
- package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -0
- package/build/src/start/server/metro/instantiateMetro.js +53 -0
- package/build/src/start/server/metro/instantiateMetro.js.map +1 -0
- package/build/src/start/server/metro/resolveFromProject.js +38 -0
- package/build/src/start/server/metro/resolveFromProject.js.map +1 -0
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js +145 -0
- package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +185 -0
- package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ExpoMiddleware.js +78 -0
- package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js +70 -0
- package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/ManifestMiddleware.js +177 -0
- package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +69 -0
- package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/createDevServerMiddleware.js +24 -0
- package/build/src/start/server/middleware/createDevServerMiddleware.js.map +1 -0
- package/build/src/start/server/middleware/resolveAssets.js +107 -0
- package/build/src/start/server/middleware/resolveAssets.js.map +1 -0
- package/build/src/start/server/middleware/resolveEntryPoint.js +37 -0
- package/build/src/start/server/middleware/resolveEntryPoint.js.map +1 -0
- package/build/src/start/server/middleware/resolvePlatform.js +32 -0
- package/build/src/start/server/middleware/resolvePlatform.js.map +1 -0
- package/build/src/start/server/middleware/server.types.js +6 -0
- package/build/src/start/server/middleware/server.types.js.map +1 -0
- package/build/src/start/server/openPlatforms.js +30 -0
- package/build/src/start/server/openPlatforms.js.map +1 -0
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js +303 -0
- package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -0
- package/build/src/start/server/webpack/formatWebpackMessages.js +94 -0
- package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -0
- package/build/src/start/server/webpack/resolveFromProject.js +43 -0
- package/build/src/start/server/webpack/resolveFromProject.js.map +1 -0
- package/build/src/start/server/webpack/tls.js +72 -0
- package/build/src/start/server/webpack/tls.js.map +1 -0
- package/build/src/start/startAsync.js +150 -0
- package/build/src/start/startAsync.js.map +1 -0
- package/build/src/utils/FileNotifier.js +71 -0
- package/build/src/utils/FileNotifier.js.map +1 -0
- package/build/src/utils/analytics/getDevClientProperties.js +41 -0
- package/build/src/utils/analytics/getDevClientProperties.js.map +1 -0
- package/build/src/utils/analytics/rudderstackClient.js +106 -0
- package/build/src/utils/analytics/rudderstackClient.js.map +1 -0
- package/build/src/utils/ansi.js +17 -0
- package/build/src/utils/ansi.js.map +1 -0
- package/build/src/utils/args.js +63 -0
- package/build/src/utils/args.js.map +1 -0
- package/build/src/utils/array.js +27 -0
- package/build/src/utils/array.js.map +1 -0
- package/build/src/utils/cocoapods.js +143 -0
- package/build/src/utils/cocoapods.js.map +1 -0
- package/build/src/utils/codesigning.js +283 -0
- package/build/src/utils/codesigning.js.map +1 -0
- package/build/src/utils/createFileTransform.js +89 -0
- package/build/src/utils/createFileTransform.js.map +1 -0
- package/build/src/utils/delay.js +39 -0
- package/build/src/utils/delay.js.map +1 -0
- package/build/src/utils/dir.js +34 -0
- package/build/src/utils/dir.js.map +1 -0
- package/build/src/utils/downloadAppAsync.js +71 -0
- package/build/src/utils/downloadAppAsync.js.map +1 -0
- package/build/src/utils/downloadExpoGoAsync.js +93 -0
- package/build/src/utils/downloadExpoGoAsync.js.map +1 -0
- package/build/src/utils/editor.js +60 -0
- package/build/src/utils/editor.js.map +1 -0
- package/build/src/utils/env.js +59 -0
- package/build/src/utils/env.js.map +1 -0
- package/build/src/utils/errors.js +69 -0
- package/build/src/utils/errors.js.map +1 -0
- package/build/src/utils/exit.js +90 -0
- package/build/src/utils/exit.js.map +1 -0
- package/build/src/utils/findUp.js +33 -0
- package/build/src/utils/findUp.js.map +1 -0
- package/build/src/utils/fn.js +32 -0
- package/build/src/utils/fn.js.map +1 -0
- package/build/src/utils/getOrPromptApplicationId.js +183 -0
- package/build/src/utils/getOrPromptApplicationId.js.map +1 -0
- package/build/src/utils/getRunningProcess.js +92 -0
- package/build/src/utils/getRunningProcess.js.map +1 -0
- package/build/src/utils/git.js +88 -0
- package/build/src/utils/git.js.map +1 -0
- package/build/src/utils/glob.js +65 -0
- package/build/src/utils/glob.js.map +1 -0
- package/build/src/utils/ip.js +16 -0
- package/build/src/utils/ip.js.map +1 -0
- package/build/src/utils/isModuleSymlinked.js +37 -0
- package/build/src/utils/isModuleSymlinked.js.map +1 -0
- package/build/src/utils/link.js +31 -0
- package/build/src/utils/link.js.map +1 -0
- package/build/src/utils/mergeGitIgnorePaths.js +112 -0
- package/build/src/utils/mergeGitIgnorePaths.js.map +1 -0
- package/build/src/utils/modifyConfigAsync.js +68 -0
- package/build/src/utils/modifyConfigAsync.js.map +1 -0
- package/build/src/utils/modifyConfigPlugins.js +51 -0
- package/build/src/utils/modifyConfigPlugins.js.map +1 -0
- package/build/src/utils/nodeModules.js +118 -0
- package/build/src/utils/nodeModules.js.map +1 -0
- package/build/src/utils/npm.js +144 -0
- package/build/src/utils/npm.js.map +1 -0
- package/build/src/utils/obj.js +45 -0
- package/build/src/utils/obj.js.map +1 -0
- package/build/src/utils/ora.js +102 -0
- package/build/src/utils/ora.js.map +1 -0
- package/build/src/utils/port.js +130 -0
- package/build/src/utils/port.js.map +1 -0
- package/build/src/utils/profile.js +63 -0
- package/build/src/utils/profile.js.map +1 -0
- package/build/src/utils/progress.js +15 -0
- package/build/src/utils/progress.js.map +1 -0
- package/build/src/utils/prompts.js +127 -0
- package/build/src/utils/prompts.js.map +1 -0
- package/build/src/utils/scheme.js +106 -0
- package/build/src/utils/scheme.js.map +1 -0
- package/build/src/utils/tar.js +59 -0
- package/build/src/utils/tar.js.map +1 -0
- package/build/src/utils/url.js +67 -0
- package/build/src/utils/url.js.map +1 -0
- package/build/src/utils/validateApplicationId.js +90 -0
- package/build/src/utils/validateApplicationId.js.map +1 -0
- package/build/src/whoami/index.js +63 -0
- package/build/src/whoami/index.js.map +1 -0
- package/build/src/whoami/whoamiAsync.js +44 -0
- package/build/src/whoami/whoamiAsync.js.map +1 -0
- package/package.json +128 -4
- package/static/loading-page/index.html +270 -0
- package/index.js +0 -0
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getXcodeVersionAsync = void 0;
|
|
6
|
+
var _childProcess = require("child_process");
|
|
7
|
+
var _semver = _interopRequireDefault(require("semver"));
|
|
8
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
9
|
+
var _errors = require("../../../utils/errors");
|
|
10
|
+
var _profile = require("../../../utils/profile");
|
|
11
|
+
var _prompts = require("../../../utils/prompts");
|
|
12
|
+
var _prerequisite = require("../Prerequisite");
|
|
13
|
+
function _interopRequireDefault(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function _interopRequireWildcard(obj) {
|
|
19
|
+
if (obj && obj.__esModule) {
|
|
20
|
+
return obj;
|
|
21
|
+
} else {
|
|
22
|
+
var newObj = {};
|
|
23
|
+
if (obj != null) {
|
|
24
|
+
for(var key in obj){
|
|
25
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
26
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
27
|
+
if (desc.get || desc.set) {
|
|
28
|
+
Object.defineProperty(newObj, key, desc);
|
|
29
|
+
} else {
|
|
30
|
+
newObj[key] = obj[key];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
newObj.default = obj;
|
|
36
|
+
return newObj;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Based on the RN docs (Aug 2020).
|
|
40
|
+
const MIN_XCODE_VERSION = 9.4;
|
|
41
|
+
const APP_STORE_ID = "497799835";
|
|
42
|
+
const SUGGESTED_XCODE_VERSION = `${MIN_XCODE_VERSION}.0`;
|
|
43
|
+
const promptToOpenAppStoreAsync = async (message)=>{
|
|
44
|
+
// This prompt serves no purpose accept informing the user what to do next, we could just open the App Store but it could be confusing if they don't know what's going on.
|
|
45
|
+
const confirm = await (0, _prompts).confirmAsync({
|
|
46
|
+
initial: true,
|
|
47
|
+
message
|
|
48
|
+
});
|
|
49
|
+
if (confirm) {
|
|
50
|
+
Log.log(`Going to the App Store, re-run Expo when Xcode has finished installing.`);
|
|
51
|
+
openAppStore(APP_STORE_ID);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
const getXcodeVersionAsync = ()=>{
|
|
55
|
+
try {
|
|
56
|
+
var ref;
|
|
57
|
+
const last = (ref = (0, _childProcess).execSync("xcodebuild -version", {
|
|
58
|
+
stdio: "pipe"
|
|
59
|
+
}).toString().match(/^Xcode (\d+\.\d+)/)) == null ? void 0 : ref[1];
|
|
60
|
+
// Convert to a semver string
|
|
61
|
+
if (last) {
|
|
62
|
+
const version = `${last}.0`;
|
|
63
|
+
if (!_semver.default.valid(version)) {
|
|
64
|
+
// Not sure why this would happen, if it does we should add a more confident error message.
|
|
65
|
+
Log.error(`Xcode version is in an unknown format: ${version}`);
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
return version;
|
|
69
|
+
}
|
|
70
|
+
// not sure what's going on
|
|
71
|
+
Log.error("Unable to check Xcode version. Command ran successfully but no version number was found.");
|
|
72
|
+
} catch {
|
|
73
|
+
// not installed
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
};
|
|
77
|
+
exports.getXcodeVersionAsync = getXcodeVersionAsync;
|
|
78
|
+
/**
|
|
79
|
+
* Open a link to the App Store. Just link in mobile apps, **never** redirect without prompting first.
|
|
80
|
+
*
|
|
81
|
+
* @param appId
|
|
82
|
+
*/ function openAppStore(appId) {
|
|
83
|
+
const link = getAppStoreLink(appId);
|
|
84
|
+
(0, _childProcess).execSync(`open ${link}`, {
|
|
85
|
+
stdio: "ignore"
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
function getAppStoreLink(appId) {
|
|
89
|
+
if (process.platform === "darwin") {
|
|
90
|
+
// TODO: Is there ever a case where the macappstore isn't available on mac?
|
|
91
|
+
return `macappstore://itunes.apple.com/app/id${appId}`;
|
|
92
|
+
}
|
|
93
|
+
return `https://apps.apple.com/us/app/id${appId}`;
|
|
94
|
+
}
|
|
95
|
+
class XcodePrerequisite extends _prerequisite.Prerequisite {
|
|
96
|
+
static instance = new XcodePrerequisite();
|
|
97
|
+
/**
|
|
98
|
+
* Ensure Xcode is installed and recent enough to be used with Expo.
|
|
99
|
+
*/ async assertImplementation() {
|
|
100
|
+
const version = (0, _profile).profile(getXcodeVersionAsync)();
|
|
101
|
+
if (!version) {
|
|
102
|
+
// Almost certainly Xcode isn't installed.
|
|
103
|
+
await promptToOpenAppStoreAsync(`Xcode needs to be installed (don't worry, you won't have to use it), would you like to continue to the App Store?`);
|
|
104
|
+
throw new _errors.AbortCommandError();
|
|
105
|
+
}
|
|
106
|
+
if (_semver.default.lt(version, SUGGESTED_XCODE_VERSION)) {
|
|
107
|
+
// Xcode version is too old.
|
|
108
|
+
await promptToOpenAppStoreAsync(`Xcode (${version}) needs to be updated to at least version ${MIN_XCODE_VERSION}, would you like to continue to the App Store?`);
|
|
109
|
+
throw new _errors.AbortCommandError();
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
exports.XcodePrerequisite = XcodePrerequisite;
|
|
114
|
+
|
|
115
|
+
//# sourceMappingURL=XcodePrerequisite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/apple/XcodePrerequisite.ts"],"sourcesContent":["import { execSync } from 'child_process';\nimport semver from 'semver';\n\nimport * as Log from '../../../log';\nimport { AbortCommandError } from '../../../utils/errors';\nimport { profile } from '../../../utils/profile';\nimport { confirmAsync } from '../../../utils/prompts';\nimport { Prerequisite } from '../Prerequisite';\n\n// Based on the RN docs (Aug 2020).\nconst MIN_XCODE_VERSION = 9.4;\nconst APP_STORE_ID = '497799835';\n\nconst SUGGESTED_XCODE_VERSION = `${MIN_XCODE_VERSION}.0`;\n\nconst promptToOpenAppStoreAsync = async (message: string) => {\n // This prompt serves no purpose accept informing the user what to do next, we could just open the App Store but it could be confusing if they don't know what's going on.\n const confirm = await confirmAsync({ initial: true, message });\n if (confirm) {\n Log.log(`Going to the App Store, re-run Expo when Xcode has finished installing.`);\n openAppStore(APP_STORE_ID);\n }\n};\n\n/** Exposed for testing, use `getXcodeVersion` */\nexport const getXcodeVersionAsync = (): string | null | false => {\n try {\n const last = execSync('xcodebuild -version', { stdio: 'pipe' })\n .toString()\n .match(/^Xcode (\\d+\\.\\d+)/)?.[1];\n // Convert to a semver string\n if (last) {\n const version = `${last}.0`;\n\n if (!semver.valid(version)) {\n // Not sure why this would happen, if it does we should add a more confident error message.\n Log.error(`Xcode version is in an unknown format: ${version}`);\n return false;\n }\n\n return version;\n }\n // not sure what's going on\n Log.error(\n 'Unable to check Xcode version. Command ran successfully but no version number was found.'\n );\n } catch {\n // not installed\n }\n return null;\n};\n\n/**\n * Open a link to the App Store. Just link in mobile apps, **never** redirect without prompting first.\n *\n * @param appId\n */\nfunction openAppStore(appId: string) {\n const link = getAppStoreLink(appId);\n execSync(`open ${link}`, { stdio: 'ignore' });\n}\n\nfunction getAppStoreLink(appId: string): string {\n if (process.platform === 'darwin') {\n // TODO: Is there ever a case where the macappstore isn't available on mac?\n return `macappstore://itunes.apple.com/app/id${appId}`;\n }\n return `https://apps.apple.com/us/app/id${appId}`;\n}\n\nexport class XcodePrerequisite extends Prerequisite {\n static instance = new XcodePrerequisite();\n\n /**\n * Ensure Xcode is installed and recent enough to be used with Expo.\n */\n async assertImplementation(): Promise<void> {\n const version = profile(getXcodeVersionAsync)();\n if (!version) {\n // Almost certainly Xcode isn't installed.\n await promptToOpenAppStoreAsync(\n `Xcode needs to be installed (don't worry, you won't have to use it), would you like to continue to the App Store?`\n );\n throw new AbortCommandError();\n }\n\n if (semver.lt(version, SUGGESTED_XCODE_VERSION)) {\n // Xcode version is too old.\n await promptToOpenAppStoreAsync(\n `Xcode (${version}) needs to be updated to at least version ${MIN_XCODE_VERSION}, would you like to continue to the App Store?`\n );\n throw new AbortCommandError();\n }\n }\n}\n"],"names":["Log","MIN_XCODE_VERSION","APP_STORE_ID","SUGGESTED_XCODE_VERSION","promptToOpenAppStoreAsync","message","confirm","confirmAsync","initial","log","openAppStore","getXcodeVersionAsync","execSync","last","stdio","toString","match","version","semver","valid","error","appId","link","getAppStoreLink","process","platform","XcodePrerequisite","Prerequisite","instance","assertImplementation","profile","AbortCommandError","lt"],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
|
|
6
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
7
|
+
var _childProcess = require("child_process");
|
|
8
|
+
var _delay = require("../../../utils/delay");
|
|
9
|
+
var _errors = require("../../../utils/errors");
|
|
10
|
+
var _prompts = require("../../../utils/prompts");
|
|
11
|
+
var _prerequisite = require("../Prerequisite");
|
|
12
|
+
function _interopRequireDefault(obj) {
|
|
13
|
+
return obj && obj.__esModule ? obj : {
|
|
14
|
+
default: obj
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
async function isXcrunInstalledAsync() {
|
|
18
|
+
try {
|
|
19
|
+
(0, _childProcess).execSync("xcrun --version", {
|
|
20
|
+
stdio: "ignore"
|
|
21
|
+
});
|
|
22
|
+
return true;
|
|
23
|
+
} catch {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
class XcrunPrerequisite extends _prerequisite.Prerequisite {
|
|
28
|
+
static instance = new XcrunPrerequisite();
|
|
29
|
+
/**
|
|
30
|
+
* Ensure Xcode CLI is installed.
|
|
31
|
+
*/ async assertImplementation() {
|
|
32
|
+
if (await isXcrunInstalledAsync()) {
|
|
33
|
+
// Run this second to ensure the Xcode version check is run.
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
async function pendingAsync() {
|
|
37
|
+
if (!await isXcrunInstalledAsync()) {
|
|
38
|
+
await (0, _delay).delayAsync(100);
|
|
39
|
+
return await pendingAsync();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// This prompt serves no purpose accept informing the user what to do next, we could just open the App Store but it could be confusing if they don't know what's going on.
|
|
43
|
+
const confirm = await (0, _prompts).confirmAsync({
|
|
44
|
+
initial: true,
|
|
45
|
+
message: _chalk.default`Xcode {bold Command Line Tools} needs to be installed (requires {bold sudo}), continue?`
|
|
46
|
+
});
|
|
47
|
+
if (confirm) {
|
|
48
|
+
try {
|
|
49
|
+
await (0, _spawnAsync).default("sudo", [
|
|
50
|
+
"xcode-select",
|
|
51
|
+
"--install"
|
|
52
|
+
]);
|
|
53
|
+
// Most likely the user will cancel the process, but if they don't this will continue checking until the CLI is available.
|
|
54
|
+
return await pendingAsync();
|
|
55
|
+
} catch {
|
|
56
|
+
// TODO: Figure out why this might get called (cancel early, network issues, server problems)
|
|
57
|
+
// TODO: Handle me
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
throw new _errors.AbortCommandError();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.XcrunPrerequisite = XcrunPrerequisite;
|
|
64
|
+
|
|
65
|
+
//# sourceMappingURL=XcrunPrerequisite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/apple/XcrunPrerequisite.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport chalk from 'chalk';\nimport { execSync } from 'child_process';\n\nimport { delayAsync } from '../../../utils/delay';\nimport { AbortCommandError } from '../../../utils/errors';\nimport { confirmAsync } from '../../../utils/prompts';\nimport { Prerequisite } from '../Prerequisite';\n\nasync function isXcrunInstalledAsync() {\n try {\n execSync('xcrun --version', { stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n\nexport class XcrunPrerequisite extends Prerequisite {\n static instance = new XcrunPrerequisite();\n\n /**\n * Ensure Xcode CLI is installed.\n */\n async assertImplementation(): Promise<void> {\n if (await isXcrunInstalledAsync()) {\n // Run this second to ensure the Xcode version check is run.\n return;\n }\n\n async function pendingAsync(): Promise<void> {\n if (!(await isXcrunInstalledAsync())) {\n await delayAsync(100);\n return await pendingAsync();\n }\n }\n\n // This prompt serves no purpose accept informing the user what to do next, we could just open the App Store but it could be confusing if they don't know what's going on.\n const confirm = await confirmAsync({\n initial: true,\n message: chalk`Xcode {bold Command Line Tools} needs to be installed (requires {bold sudo}), continue?`,\n });\n\n if (confirm) {\n try {\n await spawnAsync('sudo', [\n 'xcode-select',\n '--install',\n // TODO: Is there any harm in skipping this?\n // '--switch', '/Applications/Xcode.app'\n ]);\n // Most likely the user will cancel the process, but if they don't this will continue checking until the CLI is available.\n return await pendingAsync();\n } catch {\n // TODO: Figure out why this might get called (cancel early, network issues, server problems)\n // TODO: Handle me\n }\n }\n\n throw new AbortCommandError();\n }\n}\n"],"names":["isXcrunInstalledAsync","execSync","stdio","XcrunPrerequisite","Prerequisite","instance","assertImplementation","pendingAsync","delayAsync","confirm","confirmAsync","initial","message","chalk","spawnAsync","AbortCommandError"],"mappings":"AAAA;;;;AAAuB,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AACxB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACA,IAAA,aAAe,WAAf,eAAe,CAAA;AAEb,IAAA,MAAsB,WAAtB,sBAAsB,CAAA;AACf,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AAC5B,IAAA,QAAwB,WAAxB,wBAAwB,CAAA;AACxB,IAAA,aAAiB,WAAjB,iBAAiB,CAAA;;;;;;AAE9C,eAAeA,qBAAqB,GAAG;IACrC,IAAI;QACFC,CAAAA,GAAAA,aAAQ,AAAwC,CAAA,SAAxC,CAAC,iBAAiB,EAAE;YAAEC,KAAK,EAAE,QAAQ;SAAE,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC;KACb,CAAC,OAAM;QACN,OAAO,KAAK,CAAC;KACd;CACF;AAEM,MAAMC,iBAAiB,SAASC,aAAY,aAAA;IACjD,OAAOC,QAAQ,GAAG,IAAIF,iBAAiB,EAAE,CAAC;IAE1C;;KAEG,CACH,MAAMG,oBAAoB,GAAkB;QAC1C,IAAI,MAAMN,qBAAqB,EAAE,EAAE;YACjC,4DAA4D;YAC5D,OAAO;SACR;QAED,eAAeO,YAAY,GAAkB;YAC3C,IAAI,CAAE,MAAMP,qBAAqB,EAAE,AAAC,EAAE;gBACpC,MAAMQ,CAAAA,GAAAA,MAAU,AAAK,CAAA,WAAL,CAAC,GAAG,CAAC,CAAC;gBACtB,OAAO,MAAMD,YAAY,EAAE,CAAC;aAC7B;SACF;QAED,0KAA0K;QAC1K,MAAME,OAAO,GAAG,MAAMC,CAAAA,GAAAA,QAAY,AAGhC,CAAA,aAHgC,CAAC;YACjCC,OAAO,EAAE,IAAI;YACbC,OAAO,EAAEC,MAAK,QAAA,CAAC,uFAAuF,CAAC;SACxG,CAAC,AAAC;QAEH,IAAIJ,OAAO,EAAE;YACX,IAAI;gBACF,MAAMK,CAAAA,GAAAA,WAAU,AAKd,CAAA,QALc,CAAC,MAAM,EAAE;oBACvB,cAAc;oBACd,WAAW;iBAGZ,CAAC,CAAC;gBACH,0HAA0H;gBAC1H,OAAO,MAAMP,YAAY,EAAE,CAAC;aAC7B,CAAC,OAAM;YACN,6FAA6F;YAC7F,kBAAkB;aACnB;SACF;QAED,MAAM,IAAIQ,OAAiB,kBAAA,EAAE,CAAC;KAC/B;CACF;QA3CYZ,iBAAiB,GAAjBA,iBAAiB"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getVersionedNativeModulesAsync = getVersionedNativeModulesAsync;
|
|
6
|
+
var _jsonFile = _interopRequireDefault(require("@expo/json-file"));
|
|
7
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
8
|
+
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
9
|
+
var _getNativeModuleVersions = require("../../../api/getNativeModuleVersions");
|
|
10
|
+
var _settings = require("../../../api/settings");
|
|
11
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
12
|
+
var _errors = require("../../../utils/errors");
|
|
13
|
+
function _interopRequireDefault(obj) {
|
|
14
|
+
return obj && obj.__esModule ? obj : {
|
|
15
|
+
default: obj
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
function _interopRequireWildcard(obj) {
|
|
19
|
+
if (obj && obj.__esModule) {
|
|
20
|
+
return obj;
|
|
21
|
+
} else {
|
|
22
|
+
var newObj = {};
|
|
23
|
+
if (obj != null) {
|
|
24
|
+
for(var key in obj){
|
|
25
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
26
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
27
|
+
if (desc.get || desc.set) {
|
|
28
|
+
Object.defineProperty(newObj, key, desc);
|
|
29
|
+
} else {
|
|
30
|
+
newObj[key] = obj[key];
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
newObj.default = obj;
|
|
36
|
+
return newObj;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function getVersionedNativeModulesAsync(projectRoot, sdkVersion) {
|
|
40
|
+
if (sdkVersion !== "UNVERSIONED" && !_settings.APISettings.isOffline) {
|
|
41
|
+
try {
|
|
42
|
+
Log.debug("Fetching bundled native modules from the server...");
|
|
43
|
+
return await (0, _getNativeModuleVersions).getNativeModuleVersionsAsync(sdkVersion);
|
|
44
|
+
} catch {
|
|
45
|
+
Log.warn(_chalk.default`Unable to reach Expo servers. Falling back to using the cached dependency map ({bold bundledNativeModules.json}) from the package "{bold expo}" installed in your project.`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
Log.debug("Fetching bundled native modules from the local JSON file...");
|
|
49
|
+
return await getBundledNativeModulesAsync(projectRoot);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Get the legacy static `bundledNativeModules.json` file
|
|
53
|
+
* that's shipped with the version of `expo` that the project has installed.
|
|
54
|
+
*/ async function getBundledNativeModulesAsync(projectRoot) {
|
|
55
|
+
// TODO: Revisit now that this code is in the `expo` package.
|
|
56
|
+
const bundledNativeModulesPath = _resolveFrom.default.silent(projectRoot, "expo/bundledNativeModules.json");
|
|
57
|
+
if (!bundledNativeModulesPath) {
|
|
58
|
+
Log.log();
|
|
59
|
+
throw new _errors.CommandError(_chalk.default`The dependency map {bold expo/bundledNativeModules.json} cannot be found, please ensure you have the package "{bold expo}" installed in your project.`);
|
|
60
|
+
}
|
|
61
|
+
return await _jsonFile.default.readAsync(bundledNativeModulesPath);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
//# sourceMappingURL=bundledNativeModules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/bundledNativeModules.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport resolveFrom from 'resolve-from';\n\nimport { getNativeModuleVersionsAsync } from '../../../api/getNativeModuleVersions';\nimport { APISettings } from '../../../api/settings';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\n\nexport type BundledNativeModules = Record<string, string>;\n\n/**\n * Gets the bundledNativeModules.json for a given SDK version:\n * - Tries to fetch the data from the /sdks/:sdkVersion/native-modules API endpoint.\n * - If the data is missing on the server (it can happen for SDKs that are yet fully released)\n * or there's a downtime, reads the local .json file from the \"expo\" package.\n * - For UNVERSIONED, returns the local .json file contents.\n */\nexport async function getVersionedNativeModulesAsync(\n projectRoot: string,\n sdkVersion: string\n): Promise<BundledNativeModules> {\n if (sdkVersion !== 'UNVERSIONED' && !APISettings.isOffline) {\n try {\n Log.debug('Fetching bundled native modules from the server...');\n return await getNativeModuleVersionsAsync(sdkVersion);\n } catch {\n Log.warn(\n chalk`Unable to reach Expo servers. Falling back to using the cached dependency map ({bold bundledNativeModules.json}) from the package \"{bold expo}\" installed in your project.`\n );\n }\n }\n\n Log.debug('Fetching bundled native modules from the local JSON file...');\n return await getBundledNativeModulesAsync(projectRoot);\n}\n\n/**\n * Get the legacy static `bundledNativeModules.json` file\n * that's shipped with the version of `expo` that the project has installed.\n */\nasync function getBundledNativeModulesAsync(projectRoot: string): Promise<BundledNativeModules> {\n // TODO: Revisit now that this code is in the `expo` package.\n const bundledNativeModulesPath = resolveFrom.silent(\n projectRoot,\n 'expo/bundledNativeModules.json'\n );\n if (!bundledNativeModulesPath) {\n Log.log();\n throw new CommandError(\n chalk`The dependency map {bold expo/bundledNativeModules.json} cannot be found, please ensure you have the package \"{bold expo}\" installed in your project.`\n );\n }\n return await JsonFile.readAsync<BundledNativeModules>(bundledNativeModulesPath);\n}\n"],"names":["getVersionedNativeModulesAsync","Log","projectRoot","sdkVersion","APISettings","isOffline","debug","getNativeModuleVersionsAsync","warn","chalk","getBundledNativeModulesAsync","bundledNativeModulesPath","resolveFrom","silent","log","CommandError","JsonFile","readAsync"],"mappings":"AAAA;;;;QAkBsBA,8BAA8B,GAA9BA,8BAA8B;AAlB/B,IAAA,SAAiB,kCAAjB,iBAAiB,EAAA;AACpB,IAAA,MAAO,kCAAP,OAAO,EAAA;AACD,IAAA,YAAc,kCAAd,cAAc,EAAA;AAEO,IAAA,wBAAsC,WAAtC,sCAAsC,CAAA;AACvD,IAAA,SAAuB,WAAvB,uBAAuB,CAAA;AACvCC,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACc,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAW7C,eAAeD,8BAA8B,CAClDE,WAAmB,EACnBC,UAAkB,EACa;IAC/B,IAAIA,UAAU,KAAK,aAAa,IAAI,CAACC,SAAW,YAAA,CAACC,SAAS,EAAE;QAC1D,IAAI;YACFJ,GAAG,CAACK,KAAK,CAAC,oDAAoD,CAAC,CAAC;YAChE,OAAO,MAAMC,CAAAA,GAAAA,wBAA4B,AAAY,CAAA,6BAAZ,CAACJ,UAAU,CAAC,CAAC;SACvD,CAAC,OAAM;YACNF,GAAG,CAACO,IAAI,CACNC,MAAK,QAAA,CAAC,0KAA0K,CAAC,CAClL,CAAC;SACH;KACF;IAEDR,GAAG,CAACK,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACzE,OAAO,MAAMI,4BAA4B,CAACR,WAAW,CAAC,CAAC;CACxD;AAED;;;GAGG,CACH,eAAeQ,4BAA4B,CAACR,WAAmB,EAAiC;IAC9F,6DAA6D;IAC7D,MAAMS,wBAAwB,GAAGC,YAAW,QAAA,CAACC,MAAM,CACjDX,WAAW,EACX,gCAAgC,CACjC,AAAC;IACF,IAAI,CAACS,wBAAwB,EAAE;QAC7BV,GAAG,CAACa,GAAG,EAAE,CAAC;QACV,MAAM,IAAIC,OAAY,aAAA,CACpBN,MAAK,QAAA,CAAC,qJAAqJ,CAAC,CAC7J,CAAC;KACH;IACD,OAAO,MAAMO,SAAQ,QAAA,CAACC,SAAS,CAAuBN,wBAAwB,CAAC,CAAC;CACjF"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.ensureDependenciesAsync = ensureDependenciesAsync;
|
|
6
|
+
exports.createInstallCommand = createInstallCommand;
|
|
7
|
+
var _config = require("@expo/config");
|
|
8
|
+
var PackageManager = _interopRequireWildcard(require("@expo/package-manager"));
|
|
9
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
10
|
+
var _wrapAnsi = _interopRequireDefault(require("wrap-ansi"));
|
|
11
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
12
|
+
var _env = require("../../../utils/env");
|
|
13
|
+
var _errors = require("../../../utils/errors");
|
|
14
|
+
var _ora = require("../../../utils/ora");
|
|
15
|
+
var _prompts = require("../../../utils/prompts");
|
|
16
|
+
var _getMissingPackages = require("./getMissingPackages");
|
|
17
|
+
function _interopRequireDefault(obj) {
|
|
18
|
+
return obj && obj.__esModule ? obj : {
|
|
19
|
+
default: obj
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
function _interopRequireWildcard(obj) {
|
|
23
|
+
if (obj && obj.__esModule) {
|
|
24
|
+
return obj;
|
|
25
|
+
} else {
|
|
26
|
+
var newObj = {};
|
|
27
|
+
if (obj != null) {
|
|
28
|
+
for(var key in obj){
|
|
29
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
30
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
31
|
+
if (desc.get || desc.set) {
|
|
32
|
+
Object.defineProperty(newObj, key, desc);
|
|
33
|
+
} else {
|
|
34
|
+
newObj[key] = obj[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
newObj.default = obj;
|
|
40
|
+
return newObj;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
async function ensureDependenciesAsync(projectRoot, { exp =(0, _config).getConfig(projectRoot).exp , requiredPackages , warningMessage , installMessage , // Don't prompt in CI
|
|
44
|
+
skipPrompt =_env.env.CI }) {
|
|
45
|
+
const { missing } = await (0, _getMissingPackages).getMissingPackagesAsync(projectRoot, {
|
|
46
|
+
sdkVersion: exp.sdkVersion,
|
|
47
|
+
requiredPackages
|
|
48
|
+
});
|
|
49
|
+
if (!missing.length) {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
// Prompt to install or bail out...
|
|
53
|
+
const readableMissingPackages = missing.map(({ pkg , version })=>version ? [
|
|
54
|
+
pkg,
|
|
55
|
+
version
|
|
56
|
+
].join("@") : pkg
|
|
57
|
+
).join(", ");
|
|
58
|
+
const isYarn = PackageManager.isUsingYarn(projectRoot);
|
|
59
|
+
let title = installMessage;
|
|
60
|
+
if (skipPrompt) {
|
|
61
|
+
title += "\n\n";
|
|
62
|
+
} else {
|
|
63
|
+
const confirm = await (0, _prompts).confirmAsync({
|
|
64
|
+
message: wrapForTerminal(title + ` Would you like to install ${_chalk.default.cyan(readableMissingPackages)}?`),
|
|
65
|
+
initial: true
|
|
66
|
+
});
|
|
67
|
+
if (confirm) {
|
|
68
|
+
// Format with version if available.
|
|
69
|
+
const packages = missing.map(({ pkg , version })=>version ? [
|
|
70
|
+
pkg,
|
|
71
|
+
version
|
|
72
|
+
].join("@") : pkg
|
|
73
|
+
);
|
|
74
|
+
// Install packages with versions
|
|
75
|
+
await installPackagesAsync(projectRoot, {
|
|
76
|
+
isYarn,
|
|
77
|
+
packages
|
|
78
|
+
});
|
|
79
|
+
// Try again but skip prompting twice, simply fail if the packages didn't install correctly.
|
|
80
|
+
return await ensureDependenciesAsync(projectRoot, {
|
|
81
|
+
skipPrompt: true,
|
|
82
|
+
installMessage,
|
|
83
|
+
warningMessage,
|
|
84
|
+
requiredPackages
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// Reset the title so it doesn't print twice in interactive mode.
|
|
88
|
+
title = "";
|
|
89
|
+
}
|
|
90
|
+
const installCommand = createInstallCommand({
|
|
91
|
+
isYarn,
|
|
92
|
+
packages: missing
|
|
93
|
+
});
|
|
94
|
+
const disableMessage = warningMessage;
|
|
95
|
+
const solution = `Please install ${_chalk.default.bold(readableMissingPackages)} by running:\n\n ${_chalk.default.reset.bold(installCommand)}\n\n`;
|
|
96
|
+
// This prevents users from starting a misconfigured JS or TS project by default.
|
|
97
|
+
throw new _errors.CommandError(wrapForTerminal(title + solution + disableMessage + "\n"));
|
|
98
|
+
}
|
|
99
|
+
/** Wrap long messages to fit smaller terminals. */ function wrapForTerminal(message) {
|
|
100
|
+
return (0, _wrapAnsi).default(message, process.stdout.columns || 80);
|
|
101
|
+
}
|
|
102
|
+
function createInstallCommand({ isYarn , packages }) {
|
|
103
|
+
return (isYarn ? "yarn add" : "npm install") + " " + packages.map(({ pkg , version })=>{
|
|
104
|
+
if (version) {
|
|
105
|
+
return [
|
|
106
|
+
pkg,
|
|
107
|
+
version
|
|
108
|
+
].join("@");
|
|
109
|
+
}
|
|
110
|
+
return pkg;
|
|
111
|
+
}).join(" ");
|
|
112
|
+
}
|
|
113
|
+
/** Install packages in the project. */ async function installPackagesAsync(projectRoot, { isYarn , packages }) {
|
|
114
|
+
const packageManager = PackageManager.createForProject(projectRoot, {
|
|
115
|
+
yarn: isYarn,
|
|
116
|
+
log: Log.log,
|
|
117
|
+
silent: !_env.env.EXPO_DEBUG
|
|
118
|
+
});
|
|
119
|
+
const packagesStr = _chalk.default.bold(packages.join(", "));
|
|
120
|
+
Log.log();
|
|
121
|
+
const installingPackageStep = (0, _ora).logNewSection(`Installing ${packagesStr}`);
|
|
122
|
+
try {
|
|
123
|
+
await packageManager.addAsync(...packages);
|
|
124
|
+
} catch (e) {
|
|
125
|
+
installingPackageStep.fail(`Failed to install ${packagesStr} with error: ${e.message}`);
|
|
126
|
+
throw e;
|
|
127
|
+
}
|
|
128
|
+
installingPackageStep.succeed(`Installed ${packagesStr}`);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
//# sourceMappingURL=ensureDependenciesAsync.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/ensureDependenciesAsync.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport * as PackageManager from '@expo/package-manager';\nimport chalk from 'chalk';\nimport wrapAnsi from 'wrap-ansi';\n\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { logNewSection } from '../../../utils/ora';\nimport { confirmAsync } from '../../../utils/prompts';\nimport { getMissingPackagesAsync, ResolvedPackage } from './getMissingPackages';\n\nexport async function ensureDependenciesAsync(\n projectRoot: string,\n {\n exp = getConfig(projectRoot).exp,\n requiredPackages,\n warningMessage,\n installMessage,\n // Don't prompt in CI\n skipPrompt = env.CI,\n }: {\n exp?: ExpoConfig;\n installMessage: string;\n warningMessage: string;\n requiredPackages: ResolvedPackage[];\n skipPrompt?: boolean;\n }\n): Promise<boolean> {\n const { missing } = await getMissingPackagesAsync(projectRoot, {\n sdkVersion: exp.sdkVersion,\n requiredPackages,\n });\n if (!missing.length) {\n return true;\n }\n\n // Prompt to install or bail out...\n const readableMissingPackages = missing\n .map(({ pkg, version }) => (version ? [pkg, version].join('@') : pkg))\n .join(', ');\n\n const isYarn = PackageManager.isUsingYarn(projectRoot);\n\n let title = installMessage;\n\n if (skipPrompt) {\n title += '\\n\\n';\n } else {\n const confirm = await confirmAsync({\n message: wrapForTerminal(\n title + ` Would you like to install ${chalk.cyan(readableMissingPackages)}?`\n ),\n initial: true,\n });\n\n if (confirm) {\n // Format with version if available.\n const packages = missing.map(({ pkg, version }) =>\n version ? [pkg, version].join('@') : pkg\n );\n // Install packages with versions\n await installPackagesAsync(projectRoot, {\n isYarn,\n packages,\n });\n // Try again but skip prompting twice, simply fail if the packages didn't install correctly.\n return await ensureDependenciesAsync(projectRoot, {\n skipPrompt: true,\n installMessage,\n warningMessage,\n requiredPackages,\n });\n }\n\n // Reset the title so it doesn't print twice in interactive mode.\n title = '';\n }\n\n const installCommand = createInstallCommand({ isYarn, packages: missing });\n\n const disableMessage = warningMessage;\n\n const solution = `Please install ${chalk.bold(\n readableMissingPackages\n )} by running:\\n\\n ${chalk.reset.bold(installCommand)}\\n\\n`;\n\n // This prevents users from starting a misconfigured JS or TS project by default.\n throw new CommandError(wrapForTerminal(title + solution + disableMessage + '\\n'));\n}\n\n/** Wrap long messages to fit smaller terminals. */\nfunction wrapForTerminal(message: string): string {\n return wrapAnsi(message, process.stdout.columns || 80);\n}\n\n/** Create the bash install command from a given set of packages and settings. */\nexport function createInstallCommand({\n isYarn,\n packages,\n}: {\n isYarn: boolean;\n packages: {\n file: string;\n pkg: string;\n version?: string | undefined;\n }[];\n}) {\n return (\n (isYarn ? 'yarn add' : 'npm install') +\n ' ' +\n packages\n .map(({ pkg, version }) => {\n if (version) {\n return [pkg, version].join('@');\n }\n return pkg;\n })\n .join(' ')\n );\n}\n\n/** Install packages in the project. */\nasync function installPackagesAsync(\n projectRoot: string,\n { isYarn, packages }: { isYarn: boolean; packages: string[] }\n) {\n const packageManager = PackageManager.createForProject(projectRoot, {\n yarn: isYarn,\n log: Log.log,\n silent: !env.EXPO_DEBUG,\n });\n\n const packagesStr = chalk.bold(packages.join(', '));\n Log.log();\n const installingPackageStep = logNewSection(`Installing ${packagesStr}`);\n try {\n await packageManager.addAsync(...packages);\n } catch (e: any) {\n installingPackageStep.fail(`Failed to install ${packagesStr} with error: ${e.message}`);\n throw e;\n }\n installingPackageStep.succeed(`Installed ${packagesStr}`);\n}\n"],"names":["ensureDependenciesAsync","createInstallCommand","PackageManager","Log","projectRoot","exp","getConfig","requiredPackages","warningMessage","installMessage","skipPrompt","env","CI","missing","getMissingPackagesAsync","sdkVersion","length","readableMissingPackages","map","pkg","version","join","isYarn","isUsingYarn","title","confirm","confirmAsync","message","wrapForTerminal","chalk","cyan","initial","packages","installPackagesAsync","installCommand","disableMessage","solution","bold","reset","CommandError","wrapAnsi","process","stdout","columns","packageManager","createForProject","yarn","log","silent","EXPO_DEBUG","packagesStr","installingPackageStep","logNewSection","addAsync","e","fail","succeed"],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.collectMissingPackages = collectMissingPackages;
|
|
6
|
+
exports.versionSatisfiesRequiredPackage = versionSatisfiesRequiredPackage;
|
|
7
|
+
exports.getMissingPackagesAsync = getMissingPackagesAsync;
|
|
8
|
+
exports.mutatePackagesWithKnownVersionsAsync = mutatePackagesWithKnownVersionsAsync;
|
|
9
|
+
var _jsonFile = _interopRequireDefault(require("@expo/json-file"));
|
|
10
|
+
var _resolveFrom = _interopRequireDefault(require("resolve-from"));
|
|
11
|
+
var _semver = _interopRequireDefault(require("semver"));
|
|
12
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
13
|
+
var _getVersionedPackages = require("./getVersionedPackages");
|
|
14
|
+
function _interopRequireDefault(obj) {
|
|
15
|
+
return obj && obj.__esModule ? obj : {
|
|
16
|
+
default: obj
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function _interopRequireWildcard(obj) {
|
|
20
|
+
if (obj && obj.__esModule) {
|
|
21
|
+
return obj;
|
|
22
|
+
} else {
|
|
23
|
+
var newObj = {};
|
|
24
|
+
if (obj != null) {
|
|
25
|
+
for(var key in obj){
|
|
26
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
27
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
28
|
+
if (desc.get || desc.set) {
|
|
29
|
+
Object.defineProperty(newObj, key, desc);
|
|
30
|
+
} else {
|
|
31
|
+
newObj[key] = obj[key];
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
newObj.default = obj;
|
|
37
|
+
return newObj;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function collectMissingPackages(projectRoot, requiredPackages) {
|
|
41
|
+
const resolutions = {};
|
|
42
|
+
const missingPackages = requiredPackages.filter((p)=>{
|
|
43
|
+
const resolved = _resolveFrom.default.silent(projectRoot, p.file);
|
|
44
|
+
if (!resolved || !versionSatisfiesRequiredPackage(resolved, p)) {
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
resolutions[p.pkg] = resolved;
|
|
48
|
+
return false;
|
|
49
|
+
});
|
|
50
|
+
return {
|
|
51
|
+
missing: missingPackages,
|
|
52
|
+
resolutions
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function versionSatisfiesRequiredPackage(packageJsonFilePath, resolvedPackage) {
|
|
56
|
+
// If the version is specified, check that it satisfies the installed version.
|
|
57
|
+
if (!resolvedPackage.version) {
|
|
58
|
+
Log.debug(`Required package "${resolvedPackage.pkg}" found (no version constraint specified).`);
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
const pkgJson = _jsonFile.default.read(packageJsonFilePath);
|
|
62
|
+
if (// package.json has version.
|
|
63
|
+
typeof pkgJson.version === "string" && // semver satisfaction.
|
|
64
|
+
_semver.default.satisfies(pkgJson.version, resolvedPackage.version)) {
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
Log.debug(`Installed package "${resolvedPackage.pkg}" does not satisfy version constraint "${resolvedPackage.version}" (version: "${pkgJson.version}")`);
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
async function getMissingPackagesAsync(projectRoot, { sdkVersion , requiredPackages }) {
|
|
71
|
+
const results = collectMissingPackages(projectRoot, requiredPackages);
|
|
72
|
+
if (!results.missing.length) {
|
|
73
|
+
return results;
|
|
74
|
+
}
|
|
75
|
+
// Ensure the versions are right for the SDK that the project is currently using.
|
|
76
|
+
await mutatePackagesWithKnownVersionsAsync(projectRoot, sdkVersion, results.missing);
|
|
77
|
+
return results;
|
|
78
|
+
}
|
|
79
|
+
async function mutatePackagesWithKnownVersionsAsync(projectRoot, sdkVersion, packages) {
|
|
80
|
+
// Ensure the versions are right for the SDK that the project is currently using.
|
|
81
|
+
const relatedPackages = await (0, _getVersionedPackages).getCombinedKnownVersionsAsync({
|
|
82
|
+
projectRoot,
|
|
83
|
+
sdkVersion
|
|
84
|
+
});
|
|
85
|
+
for (const pkg of packages){
|
|
86
|
+
if (// Only use the SDK versions if the package does not already have a hardcoded version.
|
|
87
|
+
// We do this because some packages have API coded into the CLI which expects an exact version.
|
|
88
|
+
!pkg.version && pkg.pkg in relatedPackages) {
|
|
89
|
+
pkg.version = relatedPackages[pkg.pkg];
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return packages;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
//# sourceMappingURL=getMissingPackages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/doctor/dependencies/getMissingPackages.ts"],"sourcesContent":["import JsonFile from '@expo/json-file';\nimport resolveFrom from 'resolve-from';\nimport semver from 'semver';\n\nimport * as Log from '../../../log';\nimport { getCombinedKnownVersionsAsync } from './getVersionedPackages';\n\nexport type ResolvedPackage = {\n /** Module ID pointing to the library `package.json`. */\n file: string;\n /** NPM package name. */\n pkg: string;\n /** Required version range. */\n version?: string;\n /** If the dependency should be installed as a `devDependency` */\n dev?: boolean;\n};\n\n/** Given a set of required packages, this method returns a list of missing packages. */\nexport function collectMissingPackages(\n projectRoot: string,\n requiredPackages: ResolvedPackage[]\n): {\n missing: ResolvedPackage[];\n resolutions: Record<string, string>;\n} {\n const resolutions: Record<string, string> = {};\n\n const missingPackages = requiredPackages.filter((p) => {\n const resolved = resolveFrom.silent(projectRoot, p.file);\n if (!resolved || !versionSatisfiesRequiredPackage(resolved, p)) {\n return true;\n }\n resolutions[p.pkg] = resolved;\n return false;\n });\n\n return { missing: missingPackages, resolutions };\n}\n\nexport function versionSatisfiesRequiredPackage(\n packageJsonFilePath: string,\n resolvedPackage: Pick<ResolvedPackage, 'version' | 'pkg'>\n): boolean {\n // If the version is specified, check that it satisfies the installed version.\n if (!resolvedPackage.version) {\n Log.debug(`Required package \"${resolvedPackage.pkg}\" found (no version constraint specified).`);\n return true;\n }\n\n const pkgJson = JsonFile.read(packageJsonFilePath);\n if (\n // package.json has version.\n typeof pkgJson.version === 'string' &&\n // semver satisfaction.\n semver.satisfies(pkgJson.version, resolvedPackage.version)\n ) {\n return true;\n }\n Log.debug(\n `Installed package \"${resolvedPackage.pkg}\" does not satisfy version constraint \"${resolvedPackage.version}\" (version: \"${pkgJson.version}\")`\n );\n return false;\n}\n\n/**\n * Collect missing packages given a list of required packages.\n * Any missing packages will be versioned to the known versions for the current SDK.\n *\n * @param projectRoot\n * @param props.requiredPackages list of required packages to check for\n * @returns list of missing packages and resolutions to existing packages.\n */\nexport async function getMissingPackagesAsync(\n projectRoot: string,\n {\n sdkVersion,\n requiredPackages,\n }: {\n sdkVersion?: string;\n requiredPackages: ResolvedPackage[];\n }\n): Promise<{\n missing: ResolvedPackage[];\n resolutions: Record<string, string>;\n}> {\n const results = collectMissingPackages(projectRoot, requiredPackages);\n if (!results.missing.length) {\n return results;\n }\n\n // Ensure the versions are right for the SDK that the project is currently using.\n await mutatePackagesWithKnownVersionsAsync(projectRoot, sdkVersion, results.missing);\n\n return results;\n}\n\nexport async function mutatePackagesWithKnownVersionsAsync(\n projectRoot: string,\n sdkVersion: string | undefined,\n packages: ResolvedPackage[]\n) {\n // Ensure the versions are right for the SDK that the project is currently using.\n const relatedPackages = await getCombinedKnownVersionsAsync({ projectRoot, sdkVersion });\n for (const pkg of packages) {\n if (\n // Only use the SDK versions if the package does not already have a hardcoded version.\n // We do this because some packages have API coded into the CLI which expects an exact version.\n !pkg.version &&\n pkg.pkg in relatedPackages\n ) {\n pkg.version = relatedPackages[pkg.pkg];\n }\n }\n return packages;\n}\n"],"names":["collectMissingPackages","versionSatisfiesRequiredPackage","getMissingPackagesAsync","mutatePackagesWithKnownVersionsAsync","Log","projectRoot","requiredPackages","resolutions","missingPackages","filter","p","resolved","resolveFrom","silent","file","pkg","missing","packageJsonFilePath","resolvedPackage","version","debug","pkgJson","JsonFile","read","semver","satisfies","sdkVersion","results","length","packages","relatedPackages","getCombinedKnownVersionsAsync"],"mappings":"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"}
|