@expo/cli 0.17.9 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/build/bin/cli +11 -7
  2. package/build/bin/cli.map +1 -1
  3. package/build/src/api/getExpoSchema.js +23 -5
  4. package/build/src/api/getExpoSchema.js.map +1 -1
  5. package/build/src/api/graphql/client.js +28 -10
  6. package/build/src/api/graphql/client.js.map +1 -1
  7. package/build/src/api/graphql/queries/AppQuery.js +16 -4
  8. package/build/src/api/graphql/queries/AppQuery.js.map +1 -1
  9. package/build/src/api/graphql/queries/UserQuery.js +8 -2
  10. package/build/src/api/graphql/queries/UserQuery.js.map +1 -1
  11. package/build/src/api/graphql/types/App.js +8 -2
  12. package/build/src/api/graphql/types/App.js.map +1 -1
  13. package/build/src/api/rest/cache/FileSystemCache.js +21 -9
  14. package/build/src/api/rest/cache/FileSystemCache.js.map +1 -1
  15. package/build/src/api/rest/cache/response.js +9 -3
  16. package/build/src/api/rest/cache/response.js.map +1 -1
  17. package/build/src/api/rest/cache/wrapFetchWithCache.js +32 -8
  18. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
  19. package/build/src/api/rest/client.js +23 -5
  20. package/build/src/api/rest/client.js.map +1 -1
  21. package/build/src/api/rest/wrapFetchWithBaseUrl.js +9 -4
  22. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
  23. package/build/src/api/rest/wrapFetchWithProxy.js +8 -2
  24. package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
  25. package/build/src/api/settings.js +8 -2
  26. package/build/src/api/settings.js.map +1 -1
  27. package/build/src/api/updateDevelopmentSession.js +18 -6
  28. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  29. package/build/src/api/user/UserSettings.js +26 -8
  30. package/build/src/api/user/UserSettings.js.map +1 -1
  31. package/build/src/api/user/actions.js +17 -5
  32. package/build/src/api/user/actions.js.map +1 -1
  33. package/build/src/api/user/expoSsoLauncher.js +32 -8
  34. package/build/src/api/user/expoSsoLauncher.js.map +1 -1
  35. package/build/src/api/user/otp.js +17 -5
  36. package/build/src/api/user/otp.js.map +1 -1
  37. package/build/src/api/user/user.js +19 -12
  38. package/build/src/api/user/user.js.map +1 -1
  39. package/build/src/config/configAsync.js +25 -7
  40. package/build/src/config/configAsync.js.map +1 -1
  41. package/build/src/config/index.js +9 -3
  42. package/build/src/config/index.js.map +1 -1
  43. package/build/src/customize/customizeAsync.js +8 -2
  44. package/build/src/customize/customizeAsync.js.map +1 -1
  45. package/build/src/customize/generate.js +16 -4
  46. package/build/src/customize/generate.js.map +1 -1
  47. package/build/src/customize/index.js +10 -4
  48. package/build/src/customize/index.js.map +1 -1
  49. package/build/src/customize/templates.js +33 -9
  50. package/build/src/customize/templates.js.map +1 -1
  51. package/build/src/customize/typescript.js +8 -2
  52. package/build/src/customize/typescript.js.map +1 -1
  53. package/build/src/export/createMetadataJson.js +8 -2
  54. package/build/src/export/createMetadataJson.js.map +1 -1
  55. package/build/src/export/embed/exportEmbedAsync.js +58 -18
  56. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  57. package/build/src/export/embed/index.js +17 -5
  58. package/build/src/export/embed/index.js.map +1 -1
  59. package/build/src/export/embed/resolveOptions.js +8 -2
  60. package/build/src/export/embed/resolveOptions.js.map +1 -1
  61. package/build/src/export/embed/xcodeCompilerLogger.js +16 -4
  62. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
  63. package/build/src/export/exportApp.js +32 -12
  64. package/build/src/export/exportApp.js.map +1 -1
  65. package/build/src/export/exportAssets.js +27 -9
  66. package/build/src/export/exportAssets.js.map +1 -1
  67. package/build/src/export/exportAsync.js +10 -2
  68. package/build/src/export/exportAsync.js.map +1 -1
  69. package/build/src/export/exportHermes.js +29 -17
  70. package/build/src/export/exportHermes.js.map +1 -1
  71. package/build/src/export/exportStaticAsync.js +69 -37
  72. package/build/src/export/exportStaticAsync.js.map +1 -1
  73. package/build/src/export/favicon.js +33 -9
  74. package/build/src/export/favicon.js.map +1 -1
  75. package/build/src/export/fork-bundleAsync.js +61 -16
  76. package/build/src/export/fork-bundleAsync.js.map +1 -1
  77. package/build/src/export/getPublicExpoManifest.js +8 -2
  78. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  79. package/build/src/export/getResolvedLocales.js +15 -3
  80. package/build/src/export/getResolvedLocales.js.map +1 -1
  81. package/build/src/export/index.js +11 -5
  82. package/build/src/export/index.js.map +1 -1
  83. package/build/src/export/metroAssetLocalPath.js +9 -3
  84. package/build/src/export/metroAssetLocalPath.js.map +1 -1
  85. package/build/src/export/persistMetroAssets.js +27 -15
  86. package/build/src/export/persistMetroAssets.js.map +1 -1
  87. package/build/src/export/publicFolder.js +18 -6
  88. package/build/src/export/publicFolder.js.map +1 -1
  89. package/build/src/export/resolveOptions.js +8 -2
  90. package/build/src/export/resolveOptions.js.map +1 -1
  91. package/build/src/export/saveAssets.js +43 -19
  92. package/build/src/export/saveAssets.js.map +1 -1
  93. package/build/src/export/web/exportWebAsync.js +16 -4
  94. package/build/src/export/web/exportWebAsync.js.map +1 -1
  95. package/build/src/export/web/index.js +9 -3
  96. package/build/src/export/web/index.js.map +1 -1
  97. package/build/src/install/applyPlugins.js +8 -2
  98. package/build/src/install/applyPlugins.js.map +1 -1
  99. package/build/src/install/checkPackages.js +18 -6
  100. package/build/src/install/checkPackages.js.map +1 -1
  101. package/build/src/install/fixPackages.js +8 -2
  102. package/build/src/install/fixPackages.js.map +1 -1
  103. package/build/src/install/index.js +14 -8
  104. package/build/src/install/index.js.map +1 -1
  105. package/build/src/install/installAsync.js +27 -9
  106. package/build/src/install/installAsync.js.map +1 -1
  107. package/build/src/install/installExpoPackage.js +17 -5
  108. package/build/src/install/installExpoPackage.js.map +1 -1
  109. package/build/src/install/utils/autoAddConfigPlugins.js +17 -5
  110. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  111. package/build/src/log.js +9 -3
  112. package/build/src/log.js.map +1 -1
  113. package/build/src/prebuild/clearNativeFolder.js +37 -13
  114. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  115. package/build/src/prebuild/configureProjectAsync.js +16 -4
  116. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  117. package/build/src/prebuild/copyTemplateFiles.js +29 -11
  118. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  119. package/build/src/prebuild/ensureConfigAsync.js +24 -6
  120. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  121. package/build/src/prebuild/index.js +14 -8
  122. package/build/src/prebuild/index.js.map +1 -1
  123. package/build/src/prebuild/prebuildAsync.js +9 -3
  124. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  125. package/build/src/prebuild/renameTemplateAppName.js +119 -0
  126. package/build/src/prebuild/renameTemplateAppName.js.map +1 -0
  127. package/build/src/prebuild/resolveOptions.js +32 -8
  128. package/build/src/prebuild/resolveOptions.js.map +1 -1
  129. package/build/src/prebuild/resolveTemplate.js +44 -14
  130. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  131. package/build/src/prebuild/updateFromTemplate.js +18 -2
  132. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  133. package/build/src/prebuild/updatePackageJson.js +49 -13
  134. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  135. package/build/src/prebuild/validateTemplatePlatforms.js +16 -4
  136. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  137. package/build/src/run/android/index.js +20 -4
  138. package/build/src/run/android/index.js.map +1 -1
  139. package/build/src/run/android/resolveGradlePropsAsync.js +55 -0
  140. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -0
  141. package/build/src/run/android/resolveInstallApkName.js +18 -6
  142. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  143. package/build/src/run/android/resolveLaunchProps.js +10 -4
  144. package/build/src/run/android/resolveLaunchProps.js.map +1 -1
  145. package/build/src/run/android/resolveOptions.js +5 -3
  146. package/build/src/run/android/resolveOptions.js.map +1 -1
  147. package/build/src/run/android/runAndroidAsync.js +13 -4
  148. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  149. package/build/src/run/ensureNativeProject.js +15 -3
  150. package/build/src/run/ensureNativeProject.js.map +1 -1
  151. package/build/src/run/hints.js +10 -4
  152. package/build/src/run/hints.js.map +1 -1
  153. package/build/src/run/index.js +8 -2
  154. package/build/src/run/index.js.map +1 -1
  155. package/build/src/run/ios/XcodeBuild.js +57 -21
  156. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  157. package/build/src/run/ios/appleDevice/AppleDevice.js +25 -7
  158. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  159. package/build/src/run/ios/appleDevice/ClientManager.js +10 -4
  160. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  161. package/build/src/run/ios/appleDevice/client/AFCClient.js +34 -10
  162. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  163. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +16 -4
  164. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  165. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +8 -2
  166. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  167. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +17 -5
  168. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  169. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +17 -5
  170. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  171. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +25 -7
  172. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  173. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +24 -6
  174. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  175. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +8 -2
  176. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  177. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +16 -4
  178. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  179. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +8 -2
  180. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  181. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +16 -4
  182. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  183. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +16 -4
  184. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
  185. package/build/src/run/ios/codeSigning/Security.js +17 -5
  186. package/build/src/run/ios/codeSigning/Security.js.map +1 -1
  187. package/build/src/run/ios/codeSigning/configureCodeSigning.js +8 -2
  188. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  189. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +9 -3
  190. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  191. package/build/src/run/ios/codeSigning/simulatorCodeSigning.js +25 -7
  192. package/build/src/run/ios/codeSigning/simulatorCodeSigning.js.map +1 -1
  193. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +22 -10
  194. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  195. package/build/src/run/ios/index.js +19 -7
  196. package/build/src/run/ios/index.js.map +1 -1
  197. package/build/src/run/ios/launchApp.js +17 -5
  198. package/build/src/run/ios/launchApp.js.map +1 -1
  199. package/build/src/run/ios/options/promptDevice.js +9 -3
  200. package/build/src/run/ios/options/promptDevice.js.map +1 -1
  201. package/build/src/run/ios/options/resolveDevice.js +1 -2
  202. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  203. package/build/src/run/ios/options/resolveNativeScheme.js +27 -9
  204. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  205. package/build/src/run/ios/options/resolveXcodeProject.js +8 -2
  206. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
  207. package/build/src/run/ios/runIosAsync.js +10 -2
  208. package/build/src/run/ios/runIosAsync.js.map +1 -1
  209. package/build/src/run/startBundler.js +16 -4
  210. package/build/src/run/startBundler.js.map +1 -1
  211. package/build/src/start/detectDevClient.js +29 -0
  212. package/build/src/start/detectDevClient.js.map +1 -0
  213. package/build/src/start/doctor/SecurityBinPrerequisite.js +8 -2
  214. package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -1
  215. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +16 -4
  216. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  217. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +16 -4
  218. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -1
  219. package/build/src/start/doctor/apple/XcodePrerequisite.js +79 -29
  220. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  221. package/build/src/start/doctor/apple/XcrunPrerequisite.js +24 -6
  222. package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -1
  223. package/build/src/start/doctor/dependencies/bundledNativeModules.js +25 -7
  224. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -1
  225. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +27 -9
  226. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  227. package/build/src/start/doctor/dependencies/getMissingPackages.js +24 -6
  228. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  229. package/build/src/start/doctor/dependencies/getVersionedPackages.js +8 -2
  230. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  231. package/build/src/start/doctor/dependencies/resolvePackages.js +25 -7
  232. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
  233. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +32 -21
  234. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  235. package/build/src/start/doctor/ngrok/ExternalModule.js +33 -9
  236. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  237. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +18 -6
  238. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  239. package/build/src/start/doctor/typescript/updateTSConfig.js +29 -11
  240. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  241. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +18 -6
  242. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  243. package/build/src/start/index.js +17 -11
  244. package/build/src/start/index.js.map +1 -1
  245. package/build/src/start/interface/commandsTable.js +27 -9
  246. package/build/src/start/interface/commandsTable.js.map +1 -1
  247. package/build/src/start/interface/interactiveActions.js +17 -11
  248. package/build/src/start/interface/interactiveActions.js.map +1 -1
  249. package/build/src/start/interface/startInterface.js +8 -2
  250. package/build/src/start/interface/startInterface.js.map +1 -1
  251. package/build/src/start/platforms/AppIdResolver.js +9 -3
  252. package/build/src/start/platforms/AppIdResolver.js.map +1 -1
  253. package/build/src/start/platforms/DeviceManager.js +8 -2
  254. package/build/src/start/platforms/DeviceManager.js.map +1 -1
  255. package/build/src/start/platforms/ExpoGoInstaller.js +30 -14
  256. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  257. package/build/src/start/platforms/PlatformManager.js +33 -13
  258. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  259. package/build/src/start/platforms/android/ADBServer.js +17 -5
  260. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  261. package/build/src/start/platforms/android/AndroidAppIdResolver.js +13 -7
  262. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
  263. package/build/src/start/platforms/android/AndroidDeviceManager.js +19 -7
  264. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  265. package/build/src/start/platforms/android/AndroidSdk.js +34 -10
  266. package/build/src/start/platforms/android/AndroidSdk.js.map +1 -1
  267. package/build/src/start/platforms/android/activateWindow.js +16 -4
  268. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  269. package/build/src/start/platforms/android/adb.js +21 -4
  270. package/build/src/start/platforms/android/adb.js.map +1 -1
  271. package/build/src/start/platforms/android/emulator.js +32 -8
  272. package/build/src/start/platforms/android/emulator.js.map +1 -1
  273. package/build/src/start/platforms/android/gradle.js +23 -6
  274. package/build/src/start/platforms/android/gradle.js.map +1 -1
  275. package/build/src/start/platforms/android/promptAndroidDevice.js +10 -4
  276. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  277. package/build/src/start/platforms/ios/AppleAppIdResolver.js +26 -8
  278. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
  279. package/build/src/start/platforms/ios/AppleDeviceManager.js +50 -18
  280. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  281. package/build/src/start/platforms/ios/assertSystemRequirements.js +4 -3
  282. package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -1
  283. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +16 -4
  284. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  285. package/build/src/start/platforms/ios/getBestSimulator.js +8 -2
  286. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  287. package/build/src/start/platforms/ios/promptAppleDevice.js +9 -3
  288. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  289. package/build/src/start/platforms/ios/simctl.js +12 -6
  290. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  291. package/build/src/start/platforms/ios/simctlLogging.js +40 -10
  292. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  293. package/build/src/start/platforms/ios/xcrun.js +16 -4
  294. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  295. package/build/src/start/project/dotExpo.js +27 -9
  296. package/build/src/start/project/dotExpo.js.map +1 -1
  297. package/build/src/start/resolveOptions.js +33 -15
  298. package/build/src/start/resolveOptions.js.map +1 -1
  299. package/build/src/start/server/AsyncNgrok.js +34 -10
  300. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  301. package/build/src/start/server/BundlerDevServer.js +16 -4
  302. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  303. package/build/src/start/server/DevServerManager.js +28 -10
  304. package/build/src/start/server/DevServerManager.js.map +1 -1
  305. package/build/src/start/server/DevToolsPluginManager.js +16 -4
  306. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  307. package/build/src/start/server/DevelopmentSession.js +9 -3
  308. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  309. package/build/src/start/server/ReactDevToolsProxy.js +26 -8
  310. package/build/src/start/server/ReactDevToolsProxy.js.map +1 -1
  311. package/build/src/start/server/UrlCreator.js +19 -6
  312. package/build/src/start/server/UrlCreator.js.map +1 -1
  313. package/build/src/start/server/getStaticRenderFunctions.js +91 -55
  314. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  315. package/build/src/start/server/metro/MetroBundlerDevServer.js +231 -83
  316. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  317. package/build/src/start/server/metro/MetroTerminalReporter.js +30 -15
  318. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  319. package/build/src/start/server/metro/TerminalReporter.js +26 -8
  320. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  321. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
  322. package/build/src/start/server/metro/createExpoMetroResolver.js +56 -20
  323. package/build/src/start/server/metro/createExpoMetroResolver.js.map +1 -1
  324. package/build/src/start/server/metro/createJResolver.js +90 -45
  325. package/build/src/start/server/metro/createJResolver.js.map +1 -1
  326. package/build/src/start/server/metro/createServerRouteMiddleware.js +29 -28
  327. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  328. package/build/src/start/server/metro/debugging/MessageHandler.js +27 -0
  329. package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -0
  330. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +11 -8
  331. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  332. package/build/src/start/server/metro/debugging/createHandlersFactory.js +63 -0
  333. package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -0
  334. package/build/src/start/server/metro/debugging/{inspectorHandlers/utils.js → getDebuggerType.js} +1 -6
  335. package/build/src/start/server/metro/debugging/getDebuggerType.js.map +1 -0
  336. package/build/src/start/server/metro/debugging/{inspectorHandlers → messageHandlers}/NetworkResponse.js +8 -5
  337. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -0
  338. package/build/src/start/server/metro/debugging/{inspectorHandlers → messageHandlers}/PageReload.js +7 -6
  339. package/build/src/start/server/metro/debugging/messageHandlers/PageReload.js.map +1 -0
  340. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js +25 -0
  341. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -0
  342. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js +22 -0
  343. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -0
  344. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js +28 -0
  345. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  346. package/build/src/start/server/metro/debugging/{inspectorHandlers → messageHandlers}/VscodeRuntimeGetProperties.js +10 -6
  347. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js.map +1 -0
  348. package/build/src/start/server/metro/debugging/pageIsSupported.js +14 -0
  349. package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -0
  350. package/build/src/start/server/metro/debugging/types.js.map +1 -0
  351. package/build/src/start/server/metro/externals.js +51 -64
  352. package/build/src/start/server/metro/externals.js.map +1 -1
  353. package/build/src/start/server/metro/fetchRouterManifest.js +8 -2
  354. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  355. package/build/src/start/server/metro/formatFileCandidates.js +8 -2
  356. package/build/src/start/server/metro/formatFileCandidates.js.map +1 -1
  357. package/build/src/start/server/metro/getCssModulesFromBundler.js +34 -10
  358. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  359. package/build/src/start/server/metro/instantiateMetro.js +96 -30
  360. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  361. package/build/src/start/server/metro/metroErrorInterface.js +40 -21
  362. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  363. package/build/src/start/server/metro/metroVirtualModules.js +82 -0
  364. package/build/src/start/server/metro/metroVirtualModules.js.map +1 -0
  365. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +8 -2
  366. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
  367. package/build/src/start/server/metro/router.js +44 -17
  368. package/build/src/start/server/metro/router.js.map +1 -1
  369. package/build/src/start/server/metro/runServer-fork.js +56 -14
  370. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  371. package/build/src/start/server/metro/serializeHtml.js +25 -12
  372. package/build/src/start/server/metro/serializeHtml.js.map +1 -1
  373. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +8 -2
  374. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  375. package/build/src/start/server/metro/withMetroMultiPlatform.js +148 -46
  376. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  377. package/build/src/start/server/metro/withMetroResolvers.js +31 -13
  378. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  379. package/build/src/start/server/middleware/CreateFileMiddleware.js +22 -10
  380. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  381. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +16 -4
  382. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
  383. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +42 -12
  384. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  385. package/build/src/start/server/middleware/ExpoMiddleware.js +8 -2
  386. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  387. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +41 -11
  388. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  389. package/build/src/start/server/middleware/ManifestMiddleware.js +40 -10
  390. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  391. package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js +24 -6
  392. package/build/src/start/server/middleware/ReactDevToolsPageMiddleware.js.map +1 -1
  393. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +8 -2
  394. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  395. package/build/src/start/server/middleware/ServeStaticMiddleware.js +24 -6
  396. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  397. package/build/src/start/server/middleware/inspector/JsInspector.js +25 -8
  398. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  399. package/build/src/start/server/middleware/inspector/LaunchBrowser.js +10 -4
  400. package/build/src/start/server/middleware/inspector/LaunchBrowser.js.map +1 -1
  401. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js +24 -6
  402. package/build/src/start/server/middleware/inspector/LaunchBrowserImplLinux.js.map +1 -1
  403. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js +33 -9
  404. package/build/src/start/server/middleware/inspector/LaunchBrowserImplMacOS.js.map +1 -1
  405. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js +27 -11
  406. package/build/src/start/server/middleware/inspector/LaunchBrowserImplWindows.js.map +1 -1
  407. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +33 -9
  408. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
  409. package/build/src/start/server/middleware/metroOptions.js +12 -2
  410. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  411. package/build/src/start/server/middleware/resolveAssets.js +17 -5
  412. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  413. package/build/src/start/server/middleware/resolvePlatform.js +8 -2
  414. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  415. package/build/src/start/server/platformBundlers.js +8 -2
  416. package/build/src/start/server/platformBundlers.js.map +1 -1
  417. package/build/src/start/server/serverLogLikeMetro.js +37 -13
  418. package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
  419. package/build/src/start/server/type-generation/expo-env.js +16 -4
  420. package/build/src/start/server/type-generation/expo-env.js.map +1 -1
  421. package/build/src/start/server/type-generation/routes.js +91 -37
  422. package/build/src/start/server/type-generation/routes.js.map +1 -1
  423. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +27 -9
  424. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  425. package/build/src/start/server/type-generation/tsconfig.js +27 -9
  426. package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
  427. package/build/src/start/server/webTemplate.js +26 -8
  428. package/build/src/start/server/webTemplate.js.map +1 -1
  429. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +36 -12
  430. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  431. package/build/src/start/server/webpack/compile.js +17 -5
  432. package/build/src/start/server/webpack/compile.js.map +1 -1
  433. package/build/src/start/server/webpack/resolveFromProject.js +8 -2
  434. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
  435. package/build/src/start/server/webpack/tls.js +35 -11
  436. package/build/src/start/server/webpack/tls.js.map +1 -1
  437. package/build/src/start/startAsync.js +36 -11
  438. package/build/src/start/startAsync.js.map +1 -1
  439. package/build/src/utils/FileNotifier.js +32 -8
  440. package/build/src/utils/FileNotifier.js.map +1 -1
  441. package/build/src/utils/analytics/getDevClientProperties.js +26 -8
  442. package/build/src/utils/analytics/getDevClientProperties.js.map +1 -1
  443. package/build/src/utils/analytics/metroDebuggerMiddleware.js +2 -2
  444. package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
  445. package/build/src/utils/args.js +32 -8
  446. package/build/src/utils/args.js.map +1 -1
  447. package/build/src/utils/cocoapods.js +64 -28
  448. package/build/src/utils/cocoapods.js.map +1 -1
  449. package/build/src/utils/codesigning.js +79 -29
  450. package/build/src/utils/codesigning.js.map +1 -1
  451. package/build/src/utils/createFileTransform.js +24 -69
  452. package/build/src/utils/createFileTransform.js.map +1 -1
  453. package/build/src/utils/dir.js +33 -26
  454. package/build/src/utils/dir.js.map +1 -1
  455. package/build/src/utils/downloadAppAsync.js +40 -10
  456. package/build/src/utils/downloadAppAsync.js.map +1 -1
  457. package/build/src/utils/downloadExpoGoAsync.js +26 -11
  458. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  459. package/build/src/utils/editor.js +18 -6
  460. package/build/src/utils/editor.js.map +1 -1
  461. package/build/src/utils/env.js +40 -31
  462. package/build/src/utils/env.js.map +1 -1
  463. package/build/src/utils/errors.js +20 -5
  464. package/build/src/utils/errors.js.map +1 -1
  465. package/build/src/utils/findUp.js +18 -6
  466. package/build/src/utils/findUp.js.map +1 -1
  467. package/build/src/utils/getOrPromptApplicationId.js +19 -7
  468. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  469. package/build/src/utils/getRunningProcess.js +18 -6
  470. package/build/src/utils/getRunningProcess.js.map +1 -1
  471. package/build/src/utils/git.js +18 -6
  472. package/build/src/utils/git.js.map +1 -1
  473. package/build/src/utils/glob.js +9 -3
  474. package/build/src/utils/glob.js.map +1 -1
  475. package/build/src/utils/ip.js +8 -2
  476. package/build/src/utils/ip.js.map +1 -1
  477. package/build/src/utils/isModuleSymlinked.js +16 -4
  478. package/build/src/utils/isModuleSymlinked.js.map +1 -1
  479. package/build/src/utils/link.js +18 -6
  480. package/build/src/utils/link.js.map +1 -1
  481. package/build/src/utils/mergeGitIgnorePaths.js +25 -13
  482. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  483. package/build/src/utils/modifyConfigAsync.js +18 -6
  484. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  485. package/build/src/utils/modifyConfigPlugins.js +8 -2
  486. package/build/src/utils/modifyConfigPlugins.js.map +1 -1
  487. package/build/src/utils/nodeEnv.js +2 -0
  488. package/build/src/utils/nodeEnv.js.map +1 -1
  489. package/build/src/utils/nodeModules.js +23 -5
  490. package/build/src/utils/nodeModules.js.map +1 -1
  491. package/build/src/utils/npm.js +64 -17
  492. package/build/src/utils/npm.js.map +1 -1
  493. package/build/src/utils/open.js +9 -3
  494. package/build/src/utils/open.js.map +1 -1
  495. package/build/src/utils/ora.js +16 -4
  496. package/build/src/utils/ora.js.map +1 -1
  497. package/build/src/utils/plist.js +24 -6
  498. package/build/src/utils/plist.js.map +1 -1
  499. package/build/src/utils/port.js +22 -10
  500. package/build/src/utils/port.js.map +1 -1
  501. package/build/src/utils/profile.js +8 -2
  502. package/build/src/utils/profile.js.map +1 -1
  503. package/build/src/utils/progress.js +8 -2
  504. package/build/src/utils/progress.js.map +1 -1
  505. package/build/src/utils/prompts.js +16 -4
  506. package/build/src/utils/prompts.js.map +1 -1
  507. package/build/src/utils/scheme.js +75 -23
  508. package/build/src/utils/scheme.js.map +1 -1
  509. package/build/src/utils/tar.js +16 -4
  510. package/build/src/utils/tar.js.map +1 -1
  511. package/build/src/utils/telemetry/DetachedClient.js +87 -0
  512. package/build/src/utils/telemetry/DetachedClient.js.map +1 -0
  513. package/build/src/utils/telemetry/RudderClient.js +98 -0
  514. package/build/src/utils/telemetry/RudderClient.js.map +1 -0
  515. package/build/src/utils/telemetry/flushDetached.js +43 -0
  516. package/build/src/utils/telemetry/flushDetached.js.map +1 -0
  517. package/build/src/utils/telemetry/getContext.js +92 -0
  518. package/build/src/utils/telemetry/getContext.js.map +1 -0
  519. package/build/src/utils/telemetry/index.js +32 -0
  520. package/build/src/utils/telemetry/index.js.map +1 -0
  521. package/build/src/utils/telemetry/types.js +6 -0
  522. package/build/src/utils/telemetry/types.js.map +1 -0
  523. package/build/src/utils/tsconfig/evaluateTsConfig.js +16 -4
  524. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -1
  525. package/build/src/utils/tsconfig/loadTsConfigPaths.js +18 -6
  526. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
  527. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +10 -4
  528. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -1
  529. package/build/src/utils/url.js +19 -10
  530. package/build/src/utils/url.js.map +1 -1
  531. package/build/src/utils/validateApplicationId.js +18 -6
  532. package/build/src/utils/validateApplicationId.js.map +1 -1
  533. package/build/src/whoami/whoamiAsync.js +8 -2
  534. package/build/src/whoami/whoamiAsync.js.map +1 -1
  535. package/package.json +15 -16
  536. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +27907 -0
  537. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +9494 -0
  538. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-profiling.js +10015 -0
  539. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +28375 -0
  540. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +9714 -0
  541. package/build/src/run/android/resolveGradleProps.js +0 -37
  542. package/build/src/run/android/resolveGradleProps.js.map +0 -1
  543. package/build/src/start/server/metro/bundleApiRoutes.js +0 -52
  544. package/build/src/start/server/metro/bundleApiRoutes.js.map +0 -1
  545. package/build/src/start/server/metro/debugging/InspectorDevice.js +0 -80
  546. package/build/src/start/server/metro/debugging/InspectorDevice.js.map +0 -1
  547. package/build/src/start/server/metro/debugging/InspectorProxy.js +0 -116
  548. package/build/src/start/server/metro/debugging/InspectorProxy.js.map +0 -1
  549. package/build/src/start/server/metro/debugging/inspectorHandlers/NetworkResponse.js.map +0 -1
  550. package/build/src/start/server/metro/debugging/inspectorHandlers/PageReload.js.map +0 -1
  551. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerGetPossibleBreakpoints.js +0 -21
  552. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +0 -1
  553. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerScriptParsed.js +0 -56
  554. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerScriptParsed.js.map +0 -1
  555. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerSetBreakpointByUrl.js +0 -18
  556. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +0 -1
  557. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js +0 -24
  558. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeCallFunctionOn.js.map +0 -1
  559. package/build/src/start/server/metro/debugging/inspectorHandlers/VscodeRuntimeGetProperties.js.map +0 -1
  560. package/build/src/start/server/metro/debugging/inspectorHandlers/types.js.map +0 -1
  561. package/build/src/start/server/metro/debugging/inspectorHandlers/utils.js.map +0 -1
  562. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js +0 -38
  563. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +0 -1
  564. package/build/src/start/server/type-generation/__typetests__/generateFixtures.js +0 -38
  565. package/build/src/start/server/type-generation/__typetests__/generateFixtures.js.map +0 -1
  566. package/build/src/start/server/type-generation/__typetests__/route.test.js +0 -184
  567. package/build/src/start/server/type-generation/__typetests__/route.test.js.map +0 -1
  568. package/build/src/utils/analytics/rudderstackClient.js +0 -147
  569. package/build/src/utils/analytics/rudderstackClient.js.map +0 -1
  570. /package/build/src/start/server/metro/debugging/{inspectorHandlers/types.js → types.js} +0 -0
@@ -3,11 +3,41 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.ensureSimulatorOpenAsync = ensureSimulatorOpenAsync;
6
- var osascript = _interopRequireWildcard(require("@expo/osascript"));
7
- var _assert = _interopRequireDefault(require("assert"));
8
- var _chalk = _interopRequireDefault(require("chalk"));
9
- var _fs = _interopRequireDefault(require("fs"));
10
- var _path = _interopRequireDefault(require("path"));
6
+ function osascript() {
7
+ const data = _interopRequireWildcard(require("@expo/osascript"));
8
+ osascript = function() {
9
+ return data;
10
+ };
11
+ return data;
12
+ }
13
+ function _assert() {
14
+ const data = _interopRequireDefault(require("assert"));
15
+ _assert = function() {
16
+ return data;
17
+ };
18
+ return data;
19
+ }
20
+ function _chalk() {
21
+ const data = _interopRequireDefault(require("chalk"));
22
+ _chalk = function() {
23
+ return data;
24
+ };
25
+ return data;
26
+ }
27
+ function _fs() {
28
+ const data = _interopRequireDefault(require("fs"));
29
+ _fs = function() {
30
+ return data;
31
+ };
32
+ return data;
33
+ }
34
+ function _path() {
35
+ const data = _interopRequireDefault(require("path"));
36
+ _path = function() {
37
+ return data;
38
+ };
39
+ return data;
40
+ }
11
41
  var _assertSystemRequirements = require("./assertSystemRequirements");
12
42
  var _ensureSimulatorAppRunning = require("./ensureSimulatorAppRunning");
13
43
  var _getBestSimulator = require("./getBestSimulator");
@@ -69,7 +99,7 @@ async function ensureSimulatorOpenAsync({ udid , osType } = {}, tryAgain = true
69
99
  const bootedDevice = await (0, _delay).waitForActionAsync({
70
100
  action: ()=>{
71
101
  // Just for the type check.
72
- (0, _assert).default(udid);
102
+ _assert().default(udid);
73
103
  return SimControl.bootAsync({
74
104
  udid
75
105
  });
@@ -104,10 +134,11 @@ class AppleDeviceManager extends _deviceManager.DeviceManager {
104
134
  get identifier() {
105
135
  return this.device.udid;
106
136
  }
107
- async getAppVersionAsync(appId) {
137
+ async getAppVersionAsync(appId, { containerPath } = {}) {
108
138
  return await SimControl.getInfoPlistValueAsync(this.device, {
109
139
  appId,
110
- key: "CFBundleShortVersionString"
140
+ key: "CFBundleShortVersionString",
141
+ containerPath
111
142
  });
112
143
  }
113
144
  async startAsync() {
@@ -132,13 +163,13 @@ class AppleDeviceManager extends _deviceManager.DeviceManager {
132
163
  if (appId === EXPO_GO_BUNDLE_IDENTIFIER) {
133
164
  errorMessage = `Couldn't open Expo Go app on device "${this.name}". Please install.`;
134
165
  } else {
135
- errorMessage += `\nThe app might not be installed, try installing it with: ${_chalk.default.bold(`npx expo run:ios -d ${this.device.udid}`)}`;
166
+ errorMessage += `\nThe app might not be installed, try installing it with: ${_chalk().default.bold(`npx expo run:ios -d ${this.device.udid}`)}`;
136
167
  }
137
168
  }
138
169
  if (error.stderr) {
139
- errorMessage += _chalk.default.gray(`\n${error.stderr}`);
170
+ errorMessage += _chalk().default.gray(`\n${error.stderr}`);
140
171
  } else if (error.message) {
141
- errorMessage += _chalk.default.gray(`\n${error.message}`);
172
+ errorMessage += _chalk().default.gray(`\n${error.message}`);
142
173
  }
143
174
  throw new _errors.CommandError(errorMessage);
144
175
  }
@@ -151,8 +182,8 @@ class AppleDeviceManager extends _deviceManager.DeviceManager {
151
182
  }
152
183
  async getApplicationIdFromBundle(filePath) {
153
184
  debug("getApplicationIdFromBundle:", filePath);
154
- const builtInfoPlistPath = _path.default.join(filePath, "Info.plist");
155
- if (_fs.default.existsSync(builtInfoPlistPath)) {
185
+ const builtInfoPlistPath = _path().default.join(filePath, "Info.plist");
186
+ if (_fs().default.existsSync(builtInfoPlistPath)) {
156
187
  const { CFBundleIdentifier } = await (0, _plist).parsePlistAsync(builtInfoPlistPath);
157
188
  debug("getApplicationIdFromBundle: using built Info.plist", CFBundleIdentifier);
158
189
  return CFBundleIdentifier;
@@ -162,7 +193,7 @@ class AppleDeviceManager extends _deviceManager.DeviceManager {
162
193
  }
163
194
  async waitForAppInstalledAsync(applicationId) {
164
195
  while(true){
165
- if (await this.isAppInstalledAsync(applicationId)) {
196
+ if (await this.isAppInstalledAndIfSoReturnContainerPathForIOSAsync(applicationId)) {
166
197
  return true;
167
198
  }
168
199
  await (0, _delay).delayAsync(100);
@@ -173,10 +204,11 @@ class AppleDeviceManager extends _deviceManager.DeviceManager {
173
204
  appId
174
205
  });
175
206
  }
176
- async isAppInstalledAsync(appId) {
177
- return !!await SimControl.getContainerPathAsync(this.device, {
207
+ async isAppInstalledAndIfSoReturnContainerPathForIOSAsync(appId) {
208
+ var ref;
209
+ return (ref = await SimControl.getContainerPathAsync(this.device, {
178
210
  appId
179
- });
211
+ })) != null ? ref : false;
180
212
  }
181
213
  async openUrlAsync(url) {
182
214
  // Non-compliant URLs will be treated as application identifiers.
@@ -204,7 +236,7 @@ class AppleDeviceManager extends _deviceManager.DeviceManager {
204
236
  async activateWindowAsync() {
205
237
  await (0, _ensureSimulatorAppRunning).ensureSimulatorAppRunningAsync(this.device);
206
238
  // TODO: Focus the individual window
207
- await osascript.execAsync(`tell application "Simulator" to activate`);
239
+ await osascript().execAsync(`tell application "Simulator" to activate`);
208
240
  }
209
241
  async ensureExpoGoAsync(sdkVersion) {
210
242
  const installer = new _expoGoInstaller.ExpoGoInstaller("ios", EXPO_GO_BUNDLE_IDENTIFIER, sdkVersion);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/platforms/ios/AppleDeviceManager.ts"],"sourcesContent":["import * as osascript from '@expo/osascript';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { assertSystemRequirementsAsync } from './assertSystemRequirements';\nimport { ensureSimulatorAppRunningAsync } from './ensureSimulatorAppRunning';\nimport {\n getBestBootedSimulatorAsync,\n getBestUnbootedSimulatorAsync,\n getSelectableSimulatorsAsync,\n} from './getBestSimulator';\nimport { promptAppleDeviceAsync } from './promptAppleDevice';\nimport * as SimControl from './simctl';\nimport { delayAsync, waitForActionAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\nimport { parsePlistAsync } from '../../../utils/plist';\nimport { validateUrl } from '../../../utils/url';\nimport { DeviceManager } from '../DeviceManager';\nimport { ExpoGoInstaller } from '../ExpoGoInstaller';\nimport { BaseResolveDeviceProps } from '../PlatformManager';\n\nconst debug = require('debug')('expo:start:platforms:ios:AppleDeviceManager') as typeof console.log;\n\nconst EXPO_GO_BUNDLE_IDENTIFIER = 'host.exp.Exponent';\n\n/**\n * Ensure a simulator is booted and the Simulator app is opened.\n * This is where any timeout related error handling should live.\n */\nexport async function ensureSimulatorOpenAsync(\n { udid, osType }: Partial<Pick<SimControl.Device, 'udid' | 'osType'>> = {},\n tryAgain: boolean = true\n): Promise<SimControl.Device> {\n // Use a default simulator if none was specified\n if (!udid) {\n // If a simulator is open, side step the entire booting sequence.\n const simulatorOpenedByApp = await getBestBootedSimulatorAsync({ osType });\n if (simulatorOpenedByApp) {\n return simulatorOpenedByApp;\n }\n\n // Otherwise, find the best possible simulator from user defaults and continue\n const bestUdid = await getBestUnbootedSimulatorAsync({ osType });\n if (!bestUdid) {\n throw new CommandError('No simulators found.');\n }\n udid = bestUdid;\n }\n\n const bootedDevice = await waitForActionAsync({\n action: () => {\n // Just for the type check.\n assert(udid);\n return SimControl.bootAsync({ udid });\n },\n });\n\n if (!bootedDevice) {\n // Give it a second chance, this might not be needed but it could potentially lead to a better UX on slower devices.\n if (tryAgain) {\n return await ensureSimulatorOpenAsync({ udid, osType }, false);\n }\n // TODO: We should eliminate all needs for a timeout error, it's bad UX to get an error about the simulator not starting while the user can clearly see it starting on their slow computer.\n throw new CommandError(\n 'SIMULATOR_TIMEOUT',\n `Simulator didn't boot fast enough. Try opening Simulator first, then running your app.`\n );\n }\n return bootedDevice;\n}\nexport class AppleDeviceManager extends DeviceManager<SimControl.Device> {\n static assertSystemRequirementsAsync = assertSystemRequirementsAsync;\n\n static async resolveAsync({\n device,\n shouldPrompt,\n }: BaseResolveDeviceProps<\n Partial<Pick<SimControl.Device, 'udid' | 'osType'>>\n > = {}): Promise<AppleDeviceManager> {\n if (shouldPrompt) {\n const devices = await getSelectableSimulatorsAsync(device);\n device = await promptAppleDeviceAsync(devices, device?.osType);\n }\n\n const booted = await ensureSimulatorOpenAsync(device);\n return new AppleDeviceManager(booted);\n }\n\n get name() {\n return this.device.name;\n }\n\n get identifier(): string {\n return this.device.udid;\n }\n\n async getAppVersionAsync(appId: string): Promise<string | null> {\n return await SimControl.getInfoPlistValueAsync(this.device, {\n appId,\n key: 'CFBundleShortVersionString',\n });\n }\n\n async startAsync(): Promise<SimControl.Device> {\n return ensureSimulatorOpenAsync({ osType: this.device.osType, udid: this.device.udid });\n }\n\n async launchApplicationIdAsync(appId: string) {\n try {\n const result = await SimControl.openAppIdAsync(this.device, {\n appId,\n });\n if (result.status === 0) {\n await this.activateWindowAsync();\n } else {\n throw new CommandError(result.stderr);\n }\n } catch (error: any) {\n let errorMessage = `Couldn't open iOS app with ID \"${appId}\" on device \"${this.name}\".`;\n if (error instanceof CommandError && error.code === 'APP_NOT_INSTALLED') {\n if (appId === EXPO_GO_BUNDLE_IDENTIFIER) {\n errorMessage = `Couldn't open Expo Go app on device \"${this.name}\". Please install.`;\n } else {\n errorMessage += `\\nThe app might not be installed, try installing it with: ${chalk.bold(\n `npx expo run:ios -d ${this.device.udid}`\n )}`;\n }\n }\n if (error.stderr) {\n errorMessage += chalk.gray(`\\n${error.stderr}`);\n } else if (error.message) {\n errorMessage += chalk.gray(`\\n${error.message}`);\n }\n throw new CommandError(errorMessage);\n }\n }\n\n async installAppAsync(filePath: string) {\n await SimControl.installAsync(this.device, {\n filePath,\n });\n\n await this.waitForAppInstalledAsync(await this.getApplicationIdFromBundle(filePath));\n }\n\n private async getApplicationIdFromBundle(filePath: string): Promise<string> {\n debug('getApplicationIdFromBundle:', filePath);\n const builtInfoPlistPath = path.join(filePath, 'Info.plist');\n if (fs.existsSync(builtInfoPlistPath)) {\n const { CFBundleIdentifier } = await parsePlistAsync(builtInfoPlistPath);\n debug('getApplicationIdFromBundle: using built Info.plist', CFBundleIdentifier);\n return CFBundleIdentifier;\n }\n debug('getApplicationIdFromBundle: no Info.plist found');\n return EXPO_GO_BUNDLE_IDENTIFIER;\n }\n\n private async waitForAppInstalledAsync(applicationId: string): Promise<boolean> {\n while (true) {\n if (await this.isAppInstalledAsync(applicationId)) {\n return true;\n }\n await delayAsync(100);\n }\n }\n\n async uninstallAppAsync(appId: string) {\n await SimControl.uninstallAsync(this.device, {\n appId,\n });\n }\n\n async isAppInstalledAsync(appId: string) {\n return !!(await SimControl.getContainerPathAsync(this.device, {\n appId,\n }));\n }\n\n async openUrlAsync(url: string) {\n // Non-compliant URLs will be treated as application identifiers.\n if (!validateUrl(url, { requireProtocol: true })) {\n return await this.launchApplicationIdAsync(url);\n }\n\n try {\n await SimControl.openUrlAsync(this.device, { url });\n } catch (error: any) {\n // 194 means the device does not conform to a given URL, in this case we'll assume that the desired app is not installed.\n if (error.status === 194) {\n // An error was encountered processing the command (domain=NSOSStatusErrorDomain, code=-10814):\n // The operation couldn’t be completed. (OSStatus error -10814.)\n //\n // This can be thrown when no app conforms to the URI scheme that we attempted to open.\n throw new CommandError(\n 'APP_NOT_INSTALLED',\n `Device ${this.device.name} (${this.device.udid}) has no app to handle the URI: ${url}`\n );\n }\n throw error;\n }\n }\n\n async activateWindowAsync() {\n await ensureSimulatorAppRunningAsync(this.device);\n // TODO: Focus the individual window\n await osascript.execAsync(`tell application \"Simulator\" to activate`);\n }\n\n async ensureExpoGoAsync(sdkVersion?: string): Promise<boolean> {\n const installer = new ExpoGoInstaller('ios', EXPO_GO_BUNDLE_IDENTIFIER, sdkVersion);\n return installer.ensureAsync(this);\n }\n}\n"],"names":["ensureSimulatorOpenAsync","osascript","SimControl","debug","require","EXPO_GO_BUNDLE_IDENTIFIER","udid","osType","tryAgain","simulatorOpenedByApp","getBestBootedSimulatorAsync","bestUdid","getBestUnbootedSimulatorAsync","CommandError","bootedDevice","waitForActionAsync","action","assert","bootAsync","AppleDeviceManager","DeviceManager","assertSystemRequirementsAsync","resolveAsync","device","shouldPrompt","devices","getSelectableSimulatorsAsync","promptAppleDeviceAsync","booted","name","identifier","getAppVersionAsync","appId","getInfoPlistValueAsync","key","startAsync","launchApplicationIdAsync","result","openAppIdAsync","status","activateWindowAsync","stderr","error","errorMessage","code","chalk","bold","gray","message","installAppAsync","filePath","installAsync","waitForAppInstalledAsync","getApplicationIdFromBundle","builtInfoPlistPath","path","join","fs","existsSync","CFBundleIdentifier","parsePlistAsync","applicationId","isAppInstalledAsync","delayAsync","uninstallAppAsync","uninstallAsync","getContainerPathAsync","openUrlAsync","url","validateUrl","requireProtocol","ensureSimulatorAppRunningAsync","execAsync","ensureExpoGoAsync","sdkVersion","installer","ExpoGoInstaller","ensureAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/platforms/ios/AppleDeviceManager.ts"],"sourcesContent":["import * as osascript from '@expo/osascript';\nimport assert from 'assert';\nimport chalk from 'chalk';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { assertSystemRequirementsAsync } from './assertSystemRequirements';\nimport { ensureSimulatorAppRunningAsync } from './ensureSimulatorAppRunning';\nimport {\n getBestBootedSimulatorAsync,\n getBestUnbootedSimulatorAsync,\n getSelectableSimulatorsAsync,\n} from './getBestSimulator';\nimport { promptAppleDeviceAsync } from './promptAppleDevice';\nimport * as SimControl from './simctl';\nimport { delayAsync, waitForActionAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\nimport { parsePlistAsync } from '../../../utils/plist';\nimport { validateUrl } from '../../../utils/url';\nimport { DeviceManager } from '../DeviceManager';\nimport { ExpoGoInstaller } from '../ExpoGoInstaller';\nimport { BaseResolveDeviceProps } from '../PlatformManager';\n\nconst debug = require('debug')('expo:start:platforms:ios:AppleDeviceManager') as typeof console.log;\n\nconst EXPO_GO_BUNDLE_IDENTIFIER = 'host.exp.Exponent';\n\n/**\n * Ensure a simulator is booted and the Simulator app is opened.\n * This is where any timeout related error handling should live.\n */\nexport async function ensureSimulatorOpenAsync(\n { udid, osType }: Partial<Pick<SimControl.Device, 'udid' | 'osType'>> = {},\n tryAgain: boolean = true\n): Promise<SimControl.Device> {\n // Use a default simulator if none was specified\n if (!udid) {\n // If a simulator is open, side step the entire booting sequence.\n const simulatorOpenedByApp = await getBestBootedSimulatorAsync({ osType });\n if (simulatorOpenedByApp) {\n return simulatorOpenedByApp;\n }\n\n // Otherwise, find the best possible simulator from user defaults and continue\n const bestUdid = await getBestUnbootedSimulatorAsync({ osType });\n if (!bestUdid) {\n throw new CommandError('No simulators found.');\n }\n udid = bestUdid;\n }\n\n const bootedDevice = await waitForActionAsync({\n action: () => {\n // Just for the type check.\n assert(udid);\n return SimControl.bootAsync({ udid });\n },\n });\n\n if (!bootedDevice) {\n // Give it a second chance, this might not be needed but it could potentially lead to a better UX on slower devices.\n if (tryAgain) {\n return await ensureSimulatorOpenAsync({ udid, osType }, false);\n }\n // TODO: We should eliminate all needs for a timeout error, it's bad UX to get an error about the simulator not starting while the user can clearly see it starting on their slow computer.\n throw new CommandError(\n 'SIMULATOR_TIMEOUT',\n `Simulator didn't boot fast enough. Try opening Simulator first, then running your app.`\n );\n }\n return bootedDevice;\n}\nexport class AppleDeviceManager extends DeviceManager<SimControl.Device> {\n static assertSystemRequirementsAsync = assertSystemRequirementsAsync;\n\n static async resolveAsync({\n device,\n shouldPrompt,\n }: BaseResolveDeviceProps<\n Partial<Pick<SimControl.Device, 'udid' | 'osType'>>\n > = {}): Promise<AppleDeviceManager> {\n if (shouldPrompt) {\n const devices = await getSelectableSimulatorsAsync(device);\n device = await promptAppleDeviceAsync(devices, device?.osType);\n }\n\n const booted = await ensureSimulatorOpenAsync(device);\n return new AppleDeviceManager(booted);\n }\n\n get name() {\n return this.device.name;\n }\n\n get identifier(): string {\n return this.device.udid;\n }\n\n async getAppVersionAsync(\n appId: string,\n { containerPath }: { containerPath?: string } = {}\n ): Promise<string | null> {\n return await SimControl.getInfoPlistValueAsync(this.device, {\n appId,\n key: 'CFBundleShortVersionString',\n containerPath,\n });\n }\n\n async startAsync(): Promise<SimControl.Device> {\n return ensureSimulatorOpenAsync({ osType: this.device.osType, udid: this.device.udid });\n }\n\n async launchApplicationIdAsync(appId: string) {\n try {\n const result = await SimControl.openAppIdAsync(this.device, {\n appId,\n });\n if (result.status === 0) {\n await this.activateWindowAsync();\n } else {\n throw new CommandError(result.stderr);\n }\n } catch (error: any) {\n let errorMessage = `Couldn't open iOS app with ID \"${appId}\" on device \"${this.name}\".`;\n if (error instanceof CommandError && error.code === 'APP_NOT_INSTALLED') {\n if (appId === EXPO_GO_BUNDLE_IDENTIFIER) {\n errorMessage = `Couldn't open Expo Go app on device \"${this.name}\". Please install.`;\n } else {\n errorMessage += `\\nThe app might not be installed, try installing it with: ${chalk.bold(\n `npx expo run:ios -d ${this.device.udid}`\n )}`;\n }\n }\n if (error.stderr) {\n errorMessage += chalk.gray(`\\n${error.stderr}`);\n } else if (error.message) {\n errorMessage += chalk.gray(`\\n${error.message}`);\n }\n throw new CommandError(errorMessage);\n }\n }\n\n async installAppAsync(filePath: string) {\n await SimControl.installAsync(this.device, {\n filePath,\n });\n\n await this.waitForAppInstalledAsync(await this.getApplicationIdFromBundle(filePath));\n }\n\n private async getApplicationIdFromBundle(filePath: string): Promise<string> {\n debug('getApplicationIdFromBundle:', filePath);\n const builtInfoPlistPath = path.join(filePath, 'Info.plist');\n if (fs.existsSync(builtInfoPlistPath)) {\n const { CFBundleIdentifier } = await parsePlistAsync(builtInfoPlistPath);\n debug('getApplicationIdFromBundle: using built Info.plist', CFBundleIdentifier);\n return CFBundleIdentifier;\n }\n debug('getApplicationIdFromBundle: no Info.plist found');\n return EXPO_GO_BUNDLE_IDENTIFIER;\n }\n\n private async waitForAppInstalledAsync(applicationId: string): Promise<boolean> {\n while (true) {\n if (await this.isAppInstalledAndIfSoReturnContainerPathForIOSAsync(applicationId)) {\n return true;\n }\n await delayAsync(100);\n }\n }\n\n async uninstallAppAsync(appId: string) {\n await SimControl.uninstallAsync(this.device, {\n appId,\n });\n }\n\n async isAppInstalledAndIfSoReturnContainerPathForIOSAsync(appId: string) {\n return (\n (await SimControl.getContainerPathAsync(this.device, {\n appId,\n })) ?? false\n );\n }\n\n async openUrlAsync(url: string) {\n // Non-compliant URLs will be treated as application identifiers.\n if (!validateUrl(url, { requireProtocol: true })) {\n return await this.launchApplicationIdAsync(url);\n }\n\n try {\n await SimControl.openUrlAsync(this.device, { url });\n } catch (error: any) {\n // 194 means the device does not conform to a given URL, in this case we'll assume that the desired app is not installed.\n if (error.status === 194) {\n // An error was encountered processing the command (domain=NSOSStatusErrorDomain, code=-10814):\n // The operation couldn’t be completed. (OSStatus error -10814.)\n //\n // This can be thrown when no app conforms to the URI scheme that we attempted to open.\n throw new CommandError(\n 'APP_NOT_INSTALLED',\n `Device ${this.device.name} (${this.device.udid}) has no app to handle the URI: ${url}`\n );\n }\n throw error;\n }\n }\n\n async activateWindowAsync() {\n await ensureSimulatorAppRunningAsync(this.device);\n // TODO: Focus the individual window\n await osascript.execAsync(`tell application \"Simulator\" to activate`);\n }\n\n async ensureExpoGoAsync(sdkVersion: string): Promise<boolean> {\n const installer = new ExpoGoInstaller('ios', EXPO_GO_BUNDLE_IDENTIFIER, sdkVersion);\n return installer.ensureAsync(this);\n }\n}\n"],"names":["ensureSimulatorOpenAsync","osascript","SimControl","debug","require","EXPO_GO_BUNDLE_IDENTIFIER","udid","osType","tryAgain","simulatorOpenedByApp","getBestBootedSimulatorAsync","bestUdid","getBestUnbootedSimulatorAsync","CommandError","bootedDevice","waitForActionAsync","action","assert","bootAsync","AppleDeviceManager","DeviceManager","assertSystemRequirementsAsync","resolveAsync","device","shouldPrompt","devices","getSelectableSimulatorsAsync","promptAppleDeviceAsync","booted","name","identifier","getAppVersionAsync","appId","containerPath","getInfoPlistValueAsync","key","startAsync","launchApplicationIdAsync","result","openAppIdAsync","status","activateWindowAsync","stderr","error","errorMessage","code","chalk","bold","gray","message","installAppAsync","filePath","installAsync","waitForAppInstalledAsync","getApplicationIdFromBundle","builtInfoPlistPath","path","join","fs","existsSync","CFBundleIdentifier","parsePlistAsync","applicationId","isAppInstalledAndIfSoReturnContainerPathForIOSAsync","delayAsync","uninstallAppAsync","uninstallAsync","getContainerPathAsync","openUrlAsync","url","validateUrl","requireProtocol","ensureSimulatorAppRunningAsync","execAsync","ensureExpoGoAsync","sdkVersion","installer","ExpoGoInstaller","ensureAsync"],"mappings":"AAAA;;;;QA+BsBA,wBAAwB,GAAxBA,wBAAwB;SA/BlCC,SAAS;iDAAM,iBAAiB;IAAhCA,SAAS;;;;;SACF,OAAQ;gDAAR,QAAQ;IAAR,OAAQ;;;;;SACT,MAAO;gDAAP,OAAO;IAAP,MAAO;;;;;SACV,GAAI;gDAAJ,IAAI;IAAJ,GAAI;;;;;SACF,KAAM;gDAAN,MAAM;IAAN,KAAM;;;;;AAEuB,IAAA,yBAA4B,WAA5B,4BAA4B,CAAA;AAC3B,IAAA,0BAA6B,WAA7B,6BAA6B,CAAA;AAKrE,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;AACY,IAAA,kBAAqB,WAArB,qBAAqB,CAAA;AAChDC,IAAAA,UAAU,mCAAM,UAAU,EAAhB;AACyB,IAAA,MAAsB,WAAtB,sBAAsB,CAAA;AACxC,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;AACpB,IAAA,MAAsB,WAAtB,sBAAsB,CAAA;AAC1B,IAAA,IAAoB,WAApB,oBAAoB,CAAA;AAClB,IAAA,cAAkB,WAAlB,kBAAkB,CAAA;AAChB,IAAA,gBAAoB,WAApB,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAGpD,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,6CAA6C,CAAC,AAAsB,AAAC;AAEpG,MAAMC,yBAAyB,GAAG,mBAAmB,AAAC;AAM/C,eAAeL,wBAAwB,CAC5C,EAAEM,IAAI,CAAA,EAAEC,MAAM,CAAA,EAAuD,GAAG,EAAE,EAC1EC,QAAiB,GAAG,IAAI,EACI;IAC5B,gDAAgD;IAChD,IAAI,CAACF,IAAI,EAAE;QACT,iEAAiE;QACjE,MAAMG,oBAAoB,GAAG,MAAMC,CAAAA,GAAAA,iBAA2B,AAAY,CAAA,4BAAZ,CAAC;YAAEH,MAAM;SAAE,CAAC,AAAC;QAC3E,IAAIE,oBAAoB,EAAE;YACxB,OAAOA,oBAAoB,CAAC;SAC7B;QAED,8EAA8E;QAC9E,MAAME,QAAQ,GAAG,MAAMC,CAAAA,GAAAA,iBAA6B,AAAY,CAAA,8BAAZ,CAAC;YAAEL,MAAM;SAAE,CAAC,AAAC;QACjE,IAAI,CAACI,QAAQ,EAAE;YACb,MAAM,IAAIE,OAAY,aAAA,CAAC,sBAAsB,CAAC,CAAC;SAChD;QACDP,IAAI,GAAGK,QAAQ,CAAC;KACjB;IAED,MAAMG,YAAY,GAAG,MAAMC,CAAAA,GAAAA,MAAkB,AAM3C,CAAA,mBAN2C,CAAC;QAC5CC,MAAM,EAAE,IAAM;YACZ,2BAA2B;YAC3BC,OAAM,UAAA,CAACX,IAAI,CAAC,CAAC;YACb,OAAOJ,UAAU,CAACgB,SAAS,CAAC;gBAAEZ,IAAI;aAAE,CAAC,CAAC;SACvC;KACF,CAAC,AAAC;IAEH,IAAI,CAACQ,YAAY,EAAE;QACjB,oHAAoH;QACpH,IAAIN,QAAQ,EAAE;YACZ,OAAO,MAAMR,wBAAwB,CAAC;gBAAEM,IAAI;gBAAEC,MAAM;aAAE,EAAE,KAAK,CAAC,CAAC;SAChE;QACD,2LAA2L;QAC3L,MAAM,IAAIM,OAAY,aAAA,CACpB,mBAAmB,EACnB,CAAC,sFAAsF,CAAC,CACzF,CAAC;KACH;IACD,OAAOC,YAAY,CAAC;CACrB;AACM,MAAMK,kBAAkB,SAASC,cAAa,cAAA;IACnD,OAAOC,6BAA6B,GAAGA,yBAA6B,8BAAA,CAAC;IAErE,aAAaC,YAAY,CAAC,EACxBC,MAAM,CAAA,EACNC,YAAY,CAAA,EAGb,GAAG,EAAE,EAA+B;QACnC,IAAIA,YAAY,EAAE;YAChB,MAAMC,OAAO,GAAG,MAAMC,CAAAA,GAAAA,iBAA4B,AAAQ,CAAA,6BAAR,CAACH,MAAM,CAAC,AAAC;YAC3DA,MAAM,GAAG,MAAMI,CAAAA,GAAAA,kBAAsB,AAAyB,CAAA,uBAAzB,CAACF,OAAO,EAAEF,MAAM,QAAQ,GAAdA,KAAAA,CAAc,GAAdA,MAAM,CAAEhB,MAAM,CAAC,CAAC;SAChE;QAED,MAAMqB,MAAM,GAAG,MAAM5B,wBAAwB,CAACuB,MAAM,CAAC,AAAC;QACtD,OAAO,IAAIJ,kBAAkB,CAACS,MAAM,CAAC,CAAC;KACvC;IAED,IAAIC,IAAI,GAAG;QACT,OAAO,IAAI,CAACN,MAAM,CAACM,IAAI,CAAC;KACzB;IAED,IAAIC,UAAU,GAAW;QACvB,OAAO,IAAI,CAACP,MAAM,CAACjB,IAAI,CAAC;KACzB;IAED,MAAMyB,kBAAkB,CACtBC,KAAa,EACb,EAAEC,aAAa,CAAA,EAA8B,GAAG,EAAE,EAC1B;QACxB,OAAO,MAAM/B,UAAU,CAACgC,sBAAsB,CAAC,IAAI,CAACX,MAAM,EAAE;YAC1DS,KAAK;YACLG,GAAG,EAAE,4BAA4B;YACjCF,aAAa;SACd,CAAC,CAAC;KACJ;IAED,MAAMG,UAAU,GAA+B;QAC7C,OAAOpC,wBAAwB,CAAC;YAAEO,MAAM,EAAE,IAAI,CAACgB,MAAM,CAAChB,MAAM;YAAED,IAAI,EAAE,IAAI,CAACiB,MAAM,CAACjB,IAAI;SAAE,CAAC,CAAC;KACzF;IAED,MAAM+B,wBAAwB,CAACL,KAAa,EAAE;QAC5C,IAAI;YACF,MAAMM,MAAM,GAAG,MAAMpC,UAAU,CAACqC,cAAc,CAAC,IAAI,CAAChB,MAAM,EAAE;gBAC1DS,KAAK;aACN,CAAC,AAAC;YACH,IAAIM,MAAM,CAACE,MAAM,KAAK,CAAC,EAAE;gBACvB,MAAM,IAAI,CAACC,mBAAmB,EAAE,CAAC;aAClC,MAAM;gBACL,MAAM,IAAI5B,OAAY,aAAA,CAACyB,MAAM,CAACI,MAAM,CAAC,CAAC;aACvC;SACF,CAAC,OAAOC,KAAK,EAAO;YACnB,IAAIC,YAAY,GAAG,CAAC,+BAA+B,EAAEZ,KAAK,CAAC,aAAa,EAAE,IAAI,CAACH,IAAI,CAAC,EAAE,CAAC,AAAC;YACxF,IAAIc,KAAK,YAAY9B,OAAY,aAAA,IAAI8B,KAAK,CAACE,IAAI,KAAK,mBAAmB,EAAE;gBACvE,IAAIb,KAAK,KAAK3B,yBAAyB,EAAE;oBACvCuC,YAAY,GAAG,CAAC,qCAAqC,EAAE,IAAI,CAACf,IAAI,CAAC,kBAAkB,CAAC,CAAC;iBACtF,MAAM;oBACLe,YAAY,IAAI,CAAC,0DAA0D,EAAEE,MAAK,UAAA,CAACC,IAAI,CACrF,CAAC,oBAAoB,EAAE,IAAI,CAACxB,MAAM,CAACjB,IAAI,CAAC,CAAC,CAC1C,CAAC,CAAC,CAAC;iBACL;aACF;YACD,IAAIqC,KAAK,CAACD,MAAM,EAAE;gBAChBE,YAAY,IAAIE,MAAK,UAAA,CAACE,IAAI,CAAC,CAAC,EAAE,EAAEL,KAAK,CAACD,MAAM,CAAC,CAAC,CAAC,CAAC;aACjD,MAAM,IAAIC,KAAK,CAACM,OAAO,EAAE;gBACxBL,YAAY,IAAIE,MAAK,UAAA,CAACE,IAAI,CAAC,CAAC,EAAE,EAAEL,KAAK,CAACM,OAAO,CAAC,CAAC,CAAC,CAAC;aAClD;YACD,MAAM,IAAIpC,OAAY,aAAA,CAAC+B,YAAY,CAAC,CAAC;SACtC;KACF;IAED,MAAMM,eAAe,CAACC,QAAgB,EAAE;QACtC,MAAMjD,UAAU,CAACkD,YAAY,CAAC,IAAI,CAAC7B,MAAM,EAAE;YACzC4B,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,IAAI,CAACE,wBAAwB,CAAC,MAAM,IAAI,CAACC,0BAA0B,CAACH,QAAQ,CAAC,CAAC,CAAC;KACtF;IAED,MAAcG,0BAA0B,CAACH,QAAgB,EAAmB;QAC1EhD,KAAK,CAAC,6BAA6B,EAAEgD,QAAQ,CAAC,CAAC;QAC/C,MAAMI,kBAAkB,GAAGC,KAAI,UAAA,CAACC,IAAI,CAACN,QAAQ,EAAE,YAAY,CAAC,AAAC;QAC7D,IAAIO,GAAE,UAAA,CAACC,UAAU,CAACJ,kBAAkB,CAAC,EAAE;YACrC,MAAM,EAAEK,kBAAkB,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,MAAe,AAAoB,CAAA,gBAApB,CAACN,kBAAkB,CAAC,AAAC;YACzEpD,KAAK,CAAC,oDAAoD,EAAEyD,kBAAkB,CAAC,CAAC;YAChF,OAAOA,kBAAkB,CAAC;SAC3B;QACDzD,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACzD,OAAOE,yBAAyB,CAAC;KAClC;IAED,MAAcgD,wBAAwB,CAACS,aAAqB,EAAoB;QAC9E,MAAO,IAAI,CAAE;YACX,IAAI,MAAM,IAAI,CAACC,mDAAmD,CAACD,aAAa,CAAC,EAAE;gBACjF,OAAO,IAAI,CAAC;aACb;YACD,MAAME,CAAAA,GAAAA,MAAU,AAAK,CAAA,WAAL,CAAC,GAAG,CAAC,CAAC;SACvB;KACF;IAED,MAAMC,iBAAiB,CAACjC,KAAa,EAAE;QACrC,MAAM9B,UAAU,CAACgE,cAAc,CAAC,IAAI,CAAC3C,MAAM,EAAE;YAC3CS,KAAK;SACN,CAAC,CAAC;KACJ;IAED,MAAM+B,mDAAmD,CAAC/B,KAAa,EAAE;YAErE,GAEG;QAHL,OACE,CAAA,GAEG,GAFF,MAAM9B,UAAU,CAACiE,qBAAqB,CAAC,IAAI,CAAC5C,MAAM,EAAE;YACnDS,KAAK;SACN,CAAC,YAFF,GAEG,GAAI,KAAK,CACZ;KACH;IAED,MAAMoC,YAAY,CAACC,GAAW,EAAE;QAC9B,iEAAiE;QACjE,IAAI,CAACC,CAAAA,GAAAA,IAAW,AAAgC,CAAA,YAAhC,CAACD,GAAG,EAAE;YAAEE,eAAe,EAAE,IAAI;SAAE,CAAC,EAAE;YAChD,OAAO,MAAM,IAAI,CAAClC,wBAAwB,CAACgC,GAAG,CAAC,CAAC;SACjD;QAED,IAAI;YACF,MAAMnE,UAAU,CAACkE,YAAY,CAAC,IAAI,CAAC7C,MAAM,EAAE;gBAAE8C,GAAG;aAAE,CAAC,CAAC;SACrD,CAAC,OAAO1B,KAAK,EAAO;YACnB,yHAAyH;YACzH,IAAIA,KAAK,CAACH,MAAM,KAAK,GAAG,EAAE;gBACxB,+FAA+F;gBAC/F,kEAAgE;gBAChE,EAAE;gBACF,uFAAuF;gBACvF,MAAM,IAAI3B,OAAY,aAAA,CACpB,mBAAmB,EACnB,CAAC,OAAO,EAAE,IAAI,CAACU,MAAM,CAACM,IAAI,CAAC,EAAE,EAAE,IAAI,CAACN,MAAM,CAACjB,IAAI,CAAC,gCAAgC,EAAE+D,GAAG,CAAC,CAAC,CACxF,CAAC;aACH;YACD,MAAM1B,KAAK,CAAC;SACb;KACF;IAED,MAAMF,mBAAmB,GAAG;QAC1B,MAAM+B,CAAAA,GAAAA,0BAA8B,AAAa,CAAA,+BAAb,CAAC,IAAI,CAACjD,MAAM,CAAC,CAAC;QAClD,oCAAoC;QACpC,MAAMtB,SAAS,GAACwE,SAAS,CAAC,CAAC,wCAAwC,CAAC,CAAC,CAAC;KACvE;IAED,MAAMC,iBAAiB,CAACC,UAAkB,EAAoB;QAC5D,MAAMC,SAAS,GAAG,IAAIC,gBAAe,gBAAA,CAAC,KAAK,EAAExE,yBAAyB,EAAEsE,UAAU,CAAC,AAAC;QACpF,OAAOC,SAAS,CAACE,WAAW,CAAC,IAAI,CAAC,CAAC;KACpC;CACF;QApJY3D,kBAAkB,GAAlBA,kBAAkB"}
@@ -3,14 +3,15 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.assertSystemRequirementsAsync = assertSystemRequirementsAsync;
6
+ var _profile = require("../../../utils/profile");
6
7
  var _simulatorAppPrerequisite = require("../../doctor/apple/SimulatorAppPrerequisite");
7
8
  var _xcodePrerequisite = require("../../doctor/apple/XcodePrerequisite");
8
9
  var _xcrunPrerequisite = require("../../doctor/apple/XcrunPrerequisite");
9
10
  async function assertSystemRequirementsAsync() {
10
11
  // Order is important
11
- await _xcodePrerequisite.XcodePrerequisite.instance.assertAsync();
12
- await _xcrunPrerequisite.XcrunPrerequisite.instance.assertAsync();
13
- await _simulatorAppPrerequisite.SimulatorAppPrerequisite.instance.assertAsync();
12
+ await (0, _profile).profile(_xcodePrerequisite.XcodePrerequisite.instance.assertAsync.bind(_xcodePrerequisite.XcodePrerequisite.instance), "XcodePrerequisite")();
13
+ await (0, _profile).profile(_xcrunPrerequisite.XcrunPrerequisite.instance.assertAsync.bind(_xcrunPrerequisite.XcrunPrerequisite.instance), "XcrunPrerequisite")();
14
+ await (0, _profile).profile(_simulatorAppPrerequisite.SimulatorAppPrerequisite.instance.assertAsync.bind(_simulatorAppPrerequisite.SimulatorAppPrerequisite.instance), "SimulatorAppPrerequisite")();
14
15
  }
15
16
 
16
17
  //# sourceMappingURL=assertSystemRequirements.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/platforms/ios/assertSystemRequirements.ts"],"sourcesContent":["import { SimulatorAppPrerequisite } from '../../doctor/apple/SimulatorAppPrerequisite';\nimport { XcodePrerequisite } from '../../doctor/apple/XcodePrerequisite';\nimport { XcrunPrerequisite } from '../../doctor/apple/XcrunPrerequisite';\n\nexport async function assertSystemRequirementsAsync() {\n // Order is important\n await XcodePrerequisite.instance.assertAsync();\n await XcrunPrerequisite.instance.assertAsync();\n await SimulatorAppPrerequisite.instance.assertAsync();\n}\n"],"names":["assertSystemRequirementsAsync","XcodePrerequisite","instance","assertAsync","XcrunPrerequisite","SimulatorAppPrerequisite"],"mappings":"AAAA;;;;QAIsBA,6BAA6B,GAA7BA,6BAA6B;AAJV,IAAA,yBAA6C,WAA7C,6CAA6C,CAAA;AACpD,IAAA,kBAAsC,WAAtC,sCAAsC,CAAA;AACtC,IAAA,kBAAsC,WAAtC,sCAAsC,CAAA;AAEjE,eAAeA,6BAA6B,GAAG;IACpD,qBAAqB;IACrB,MAAMC,kBAAiB,kBAAA,CAACC,QAAQ,CAACC,WAAW,EAAE,CAAC;IAC/C,MAAMC,kBAAiB,kBAAA,CAACF,QAAQ,CAACC,WAAW,EAAE,CAAC;IAC/C,MAAME,yBAAwB,yBAAA,CAACH,QAAQ,CAACC,WAAW,EAAE,CAAC;CACvD"}
1
+ {"version":3,"sources":["../../../../../src/start/platforms/ios/assertSystemRequirements.ts"],"sourcesContent":["import { profile } from '../../../utils/profile';\nimport { SimulatorAppPrerequisite } from '../../doctor/apple/SimulatorAppPrerequisite';\nimport { XcodePrerequisite } from '../../doctor/apple/XcodePrerequisite';\nimport { XcrunPrerequisite } from '../../doctor/apple/XcrunPrerequisite';\n\nexport async function assertSystemRequirementsAsync() {\n // Order is important\n await profile(\n XcodePrerequisite.instance.assertAsync.bind(XcodePrerequisite.instance),\n 'XcodePrerequisite'\n )();\n await profile(\n XcrunPrerequisite.instance.assertAsync.bind(XcrunPrerequisite.instance),\n 'XcrunPrerequisite'\n )();\n await profile(\n SimulatorAppPrerequisite.instance.assertAsync.bind(SimulatorAppPrerequisite.instance),\n 'SimulatorAppPrerequisite'\n )();\n}\n"],"names":["assertSystemRequirementsAsync","profile","XcodePrerequisite","instance","assertAsync","bind","XcrunPrerequisite","SimulatorAppPrerequisite"],"mappings":"AAAA;;;;QAKsBA,6BAA6B,GAA7BA,6BAA6B;AAL3B,IAAA,QAAwB,WAAxB,wBAAwB,CAAA;AACP,IAAA,yBAA6C,WAA7C,6CAA6C,CAAA;AACpD,IAAA,kBAAsC,WAAtC,sCAAsC,CAAA;AACtC,IAAA,kBAAsC,WAAtC,sCAAsC,CAAA;AAEjE,eAAeA,6BAA6B,GAAG;IACpD,qBAAqB;IACrB,MAAMC,CAAAA,GAAAA,QAAO,AAGZ,CAAA,QAHY,CACXC,kBAAiB,kBAAA,CAACC,QAAQ,CAACC,WAAW,CAACC,IAAI,CAACH,kBAAiB,kBAAA,CAACC,QAAQ,CAAC,EACvE,mBAAmB,CACpB,EAAE,CAAC;IACJ,MAAMF,CAAAA,GAAAA,QAAO,AAGZ,CAAA,QAHY,CACXK,kBAAiB,kBAAA,CAACH,QAAQ,CAACC,WAAW,CAACC,IAAI,CAACC,kBAAiB,kBAAA,CAACH,QAAQ,CAAC,EACvE,mBAAmB,CACpB,EAAE,CAAC;IACJ,MAAMF,CAAAA,GAAAA,QAAO,AAGZ,CAAA,QAHY,CACXM,yBAAwB,yBAAA,CAACJ,QAAQ,CAACC,WAAW,CAACC,IAAI,CAACE,yBAAwB,yBAAA,CAACJ,QAAQ,CAAC,EACrF,0BAA0B,CAC3B,EAAE,CAAC;CACL"}
@@ -3,8 +3,20 @@ Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
5
  exports.ensureSimulatorAppRunningAsync = ensureSimulatorAppRunningAsync;
6
- var osascript = _interopRequireWildcard(require("@expo/osascript"));
7
- var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
6
+ function osascript() {
7
+ const data = _interopRequireWildcard(require("@expo/osascript"));
8
+ osascript = function() {
9
+ return data;
10
+ };
11
+ return data;
12
+ }
13
+ function _spawnAsync() {
14
+ const data = _interopRequireDefault(require("@expo/spawn-async"));
15
+ _spawnAsync = function() {
16
+ return data;
17
+ };
18
+ return data;
19
+ }
8
20
  var Log = _interopRequireWildcard(require("../../../log"));
9
21
  var _delay = require("../../../utils/delay");
10
22
  var _errors = require("../../../utils/errors");
@@ -58,7 +70,7 @@ async function waitForSimulatorAppToStart({ maxWaitTime } = {}) {
58
70
  // I think the app can be open while no simulators are booted.
59
71
  async function isSimulatorAppRunningAsync() {
60
72
  try {
61
- const zeroMeansNo = (await osascript.execAsync('tell app "System Events" to count processes whose name is "Simulator"')).trim();
73
+ const zeroMeansNo = (await osascript().execAsync('tell app "System Events" to count processes whose name is "Simulator"')).trim();
62
74
  if (zeroMeansNo === "0") {
63
75
  return false;
64
76
  }
@@ -79,7 +91,7 @@ async function openSimulatorAppAsync(device) {
79
91
  // This has no effect if the app is already running.
80
92
  args.push("--args", "-CurrentDeviceUDID", device.udid);
81
93
  }
82
- await (0, _spawnAsync).default("open", args);
94
+ await _spawnAsync().default("open", args);
83
95
  }
84
96
 
85
97
  //# sourceMappingURL=ensureSimulatorAppRunning.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/platforms/ios/ensureSimulatorAppRunning.ts"],"sourcesContent":["import * as osascript from '@expo/osascript';\nimport spawnAsync from '@expo/spawn-async';\n\nimport { Device } from './simctl';\nimport * as Log from '../../../log';\nimport { waitForActionAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\n\n/** Open the Simulator.app and return when the system registers it as 'open'. */\nexport async function ensureSimulatorAppRunningAsync(\n device: Partial<Pick<Device, 'udid'>>,\n {\n maxWaitTime,\n }: {\n maxWaitTime?: number;\n } = {}\n): Promise<void> {\n if (await isSimulatorAppRunningAsync()) {\n return;\n }\n\n Log.log(`\\u203A Opening the iOS simulator, this might take a moment.`);\n\n // In theory this would ensure the correct simulator is booted as well.\n // This isn't theory though, this is Xcode.\n await openSimulatorAppAsync(device);\n\n if (!(await waitForSimulatorAppToStart({ maxWaitTime }))) {\n throw new CommandError(\n 'SIMULATOR_TIMEOUT',\n `Simulator app did not open fast enough. Try opening Simulator first, then running your app.`\n );\n }\n}\n\nasync function waitForSimulatorAppToStart({\n maxWaitTime,\n}: { maxWaitTime?: number } = {}): Promise<boolean> {\n return waitForActionAsync<boolean>({\n interval: 50,\n maxWaitTime,\n action: isSimulatorAppRunningAsync,\n });\n}\n\n// I think the app can be open while no simulators are booted.\nasync function isSimulatorAppRunningAsync(): Promise<boolean> {\n try {\n const zeroMeansNo = (\n await osascript.execAsync(\n 'tell app \"System Events\" to count processes whose name is \"Simulator\"'\n )\n ).trim();\n if (zeroMeansNo === '0') {\n return false;\n }\n } catch (error: any) {\n if (error.message.includes('Application isn’t running')) {\n return false;\n }\n throw error;\n }\n\n return true;\n}\n\nasync function openSimulatorAppAsync(device: { udid?: string }) {\n const args = ['-a', 'Simulator'];\n if (device.udid) {\n // This has no effect if the app is already running.\n args.push('--args', '-CurrentDeviceUDID', device.udid);\n }\n await spawnAsync('open', args);\n}\n"],"names":["ensureSimulatorAppRunningAsync","osascript","Log","device","maxWaitTime","isSimulatorAppRunningAsync","log","openSimulatorAppAsync","waitForSimulatorAppToStart","CommandError","waitForActionAsync","interval","action","zeroMeansNo","execAsync","trim","error","message","includes","args","udid","push","spawnAsync"],"mappings":"AAAA;;;;QASsBA,8BAA8B,GAA9BA,8BAA8B;AATxCC,IAAAA,SAAS,mCAAM,iBAAiB,EAAvB;AACE,IAAA,WAAmB,kCAAnB,mBAAmB,EAAA;AAG9BC,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACoB,IAAA,MAAsB,WAAtB,sBAAsB,CAAA;AAC5B,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG7C,eAAeF,8BAA8B,CAClDG,MAAqC,EACrC,EACEC,WAAW,CAAA,EAGZ,GAAG,EAAE,EACS;IACf,IAAI,MAAMC,0BAA0B,EAAE,EAAE;QACtC,OAAO;KACR;IAEDH,GAAG,CAACI,GAAG,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC;IAEvE,uEAAuE;IACvE,2CAA2C;IAC3C,MAAMC,qBAAqB,CAACJ,MAAM,CAAC,CAAC;IAEpC,IAAI,CAAE,MAAMK,0BAA0B,CAAC;QAAEJ,WAAW;KAAE,CAAC,AAAC,EAAE;QACxD,MAAM,IAAIK,OAAY,aAAA,CACpB,mBAAmB,EACnB,CAAC,2FAA2F,CAAC,CAC9F,CAAC;KACH;CACF;AAED,eAAeD,0BAA0B,CAAC,EACxCJ,WAAW,CAAA,EACc,GAAG,EAAE,EAAoB;IAClD,OAAOM,CAAAA,GAAAA,MAAkB,AAIvB,CAAA,mBAJuB,CAAU;QACjCC,QAAQ,EAAE,EAAE;QACZP,WAAW;QACXQ,MAAM,EAAEP,0BAA0B;KACnC,CAAC,CAAC;CACJ;AAED,8DAA8D;AAC9D,eAAeA,0BAA0B,GAAqB;IAC5D,IAAI;QACF,MAAMQ,WAAW,GAAG,CAClB,MAAMZ,SAAS,CAACa,SAAS,CACvB,uEAAuE,CACxE,CACF,CAACC,IAAI,EAAE,AAAC;QACT,IAAIF,WAAW,KAAK,GAAG,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;KACF,CAAC,OAAOG,KAAK,EAAO;QACnB,IAAIA,KAAK,CAACC,OAAO,CAACC,QAAQ,CAAC,gCAA2B,CAAC,EAAE;YACvD,OAAO,KAAK,CAAC;SACd;QACD,MAAMF,KAAK,CAAC;KACb;IAED,OAAO,IAAI,CAAC;CACb;AAED,eAAeT,qBAAqB,CAACJ,MAAyB,EAAE;IAC9D,MAAMgB,IAAI,GAAG;QAAC,IAAI;QAAE,WAAW;KAAC,AAAC;IACjC,IAAIhB,MAAM,CAACiB,IAAI,EAAE;QACf,oDAAoD;QACpDD,IAAI,CAACE,IAAI,CAAC,QAAQ,EAAE,oBAAoB,EAAElB,MAAM,CAACiB,IAAI,CAAC,CAAC;KACxD;IACD,MAAME,CAAAA,GAAAA,WAAU,AAAc,CAAA,QAAd,CAAC,MAAM,EAAEH,IAAI,CAAC,CAAC;CAChC"}
1
+ {"version":3,"sources":["../../../../../src/start/platforms/ios/ensureSimulatorAppRunning.ts"],"sourcesContent":["import * as osascript from '@expo/osascript';\nimport spawnAsync from '@expo/spawn-async';\n\nimport { Device } from './simctl';\nimport * as Log from '../../../log';\nimport { waitForActionAsync } from '../../../utils/delay';\nimport { CommandError } from '../../../utils/errors';\n\n/** Open the Simulator.app and return when the system registers it as 'open'. */\nexport async function ensureSimulatorAppRunningAsync(\n device: Partial<Pick<Device, 'udid'>>,\n {\n maxWaitTime,\n }: {\n maxWaitTime?: number;\n } = {}\n): Promise<void> {\n if (await isSimulatorAppRunningAsync()) {\n return;\n }\n\n Log.log(`\\u203A Opening the iOS simulator, this might take a moment.`);\n\n // In theory this would ensure the correct simulator is booted as well.\n // This isn't theory though, this is Xcode.\n await openSimulatorAppAsync(device);\n\n if (!(await waitForSimulatorAppToStart({ maxWaitTime }))) {\n throw new CommandError(\n 'SIMULATOR_TIMEOUT',\n `Simulator app did not open fast enough. Try opening Simulator first, then running your app.`\n );\n }\n}\n\nasync function waitForSimulatorAppToStart({\n maxWaitTime,\n}: { maxWaitTime?: number } = {}): Promise<boolean> {\n return waitForActionAsync<boolean>({\n interval: 50,\n maxWaitTime,\n action: isSimulatorAppRunningAsync,\n });\n}\n\n// I think the app can be open while no simulators are booted.\nasync function isSimulatorAppRunningAsync(): Promise<boolean> {\n try {\n const zeroMeansNo = (\n await osascript.execAsync(\n 'tell app \"System Events\" to count processes whose name is \"Simulator\"'\n )\n ).trim();\n if (zeroMeansNo === '0') {\n return false;\n }\n } catch (error: any) {\n if (error.message.includes('Application isn’t running')) {\n return false;\n }\n throw error;\n }\n\n return true;\n}\n\nasync function openSimulatorAppAsync(device: { udid?: string }) {\n const args = ['-a', 'Simulator'];\n if (device.udid) {\n // This has no effect if the app is already running.\n args.push('--args', '-CurrentDeviceUDID', device.udid);\n }\n await spawnAsync('open', args);\n}\n"],"names":["ensureSimulatorAppRunningAsync","osascript","Log","device","maxWaitTime","isSimulatorAppRunningAsync","log","openSimulatorAppAsync","waitForSimulatorAppToStart","CommandError","waitForActionAsync","interval","action","zeroMeansNo","execAsync","trim","error","message","includes","args","udid","push","spawnAsync"],"mappings":"AAAA;;;;QASsBA,8BAA8B,GAA9BA,8BAA8B;SATxCC,SAAS;iDAAM,iBAAiB;IAAhCA,SAAS;;;;;SACE,WAAmB;gDAAnB,mBAAmB;IAAnB,WAAmB;;;;;AAG9BC,IAAAA,GAAG,mCAAM,cAAc,EAApB;AACoB,IAAA,MAAsB,WAAtB,sBAAsB,CAAA;AAC5B,IAAA,OAAuB,WAAvB,uBAAuB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;AAG7C,eAAeF,8BAA8B,CAClDG,MAAqC,EACrC,EACEC,WAAW,CAAA,EAGZ,GAAG,EAAE,EACS;IACf,IAAI,MAAMC,0BAA0B,EAAE,EAAE;QACtC,OAAO;KACR;IAEDH,GAAG,CAACI,GAAG,CAAC,CAAC,2DAA2D,CAAC,CAAC,CAAC;IAEvE,uEAAuE;IACvE,2CAA2C;IAC3C,MAAMC,qBAAqB,CAACJ,MAAM,CAAC,CAAC;IAEpC,IAAI,CAAE,MAAMK,0BAA0B,CAAC;QAAEJ,WAAW;KAAE,CAAC,AAAC,EAAE;QACxD,MAAM,IAAIK,OAAY,aAAA,CACpB,mBAAmB,EACnB,CAAC,2FAA2F,CAAC,CAC9F,CAAC;KACH;CACF;AAED,eAAeD,0BAA0B,CAAC,EACxCJ,WAAW,CAAA,EACc,GAAG,EAAE,EAAoB;IAClD,OAAOM,CAAAA,GAAAA,MAAkB,AAIvB,CAAA,mBAJuB,CAAU;QACjCC,QAAQ,EAAE,EAAE;QACZP,WAAW;QACXQ,MAAM,EAAEP,0BAA0B;KACnC,CAAC,CAAC;CACJ;AAED,8DAA8D;AAC9D,eAAeA,0BAA0B,GAAqB;IAC5D,IAAI;QACF,MAAMQ,WAAW,GAAG,CAClB,MAAMZ,SAAS,GAACa,SAAS,CACvB,uEAAuE,CACxE,CACF,CAACC,IAAI,EAAE,AAAC;QACT,IAAIF,WAAW,KAAK,GAAG,EAAE;YACvB,OAAO,KAAK,CAAC;SACd;KACF,CAAC,OAAOG,KAAK,EAAO;QACnB,IAAIA,KAAK,CAACC,OAAO,CAACC,QAAQ,CAAC,gCAA2B,CAAC,EAAE;YACvD,OAAO,KAAK,CAAC;SACd;QACD,MAAMF,KAAK,CAAC;KACb;IAED,OAAO,IAAI,CAAC;CACb;AAED,eAAeT,qBAAqB,CAACJ,MAAyB,EAAE;IAC9D,MAAMgB,IAAI,GAAG;QAAC,IAAI;QAAE,WAAW;KAAC,AAAC;IACjC,IAAIhB,MAAM,CAACiB,IAAI,EAAE;QACf,oDAAoD;QACpDD,IAAI,CAACE,IAAI,CAAC,QAAQ,EAAE,oBAAoB,EAAElB,MAAM,CAACiB,IAAI,CAAC,CAAC;KACxD;IACD,MAAME,WAAU,UAAA,CAAC,MAAM,EAAEH,IAAI,CAAC,CAAC;CAChC"}
@@ -6,7 +6,13 @@ exports.getBestBootedSimulatorAsync = getBestBootedSimulatorAsync;
6
6
  exports.getBestUnbootedSimulatorAsync = getBestUnbootedSimulatorAsync;
7
7
  exports.getSelectableSimulatorsAsync = getSelectableSimulatorsAsync;
8
8
  exports.getBestSimulatorAsync = getBestSimulatorAsync;
9
- var _childProcess = require("child_process");
9
+ function _childProcess() {
10
+ const data = require("child_process");
11
+ _childProcess = function() {
12
+ return data;
13
+ };
14
+ return data;
15
+ }
10
16
  var SimControl = _interopRequireWildcard(require("./simctl"));
11
17
  var _errors = require("../../../utils/errors");
12
18
  function _interopRequireWildcard(obj) {
@@ -36,7 +42,7 @@ const debug = require("debug")("expo:start:platforms:ios:getBestSimulator");
36
42
  * This helps us to get the device that the user opened most recently regardless of which tool they used.
37
43
  */ function getDefaultSimulatorDeviceUDID() {
38
44
  try {
39
- const defaultDeviceUDID = (0, _childProcess).execSync(`defaults read com.apple.iphonesimulator CurrentDeviceUDID`, {
45
+ const defaultDeviceUDID = _childProcess().execSync(`defaults read com.apple.iphonesimulator CurrentDeviceUDID`, {
40
46
  stdio: "pipe"
41
47
  }).toString();
42
48
  return defaultDeviceUDID.trim();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/platforms/ios/getBestSimulator.ts"],"sourcesContent":["import { execSync } from 'child_process';\n\nimport * as SimControl from './simctl';\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')('expo:start:platforms:ios:getBestSimulator') as typeof console.log;\n\ntype DeviceContext = Partial<Pick<SimControl.Device, 'osType'>>;\n\n/**\n * Returns the default device stored in the Simulator.app settings.\n * This helps us to get the device that the user opened most recently regardless of which tool they used.\n */\nfunction getDefaultSimulatorDeviceUDID() {\n try {\n const defaultDeviceUDID = execSync(\n `defaults read com.apple.iphonesimulator CurrentDeviceUDID`,\n { stdio: 'pipe' }\n ).toString();\n return defaultDeviceUDID.trim();\n } catch {\n return null;\n }\n}\n\nexport async function getBestBootedSimulatorAsync({\n osType,\n}: DeviceContext = {}): Promise<SimControl.Device | null> {\n const [simulatorOpenedByApp] = await SimControl.getBootedSimulatorsAsync();\n // This should prevent opening a second simulator in the chance that default\n // simulator doesn't match what the Simulator app would open by default.\n if (\n simulatorOpenedByApp?.udid &&\n (!osType || (osType && simulatorOpenedByApp.osType === osType))\n ) {\n debug(`First booted simulator: ${simulatorOpenedByApp?.windowName}`);\n return simulatorOpenedByApp;\n }\n\n debug(`No booted simulator matching requirements (osType: ${osType}).`);\n return null;\n}\n\n/**\n * Returns the most preferred simulator UDID without booting anything.\n *\n * 1. If the simulator app defines a default simulator and the osType is not defined.\n * 2. If the osType is defined, then check if the default udid matches the osType.\n * 3. If all else fails, return the first found simulator.\n */\nexport async function getBestUnbootedSimulatorAsync({ osType }: DeviceContext = {}): Promise<\n string | null\n> {\n const defaultId = getDefaultSimulatorDeviceUDID();\n debug(`Default simulator ID: ${defaultId}`);\n\n if (defaultId && !osType) {\n return defaultId;\n }\n\n const simulators = await getSelectableSimulatorsAsync({ osType });\n\n if (!simulators.length) {\n // TODO: Prompt to install the simulators\n throw new CommandError(\n 'UNSUPPORTED_OS_TYPE',\n `No ${osType || 'iOS'} devices available in Simulator.app`\n );\n }\n\n // If the default udid is defined, then check to ensure its osType matches the required os.\n if (defaultId) {\n const defaultSimulator = simulators.find((device) => device.udid === defaultId);\n if (defaultSimulator?.osType === osType) {\n return defaultId;\n }\n }\n\n // Return first selectable device.\n return simulators[0]?.udid ?? null;\n}\n\n/**\n * Get all simulators supported by Expo Go (iOS only).\n */\nexport async function getSelectableSimulatorsAsync({ osType = 'iOS' }: DeviceContext = {}): Promise<\n SimControl.Device[]\n> {\n const simulators = await SimControl.getDevicesAsync();\n return simulators.filter((device) => device.isAvailable && device.osType === osType);\n}\n\n/**\n * Get 'best' simulator for the user based on:\n * 1. Currently booted simulator.\n * 2. Last simulator that was opened.\n * 3. First simulator that was opened.\n */\nexport async function getBestSimulatorAsync({ osType }: DeviceContext): Promise<string | null> {\n const simulatorOpenedByApp = await getBestBootedSimulatorAsync({ osType });\n\n if (simulatorOpenedByApp) {\n return simulatorOpenedByApp.udid;\n }\n\n return await getBestUnbootedSimulatorAsync({ osType });\n}\n"],"names":["getBestBootedSimulatorAsync","getBestUnbootedSimulatorAsync","getSelectableSimulatorsAsync","getBestSimulatorAsync","SimControl","debug","require","getDefaultSimulatorDeviceUDID","defaultDeviceUDID","execSync","stdio","toString","trim","osType","simulatorOpenedByApp","getBootedSimulatorsAsync","udid","windowName","simulators","defaultId","length","CommandError","defaultSimulator","find","device","getDevicesAsync","filter","isAvailable"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/platforms/ios/getBestSimulator.ts"],"sourcesContent":["import { execSync } from 'child_process';\n\nimport * as SimControl from './simctl';\nimport { CommandError } from '../../../utils/errors';\n\nconst debug = require('debug')('expo:start:platforms:ios:getBestSimulator') as typeof console.log;\n\ntype DeviceContext = Partial<Pick<SimControl.Device, 'osType'>>;\n\n/**\n * Returns the default device stored in the Simulator.app settings.\n * This helps us to get the device that the user opened most recently regardless of which tool they used.\n */\nfunction getDefaultSimulatorDeviceUDID() {\n try {\n const defaultDeviceUDID = execSync(\n `defaults read com.apple.iphonesimulator CurrentDeviceUDID`,\n { stdio: 'pipe' }\n ).toString();\n return defaultDeviceUDID.trim();\n } catch {\n return null;\n }\n}\n\nexport async function getBestBootedSimulatorAsync({\n osType,\n}: DeviceContext = {}): Promise<SimControl.Device | null> {\n const [simulatorOpenedByApp] = await SimControl.getBootedSimulatorsAsync();\n // This should prevent opening a second simulator in the chance that default\n // simulator doesn't match what the Simulator app would open by default.\n if (\n simulatorOpenedByApp?.udid &&\n (!osType || (osType && simulatorOpenedByApp.osType === osType))\n ) {\n debug(`First booted simulator: ${simulatorOpenedByApp?.windowName}`);\n return simulatorOpenedByApp;\n }\n\n debug(`No booted simulator matching requirements (osType: ${osType}).`);\n return null;\n}\n\n/**\n * Returns the most preferred simulator UDID without booting anything.\n *\n * 1. If the simulator app defines a default simulator and the osType is not defined.\n * 2. If the osType is defined, then check if the default udid matches the osType.\n * 3. If all else fails, return the first found simulator.\n */\nexport async function getBestUnbootedSimulatorAsync({ osType }: DeviceContext = {}): Promise<\n string | null\n> {\n const defaultId = getDefaultSimulatorDeviceUDID();\n debug(`Default simulator ID: ${defaultId}`);\n\n if (defaultId && !osType) {\n return defaultId;\n }\n\n const simulators = await getSelectableSimulatorsAsync({ osType });\n\n if (!simulators.length) {\n // TODO: Prompt to install the simulators\n throw new CommandError(\n 'UNSUPPORTED_OS_TYPE',\n `No ${osType || 'iOS'} devices available in Simulator.app`\n );\n }\n\n // If the default udid is defined, then check to ensure its osType matches the required os.\n if (defaultId) {\n const defaultSimulator = simulators.find((device) => device.udid === defaultId);\n if (defaultSimulator?.osType === osType) {\n return defaultId;\n }\n }\n\n // Return first selectable device.\n return simulators[0]?.udid ?? null;\n}\n\n/**\n * Get all simulators supported by Expo Go (iOS only).\n */\nexport async function getSelectableSimulatorsAsync({ osType = 'iOS' }: DeviceContext = {}): Promise<\n SimControl.Device[]\n> {\n const simulators = await SimControl.getDevicesAsync();\n return simulators.filter((device) => device.isAvailable && device.osType === osType);\n}\n\n/**\n * Get 'best' simulator for the user based on:\n * 1. Currently booted simulator.\n * 2. Last simulator that was opened.\n * 3. First simulator that was opened.\n */\nexport async function getBestSimulatorAsync({ osType }: DeviceContext): Promise<string | null> {\n const simulatorOpenedByApp = await getBestBootedSimulatorAsync({ osType });\n\n if (simulatorOpenedByApp) {\n return simulatorOpenedByApp.udid;\n }\n\n return await getBestUnbootedSimulatorAsync({ osType });\n}\n"],"names":["getBestBootedSimulatorAsync","getBestUnbootedSimulatorAsync","getSelectableSimulatorsAsync","getBestSimulatorAsync","SimControl","debug","require","getDefaultSimulatorDeviceUDID","defaultDeviceUDID","execSync","stdio","toString","trim","osType","simulatorOpenedByApp","getBootedSimulatorsAsync","udid","windowName","simulators","defaultId","length","CommandError","defaultSimulator","find","device","getDevicesAsync","filter","isAvailable"],"mappings":"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"}
@@ -4,7 +4,13 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  exports.sortDefaultDeviceToBeginningAsync = sortDefaultDeviceToBeginningAsync;
6
6
  exports.promptAppleDeviceAsync = promptAppleDeviceAsync;
7
- var _chalk = _interopRequireDefault(require("chalk"));
7
+ function _chalk() {
8
+ const data = _interopRequireDefault(require("chalk"));
9
+ _chalk = function() {
10
+ return data;
11
+ };
12
+ return data;
13
+ }
8
14
  var _getBestSimulator = require("./getBestSimulator");
9
15
  var _prompts = require("../../../utils/prompts");
10
16
  function _interopRequireDefault(obj) {
@@ -41,10 +47,10 @@ async function promptAppleDeviceInternalAsync(devices) {
41
47
  message: "Select a simulator",
42
48
  choices: devices.map((item)=>{
43
49
  const isActive = item.state === "Booted";
44
- const format = isActive ? _chalk.default.bold : (text)=>text
50
+ const format = isActive ? _chalk().default.bold : (text)=>text
45
51
  ;
46
52
  return {
47
- title: `${format(item.name)} ${_chalk.default.dim(`(${item.osVersion})`)}`,
53
+ title: `${format(item.name)} ${_chalk().default.dim(`(${item.osVersion})`)}`,
48
54
  value: item.udid
49
55
  };
50
56
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/platforms/ios/promptAppleDevice.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { getBestSimulatorAsync } from './getBestSimulator';\nimport { Device } from './simctl';\nimport { createSelectionFilter, promptAsync } from '../../../utils/prompts';\n\n/**\n * Sort the devices so the last simulator that was opened (user's default) is the first suggested.\n *\n * @param devices list of devices to sort.\n * @param osType optional sort by operating system.\n */\nexport async function sortDefaultDeviceToBeginningAsync(\n devices: Device[],\n osType?: Device['osType']\n): Promise<Device[]> {\n const defaultId = await getBestSimulatorAsync({ osType });\n if (defaultId) {\n let iterations = 0;\n while (devices[0].udid !== defaultId && iterations < devices.length) {\n devices.push(devices.shift()!);\n iterations++;\n }\n }\n return devices;\n}\n\n/** Prompt the user to select an Apple device, sorting the most likely option to the beginning. */\nexport async function promptAppleDeviceAsync(\n devices: Device[],\n osType?: Device['osType']\n): Promise<Device> {\n devices = await sortDefaultDeviceToBeginningAsync(devices, osType);\n const results = await promptAppleDeviceInternalAsync(devices);\n return devices.find(({ udid }) => results === udid)!;\n}\n\nasync function promptAppleDeviceInternalAsync(devices: Device[]): Promise<string> {\n // TODO: provide an option to add or download more simulators\n // TODO: Add support for physical devices too.\n\n const { value } = await promptAsync({\n type: 'autocomplete',\n name: 'value',\n limit: 11,\n message: 'Select a simulator',\n choices: devices.map((item) => {\n const isActive = item.state === 'Booted';\n const format = isActive ? chalk.bold : (text: string) => text;\n return {\n title: `${format(item.name)} ${chalk.dim(`(${item.osVersion})`)}`,\n value: item.udid,\n };\n }),\n suggest: createSelectionFilter(),\n });\n\n return value;\n}\n"],"names":["sortDefaultDeviceToBeginningAsync","promptAppleDeviceAsync","devices","osType","defaultId","getBestSimulatorAsync","iterations","udid","length","push","shift","results","promptAppleDeviceInternalAsync","find","value","promptAsync","type","name","limit","message","choices","map","item","isActive","state","format","chalk","bold","text","title","dim","osVersion","suggest","createSelectionFilter"],"mappings":"AAAA;;;;QAYsBA,iCAAiC,GAAjCA,iCAAiC;QAgBjCC,sBAAsB,GAAtBA,sBAAsB;AA5B1B,IAAA,MAAO,kCAAP,OAAO,EAAA;AAEa,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;AAEP,IAAA,QAAwB,WAAxB,wBAAwB,CAAA;;;;;;AAQpE,eAAeD,iCAAiC,CACrDE,OAAiB,EACjBC,MAAyB,EACN;IACnB,MAAMC,SAAS,GAAG,MAAMC,CAAAA,GAAAA,iBAAqB,AAAY,CAAA,sBAAZ,CAAC;QAAEF,MAAM;KAAE,CAAC,AAAC;IAC1D,IAAIC,SAAS,EAAE;QACb,IAAIE,UAAU,GAAG,CAAC,AAAC;QACnB,MAAOJ,OAAO,CAAC,CAAC,CAAC,CAACK,IAAI,KAAKH,SAAS,IAAIE,UAAU,GAAGJ,OAAO,CAACM,MAAM,CAAE;YACnEN,OAAO,CAACO,IAAI,CAACP,OAAO,CAACQ,KAAK,EAAE,CAAE,CAAC;YAC/BJ,UAAU,EAAE,CAAC;SACd;KACF;IACD,OAAOJ,OAAO,CAAC;CAChB;AAGM,eAAeD,sBAAsB,CAC1CC,OAAiB,EACjBC,MAAyB,EACR;IACjBD,OAAO,GAAG,MAAMF,iCAAiC,CAACE,OAAO,EAAEC,MAAM,CAAC,CAAC;IACnE,MAAMQ,OAAO,GAAG,MAAMC,8BAA8B,CAACV,OAAO,CAAC,AAAC;IAC9D,OAAOA,OAAO,CAACW,IAAI,CAAC,CAAC,EAAEN,IAAI,CAAA,EAAE,GAAKI,OAAO,KAAKJ,IAAI;IAAA,CAAC,CAAE;CACtD;AAED,eAAeK,8BAA8B,CAACV,OAAiB,EAAmB;IAChF,6DAA6D;IAC7D,8CAA8C;IAE9C,MAAM,EAAEY,KAAK,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,QAAW,AAcjC,CAAA,YAdiC,CAAC;QAClCC,IAAI,EAAE,cAAc;QACpBC,IAAI,EAAE,OAAO;QACbC,KAAK,EAAE,EAAE;QACTC,OAAO,EAAE,oBAAoB;QAC7BC,OAAO,EAAElB,OAAO,CAACmB,GAAG,CAAC,CAACC,IAAI,GAAK;YAC7B,MAAMC,QAAQ,GAAGD,IAAI,CAACE,KAAK,KAAK,QAAQ,AAAC;YACzC,MAAMC,MAAM,GAAGF,QAAQ,GAAGG,MAAK,QAAA,CAACC,IAAI,GAAG,CAACC,IAAY,GAAKA,IAAI;YAAC;YAC9D,OAAO;gBACLC,KAAK,EAAE,CAAC,EAAEJ,MAAM,CAACH,IAAI,CAACL,IAAI,CAAC,CAAC,CAAC,EAAES,MAAK,QAAA,CAACI,GAAG,CAAC,CAAC,CAAC,EAAER,IAAI,CAACS,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjEjB,KAAK,EAAEQ,IAAI,CAACf,IAAI;aACjB,CAAC;SACH,CAAC;QACFyB,OAAO,EAAEC,CAAAA,GAAAA,QAAqB,AAAE,CAAA,sBAAF,EAAE;KACjC,CAAC,AAAC;IAEH,OAAOnB,KAAK,CAAC;CACd"}
1
+ {"version":3,"sources":["../../../../../src/start/platforms/ios/promptAppleDevice.ts"],"sourcesContent":["import chalk from 'chalk';\n\nimport { getBestSimulatorAsync } from './getBestSimulator';\nimport { Device } from './simctl';\nimport { createSelectionFilter, promptAsync } from '../../../utils/prompts';\n\n/**\n * Sort the devices so the last simulator that was opened (user's default) is the first suggested.\n *\n * @param devices list of devices to sort.\n * @param osType optional sort by operating system.\n */\nexport async function sortDefaultDeviceToBeginningAsync(\n devices: Device[],\n osType?: Device['osType']\n): Promise<Device[]> {\n const defaultId = await getBestSimulatorAsync({ osType });\n if (defaultId) {\n let iterations = 0;\n while (devices[0].udid !== defaultId && iterations < devices.length) {\n devices.push(devices.shift()!);\n iterations++;\n }\n }\n return devices;\n}\n\n/** Prompt the user to select an Apple device, sorting the most likely option to the beginning. */\nexport async function promptAppleDeviceAsync(\n devices: Device[],\n osType?: Device['osType']\n): Promise<Device> {\n devices = await sortDefaultDeviceToBeginningAsync(devices, osType);\n const results = await promptAppleDeviceInternalAsync(devices);\n return devices.find(({ udid }) => results === udid)!;\n}\n\nasync function promptAppleDeviceInternalAsync(devices: Device[]): Promise<string> {\n // TODO: provide an option to add or download more simulators\n // TODO: Add support for physical devices too.\n\n const { value } = await promptAsync({\n type: 'autocomplete',\n name: 'value',\n limit: 11,\n message: 'Select a simulator',\n choices: devices.map((item) => {\n const isActive = item.state === 'Booted';\n const format = isActive ? chalk.bold : (text: string) => text;\n return {\n title: `${format(item.name)} ${chalk.dim(`(${item.osVersion})`)}`,\n value: item.udid,\n };\n }),\n suggest: createSelectionFilter(),\n });\n\n return value;\n}\n"],"names":["sortDefaultDeviceToBeginningAsync","promptAppleDeviceAsync","devices","osType","defaultId","getBestSimulatorAsync","iterations","udid","length","push","shift","results","promptAppleDeviceInternalAsync","find","value","promptAsync","type","name","limit","message","choices","map","item","isActive","state","format","chalk","bold","text","title","dim","osVersion","suggest","createSelectionFilter"],"mappings":"AAAA;;;;QAYsBA,iCAAiC,GAAjCA,iCAAiC;QAgBjCC,sBAAsB,GAAtBA,sBAAsB;SA5B1B,MAAO;gDAAP,OAAO;IAAP,MAAO;;;;;AAEa,IAAA,iBAAoB,WAApB,oBAAoB,CAAA;AAEP,IAAA,QAAwB,WAAxB,wBAAwB,CAAA;;;;;;AAQpE,eAAeD,iCAAiC,CACrDE,OAAiB,EACjBC,MAAyB,EACN;IACnB,MAAMC,SAAS,GAAG,MAAMC,CAAAA,GAAAA,iBAAqB,AAAY,CAAA,sBAAZ,CAAC;QAAEF,MAAM;KAAE,CAAC,AAAC;IAC1D,IAAIC,SAAS,EAAE;QACb,IAAIE,UAAU,GAAG,CAAC,AAAC;QACnB,MAAOJ,OAAO,CAAC,CAAC,CAAC,CAACK,IAAI,KAAKH,SAAS,IAAIE,UAAU,GAAGJ,OAAO,CAACM,MAAM,CAAE;YACnEN,OAAO,CAACO,IAAI,CAACP,OAAO,CAACQ,KAAK,EAAE,CAAE,CAAC;YAC/BJ,UAAU,EAAE,CAAC;SACd;KACF;IACD,OAAOJ,OAAO,CAAC;CAChB;AAGM,eAAeD,sBAAsB,CAC1CC,OAAiB,EACjBC,MAAyB,EACR;IACjBD,OAAO,GAAG,MAAMF,iCAAiC,CAACE,OAAO,EAAEC,MAAM,CAAC,CAAC;IACnE,MAAMQ,OAAO,GAAG,MAAMC,8BAA8B,CAACV,OAAO,CAAC,AAAC;IAC9D,OAAOA,OAAO,CAACW,IAAI,CAAC,CAAC,EAAEN,IAAI,CAAA,EAAE,GAAKI,OAAO,KAAKJ,IAAI;IAAA,CAAC,CAAE;CACtD;AAED,eAAeK,8BAA8B,CAACV,OAAiB,EAAmB;IAChF,6DAA6D;IAC7D,8CAA8C;IAE9C,MAAM,EAAEY,KAAK,CAAA,EAAE,GAAG,MAAMC,CAAAA,GAAAA,QAAW,AAcjC,CAAA,YAdiC,CAAC;QAClCC,IAAI,EAAE,cAAc;QACpBC,IAAI,EAAE,OAAO;QACbC,KAAK,EAAE,EAAE;QACTC,OAAO,EAAE,oBAAoB;QAC7BC,OAAO,EAAElB,OAAO,CAACmB,GAAG,CAAC,CAACC,IAAI,GAAK;YAC7B,MAAMC,QAAQ,GAAGD,IAAI,CAACE,KAAK,KAAK,QAAQ,AAAC;YACzC,MAAMC,MAAM,GAAGF,QAAQ,GAAGG,MAAK,UAAA,CAACC,IAAI,GAAG,CAACC,IAAY,GAAKA,IAAI;YAAC;YAC9D,OAAO;gBACLC,KAAK,EAAE,CAAC,EAAEJ,MAAM,CAACH,IAAI,CAACL,IAAI,CAAC,CAAC,CAAC,EAAES,MAAK,UAAA,CAACI,GAAG,CAAC,CAAC,CAAC,EAAER,IAAI,CAACS,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjEjB,KAAK,EAAEQ,IAAI,CAACf,IAAI;aACjB,CAAC;SACH,CAAC;QACFyB,OAAO,EAAEC,CAAAA,GAAAA,QAAqB,AAAE,CAAA,sBAAF,EAAE;KACjC,CAAC,AAAC;IAEH,OAAOnB,KAAK,CAAC;CACd"}
@@ -15,7 +15,13 @@ exports.installAsync = installAsync;
15
15
  exports.uninstallAsync = uninstallAsync;
16
16
  exports.getDevicesAsync = getDevicesAsync;
17
17
  exports.simctlAsync = simctlAsync;
18
- var _spawnAsync = _interopRequireDefault(require("@expo/spawn-async"));
18
+ function _spawnAsync() {
19
+ const data = _interopRequireDefault(require("@expo/spawn-async"));
20
+ _spawnAsync = function() {
21
+ return data;
22
+ };
23
+ return data;
24
+ }
19
25
  var _xcrun = require("./xcrun");
20
26
  var Log = _interopRequireWildcard(require("../../../log"));
21
27
  var _errors = require("../../../utils/errors");
@@ -74,15 +80,15 @@ async function getContainerPathAsync(device, { appId }) {
74
80
  throw error;
75
81
  }
76
82
  }
77
- async function getInfoPlistValueAsync(device, { appId , key }) {
78
- const containerPath = await getContainerPathAsync(device, {
83
+ async function getInfoPlistValueAsync(device, { appId , key , containerPath }) {
84
+ const ensuredContainerPath = containerPath != null ? containerPath : await getContainerPathAsync(device, {
79
85
  appId
80
86
  });
81
- if (containerPath) {
87
+ if (ensuredContainerPath) {
82
88
  try {
83
- const { output } = await (0, _spawnAsync).default("defaults", [
89
+ const { output } = await _spawnAsync().default("defaults", [
84
90
  "read",
85
- `${containerPath}/Info`,
91
+ `${ensuredContainerPath}/Info`,
86
92
  key
87
93
  ], {
88
94
  stdio: "pipe"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/platforms/ios/simctl.ts"],"sourcesContent":["import spawnAsync, { SpawnOptions, SpawnResult } from '@expo/spawn-async';\n\nimport { xcrunAsync } from './xcrun';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\n\ntype DeviceState = 'Shutdown' | 'Booted';\n\nexport type OSType = 'iOS' | 'tvOS' | 'watchOS' | 'macOS';\n\nexport type Device = {\n availabilityError?: 'runtime profile not found';\n /** '/Users/name/Library/Developer/CoreSimulator/Devices/00E55DC0-0364-49DF-9EC6-77BE587137D4/data' */\n dataPath: string;\n /** @example `2811236352` */\n dataPathSize?: number;\n /** '/Users/name/Library/Logs/CoreSimulator/00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n logPath: string;\n /** @example `479232` */\n logPathSize?: number;\n /** '00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n udid: string;\n /** 'com.apple.CoreSimulator.SimRuntime.iOS-15-1' */\n runtime: string;\n /** If the device is \"available\" which generally means that the OS files haven't been deleted (this can happen when Xcode updates). */\n isAvailable: boolean;\n /** 'com.apple.CoreSimulator.SimDeviceType.iPhone-13-Pro' */\n deviceTypeIdentifier: string;\n state: DeviceState;\n /** 'iPhone 13 Pro' */\n name: string;\n /** Type of OS the device uses. */\n osType: OSType;\n /** '15.1' */\n osVersion: string;\n /** 'iPhone 13 Pro (15.1)' */\n windowName: string;\n};\n\ntype SimulatorDeviceList = {\n devices: {\n [runtime: string]: Device[];\n };\n};\n\ntype DeviceContext = Pick<Device, 'udid'>;\n\n/** Returns true if the given value is an `OSType`, if we don't recognize the value we continue anyways but warn. */\nexport function isOSType(value: any): value is OSType {\n if (!value || typeof value !== 'string') return false;\n\n const knownTypes = ['iOS', 'tvOS', 'watchOS', 'macOS'];\n if (!knownTypes.includes(value)) {\n Log.warn(`Unknown OS type: ${value}. Expected one of: ${knownTypes.join(', ')}`);\n }\n return true;\n}\n\n/**\n * Returns the local path for the installed tar.app. Returns null when the app isn't installed.\n *\n * @param device context for selecting a device.\n * @param props.appId bundle identifier for app.\n * @returns local file path to installed app binary, e.g. '/Users/evanbacon/Library/Developer/CoreSimulator/Devices/EFEEA6EF-E3F5-4EDE-9B72-29EAFA7514AE/data/Containers/Bundle/Application/FA43A0C6-C2AD-442D-B8B1-EAF3E88CF3BF/Exponent-2.21.3.tar.app'\n */\nexport async function getContainerPathAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n }: {\n appId: string;\n }\n): Promise<string | null> {\n try {\n const { stdout } = await simctlAsync(['get_app_container', resolveId(device), appId]);\n return stdout.trim();\n } catch (error: any) {\n if (error.stderr?.match(/No such file or directory/)) {\n return null;\n }\n throw error;\n }\n}\n\n/** Return a value from an installed app's Info.plist. */\nexport async function getInfoPlistValueAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n key,\n }: {\n appId: string;\n key: string;\n }\n): Promise<string | null> {\n const containerPath = await getContainerPathAsync(device, { appId });\n if (containerPath) {\n try {\n const { output } = await spawnAsync('defaults', ['read', `${containerPath}/Info`, key], {\n stdio: 'pipe',\n });\n return output.join('\\n').trim();\n } catch {\n return null;\n }\n }\n return null;\n}\n\n/** Open a URL on a device. The url can have any protocol. */\nexport async function openUrlAsync(\n device: Partial<DeviceContext>,\n options: { url: string }\n): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['openurl', resolveId(device), options.url]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to lookup in current state: Shut/)) {\n throw error;\n }\n\n // If the device was in a weird in-between state (\"Shutting Down\" or \"Shutdown\"), then attempt to reboot it and try again.\n // This can happen when quitting the Simulator app, and immediately pressing `i` to reopen the project.\n\n // First boot the simulator\n await bootDeviceAsync({ udid: resolveId(device) });\n\n // Finally, try again...\n return await openUrlAsync(device, options);\n }\n}\n\n/** Open a simulator using a bundle identifier. If no app with a matching bundle identifier is installed then an error will be thrown. */\nexport async function openAppIdAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n const results = await openAppIdInternalAsync(device, options);\n // Similar to 194, this is a conformance issue which indicates that the given device has no app that can handle our launch request.\n if (results.status === 4) {\n throw new CommandError('APP_NOT_INSTALLED', results.stderr);\n }\n return results;\n}\nasync function openAppIdInternalAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n try {\n return await simctlAsync(['launch', resolveId(device), options.appId]);\n } catch (error: any) {\n if ('status' in error) {\n return error;\n }\n throw error;\n }\n}\n\n// This will only boot in headless mode if the Simulator app is not running.\nexport async function bootAsync(device: DeviceContext): Promise<Device | null> {\n await bootDeviceAsync(device);\n return isDeviceBootedAsync(device);\n}\n\n/** Returns a list of devices whose current state is 'Booted' as an array. */\nexport async function getBootedSimulatorsAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flatMap((runtime) =>\n runtime.filter((device) => device.state === 'Booted')\n );\n}\n\n/** Returns the current device if its state is 'Booted'. */\nexport async function isDeviceBootedAsync(device: Partial<DeviceContext>): Promise<Device | null> {\n // Simulators can be booted even if the app isn't running :(\n const devices = await getBootedSimulatorsAsync();\n if (device.udid) {\n return devices.find((bootedDevice) => bootedDevice.udid === device.udid) ?? null;\n }\n\n return devices[0] ?? null;\n}\n\n/** Boot a device. */\nexport async function bootDeviceAsync(device: DeviceContext): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['boot', device.udid]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to boot device in current state: Booted/)) {\n throw error;\n }\n }\n}\n\n/** Install a binary file on the device. */\nexport async function installAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Local absolute file path to an app binary that is built and provisioned for iOS simulators. */\n filePath: string;\n }\n): Promise<any> {\n return simctlAsync(['install', resolveId(device), options.filePath]);\n}\n\n/** Uninstall an app from the provided device. */\nexport async function uninstallAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Bundle identifier */\n appId: string;\n }\n): Promise<any> {\n return simctlAsync(['uninstall', resolveId(device), options.appId]);\n}\n\nfunction parseSimControlJSONResults(input: string): any {\n try {\n return JSON.parse(input);\n } catch (error: any) {\n // Nov 15, 2020: Observed this can happen when opening the simulator and the simulator prompts the user to update the xcode command line tools.\n // Unexpected token I in JSON at position 0\n if (error.message.includes('Unexpected token')) {\n Log.error(`Apple's simctl returned malformed JSON:\\n${input}`);\n }\n throw error;\n }\n}\n\n/** Get all runtime devices given a certain type. */\nasync function getRuntimesAsync(\n type: 'devices' | 'devicetypes' | 'runtimes' | 'pairs',\n query?: string | 'available'\n): Promise<SimulatorDeviceList> {\n const result = await simctlAsync(['list', type, '--json', query]);\n const info = parseSimControlJSONResults(result.stdout) as SimulatorDeviceList;\n\n for (const runtime of Object.keys(info.devices)) {\n // Given a string like 'com.apple.CoreSimulator.SimRuntime.tvOS-13-4'\n const runtimeSuffix = runtime.split('com.apple.CoreSimulator.SimRuntime.').pop()!;\n // Create an array [tvOS, 13, 4]\n const [osType, ...osVersionComponents] = runtimeSuffix.split('-');\n // Join the end components [13, 4] -> '13.4'\n const osVersion = osVersionComponents.join('.');\n const sims = info.devices[runtime];\n for (const device of sims) {\n device.runtime = runtime;\n device.osVersion = osVersion;\n device.windowName = `${device.name} (${osVersion})`;\n device.osType = osType as OSType;\n }\n }\n return info;\n}\n\n/** Return a list of iOS simulators. */\nexport async function getDevicesAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flat();\n}\n\n/** Run a `simctl` command. */\nexport async function simctlAsync(\n args: (string | undefined)[],\n options?: SpawnOptions\n): Promise<SpawnResult> {\n return xcrunAsync(['simctl', ...args], options);\n}\n\nfunction resolveId(device: Partial<DeviceContext>): string {\n return device.udid ?? 'booted';\n}\n"],"names":["isOSType","getContainerPathAsync","getInfoPlistValueAsync","openUrlAsync","openAppIdAsync","bootAsync","getBootedSimulatorsAsync","isDeviceBootedAsync","bootDeviceAsync","installAsync","uninstallAsync","getDevicesAsync","simctlAsync","Log","value","knownTypes","includes","warn","join","device","appId","stdout","resolveId","trim","error","stderr","match","key","containerPath","output","spawnAsync","stdio","options","url","udid","results","openAppIdInternalAsync","status","CommandError","simulatorDeviceInfo","getRuntimesAsync","Object","values","devices","flatMap","runtime","filter","state","find","bootedDevice","filePath","parseSimControlJSONResults","input","JSON","parse","message","type","query","result","info","keys","runtimeSuffix","split","pop","osType","osVersionComponents","osVersion","sims","windowName","name","flat","args","xcrunAsync"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/platforms/ios/simctl.ts"],"sourcesContent":["import spawnAsync, { SpawnOptions, SpawnResult } from '@expo/spawn-async';\n\nimport { xcrunAsync } from './xcrun';\nimport * as Log from '../../../log';\nimport { CommandError } from '../../../utils/errors';\n\ntype DeviceState = 'Shutdown' | 'Booted';\n\nexport type OSType = 'iOS' | 'tvOS' | 'watchOS' | 'macOS';\n\nexport type Device = {\n availabilityError?: 'runtime profile not found';\n /** '/Users/name/Library/Developer/CoreSimulator/Devices/00E55DC0-0364-49DF-9EC6-77BE587137D4/data' */\n dataPath: string;\n /** @example `2811236352` */\n dataPathSize?: number;\n /** '/Users/name/Library/Logs/CoreSimulator/00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n logPath: string;\n /** @example `479232` */\n logPathSize?: number;\n /** '00E55DC0-0364-49DF-9EC6-77BE587137D4' */\n udid: string;\n /** 'com.apple.CoreSimulator.SimRuntime.iOS-15-1' */\n runtime: string;\n /** If the device is \"available\" which generally means that the OS files haven't been deleted (this can happen when Xcode updates). */\n isAvailable: boolean;\n /** 'com.apple.CoreSimulator.SimDeviceType.iPhone-13-Pro' */\n deviceTypeIdentifier: string;\n state: DeviceState;\n /** 'iPhone 13 Pro' */\n name: string;\n /** Type of OS the device uses. */\n osType: OSType;\n /** '15.1' */\n osVersion: string;\n /** 'iPhone 13 Pro (15.1)' */\n windowName: string;\n};\n\ntype SimulatorDeviceList = {\n devices: {\n [runtime: string]: Device[];\n };\n};\n\ntype DeviceContext = Pick<Device, 'udid'>;\n\n/** Returns true if the given value is an `OSType`, if we don't recognize the value we continue anyways but warn. */\nexport function isOSType(value: any): value is OSType {\n if (!value || typeof value !== 'string') return false;\n\n const knownTypes = ['iOS', 'tvOS', 'watchOS', 'macOS'];\n if (!knownTypes.includes(value)) {\n Log.warn(`Unknown OS type: ${value}. Expected one of: ${knownTypes.join(', ')}`);\n }\n return true;\n}\n\n/**\n * Returns the local path for the installed tar.app. Returns null when the app isn't installed.\n *\n * @param device context for selecting a device.\n * @param props.appId bundle identifier for app.\n * @returns local file path to installed app binary, e.g. '/Users/evanbacon/Library/Developer/CoreSimulator/Devices/EFEEA6EF-E3F5-4EDE-9B72-29EAFA7514AE/data/Containers/Bundle/Application/FA43A0C6-C2AD-442D-B8B1-EAF3E88CF3BF/Exponent-2.21.3.tar.app'\n */\nexport async function getContainerPathAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n }: {\n appId: string;\n }\n): Promise<string | null> {\n try {\n const { stdout } = await simctlAsync(['get_app_container', resolveId(device), appId]);\n return stdout.trim();\n } catch (error: any) {\n if (error.stderr?.match(/No such file or directory/)) {\n return null;\n }\n throw error;\n }\n}\n\n/** Return a value from an installed app's Info.plist. */\nexport async function getInfoPlistValueAsync(\n device: Partial<DeviceContext>,\n {\n appId,\n key,\n containerPath,\n }: {\n appId: string;\n key: string;\n containerPath?: string;\n }\n): Promise<string | null> {\n const ensuredContainerPath = containerPath ?? (await getContainerPathAsync(device, { appId }));\n if (ensuredContainerPath) {\n try {\n const { output } = await spawnAsync(\n 'defaults',\n ['read', `${ensuredContainerPath}/Info`, key],\n {\n stdio: 'pipe',\n }\n );\n return output.join('\\n').trim();\n } catch {\n return null;\n }\n }\n return null;\n}\n\n/** Open a URL on a device. The url can have any protocol. */\nexport async function openUrlAsync(\n device: Partial<DeviceContext>,\n options: { url: string }\n): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['openurl', resolveId(device), options.url]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to lookup in current state: Shut/)) {\n throw error;\n }\n\n // If the device was in a weird in-between state (\"Shutting Down\" or \"Shutdown\"), then attempt to reboot it and try again.\n // This can happen when quitting the Simulator app, and immediately pressing `i` to reopen the project.\n\n // First boot the simulator\n await bootDeviceAsync({ udid: resolveId(device) });\n\n // Finally, try again...\n return await openUrlAsync(device, options);\n }\n}\n\n/** Open a simulator using a bundle identifier. If no app with a matching bundle identifier is installed then an error will be thrown. */\nexport async function openAppIdAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n const results = await openAppIdInternalAsync(device, options);\n // Similar to 194, this is a conformance issue which indicates that the given device has no app that can handle our launch request.\n if (results.status === 4) {\n throw new CommandError('APP_NOT_INSTALLED', results.stderr);\n }\n return results;\n}\nasync function openAppIdInternalAsync(\n device: Partial<DeviceContext>,\n options: {\n appId: string;\n }\n): Promise<SpawnResult> {\n try {\n return await simctlAsync(['launch', resolveId(device), options.appId]);\n } catch (error: any) {\n if ('status' in error) {\n return error;\n }\n throw error;\n }\n}\n\n// This will only boot in headless mode if the Simulator app is not running.\nexport async function bootAsync(device: DeviceContext): Promise<Device | null> {\n await bootDeviceAsync(device);\n return isDeviceBootedAsync(device);\n}\n\n/** Returns a list of devices whose current state is 'Booted' as an array. */\nexport async function getBootedSimulatorsAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flatMap((runtime) =>\n runtime.filter((device) => device.state === 'Booted')\n );\n}\n\n/** Returns the current device if its state is 'Booted'. */\nexport async function isDeviceBootedAsync(device: Partial<DeviceContext>): Promise<Device | null> {\n // Simulators can be booted even if the app isn't running :(\n const devices = await getBootedSimulatorsAsync();\n if (device.udid) {\n return devices.find((bootedDevice) => bootedDevice.udid === device.udid) ?? null;\n }\n\n return devices[0] ?? null;\n}\n\n/** Boot a device. */\nexport async function bootDeviceAsync(device: DeviceContext): Promise<void> {\n try {\n // Skip logging since this is likely to fail.\n await simctlAsync(['boot', device.udid]);\n } catch (error: any) {\n if (!error.stderr?.match(/Unable to boot device in current state: Booted/)) {\n throw error;\n }\n }\n}\n\n/** Install a binary file on the device. */\nexport async function installAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Local absolute file path to an app binary that is built and provisioned for iOS simulators. */\n filePath: string;\n }\n): Promise<any> {\n return simctlAsync(['install', resolveId(device), options.filePath]);\n}\n\n/** Uninstall an app from the provided device. */\nexport async function uninstallAsync(\n device: Partial<DeviceContext>,\n options: {\n /** Bundle identifier */\n appId: string;\n }\n): Promise<any> {\n return simctlAsync(['uninstall', resolveId(device), options.appId]);\n}\n\nfunction parseSimControlJSONResults(input: string): any {\n try {\n return JSON.parse(input);\n } catch (error: any) {\n // Nov 15, 2020: Observed this can happen when opening the simulator and the simulator prompts the user to update the xcode command line tools.\n // Unexpected token I in JSON at position 0\n if (error.message.includes('Unexpected token')) {\n Log.error(`Apple's simctl returned malformed JSON:\\n${input}`);\n }\n throw error;\n }\n}\n\n/** Get all runtime devices given a certain type. */\nasync function getRuntimesAsync(\n type: 'devices' | 'devicetypes' | 'runtimes' | 'pairs',\n query?: string | 'available'\n): Promise<SimulatorDeviceList> {\n const result = await simctlAsync(['list', type, '--json', query]);\n const info = parseSimControlJSONResults(result.stdout) as SimulatorDeviceList;\n\n for (const runtime of Object.keys(info.devices)) {\n // Given a string like 'com.apple.CoreSimulator.SimRuntime.tvOS-13-4'\n const runtimeSuffix = runtime.split('com.apple.CoreSimulator.SimRuntime.').pop()!;\n // Create an array [tvOS, 13, 4]\n const [osType, ...osVersionComponents] = runtimeSuffix.split('-');\n // Join the end components [13, 4] -> '13.4'\n const osVersion = osVersionComponents.join('.');\n const sims = info.devices[runtime];\n for (const device of sims) {\n device.runtime = runtime;\n device.osVersion = osVersion;\n device.windowName = `${device.name} (${osVersion})`;\n device.osType = osType as OSType;\n }\n }\n return info;\n}\n\n/** Return a list of iOS simulators. */\nexport async function getDevicesAsync(): Promise<Device[]> {\n const simulatorDeviceInfo = await getRuntimesAsync('devices');\n return Object.values(simulatorDeviceInfo.devices).flat();\n}\n\n/** Run a `simctl` command. */\nexport async function simctlAsync(\n args: (string | undefined)[],\n options?: SpawnOptions\n): Promise<SpawnResult> {\n return xcrunAsync(['simctl', ...args], options);\n}\n\nfunction resolveId(device: Partial<DeviceContext>): string {\n return device.udid ?? 'booted';\n}\n"],"names":["isOSType","getContainerPathAsync","getInfoPlistValueAsync","openUrlAsync","openAppIdAsync","bootAsync","getBootedSimulatorsAsync","isDeviceBootedAsync","bootDeviceAsync","installAsync","uninstallAsync","getDevicesAsync","simctlAsync","Log","value","knownTypes","includes","warn","join","device","appId","stdout","resolveId","trim","error","stderr","match","key","containerPath","ensuredContainerPath","output","spawnAsync","stdio","options","url","udid","results","openAppIdInternalAsync","status","CommandError","simulatorDeviceInfo","getRuntimesAsync","Object","values","devices","flatMap","runtime","filter","state","find","bootedDevice","filePath","parseSimControlJSONResults","input","JSON","parse","message","type","query","result","info","keys","runtimeSuffix","split","pop","osType","osVersionComponents","osVersion","sims","windowName","name","flat","args","xcrunAsync"],"mappings":"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"}