@expo/cli 0.0.0 → 0.1.2
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 +152 -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 +75 -0
- package/build/src/config/index.js.map +1 -0
- package/build/src/export/createBundles.js +62 -0
- package/build/src/export/createBundles.js.map +1 -0
- package/build/src/export/createMetadataJson.js +36 -0
- package/build/src/export/createMetadataJson.js.map +1 -0
- package/build/src/export/exportApp.js +102 -0
- package/build/src/export/exportApp.js.map +1 -0
- package/build/src/export/exportAssets.js +106 -0
- package/build/src/export/exportAssets.js.map +1 -0
- package/build/src/export/exportAsync.js +49 -0
- package/build/src/export/exportAsync.js.map +1 -0
- package/build/src/export/fork-bundleAsync.js +138 -0
- package/build/src/export/fork-bundleAsync.js.map +1 -0
- package/build/src/export/getPublicExpoManifest.js +28 -0
- package/build/src/export/getPublicExpoManifest.js.map +1 -0
- package/build/src/export/getResolvedLocales.js +35 -0
- package/build/src/export/getResolvedLocales.js.map +1 -0
- package/build/src/export/index.js +77 -0
- package/build/src/export/index.js.map +1 -0
- package/build/src/export/printBundleSizes.js +122 -0
- package/build/src/export/printBundleSizes.js.map +1 -0
- package/build/src/export/resolveOptions.js +24 -0
- package/build/src/export/resolveOptions.js.map +1 -0
- package/build/src/export/saveAssets.js +65 -0
- package/build/src/export/saveAssets.js.map +1 -0
- package/build/src/export/writeContents.js +108 -0
- package/build/src/export/writeContents.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 +49 -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 +62 -0
- package/build/src/login/index.js.map +1 -0
- package/build/src/logout/index.js +48 -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 +90 -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 +48 -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/run/android/index.js +97 -0
- package/build/src/run/android/index.js.map +1 -0
- package/build/src/run/android/resolveDevice.js +23 -0
- package/build/src/run/android/resolveDevice.js.map +1 -0
- package/build/src/run/android/resolveGradleProps.js +37 -0
- package/build/src/run/android/resolveGradleProps.js.map +1 -0
- package/build/src/run/android/resolveInstallApkName.js +72 -0
- package/build/src/run/android/resolveInstallApkName.js.map +1 -0
- package/build/src/run/android/resolveLaunchProps.js +32 -0
- package/build/src/run/android/resolveLaunchProps.js.map +1 -0
- package/build/src/run/android/resolveOptions.js +25 -0
- package/build/src/run/android/resolveOptions.js.map +1 -0
- package/build/src/run/android/runAndroidAsync.js +74 -0
- package/build/src/run/android/runAndroidAsync.js.map +1 -0
- package/build/src/run/ensureNativeProject.js +33 -0
- package/build/src/run/ensureNativeProject.js.map +1 -0
- package/build/src/run/hints.js +22 -0
- package/build/src/run/hints.js.map +1 -0
- package/build/src/run/resolveBundlerProps.js +31 -0
- package/build/src/run/resolveBundlerProps.js.map +1 -0
- package/build/src/run/startBundler.js +76 -0
- package/build/src/run/startBundler.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 +116 -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 +111 -0
- package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
- package/build/src/start/platforms/PlatformManager.js +121 -0
- package/build/src/start/platforms/PlatformManager.js.map +1 -0
- package/build/src/start/platforms/android/ADBServer.js +129 -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 +183 -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 +80 -0
- package/build/src/start/platforms/android/activateWindow.js.map +1 -0
- package/build/src/start/platforms/android/adb.js +263 -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/gradle.js +86 -0
- package/build/src/start/platforms/android/gradle.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 +312 -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 +159 -0
- package/build/src/start/server/UrlCreator.js.map +1 -0
- package/build/src/start/server/metro/MetroBundlerDevServer.js +97 -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 +66 -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 +110 -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 +299 -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 +77 -0
- package/build/src/utils/args.js.map +1 -0
- package/build/src/utils/array.js +56 -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 +38 -0
- package/build/src/utils/dir.js.map +1 -0
- package/build/src/utils/downloadAppAsync.js +74 -0
- package/build/src/utils/downloadAppAsync.js.map +1 -0
- package/build/src/utils/downloadExpoGoAsync.js +99 -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 +62 -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/resolveArgs.js +94 -0
- package/build/src/utils/resolveArgs.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 +47 -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 +132 -4
- package/static/loading-page/index.html +270 -0
- package/index.js +0 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", {
|
|
3
|
+
value: true
|
|
4
|
+
});
|
|
5
|
+
exports.getServer = getServer;
|
|
6
|
+
exports.logUnauthorized = logUnauthorized;
|
|
7
|
+
exports.isPackageInstalledAsync = isPackageInstalledAsync;
|
|
8
|
+
exports.launchActivityAsync = launchActivityAsync;
|
|
9
|
+
exports.openAppIdAsync = openAppIdAsync;
|
|
10
|
+
exports.openUrlAsync = openUrlAsync;
|
|
11
|
+
exports.uninstallAsync = uninstallAsync;
|
|
12
|
+
exports.getPackageInfoAsync = getPackageInfoAsync;
|
|
13
|
+
exports.installAsync = installAsync;
|
|
14
|
+
exports.adbArgs = adbArgs;
|
|
15
|
+
exports.getAttachedDevicesAsync = getAttachedDevicesAsync;
|
|
16
|
+
exports.getAdbNameForDeviceIdAsync = getAdbNameForDeviceIdAsync;
|
|
17
|
+
exports.isDeviceBootedAsync = isDeviceBootedAsync;
|
|
18
|
+
exports.isBootAnimationCompleteAsync = isBootAnimationCompleteAsync;
|
|
19
|
+
exports.getDeviceABIsAsync = getDeviceABIsAsync;
|
|
20
|
+
exports.getPropertyDataForDeviceAsync = getPropertyDataForDeviceAsync;
|
|
21
|
+
exports.DeviceABI = void 0;
|
|
22
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
23
|
+
var _os = _interopRequireDefault(require("os"));
|
|
24
|
+
var Log = _interopRequireWildcard(require("../../../log"));
|
|
25
|
+
var _errors = require("../../../utils/errors");
|
|
26
|
+
var _link = require("../../../utils/link");
|
|
27
|
+
var _adbserver = require("./ADBServer");
|
|
28
|
+
function _interopRequireDefault(obj) {
|
|
29
|
+
return obj && obj.__esModule ? obj : {
|
|
30
|
+
default: obj
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
function _interopRequireWildcard(obj) {
|
|
34
|
+
if (obj && obj.__esModule) {
|
|
35
|
+
return obj;
|
|
36
|
+
} else {
|
|
37
|
+
var newObj = {};
|
|
38
|
+
if (obj != null) {
|
|
39
|
+
for(var key in obj){
|
|
40
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
41
|
+
var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
|
|
42
|
+
if (desc.get || desc.set) {
|
|
43
|
+
Object.defineProperty(newObj, key, desc);
|
|
44
|
+
} else {
|
|
45
|
+
newObj[key] = obj[key];
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
newObj.default = obj;
|
|
51
|
+
return newObj;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
var DeviceABI;
|
|
55
|
+
exports.DeviceABI = DeviceABI;
|
|
56
|
+
(function(DeviceABI) {
|
|
57
|
+
DeviceABI[// The arch specific android target platforms are soft-deprecated.
|
|
58
|
+
// Instead of using TargetPlatform as a combination arch + platform
|
|
59
|
+
// the code will be updated to carry arch information in [DarwinArch]
|
|
60
|
+
// and [AndroidArch].
|
|
61
|
+
"arm"] = "arm";
|
|
62
|
+
DeviceABI["arm64"] = "arm64";
|
|
63
|
+
DeviceABI["x64"] = "x64";
|
|
64
|
+
DeviceABI["x86"] = "x86";
|
|
65
|
+
DeviceABI["armeabiV7a"] = "armeabi-v7a";
|
|
66
|
+
DeviceABI["armeabi"] = "armeabi";
|
|
67
|
+
DeviceABI["universal"] = "universal";
|
|
68
|
+
})(DeviceABI || (exports.DeviceABI = DeviceABI = {}));
|
|
69
|
+
const CANT_START_ACTIVITY_ERROR = "Activity not started, unable to resolve Intent";
|
|
70
|
+
// http://developer.android.com/ndk/guides/abis.html
|
|
71
|
+
const PROP_CPU_NAME = "ro.product.cpu.abi";
|
|
72
|
+
const PROP_CPU_ABI_LIST_NAME = "ro.product.cpu.abilist";
|
|
73
|
+
// Can sometimes be null
|
|
74
|
+
// http://developer.android.com/ndk/guides/abis.html
|
|
75
|
+
const PROP_BOOT_ANIMATION_STATE = "init.svc.bootanim";
|
|
76
|
+
let _server;
|
|
77
|
+
function getServer() {
|
|
78
|
+
_server != null ? _server : _server = new _adbserver.ADBServer();
|
|
79
|
+
return _server;
|
|
80
|
+
}
|
|
81
|
+
function logUnauthorized(device) {
|
|
82
|
+
Log.warn(`\nThis computer is not authorized for developing on ${_chalk.default.bold(device.name)}. ${_chalk.default.dim((0, _link).learnMore("https://expo.fyi/authorize-android-device"))}`);
|
|
83
|
+
}
|
|
84
|
+
async function isPackageInstalledAsync(device, androidPackage) {
|
|
85
|
+
const packages = await getServer().runAsync(adbArgs(device.pid, "shell", "pm", "list", "packages", androidPackage));
|
|
86
|
+
const lines = packages.split(/\r?\n/);
|
|
87
|
+
for(let i = 0; i < lines.length; i++){
|
|
88
|
+
const line = lines[i].trim();
|
|
89
|
+
if (line === `package:${androidPackage}`) {
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
async function launchActivityAsync(device, { launchActivity }) {
|
|
96
|
+
return openAsync(adbArgs(device.pid, "shell", "am", "start", "-a", "android.intent.action.RUN", // FLAG_ACTIVITY_SINGLE_TOP -- If set, the activity will not be launched if it is already running at the top of the history stack.
|
|
97
|
+
"-f", "0x20000000", // Activity to open first: com.bacon.app/.MainActivity
|
|
98
|
+
"-n", launchActivity));
|
|
99
|
+
}
|
|
100
|
+
async function openAppIdAsync(device, { applicationId }) {
|
|
101
|
+
return openAsync(adbArgs(device.pid, "shell", "monkey", "-p", applicationId, "-c", "android.intent.category.LAUNCHER", "1"));
|
|
102
|
+
}
|
|
103
|
+
async function openUrlAsync(device, { url }) {
|
|
104
|
+
return openAsync(adbArgs(device.pid, "shell", "am", "start", "-a", "android.intent.action.VIEW", "-d", url));
|
|
105
|
+
}
|
|
106
|
+
/** Runs a generic command watches for common errors in order to throw with an expected code. */ async function openAsync(args) {
|
|
107
|
+
const results = await getServer().runAsync(args);
|
|
108
|
+
if (results.includes(CANT_START_ACTIVITY_ERROR) || results.match(/Error: Activity class .* does not exist\./g)) {
|
|
109
|
+
throw new _errors.CommandError("APP_NOT_INSTALLED", results.substring(results.indexOf("Error: ")));
|
|
110
|
+
}
|
|
111
|
+
return results;
|
|
112
|
+
}
|
|
113
|
+
async function uninstallAsync(device, { appId }) {
|
|
114
|
+
return await getServer().runAsync(adbArgs(device.pid, "uninstall", appId));
|
|
115
|
+
}
|
|
116
|
+
async function getPackageInfoAsync(device, { appId }) {
|
|
117
|
+
return await getServer().runAsync(adbArgs(device.pid, "shell", "dumpsys", "package", appId));
|
|
118
|
+
}
|
|
119
|
+
async function installAsync(device, { filePath }) {
|
|
120
|
+
// TODO: Handle the `INSTALL_FAILED_INSUFFICIENT_STORAGE` error.
|
|
121
|
+
return await getServer().runAsync(adbArgs(device.pid, "install", "-r", "-d", filePath));
|
|
122
|
+
}
|
|
123
|
+
function adbArgs(pid, ...options) {
|
|
124
|
+
const args = [];
|
|
125
|
+
if (pid) {
|
|
126
|
+
args.push("-s", pid);
|
|
127
|
+
}
|
|
128
|
+
return args.concat(options);
|
|
129
|
+
}
|
|
130
|
+
async function getAttachedDevicesAsync() {
|
|
131
|
+
const output = await getServer().runAsync([
|
|
132
|
+
"devices",
|
|
133
|
+
"-l"
|
|
134
|
+
]);
|
|
135
|
+
const splitItems = output.trim().replace(/\n$/, "").split(_os.default.EOL);
|
|
136
|
+
// First line is `"List of devices attached"`, remove it
|
|
137
|
+
// @ts-ignore: todo
|
|
138
|
+
const attachedDevices = splitItems.slice(1, splitItems.length).map((line)=>{
|
|
139
|
+
// unauthorized: ['FA8251A00719', 'unauthorized', 'usb:338690048X', 'transport_id:5']
|
|
140
|
+
// authorized: ['FA8251A00719', 'device', 'usb:336592896X', 'product:walleye', 'model:Pixel_2', 'device:walleye', 'transport_id:4']
|
|
141
|
+
// emulator: ['emulator-5554', 'offline', 'transport_id:1']
|
|
142
|
+
const props = line.split(" ").filter(Boolean);
|
|
143
|
+
const isAuthorized = props[1] !== "unauthorized";
|
|
144
|
+
const type = line.includes("emulator") ? "emulator" : "device";
|
|
145
|
+
return {
|
|
146
|
+
props,
|
|
147
|
+
type,
|
|
148
|
+
isAuthorized
|
|
149
|
+
};
|
|
150
|
+
}).filter(({ props: [pid] })=>!!pid
|
|
151
|
+
);
|
|
152
|
+
const devicePromises = attachedDevices.map(async (props)=>{
|
|
153
|
+
const { type , props: [pid, ...deviceInfo] , isAuthorized , } = props;
|
|
154
|
+
let name = null;
|
|
155
|
+
if (type === "device") {
|
|
156
|
+
if (isAuthorized) {
|
|
157
|
+
// Possibly formatted like `model:Pixel_2`
|
|
158
|
+
// Transform to `Pixel_2`
|
|
159
|
+
const modelItem = deviceInfo.find((info)=>info.includes("model:")
|
|
160
|
+
);
|
|
161
|
+
if (modelItem) {
|
|
162
|
+
name = modelItem.replace("model:", "");
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// unauthorized devices don't have a name available to read
|
|
166
|
+
if (!name) {
|
|
167
|
+
// Device FA8251A00719
|
|
168
|
+
name = `Device ${pid}`;
|
|
169
|
+
}
|
|
170
|
+
} else {
|
|
171
|
+
var ref;
|
|
172
|
+
// Given an emulator pid, get the emulator name which can be used to start the emulator later.
|
|
173
|
+
name = (ref = await getAdbNameForDeviceIdAsync({
|
|
174
|
+
pid
|
|
175
|
+
})) != null ? ref : "";
|
|
176
|
+
}
|
|
177
|
+
return {
|
|
178
|
+
pid,
|
|
179
|
+
name,
|
|
180
|
+
type,
|
|
181
|
+
isAuthorized,
|
|
182
|
+
isBooted: true
|
|
183
|
+
};
|
|
184
|
+
});
|
|
185
|
+
return Promise.all(devicePromises);
|
|
186
|
+
}
|
|
187
|
+
async function getAdbNameForDeviceIdAsync(device) {
|
|
188
|
+
const results = await getServer().runAsync(adbArgs(device.pid, "emu", "avd", "name"));
|
|
189
|
+
if (results.match(/could not connect to TCP port .*: Connection refused/)) {
|
|
190
|
+
// Can also occur when the emulator does not exist.
|
|
191
|
+
throw new _errors.CommandError("EMULATOR_NOT_FOUND", results);
|
|
192
|
+
}
|
|
193
|
+
var ref;
|
|
194
|
+
return (ref = results.trim().split(/\r?\n/).shift()) != null ? ref : null;
|
|
195
|
+
}
|
|
196
|
+
async function isDeviceBootedAsync({ name } = {}) {
|
|
197
|
+
const devices = await getAttachedDevicesAsync();
|
|
198
|
+
if (!name) {
|
|
199
|
+
var ref;
|
|
200
|
+
return (ref = devices[0]) != null ? ref : null;
|
|
201
|
+
}
|
|
202
|
+
var ref1;
|
|
203
|
+
return (ref1 = devices.find((device)=>device.name === name
|
|
204
|
+
)) != null ? ref1 : null;
|
|
205
|
+
}
|
|
206
|
+
async function isBootAnimationCompleteAsync(pid) {
|
|
207
|
+
try {
|
|
208
|
+
const props = await getPropertyDataForDeviceAsync({
|
|
209
|
+
pid
|
|
210
|
+
}, PROP_BOOT_ANIMATION_STATE);
|
|
211
|
+
return !!props[PROP_BOOT_ANIMATION_STATE].match(/stopped/);
|
|
212
|
+
} catch {
|
|
213
|
+
return false;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
async function getDeviceABIsAsync(device) {
|
|
217
|
+
const cpuAbiList = (await getPropertyDataForDeviceAsync(device, PROP_CPU_ABI_LIST_NAME))[PROP_CPU_ABI_LIST_NAME];
|
|
218
|
+
if (cpuAbiList) {
|
|
219
|
+
return cpuAbiList.trim().split(",");
|
|
220
|
+
}
|
|
221
|
+
const abi = (await getPropertyDataForDeviceAsync(device, PROP_CPU_NAME))[PROP_CPU_NAME];
|
|
222
|
+
return [
|
|
223
|
+
abi
|
|
224
|
+
];
|
|
225
|
+
}
|
|
226
|
+
async function getPropertyDataForDeviceAsync(device, prop) {
|
|
227
|
+
// @ts-ignore
|
|
228
|
+
const propCommand = adbArgs(...[
|
|
229
|
+
device.pid,
|
|
230
|
+
"shell",
|
|
231
|
+
"getprop",
|
|
232
|
+
prop
|
|
233
|
+
].filter(Boolean));
|
|
234
|
+
try {
|
|
235
|
+
// Prevent reading as UTF8.
|
|
236
|
+
const results = await getServer().getFileOutputAsync(propCommand);
|
|
237
|
+
// Like:
|
|
238
|
+
// [wifi.direct.interface]: [p2p-dev-wlan0]
|
|
239
|
+
// [wifi.interface]: [wlan0]
|
|
240
|
+
if (prop) {
|
|
241
|
+
Log.debug(`[ADB] property data: (device pid: ${device.pid}, prop: ${prop}, data: ${results})`);
|
|
242
|
+
return {
|
|
243
|
+
[prop]: results
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
const props = parseAdbDeviceProperties(results);
|
|
247
|
+
Log.debug(`[ADB] parsed data:`, props);
|
|
248
|
+
return props;
|
|
249
|
+
} catch (error) {
|
|
250
|
+
// TODO: Ensure error has message and not stderr
|
|
251
|
+
throw new _errors.CommandError(`Failed to get properties for device (${device.pid}): ${error.message}`);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
function parseAdbDeviceProperties(devicePropertiesString) {
|
|
255
|
+
const properties = {};
|
|
256
|
+
const propertyExp = /\[(.*?)\]: \[(.*?)\]/gm;
|
|
257
|
+
for (const match of devicePropertiesString.matchAll(propertyExp)){
|
|
258
|
+
properties[match[1]] = match[2];
|
|
259
|
+
}
|
|
260
|
+
return properties;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
//# sourceMappingURL=adb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../../src/start/platforms/android/adb.ts"],"sourcesContent":["import chalk from 'chalk';\nimport os from 'os';\n\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\nimport { learnMore } from '../../../utils/link';\nimport { ADBServer } from './ADBServer';\n\nexport enum DeviceABI {\n // The arch specific android target platforms are soft-deprecated.\n // Instead of using TargetPlatform as a combination arch + platform\n // the code will be updated to carry arch information in [DarwinArch]\n // and [AndroidArch].\n arm = 'arm',\n arm64 = 'arm64',\n x64 = 'x64',\n x86 = 'x86',\n armeabiV7a = 'armeabi-v7a',\n armeabi = 'armeabi',\n universal = 'universal',\n}\n\n/** Represents a connected Android device. */\nexport type Device = {\n /** Process ID. */\n pid?: string;\n /** Name of the device, also used as the ID for opening devices. */\n name: string;\n /** Is emulator or connected device. */\n type: 'emulator' | 'device';\n /** Is the device booted (emulator). */\n isBooted: boolean;\n /** Is device authorized for developing. https://expo.fyi/authorize-android-device */\n isAuthorized: boolean;\n};\n\ntype DeviceContext = Pick<Device, 'pid'>;\n\ntype DeviceProperties = Record<string, string>;\n\nconst CANT_START_ACTIVITY_ERROR = 'Activity not started, unable to resolve Intent';\n// http://developer.android.com/ndk/guides/abis.html\nconst PROP_CPU_NAME = 'ro.product.cpu.abi';\n\nconst PROP_CPU_ABI_LIST_NAME = 'ro.product.cpu.abilist';\n\n// Can sometimes be null\n// http://developer.android.com/ndk/guides/abis.html\nconst PROP_BOOT_ANIMATION_STATE = 'init.svc.bootanim';\n\nlet _server: ADBServer | null;\n\n/** Return the lazily loaded ADB server instance. */\nexport function getServer() {\n _server ??= new ADBServer();\n return _server;\n}\n\n/** Logs an FYI message about authorizing your device. */\nexport function logUnauthorized(device: Device) {\n Log.warn(\n `\\nThis computer is not authorized for developing on ${chalk.bold(device.name)}. ${chalk.dim(\n learnMore('https://expo.fyi/authorize-android-device')\n )}`\n );\n}\n\n/** Returns true if the provided package name is installed on the provided Android device. */\nexport async function isPackageInstalledAsync(\n device: DeviceContext,\n androidPackage: string\n): Promise<boolean> {\n const packages = await getServer().runAsync(\n adbArgs(device.pid, 'shell', 'pm', 'list', 'packages', androidPackage)\n );\n\n const lines = packages.split(/\\r?\\n/);\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n if (line === `package:${androidPackage}`) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.launchActivity Activity to launch `[application identifier]/.[main activity name]`, ex: `com.bacon.app/.MainActivity`\n */\nexport async function launchActivityAsync(\n device: DeviceContext,\n {\n launchActivity,\n }: {\n launchActivity: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'am',\n 'start',\n '-a',\n 'android.intent.action.RUN',\n // FLAG_ACTIVITY_SINGLE_TOP -- If set, the activity will not be launched if it is already running at the top of the history stack.\n '-f',\n '0x20000000',\n // Activity to open first: com.bacon.app/.MainActivity\n '-n',\n launchActivity\n )\n );\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.applicationId package name to launch.\n */\nexport async function openAppIdAsync(\n device: DeviceContext,\n {\n applicationId,\n }: {\n applicationId: string;\n }\n) {\n return openAsync(\n adbArgs(\n device.pid,\n 'shell',\n 'monkey',\n '-p',\n applicationId,\n '-c',\n 'android.intent.category.LAUNCHER',\n '1'\n )\n );\n}\n\n/**\n * @param device.pid Process ID of the Android device to launch.\n * @param props.url URL to launch.\n */\nexport async function openUrlAsync(\n device: DeviceContext,\n {\n url,\n }: {\n url: string;\n }\n) {\n return openAsync(\n adbArgs(device.pid, 'shell', 'am', 'start', '-a', 'android.intent.action.VIEW', '-d', url)\n );\n}\n\n/** Runs a generic command watches for common errors in order to throw with an expected code. */\nasync function openAsync(args: string[]): Promise<string> {\n const results = await getServer().runAsync(args);\n if (\n results.includes(CANT_START_ACTIVITY_ERROR) ||\n results.match(/Error: Activity class .* does not exist\\./g)\n ) {\n throw new CommandError('APP_NOT_INSTALLED', results.substring(results.indexOf('Error: ')));\n }\n return results;\n}\n\n/** Uninstall an app given its Android package name. */\nexport async function uninstallAsync(\n device: DeviceContext,\n { appId }: { appId: string }\n): Promise<string> {\n return await getServer().runAsync(adbArgs(device.pid, 'uninstall', appId));\n}\n\n/** Get package info from an app based on its Android package name. */\nexport async function getPackageInfoAsync(\n device: DeviceContext,\n { appId }: { appId: string }\n): Promise<string> {\n return await getServer().runAsync(adbArgs(device.pid, 'shell', 'dumpsys', 'package', appId));\n}\n\n/** Install an app on a connected device. */\nexport async function installAsync(device: DeviceContext, { filePath }: { filePath: string }) {\n // TODO: Handle the `INSTALL_FAILED_INSUFFICIENT_STORAGE` error.\n return await getServer().runAsync(adbArgs(device.pid, 'install', '-r', '-d', filePath));\n}\n\n/** Format ADB args with process ID. */\nexport function adbArgs(pid: Device['pid'], ...options: string[]): string[] {\n const args = [];\n if (pid) {\n args.push('-s', pid);\n }\n return args.concat(options);\n}\n\n// TODO: This is very expensive for some operations.\nexport async function getAttachedDevicesAsync(): Promise<Device[]> {\n const output = await getServer().runAsync(['devices', '-l']);\n\n const splitItems = output.trim().replace(/\\n$/, '').split(os.EOL);\n // First line is `\"List of devices attached\"`, remove it\n // @ts-ignore: todo\n const attachedDevices: {\n props: string[];\n type: Device['type'];\n isAuthorized: Device['isAuthorized'];\n }[] = splitItems\n .slice(1, splitItems.length)\n .map((line) => {\n // unauthorized: ['FA8251A00719', 'unauthorized', 'usb:338690048X', 'transport_id:5']\n // authorized: ['FA8251A00719', 'device', 'usb:336592896X', 'product:walleye', 'model:Pixel_2', 'device:walleye', 'transport_id:4']\n // emulator: ['emulator-5554', 'offline', 'transport_id:1']\n const props = line.split(' ').filter(Boolean);\n\n const isAuthorized = props[1] !== 'unauthorized';\n const type = line.includes('emulator') ? 'emulator' : 'device';\n return { props, type, isAuthorized };\n })\n .filter(({ props: [pid] }) => !!pid);\n\n const devicePromises = attachedDevices.map<Promise<Device>>(async (props) => {\n const {\n type,\n props: [pid, ...deviceInfo],\n isAuthorized,\n } = props;\n\n let name: string | null = null;\n\n if (type === 'device') {\n if (isAuthorized) {\n // Possibly formatted like `model:Pixel_2`\n // Transform to `Pixel_2`\n const modelItem = deviceInfo.find((info) => info.includes('model:'));\n if (modelItem) {\n name = modelItem.replace('model:', '');\n }\n }\n // unauthorized devices don't have a name available to read\n if (!name) {\n // Device FA8251A00719\n name = `Device ${pid}`;\n }\n } else {\n // Given an emulator pid, get the emulator name which can be used to start the emulator later.\n name = (await getAdbNameForDeviceIdAsync({ pid })) ?? '';\n }\n\n return {\n pid,\n name,\n type,\n isAuthorized,\n isBooted: true,\n };\n });\n\n return Promise.all(devicePromises);\n}\n\n/**\n * Return the Emulator name for an emulator ID, this can be used to determine if an emulator is booted.\n *\n * @param device.pid a value like `emulator-5554` from `abd devices`\n */\nexport async function getAdbNameForDeviceIdAsync(device: DeviceContext): Promise<string | null> {\n const results = await getServer().runAsync(adbArgs(device.pid, 'emu', 'avd', 'name'));\n\n if (results.match(/could not connect to TCP port .*: Connection refused/)) {\n // Can also occur when the emulator does not exist.\n throw new CommandError('EMULATOR_NOT_FOUND', results);\n }\n\n return results.trim().split(/\\r?\\n/).shift() ?? null;\n}\n\nexport async function isDeviceBootedAsync({\n name,\n}: { name?: string } = {}): Promise<Device | null> {\n const devices = await getAttachedDevicesAsync();\n\n if (!name) {\n return devices[0] ?? null;\n }\n\n return devices.find((device) => device.name === name) ?? null;\n}\n\n/**\n * Returns true when a device's splash screen animation has stopped.\n * This can be used to detect when a device is fully booted and ready to use.\n *\n * @param pid\n */\nexport async function isBootAnimationCompleteAsync(pid?: string): Promise<boolean> {\n try {\n const props = await getPropertyDataForDeviceAsync({ pid }, PROP_BOOT_ANIMATION_STATE);\n return !!props[PROP_BOOT_ANIMATION_STATE].match(/stopped/);\n } catch {\n return false;\n }\n}\n\n/** Get a list of ABIs for the provided device. */\nexport async function getDeviceABIsAsync(\n device: Pick<Device, 'name' | 'pid'>\n): Promise<DeviceABI[]> {\n const cpuAbiList = (await getPropertyDataForDeviceAsync(device, PROP_CPU_ABI_LIST_NAME))[\n PROP_CPU_ABI_LIST_NAME\n ];\n\n if (cpuAbiList) {\n return cpuAbiList.trim().split(',') as DeviceABI[];\n }\n\n const abi = (await getPropertyDataForDeviceAsync(device, PROP_CPU_NAME))[\n PROP_CPU_NAME\n ] as DeviceABI;\n return [abi];\n}\n\nexport async function getPropertyDataForDeviceAsync(\n device: DeviceContext,\n prop?: string\n): Promise<DeviceProperties> {\n // @ts-ignore\n const propCommand = adbArgs(...[device.pid, 'shell', 'getprop', prop].filter(Boolean));\n try {\n // Prevent reading as UTF8.\n const results = await getServer().getFileOutputAsync(propCommand);\n // Like:\n // [wifi.direct.interface]: [p2p-dev-wlan0]\n // [wifi.interface]: [wlan0]\n\n if (prop) {\n Log.debug(\n `[ADB] property data: (device pid: ${device.pid}, prop: ${prop}, data: ${results})`\n );\n return {\n [prop]: results,\n };\n }\n const props = parseAdbDeviceProperties(results);\n\n Log.debug(`[ADB] parsed data:`, props);\n\n return props;\n } catch (error: any) {\n // TODO: Ensure error has message and not stderr\n throw new CommandError(`Failed to get properties for device (${device.pid}): ${error.message}`);\n }\n}\n\nfunction parseAdbDeviceProperties(devicePropertiesString: string) {\n const properties: DeviceProperties = {};\n const propertyExp = /\\[(.*?)\\]: \\[(.*?)\\]/gm;\n for (const match of devicePropertiesString.matchAll(propertyExp)) {\n properties[match[1]] = match[2];\n }\n return properties;\n}\n"],"names":["getServer","logUnauthorized","isPackageInstalledAsync","launchActivityAsync","openAppIdAsync","openUrlAsync","uninstallAsync","getPackageInfoAsync","installAsync","adbArgs","getAttachedDevicesAsync","getAdbNameForDeviceIdAsync","isDeviceBootedAsync","isBootAnimationCompleteAsync","getDeviceABIsAsync","getPropertyDataForDeviceAsync","Log","DeviceABI","arm","arm64","x64","x86","armeabiV7a","armeabi","universal","CANT_START_ACTIVITY_ERROR","PROP_CPU_NAME","PROP_CPU_ABI_LIST_NAME","PROP_BOOT_ANIMATION_STATE","_server","ADBServer","device","warn","chalk","bold","name","dim","learnMore","androidPackage","packages","runAsync","pid","lines","split","i","length","line","trim","launchActivity","openAsync","applicationId","url","args","results","includes","match","CommandError","substring","indexOf","appId","filePath","options","push","concat","output","splitItems","replace","os","EOL","attachedDevices","slice","map","props","filter","Boolean","isAuthorized","type","devicePromises","deviceInfo","modelItem","find","info","isBooted","Promise","all","shift","devices","cpuAbiList","abi","prop","propCommand","getFileOutputAsync","debug","parseAdbDeviceProperties","error","message","devicePropertiesString","properties","propertyExp","matchAll"],"mappings":"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"}
|
|
@@ -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"}
|