@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.
Files changed (388) hide show
  1. package/README.md +106 -0
  2. package/build/bin/cli +152 -0
  3. package/build/bin/cli.map +1 -0
  4. package/build/src/api/endpoint.js +17 -0
  5. package/build/src/api/endpoint.js.map +1 -0
  6. package/build/src/api/getExpoGoIntermediateCertificate.js +21 -0
  7. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -0
  8. package/build/src/api/getExpoSchema.js +69 -0
  9. package/build/src/api/getExpoSchema.js.map +1 -0
  10. package/build/src/api/getNativeModuleVersions.js +31 -0
  11. package/build/src/api/getNativeModuleVersions.js.map +1 -0
  12. package/build/src/api/getProject.js +19 -0
  13. package/build/src/api/getProject.js.map +1 -0
  14. package/build/src/api/getProjectDevelopmentCertificate.js +24 -0
  15. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -0
  16. package/build/src/api/getVersions.js +37 -0
  17. package/build/src/api/getVersions.js.map +1 -0
  18. package/build/src/api/graphql/client.js +104 -0
  19. package/build/src/api/graphql/client.js.map +1 -0
  20. package/build/src/api/graphql/generated.js +113 -0
  21. package/build/src/api/graphql/generated.js.map +1 -0
  22. package/build/src/api/graphql/queries/UserQuery.js +43 -0
  23. package/build/src/api/graphql/queries/UserQuery.js.map +1 -0
  24. package/build/src/api/rest/cache/FileSystemCache.js +79 -0
  25. package/build/src/api/rest/cache/FileSystemCache.js.map +1 -0
  26. package/build/src/api/rest/cache/response.js +31 -0
  27. package/build/src/api/rest/cache/response.js.map +1 -0
  28. package/build/src/api/rest/cache/wrapFetchWithCache.js +156 -0
  29. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -0
  30. package/build/src/api/rest/client.js +94 -0
  31. package/build/src/api/rest/client.js.map +1 -0
  32. package/build/src/api/rest/client.types.js +6 -0
  33. package/build/src/api/rest/client.types.js.map +1 -0
  34. package/build/src/api/rest/wrapFetchWithBaseUrl.js +20 -0
  35. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -0
  36. package/build/src/api/rest/wrapFetchWithOffline.js +39 -0
  37. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -0
  38. package/build/src/api/rest/wrapFetchWithProgress.js +59 -0
  39. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -0
  40. package/build/src/api/settings.js +11 -0
  41. package/build/src/api/settings.js.map +1 -0
  42. package/build/src/api/signManifest.js +38 -0
  43. package/build/src/api/signManifest.js.map +1 -0
  44. package/build/src/api/updateDevelopmentSession.js +74 -0
  45. package/build/src/api/updateDevelopmentSession.js.map +1 -0
  46. package/build/src/api/user/UserSettings.js +71 -0
  47. package/build/src/api/user/UserSettings.js.map +1 -0
  48. package/build/src/api/user/actions.js +97 -0
  49. package/build/src/api/user/actions.js.map +1 -0
  50. package/build/src/api/user/otp.js +139 -0
  51. package/build/src/api/user/otp.js.map +1 -0
  52. package/build/src/api/user/user.js +114 -0
  53. package/build/src/api/user/user.js.map +1 -0
  54. package/build/src/config/configAsync.js +118 -0
  55. package/build/src/config/configAsync.js.map +1 -0
  56. package/build/src/config/index.js +75 -0
  57. package/build/src/config/index.js.map +1 -0
  58. package/build/src/export/createBundles.js +62 -0
  59. package/build/src/export/createBundles.js.map +1 -0
  60. package/build/src/export/createMetadataJson.js +36 -0
  61. package/build/src/export/createMetadataJson.js.map +1 -0
  62. package/build/src/export/exportApp.js +102 -0
  63. package/build/src/export/exportApp.js.map +1 -0
  64. package/build/src/export/exportAssets.js +106 -0
  65. package/build/src/export/exportAssets.js.map +1 -0
  66. package/build/src/export/exportAsync.js +49 -0
  67. package/build/src/export/exportAsync.js.map +1 -0
  68. package/build/src/export/fork-bundleAsync.js +138 -0
  69. package/build/src/export/fork-bundleAsync.js.map +1 -0
  70. package/build/src/export/getPublicExpoManifest.js +28 -0
  71. package/build/src/export/getPublicExpoManifest.js.map +1 -0
  72. package/build/src/export/getResolvedLocales.js +35 -0
  73. package/build/src/export/getResolvedLocales.js.map +1 -0
  74. package/build/src/export/index.js +77 -0
  75. package/build/src/export/index.js.map +1 -0
  76. package/build/src/export/printBundleSizes.js +122 -0
  77. package/build/src/export/printBundleSizes.js.map +1 -0
  78. package/build/src/export/resolveOptions.js +24 -0
  79. package/build/src/export/resolveOptions.js.map +1 -0
  80. package/build/src/export/saveAssets.js +65 -0
  81. package/build/src/export/saveAssets.js.map +1 -0
  82. package/build/src/export/writeContents.js +108 -0
  83. package/build/src/export/writeContents.js.map +1 -0
  84. package/build/src/install/checkPackages.js +74 -0
  85. package/build/src/install/checkPackages.js.map +1 -0
  86. package/build/src/install/index.js +49 -0
  87. package/build/src/install/index.js.map +1 -0
  88. package/build/src/install/installAsync.js +103 -0
  89. package/build/src/install/installAsync.js.map +1 -0
  90. package/build/src/install/resolveOptions.js +99 -0
  91. package/build/src/install/resolveOptions.js.map +1 -0
  92. package/build/src/install/utils/autoAddConfigPlugins.js +87 -0
  93. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -0
  94. package/build/src/log.js +74 -0
  95. package/build/src/log.js.map +1 -0
  96. package/build/src/login/index.js +62 -0
  97. package/build/src/login/index.js.map +1 -0
  98. package/build/src/logout/index.js +48 -0
  99. package/build/src/logout/index.js.map +1 -0
  100. package/build/src/prebuild/clearNativeFolder.js +137 -0
  101. package/build/src/prebuild/clearNativeFolder.js.map +1 -0
  102. package/build/src/prebuild/configureProjectAsync.js +68 -0
  103. package/build/src/prebuild/configureProjectAsync.js.map +1 -0
  104. package/build/src/prebuild/copyTemplateFiles.js +124 -0
  105. package/build/src/prebuild/copyTemplateFiles.js.map +1 -0
  106. package/build/src/prebuild/ensureConfigAsync.js +86 -0
  107. package/build/src/prebuild/ensureConfigAsync.js.map +1 -0
  108. package/build/src/prebuild/index.js +90 -0
  109. package/build/src/prebuild/index.js.map +1 -0
  110. package/build/src/prebuild/prebuildAsync.js +112 -0
  111. package/build/src/prebuild/prebuildAsync.js.map +1 -0
  112. package/build/src/prebuild/resolveOptions.js +97 -0
  113. package/build/src/prebuild/resolveOptions.js.map +1 -0
  114. package/build/src/prebuild/resolveTemplate.js +157 -0
  115. package/build/src/prebuild/resolveTemplate.js.map +1 -0
  116. package/build/src/prebuild/updateFromTemplate.js +102 -0
  117. package/build/src/prebuild/updateFromTemplate.js.map +1 -0
  118. package/build/src/prebuild/updatePackageJson.js +236 -0
  119. package/build/src/prebuild/updatePackageJson.js.map +1 -0
  120. package/build/src/prebuild/writeMetroConfig.js +89 -0
  121. package/build/src/prebuild/writeMetroConfig.js.map +1 -0
  122. package/build/src/register/index.js +48 -0
  123. package/build/src/register/index.js.map +1 -0
  124. package/build/src/register/registerAsync.js +37 -0
  125. package/build/src/register/registerAsync.js.map +1 -0
  126. package/build/src/run/android/index.js +97 -0
  127. package/build/src/run/android/index.js.map +1 -0
  128. package/build/src/run/android/resolveDevice.js +23 -0
  129. package/build/src/run/android/resolveDevice.js.map +1 -0
  130. package/build/src/run/android/resolveGradleProps.js +37 -0
  131. package/build/src/run/android/resolveGradleProps.js.map +1 -0
  132. package/build/src/run/android/resolveInstallApkName.js +72 -0
  133. package/build/src/run/android/resolveInstallApkName.js.map +1 -0
  134. package/build/src/run/android/resolveLaunchProps.js +32 -0
  135. package/build/src/run/android/resolveLaunchProps.js.map +1 -0
  136. package/build/src/run/android/resolveOptions.js +25 -0
  137. package/build/src/run/android/resolveOptions.js.map +1 -0
  138. package/build/src/run/android/runAndroidAsync.js +74 -0
  139. package/build/src/run/android/runAndroidAsync.js.map +1 -0
  140. package/build/src/run/ensureNativeProject.js +33 -0
  141. package/build/src/run/ensureNativeProject.js.map +1 -0
  142. package/build/src/run/hints.js +22 -0
  143. package/build/src/run/hints.js.map +1 -0
  144. package/build/src/run/resolveBundlerProps.js +31 -0
  145. package/build/src/run/resolveBundlerProps.js.map +1 -0
  146. package/build/src/run/startBundler.js +76 -0
  147. package/build/src/run/startBundler.js.map +1 -0
  148. package/build/src/start/doctor/Prerequisite.js +47 -0
  149. package/build/src/start/doctor/Prerequisite.js.map +1 -0
  150. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +68 -0
  151. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -0
  152. package/build/src/start/doctor/apple/XcodePrerequisite.js +115 -0
  153. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -0
  154. package/build/src/start/doctor/apple/XcrunPrerequisite.js +65 -0
  155. package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -0
  156. package/build/src/start/doctor/dependencies/bundledNativeModules.js +64 -0
  157. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -0
  158. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +131 -0
  159. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -0
  160. package/build/src/start/doctor/dependencies/getMissingPackages.js +95 -0
  161. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -0
  162. package/build/src/start/doctor/dependencies/getVersionedPackages.js +119 -0
  163. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -0
  164. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +147 -0
  165. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -0
  166. package/build/src/start/doctor/ngrok/ExternalModule.js +164 -0
  167. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -0
  168. package/build/src/start/doctor/ngrok/NgrokResolver.js +17 -0
  169. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -0
  170. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +142 -0
  171. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -0
  172. package/build/src/start/doctor/typescript/updateTSConfig.js +92 -0
  173. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -0
  174. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +112 -0
  175. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -0
  176. package/build/src/start/index.js +116 -0
  177. package/build/src/start/index.js.map +1 -0
  178. package/build/src/start/interface/KeyPressHandler.js +99 -0
  179. package/build/src/start/interface/KeyPressHandler.js.map +1 -0
  180. package/build/src/start/interface/commandsTable.js +175 -0
  181. package/build/src/start/interface/commandsTable.js.map +1 -0
  182. package/build/src/start/interface/interactiveActions.js +134 -0
  183. package/build/src/start/interface/interactiveActions.js.map +1 -0
  184. package/build/src/start/interface/startInterface.js +217 -0
  185. package/build/src/start/interface/startInterface.js.map +1 -0
  186. package/build/src/start/platforms/AppIdResolver.js +44 -0
  187. package/build/src/start/platforms/AppIdResolver.js.map +1 -0
  188. package/build/src/start/platforms/DeviceManager.js +43 -0
  189. package/build/src/start/platforms/DeviceManager.js.map +1 -0
  190. package/build/src/start/platforms/ExpoGoInstaller.js +111 -0
  191. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
  192. package/build/src/start/platforms/PlatformManager.js +121 -0
  193. package/build/src/start/platforms/PlatformManager.js.map +1 -0
  194. package/build/src/start/platforms/android/ADBServer.js +129 -0
  195. package/build/src/start/platforms/android/ADBServer.js.map +1 -0
  196. package/build/src/start/platforms/android/AndroidAppIdResolver.js +40 -0
  197. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -0
  198. package/build/src/start/platforms/android/AndroidDeviceManager.js +183 -0
  199. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -0
  200. package/build/src/start/platforms/android/AndroidPlatformManager.js +35 -0
  201. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -0
  202. package/build/src/start/platforms/android/activateWindow.js +80 -0
  203. package/build/src/start/platforms/android/activateWindow.js.map +1 -0
  204. package/build/src/start/platforms/android/adb.js +263 -0
  205. package/build/src/start/platforms/android/adb.js.map +1 -0
  206. package/build/src/start/platforms/android/adbReverse.js +84 -0
  207. package/build/src/start/platforms/android/adbReverse.js.map +1 -0
  208. package/build/src/start/platforms/android/emulator.js +118 -0
  209. package/build/src/start/platforms/android/emulator.js.map +1 -0
  210. package/build/src/start/platforms/android/getDevices.js +36 -0
  211. package/build/src/start/platforms/android/getDevices.js.map +1 -0
  212. package/build/src/start/platforms/android/gradle.js +86 -0
  213. package/build/src/start/platforms/android/gradle.js.map +1 -0
  214. package/build/src/start/platforms/android/promptAndroidDevice.js +60 -0
  215. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -0
  216. package/build/src/start/platforms/ios/AppleAppIdResolver.js +46 -0
  217. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -0
  218. package/build/src/start/platforms/ios/AppleDeviceManager.js +201 -0
  219. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -0
  220. package/build/src/start/platforms/ios/ApplePlatformManager.js +31 -0
  221. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -0
  222. package/build/src/start/platforms/ios/assertSystemRequirements.js +16 -0
  223. package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -0
  224. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +85 -0
  225. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -0
  226. package/build/src/start/platforms/ios/getBestSimulator.js +101 -0
  227. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -0
  228. package/build/src/start/platforms/ios/promptAppleDevice.js +60 -0
  229. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -0
  230. package/build/src/start/platforms/ios/simctl.js +229 -0
  231. package/build/src/start/platforms/ios/simctl.js.map +1 -0
  232. package/build/src/start/platforms/ios/xcrun.js +67 -0
  233. package/build/src/start/platforms/ios/xcrun.js.map +1 -0
  234. package/build/src/start/project/devices.js +77 -0
  235. package/build/src/start/project/devices.js.map +1 -0
  236. package/build/src/start/project/dotExpo.js +74 -0
  237. package/build/src/start/project/dotExpo.js.map +1 -0
  238. package/build/src/start/project/settings.js +13 -0
  239. package/build/src/start/project/settings.js.map +1 -0
  240. package/build/src/start/resolveOptions.js +156 -0
  241. package/build/src/start/resolveOptions.js.map +1 -0
  242. package/build/src/start/server/AsyncNgrok.js +173 -0
  243. package/build/src/start/server/AsyncNgrok.js.map +1 -0
  244. package/build/src/start/server/BundlerDevServer.js +312 -0
  245. package/build/src/start/server/BundlerDevServer.js.map +1 -0
  246. package/build/src/start/server/DevServerManager.js +142 -0
  247. package/build/src/start/server/DevServerManager.js.map +1 -0
  248. package/build/src/start/server/DevelopmentSession.js +104 -0
  249. package/build/src/start/server/DevelopmentSession.js.map +1 -0
  250. package/build/src/start/server/UrlCreator.js +159 -0
  251. package/build/src/start/server/UrlCreator.js.map +1 -0
  252. package/build/src/start/server/metro/MetroBundlerDevServer.js +97 -0
  253. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -0
  254. package/build/src/start/server/metro/MetroTerminalReporter.js +178 -0
  255. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -0
  256. package/build/src/start/server/metro/TerminalReporter.js +87 -0
  257. package/build/src/start/server/metro/TerminalReporter.js.map +1 -0
  258. package/build/src/start/server/metro/TerminalReporter.types.js +6 -0
  259. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -0
  260. package/build/src/start/server/metro/instantiateMetro.js +66 -0
  261. package/build/src/start/server/metro/instantiateMetro.js.map +1 -0
  262. package/build/src/start/server/metro/resolveFromProject.js +38 -0
  263. package/build/src/start/server/metro/resolveFromProject.js.map +1 -0
  264. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +145 -0
  265. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +1 -0
  266. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +185 -0
  267. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -0
  268. package/build/src/start/server/middleware/ExpoMiddleware.js +78 -0
  269. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -0
  270. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +70 -0
  271. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -0
  272. package/build/src/start/server/middleware/ManifestMiddleware.js +177 -0
  273. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -0
  274. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +69 -0
  275. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -0
  276. package/build/src/start/server/middleware/createDevServerMiddleware.js +24 -0
  277. package/build/src/start/server/middleware/createDevServerMiddleware.js.map +1 -0
  278. package/build/src/start/server/middleware/resolveAssets.js +110 -0
  279. package/build/src/start/server/middleware/resolveAssets.js.map +1 -0
  280. package/build/src/start/server/middleware/resolveEntryPoint.js +37 -0
  281. package/build/src/start/server/middleware/resolveEntryPoint.js.map +1 -0
  282. package/build/src/start/server/middleware/resolvePlatform.js +32 -0
  283. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -0
  284. package/build/src/start/server/middleware/server.types.js +6 -0
  285. package/build/src/start/server/middleware/server.types.js.map +1 -0
  286. package/build/src/start/server/openPlatforms.js +30 -0
  287. package/build/src/start/server/openPlatforms.js.map +1 -0
  288. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +299 -0
  289. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -0
  290. package/build/src/start/server/webpack/formatWebpackMessages.js +94 -0
  291. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -0
  292. package/build/src/start/server/webpack/resolveFromProject.js +43 -0
  293. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -0
  294. package/build/src/start/server/webpack/tls.js +72 -0
  295. package/build/src/start/server/webpack/tls.js.map +1 -0
  296. package/build/src/start/startAsync.js +150 -0
  297. package/build/src/start/startAsync.js.map +1 -0
  298. package/build/src/utils/FileNotifier.js +71 -0
  299. package/build/src/utils/FileNotifier.js.map +1 -0
  300. package/build/src/utils/analytics/getDevClientProperties.js +41 -0
  301. package/build/src/utils/analytics/getDevClientProperties.js.map +1 -0
  302. package/build/src/utils/analytics/rudderstackClient.js +106 -0
  303. package/build/src/utils/analytics/rudderstackClient.js.map +1 -0
  304. package/build/src/utils/ansi.js +17 -0
  305. package/build/src/utils/ansi.js.map +1 -0
  306. package/build/src/utils/args.js +77 -0
  307. package/build/src/utils/args.js.map +1 -0
  308. package/build/src/utils/array.js +56 -0
  309. package/build/src/utils/array.js.map +1 -0
  310. package/build/src/utils/cocoapods.js +143 -0
  311. package/build/src/utils/cocoapods.js.map +1 -0
  312. package/build/src/utils/codesigning.js +283 -0
  313. package/build/src/utils/codesigning.js.map +1 -0
  314. package/build/src/utils/createFileTransform.js +89 -0
  315. package/build/src/utils/createFileTransform.js.map +1 -0
  316. package/build/src/utils/delay.js +39 -0
  317. package/build/src/utils/delay.js.map +1 -0
  318. package/build/src/utils/dir.js +38 -0
  319. package/build/src/utils/dir.js.map +1 -0
  320. package/build/src/utils/downloadAppAsync.js +74 -0
  321. package/build/src/utils/downloadAppAsync.js.map +1 -0
  322. package/build/src/utils/downloadExpoGoAsync.js +99 -0
  323. package/build/src/utils/downloadExpoGoAsync.js.map +1 -0
  324. package/build/src/utils/editor.js +60 -0
  325. package/build/src/utils/editor.js.map +1 -0
  326. package/build/src/utils/env.js +62 -0
  327. package/build/src/utils/env.js.map +1 -0
  328. package/build/src/utils/errors.js +69 -0
  329. package/build/src/utils/errors.js.map +1 -0
  330. package/build/src/utils/exit.js +90 -0
  331. package/build/src/utils/exit.js.map +1 -0
  332. package/build/src/utils/findUp.js +33 -0
  333. package/build/src/utils/findUp.js.map +1 -0
  334. package/build/src/utils/fn.js +32 -0
  335. package/build/src/utils/fn.js.map +1 -0
  336. package/build/src/utils/getOrPromptApplicationId.js +183 -0
  337. package/build/src/utils/getOrPromptApplicationId.js.map +1 -0
  338. package/build/src/utils/getRunningProcess.js +92 -0
  339. package/build/src/utils/getRunningProcess.js.map +1 -0
  340. package/build/src/utils/git.js +88 -0
  341. package/build/src/utils/git.js.map +1 -0
  342. package/build/src/utils/glob.js +65 -0
  343. package/build/src/utils/glob.js.map +1 -0
  344. package/build/src/utils/ip.js +16 -0
  345. package/build/src/utils/ip.js.map +1 -0
  346. package/build/src/utils/isModuleSymlinked.js +37 -0
  347. package/build/src/utils/isModuleSymlinked.js.map +1 -0
  348. package/build/src/utils/link.js +31 -0
  349. package/build/src/utils/link.js.map +1 -0
  350. package/build/src/utils/mergeGitIgnorePaths.js +112 -0
  351. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -0
  352. package/build/src/utils/modifyConfigAsync.js +68 -0
  353. package/build/src/utils/modifyConfigAsync.js.map +1 -0
  354. package/build/src/utils/modifyConfigPlugins.js +51 -0
  355. package/build/src/utils/modifyConfigPlugins.js.map +1 -0
  356. package/build/src/utils/nodeModules.js +118 -0
  357. package/build/src/utils/nodeModules.js.map +1 -0
  358. package/build/src/utils/npm.js +144 -0
  359. package/build/src/utils/npm.js.map +1 -0
  360. package/build/src/utils/obj.js +45 -0
  361. package/build/src/utils/obj.js.map +1 -0
  362. package/build/src/utils/ora.js +102 -0
  363. package/build/src/utils/ora.js.map +1 -0
  364. package/build/src/utils/port.js +130 -0
  365. package/build/src/utils/port.js.map +1 -0
  366. package/build/src/utils/profile.js +63 -0
  367. package/build/src/utils/profile.js.map +1 -0
  368. package/build/src/utils/progress.js +15 -0
  369. package/build/src/utils/progress.js.map +1 -0
  370. package/build/src/utils/prompts.js +127 -0
  371. package/build/src/utils/prompts.js.map +1 -0
  372. package/build/src/utils/resolveArgs.js +94 -0
  373. package/build/src/utils/resolveArgs.js.map +1 -0
  374. package/build/src/utils/scheme.js +106 -0
  375. package/build/src/utils/scheme.js.map +1 -0
  376. package/build/src/utils/tar.js +59 -0
  377. package/build/src/utils/tar.js.map +1 -0
  378. package/build/src/utils/url.js +67 -0
  379. package/build/src/utils/url.js.map +1 -0
  380. package/build/src/utils/validateApplicationId.js +90 -0
  381. package/build/src/utils/validateApplicationId.js.map +1 -0
  382. package/build/src/whoami/index.js +47 -0
  383. package/build/src/whoami/index.js.map +1 -0
  384. package/build/src/whoami/whoamiAsync.js +44 -0
  385. package/build/src/whoami/whoamiAsync.js.map +1 -0
  386. package/package.json +132 -4
  387. package/static/loading-page/index.html +270 -0
  388. package/index.js +0 -0
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ exports.startInterfaceAsync = startInterfaceAsync;
6
+ var _chalk = _interopRequireDefault(require("chalk"));
7
+ var Log = _interopRequireWildcard(require("../../log"));
8
+ var _editor = require("../../utils/editor");
9
+ var _errors = require("../../utils/errors");
10
+ var _ora = require("../../utils/ora");
11
+ var _progress = require("../../utils/progress");
12
+ var _prompts = require("../../utils/prompts");
13
+ var _webSupportProjectPrerequisite = require("../doctor/web/WebSupportProjectPrerequisite");
14
+ var _keyPressHandler = require("./KeyPressHandler");
15
+ var _commandsTable = require("./commandsTable");
16
+ var _interactiveActions = require("./interactiveActions");
17
+ function _interopRequireDefault(obj) {
18
+ return obj && obj.__esModule ? obj : {
19
+ default: obj
20
+ };
21
+ }
22
+ function _interopRequireWildcard(obj) {
23
+ if (obj && obj.__esModule) {
24
+ return obj;
25
+ } else {
26
+ var newObj = {};
27
+ if (obj != null) {
28
+ for(var key in obj){
29
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
30
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
31
+ if (desc.get || desc.set) {
32
+ Object.defineProperty(newObj, key, desc);
33
+ } else {
34
+ newObj[key] = obj[key];
35
+ }
36
+ }
37
+ }
38
+ }
39
+ newObj.default = obj;
40
+ return newObj;
41
+ }
42
+ }
43
+ const CTRL_C = "\x03";
44
+ const CTRL_D = "\x04";
45
+ const CTRL_L = "\f";
46
+ const PLATFORM_SETTINGS = {
47
+ android: {
48
+ name: "Android",
49
+ key: "android",
50
+ launchTarget: "emulator"
51
+ },
52
+ ios: {
53
+ name: "iOS",
54
+ key: "ios",
55
+ launchTarget: "simulator"
56
+ }
57
+ };
58
+ async function startInterfaceAsync(devServerManager, options) {
59
+ var ref2;
60
+ const actions = new _interactiveActions.DevServerManagerActions(devServerManager);
61
+ const isWebSocketsEnabled = (ref2 = devServerManager.getDefaultDevServer()) == null ? void 0 : ref2.isTargetingNative();
62
+ const usageOptions = {
63
+ isWebSocketsEnabled,
64
+ devClient: devServerManager.options.devClient,
65
+ ...options
66
+ };
67
+ actions.printDevServerInfo(usageOptions);
68
+ const onPressAsync = async (key)=>{
69
+ // Auxillary commands all escape.
70
+ switch(key){
71
+ case CTRL_C:
72
+ case CTRL_D:
73
+ {
74
+ // Prevent terminal UI from accepting commands while the process is closing.
75
+ // Without this, fast typers will close the server then start typing their
76
+ // next command and have a bunch of unrelated things pop up.
77
+ (0, _prompts).pauseInteractions();
78
+ const spinners = (0, _ora).getAllSpinners();
79
+ spinners.forEach((spinner)=>{
80
+ spinner.fail();
81
+ });
82
+ const currentProgress = (0, _progress).getProgressBar();
83
+ if (currentProgress) {
84
+ currentProgress.terminate();
85
+ (0, _progress).setProgressBar(null);
86
+ }
87
+ const spinner1 = (0, _ora).ora({
88
+ text: "Stopping server",
89
+ color: "white"
90
+ }).start();
91
+ try {
92
+ await devServerManager.stopAsync();
93
+ spinner1.stopAndPersist({
94
+ text: "Stopped server",
95
+ symbol: `\u203A`
96
+ });
97
+ // @ts-ignore: Argument of type '"SIGINT"' is not assignable to parameter of type '"disconnect"'.
98
+ process.emit("SIGINT");
99
+ // TODO: Is this the right place to do this?
100
+ process.exit();
101
+ } catch (error) {
102
+ spinner1.fail("Failed to stop server");
103
+ throw error;
104
+ }
105
+ break;
106
+ }
107
+ case CTRL_L:
108
+ return Log.clear();
109
+ case "?":
110
+ return (0, _commandsTable).printUsage(usageOptions, {
111
+ verbose: true
112
+ });
113
+ }
114
+ // Optionally enabled
115
+ if (isWebSocketsEnabled) {
116
+ switch(key){
117
+ case "m":
118
+ return actions.toggleDevMenu();
119
+ case "M":
120
+ return actions.openMoreToolsAsync();
121
+ }
122
+ }
123
+ const { platforms =[
124
+ "ios",
125
+ "android",
126
+ "web"
127
+ ] } = options;
128
+ if ([
129
+ "i",
130
+ "a"
131
+ ].includes(key.toLowerCase())) {
132
+ const platform = key.toLowerCase() === "i" ? "ios" : "android";
133
+ const shouldPrompt = [
134
+ "I",
135
+ "A"
136
+ ].includes(key);
137
+ if (shouldPrompt) {
138
+ Log.clear();
139
+ }
140
+ const server = devServerManager.getDefaultDevServer();
141
+ const settings = PLATFORM_SETTINGS[platform];
142
+ Log.log(`${_commandsTable.BLT} Opening on ${settings.name}...`);
143
+ if (server.isTargetingNative() && !platforms.includes(settings.key)) {
144
+ Log.warn(_chalk.default`${settings.name} is disabled, enable it by adding {bold ${settings.key}} to the platforms array in your app.json or app.config.js`);
145
+ } else {
146
+ try {
147
+ await server.openPlatformAsync(settings.launchTarget, {
148
+ shouldPrompt
149
+ });
150
+ (0, _commandsTable).printHelp();
151
+ } catch (error) {
152
+ if (!(error instanceof _errors.AbortCommandError)) {
153
+ Log.exception(error);
154
+ }
155
+ }
156
+ }
157
+ // Break out early.
158
+ return;
159
+ }
160
+ switch(key){
161
+ case "w":
162
+ {
163
+ try {
164
+ await devServerManager.ensureProjectPrerequisiteAsync(_webSupportProjectPrerequisite.WebSupportProjectPrerequisite);
165
+ if (!platforms.includes("web")) {
166
+ var ref;
167
+ platforms.push("web");
168
+ (ref = options.platforms) == null ? void 0 : ref.push("web");
169
+ }
170
+ } catch (e) {
171
+ Log.warn(e.message);
172
+ break;
173
+ }
174
+ const isDisabled = !platforms.includes("web");
175
+ if (isDisabled) {
176
+ Log.debug("Web is disabled");
177
+ break;
178
+ }
179
+ // Ensure the Webpack dev server is running first
180
+ if (!devServerManager.getWebDevServer()) {
181
+ Log.debug("Starting up webpack dev server");
182
+ await devServerManager.ensureWebDevServerRunningAsync();
183
+ // When this is the first time webpack is started, reprint the connection info.
184
+ actions.printDevServerInfo(usageOptions);
185
+ }
186
+ Log.log(`${_commandsTable.BLT} Open in the web browser...`);
187
+ try {
188
+ var ref1;
189
+ await ((ref1 = devServerManager.getWebDevServer()) == null ? void 0 : ref1.openPlatformAsync("desktop"));
190
+ (0, _commandsTable).printHelp();
191
+ } catch (error) {
192
+ if (!(error instanceof _errors.AbortCommandError)) {
193
+ Log.exception(error);
194
+ }
195
+ }
196
+ break;
197
+ }
198
+ case "c":
199
+ Log.clear();
200
+ return actions.printDevServerInfo(usageOptions);
201
+ case "j":
202
+ return actions.openJsInspectorAsync();
203
+ case "r":
204
+ return actions.reloadApp();
205
+ case "o":
206
+ Log.log(`${_commandsTable.BLT} Opening the editor...`);
207
+ return (0, _editor).openInEditorAsync(devServerManager.projectRoot);
208
+ }
209
+ };
210
+ const keyPressHandler = new _keyPressHandler.KeyPressHandler(onPressAsync);
211
+ const listener = keyPressHandler.createInteractionListener();
212
+ (0, _prompts).addInteractionListener(listener);
213
+ // Start observing...
214
+ keyPressHandler.startInterceptingKeyStrokes();
215
+ }
216
+
217
+ //# sourceMappingURL=startInterface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/start/interface/startInterface.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport * as Log from '../../log';\nimport { openInEditorAsync } from '../../utils/editor';\nimport { AbortCommandError } from '../../utils/errors';\nimport { getAllSpinners, ora } from '../../utils/ora';\nimport { getProgressBar, setProgressBar } from '../../utils/progress';\nimport { addInteractionListener, pauseInteractions } from '../../utils/prompts';\nimport { WebSupportProjectPrerequisite } from '../doctor/web/WebSupportProjectPrerequisite';\nimport { DevServerManager } from '../server/DevServerManager';\nimport { KeyPressHandler } from './KeyPressHandler';\nimport { BLT, printHelp, printUsage, StartOptions } from './commandsTable';\nimport { DevServerManagerActions } from './interactiveActions';\n\nconst CTRL_C = '\\u0003';\nconst CTRL_D = '\\u0004';\nconst CTRL_L = '\\u000C';\n\nconst PLATFORM_SETTINGS: Record<\n string,\n { name: string; key: 'android' | 'ios'; launchTarget: 'emulator' | 'simulator' }\n> = {\n android: {\n name: 'Android',\n key: 'android',\n launchTarget: 'emulator',\n },\n ios: {\n name: 'iOS',\n key: 'ios',\n launchTarget: 'simulator',\n },\n};\n\nexport async function startInterfaceAsync(\n devServerManager: DevServerManager,\n options: Pick<StartOptions, 'platforms'>\n) {\n const actions = new DevServerManagerActions(devServerManager);\n\n const isWebSocketsEnabled = devServerManager.getDefaultDevServer()?.isTargetingNative();\n\n const usageOptions = {\n isWebSocketsEnabled,\n devClient: devServerManager.options.devClient,\n ...options,\n };\n\n actions.printDevServerInfo(usageOptions);\n\n const onPressAsync = async (key: string) => {\n // Auxillary commands all escape.\n switch (key) {\n case CTRL_C:\n case CTRL_D: {\n // Prevent terminal UI from accepting commands while the process is closing.\n // Without this, fast typers will close the server then start typing their\n // next command and have a bunch of unrelated things pop up.\n pauseInteractions();\n\n const spinners = getAllSpinners();\n spinners.forEach((spinner) => {\n spinner.fail();\n });\n\n const currentProgress = getProgressBar();\n if (currentProgress) {\n currentProgress.terminate();\n setProgressBar(null);\n }\n const spinner = ora({ text: 'Stopping server', color: 'white' }).start();\n try {\n await devServerManager.stopAsync();\n spinner.stopAndPersist({ text: 'Stopped server', symbol: `\\u203A` });\n // @ts-ignore: Argument of type '\"SIGINT\"' is not assignable to parameter of type '\"disconnect\"'.\n process.emit('SIGINT');\n\n // TODO: Is this the right place to do this?\n process.exit();\n } catch (error) {\n spinner.fail('Failed to stop server');\n throw error;\n }\n break;\n }\n case CTRL_L:\n return Log.clear();\n case '?':\n return printUsage(usageOptions, { verbose: true });\n }\n\n // Optionally enabled\n\n if (isWebSocketsEnabled) {\n switch (key) {\n case 'm':\n return actions.toggleDevMenu();\n case 'M':\n return actions.openMoreToolsAsync();\n }\n }\n\n const { platforms = ['ios', 'android', 'web'] } = options;\n\n if (['i', 'a'].includes(key.toLowerCase())) {\n const platform = key.toLowerCase() === 'i' ? 'ios' : 'android';\n\n const shouldPrompt = ['I', 'A'].includes(key);\n if (shouldPrompt) {\n Log.clear();\n }\n\n const server = devServerManager.getDefaultDevServer();\n const settings = PLATFORM_SETTINGS[platform];\n\n Log.log(`${BLT} Opening on ${settings.name}...`);\n\n if (server.isTargetingNative() && !platforms.includes(settings.key)) {\n Log.warn(\n chalk`${settings.name} is disabled, enable it by adding {bold ${settings.key}} to the platforms array in your app.json or app.config.js`\n );\n } else {\n try {\n await server.openPlatformAsync(settings.launchTarget, { shouldPrompt });\n printHelp();\n } catch (error: any) {\n if (!(error instanceof AbortCommandError)) {\n Log.exception(error);\n }\n }\n }\n // Break out early.\n return;\n }\n\n switch (key) {\n case 'w': {\n try {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n if (!platforms.includes('web')) {\n platforms.push('web');\n options.platforms?.push('web');\n }\n } catch (e: any) {\n Log.warn(e.message);\n break;\n }\n\n const isDisabled = !platforms.includes('web');\n if (isDisabled) {\n Log.debug('Web is disabled');\n // Use warnings from the web support setup.\n break;\n }\n\n // Ensure the Webpack dev server is running first\n if (!devServerManager.getWebDevServer()) {\n Log.debug('Starting up webpack dev server');\n await devServerManager.ensureWebDevServerRunningAsync();\n // When this is the first time webpack is started, reprint the connection info.\n actions.printDevServerInfo(usageOptions);\n }\n\n Log.log(`${BLT} Open in the web browser...`);\n try {\n await devServerManager.getWebDevServer()?.openPlatformAsync('desktop');\n printHelp();\n } catch (error: any) {\n if (!(error instanceof AbortCommandError)) {\n Log.exception(error);\n }\n }\n break;\n }\n case 'c':\n Log.clear();\n return actions.printDevServerInfo(usageOptions);\n case 'j':\n return actions.openJsInspectorAsync();\n case 'r':\n return actions.reloadApp();\n case 'o':\n Log.log(`${BLT} Opening the editor...`);\n return openInEditorAsync(devServerManager.projectRoot);\n }\n };\n\n const keyPressHandler = new KeyPressHandler(onPressAsync);\n\n const listener = keyPressHandler.createInteractionListener();\n\n addInteractionListener(listener);\n\n // Start observing...\n keyPressHandler.startInterceptingKeyStrokes();\n}\n"],"names":["startInterfaceAsync","Log","CTRL_C","CTRL_D","CTRL_L","PLATFORM_SETTINGS","android","name","key","launchTarget","ios","devServerManager","options","actions","DevServerManagerActions","isWebSocketsEnabled","getDefaultDevServer","isTargetingNative","usageOptions","devClient","printDevServerInfo","onPressAsync","pauseInteractions","spinners","getAllSpinners","forEach","spinner","fail","currentProgress","getProgressBar","terminate","setProgressBar","ora","text","color","start","stopAsync","stopAndPersist","symbol","process","emit","exit","error","clear","printUsage","verbose","toggleDevMenu","openMoreToolsAsync","platforms","includes","toLowerCase","platform","shouldPrompt","server","settings","log","BLT","warn","chalk","openPlatformAsync","printHelp","AbortCommandError","exception","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","push","e","message","isDisabled","debug","getWebDevServer","ensureWebDevServerRunningAsync","openJsInspectorAsync","reloadApp","openInEditorAsync","projectRoot","keyPressHandler","KeyPressHandler","listener","createInteractionListener","addInteractionListener","startInterceptingKeyStrokes"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _config = require("@expo/config");
6
+ var _errors = require("../../utils/errors");
7
+ var _obj = require("../../utils/obj");
8
+ class AppIdResolver {
9
+ constructor(projectRoot, platform, configProperty){
10
+ this.projectRoot = projectRoot;
11
+ this.platform = platform;
12
+ this.configProperty = configProperty;
13
+ }
14
+ /** Resolve the application ID for the project. */ async getAppIdAsync() {
15
+ if (await this.hasNativeProjectAsync()) {
16
+ return this.getAppIdFromNativeAsync();
17
+ }
18
+ return this.getAppIdFromConfigAsync();
19
+ }
20
+ /** Returns `true` if the project has native project code. */ async hasNativeProjectAsync() {
21
+ throw new _errors.UnimplementedError();
22
+ }
23
+ /** Return the app ID from the Expo config or assert. */ async getAppIdFromConfigAsync() {
24
+ const config = (0, _config).getConfig(this.projectRoot);
25
+ const appId = (0, _obj).get(config.exp, this.configProperty);
26
+ if (!appId) {
27
+ throw new _errors.CommandError("NO_APP_ID", `Required property '${this.configProperty}' is not found in the project ${(0, _config).getProjectConfigDescriptionWithPaths(this.projectRoot, config)}. This is required to open the app.`);
28
+ }
29
+ return appId;
30
+ }
31
+ /** Return the app ID from the native project files or null if the app ID cannot be found. */ async resolveAppIdFromNativeAsync() {
32
+ throw new _errors.UnimplementedError();
33
+ }
34
+ /** Return the app ID from the native project files or assert. */ async getAppIdFromNativeAsync() {
35
+ const appId = await this.resolveAppIdFromNativeAsync();
36
+ if (!appId) {
37
+ throw new _errors.CommandError("NO_APP_ID", `Failed to locate the ${this.platform} application identifier in the "${this.platform}/" folder. This is required to open the app.`);
38
+ }
39
+ return appId;
40
+ }
41
+ }
42
+ exports.AppIdResolver = AppIdResolver;
43
+
44
+ //# sourceMappingURL=AppIdResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/start/platforms/AppIdResolver.ts"],"sourcesContent":["import { getConfig, getProjectConfigDescriptionWithPaths } from '@expo/config';\n\nimport { CommandError, UnimplementedError } from '../../utils/errors';\nimport { get } from '../../utils/obj';\n\n/** Resolves a native app identifier (bundle identifier, package name) from the project files. */\nexport class AppIdResolver {\n constructor(\n protected projectRoot: string,\n /** Platform to use. */\n protected platform: string,\n /** Nested key in the Expo config like `android.package` or `ios.bundleIdentifier`. */\n protected configProperty: string\n ) {}\n\n /** Resolve the application ID for the project. */\n async getAppIdAsync(): Promise<string> {\n if (await this.hasNativeProjectAsync()) {\n return this.getAppIdFromNativeAsync();\n }\n return this.getAppIdFromConfigAsync();\n }\n\n /** Returns `true` if the project has native project code. */\n async hasNativeProjectAsync(): Promise<boolean> {\n throw new UnimplementedError();\n }\n\n /** Return the app ID from the Expo config or assert. */\n async getAppIdFromConfigAsync(): Promise<string> {\n const config = getConfig(this.projectRoot);\n\n const appId = get(config.exp, this.configProperty);\n if (!appId) {\n throw new CommandError(\n 'NO_APP_ID',\n `Required property '${\n this.configProperty\n }' is not found in the project ${getProjectConfigDescriptionWithPaths(\n this.projectRoot,\n config\n )}. This is required to open the app.`\n );\n }\n return appId;\n }\n\n /** Return the app ID from the native project files or null if the app ID cannot be found. */\n async resolveAppIdFromNativeAsync(): Promise<string | null> {\n throw new UnimplementedError();\n }\n\n /** Return the app ID from the native project files or assert. */\n async getAppIdFromNativeAsync(): Promise<string> {\n const appId = await this.resolveAppIdFromNativeAsync();\n if (!appId) {\n throw new CommandError(\n 'NO_APP_ID',\n `Failed to locate the ${this.platform} application identifier in the \"${this.platform}/\" folder. This is required to open the app.`\n );\n }\n return appId;\n }\n}\n"],"names":["AppIdResolver","constructor","projectRoot","platform","configProperty","getAppIdAsync","hasNativeProjectAsync","getAppIdFromNativeAsync","getAppIdFromConfigAsync","UnimplementedError","config","getConfig","appId","get","exp","CommandError","getProjectConfigDescriptionWithPaths","resolveAppIdFromNativeAsync"],"mappings":"AAAA;;;;AAAgE,IAAA,OAAc,WAAd,cAAc,CAAA;AAE7B,IAAA,OAAoB,WAApB,oBAAoB,CAAA;AACjD,IAAA,IAAiB,WAAjB,iBAAiB,CAAA;AAG9B,MAAMA,aAAa;IACxBC,YACYC,WAAmB,EAEnBC,QAAgB,EAEhBC,cAAsB,CAChC;aALUF,WAAmB,GAAnBA,WAAmB;aAEnBC,QAAgB,GAAhBA,QAAgB;aAEhBC,cAAsB,GAAtBA,cAAsB;KAC9B;IAEJ,kDAAkD,CAClD,MAAMC,aAAa,GAAoB;QACrC,IAAI,MAAM,IAAI,CAACC,qBAAqB,EAAE,EAAE;YACtC,OAAO,IAAI,CAACC,uBAAuB,EAAE,CAAC;SACvC;QACD,OAAO,IAAI,CAACC,uBAAuB,EAAE,CAAC;KACvC;IAED,6DAA6D,CAC7D,MAAMF,qBAAqB,GAAqB;QAC9C,MAAM,IAAIG,OAAkB,mBAAA,EAAE,CAAC;KAChC;IAED,wDAAwD,CACxD,MAAMD,uBAAuB,GAAoB;QAC/C,MAAME,MAAM,GAAGC,CAAAA,GAAAA,OAAS,AAAkB,CAAA,UAAlB,CAAC,IAAI,CAACT,WAAW,CAAC,AAAC;QAE3C,MAAMU,KAAK,GAAGC,CAAAA,GAAAA,IAAG,AAAiC,CAAA,IAAjC,CAACH,MAAM,CAACI,GAAG,EAAE,IAAI,CAACV,cAAc,CAAC,AAAC;QACnD,IAAI,CAACQ,KAAK,EAAE;YACV,MAAM,IAAIG,OAAY,aAAA,CACpB,WAAW,EACX,CAAC,mBAAmB,EAClB,IAAI,CAACX,cAAc,CACpB,8BAA8B,EAAEY,CAAAA,GAAAA,OAAoC,AAGpE,CAAA,qCAHoE,CACnE,IAAI,CAACd,WAAW,EAChBQ,MAAM,CACP,CAAC,mCAAmC,CAAC,CACvC,CAAC;SACH;QACD,OAAOE,KAAK,CAAC;KACd;IAED,6FAA6F,CAC7F,MAAMK,2BAA2B,GAA2B;QAC1D,MAAM,IAAIR,OAAkB,mBAAA,EAAE,CAAC;KAChC;IAED,iEAAiE,CACjE,MAAMF,uBAAuB,GAAoB;QAC/C,MAAMK,KAAK,GAAG,MAAM,IAAI,CAACK,2BAA2B,EAAE,AAAC;QACvD,IAAI,CAACL,KAAK,EAAE;YACV,MAAM,IAAIG,OAAY,aAAA,CACpB,WAAW,EACX,CAAC,qBAAqB,EAAE,IAAI,CAACZ,QAAQ,CAAC,gCAAgC,EAAE,IAAI,CAACA,QAAQ,CAAC,4CAA4C,CAAC,CACpI,CAAC;SACH;QACD,OAAOS,KAAK,CAAC;KACd;CACF;QAzDYZ,aAAa,GAAbA,aAAa"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _chalk = _interopRequireDefault(require("chalk"));
6
+ var Log = _interopRequireWildcard(require("../../log"));
7
+ function _interopRequireDefault(obj) {
8
+ return obj && obj.__esModule ? obj : {
9
+ default: obj
10
+ };
11
+ }
12
+ function _interopRequireWildcard(obj) {
13
+ if (obj && obj.__esModule) {
14
+ return obj;
15
+ } else {
16
+ var newObj = {};
17
+ if (obj != null) {
18
+ for(var key in obj){
19
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
20
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
21
+ if (desc.get || desc.set) {
22
+ Object.defineProperty(newObj, key, desc);
23
+ } else {
24
+ newObj[key] = obj[key];
25
+ }
26
+ }
27
+ }
28
+ }
29
+ newObj.default = obj;
30
+ return newObj;
31
+ }
32
+ }
33
+ class DeviceManager {
34
+ constructor(device){
35
+ this.device = device;
36
+ }
37
+ logOpeningUrl(url) {
38
+ Log.log(_chalk.default`\u203A Opening {underline ${url}} on {bold ${this.name}}`);
39
+ }
40
+ }
41
+ exports.DeviceManager = DeviceManager;
42
+
43
+ //# sourceMappingURL=DeviceManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/start/platforms/DeviceManager.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport * as Log from '../../log';\n\n/** An abstract class for interacting with a native device. */\nexport abstract class DeviceManager<IDevice> {\n constructor(public device: IDevice) {}\n\n abstract get name(): string;\n\n abstract get identifier(): string;\n\n logOpeningUrl(url: string) {\n Log.log(chalk`\\u203A Opening {underline ${url}} on {bold ${this.name}}`);\n }\n\n abstract startAsync(): Promise<IDevice>;\n\n abstract getAppVersionAsync(applicationId: string): Promise<string | null>;\n\n abstract installAppAsync(binaryPath: string): Promise<void>;\n\n abstract uninstallAppAsync(applicationId: string): Promise<void>;\n\n abstract isAppInstalledAsync(applicationId: string): Promise<boolean>;\n\n abstract openUrlAsync(url: string): Promise<void>;\n\n abstract activateWindowAsync(): Promise<void>;\n\n abstract ensureExpoGoAsync(sdkVersion?: string): Promise<boolean>;\n}\n"],"names":["Log","DeviceManager","constructor","device","logOpeningUrl","url","log","chalk","name"],"mappings":"AAAA;;;;AAAkB,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEbA,IAAAA,GAAG,mCAAM,WAAW,EAAjB;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGR,MAAeC,aAAa;IACjCC,YAAmBC,MAAe,CAAE;aAAjBA,MAAe,GAAfA,MAAe;KAAI;IAMtCC,aAAa,CAACC,GAAW,EAAE;QACzBL,GAAG,CAACM,GAAG,CAACC,MAAK,QAAA,CAAC,0BAA0B,EAAEF,GAAG,CAAC,WAAW,EAAE,IAAI,CAACG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1E;CAiBF;QA1BqBP,aAAa,GAAbA,aAAa"}
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _semver = _interopRequireDefault(require("semver"));
6
+ var _getVersions = require("../../api/getVersions");
7
+ var Log = _interopRequireWildcard(require("../../log"));
8
+ var _downloadExpoGoAsync = require("../../utils/downloadExpoGoAsync");
9
+ var _ora = require("../../utils/ora");
10
+ var _prompts = require("../../utils/prompts");
11
+ function _interopRequireDefault(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ function _interopRequireWildcard(obj) {
17
+ if (obj && obj.__esModule) {
18
+ return obj;
19
+ } else {
20
+ var newObj = {};
21
+ if (obj != null) {
22
+ for(var key in obj){
23
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
24
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
25
+ if (desc.get || desc.set) {
26
+ Object.defineProperty(newObj, key, desc);
27
+ } else {
28
+ newObj[key] = obj[key];
29
+ }
30
+ }
31
+ }
32
+ }
33
+ newObj.default = obj;
34
+ return newObj;
35
+ }
36
+ }
37
+ class ExpoGoInstaller {
38
+ // Keep a list of [platform-deviceId] so we can prevent asking multiple times if a user wants to upgrade.
39
+ // This can prevent annoying interactions when they don't want to upgrade for whatever reason.
40
+ static cache = {};
41
+ constructor(platform, appId, sdkVersion){
42
+ this.platform = platform;
43
+ this.appId = appId;
44
+ this.sdkVersion = sdkVersion;
45
+ }
46
+ /** Returns true if the installed app matching the previously provided `appId` is outdated. */ async isClientOutdatedAsync(device) {
47
+ const installedVersion = await device.getAppVersionAsync(this.appId);
48
+ if (!installedVersion) {
49
+ return true;
50
+ }
51
+ const version = await this._getExpectedClientVersionAsync();
52
+ Log.debug(`Expected Expo Go version: ${version}, installed version: ${installedVersion}`);
53
+ return version ? _semver.default.lt(installedVersion, version) : true;
54
+ }
55
+ /** Returns the expected version of Expo Go given the project SDK Version. Exposed for testing. */ async _getExpectedClientVersionAsync() {
56
+ var ref, ref1;
57
+ const versions = await (0, _getVersions).getVersionsAsync();
58
+ // Like `sdkVersions['44.0.0']['androidClientVersion'] = '1.0.0'`
59
+ const specificVersion = versions == null ? void 0 : (ref = versions.sdkVersions) == null ? void 0 : (ref1 = ref[this.sdkVersion]) == null ? void 0 : ref1[`${this.platform}ClientVersion`];
60
+ const latestVersion = versions[`${this.platform}Version`];
61
+ var ref2;
62
+ return (ref2 = specificVersion != null ? specificVersion : latestVersion) != null ? ref2 : null;
63
+ }
64
+ /** Returns a boolean indicating if Expo Go should be installed. Returns `true` if the app was uninstalled. */ async uninstallExpoGoIfOutdatedAsync(deviceManager) {
65
+ const cacheId = `${this.platform}-${deviceManager.identifier}`;
66
+ if (ExpoGoInstaller.cache[cacheId]) {
67
+ return false;
68
+ }
69
+ if (await this.isClientOutdatedAsync(deviceManager)) {
70
+ // Only prompt once per device, per run.
71
+ ExpoGoInstaller.cache[cacheId] = true;
72
+ const confirm = await (0, _prompts).confirmAsync({
73
+ initial: true,
74
+ message: `Expo Go on ${deviceManager.name} is outdated, would you like to upgrade?`
75
+ });
76
+ if (confirm) {
77
+ // Don't need to uninstall to update on iOS.
78
+ if (this.platform !== "ios") {
79
+ Log.log(`Uninstalling Expo Go from ${this.platform} device ${deviceManager.name}.`);
80
+ await deviceManager.uninstallAppAsync(this.appId);
81
+ }
82
+ return true;
83
+ }
84
+ }
85
+ return false;
86
+ }
87
+ /** Check if a given device has Expo Go installed, if not then download and install it. */ async ensureAsync(deviceManager) {
88
+ let shouldInstall = !await deviceManager.isAppInstalledAsync(this.appId);
89
+ if (!shouldInstall) {
90
+ shouldInstall = await this.uninstallExpoGoIfOutdatedAsync(deviceManager);
91
+ }
92
+ if (shouldInstall) {
93
+ // Download the Expo Go app from the Expo servers.
94
+ const binaryPath = await (0, _downloadExpoGoAsync).downloadExpoGoAsync(this.platform, {
95
+ sdkVersion: this.sdkVersion
96
+ });
97
+ // Install the app on the device.
98
+ const ora = (0, _ora).logNewSection(`Installing Expo Go on ${deviceManager.name}`);
99
+ try {
100
+ await deviceManager.installAppAsync(binaryPath);
101
+ } finally{
102
+ ora.stop();
103
+ }
104
+ return true;
105
+ }
106
+ return false;
107
+ }
108
+ }
109
+ exports.ExpoGoInstaller = ExpoGoInstaller;
110
+
111
+ //# sourceMappingURL=ExpoGoInstaller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/start/platforms/ExpoGoInstaller.ts"],"sourcesContent":["import semver from 'semver';\n\nimport { getVersionsAsync } from '../../api/getVersions';\nimport * as Log from '../../log';\nimport { downloadExpoGoAsync } from '../../utils/downloadExpoGoAsync';\nimport { logNewSection } from '../../utils/ora';\nimport { confirmAsync } from '../../utils/prompts';\nimport type { DeviceManager } from './DeviceManager';\n\n/** Given a platform, appId, and sdkVersion, this module will ensure that Expo Go is up-to-date on the provided device. */\nexport class ExpoGoInstaller<IDevice> {\n // Keep a list of [platform-deviceId] so we can prevent asking multiple times if a user wants to upgrade.\n // This can prevent annoying interactions when they don't want to upgrade for whatever reason.\n static cache: Record<string, boolean> = {};\n\n constructor(\n private platform: 'ios' | 'android',\n // Ultimately this should be inlined since we know the platform.\n private appId: string,\n private sdkVersion?: string\n ) {}\n\n /** Returns true if the installed app matching the previously provided `appId` is outdated. */\n async isClientOutdatedAsync(device: DeviceManager<IDevice>): Promise<boolean> {\n const installedVersion = await device.getAppVersionAsync(this.appId);\n if (!installedVersion) {\n return true;\n }\n const version = await this._getExpectedClientVersionAsync();\n Log.debug(`Expected Expo Go version: ${version}, installed version: ${installedVersion}`);\n return version ? semver.lt(installedVersion, version) : true;\n }\n\n /** Returns the expected version of Expo Go given the project SDK Version. Exposed for testing. */\n async _getExpectedClientVersionAsync(): Promise<string | null> {\n const versions = await getVersionsAsync();\n // Like `sdkVersions['44.0.0']['androidClientVersion'] = '1.0.0'`\n const specificVersion =\n versions?.sdkVersions?.[this.sdkVersion!]?.[`${this.platform}ClientVersion`];\n const latestVersion = versions[`${this.platform}Version`];\n return specificVersion ?? latestVersion ?? null;\n }\n\n /** Returns a boolean indicating if Expo Go should be installed. Returns `true` if the app was uninstalled. */\n async uninstallExpoGoIfOutdatedAsync(deviceManager: DeviceManager<IDevice>): Promise<boolean> {\n const cacheId = `${this.platform}-${deviceManager.identifier}`;\n\n if (ExpoGoInstaller.cache[cacheId]) {\n return false;\n }\n if (await this.isClientOutdatedAsync(deviceManager)) {\n // Only prompt once per device, per run.\n ExpoGoInstaller.cache[cacheId] = true;\n const confirm = await confirmAsync({\n initial: true,\n message: `Expo Go on ${deviceManager.name} is outdated, would you like to upgrade?`,\n });\n if (confirm) {\n // Don't need to uninstall to update on iOS.\n if (this.platform !== 'ios') {\n Log.log(`Uninstalling Expo Go from ${this.platform} device ${deviceManager.name}.`);\n await deviceManager.uninstallAppAsync(this.appId);\n }\n return true;\n }\n }\n return false;\n }\n\n /** Check if a given device has Expo Go installed, if not then download and install it. */\n async ensureAsync(deviceManager: DeviceManager<IDevice>): Promise<boolean> {\n let shouldInstall = !(await deviceManager.isAppInstalledAsync(this.appId));\n\n if (!shouldInstall) {\n shouldInstall = await this.uninstallExpoGoIfOutdatedAsync(deviceManager);\n }\n\n if (shouldInstall) {\n // Download the Expo Go app from the Expo servers.\n const binaryPath = await downloadExpoGoAsync(this.platform, { sdkVersion: this.sdkVersion });\n // Install the app on the device.\n const ora = logNewSection(`Installing Expo Go on ${deviceManager.name}`);\n try {\n await deviceManager.installAppAsync(binaryPath);\n } finally {\n ora.stop();\n }\n return true;\n }\n return false;\n }\n}\n"],"names":["Log","ExpoGoInstaller","cache","constructor","platform","appId","sdkVersion","isClientOutdatedAsync","device","installedVersion","getAppVersionAsync","version","_getExpectedClientVersionAsync","debug","semver","lt","versions","getVersionsAsync","specificVersion","sdkVersions","latestVersion","uninstallExpoGoIfOutdatedAsync","deviceManager","cacheId","identifier","confirm","confirmAsync","initial","message","name","log","uninstallAppAsync","ensureAsync","shouldInstall","isAppInstalledAsync","binaryPath","downloadExpoGoAsync","ora","logNewSection","installAppAsync","stop"],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ var _config = require("@expo/config");
6
+ var _assert = _interopRequireDefault(require("assert"));
7
+ var Log = _interopRequireWildcard(require("../../log"));
8
+ var _rudderstackClient = require("../../utils/analytics/rudderstackClient");
9
+ var _errors = require("../../utils/errors");
10
+ var _link = require("../../utils/link");
11
+ function _interopRequireDefault(obj) {
12
+ return obj && obj.__esModule ? obj : {
13
+ default: obj
14
+ };
15
+ }
16
+ function _interopRequireWildcard(obj) {
17
+ if (obj && obj.__esModule) {
18
+ return obj;
19
+ } else {
20
+ var newObj = {};
21
+ if (obj != null) {
22
+ for(var key in obj){
23
+ if (Object.prototype.hasOwnProperty.call(obj, key)) {
24
+ var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {};
25
+ if (desc.get || desc.set) {
26
+ Object.defineProperty(newObj, key, desc);
27
+ } else {
28
+ newObj[key] = obj[key];
29
+ }
30
+ }
31
+ }
32
+ }
33
+ newObj.default = obj;
34
+ return newObj;
35
+ }
36
+ }
37
+ class PlatformManager {
38
+ constructor(projectRoot, props){
39
+ this.projectRoot = projectRoot;
40
+ this.props = props;
41
+ }
42
+ /** Returns the project application identifier or asserts that one is not defined. Exposed for testing. */ _getAppIdResolver() {
43
+ throw new _errors.UnimplementedError();
44
+ }
45
+ async openProjectInExpoGoAsync(resolveSettings = {}) {
46
+ const url = this.props.getExpoGoUrl();
47
+ // This should never happen, but just in case...
48
+ (0, _assert).default(url, "Could not get dev server URL");
49
+ const deviceManager = await this.props.resolveDeviceAsync(resolveSettings);
50
+ deviceManager.logOpeningUrl(url);
51
+ // TODO: Expensive, we should only do this once.
52
+ const { exp } = (0, _config).getConfig(this.projectRoot);
53
+ const installedExpo = await deviceManager.ensureExpoGoAsync(exp.sdkVersion);
54
+ await deviceManager.activateWindowAsync();
55
+ await deviceManager.openUrlAsync(url);
56
+ (0, _rudderstackClient).logEvent("Open Url on Device", {
57
+ platform: this.props.platform,
58
+ installedExpo
59
+ });
60
+ return {
61
+ url
62
+ };
63
+ }
64
+ async openProjectInCustomRuntimeAsync(resolveSettings = {}, props = {}) {
65
+ Log.debug(`open custom (${Object.entries(props).map(([k, v])=>`${k}: ${v}`
66
+ ).join(", ")})`);
67
+ let url = this.props.getCustomRuntimeUrl({
68
+ scheme: props.scheme
69
+ });
70
+ var _applicationId;
71
+ // TODO: It's unclear why we do application id validation when opening with a URL
72
+ const applicationId = (_applicationId = props.applicationId) != null ? _applicationId : await this._getAppIdResolver().getAppIdAsync();
73
+ const deviceManager = await this.props.resolveDeviceAsync(resolveSettings);
74
+ if (!await deviceManager.isAppInstalledAsync(applicationId)) {
75
+ throw new _errors.CommandError(`The development client (${applicationId}) for this project is not installed. ` + `Please build and install the client on the device first.\n${(0, _link).learnMore("https://docs.expo.dev/development/build/")}`);
76
+ }
77
+ // TODO: Rethink analytics
78
+ (0, _rudderstackClient).logEvent("Open Url on Device", {
79
+ platform: this.props.platform,
80
+ installedExpo: false
81
+ });
82
+ if (!url) {
83
+ url = this._resolveAlternativeLaunchUrl(applicationId, props);
84
+ }
85
+ deviceManager.logOpeningUrl(url);
86
+ await deviceManager.activateWindowAsync();
87
+ await deviceManager.openUrlAsync(url);
88
+ return {
89
+ url
90
+ };
91
+ }
92
+ /** Launch the project on a device given the input runtime. */ async openAsync(options, resolveSettings = {}) {
93
+ Log.debug(`open (runtime: ${options.runtime}, platform: ${this.props.platform}, device: %O, shouldPrompt: ${resolveSettings.shouldPrompt})`, resolveSettings.device);
94
+ if (options.runtime === "expo") {
95
+ return this.openProjectInExpoGoAsync(resolveSettings);
96
+ } else if (options.runtime === "web") {
97
+ return this.openWebProjectAsync(resolveSettings);
98
+ } else if (options.runtime === "custom") {
99
+ return this.openProjectInCustomRuntimeAsync(resolveSettings, options.props);
100
+ } else {
101
+ throw new _errors.CommandError(`Invalid runtime target: ${options.runtime}`);
102
+ }
103
+ }
104
+ /** Open the current web project (Webpack) in a device . */ async openWebProjectAsync(resolveSettings = {}) {
105
+ const url = this.props.getDevServerUrl();
106
+ (0, _assert).default(url, "Dev server is not running.");
107
+ const deviceManager = await this.props.resolveDeviceAsync(resolveSettings);
108
+ deviceManager.logOpeningUrl(url);
109
+ await deviceManager.activateWindowAsync();
110
+ await deviceManager.openUrlAsync(url);
111
+ return {
112
+ url
113
+ };
114
+ }
115
+ /** If the launch URL cannot be determined (`custom` runtimes) then an alternative string can be provided to open the device. Often a device ID or activity to launch. Exposed for testing. */ _resolveAlternativeLaunchUrl(applicationId, props = {}) {
116
+ throw new _errors.UnimplementedError();
117
+ }
118
+ }
119
+ exports.PlatformManager = PlatformManager;
120
+
121
+ //# sourceMappingURL=PlatformManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/start/platforms/PlatformManager.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport assert from 'assert';\n\nimport * as Log from '../../log';\nimport { logEvent } from '../../utils/analytics/rudderstackClient';\nimport { CommandError, UnimplementedError } from '../../utils/errors';\nimport { learnMore } from '../../utils/link';\nimport { AppIdResolver } from './AppIdResolver';\nimport { DeviceManager } from './DeviceManager';\n\nexport interface BaseOpenInCustomProps {\n scheme?: string;\n applicationId?: string | null;\n}\n\nexport interface BaseResolveDeviceProps<IDevice> {\n /** Should prompt the user to select a device. */\n shouldPrompt?: boolean;\n /** The target device to use. */\n device?: IDevice;\n}\n\n/** An abstract class for launching a URL on a device. */\nexport class PlatformManager<\n IDevice,\n IOpenInCustomProps extends BaseOpenInCustomProps = BaseOpenInCustomProps,\n IResolveDeviceProps extends BaseResolveDeviceProps<IDevice> = BaseResolveDeviceProps<IDevice>\n> {\n constructor(\n protected projectRoot: string,\n protected props: {\n platform: 'ios' | 'android';\n /** Get the base URL for the dev server hosting this platform manager. */\n getDevServerUrl: () => string | null;\n /** Expo Go URL */\n getExpoGoUrl: () => string | null;\n /** Dev Client */\n getCustomRuntimeUrl: (props?: { scheme?: string }) => string | null;\n /** Resolve a device, this function should automatically handle opening the device and asserting any system validations. */\n resolveDeviceAsync: (\n resolver?: Partial<IResolveDeviceProps>\n ) => Promise<DeviceManager<IDevice>>;\n }\n ) {}\n\n /** Returns the project application identifier or asserts that one is not defined. Exposed for testing. */\n _getAppIdResolver(): AppIdResolver {\n throw new UnimplementedError();\n }\n\n protected async openProjectInExpoGoAsync(\n resolveSettings: Partial<IResolveDeviceProps> = {}\n ): Promise<{ url: string }> {\n const url = this.props.getExpoGoUrl();\n // This should never happen, but just in case...\n assert(url, 'Could not get dev server URL');\n\n const deviceManager = await this.props.resolveDeviceAsync(resolveSettings);\n deviceManager.logOpeningUrl(url);\n\n // TODO: Expensive, we should only do this once.\n const { exp } = getConfig(this.projectRoot);\n const installedExpo = await deviceManager.ensureExpoGoAsync(exp.sdkVersion);\n\n await deviceManager.activateWindowAsync();\n await deviceManager.openUrlAsync(url);\n\n logEvent('Open Url on Device', {\n platform: this.props.platform,\n installedExpo,\n });\n\n return { url };\n }\n\n private async openProjectInCustomRuntimeAsync(\n resolveSettings: Partial<IResolveDeviceProps> = {},\n props: Partial<IOpenInCustomProps> = {}\n ): Promise<{ url: string }> {\n Log.debug(\n `open custom (${Object.entries(props)\n .map(([k, v]) => `${k}: ${v}`)\n .join(', ')})`\n );\n\n let url = this.props.getCustomRuntimeUrl({ scheme: props.scheme });\n // TODO: It's unclear why we do application id validation when opening with a URL\n const applicationId = props.applicationId ?? (await this._getAppIdResolver().getAppIdAsync());\n\n const deviceManager = await this.props.resolveDeviceAsync(resolveSettings);\n\n if (!(await deviceManager.isAppInstalledAsync(applicationId))) {\n throw new CommandError(\n `The development client (${applicationId}) for this project is not installed. ` +\n `Please build and install the client on the device first.\\n${learnMore(\n 'https://docs.expo.dev/development/build/'\n )}`\n );\n }\n\n // TODO: Rethink analytics\n logEvent('Open Url on Device', {\n platform: this.props.platform,\n installedExpo: false,\n });\n\n if (!url) {\n url = this._resolveAlternativeLaunchUrl(applicationId, props);\n }\n\n deviceManager.logOpeningUrl(url);\n await deviceManager.activateWindowAsync();\n await deviceManager.openUrlAsync(url);\n\n return {\n url,\n };\n }\n\n /** Launch the project on a device given the input runtime. */\n async openAsync(\n options:\n | {\n runtime: 'expo' | 'web';\n }\n | {\n runtime: 'custom';\n props?: Partial<IOpenInCustomProps>;\n },\n resolveSettings: Partial<IResolveDeviceProps> = {}\n ): Promise<{ url: string }> {\n Log.debug(\n `open (runtime: ${options.runtime}, platform: ${this.props.platform}, device: %O, shouldPrompt: ${resolveSettings.shouldPrompt})`,\n resolveSettings.device\n );\n if (options.runtime === 'expo') {\n return this.openProjectInExpoGoAsync(resolveSettings);\n } else if (options.runtime === 'web') {\n return this.openWebProjectAsync(resolveSettings);\n } else if (options.runtime === 'custom') {\n return this.openProjectInCustomRuntimeAsync(resolveSettings, options.props);\n } else {\n throw new CommandError(`Invalid runtime target: ${options.runtime}`);\n }\n }\n\n /** Open the current web project (Webpack) in a device . */\n private async openWebProjectAsync(resolveSettings: Partial<IResolveDeviceProps> = {}): Promise<{\n url: string;\n }> {\n const url = this.props.getDevServerUrl();\n assert(url, 'Dev server is not running.');\n\n const deviceManager = await this.props.resolveDeviceAsync(resolveSettings);\n deviceManager.logOpeningUrl(url);\n await deviceManager.activateWindowAsync();\n await deviceManager.openUrlAsync(url);\n\n return { url };\n }\n\n /** If the launch URL cannot be determined (`custom` runtimes) then an alternative string can be provided to open the device. Often a device ID or activity to launch. Exposed for testing. */\n _resolveAlternativeLaunchUrl(\n applicationId: string,\n props: Partial<IOpenInCustomProps> = {}\n ): string {\n throw new UnimplementedError();\n }\n}\n"],"names":["Log","PlatformManager","constructor","projectRoot","props","_getAppIdResolver","UnimplementedError","openProjectInExpoGoAsync","resolveSettings","url","getExpoGoUrl","assert","deviceManager","resolveDeviceAsync","logOpeningUrl","exp","getConfig","installedExpo","ensureExpoGoAsync","sdkVersion","activateWindowAsync","openUrlAsync","logEvent","platform","openProjectInCustomRuntimeAsync","debug","Object","entries","map","k","v","join","getCustomRuntimeUrl","scheme","applicationId","getAppIdAsync","isAppInstalledAsync","CommandError","learnMore","_resolveAlternativeLaunchUrl","openAsync","options","runtime","shouldPrompt","device","openWebProjectAsync","getDevServerUrl"],"mappings":"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"}