@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,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.startAdbReverseAsync = startAdbReverseAsync;
|
|
6
|
+
exports.stopAdbReverseAsync = stopAdbReverseAsync;
|
|
7
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
8
|
+
var _exit = require("../../../utils/exit");
|
|
9
|
+
var _adb = require("./adb");
|
|
10
|
+
function _interopRequireWildcard(obj) {
|
|
11
|
+
if (obj && obj.__esModule) {
|
|
12
|
+
return obj;
|
|
13
|
+
} else {
|
|
14
|
+
var newObj = {};
|
|
15
|
+
if (obj != null) {
|
|
16
|
+
for(var key in obj){
|
|
17
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
18
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
19
|
+
if (desc.get || desc.set) {
|
|
20
|
+
Object.defineProperty(newObj, key, desc);
|
|
21
|
+
} else {
|
|
22
|
+
newObj[key] = obj[key];
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
newObj.default = obj;
|
|
28
|
+
return newObj;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
let removeExitHook = null;
|
|
32
|
+
async function startAdbReverseAsync(ports) {
|
|
33
|
+
// Install cleanup automatically...
|
|
34
|
+
removeExitHook = (0, _exit).installExitHooks(()=>{
|
|
35
|
+
stopAdbReverseAsync(ports);
|
|
36
|
+
});
|
|
37
|
+
const devices = await (0, _adb).getAttachedDevicesAsync();
|
|
38
|
+
for (const device of devices){
|
|
39
|
+
for (const port of ports){
|
|
40
|
+
if (!await adbReverseAsync(device, port)) {
|
|
41
|
+
Log.debug(`[ADB] Failed to start reverse port ${port} on device "${device.name}"`);
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
async function stopAdbReverseAsync(ports) {
|
|
49
|
+
removeExitHook == null ? void 0 : removeExitHook();
|
|
50
|
+
const devices = await (0, _adb).getAttachedDevicesAsync();
|
|
51
|
+
for (const device of devices){
|
|
52
|
+
for (const port of ports){
|
|
53
|
+
await adbReverseRemoveAsync(device, port);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function adbReverseAsync(device, port) {
|
|
58
|
+
if (!device.isAuthorized) {
|
|
59
|
+
(0, _adb).logUnauthorized(device);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
await (0, _adb).getServer().runAsync((0, _adb).adbArgs(device.pid, "reverse", `tcp:${port}`, `tcp:${port}`));
|
|
64
|
+
return true;
|
|
65
|
+
} catch (error) {
|
|
66
|
+
Log.warn(`[ADB] Couldn't reverse port ${port}: ${error.message}`);
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function adbReverseRemoveAsync(device, port) {
|
|
71
|
+
if (!device.isAuthorized) {
|
|
72
|
+
return false;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
await (0, _adb).getServer().runAsync((0, _adb).adbArgs(device.pid, "reverse", "--remove", `tcp:${port}`));
|
|
76
|
+
return true;
|
|
77
|
+
} catch (error) {
|
|
78
|
+
// Don't send this to warn because we call this preemptively sometimes
|
|
79
|
+
Log.debug(`[ADB] Couldn't reverse remove port ${port}: ${error.message}`);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
//# sourceMappingURL=adbReverse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/android/adbReverse.ts"],"sourcesContent":["import * as Log from '../../../log';\nimport { installExitHooks } from '../../../utils/exit';\nimport { adbArgs, Device, getAttachedDevicesAsync, getServer, logUnauthorized } from './adb';\n\nlet removeExitHook: (() => void) | null = null;\n\nexport async function startAdbReverseAsync(ports: number[]): Promise<boolean> {\n // Install cleanup automatically...\n removeExitHook = installExitHooks(() => {\n stopAdbReverseAsync(ports);\n });\n\n const devices = await getAttachedDevicesAsync();\n for (const device of devices) {\n for (const port of ports) {\n if (!(await adbReverseAsync(device, port))) {\n Log.debug(`[ADB] Failed to start reverse port ${port} on device \"${device.name}\"`);\n return false;\n }\n }\n }\n return true;\n}\n\nexport async function stopAdbReverseAsync(ports: number[]): Promise<void> {\n removeExitHook?.();\n\n const devices = await getAttachedDevicesAsync();\n for (const device of devices) {\n for (const port of ports) {\n await adbReverseRemoveAsync(device, port);\n }\n }\n}\n\nasync function adbReverseAsync(device: Device, port: number): Promise<boolean> {\n if (!device.isAuthorized) {\n logUnauthorized(device);\n return false;\n }\n\n try {\n await getServer().runAsync(adbArgs(device.pid, 'reverse', `tcp:${port}`, `tcp:${port}`));\n return true;\n } catch (error: any) {\n Log.warn(`[ADB] Couldn't reverse port ${port}: ${error.message}`);\n return false;\n }\n}\n\nasync function adbReverseRemoveAsync(device: Device, port: number): Promise<boolean> {\n if (!device.isAuthorized) {\n return false;\n }\n\n try {\n await getServer().runAsync(adbArgs(device.pid, 'reverse', '--remove', `tcp:${port}`));\n return true;\n } catch (error: any) {\n // Don't send this to warn because we call this preemptively sometimes\n Log.debug(`[ADB] Couldn't reverse remove port ${port}: ${error.message}`);\n return false;\n }\n}\n"],"names":["startAdbReverseAsync","stopAdbReverseAsync","Log","removeExitHook","ports","installExitHooks","devices","getAttachedDevicesAsync","device","port","adbReverseAsync","debug","name","adbReverseRemoveAsync","isAuthorized","logUnauthorized","getServer","runAsync","adbArgs","pid","error","warn","message"],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.whichEmulator = whichEmulator;
|
|
6
|
+
exports.listAvdsAsync = listAvdsAsync;
|
|
7
|
+
exports.startDeviceAsync = startDeviceAsync;
|
|
8
|
+
exports.EMULATOR_MAX_WAIT_TIMEOUT = void 0;
|
|
9
|
+
var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
|
|
10
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
11
|
+
var _childProcess = require("child_process");
|
|
12
|
+
var _os = _interopRequireDefault(require("os"));
|
|
13
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
14
|
+
var _adb = require("./adb");
|
|
15
|
+
function _interopRequireDefault(obj) {
|
|
16
|
+
return obj && obj.__esModule ? obj : {
|
|
17
|
+
default: obj
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function _interopRequireWildcard(obj) {
|
|
21
|
+
if (obj && obj.__esModule) {
|
|
22
|
+
return obj;
|
|
23
|
+
} else {
|
|
24
|
+
var newObj = {};
|
|
25
|
+
if (obj != null) {
|
|
26
|
+
for(var key in obj){
|
|
27
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
28
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
29
|
+
if (desc.get || desc.set) {
|
|
30
|
+
Object.defineProperty(newObj, key, desc);
|
|
31
|
+
} else {
|
|
32
|
+
newObj[key] = obj[key];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
newObj.default = obj;
|
|
38
|
+
return newObj;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const EMULATOR_MAX_WAIT_TIMEOUT = 60 * 1000 * 3;
|
|
42
|
+
exports.EMULATOR_MAX_WAIT_TIMEOUT = EMULATOR_MAX_WAIT_TIMEOUT;
|
|
43
|
+
function whichEmulator() {
|
|
44
|
+
// https://developer.android.com/studio/command-line/variables
|
|
45
|
+
// TODO: Add ANDROID_SDK_ROOT support as well https://github.com/expo/expo/pull/16516#discussion_r820037917
|
|
46
|
+
if (process.env.ANDROID_HOME) {
|
|
47
|
+
return `${process.env.ANDROID_HOME}/emulator/emulator`;
|
|
48
|
+
}
|
|
49
|
+
return "emulator";
|
|
50
|
+
}
|
|
51
|
+
async function listAvdsAsync() {
|
|
52
|
+
try {
|
|
53
|
+
const { stdout } = await (0, _spawnAsync).default(whichEmulator(), [
|
|
54
|
+
"-list-avds"
|
|
55
|
+
]);
|
|
56
|
+
return stdout.split(_os.default.EOL).filter(Boolean).map((name)=>({
|
|
57
|
+
name,
|
|
58
|
+
type: "emulator",
|
|
59
|
+
// unsure from this
|
|
60
|
+
isBooted: false,
|
|
61
|
+
isAuthorized: true
|
|
62
|
+
})
|
|
63
|
+
);
|
|
64
|
+
} catch {
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async function startDeviceAsync(device, { timeout =EMULATOR_MAX_WAIT_TIMEOUT , interval =1000 } = {}) {
|
|
69
|
+
Log.log(`\u203A Opening emulator ${_chalk.default.bold(device.name)}`);
|
|
70
|
+
// Start a process to open an emulator
|
|
71
|
+
const emulatorProcess = (0, _childProcess).spawn(whichEmulator(), [
|
|
72
|
+
`@${device.name}`
|
|
73
|
+
], {
|
|
74
|
+
stdio: "ignore",
|
|
75
|
+
detached: true
|
|
76
|
+
});
|
|
77
|
+
emulatorProcess.unref();
|
|
78
|
+
return new Promise((resolve, reject)=>{
|
|
79
|
+
const waitTimer = setInterval(async ()=>{
|
|
80
|
+
try {
|
|
81
|
+
const bootedDevices = await (0, _adb).getAttachedDevicesAsync();
|
|
82
|
+
const connected = bootedDevices.find(({ name })=>name === device.name
|
|
83
|
+
);
|
|
84
|
+
if (connected) {
|
|
85
|
+
const isBooted = await (0, _adb).isBootAnimationCompleteAsync(connected.pid);
|
|
86
|
+
if (isBooted) {
|
|
87
|
+
stopWaiting();
|
|
88
|
+
resolve(connected);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
} catch (error) {
|
|
92
|
+
stopWaiting();
|
|
93
|
+
reject(error);
|
|
94
|
+
}
|
|
95
|
+
}, interval);
|
|
96
|
+
// Reject command after timeout
|
|
97
|
+
const maxTimer = setTimeout(()=>{
|
|
98
|
+
const manualCommand = `${whichEmulator()} @${device.name}`;
|
|
99
|
+
stopWaitingAndReject(`It took too long to start the Android emulator: ${device.name}. You can try starting the emulator manually from the terminal with: ${manualCommand}`);
|
|
100
|
+
}, timeout);
|
|
101
|
+
const stopWaiting = ()=>{
|
|
102
|
+
clearTimeout(maxTimer);
|
|
103
|
+
clearInterval(waitTimer);
|
|
104
|
+
};
|
|
105
|
+
const stopWaitingAndReject = (message)=>{
|
|
106
|
+
stopWaiting();
|
|
107
|
+
reject(new Error(message));
|
|
108
|
+
};
|
|
109
|
+
emulatorProcess.on("error", ({ message })=>stopWaitingAndReject(message)
|
|
110
|
+
);
|
|
111
|
+
emulatorProcess.on("exit", ()=>{
|
|
112
|
+
const manualCommand = `${whichEmulator()} @${device.name}`;
|
|
113
|
+
stopWaitingAndReject(`The emulator (${device.name}) quit before it finished opening. You can try starting the emulator manually from the terminal with: ${manualCommand}`);
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
//# sourceMappingURL=emulator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/android/emulator.ts"],"sourcesContent":["import spawnAsync from '@expo/spawn-async';\nimport chalk from 'chalk';\nimport { spawn } from 'child_process';\nimport os from 'os';\n\nimport * as Log from '../../../log';\nimport { Device, getAttachedDevicesAsync, isBootAnimationCompleteAsync } from './adb';\n\nexport const EMULATOR_MAX_WAIT_TIMEOUT = 60 * 1000 * 3;\n\nexport function whichEmulator(): string {\n // https://developer.android.com/studio/command-line/variables\n // TODO: Add ANDROID_SDK_ROOT support as well https://github.com/expo/expo/pull/16516#discussion_r820037917\n if (process.env.ANDROID_HOME) {\n return `${process.env.ANDROID_HOME}/emulator/emulator`;\n }\n return 'emulator';\n}\n\n/** Returns a list of emulator names. */\nexport async function listAvdsAsync(): Promise<Device[]> {\n try {\n const { stdout } = await spawnAsync(whichEmulator(), ['-list-avds']);\n return stdout\n .split(os.EOL)\n .filter(Boolean)\n .map((name) => ({\n name,\n type: 'emulator',\n // unsure from this\n isBooted: false,\n isAuthorized: true,\n }));\n } catch {\n return [];\n }\n}\n\n/** Start an Android device and wait until it is booted. */\nexport async function startDeviceAsync(\n device: Pick<Device, 'name'>,\n {\n timeout = EMULATOR_MAX_WAIT_TIMEOUT,\n interval = 1000,\n }: {\n /** Time in milliseconds to wait before asserting a timeout error. */\n timeout?: number;\n interval?: number;\n } = {}\n): Promise<Device> {\n Log.log(`\\u203A Opening emulator ${chalk.bold(device.name)}`);\n\n // Start a process to open an emulator\n const emulatorProcess = spawn(\n whichEmulator(),\n [\n `@${device.name}`,\n // disable animation for faster boot -- this might make it harder to detect if it mounted properly tho\n //'-no-boot-anim'\n ],\n {\n stdio: 'ignore',\n detached: true,\n }\n );\n\n emulatorProcess.unref();\n\n return new Promise<Device>((resolve, reject) => {\n const waitTimer = setInterval(async () => {\n try {\n const bootedDevices = await getAttachedDevicesAsync();\n const connected = bootedDevices.find(({ name }) => name === device.name);\n if (connected) {\n const isBooted = await isBootAnimationCompleteAsync(connected.pid);\n if (isBooted) {\n stopWaiting();\n resolve(connected);\n }\n }\n } catch (error) {\n stopWaiting();\n reject(error);\n }\n }, interval);\n\n // Reject command after timeout\n const maxTimer = setTimeout(() => {\n const manualCommand = `${whichEmulator()} @${device.name}`;\n stopWaitingAndReject(\n `It took too long to start the Android emulator: ${device.name}. You can try starting the emulator manually from the terminal with: ${manualCommand}`\n );\n }, timeout);\n\n const stopWaiting = () => {\n clearTimeout(maxTimer);\n clearInterval(waitTimer);\n };\n\n const stopWaitingAndReject = (message: string) => {\n stopWaiting();\n reject(new Error(message));\n };\n\n emulatorProcess.on('error', ({ message }) => stopWaitingAndReject(message));\n\n emulatorProcess.on('exit', () => {\n const manualCommand = `${whichEmulator()} @${device.name}`;\n stopWaitingAndReject(\n `The emulator (${device.name}) quit before it finished opening. You can try starting the emulator manually from the terminal with: ${manualCommand}`\n );\n });\n });\n}\n"],"names":["whichEmulator","listAvdsAsync","startDeviceAsync","Log","EMULATOR_MAX_WAIT_TIMEOUT","process","env","ANDROID_HOME","stdout","spawnAsync","split","os","EOL","filter","Boolean","map","name","type","isBooted","isAuthorized","device","timeout","interval","log","chalk","bold","emulatorProcess","spawn","stdio","detached","unref","Promise","resolve","reject","waitTimer","setInterval","bootedDevices","getAttachedDevicesAsync","connected","find","isBootAnimationCompleteAsync","pid","stopWaiting","error","maxTimer","setTimeout","manualCommand","stopWaitingAndReject","clearTimeout","clearInterval","message","Error","on"],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getDevicesAsync = getDevicesAsync;
|
|
6
|
+
var _errors = require("../../../utils/errors");
|
|
7
|
+
var _adb = require("./adb");
|
|
8
|
+
var _emulator = require("./emulator");
|
|
9
|
+
async function getDevicesAsync() {
|
|
10
|
+
const bootedDevices = await (0, _adb).getAttachedDevicesAsync();
|
|
11
|
+
const data = await (0, _emulator).listAvdsAsync();
|
|
12
|
+
const connectedNames = bootedDevices.map(({ name })=>name
|
|
13
|
+
);
|
|
14
|
+
const offlineEmulators = data.filter(({ name })=>!connectedNames.includes(name)
|
|
15
|
+
).map(({ name , type })=>{
|
|
16
|
+
return {
|
|
17
|
+
name,
|
|
18
|
+
type,
|
|
19
|
+
isBooted: false,
|
|
20
|
+
// TODO: Are emulators always authorized?
|
|
21
|
+
isAuthorized: true
|
|
22
|
+
};
|
|
23
|
+
});
|
|
24
|
+
const allDevices = bootedDevices.concat(offlineEmulators);
|
|
25
|
+
if (!allDevices.length) {
|
|
26
|
+
throw new _errors.CommandError([
|
|
27
|
+
`No Android connected device found, and no emulators could be started automatically.`,
|
|
28
|
+
`Please connect a device or create an emulator (https://docs.expo.dev/workflow/android-studio-emulator).`,
|
|
29
|
+
`Then follow the instructions here to enable USB debugging:`,
|
|
30
|
+
`https://developer.android.com/studio/run/device.html#developer-device-options. If you are using Genymotion go to Settings -> ADB, select "Use custom Android SDK tools", and point it at your Android SDK directory.`,
|
|
31
|
+
].join("\n"));
|
|
32
|
+
}
|
|
33
|
+
return allDevices;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=getDevices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/android/getDevices.ts"],"sourcesContent":["import { CommandError } from '../../../utils/errors';\nimport { Device, getAttachedDevicesAsync } from './adb';\nimport { listAvdsAsync } from './emulator';\n\n/** Get a list of all devices including offline emulators. Asserts if no devices are available. */\nexport async function getDevicesAsync(): Promise<Device[]> {\n const bootedDevices = await getAttachedDevicesAsync();\n\n const data = await listAvdsAsync();\n const connectedNames = bootedDevices.map(({ name }) => name);\n\n const offlineEmulators = data\n .filter(({ name }) => !connectedNames.includes(name))\n .map(({ name, type }) => {\n return {\n name,\n type,\n isBooted: false,\n // TODO: Are emulators always authorized?\n isAuthorized: true,\n };\n });\n\n const allDevices = bootedDevices.concat(offlineEmulators);\n\n if (!allDevices.length) {\n throw new CommandError(\n [\n `No Android connected device found, and no emulators could be started automatically.`,\n `Please connect a device or create an emulator (https://docs.expo.dev/workflow/android-studio-emulator).`,\n `Then follow the instructions here to enable USB debugging:`,\n `https://developer.android.com/studio/run/device.html#developer-device-options. If you are using Genymotion go to Settings -> ADB, select \"Use custom Android SDK tools\", and point it at your Android SDK directory.`,\n ].join('\\n')\n );\n }\n\n return allDevices;\n}\n"],"names":["getDevicesAsync","bootedDevices","getAttachedDevicesAsync","data","listAvdsAsync","connectedNames","map","name","offlineEmulators","filter","includes","type","isBooted","isAuthorized","allDevices","concat","length","CommandError","join"],"mappings":"AAAA;;;;QAKsBA,eAAe,GAAfA,eAAe;AALR,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AACJ,IAAA,IAAO,WAAP,OAAO,CAAA;AACzB,IAAA,SAAY,WAAZ,YAAY,CAAA;AAGnC,eAAeA,eAAe,GAAsB;IACzD,MAAMC,aAAa,GAAG,MAAMC,CAAAA,GAAAA,IAAuB,AAAE,CAAA,wBAAF,EAAE,AAAC;IAEtD,MAAMC,IAAI,GAAG,MAAMC,CAAAA,GAAAA,SAAa,AAAE,CAAA,cAAF,EAAE,AAAC;IACnC,MAAMC,cAAc,GAAGJ,aAAa,CAACK,GAAG,CAAC,CAAC,EAAEC,IAAI,CAAA,EAAE,GAAKA,IAAI;IAAA,CAAC,AAAC;IAE7D,MAAMC,gBAAgB,GAAGL,IAAI,CAC1BM,MAAM,CAAC,CAAC,EAAEF,IAAI,CAAA,EAAE,GAAK,CAACF,cAAc,CAACK,QAAQ,CAACH,IAAI,CAAC;IAAA,CAAC,CACpDD,GAAG,CAAC,CAAC,EAAEC,IAAI,CAAA,EAAEI,IAAI,CAAA,EAAE,GAAK;QACvB,OAAO;YACLJ,IAAI;YACJI,IAAI;YACJC,QAAQ,EAAE,KAAK;YACf,yCAAyC;YACzCC,YAAY,EAAE,IAAI;SACnB,CAAC;KACH,CAAC,AAAC;IAEL,MAAMC,UAAU,GAAGb,aAAa,CAACc,MAAM,CAACP,gBAAgB,CAAC,AAAC;IAE1D,IAAI,CAACM,UAAU,CAACE,MAAM,EAAE;QACtB,MAAM,IAAIC,OAAY,aAAA,CACpB;YACE,CAAC,mFAAmF,CAAC;YACrF,CAAC,uGAAuG,CAAC;YACzG,CAAC,0DAA0D,CAAC;YAC5D,CAAC,oNAAoN,CAAC;SACvN,CAACC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;KACH;IAED,OAAOJ,UAAU,CAAC;CACnB"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.promptForDeviceAsync = promptForDeviceAsync;
|
|
6
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
7
|
+
var _errors = require("../../../utils/errors");
|
|
8
|
+
var _prompts = require("../../../utils/prompts");
|
|
9
|
+
var _adb = require("./adb");
|
|
10
|
+
function _interopRequireDefault(obj) {
|
|
11
|
+
return obj && obj.__esModule ? obj : {
|
|
12
|
+
default: obj
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function nameStyleForDevice(device) {
|
|
16
|
+
const isActive = device.isBooted;
|
|
17
|
+
if (!isActive) {
|
|
18
|
+
// Use no style changes for a disconnected device that is available to be opened.
|
|
19
|
+
return (text)=>text
|
|
20
|
+
;
|
|
21
|
+
}
|
|
22
|
+
// A device that is connected and ready to be used should be bolded to match iOS.
|
|
23
|
+
if (device.isAuthorized) {
|
|
24
|
+
return _chalk.default.bold;
|
|
25
|
+
}
|
|
26
|
+
// Devices that are unauthorized and connected cannot be used, but they are connected so gray them out.
|
|
27
|
+
return (text)=>_chalk.default.bold(_chalk.default.gray(text))
|
|
28
|
+
;
|
|
29
|
+
}
|
|
30
|
+
async function promptForDeviceAsync(devices) {
|
|
31
|
+
// TODO: provide an option to add or download more simulators
|
|
32
|
+
const { value } = await (0, _prompts).promptAsync({
|
|
33
|
+
type: "autocomplete",
|
|
34
|
+
name: "value",
|
|
35
|
+
limit: 11,
|
|
36
|
+
message: "Select a device/emulator",
|
|
37
|
+
choices: devices.map((item)=>{
|
|
38
|
+
const format = nameStyleForDevice(item);
|
|
39
|
+
const type = item.isAuthorized ? item.type : "unauthorized";
|
|
40
|
+
return {
|
|
41
|
+
title: `${format(item.name)} ${_chalk.default.dim(`(${type})`)}`,
|
|
42
|
+
value: item.name
|
|
43
|
+
};
|
|
44
|
+
}),
|
|
45
|
+
suggest: (input, choices)=>{
|
|
46
|
+
const regex = new RegExp(input, "i");
|
|
47
|
+
return choices.filter((choice)=>regex.test(choice.title)
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
const device = devices.find(({ name })=>name === value
|
|
52
|
+
);
|
|
53
|
+
if ((device == null ? void 0 : device.isAuthorized) === false) {
|
|
54
|
+
(0, _adb).logUnauthorized(device);
|
|
55
|
+
throw new _errors.AbortCommandError();
|
|
56
|
+
}
|
|
57
|
+
return device;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
//# sourceMappingURL=promptAndroidDevice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/android/promptAndroidDevice.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { AbortCommandError } from '../../../utils/errors';\nimport { promptAsync } from '../../../utils/prompts';\nimport { Device, logUnauthorized } from './adb';\n\nfunction nameStyleForDevice(device: Device): (name: string) => string {\n const isActive = device.isBooted;\n if (!isActive) {\n // Use no style changes for a disconnected device that is available to be opened.\n return (text: string) => text;\n }\n // A device that is connected and ready to be used should be bolded to match iOS.\n if (device.isAuthorized) {\n return chalk.bold;\n }\n // Devices that are unauthorized and connected cannot be used, but they are connected so gray them out.\n return (text: string) => chalk.bold(chalk.gray(text));\n}\n\nexport async function promptForDeviceAsync(devices: Device[]): Promise<Device> {\n // TODO: provide an option to add or download more simulators\n\n const { value } = await promptAsync({\n type: 'autocomplete',\n name: 'value',\n limit: 11,\n message: 'Select a device/emulator',\n choices: devices.map((item) => {\n const format = nameStyleForDevice(item);\n const type = item.isAuthorized ? item.type : 'unauthorized';\n return {\n title: `${format(item.name)} ${chalk.dim(`(${type})`)}`,\n value: item.name,\n };\n }),\n suggest: (input: any, choices: any) => {\n const regex = new RegExp(input, 'i');\n return choices.filter((choice: any) => regex.test(choice.title));\n },\n });\n\n const device = devices.find(({ name }) => name === value);\n\n if (device?.isAuthorized === false) {\n logUnauthorized(device);\n throw new AbortCommandError();\n }\n\n return device!;\n}\n"],"names":["promptForDeviceAsync","nameStyleForDevice","device","isActive","isBooted","text","isAuthorized","chalk","bold","gray","devices","value","promptAsync","type","name","limit","message","choices","map","item","format","title","dim","suggest","input","regex","RegExp","filter","choice","test","find","logUnauthorized","AbortCommandError"],"mappings":"AAAA;;;;QAoBsBA,oBAAoB,GAApBA,oBAAoB;AApBxB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAES,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AAC7B,IAAA,QAAwB,WAAxB,wBAAwB,CAAA;AACZ,IAAA,IAAO,WAAP,OAAO,CAAA;;;;;;AAE/C,SAASC,kBAAkB,CAACC,MAAc,EAA4B;IACpE,MAAMC,QAAQ,GAAGD,MAAM,CAACE,QAAQ,AAAC;IACjC,IAAI,CAACD,QAAQ,EAAE;QACb,iFAAiF;QACjF,OAAO,CAACE,IAAY,GAAKA,IAAI;QAAA,CAAC;KAC/B;IACD,iFAAiF;IACjF,IAAIH,MAAM,CAACI,YAAY,EAAE;QACvB,OAAOC,MAAK,QAAA,CAACC,IAAI,CAAC;KACnB;IACD,uGAAuG;IACvG,OAAO,CAACH,IAAY,GAAKE,MAAK,QAAA,CAACC,IAAI,CAACD,MAAK,QAAA,CAACE,IAAI,CAACJ,IAAI,CAAC,CAAC;IAAA,CAAC;CACvD;AAEM,eAAeL,oBAAoB,CAACU,OAAiB,EAAmB;IAC7E,6DAA6D;IAE7D,MAAM,EAAEC,KAAK,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,QAAW,AAiBjC,CAAA,YAjBiC,CAAC;QAClCC,IAAI,EAAE,cAAc;QACpBC,IAAI,EAAE,OAAO;QACbC,KAAK,EAAE,EAAE;QACTC,OAAO,EAAE,0BAA0B;QACnCC,OAAO,EAAEP,OAAO,CAACQ,GAAG,CAAC,CAACC,IAAI,GAAK;YAC7B,MAAMC,MAAM,GAAGnB,kBAAkB,CAACkB,IAAI,CAAC,AAAC;YACxC,MAAMN,IAAI,GAAGM,IAAI,CAACb,YAAY,GAAGa,IAAI,CAACN,IAAI,GAAG,cAAc,AAAC;YAC5D,OAAO;gBACLQ,KAAK,EAAE,CAAC,EAAED,MAAM,CAACD,IAAI,CAACL,IAAI,CAAC,CAAC,CAAC,EAAEP,MAAK,QAAA,CAACe,GAAG,CAAC,CAAC,CAAC,EAAET,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACvDF,KAAK,EAAEQ,IAAI,CAACL,IAAI;aACjB,CAAC;SACH,CAAC;QACFS,OAAO,EAAE,CAACC,KAAU,EAAEP,OAAY,GAAK;YACrC,MAAMQ,KAAK,GAAG,IAAIC,MAAM,CAACF,KAAK,EAAE,GAAG,CAAC,AAAC;YACrC,OAAOP,OAAO,CAACU,MAAM,CAAC,CAACC,MAAW,GAAKH,KAAK,CAACI,IAAI,CAACD,MAAM,CAACP,KAAK,CAAC;YAAA,CAAC,CAAC;SAClE;KACF,CAAC,AAAC;IAEH,MAAMnB,MAAM,GAAGQ,OAAO,CAACoB,IAAI,CAAC,CAAC,EAAEhB,IAAI,CAAA,EAAE,GAAKA,IAAI,KAAKH,KAAK;IAAA,CAAC,AAAC;IAE1D,IAAIT,CAAAA,MAAM,QAAc,GAApBA,KAAAA,CAAoB,GAApBA,MAAM,CAAEI,YAAY,CAAA,KAAK,KAAK,EAAE;QAClCyB,CAAAA,GAAAA,IAAe,AAAQ,CAAA,gBAAR,CAAC7B,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI8B,OAAiB,kBAAA,EAAE,CAAC;KAC/B;IAED,OAAO9B,MAAM,CAAE;CAChB"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
var _configPlugins = require("@expo/config-plugins");
|
|
6
|
+
var _plist = _interopRequireDefault(require("@expo/plist"));
|
|
7
|
+
var _fs = _interopRequireDefault(require("fs"));
|
|
8
|
+
var _appIdResolver = require("../AppIdResolver");
|
|
9
|
+
function _interopRequireDefault(obj) {
|
|
10
|
+
return obj && obj.__esModule ? obj : {
|
|
11
|
+
default: obj
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
class AppleAppIdResolver extends _appIdResolver.AppIdResolver {
|
|
15
|
+
constructor(projectRoot){
|
|
16
|
+
super(projectRoot, "ios", "ios.bundleIdentifier");
|
|
17
|
+
}
|
|
18
|
+
async hasNativeProjectAsync() {
|
|
19
|
+
try {
|
|
20
|
+
return !!_configPlugins.IOSConfig.Paths.getAppDelegateFilePath(this.projectRoot);
|
|
21
|
+
} catch {
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
async resolveAppIdFromNativeAsync() {
|
|
26
|
+
// Check xcode project
|
|
27
|
+
try {
|
|
28
|
+
const bundleId = _configPlugins.IOSConfig.BundleIdentifier.getBundleIdentifierFromPbxproj(this.projectRoot);
|
|
29
|
+
if (bundleId) {
|
|
30
|
+
return bundleId;
|
|
31
|
+
}
|
|
32
|
+
} catch {}
|
|
33
|
+
// Check Info.plist
|
|
34
|
+
try {
|
|
35
|
+
const infoPlistPath = _configPlugins.IOSConfig.Paths.getInfoPlistPath(this.projectRoot);
|
|
36
|
+
const data = await _plist.default.parse(_fs.default.readFileSync(infoPlistPath, "utf8"));
|
|
37
|
+
if (data.CFBundleIdentifier && !data.CFBundleIdentifier.startsWith("$(")) {
|
|
38
|
+
return data.CFBundleIdentifier;
|
|
39
|
+
}
|
|
40
|
+
} catch {}
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.AppleAppIdResolver = AppleAppIdResolver;
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=AppleAppIdResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/ios/AppleAppIdResolver.ts"],"sourcesContent":["import { IOSConfig } from '@expo/config-plugins';\nimport plist from '@expo/plist';\nimport fs from 'fs';\n\nimport { AppIdResolver } from '../AppIdResolver';\n\n/** Resolves the iOS bundle identifier from the Expo config or native files. */\nexport class AppleAppIdResolver extends AppIdResolver {\n constructor(projectRoot: string) {\n super(projectRoot, 'ios', 'ios.bundleIdentifier');\n }\n\n async hasNativeProjectAsync(): Promise<boolean> {\n try {\n return !!IOSConfig.Paths.getAppDelegateFilePath(this.projectRoot);\n } catch {\n return true;\n }\n }\n\n async resolveAppIdFromNativeAsync(): Promise<string | null> {\n // Check xcode project\n try {\n const bundleId = IOSConfig.BundleIdentifier.getBundleIdentifierFromPbxproj(this.projectRoot);\n if (bundleId) {\n return bundleId;\n }\n } catch {}\n\n // Check Info.plist\n try {\n const infoPlistPath = IOSConfig.Paths.getInfoPlistPath(this.projectRoot);\n const data = await plist.parse(fs.readFileSync(infoPlistPath, 'utf8'));\n if (data.CFBundleIdentifier && !data.CFBundleIdentifier.startsWith('$(')) {\n return data.CFBundleIdentifier;\n }\n } catch {}\n\n return null;\n }\n}\n"],"names":["AppleAppIdResolver","AppIdResolver","constructor","projectRoot","hasNativeProjectAsync","IOSConfig","Paths","getAppDelegateFilePath","resolveAppIdFromNativeAsync","bundleId","BundleIdentifier","getBundleIdentifierFromPbxproj","infoPlistPath","getInfoPlistPath","data","plist","parse","fs","readFileSync","CFBundleIdentifier","startsWith"],"mappings":"AAAA;;;;AAA0B,IAAA,cAAsB,WAAtB,sBAAsB,CAAA;AAC9B,IAAA,MAAa,kCAAb,aAAa,EAAA;AAChB,IAAA,GAAI,kCAAJ,IAAI,EAAA;AAEW,IAAA,cAAkB,WAAlB,kBAAkB,CAAA;;;;;;AAGzC,MAAMA,kBAAkB,SAASC,cAAa,cAAA;IACnDC,YAAYC,WAAmB,CAAE;QAC/B,KAAK,CAACA,WAAW,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;KACnD;IAED,MAAMC,qBAAqB,GAAqB;QAC9C,IAAI;YACF,OAAO,CAAC,CAACC,cAAS,UAAA,CAACC,KAAK,CAACC,sBAAsB,CAAC,IAAI,CAACJ,WAAW,CAAC,CAAC;SACnE,CAAC,OAAM;YACN,OAAO,IAAI,CAAC;SACb;KACF;IAED,MAAMK,2BAA2B,GAA2B;QAC1D,sBAAsB;QACtB,IAAI;YACF,MAAMC,QAAQ,GAAGJ,cAAS,UAAA,CAACK,gBAAgB,CAACC,8BAA8B,CAAC,IAAI,CAACR,WAAW,CAAC,AAAC;YAC7F,IAAIM,QAAQ,EAAE;gBACZ,OAAOA,QAAQ,CAAC;aACjB;SACF,CAAC,OAAM,EAAE;QAEV,mBAAmB;QACnB,IAAI;YACF,MAAMG,aAAa,GAAGP,cAAS,UAAA,CAACC,KAAK,CAACO,gBAAgB,CAAC,IAAI,CAACV,WAAW,CAAC,AAAC;YACzE,MAAMW,IAAI,GAAG,MAAMC,MAAK,QAAA,CAACC,KAAK,CAACC,GAAE,QAAA,CAACC,YAAY,CAACN,aAAa,EAAE,MAAM,CAAC,CAAC,AAAC;YACvE,IAAIE,IAAI,CAACK,kBAAkB,IAAI,CAACL,IAAI,CAACK,kBAAkB,CAACC,UAAU,CAAC,IAAI,CAAC,EAAE;gBACxE,OAAON,IAAI,CAACK,kBAAkB,CAAC;aAChC;SACF,CAAC,OAAM,EAAE;QAEV,OAAO,IAAI,CAAC;KACb;CACF;QAjCYnB,kBAAkB,GAAlBA,kBAAkB"}
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.ensureSimulatorOpenAsync = ensureSimulatorOpenAsync;
|
|
6
|
+
var osascript = _interopRequireWildcard(require("@expo/osascript"));
|
|
7
|
+
var _assert = _interopRequireDefault(require("assert"));
|
|
8
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
9
|
+
var _delay = require("../../../utils/delay");
|
|
10
|
+
var _errors = require("../../../utils/errors");
|
|
11
|
+
var _url = require("../../../utils/url");
|
|
12
|
+
var _deviceManager = require("../DeviceManager");
|
|
13
|
+
var _expoGoInstaller = require("../ExpoGoInstaller");
|
|
14
|
+
var _assertSystemRequirements = require("./assertSystemRequirements");
|
|
15
|
+
var _ensureSimulatorAppRunning = require("./ensureSimulatorAppRunning");
|
|
16
|
+
var _getBestSimulator = require("./getBestSimulator");
|
|
17
|
+
var _promptAppleDevice = require("./promptAppleDevice");
|
|
18
|
+
var SimControl = _interopRequireWildcard(require("./simctl"));
|
|
19
|
+
function _interopRequireDefault(obj) {
|
|
20
|
+
return obj && obj.__esModule ? obj : {
|
|
21
|
+
default: obj
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function _interopRequireWildcard(obj) {
|
|
25
|
+
if (obj && obj.__esModule) {
|
|
26
|
+
return obj;
|
|
27
|
+
} else {
|
|
28
|
+
var newObj = {};
|
|
29
|
+
if (obj != null) {
|
|
30
|
+
for(var key in obj){
|
|
31
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
32
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
33
|
+
if (desc.get || desc.set) {
|
|
34
|
+
Object.defineProperty(newObj, key, desc);
|
|
35
|
+
} else {
|
|
36
|
+
newObj[key] = obj[key];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
newObj.default = obj;
|
|
42
|
+
return newObj;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
const EXPO_GO_BUNDLE_IDENTIFIER = "host.exp.Exponent";
|
|
46
|
+
async function ensureSimulatorOpenAsync({ udid , osType } = {}, tryAgain = true) {
|
|
47
|
+
// Use a default simulator if none was specified
|
|
48
|
+
if (!udid) {
|
|
49
|
+
// If a simulator is open, side step the entire booting sequence.
|
|
50
|
+
const simulatorOpenedByApp = await (0, _getBestSimulator).getBestBootedSimulatorAsync({
|
|
51
|
+
osType
|
|
52
|
+
});
|
|
53
|
+
if (simulatorOpenedByApp) {
|
|
54
|
+
return simulatorOpenedByApp;
|
|
55
|
+
}
|
|
56
|
+
// Otherwise, find the best possible simulator from user defaults and continue
|
|
57
|
+
const bestUdid = await (0, _getBestSimulator).getBestUnbootedSimulatorAsync({
|
|
58
|
+
osType
|
|
59
|
+
});
|
|
60
|
+
if (!bestUdid) {
|
|
61
|
+
throw new _errors.CommandError("No simulators found.");
|
|
62
|
+
}
|
|
63
|
+
udid = bestUdid;
|
|
64
|
+
}
|
|
65
|
+
const bootedDevice = await (0, _delay).waitForActionAsync({
|
|
66
|
+
action: ()=>{
|
|
67
|
+
// Just for the type check.
|
|
68
|
+
(0, _assert).default(udid);
|
|
69
|
+
return SimControl.bootAsync({
|
|
70
|
+
udid
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
if (!bootedDevice) {
|
|
75
|
+
// Give it a second chance, this might not be needed but it could potentially lead to a better UX on slower devices.
|
|
76
|
+
if (tryAgain) {
|
|
77
|
+
return await ensureSimulatorOpenAsync({
|
|
78
|
+
udid,
|
|
79
|
+
osType
|
|
80
|
+
}, false);
|
|
81
|
+
}
|
|
82
|
+
// TODO: We should eliminate all needs for a timeout error, it's bad UX to get an error about the simulator not starting while the user can clearly see it starting on their slow computer.
|
|
83
|
+
throw new _errors.CommandError("SIMULATOR_TIMEOUT", `Simulator didn't boot fast enough. Try opening Simulator first, then running your app.`);
|
|
84
|
+
}
|
|
85
|
+
return bootedDevice;
|
|
86
|
+
}
|
|
87
|
+
class AppleDeviceManager extends _deviceManager.DeviceManager {
|
|
88
|
+
static assertSystemRequirementsAsync = _assertSystemRequirements.assertSystemRequirementsAsync;
|
|
89
|
+
static async resolveAsync({ device , shouldPrompt } = {}) {
|
|
90
|
+
if (shouldPrompt) {
|
|
91
|
+
const devices = await (0, _getBestSimulator).getSelectableSimulatorsAsync(device);
|
|
92
|
+
device = await (0, _promptAppleDevice).promptAppleDeviceAsync(devices, device == null ? void 0 : device.osType);
|
|
93
|
+
}
|
|
94
|
+
const booted = await ensureSimulatorOpenAsync(device);
|
|
95
|
+
return new AppleDeviceManager(booted);
|
|
96
|
+
}
|
|
97
|
+
get name() {
|
|
98
|
+
return this.device.name;
|
|
99
|
+
}
|
|
100
|
+
get identifier() {
|
|
101
|
+
return this.device.udid;
|
|
102
|
+
}
|
|
103
|
+
async getAppVersionAsync(appId) {
|
|
104
|
+
return await SimControl.getInfoPlistValueAsync(this.device, {
|
|
105
|
+
appId,
|
|
106
|
+
key: "CFBundleShortVersionString"
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
async startAsync() {
|
|
110
|
+
return ensureSimulatorOpenAsync({
|
|
111
|
+
osType: this.device.osType,
|
|
112
|
+
udid: this.device.udid
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async launchApplicationIdAsync(appId) {
|
|
116
|
+
try {
|
|
117
|
+
const result = await SimControl.openAppIdAsync(this.device, {
|
|
118
|
+
appId
|
|
119
|
+
});
|
|
120
|
+
if (result.status === 0) {
|
|
121
|
+
await this.activateWindowAsync();
|
|
122
|
+
} else {
|
|
123
|
+
throw new _errors.CommandError(result.stderr);
|
|
124
|
+
}
|
|
125
|
+
} catch (error) {
|
|
126
|
+
let errorMessage = `Couldn't open iOS app with ID "${appId}" on device "${this.name}".`;
|
|
127
|
+
if (error instanceof _errors.CommandError && error.code === "APP_NOT_INSTALLED") {
|
|
128
|
+
errorMessage += `\nThe app might not be installed, try installing it with: ${_chalk.default.bold(`expo run:ios -d ${this.device.udid}`)}`;
|
|
129
|
+
}
|
|
130
|
+
if (error.stderr) {
|
|
131
|
+
errorMessage += _chalk.default.gray(`\n${error.stderr}`);
|
|
132
|
+
} else if (error.message) {
|
|
133
|
+
errorMessage += _chalk.default.gray(`\n${error.message}`);
|
|
134
|
+
}
|
|
135
|
+
throw new _errors.CommandError(errorMessage);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
async installAppAsync(filePath) {
|
|
139
|
+
await SimControl.installAsync(this.device, {
|
|
140
|
+
filePath
|
|
141
|
+
});
|
|
142
|
+
await this.waitForAppInstalledAsync(await this.getApplicationIdFromBundle(filePath));
|
|
143
|
+
}
|
|
144
|
+
async getApplicationIdFromBundle(filePath) {
|
|
145
|
+
// TODO: Implement...
|
|
146
|
+
return EXPO_GO_BUNDLE_IDENTIFIER;
|
|
147
|
+
}
|
|
148
|
+
async waitForAppInstalledAsync(applicationId) {
|
|
149
|
+
while(true){
|
|
150
|
+
if (await this.isAppInstalledAsync(applicationId)) {
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
await (0, _delay).delayAsync(100);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async uninstallAppAsync(appId) {
|
|
157
|
+
await SimControl.uninstallAsync(this.device, {
|
|
158
|
+
appId
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
async isAppInstalledAsync(appId) {
|
|
162
|
+
return !!await SimControl.getContainerPathAsync(this.device, {
|
|
163
|
+
appId
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
async openUrlAsync(url) {
|
|
167
|
+
// Non-compliant URLs will be treated as application identifiers.
|
|
168
|
+
if (!(0, _url).validateUrl(url, {
|
|
169
|
+
requireProtocol: true
|
|
170
|
+
})) {
|
|
171
|
+
return await this.launchApplicationIdAsync(url);
|
|
172
|
+
}
|
|
173
|
+
try {
|
|
174
|
+
await SimControl.openUrlAsync(this.device, {
|
|
175
|
+
url
|
|
176
|
+
});
|
|
177
|
+
} catch (error) {
|
|
178
|
+
// 194 means the device does not conform to a given URL, in this case we'll assume that the desired app is not installed.
|
|
179
|
+
if (error.status === 194) {
|
|
180
|
+
// An error was encountered processing the command (domain=NSOSStatusErrorDomain, code=-10814):
|
|
181
|
+
// The operation couldn’t be completed. (OSStatus error -10814.)
|
|
182
|
+
//
|
|
183
|
+
// This can be thrown when no app conforms to the URI scheme that we attempted to open.
|
|
184
|
+
throw new _errors.CommandError("APP_NOT_INSTALLED", `Device ${this.device.name} (${this.device.udid}) has no app to handle the URI: ${url}`);
|
|
185
|
+
}
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async activateWindowAsync() {
|
|
190
|
+
await (0, _ensureSimulatorAppRunning).ensureSimulatorAppRunningAsync(this.device);
|
|
191
|
+
// TODO: Focus the individual window
|
|
192
|
+
await osascript.execAsync(`tell application "Simulator" to activate`);
|
|
193
|
+
}
|
|
194
|
+
async ensureExpoGoAsync(sdkVersion) {
|
|
195
|
+
const installer = new _expoGoInstaller.ExpoGoInstaller("ios", EXPO_GO_BUNDLE_IDENTIFIER, sdkVersion);
|
|
196
|
+
return installer.ensureAsync(this);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
exports.AppleDeviceManager = AppleDeviceManager;
|
|
200
|
+
|
|
201
|
+
//# sourceMappingURL=AppleDeviceManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/ios/AppleDeviceManager.ts"],"sourcesContent":["import * as osascript from '@expo/osascript';\nimport assert from 'assert';\nimport chalk from 'chalk';\n\nimport { delayAsync, waitForActionAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\nimport { validateUrl } from '../../../utils/url';\nimport { DeviceManager } from '../DeviceManager';\nimport { ExpoGoInstaller } from '../ExpoGoInstaller';\nimport { BaseResolveDeviceProps } from '../PlatformManager';\nimport { assertSystemRequirementsAsync } from './assertSystemRequirements';\nimport { ensureSimulatorAppRunningAsync } from './ensureSimulatorAppRunning';\nimport {\n getBestBootedSimulatorAsync,\n getBestUnbootedSimulatorAsync,\n getSelectableSimulatorsAsync,\n} from './getBestSimulator';\nimport { promptAppleDeviceAsync } from './promptAppleDevice';\nimport * as SimControl from './simctl';\n\nconst EXPO_GO_BUNDLE_IDENTIFIER = 'host.exp.Exponent';\n\n/**\n * Ensure a simulator is booted and the Simulator app is opened.\n * This is where any timeout related error handling should live.\n */\nexport async function ensureSimulatorOpenAsync(\n { udid, osType }: Partial<Pick<SimControl.Device, 'udid' | 'osType'>> = {},\n tryAgain: boolean = true\n): Promise<SimControl.Device> {\n // Use a default simulator if none was specified\n if (!udid) {\n // If a simulator is open, side step the entire booting sequence.\n const simulatorOpenedByApp = await getBestBootedSimulatorAsync({ osType });\n if (simulatorOpenedByApp) {\n return simulatorOpenedByApp;\n }\n\n // Otherwise, find the best possible simulator from user defaults and continue\n const bestUdid = await getBestUnbootedSimulatorAsync({ osType });\n if (!bestUdid) {\n throw new CommandError('No simulators found.');\n }\n udid = bestUdid;\n }\n\n const bootedDevice = await waitForActionAsync({\n action: () => {\n // Just for the type check.\n assert(udid);\n return SimControl.bootAsync({ udid });\n },\n });\n\n if (!bootedDevice) {\n // Give it a second chance, this might not be needed but it could potentially lead to a better UX on slower devices.\n if (tryAgain) {\n return await ensureSimulatorOpenAsync({ udid, osType }, false);\n }\n // TODO: We should eliminate all needs for a timeout error, it's bad UX to get an error about the simulator not starting while the user can clearly see it starting on their slow computer.\n throw new CommandError(\n 'SIMULATOR_TIMEOUT',\n `Simulator didn't boot fast enough. Try opening Simulator first, then running your app.`\n );\n }\n return bootedDevice;\n}\nexport class AppleDeviceManager extends DeviceManager<SimControl.Device> {\n static assertSystemRequirementsAsync = assertSystemRequirementsAsync;\n\n static async resolveAsync({\n device,\n shouldPrompt,\n }: BaseResolveDeviceProps<\n Pick<SimControl.Device, 'udid' | 'osType'>\n > = {}): Promise<AppleDeviceManager> {\n if (shouldPrompt) {\n const devices = await getSelectableSimulatorsAsync(device);\n device = await promptAppleDeviceAsync(devices, device?.osType);\n }\n\n const booted = await ensureSimulatorOpenAsync(device);\n return new AppleDeviceManager(booted);\n }\n\n get name() {\n return this.device.name;\n }\n\n get identifier(): string {\n return this.device.udid;\n }\n\n async getAppVersionAsync(appId: string): Promise<string | null> {\n return await SimControl.getInfoPlistValueAsync(this.device, {\n appId,\n key: 'CFBundleShortVersionString',\n });\n }\n\n async startAsync(): Promise<SimControl.Device> {\n return ensureSimulatorOpenAsync({ osType: this.device.osType, udid: this.device.udid });\n }\n\n async launchApplicationIdAsync(appId: string) {\n try {\n const result = await SimControl.openAppIdAsync(this.device, {\n appId,\n });\n if (result.status === 0) {\n await this.activateWindowAsync();\n } else {\n throw new CommandError(result.stderr);\n }\n } catch (error: any) {\n let errorMessage = `Couldn't open iOS app with ID \"${appId}\" on device \"${this.name}\".`;\n if (error instanceof CommandError && error.code === 'APP_NOT_INSTALLED') {\n errorMessage += `\\nThe app might not be installed, try installing it with: ${chalk.bold(\n `expo run:ios -d ${this.device.udid}`\n )}`;\n }\n if (error.stderr) {\n errorMessage += chalk.gray(`\\n${error.stderr}`);\n } else if (error.message) {\n errorMessage += chalk.gray(`\\n${error.message}`);\n }\n throw new CommandError(errorMessage);\n }\n }\n\n async installAppAsync(filePath: string) {\n await SimControl.installAsync(this.device, {\n filePath,\n });\n\n await this.waitForAppInstalledAsync(await this.getApplicationIdFromBundle(filePath));\n }\n\n private async getApplicationIdFromBundle(filePath: string): Promise<string> {\n // TODO: Implement...\n return EXPO_GO_BUNDLE_IDENTIFIER;\n }\n\n private async waitForAppInstalledAsync(applicationId: string): Promise<boolean> {\n while (true) {\n if (await this.isAppInstalledAsync(applicationId)) {\n return true;\n }\n await delayAsync(100);\n }\n }\n\n async uninstallAppAsync(appId: string) {\n await SimControl.uninstallAsync(this.device, {\n appId,\n });\n }\n\n async isAppInstalledAsync(appId: string) {\n return !!(await SimControl.getContainerPathAsync(this.device, {\n appId,\n }));\n }\n\n async openUrlAsync(url: string) {\n // Non-compliant URLs will be treated as application identifiers.\n if (!validateUrl(url, { requireProtocol: true })) {\n return await this.launchApplicationIdAsync(url);\n }\n\n try {\n await SimControl.openUrlAsync(this.device, { url });\n } catch (error: any) {\n // 194 means the device does not conform to a given URL, in this case we'll assume that the desired app is not installed.\n if (error.status === 194) {\n // An error was encountered processing the command (domain=NSOSStatusErrorDomain, code=-10814):\n // The operation couldn’t be completed. (OSStatus error -10814.)\n //\n // This can be thrown when no app conforms to the URI scheme that we attempted to open.\n throw new CommandError(\n 'APP_NOT_INSTALLED',\n `Device ${this.device.name} (${this.device.udid}) has no app to handle the URI: ${url}`\n );\n }\n throw error;\n }\n }\n\n async activateWindowAsync() {\n await ensureSimulatorAppRunningAsync(this.device);\n // TODO: Focus the individual window\n await osascript.execAsync(`tell application \"Simulator\" to activate`);\n }\n\n async ensureExpoGoAsync(sdkVersion?: string): Promise<boolean> {\n const installer = new ExpoGoInstaller('ios', EXPO_GO_BUNDLE_IDENTIFIER, sdkVersion);\n return installer.ensureAsync(this);\n }\n}\n"],"names":["ensureSimulatorOpenAsync","osascript","SimControl","EXPO_GO_BUNDLE_IDENTIFIER","udid","osType","tryAgain","simulatorOpenedByApp","getBestBootedSimulatorAsync","bestUdid","getBestUnbootedSimulatorAsync","CommandError","bootedDevice","waitForActionAsync","action","assert","bootAsync","AppleDeviceManager","DeviceManager","assertSystemRequirementsAsync","resolveAsync","device","shouldPrompt","devices","getSelectableSimulatorsAsync","promptAppleDeviceAsync","booted","name","identifier","getAppVersionAsync","appId","getInfoPlistValueAsync","key","startAsync","launchApplicationIdAsync","result","openAppIdAsync","status","activateWindowAsync","stderr","error","errorMessage","code","chalk","bold","gray","message","installAppAsync","filePath","installAsync","waitForAppInstalledAsync","getApplicationIdFromBundle","applicationId","isAppInstalledAsync","delayAsync","uninstallAppAsync","uninstallAsync","getContainerPathAsync","openUrlAsync","url","validateUrl","requireProtocol","ensureSimulatorAppRunningAsync","execAsync","ensureExpoGoAsync","sdkVersion","installer","ExpoGoInstaller","ensureAsync"],"mappings":"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"}
|