@depup/expo__cli 55.0.23-depup.0 → 57.0.9-depup.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 (594) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -15
  3. package/build/bin/cli +4 -4
  4. package/build/bin/cli.map +1 -1
  5. package/build/src/api/endpoint.js +4 -4
  6. package/build/src/api/endpoint.js.map +1 -1
  7. package/build/src/api/getExpoSchema.js +3 -3
  8. package/build/src/api/getExpoSchema.js.map +1 -1
  9. package/build/src/api/graphql/client.js +26 -14
  10. package/build/src/api/graphql/client.js.map +1 -1
  11. package/build/src/api/graphql/mutations/TunnelMutation.js +31 -0
  12. package/build/src/api/graphql/mutations/TunnelMutation.js.map +1 -0
  13. package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
  14. package/build/src/api/rest/cache/ResponseCache.js +5 -5
  15. package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
  16. package/build/src/api/rest/client.js +35 -20
  17. package/build/src/api/rest/client.js.map +1 -1
  18. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
  19. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  20. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  21. package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
  22. package/build/src/api/updateDevelopmentSession.js +6 -5
  23. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  24. package/build/src/api/user/UserSettings.js +28 -15
  25. package/build/src/api/user/UserSettings.js.map +1 -1
  26. package/build/src/api/user/actions.js +10 -3
  27. package/build/src/api/user/actions.js.map +1 -1
  28. package/build/src/api/user/expoSsoLauncher.js +76 -24
  29. package/build/src/api/user/expoSsoLauncher.js.map +1 -1
  30. package/build/src/api/user/otp.js +4 -4
  31. package/build/src/api/user/otp.js.map +1 -1
  32. package/build/src/api/user/user.js +19 -7
  33. package/build/src/api/user/user.js.map +1 -1
  34. package/build/src/config/configAsync.js +3 -3
  35. package/build/src/config/configAsync.js.map +1 -1
  36. package/build/src/config/index.js.map +1 -1
  37. package/build/src/customize/customizeAsync.js.map +1 -1
  38. package/build/src/customize/generate.js +7 -4
  39. package/build/src/customize/generate.js.map +1 -1
  40. package/build/src/customize/index.js.map +1 -1
  41. package/build/src/customize/templates.js +4 -6
  42. package/build/src/customize/templates.js.map +1 -1
  43. package/build/src/customize/typescript.js.map +1 -1
  44. package/build/src/events/index.js +19 -15
  45. package/build/src/events/index.js.map +1 -1
  46. package/build/src/events/stream.js +94 -24
  47. package/build/src/events/stream.js.map +1 -1
  48. package/build/src/expoUpdatesExports.js +4 -4
  49. package/build/src/expoUpdatesExports.js.map +1 -1
  50. package/build/src/export/createMetadataJson.js +2 -1
  51. package/build/src/export/createMetadataJson.js.map +1 -1
  52. package/build/src/export/embed/exportEmbedAsync.js +45 -20
  53. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  54. package/build/src/export/embed/exportServer.js +1 -1
  55. package/build/src/export/embed/exportServer.js.map +1 -1
  56. package/build/src/export/embed/index.js.map +1 -1
  57. package/build/src/export/embed/resolveOptions.js +7 -6
  58. package/build/src/export/embed/resolveOptions.js.map +1 -1
  59. package/build/src/export/embed/xcodeCompilerLogger.js +7 -7
  60. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
  61. package/build/src/export/exportApp.js +32 -28
  62. package/build/src/export/exportApp.js.map +1 -1
  63. package/build/src/export/exportAssets.js +5 -5
  64. package/build/src/export/exportAssets.js.map +1 -1
  65. package/build/src/export/exportAsync.js.map +1 -1
  66. package/build/src/export/exportDomComponents.js +5 -5
  67. package/build/src/export/exportDomComponents.js.map +1 -1
  68. package/build/src/export/exportHermes.js +23 -13
  69. package/build/src/export/exportHermes.js.map +1 -1
  70. package/build/src/export/exportStaticAsync.js +30 -21
  71. package/build/src/export/exportStaticAsync.js.map +1 -1
  72. package/build/src/export/favicon.js +26 -34
  73. package/build/src/export/favicon.js.map +1 -1
  74. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  75. package/build/src/export/getResolvedLocales.js.map +1 -1
  76. package/build/src/export/html.js +3 -3
  77. package/build/src/export/html.js.map +1 -1
  78. package/build/src/export/index.js +2 -0
  79. package/build/src/export/index.js.map +1 -1
  80. package/build/src/export/metroAssetLocalPath.js +4 -4
  81. package/build/src/export/metroAssetLocalPath.js.map +1 -1
  82. package/build/src/export/persistMetroAssets.js +6 -6
  83. package/build/src/export/persistMetroAssets.js.map +1 -1
  84. package/build/src/export/publicFolder.js +16 -4
  85. package/build/src/export/publicFolder.js.map +1 -1
  86. package/build/src/export/resolveOptions.js +12 -13
  87. package/build/src/export/resolveOptions.js.map +1 -1
  88. package/build/src/export/saveAssets.js +3 -3
  89. package/build/src/export/saveAssets.js.map +1 -1
  90. package/build/src/export/static.js +6 -0
  91. package/build/src/export/static.js.map +1 -0
  92. package/build/src/export/web/exportWebAsync.js.map +1 -1
  93. package/build/src/export/web/index.js.map +1 -1
  94. package/build/src/export/writeContents.js.map +1 -1
  95. package/build/src/install/checkPackages.js +1 -28
  96. package/build/src/install/checkPackages.js.map +1 -1
  97. package/build/src/install/fixPackages.js.map +1 -1
  98. package/build/src/install/index.js.map +1 -1
  99. package/build/src/install/installAsync.js +3 -3
  100. package/build/src/install/installAsync.js.map +1 -1
  101. package/build/src/install/installExpoPackage.js.map +1 -1
  102. package/build/src/install/resolveOptions.js.map +1 -1
  103. package/build/src/install/utils/autoAddConfigPlugins.js +3 -3
  104. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  105. package/build/src/install/utils/checkPackagesCompatibility.js +32 -16
  106. package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
  107. package/build/src/lint/ESlintPrerequisite.js.map +1 -1
  108. package/build/src/log.js +32 -14
  109. package/build/src/log.js.map +1 -1
  110. package/build/src/login/index.js +25 -5
  111. package/build/src/login/index.js.map +1 -1
  112. package/build/src/logout/index.js.map +1 -1
  113. package/build/src/prebuild/clearNativeFolder.js +49 -14
  114. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  115. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  116. package/build/src/prebuild/copyTemplateFiles.js +3 -3
  117. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  118. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  119. package/build/src/prebuild/index.js +3 -2
  120. package/build/src/prebuild/index.js.map +1 -1
  121. package/build/src/prebuild/prebuildAsync.js +31 -6
  122. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  123. package/build/src/prebuild/renameTemplateAppName.js +8 -5
  124. package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
  125. package/build/src/prebuild/resolveOptions.js +7 -7
  126. package/build/src/prebuild/resolveOptions.js.map +1 -1
  127. package/build/src/prebuild/resolveTemplate.js +10 -5
  128. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  129. package/build/src/prebuild/updateFromTemplate.js +3 -3
  130. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  131. package/build/src/prebuild/updatePackageJson.js +7 -7
  132. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  133. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  134. package/build/src/register/index.js.map +1 -1
  135. package/build/src/run/android/index.js.map +1 -1
  136. package/build/src/run/android/resolveGradlePropsAsync.js +3 -4
  137. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
  138. package/build/src/run/android/resolveInstallApkName.js +48 -1
  139. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  140. package/build/src/run/android/resolveLaunchProps.js +4 -1
  141. package/build/src/run/android/resolveLaunchProps.js.map +1 -1
  142. package/build/src/run/android/resolveOptions.js.map +1 -1
  143. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  144. package/build/src/run/ensureNativeProject.js.map +1 -1
  145. package/build/src/run/hints.js +4 -4
  146. package/build/src/run/hints.js.map +1 -1
  147. package/build/src/run/index.js.map +1 -1
  148. package/build/src/run/ios/XcodeBuild.js +163 -23
  149. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  150. package/build/src/run/ios/appleDevice/AppleDevice.js +6 -5
  151. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  152. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  153. package/build/src/run/ios/appleDevice/client/AFCClient.js +10 -16
  154. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  155. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  156. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  157. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +2 -1
  158. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  159. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  160. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  161. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  162. package/build/src/run/ios/appleDevice/client/ServiceClient.js +3 -3
  163. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  164. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  165. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +3 -3
  166. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  167. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +16 -13
  168. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  169. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +6 -6
  170. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  171. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +5 -5
  172. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  173. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +7 -7
  174. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  175. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +5 -5
  176. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
  177. package/build/src/run/ios/codeSigning/Security.js +8 -8
  178. package/build/src/run/ios/codeSigning/Security.js.map +1 -1
  179. package/build/src/run/ios/codeSigning/configureCodeSigning.js +5 -3
  180. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  181. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +7 -5
  182. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  183. package/build/src/run/ios/codeSigning/settings.js +3 -3
  184. package/build/src/run/ios/codeSigning/settings.js.map +1 -1
  185. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +4 -4
  186. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  187. package/build/src/run/ios/index.js +8 -1
  188. package/build/src/run/ios/index.js.map +1 -1
  189. package/build/src/run/ios/launchApp.js +3 -3
  190. package/build/src/run/ios/launchApp.js.map +1 -1
  191. package/build/src/run/ios/options/appleDestinations.js.map +1 -1
  192. package/build/src/run/ios/options/promptDevice.js +3 -3
  193. package/build/src/run/ios/options/promptDevice.js.map +1 -1
  194. package/build/src/run/ios/options/resolveDevice.js +8 -3
  195. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  196. package/build/src/run/ios/options/resolveNativeScheme.js +4 -4
  197. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  198. package/build/src/run/ios/options/resolveOptions.js +9 -4
  199. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  200. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
  201. package/build/src/run/ios/runIosAsync.js +39 -0
  202. package/build/src/run/ios/runIosAsync.js.map +1 -1
  203. package/build/src/run/ios/validateExternalBinary.js.map +1 -1
  204. package/build/src/run/startBundler.js +4 -0
  205. package/build/src/run/startBundler.js.map +1 -1
  206. package/build/src/serve/index.js +4 -1
  207. package/build/src/serve/index.js.map +1 -1
  208. package/build/src/serve/serveAsync.js +23 -11
  209. package/build/src/serve/serveAsync.js.map +1 -1
  210. package/build/src/serve/static.js +69 -0
  211. package/build/src/serve/static.js.map +1 -0
  212. package/build/src/start/checkDependenciesOnStart.js +131 -0
  213. package/build/src/start/checkDependenciesOnStart.js.map +1 -0
  214. package/build/src/start/detectDevClient.js +3 -3
  215. package/build/src/start/detectDevClient.js.map +1 -1
  216. package/build/src/start/doctor/Prerequisite.js +4 -4
  217. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  218. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +53 -91
  219. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  220. package/build/src/start/doctor/apple/XcodePrerequisite.js +3 -3
  221. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  222. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +3 -3
  223. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  224. package/build/src/start/doctor/dependencies/getMissingPackages.js +5 -5
  225. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  226. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -5
  227. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  228. package/build/src/start/doctor/dependencies/reactNativeTv.js +149 -0
  229. package/build/src/start/doctor/dependencies/reactNativeTv.js.map +1 -0
  230. package/build/src/start/doctor/dependencies/resolvePackages.js +4 -4
  231. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
  232. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +33 -8
  233. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  234. package/build/src/start/doctor/ngrok/ExternalModule.js +3 -3
  235. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  236. package/build/src/start/doctor/ngrok/NgrokResolver.js +3 -3
  237. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
  238. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  239. package/build/src/start/doctor/typescript/updateTSConfig.js +3 -3
  240. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  241. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +5 -12
  242. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  243. package/build/src/start/index.js +2 -0
  244. package/build/src/start/index.js.map +1 -1
  245. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  246. package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -1
  247. package/build/src/start/interface/commandsTable.js +6 -6
  248. package/build/src/start/interface/commandsTable.js.map +1 -1
  249. package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -1
  250. package/build/src/start/interface/interactiveActions.js +49 -6
  251. package/build/src/start/interface/interactiveActions.js.map +1 -1
  252. package/build/src/start/interface/startInterface.js +13 -4
  253. package/build/src/start/interface/startInterface.js.map +1 -1
  254. package/build/src/start/platforms/AppIdResolver.js +4 -0
  255. package/build/src/start/platforms/AppIdResolver.js.map +1 -1
  256. package/build/src/start/platforms/DeviceManager.js.map +1 -1
  257. package/build/src/start/platforms/ExpoGoInstaller.js +13 -4
  258. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  259. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  260. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
  261. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  262. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  263. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  264. package/build/src/start/platforms/android/adb.js +36 -34
  265. package/build/src/start/platforms/android/adb.js.map +1 -1
  266. package/build/src/start/platforms/android/adbReverse.js +4 -4
  267. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  268. package/build/src/start/platforms/android/emulator.js +5 -5
  269. package/build/src/start/platforms/android/emulator.js.map +1 -1
  270. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  271. package/build/src/start/platforms/android/gradle.js +5 -5
  272. package/build/src/start/platforms/android/gradle.js.map +1 -1
  273. package/build/src/start/platforms/android/promptAndroidDevice.js +3 -3
  274. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  275. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
  276. package/build/src/start/platforms/ios/AppleDeviceManager.js +20 -6
  277. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  278. package/build/src/start/platforms/ios/ApplePlatformManager.js +11 -0
  279. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  280. package/build/src/start/platforms/ios/devicectl.js +7 -7
  281. package/build/src/start/platforms/ios/devicectl.js.map +1 -1
  282. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +26 -11
  283. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  284. package/build/src/start/platforms/ios/getBestSimulator.js +5 -5
  285. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  286. package/build/src/start/platforms/ios/promptAppleDevice.js +5 -4
  287. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  288. package/build/src/start/platforms/ios/simctl.js +25 -19
  289. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  290. package/build/src/start/platforms/ios/simctlLogging.js +3 -3
  291. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  292. package/build/src/start/platforms/ios/xcrun.js +3 -3
  293. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  294. package/build/src/start/project/devices.js +6 -6
  295. package/build/src/start/project/devices.js.map +1 -1
  296. package/build/src/start/project/dotExpo.js +4 -3
  297. package/build/src/start/project/dotExpo.js.map +1 -1
  298. package/build/src/start/resolveOptions.js +7 -7
  299. package/build/src/start/resolveOptions.js.map +1 -1
  300. package/build/src/start/server/AsyncNgrok.js +1 -1
  301. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  302. package/build/src/start/server/AsyncWsTunnel.js +120 -35
  303. package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
  304. package/build/src/start/server/Bonjour.js +8 -3
  305. package/build/src/start/server/Bonjour.js.map +1 -1
  306. package/build/src/start/server/BundlerDevServer.js +23 -9
  307. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  308. package/build/src/start/server/DevServerManager.js.map +1 -1
  309. package/build/src/start/server/DevToolsPlugin.js +63 -3
  310. package/build/src/start/server/DevToolsPlugin.js.map +1 -1
  311. package/build/src/start/server/DevToolsPlugin.schema.js +8 -3
  312. package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -1
  313. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +58 -23
  314. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -1
  315. package/build/src/start/server/DevToolsPluginCliExtensionResults.js +29 -0
  316. package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -1
  317. package/build/src/start/server/DevToolsPluginManager.js +20 -6
  318. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  319. package/build/src/start/server/DevToolsPluginServerHelpers.js +83 -0
  320. package/build/src/start/server/DevToolsPluginServerHelpers.js.map +1 -0
  321. package/build/src/start/server/DevelopmentSession.js +41 -24
  322. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  323. package/build/src/start/server/MCP.js +10 -3
  324. package/build/src/start/server/MCP.js.map +1 -1
  325. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +15 -5
  326. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -1
  327. package/build/src/start/server/UrlCreator.js +14 -1
  328. package/build/src/start/server/UrlCreator.js.map +1 -1
  329. package/build/src/start/server/createMCPDevToolsExtensionSchema.js +18 -4
  330. package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -1
  331. package/build/src/start/server/getStaticRenderFunctions.js +13 -24
  332. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  333. package/build/src/start/server/metro/MetroBundlerDevServer.js +239 -108
  334. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  335. package/build/src/start/server/metro/MetroTerminalReporter.js +67 -16
  336. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  337. package/build/src/start/server/metro/TerminalReporter.js +22 -4
  338. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  339. package/build/src/start/server/metro/createExpoAutolinkingResolver.js +25 -12
  340. package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
  341. package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
  342. package/build/src/start/server/metro/createFileMap-fork.js +196 -0
  343. package/build/src/start/server/metro/createFileMap-fork.js.map +1 -0
  344. package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -22
  345. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  346. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  347. package/build/src/start/server/metro/createTypescriptResolver.js +410 -0
  348. package/build/src/start/server/metro/createTypescriptResolver.js.map +1 -0
  349. package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
  350. package/build/src/start/server/metro/debugging/attachAtlas.js +3 -3
  351. package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
  352. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +6 -5
  353. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  354. package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
  355. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +20 -4
  356. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
  357. package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
  358. package/build/src/start/server/metro/dev-server/compression.js.map +1 -1
  359. package/build/src/start/server/metro/dev-server/createMessageSocket.js +13 -2
  360. package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
  361. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +9 -2
  362. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
  363. package/build/src/start/server/metro/dev-server/utils/socketMessages.js +3 -3
  364. package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
  365. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -1
  366. package/build/src/start/server/metro/externals.js +4 -4
  367. package/build/src/start/server/metro/externals.js.map +1 -1
  368. package/build/src/start/server/metro/fetchRouterManifest.js +3 -3
  369. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  370. package/build/src/start/server/metro/getCssModulesFromBundler.js +3 -3
  371. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  372. package/build/src/start/server/metro/instantiateMetro.js +141 -57
  373. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  374. package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
  375. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +4 -4
  376. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
  377. package/build/src/start/server/metro/log-box/formatProjectFilePath.js +3 -3
  378. package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
  379. package/build/src/start/server/metro/metroErrorInterface.js +16 -13
  380. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  381. package/build/src/start/server/metro/metroErrors.js +3 -3
  382. package/build/src/start/server/metro/metroErrors.js.map +1 -1
  383. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +48 -16
  384. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
  385. package/build/src/start/server/metro/resolveLoader.js +3 -3
  386. package/build/src/start/server/metro/resolveLoader.js.map +1 -1
  387. package/build/src/start/server/metro/router.js +23 -14
  388. package/build/src/start/server/metro/router.js.map +1 -1
  389. package/build/src/start/server/metro/runServer-fork.js +13 -10
  390. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  391. package/build/src/start/server/metro/serializeHtml.js +29 -13
  392. package/build/src/start/server/metro/serializeHtml.js.map +1 -1
  393. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +36 -34
  394. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  395. package/build/src/start/server/metro/withMetroErrorReportingResolver.js +53 -30
  396. package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
  397. package/build/src/start/server/metro/withMetroMultiPlatform.js +187 -126
  398. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  399. package/build/src/start/server/metro/withMetroResolvers.js +4 -4
  400. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  401. package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
  402. package/build/src/start/server/middleware/CorsMiddleware.js +3 -3
  403. package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
  404. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  405. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +60 -9
  406. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
  407. package/build/src/start/server/middleware/DomComponentsMiddleware.js +16 -12
  408. package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
  409. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +6 -4
  410. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  411. package/build/src/start/server/middleware/ExpoMiddleware.js +3 -3
  412. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  413. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  414. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
  415. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +13 -8
  416. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  417. package/build/src/start/server/middleware/ManifestMiddleware.js +15 -6
  418. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  419. package/build/src/start/server/middleware/OpenMiddleware.js +150 -0
  420. package/build/src/start/server/middleware/OpenMiddleware.js.map +1 -0
  421. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +13 -4
  422. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  423. package/build/src/start/server/middleware/ServeStaticMiddleware.js +2 -9
  424. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  425. package/build/src/start/server/middleware/domPolyfills.js +60 -0
  426. package/build/src/start/server/middleware/domPolyfills.js.map +1 -0
  427. package/build/src/start/server/middleware/inspector/JsInspector.js +6 -31
  428. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  429. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +14 -24
  430. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
  431. package/build/src/start/server/middleware/inspector/middlwareMutations.js +3 -3
  432. package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
  433. package/build/src/start/server/middleware/metroOptions.js +15 -14
  434. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  435. package/build/src/start/server/middleware/mutations.js +3 -3
  436. package/build/src/start/server/middleware/mutations.js.map +1 -1
  437. package/build/src/start/server/middleware/openHandlers.js +157 -0
  438. package/build/src/start/server/middleware/openHandlers.js.map +1 -0
  439. package/build/src/start/server/middleware/resolveAssets.js +4 -4
  440. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  441. package/build/src/start/server/middleware/resolvePlatform.js +9 -7
  442. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  443. package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
  444. package/build/src/start/server/openPlatforms.js.map +1 -1
  445. package/build/src/start/server/platformBundlers.js +3 -1
  446. package/build/src/start/server/platformBundlers.js.map +1 -1
  447. package/build/src/start/server/serverLogLikeMetro.js +13 -36
  448. package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
  449. package/build/src/start/server/type-generation/expo-env.js +3 -3
  450. package/build/src/start/server/type-generation/expo-env.js.map +1 -1
  451. package/build/src/start/server/type-generation/routes.js +14 -55
  452. package/build/src/start/server/type-generation/routes.js.map +1 -1
  453. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  454. package/build/src/start/server/type-generation/tsconfig.js +5 -5
  455. package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
  456. package/build/src/start/server/webTemplate.js +12 -10
  457. package/build/src/start/server/webTemplate.js.map +1 -1
  458. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +3 -3
  459. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  460. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
  461. package/build/src/start/server/webpack/resolveFromProject.js +4 -4
  462. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
  463. package/build/src/start/server/webpack/tls.js +3 -3
  464. package/build/src/start/server/webpack/tls.js.map +1 -1
  465. package/build/src/start/startAsync.js +21 -11
  466. package/build/src/start/startAsync.js.map +1 -1
  467. package/build/src/types.d.ts +2 -0
  468. package/build/src/utils/FileNotifier.js +1 -1
  469. package/build/src/utils/FileNotifier.js.map +1 -1
  470. package/build/src/utils/args.js +5 -5
  471. package/build/src/utils/args.js.map +1 -1
  472. package/build/src/utils/array.js +8 -8
  473. package/build/src/utils/array.js.map +1 -1
  474. package/build/src/utils/build-cache-providers/helpers.js +4 -4
  475. package/build/src/utils/build-cache-providers/helpers.js.map +1 -1
  476. package/build/src/utils/build-cache-providers/index.js +5 -5
  477. package/build/src/utils/build-cache-providers/index.js.map +1 -1
  478. package/build/src/utils/cocoapods.js +5 -5
  479. package/build/src/utils/cocoapods.js.map +1 -1
  480. package/build/src/utils/codesigning.js +12 -6
  481. package/build/src/utils/codesigning.js.map +1 -1
  482. package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
  483. package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
  484. package/build/src/utils/createTempPath.js +3 -3
  485. package/build/src/utils/createTempPath.js.map +1 -1
  486. package/build/src/utils/delay.js +4 -4
  487. package/build/src/utils/delay.js.map +1 -1
  488. package/build/src/utils/dir.js +21 -11
  489. package/build/src/utils/dir.js.map +1 -1
  490. package/build/src/utils/downloadAppAsync.js.map +1 -1
  491. package/build/src/utils/downloadExpoGoAsync.js +4 -4
  492. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  493. package/build/src/utils/editor.js +4 -4
  494. package/build/src/utils/editor.js.map +1 -1
  495. package/build/src/utils/env.js +39 -13
  496. package/build/src/utils/env.js.map +1 -1
  497. package/build/src/utils/errors.js +6 -6
  498. package/build/src/utils/errors.js.map +1 -1
  499. package/build/src/utils/exit.js +15 -19
  500. package/build/src/utils/exit.js.map +1 -1
  501. package/build/src/utils/expoUpdatesCli.js +5 -5
  502. package/build/src/utils/expoUpdatesCli.js.map +1 -1
  503. package/build/src/utils/fetch.js +4 -4
  504. package/build/src/utils/fetch.js.map +1 -1
  505. package/build/src/utils/findUp.js +3 -3
  506. package/build/src/utils/findUp.js.map +1 -1
  507. package/build/src/utils/fn.js +3 -3
  508. package/build/src/utils/fn.js.map +1 -1
  509. package/build/src/utils/freeport.js +3 -3
  510. package/build/src/utils/freeport.js.map +1 -1
  511. package/build/src/utils/getOrPromptApplicationId.js +3 -5
  512. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  513. package/build/src/utils/getRunningProcess.js +5 -5
  514. package/build/src/utils/getRunningProcess.js.map +1 -1
  515. package/build/src/utils/git.js +3 -3
  516. package/build/src/utils/git.js.map +1 -1
  517. package/build/src/utils/glob.js +3 -3
  518. package/build/src/utils/glob.js.map +1 -1
  519. package/build/src/utils/ip.js +4 -4
  520. package/build/src/utils/ip.js.map +1 -1
  521. package/build/src/utils/link.js +3 -3
  522. package/build/src/utils/link.js.map +1 -1
  523. package/build/src/utils/mergeGitIgnorePaths.js +10 -10
  524. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  525. package/build/src/utils/modifyConfigAsync.js +3 -3
  526. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  527. package/build/src/utils/net.js +23 -4
  528. package/build/src/utils/net.js.map +1 -1
  529. package/build/src/utils/nodeEnv.js +6 -6
  530. package/build/src/utils/nodeEnv.js.map +1 -1
  531. package/build/src/utils/npm.js +10 -9
  532. package/build/src/utils/npm.js.map +1 -1
  533. package/build/src/utils/obj.js +4 -4
  534. package/build/src/utils/obj.js.map +1 -1
  535. package/build/src/utils/open.js +240 -11
  536. package/build/src/utils/open.js.map +1 -1
  537. package/build/src/utils/ora.js +4 -4
  538. package/build/src/utils/ora.js.map +1 -1
  539. package/build/src/utils/plist.js +5 -4
  540. package/build/src/utils/plist.js.map +1 -1
  541. package/build/src/utils/port.js +12 -5
  542. package/build/src/utils/port.js.map +1 -1
  543. package/build/src/utils/progress.js +4 -4
  544. package/build/src/utils/progress.js.map +1 -1
  545. package/build/src/utils/prompts.js +11 -11
  546. package/build/src/utils/prompts.js.map +1 -1
  547. package/build/src/utils/qr.js +5 -4
  548. package/build/src/utils/qr.js.map +1 -1
  549. package/build/src/utils/resolveArgs.js +10 -9
  550. package/build/src/utils/resolveArgs.js.map +1 -1
  551. package/build/src/utils/scheme.js +4 -4
  552. package/build/src/utils/scheme.js.map +1 -1
  553. package/build/src/utils/strings.js.map +1 -1
  554. package/build/src/utils/tar.js +8 -7
  555. package/build/src/utils/tar.js.map +1 -1
  556. package/build/src/utils/telemetry/Telemetry.js +5 -0
  557. package/build/src/utils/telemetry/Telemetry.js.map +1 -1
  558. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  559. package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
  560. package/build/src/utils/telemetry/clients/flushFetchDetached.js +5 -1
  561. package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
  562. package/build/src/utils/telemetry/index.js +4 -4
  563. package/build/src/utils/telemetry/index.js.map +1 -1
  564. package/build/src/utils/telemetry/utils/agent.js +42 -0
  565. package/build/src/utils/telemetry/utils/agent.js.map +1 -0
  566. package/build/src/utils/telemetry/utils/constants.js +3 -3
  567. package/build/src/utils/telemetry/utils/constants.js.map +1 -1
  568. package/build/src/utils/telemetry/utils/context.js +3 -2
  569. package/build/src/utils/telemetry/utils/context.js.map +1 -1
  570. package/build/src/utils/url.js +5 -17
  571. package/build/src/utils/url.js.map +1 -1
  572. package/build/src/utils/validateApplicationId.js +12 -12
  573. package/build/src/utils/validateApplicationId.js.map +1 -1
  574. package/build/src/utils/variadic.js +4 -4
  575. package/build/src/utils/variadic.js.map +1 -1
  576. package/build/src/whoami/index.js.map +1 -1
  577. package/changes.json +18 -26
  578. package/main.js +3 -0
  579. package/package.json +88 -80
  580. package/static/loading-page/index.html +45 -3
  581. package/static/template/+html.tsx +14 -5
  582. package/add-module.js +0 -8
  583. package/build/src/start/server/middleware/inspector/CdpClient.js +0 -81
  584. package/build/src/start/server/middleware/inspector/CdpClient.js.map +0 -1
  585. package/build/src/utils/resolveWatchFolders.js +0 -67
  586. package/build/src/utils/resolveWatchFolders.js.map +0 -1
  587. package/build/src/utils/tsconfig/evaluateTsConfig.js +0 -87
  588. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +0 -1
  589. package/build/src/utils/tsconfig/loadTsConfigPaths.js +0 -84
  590. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +0 -1
  591. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +0 -94
  592. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +0 -1
  593. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +0 -62
  594. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +0 -1
@@ -5,20 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- forceRemovalTSConfig: function() {
12
+ get forceRemovalTSConfig () {
13
13
  return forceRemovalTSConfig;
14
14
  },
15
- forceUpdateTSConfig: function() {
15
+ get forceUpdateTSConfig () {
16
16
  return forceUpdateTSConfig;
17
17
  },
18
- getTSConfigRemoveUpdates: function() {
18
+ get getTSConfigRemoveUpdates () {
19
19
  return getTSConfigRemoveUpdates;
20
20
  },
21
- getTSConfigUpdates: function() {
21
+ get getTSConfigUpdates () {
22
22
  return getTSConfigUpdates;
23
23
  }
24
24
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/type-generation/tsconfig.ts"],"sourcesContent":["import JsonFile, { JSONObject } from '@expo/json-file';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { Log } from '../../../log';\n\n/**\n * Force updates a project tsconfig with Expo values.\n */\nexport async function forceUpdateTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (!tsConfig.include) {\n tsConfig.include = ['**/*.ts', '**/*.tsx', '.expo/types/**/*.ts', 'expo-env.d.ts'];\n updates.add('include');\n } else if (Array.isArray(tsConfig.include)) {\n if (!tsConfig.include.includes('.expo/types/**/*.ts')) {\n tsConfig.include = [...tsConfig.include, '.expo/types/**/*.ts'];\n updates.add('include');\n }\n\n if (!tsConfig.include.includes('expo-env.d.ts')) {\n tsConfig.include = [...tsConfig.include, 'expo-env.d.ts'];\n updates.add('include');\n }\n }\n\n return { tsConfig, updates };\n}\n\nexport async function forceRemovalTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigRemoveUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigRemoveUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (Array.isArray(tsConfig.include)) {\n const filtered = (tsConfig.include as string[]).filter(\n (i) => i !== 'expo-env.d.ts' && i !== '.expo/types/**/*.ts'\n );\n\n if (filtered.length !== tsConfig.include.length) {\n updates.add('include');\n }\n\n tsConfig.include = filtered;\n }\n\n return { tsConfig, updates };\n}\n\nasync function writeUpdates(tsConfigPath: string, tsConfig: JSONObject, updates: Set<string>) {\n if (updates.size) {\n await JsonFile.writeAsync(tsConfigPath, tsConfig);\n for (const update of updates) {\n Log.log(\n chalk`{bold TypeScript}: The {cyan tsconfig.json#${update}} property has been updated`\n );\n }\n }\n}\n"],"names":["forceRemovalTSConfig","forceUpdateTSConfig","getTSConfigRemoveUpdates","getTSConfigUpdates","projectRoot","tsConfigPath","path","join","tsConfig","updates","JsonFile","read","json5","writeUpdates","Set","include","add","Array","isArray","includes","filtered","filter","i","length","size","writeAsync","update","Log","log","chalk"],"mappings":";;;;;;;;;;;IA0CsBA,oBAAoB;eAApBA;;IAjCAC,mBAAmB;eAAnBA;;IA6CNC,wBAAwB;eAAxBA;;IAjCAC,kBAAkB;eAAlBA;;;;gEArBqB;;;;;;;gEACnB;;;;;;;gEACD;;;;;;qBAEG;;;;;;AAKb,eAAeF,oBAAoBG,WAAmB;IAC3D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGN,mBAC5BO,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASN,mBAAmBK,QAAoB;IACrD,MAAMC,UAAU,IAAIK;IAEpB,IAAI,CAACN,SAASO,OAAO,EAAE;QACrBP,SAASO,OAAO,GAAG;YAAC;YAAW;YAAY;YAAuB;SAAgB;QAClFN,QAAQO,GAAG,CAAC;IACd,OAAO,IAAIC,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QAC1C,IAAI,CAACP,SAASO,OAAO,CAACI,QAAQ,CAAC,wBAAwB;YACrDX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAsB;YAC/DN,QAAQO,GAAG,CAAC;QACd;QAEA,IAAI,CAACR,SAASO,OAAO,CAACI,QAAQ,CAAC,kBAAkB;YAC/CX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAgB;YACzDN,QAAQO,GAAG,CAAC;QACd;IACF;IAEA,OAAO;QAAER;QAAUC;IAAQ;AAC7B;AAEO,eAAeT,qBAAqBI,WAAmB;IAC5D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGP,yBAC5BQ,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASP,yBAAyBM,QAAoB;IAC3D,MAAMC,UAAU,IAAIK;IAEpB,IAAIG,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QACnC,MAAMK,WAAW,AAACZ,SAASO,OAAO,CAAcM,MAAM,CACpD,CAACC,IAAMA,MAAM,mBAAmBA,MAAM;QAGxC,IAAIF,SAASG,MAAM,KAAKf,SAASO,OAAO,CAACQ,MAAM,EAAE;YAC/Cd,QAAQO,GAAG,CAAC;QACd;QAEAR,SAASO,OAAO,GAAGK;IACrB;IAEA,OAAO;QAAEZ;QAAUC;IAAQ;AAC7B;AAEA,eAAeI,aAAaR,YAAoB,EAAEG,QAAoB,EAAEC,OAAoB;IAC1F,IAAIA,QAAQe,IAAI,EAAE;QAChB,MAAMd,mBAAQ,CAACe,UAAU,CAACpB,cAAcG;QACxC,KAAK,MAAMkB,UAAUjB,QAAS;YAC5BkB,QAAG,CAACC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,2CAA2C,EAAEH,OAAO,2BAA2B,CAAC;QAE1F;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../../src/start/server/type-generation/tsconfig.ts"],"sourcesContent":["import type { JSONObject } from '@expo/json-file';\nimport JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { Log } from '../../../log';\n\n/**\n * Force updates a project tsconfig with Expo values.\n */\nexport async function forceUpdateTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (!tsConfig.include) {\n tsConfig.include = ['**/*.ts', '**/*.tsx', '.expo/types/**/*.ts', 'expo-env.d.ts'];\n updates.add('include');\n } else if (Array.isArray(tsConfig.include)) {\n if (!tsConfig.include.includes('.expo/types/**/*.ts')) {\n tsConfig.include = [...tsConfig.include, '.expo/types/**/*.ts'];\n updates.add('include');\n }\n\n if (!tsConfig.include.includes('expo-env.d.ts')) {\n tsConfig.include = [...tsConfig.include, 'expo-env.d.ts'];\n updates.add('include');\n }\n }\n\n return { tsConfig, updates };\n}\n\nexport async function forceRemovalTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigRemoveUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigRemoveUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (Array.isArray(tsConfig.include)) {\n const filtered = (tsConfig.include as string[]).filter(\n (i) => i !== 'expo-env.d.ts' && i !== '.expo/types/**/*.ts'\n );\n\n if (filtered.length !== tsConfig.include.length) {\n updates.add('include');\n }\n\n tsConfig.include = filtered;\n }\n\n return { tsConfig, updates };\n}\n\nasync function writeUpdates(tsConfigPath: string, tsConfig: JSONObject, updates: Set<string>) {\n if (updates.size) {\n await JsonFile.writeAsync(tsConfigPath, tsConfig);\n for (const update of updates) {\n Log.log(\n chalk`{bold TypeScript}: The {cyan tsconfig.json#${update}} property has been updated`\n );\n }\n }\n}\n"],"names":["forceRemovalTSConfig","forceUpdateTSConfig","getTSConfigRemoveUpdates","getTSConfigUpdates","projectRoot","tsConfigPath","path","join","tsConfig","updates","JsonFile","read","json5","writeUpdates","Set","include","add","Array","isArray","includes","filtered","filter","i","length","size","writeAsync","update","Log","log","chalk"],"mappings":";;;;;;;;;;;QA2CsBA;eAAAA;;QAjCAC;eAAAA;;QA6CNC;eAAAA;;QAjCAC;eAAAA;;;;gEArBK;;;;;;;gEACH;;;;;;;gEACD;;;;;;qBAEG;;;;;;AAKb,eAAeF,oBAAoBG,WAAmB;IAC3D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGN,mBAC5BO,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASN,mBAAmBK,QAAoB;IACrD,MAAMC,UAAU,IAAIK;IAEpB,IAAI,CAACN,SAASO,OAAO,EAAE;QACrBP,SAASO,OAAO,GAAG;YAAC;YAAW;YAAY;YAAuB;SAAgB;QAClFN,QAAQO,GAAG,CAAC;IACd,OAAO,IAAIC,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QAC1C,IAAI,CAACP,SAASO,OAAO,CAACI,QAAQ,CAAC,wBAAwB;YACrDX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAsB;YAC/DN,QAAQO,GAAG,CAAC;QACd;QAEA,IAAI,CAACR,SAASO,OAAO,CAACI,QAAQ,CAAC,kBAAkB;YAC/CX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAgB;YACzDN,QAAQO,GAAG,CAAC;QACd;IACF;IAEA,OAAO;QAAER;QAAUC;IAAQ;AAC7B;AAEO,eAAeT,qBAAqBI,WAAmB;IAC5D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGP,yBAC5BQ,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASP,yBAAyBM,QAAoB;IAC3D,MAAMC,UAAU,IAAIK;IAEpB,IAAIG,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QACnC,MAAMK,WAAW,AAACZ,SAASO,OAAO,CAAcM,MAAM,CACpD,CAACC,IAAMA,MAAM,mBAAmBA,MAAM;QAGxC,IAAIF,SAASG,MAAM,KAAKf,SAASO,OAAO,CAACQ,MAAM,EAAE;YAC/Cd,QAAQO,GAAG,CAAC;QACd;QAEAR,SAASO,OAAO,GAAGK;IACrB;IAEA,OAAO;QAAEZ;QAAUC;IAAQ;AAC7B;AAEA,eAAeI,aAAaR,YAAoB,EAAEG,QAAoB,EAAEC,OAAoB;IAC1F,IAAIA,QAAQe,IAAI,EAAE;QAChB,MAAMd,mBAAQ,CAACe,UAAU,CAACpB,cAAcG;QACxC,KAAK,MAAMkB,UAAUjB,QAAS;YAC5BkB,QAAG,CAACC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,2CAA2C,EAAEH,OAAO,2BAA2B,CAAC;QAE1F;IACF;AACF"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- createTemplateHtmlAsync: function() {
12
+ get createTemplateHtmlAsync () {
13
13
  return createTemplateHtmlAsync;
14
14
  },
15
- createTemplateHtmlFromExpoConfigAsync: function() {
15
+ get createTemplateHtmlFromExpoConfigAsync () {
16
16
  return createTemplateHtmlFromExpoConfigAsync;
17
17
  }
18
18
  });
@@ -39,13 +39,13 @@ function _path() {
39
39
  }
40
40
  const _templates = require("../../customize/templates");
41
41
  const _html = require("../../export/html");
42
- const _env = require("../../utils/env");
42
+ const _publicFolder = require("../../export/publicFolder");
43
43
  function _interop_require_default(obj) {
44
44
  return obj && obj.__esModule ? obj : {
45
45
  default: obj
46
46
  };
47
47
  }
48
- async function createTemplateHtmlFromExpoConfigAsync(projectRoot, { scripts, cssLinks, exp = (0, _config().getConfig)(projectRoot, {
48
+ async function createTemplateHtmlFromExpoConfigAsync(projectRoot, { scripts, cssLinks, extraHead, exp = (0, _config().getConfig)(projectRoot, {
49
49
  skipSDKVersionRequirement: true
50
50
  }).exp }) {
51
51
  var _exp_web, _exp_web1, _exp_web2;
@@ -53,13 +53,14 @@ async function createTemplateHtmlFromExpoConfigAsync(projectRoot, { scripts, css
53
53
  langIsoCode: ((_exp_web = exp.web) == null ? void 0 : _exp_web.lang) ?? 'en',
54
54
  scripts,
55
55
  cssLinks,
56
+ extraHead,
56
57
  title: (0, _config().getNameFromConfig)(exp).webName ?? 'Expo App',
57
58
  description: (_exp_web1 = exp.web) == null ? void 0 : _exp_web1.description,
58
59
  themeColor: (_exp_web2 = exp.web) == null ? void 0 : _exp_web2.themeColor
59
60
  });
60
61
  }
61
- function getFileFromLocalPublicFolder(projectRoot, { publicFolder, filePath }) {
62
- const localFilePath = _path().default.resolve(projectRoot, publicFolder, filePath);
62
+ function getFileFromLocalPublicFolder(projectRoot, { filePath }) {
63
+ const localFilePath = _path().default.resolve((0, _publicFolder.getPublicFolderPath)(projectRoot), filePath);
63
64
  if (!_fs().default.existsSync(localFilePath)) {
64
65
  return null;
65
66
  }
@@ -67,8 +68,6 @@ function getFileFromLocalPublicFolder(projectRoot, { publicFolder, filePath }) {
67
68
  }
68
69
  /** Attempt to read the `index.html` from the local project before falling back on the template `index.html`. */ async function getTemplateIndexHtmlAsync(projectRoot) {
69
70
  let filePath = getFileFromLocalPublicFolder(projectRoot, {
70
- // TODO: Maybe use the app.json override.
71
- publicFolder: _env.env.EXPO_PUBLIC_FOLDER,
72
71
  filePath: 'index.html'
73
72
  });
74
73
  if (!filePath) {
@@ -76,7 +75,7 @@ function getFileFromLocalPublicFolder(projectRoot, { publicFolder, filePath }) {
76
75
  }
77
76
  return _fs().default.promises.readFile(filePath, 'utf8');
78
77
  }
79
- async function createTemplateHtmlAsync(projectRoot, { scripts, cssLinks, description, langIsoCode, title, themeColor }) {
78
+ async function createTemplateHtmlAsync(projectRoot, { scripts, cssLinks, extraHead, description, langIsoCode, title, themeColor }) {
80
79
  // Resolve the best possible index.html template file.
81
80
  let contents = await getTemplateIndexHtmlAsync(projectRoot);
82
81
  contents = contents.replace('%LANG_ISO_CODE%', langIsoCode);
@@ -102,6 +101,9 @@ async function createTemplateHtmlAsync(projectRoot, { scripts, cssLinks, descrip
102
101
  if (description) {
103
102
  contents = addMeta(contents, `name="description" content="${description}"`);
104
103
  }
104
+ if (extraHead) {
105
+ contents = contents.replace('</head>', `${extraHead}</head>`);
106
+ }
105
107
  return contents;
106
108
  }
107
109
  /** Add a `<meta />` tag to the `<head />` element. */ function addMeta(contents, meta) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/server/webTemplate.ts"],"sourcesContent":["import { ExpoConfig, getConfig, getNameFromConfig } from '@expo/config';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { TEMPLATES } from '../../customize/templates';\nimport { appendLinkToHtml, appendScriptsToHtml } from '../../export/html';\nimport { env } from '../../utils/env';\n\n/**\n * Create a static HTML for SPA styled websites.\n * This method attempts to reuse the same patterns as `@expo/webpack-config`.\n */\nexport async function createTemplateHtmlFromExpoConfigAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n }: {\n scripts: string[];\n cssLinks?: string[];\n exp?: ExpoConfig;\n }\n) {\n return createTemplateHtmlAsync(projectRoot, {\n langIsoCode: exp.web?.lang ?? 'en',\n scripts,\n cssLinks,\n title: getNameFromConfig(exp).webName ?? 'Expo App',\n description: exp.web?.description,\n themeColor: exp.web?.themeColor,\n });\n}\n\nfunction getFileFromLocalPublicFolder(\n projectRoot: string,\n { publicFolder, filePath }: { publicFolder: string; filePath: string }\n): string | null {\n const localFilePath = path.resolve(projectRoot, publicFolder, filePath);\n if (!fs.existsSync(localFilePath)) {\n return null;\n }\n return localFilePath;\n}\n\n/** Attempt to read the `index.html` from the local project before falling back on the template `index.html`. */\nasync function getTemplateIndexHtmlAsync(projectRoot: string): Promise<string> {\n let filePath = getFileFromLocalPublicFolder(projectRoot, {\n // TODO: Maybe use the app.json override.\n publicFolder: env.EXPO_PUBLIC_FOLDER,\n filePath: 'index.html',\n });\n if (!filePath) {\n filePath = TEMPLATES.find((value) => value.id === 'index.html')!.file(projectRoot);\n }\n return fs.promises.readFile(filePath, 'utf8');\n}\n\n/** Return an `index.html` string with template values added. */\nexport async function createTemplateHtmlAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n description,\n langIsoCode,\n title,\n themeColor,\n }: {\n scripts: string[];\n cssLinks?: string[];\n description?: string;\n langIsoCode: string;\n title: string;\n themeColor?: string;\n }\n): Promise<string> {\n // Resolve the best possible index.html template file.\n let contents = await getTemplateIndexHtmlAsync(projectRoot);\n\n contents = contents.replace('%LANG_ISO_CODE%', langIsoCode);\n contents = contents.replace('%WEB_TITLE%', title);\n\n contents = appendScriptsToHtml(contents, scripts);\n\n if (cssLinks) {\n contents = appendLinkToHtml(\n contents,\n cssLinks\n .map((href) => [\n // NOTE: We probably don't have to preload the CSS files for SPA-styled websites.\n {\n as: 'style',\n rel: 'preload',\n href,\n },\n {\n rel: 'stylesheet',\n href,\n },\n ])\n .flat()\n );\n }\n\n if (themeColor) {\n contents = addMeta(contents, `name=\"theme-color\" content=\"${themeColor}\"`);\n }\n\n if (description) {\n contents = addMeta(contents, `name=\"description\" content=\"${description}\"`);\n }\n\n return contents;\n}\n\n/** Add a `<meta />` tag to the `<head />` element. */\nfunction addMeta(contents: string, meta: string): string {\n return contents.replace('</head>', `<meta ${meta}>\\n</head>`);\n}\n"],"names":["createTemplateHtmlAsync","createTemplateHtmlFromExpoConfigAsync","projectRoot","scripts","cssLinks","exp","getConfig","skipSDKVersionRequirement","langIsoCode","web","lang","title","getNameFromConfig","webName","description","themeColor","getFileFromLocalPublicFolder","publicFolder","filePath","localFilePath","path","resolve","fs","existsSync","getTemplateIndexHtmlAsync","env","EXPO_PUBLIC_FOLDER","TEMPLATES","find","value","id","file","promises","readFile","contents","replace","appendScriptsToHtml","appendLinkToHtml","map","href","as","rel","flat","addMeta","meta"],"mappings":";;;;;;;;;;;IA2DsBA,uBAAuB;eAAvBA;;IA/CAC,qCAAqC;eAArCA;;;;yBAZmC;;;;;;;gEAC1C;;;;;;;gEACE;;;;;;2BAES;sBAC4B;qBAClC;;;;;;AAMb,eAAeA,sCACpBC,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRC,MAAMC,IAAAA,mBAAS,EAACJ,aAAa;IAAEK,2BAA2B;AAAK,GAAGF,GAAG,EAKtE;QAGcA,UAIAA,WACDA;IANd,OAAOL,wBAAwBE,aAAa;QAC1CM,aAAaH,EAAAA,WAAAA,IAAII,GAAG,qBAAPJ,SAASK,IAAI,KAAI;QAC9BP;QACAC;QACAO,OAAOC,IAAAA,2BAAiB,EAACP,KAAKQ,OAAO,IAAI;QACzCC,WAAW,GAAET,YAAAA,IAAII,GAAG,qBAAPJ,UAASS,WAAW;QACjCC,UAAU,GAAEV,YAAAA,IAAII,GAAG,qBAAPJ,UAASU,UAAU;IACjC;AACF;AAEA,SAASC,6BACPd,WAAmB,EACnB,EAAEe,YAAY,EAAEC,QAAQ,EAA8C;IAEtE,MAAMC,gBAAgBC,eAAI,CAACC,OAAO,CAACnB,aAAae,cAAcC;IAC9D,IAAI,CAACI,aAAE,CAACC,UAAU,CAACJ,gBAAgB;QACjC,OAAO;IACT;IACA,OAAOA;AACT;AAEA,8GAA8G,GAC9G,eAAeK,0BAA0BtB,WAAmB;IAC1D,IAAIgB,WAAWF,6BAA6Bd,aAAa;QACvD,yCAAyC;QACzCe,cAAcQ,QAAG,CAACC,kBAAkB;QACpCR,UAAU;IACZ;IACA,IAAI,CAACA,UAAU;QACbA,WAAWS,oBAAS,CAACC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAK,cAAeC,IAAI,CAAC7B;IACxE;IACA,OAAOoB,aAAE,CAACU,QAAQ,CAACC,QAAQ,CAACf,UAAU;AACxC;AAGO,eAAelB,wBACpBE,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRU,WAAW,EACXN,WAAW,EACXG,KAAK,EACLI,UAAU,EAQX;IAED,sDAAsD;IACtD,IAAImB,WAAW,MAAMV,0BAA0BtB;IAE/CgC,WAAWA,SAASC,OAAO,CAAC,mBAAmB3B;IAC/C0B,WAAWA,SAASC,OAAO,CAAC,eAAexB;IAE3CuB,WAAWE,IAAAA,yBAAmB,EAACF,UAAU/B;IAEzC,IAAIC,UAAU;QACZ8B,WAAWG,IAAAA,sBAAgB,EACzBH,UACA9B,SACGkC,GAAG,CAAC,CAACC,OAAS;gBACb,iFAAiF;gBACjF;oBACEC,IAAI;oBACJC,KAAK;oBACLF;gBACF;gBACA;oBACEE,KAAK;oBACLF;gBACF;aACD,EACAG,IAAI;IAEX;IAEA,IAAI3B,YAAY;QACdmB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAEnB,WAAW,CAAC,CAAC;IAC3E;IAEA,IAAID,aAAa;QACfoB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAEpB,YAAY,CAAC,CAAC;IAC5E;IAEA,OAAOoB;AACT;AAEA,oDAAoD,GACpD,SAASS,QAAQT,QAAgB,EAAEU,IAAY;IAC7C,OAAOV,SAASC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAES,KAAK,UAAU,CAAC;AAC9D"}
1
+ {"version":3,"sources":["../../../../src/start/server/webTemplate.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config';\nimport { getConfig, getNameFromConfig } from '@expo/config';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { TEMPLATES } from '../../customize/templates';\nimport { appendLinkToHtml, appendScriptsToHtml } from '../../export/html';\nimport { getPublicFolderPath } from '../../export/publicFolder';\n\n/**\n * Create a static HTML for SPA styled websites.\n * This method attempts to reuse the same patterns as `@expo/webpack-config`.\n */\nexport async function createTemplateHtmlFromExpoConfigAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n extraHead,\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n }: {\n scripts: string[];\n cssLinks?: string[];\n /** Pre-rendered HTML to inject before `</head>`. Used for caller-owned head assets like favicons. */\n extraHead?: string;\n exp?: ExpoConfig;\n }\n) {\n return createTemplateHtmlAsync(projectRoot, {\n langIsoCode: exp.web?.lang ?? 'en',\n scripts,\n cssLinks,\n extraHead,\n title: getNameFromConfig(exp).webName ?? 'Expo App',\n description: exp.web?.description,\n themeColor: exp.web?.themeColor,\n });\n}\n\nfunction getFileFromLocalPublicFolder(\n projectRoot: string,\n { filePath }: { filePath: string }\n): string | null {\n const localFilePath = path.resolve(getPublicFolderPath(projectRoot), filePath);\n if (!fs.existsSync(localFilePath)) {\n return null;\n }\n return localFilePath;\n}\n\n/** Attempt to read the `index.html` from the local project before falling back on the template `index.html`. */\nasync function getTemplateIndexHtmlAsync(projectRoot: string): Promise<string> {\n let filePath = getFileFromLocalPublicFolder(projectRoot, {\n filePath: 'index.html',\n });\n if (!filePath) {\n filePath = TEMPLATES.find((value) => value.id === 'index.html')!.file(projectRoot);\n }\n return fs.promises.readFile(filePath, 'utf8');\n}\n\n/** Return an `index.html` string with template values added. */\nexport async function createTemplateHtmlAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n extraHead,\n description,\n langIsoCode,\n title,\n themeColor,\n }: {\n scripts: string[];\n cssLinks?: string[];\n /** Pre-rendered HTML to inject before `</head>`. */\n extraHead?: string;\n description?: string;\n langIsoCode: string;\n title: string;\n themeColor?: string;\n }\n): Promise<string> {\n // Resolve the best possible index.html template file.\n let contents = await getTemplateIndexHtmlAsync(projectRoot);\n\n contents = contents.replace('%LANG_ISO_CODE%', langIsoCode);\n contents = contents.replace('%WEB_TITLE%', title);\n\n contents = appendScriptsToHtml(contents, scripts);\n\n if (cssLinks) {\n contents = appendLinkToHtml(\n contents,\n cssLinks\n .map((href) => [\n // NOTE: We probably don't have to preload the CSS files for SPA-styled websites.\n {\n as: 'style',\n rel: 'preload',\n href,\n },\n {\n rel: 'stylesheet',\n href,\n },\n ])\n .flat()\n );\n }\n\n if (themeColor) {\n contents = addMeta(contents, `name=\"theme-color\" content=\"${themeColor}\"`);\n }\n\n if (description) {\n contents = addMeta(contents, `name=\"description\" content=\"${description}\"`);\n }\n\n if (extraHead) {\n contents = contents.replace('</head>', `${extraHead}</head>`);\n }\n\n return contents;\n}\n\n/** Add a `<meta />` tag to the `<head />` element. */\nfunction addMeta(contents: string, meta: string): string {\n return contents.replace('</head>', `<meta ${meta}>\\n</head>`);\n}\n"],"names":["createTemplateHtmlAsync","createTemplateHtmlFromExpoConfigAsync","projectRoot","scripts","cssLinks","extraHead","exp","getConfig","skipSDKVersionRequirement","langIsoCode","web","lang","title","getNameFromConfig","webName","description","themeColor","getFileFromLocalPublicFolder","filePath","localFilePath","path","resolve","getPublicFolderPath","fs","existsSync","getTemplateIndexHtmlAsync","TEMPLATES","find","value","id","file","promises","readFile","contents","replace","appendScriptsToHtml","appendLinkToHtml","map","href","as","rel","flat","addMeta","meta"],"mappings":";;;;;;;;;;;QA8DsBA;eAAAA;;QAjDAC;eAAAA;;;;yBAZuB;;;;;;;gEAC9B;;;;;;;gEACE;;;;;;2BAES;sBAC4B;8BAClB;;;;;;AAM7B,eAAeA,sCACpBC,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,MAAMC,IAAAA,mBAAS,EAACL,aAAa;IAAEM,2BAA2B;AAAK,GAAGF,GAAG,EAOtE;QAGcA,UAKAA,WACDA;IAPd,OAAON,wBAAwBE,aAAa;QAC1CO,aAAaH,EAAAA,WAAAA,IAAII,GAAG,qBAAPJ,SAASK,IAAI,KAAI;QAC9BR;QACAC;QACAC;QACAO,OAAOC,IAAAA,2BAAiB,EAACP,KAAKQ,OAAO,IAAI;QACzCC,WAAW,GAAET,YAAAA,IAAII,GAAG,qBAAPJ,UAASS,WAAW;QACjCC,UAAU,GAAEV,YAAAA,IAAII,GAAG,qBAAPJ,UAASU,UAAU;IACjC;AACF;AAEA,SAASC,6BACPf,WAAmB,EACnB,EAAEgB,QAAQ,EAAwB;IAElC,MAAMC,gBAAgBC,eAAI,CAACC,OAAO,CAACC,IAAAA,iCAAmB,EAACpB,cAAcgB;IACrE,IAAI,CAACK,aAAE,CAACC,UAAU,CAACL,gBAAgB;QACjC,OAAO;IACT;IACA,OAAOA;AACT;AAEA,8GAA8G,GAC9G,eAAeM,0BAA0BvB,WAAmB;IAC1D,IAAIgB,WAAWD,6BAA6Bf,aAAa;QACvDgB,UAAU;IACZ;IACA,IAAI,CAACA,UAAU;QACbA,WAAWQ,oBAAS,CAACC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAK,cAAeC,IAAI,CAAC5B;IACxE;IACA,OAAOqB,aAAE,CAACQ,QAAQ,CAACC,QAAQ,CAACd,UAAU;AACxC;AAGO,eAAelB,wBACpBE,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTU,WAAW,EACXN,WAAW,EACXG,KAAK,EACLI,UAAU,EAUX;IAED,sDAAsD;IACtD,IAAIiB,WAAW,MAAMR,0BAA0BvB;IAE/C+B,WAAWA,SAASC,OAAO,CAAC,mBAAmBzB;IAC/CwB,WAAWA,SAASC,OAAO,CAAC,eAAetB;IAE3CqB,WAAWE,IAAAA,yBAAmB,EAACF,UAAU9B;IAEzC,IAAIC,UAAU;QACZ6B,WAAWG,IAAAA,sBAAgB,EACzBH,UACA7B,SACGiC,GAAG,CAAC,CAACC,OAAS;gBACb,iFAAiF;gBACjF;oBACEC,IAAI;oBACJC,KAAK;oBACLF;gBACF;gBACA;oBACEE,KAAK;oBACLF;gBACF;aACD,EACAG,IAAI;IAEX;IAEA,IAAIzB,YAAY;QACdiB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAEjB,WAAW,CAAC,CAAC;IAC3E;IAEA,IAAID,aAAa;QACfkB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAElB,YAAY,CAAC,CAAC;IAC5E;IAEA,IAAIV,WAAW;QACb4B,WAAWA,SAASC,OAAO,CAAC,WAAW,GAAG7B,UAAU,OAAO,CAAC;IAC9D;IAEA,OAAO4B;AACT;AAEA,oDAAoD,GACpD,SAASS,QAAQT,QAAgB,EAAEU,IAAY;IAC7C,OAAOV,SAASC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAES,KAAK,UAAU,CAAC;AAC9D"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- WebpackBundlerDevServer: function() {
12
+ get WebpackBundlerDevServer () {
13
13
  return WebpackBundlerDevServer;
14
14
  },
15
- getProjectWebpackConfigFilePath: function() {
15
+ get getProjectWebpackConfigFilePath () {
16
16
  return getProjectWebpackConfigFilePath;
17
17
  }
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'node:fs';\nimport http from 'node:http';\nimport path from 'node:path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport { compileAsync } from './compile';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { setNodeEnv, loadEnvFiles } from '../../../utils/nodeEnv';\nimport { choosePortAsync } from '../../../utils/port';\nimport { createProgressBar } from '../../../utils/progress';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:webpack:devServer') as typeof console.log;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite && !value?.sendMessage) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n public async startTypeScriptServices(): Promise<void> {\n // noop -- this feature is Metro-only.\n }\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n if (\n 'sendMessage' in this.instance.server &&\n typeof this.instance.server.sendMessage === 'function'\n ) {\n // NOTE: https://github.com/expo/expo/issues/21994#issuecomment-1517122501\n this.instance.server.sendMessage(this.instance.server.sockets, hackyConvertedMessage, params);\n } else {\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n }\n\n isTargetingNative(): boolean {\n return false;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async bundleAsync({ mode, clear }: { mode: 'development' | 'production'; clear: boolean }) {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n\n if (clear) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n const config = await this.loadConfigAsync({\n isImageEditingEnabled: true,\n mode,\n });\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const bar = createProgressBar(chalk`{bold Web} Bundling Javascript [:bar] :percent`, {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n // NOTE(EvanBacon): Add a progress bar to the webpack logger if defined (e.g. not in CI).\n if (bar != null) {\n config.plugins.push(\n new webpack.ProgressPlugin((percent: number) => {\n bar?.update(percent);\n if (percent === 1) {\n bar?.terminate();\n }\n })\n );\n }\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n try {\n await compileAsync(compiler);\n } catch (error: any) {\n Log.error(chalk.red('Failed to compile'));\n throw error;\n } finally {\n bar?.terminate();\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n\n const { resetDevServer, https, port, mode } = options;\n\n const urlCreator = await this.initUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n const server = new WebpackDevServer(compiler, config.devServer);\n const host =\n env.WEB_HOST ?? (options.location.hostType === 'localhost' ? 'localhost' : undefined);\n\n // Launch WebpackDevServer.\n server.listen(port, host, function (this: http.Server, error) {\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = urlCreator.getDefaultRouteAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n // TODO(@kitten): Why is this not using the URL creator?\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: null,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: Pick<BundlerStartOptions, 'mode' | 'isImageEditingEnabled' | 'https'>,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n\n setNodeEnv(env.mode ?? 'development');\n loadEnvFiles(env.projectRoot);\n\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n\n protected async clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n ): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n }\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n"],"names":["WebpackBundlerDevServer","getProjectWebpackConfigFilePath","debug","require","assertIsWebpackDevServer","value","sockWrite","sendMessage","CommandError","constructor","name","BundlerDevServer","startTypeScriptServices","broadcastMessage","method","params","instance","server","hackyConvertedMessage","sockets","isTargetingNative","getAvailablePortAsync","options","defaultPort","port","choosePortAsync","projectRoot","host","env","WEB_HOST","error","message","bundleAsync","mode","clear","webpack","importWebpackFromProject","clearWebProjectCacheAsync","config","loadConfigAsync","isImageEditingEnabled","plugins","bar","createProgressBar","chalk","width","total","complete","incomplete","push","ProgressPlugin","percent","update","terminate","compiler","compileAsync","Log","red","startImplementationAsync","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","urlCreator","initUrlCreator","location","scheme","ensureEnvironmentSupportsTLSAsync","catch","log","devServer","hostType","undefined","listen","originalClose","close","bind","callback","err","_host","getDefaultRouteAddress","protocol","url","middleware","messageSocket","broadcast","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","logger","info","setNodeEnv","loadEnvFiles","projectWebpackConfig","webpackConfig","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","path","join","fs","promises","rm","recursive","force"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'node:fs';\nimport type http from 'node:http';\nimport path from 'node:path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport { compileAsync } from './compile';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { setNodeEnv, loadEnvFiles } from '../../../utils/nodeEnv';\nimport { choosePortAsync } from '../../../utils/port';\nimport { createProgressBar } from '../../../utils/progress';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport type { BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { BundlerDevServer } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:webpack:devServer') as typeof console.log;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite && !value?.sendMessage) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n public async startTypeScriptServices(): Promise<void> {\n // noop -- this feature is Metro-only.\n }\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n if (\n 'sendMessage' in this.instance.server &&\n typeof this.instance.server.sendMessage === 'function'\n ) {\n // NOTE: https://github.com/expo/expo/issues/21994#issuecomment-1517122501\n this.instance.server.sendMessage(this.instance.server.sockets, hackyConvertedMessage, params);\n } else {\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n }\n\n isTargetingNative(): boolean {\n return false;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async bundleAsync({ mode, clear }: { mode: 'development' | 'production'; clear: boolean }) {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n\n if (clear) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n const config = await this.loadConfigAsync({\n isImageEditingEnabled: true,\n mode,\n });\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const bar = createProgressBar(chalk`{bold Web} Bundling Javascript [:bar] :percent`, {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n // NOTE(EvanBacon): Add a progress bar to the webpack logger if defined (e.g. not in CI).\n if (bar != null) {\n config.plugins.push(\n new webpack.ProgressPlugin((percent: number) => {\n bar?.update(percent);\n if (percent === 1) {\n bar?.terminate();\n }\n })\n );\n }\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n try {\n await compileAsync(compiler);\n } catch (error: any) {\n Log.error(chalk.red('Failed to compile'));\n throw error;\n } finally {\n bar?.terminate();\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n\n const { resetDevServer, https, port, mode } = options;\n\n const urlCreator = await this.initUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n const server = new WebpackDevServer(compiler, config.devServer);\n const host =\n env.WEB_HOST ?? (options.location.hostType === 'localhost' ? 'localhost' : undefined);\n\n // Launch WebpackDevServer.\n server.listen(port, host, function (this: http.Server, error) {\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = urlCreator.getDefaultRouteAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n // TODO(@kitten): Why is this not using the URL creator?\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: null,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: Pick<BundlerStartOptions, 'mode' | 'isImageEditingEnabled' | 'https'>,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n\n setNodeEnv(env.mode ?? 'development');\n loadEnvFiles(env.projectRoot);\n\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n\n protected async clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n ): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n }\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n"],"names":["WebpackBundlerDevServer","getProjectWebpackConfigFilePath","debug","require","assertIsWebpackDevServer","value","sockWrite","sendMessage","CommandError","name","BundlerDevServer","startTypeScriptServices","broadcastMessage","method","params","instance","server","hackyConvertedMessage","sockets","isTargetingNative","getAvailablePortAsync","options","defaultPort","port","choosePortAsync","projectRoot","host","env","WEB_HOST","error","message","bundleAsync","mode","clear","webpack","importWebpackFromProject","clearWebProjectCacheAsync","config","loadConfigAsync","isImageEditingEnabled","plugins","bar","createProgressBar","chalk","width","total","complete","incomplete","push","ProgressPlugin","percent","update","terminate","compiler","compileAsync","Log","red","startImplementationAsync","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","urlCreator","initUrlCreator","location","scheme","ensureEnvironmentSupportsTLSAsync","catch","log","devServer","hostType","undefined","listen","originalClose","close","bind","callback","err","_host","getDefaultRouteAddress","protocol","url","middleware","messageSocket","broadcast","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","logger","info","setNodeEnv","loadEnvFiles","projectWebpackConfig","webpackConfig","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","path","join","fs","promises","rm","recursive","force"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/formatWebpackMessages.ts"],"sourcesContent":["/**\n * Copyright (c) 2022 Expo, Inc.\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Based on https://github.com/facebook/create-react-app/blob/b172b5e/packages/react-dev-utils/ModuleNotFoundPlugin.js\n * But with Node LTS support.\n */\n\nimport type { Stats } from 'webpack';\n\nconst friendlySyntaxErrorLabel = 'Syntax error:';\n\nfunction isLikelyASyntaxError(message: string): boolean {\n return message.indexOf(friendlySyntaxErrorLabel) !== -1;\n}\n\n// Cleans up webpack error messages.\nfunction formatMessage(message: string | { message: string } | { message: string }[]) {\n let lines: string[] = [];\n\n if (typeof message === 'string') {\n lines = message.split('\\n');\n } else if ('message' in message) {\n lines = message['message'].split('\\n');\n } else if (Array.isArray(message)) {\n message.forEach((message) => {\n if ('message' in message) {\n lines = message['message'].split('\\n');\n }\n });\n }\n\n // Strip webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line) => !/Module [A-z ]+\\(from/.test(line));\n\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line) => {\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return `${friendlySyntaxErrorLabel} ${errorMessage} (${errorLine}:${errorColumn})`;\n });\n\n message = lines.join('\\n');\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(\n /SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g,\n `${friendlySyntaxErrorLabel} $3 ($1:$2)\\n`\n );\n // Clean up export errors\n message = message.replace(\n /^.*export '(.+?)' was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$2'.`\n );\n message = message.replace(\n /^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$2' does not contain a default export (imported as '$1').`\n );\n message = message.replace(\n /^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$3' (imported as '$2').`\n );\n lines = message.split('\\n');\n\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === '') {\n lines.splice(1, 1);\n }\n // Clean up file name\n lines[0] = lines[0].replace(/^(.*) \\d+:\\d+-\\d+$/, '$1');\n\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf('Module not found: ') === 0) {\n lines = [\n lines[0],\n lines[1]\n .replace('Error: ', '')\n .replace('Module not found: Cannot find file:', 'Cannot find file:'),\n ];\n }\n\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n lines[1] = 'To import Sass files, you first need to install sass.\\n';\n lines[1] += 'Run `npm install sass` or `yarn add sass` inside your workspace.';\n }\n\n message = lines.join('\\n');\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, ''); // at ... ...:x:y\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, ''); // at <anonymous>\n lines = message.split('\\n');\n\n // Remove duplicated newlines\n lines = lines.filter(\n (line, index, arr) => index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1].trim()\n );\n\n // Reassemble the message\n message = lines.join('\\n');\n return message.trim();\n}\n\nexport function formatWebpackMessages(json?: Stats.ToJsonOutput) {\n const formattedErrors = json?.errors?.map(formatMessage);\n const formattedWarnings = json?.warnings?.map(formatMessage);\n const result = { errors: formattedErrors, warnings: formattedWarnings };\n if (result.errors?.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n }\n return result;\n}\n"],"names":["formatWebpackMessages","friendlySyntaxErrorLabel","isLikelyASyntaxError","message","indexOf","formatMessage","lines","split","Array","isArray","forEach","filter","line","test","map","parsingError","exec","errorLine","errorColumn","errorMessage","join","replace","length","trim","splice","match","index","arr","json","result","formattedErrors","errors","formattedWarnings","warnings","some"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/formatWebpackMessages.ts"],"sourcesContent":["/**\n * Copyright (c) 2022 Expo, Inc.\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Based on https://github.com/facebook/create-react-app/blob/b172b5e/packages/react-dev-utils/ModuleNotFoundPlugin.js\n * But with Node LTS support.\n */\n\nimport type { Stats } from 'webpack';\n\nconst friendlySyntaxErrorLabel = 'Syntax error:';\n\nfunction isLikelyASyntaxError(message: string): boolean {\n return message.indexOf(friendlySyntaxErrorLabel) !== -1;\n}\n\n// Cleans up webpack error messages.\nfunction formatMessage(message: string | { message: string } | { message: string }[]) {\n let lines: string[] = [];\n\n if (typeof message === 'string') {\n lines = message.split('\\n');\n } else if ('message' in message) {\n lines = message['message'].split('\\n');\n } else if (Array.isArray(message)) {\n message.forEach((message) => {\n if ('message' in message) {\n lines = message['message'].split('\\n');\n }\n });\n }\n\n // Strip webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line) => !/Module [A-z ]+\\(from/.test(line));\n\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line) => {\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return `${friendlySyntaxErrorLabel} ${errorMessage} (${errorLine}:${errorColumn})`;\n });\n\n message = lines.join('\\n');\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(\n /SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g,\n `${friendlySyntaxErrorLabel} $3 ($1:$2)\\n`\n );\n // Clean up export errors\n message = message.replace(\n /^.*export '(.+?)' was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$2'.`\n );\n message = message.replace(\n /^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$2' does not contain a default export (imported as '$1').`\n );\n message = message.replace(\n /^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$3' (imported as '$2').`\n );\n lines = message.split('\\n');\n\n // Remove leading newline\n if (lines.length > 2 && lines[1]!.trim() === '') {\n lines.splice(1, 1);\n }\n // Clean up file name\n lines[0] = lines[0]!.replace(/^(.*) \\d+:\\d+-\\d+$/, '$1');\n\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf('Module not found: ') === 0) {\n lines = [\n lines[0],\n lines[1]\n .replace('Error: ', '')\n .replace('Module not found: Cannot find file:', 'Cannot find file:'),\n ];\n }\n\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n lines[1] = 'To import Sass files, you first need to install sass.\\n';\n lines[1] += 'Run `npm install sass` or `yarn add sass` inside your workspace.';\n }\n\n message = lines.join('\\n');\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, ''); // at ... ...:x:y\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, ''); // at <anonymous>\n lines = message.split('\\n');\n\n // Remove duplicated newlines\n lines = lines.filter(\n (line, index, arr) =>\n index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1]!.trim()\n );\n\n // Reassemble the message\n message = lines.join('\\n');\n return message.trim();\n}\n\nexport function formatWebpackMessages(json?: Stats.ToJsonOutput) {\n const formattedErrors = json?.errors?.map(formatMessage);\n const formattedWarnings = json?.warnings?.map(formatMessage);\n const result = { errors: formattedErrors, warnings: formattedWarnings };\n if (result.errors?.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n }\n return result;\n}\n"],"names":["formatWebpackMessages","friendlySyntaxErrorLabel","isLikelyASyntaxError","message","indexOf","formatMessage","lines","split","Array","isArray","forEach","filter","line","test","map","parsingError","exec","errorLine","errorColumn","errorMessage","join","replace","length","trim","splice","match","index","arr","json","result","formattedErrors","errors","formattedWarnings","warnings","some"],"mappings":"AAAA;;;;;;;;;CASC;;;;+BAyGeA;;;eAAAA;;;AArGhB,MAAMC,2BAA2B;AAEjC,SAASC,qBAAqBC,OAAe;IAC3C,OAAOA,QAAQC,OAAO,CAACH,8BAA8B,CAAC;AACxD;AAEA,oCAAoC;AACpC,SAASI,cAAcF,OAA6D;IAClF,IAAIG,QAAkB,EAAE;IAExB,IAAI,OAAOH,YAAY,UAAU;QAC/BG,QAAQH,QAAQI,KAAK,CAAC;IACxB,OAAO,IAAI,aAAaJ,SAAS;QAC/BG,QAAQH,OAAO,CAAC,UAAU,CAACI,KAAK,CAAC;IACnC,OAAO,IAAIC,MAAMC,OAAO,CAACN,UAAU;QACjCA,QAAQO,OAAO,CAAC,CAACP;YACf,IAAI,aAAaA,SAAS;gBACxBG,QAAQH,OAAO,CAAC,UAAU,CAACI,KAAK,CAAC;YACnC;QACF;IACF;IAEA,kDAAkD;IAClD,oEAAoE;IACpED,QAAQA,MAAMK,MAAM,CAAC,CAACC,OAAS,CAAC,uBAAuBC,IAAI,CAACD;IAE5D,4CAA4C;IAC5C,2CAA2C;IAC3CN,QAAQA,MAAMQ,GAAG,CAAC,CAACF;QACjB,MAAMG,eAAe,gDAAgDC,IAAI,CAACJ;QAC1E,IAAI,CAACG,cAAc;YACjB,OAAOH;QACT;QACA,MAAM,GAAGK,WAAWC,aAAaC,aAAa,GAAGJ;QACjD,OAAO,GAAGd,yBAAyB,CAAC,EAAEkB,aAAa,EAAE,EAAEF,UAAU,CAAC,EAAEC,YAAY,CAAC,CAAC;IACpF;IAEAf,UAAUG,MAAMc,IAAI,CAAC;IACrB,+CAA+C;IAC/CjB,UAAUA,QAAQkB,OAAO,CACvB,4CACA,GAAGpB,yBAAyB,aAAa,CAAC;IAE5C,yBAAyB;IACzBE,UAAUA,QAAQkB,OAAO,CACvB,mDACA,CAAC,uDAAuD,CAAC;IAE3DlB,UAAUA,QAAQkB,OAAO,CACvB,6EACA,CAAC,kFAAkF,CAAC;IAEtFlB,UAAUA,QAAQkB,OAAO,CACvB,2EACA,CAAC,0EAA0E,CAAC;IAE9Ef,QAAQH,QAAQI,KAAK,CAAC;IAEtB,yBAAyB;IACzB,IAAID,MAAMgB,MAAM,GAAG,KAAKhB,KAAK,CAAC,EAAE,CAAEiB,IAAI,OAAO,IAAI;QAC/CjB,MAAMkB,MAAM,CAAC,GAAG;IAClB;IACA,qBAAqB;IACrBlB,KAAK,CAAC,EAAE,GAAGA,KAAK,CAAC,EAAE,CAAEe,OAAO,CAAC,sBAAsB;IAEnD,wEAAwE;IACxE,IAAIf,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,CAACF,OAAO,CAAC,0BAA0B,GAAG;QAC5DE,QAAQ;YACNA,KAAK,CAAC,EAAE;YACRA,KAAK,CAAC,EAAE,CACLe,OAAO,CAAC,WAAW,IACnBA,OAAO,CAAC,uCAAuC;SACnD;IACH;IAEA,sEAAsE;IACtE,IAAIf,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,CAACmB,KAAK,CAAC,6BAA6B;QAC1DnB,KAAK,CAAC,EAAE,GAAG;QACXA,KAAK,CAAC,EAAE,IAAI;IACd;IAEAH,UAAUG,MAAMc,IAAI,CAAC;IACrB,qEAAqE;IACrE,qEAAqE;IACrE,gEAAgE;IAChE,yDAAyD;IACzDjB,UAAUA,QAAQkB,OAAO,CAAC,kDAAkD,KAAK,iBAAiB;IAClGlB,UAAUA,QAAQkB,OAAO,CAAC,+BAA+B,KAAK,iBAAiB;IAC/Ef,QAAQH,QAAQI,KAAK,CAAC;IAEtB,6BAA6B;IAC7BD,QAAQA,MAAMK,MAAM,CAClB,CAACC,MAAMc,OAAOC,MACZD,UAAU,KAAKd,KAAKW,IAAI,OAAO,MAAMX,KAAKW,IAAI,OAAOI,GAAG,CAACD,QAAQ,EAAE,CAAEH,IAAI;IAG7E,yBAAyB;IACzBpB,UAAUG,MAAMc,IAAI,CAAC;IACrB,OAAOjB,QAAQoB,IAAI;AACrB;AAEO,SAASvB,sBAAsB4B,IAAyB;QACrCA,cACEA,gBAEtBC;IAHJ,MAAMC,kBAAkBF,yBAAAA,eAAAA,KAAMG,MAAM,qBAAZH,aAAcd,GAAG,CAACT;IAC1C,MAAM2B,oBAAoBJ,yBAAAA,iBAAAA,KAAMK,QAAQ,qBAAdL,eAAgBd,GAAG,CAACT;IAC9C,MAAMwB,SAAS;QAAEE,QAAQD;QAAiBG,UAAUD;IAAkB;IACtE,KAAIH,iBAAAA,OAAOE,MAAM,qBAAbF,eAAeK,IAAI,CAAChC,uBAAuB;QAC7C,kDAAkD;QAClD2B,OAAOE,MAAM,GAAGF,OAAOE,MAAM,CAACpB,MAAM,CAACT;IACvC;IACA,OAAO2B;AACT"}
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- importExpoWebpackConfigFromProject: function() {
12
+ get importExpoWebpackConfigFromProject () {
13
13
  return importExpoWebpackConfigFromProject;
14
14
  },
15
- importWebpackDevServerFromProject: function() {
15
+ get importWebpackDevServerFromProject () {
16
16
  return importWebpackDevServerFromProject;
17
17
  },
18
- importWebpackFromProject: function() {
18
+ get importWebpackFromProject () {
19
19
  return importWebpackFromProject;
20
20
  }
21
21
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/resolveFromProject.ts"],"sourcesContent":["import resolveFrom from 'resolve-from';\n\nimport { CommandError } from '../../../utils/errors';\n\n// These resolvers enable us to test the CLI in older projects.\n// We may be able to get rid of this in the future.\n// TODO: Maybe combine with AsyncResolver?\nclass WebpackImportError extends CommandError {\n constructor(projectRoot: string, moduleId: string) {\n super(\n 'WEBPACK_IMPORT',\n `Missing package \"${moduleId}\" in the project. Try running the command again. (cwd: ${projectRoot})`\n );\n }\n}\n\nfunction resolveFromProject(projectRoot: string, moduleId: string) {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n throw new WebpackImportError(projectRoot, moduleId);\n }\n return resolvedPath;\n}\n\nfunction importFromProject(projectRoot: string, moduleId: string) {\n return require(resolveFromProject(projectRoot, moduleId));\n}\n\n/** Import `webpack` from the project. */\nexport function importWebpackFromProject(projectRoot: string): typeof import('webpack') {\n return importFromProject(projectRoot, 'webpack');\n}\n\n/** Import `@expo/webpack-config` from the project. */\nexport function importExpoWebpackConfigFromProject(projectRoot: string) {\n return importFromProject(projectRoot, '@expo/webpack-config');\n}\n\n/** Import `webpack-dev-server` from the project. */\nexport function importWebpackDevServerFromProject(\n projectRoot: string\n): typeof import('webpack-dev-server') {\n return importFromProject(projectRoot, 'webpack-dev-server');\n}\n"],"names":["importExpoWebpackConfigFromProject","importWebpackDevServerFromProject","importWebpackFromProject","WebpackImportError","CommandError","constructor","projectRoot","moduleId","resolveFromProject","resolvedPath","resolveFrom","silent","importFromProject","require"],"mappings":";;;;;;;;;;;IAkCgBA,kCAAkC;eAAlCA;;IAKAC,iCAAiC;eAAjCA;;IAVAC,wBAAwB;eAAxBA;;;;gEA7BQ;;;;;;wBAEK;;;;;;AAE7B,+DAA+D;AAC/D,mDAAmD;AACnD,0CAA0C;AAC1C,MAAMC,2BAA2BC,oBAAY;IAC3CC,YAAYC,WAAmB,EAAEC,QAAgB,CAAE;QACjD,KAAK,CACH,kBACA,CAAC,iBAAiB,EAAEA,SAAS,uDAAuD,EAAED,YAAY,CAAC,CAAC;IAExG;AACF;AAEA,SAASE,mBAAmBF,WAAmB,EAAEC,QAAgB;IAC/D,MAAME,eAAeC,sBAAW,CAACC,MAAM,CAACL,aAAaC;IACrD,IAAI,CAACE,cAAc;QACjB,MAAM,IAAIN,mBAAmBG,aAAaC;IAC5C;IACA,OAAOE;AACT;AAEA,SAASG,kBAAkBN,WAAmB,EAAEC,QAAgB;IAC9D,OAAOM,QAAQL,mBAAmBF,aAAaC;AACjD;AAGO,SAASL,yBAAyBI,WAAmB;IAC1D,OAAOM,kBAAkBN,aAAa;AACxC;AAGO,SAASN,mCAAmCM,WAAmB;IACpE,OAAOM,kBAAkBN,aAAa;AACxC;AAGO,SAASL,kCACdK,WAAmB;IAEnB,OAAOM,kBAAkBN,aAAa;AACxC"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/resolveFromProject.ts"],"sourcesContent":["import resolveFrom from 'resolve-from';\n\nimport { CommandError } from '../../../utils/errors';\n\n// These resolvers enable us to test the CLI in older projects.\n// We may be able to get rid of this in the future.\n// TODO: Maybe combine with AsyncResolver?\nclass WebpackImportError extends CommandError {\n constructor(projectRoot: string, moduleId: string) {\n super(\n 'WEBPACK_IMPORT',\n `Missing package \"${moduleId}\" in the project. Try running the command again. (cwd: ${projectRoot})`\n );\n }\n}\n\nfunction resolveFromProject(projectRoot: string, moduleId: string) {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n throw new WebpackImportError(projectRoot, moduleId);\n }\n return resolvedPath;\n}\n\nfunction importFromProject(projectRoot: string, moduleId: string) {\n return require(resolveFromProject(projectRoot, moduleId));\n}\n\n/** Import `webpack` from the project. */\nexport function importWebpackFromProject(projectRoot: string): typeof import('webpack') {\n return importFromProject(projectRoot, 'webpack');\n}\n\n/** Import `@expo/webpack-config` from the project. */\nexport function importExpoWebpackConfigFromProject(projectRoot: string) {\n return importFromProject(projectRoot, '@expo/webpack-config');\n}\n\n/** Import `webpack-dev-server` from the project. */\nexport function importWebpackDevServerFromProject(\n projectRoot: string\n): typeof import('webpack-dev-server') {\n return importFromProject(projectRoot, 'webpack-dev-server');\n}\n"],"names":["importExpoWebpackConfigFromProject","importWebpackDevServerFromProject","importWebpackFromProject","WebpackImportError","CommandError","projectRoot","moduleId","resolveFromProject","resolvedPath","resolveFrom","silent","importFromProject","require"],"mappings":";;;;;;;;;;;QAkCgBA;eAAAA;;QAKAC;eAAAA;;QAVAC;eAAAA;;;;gEA7BQ;;;;;;wBAEK;;;;;;AAE7B,+DAA+D;AAC/D,mDAAmD;AACnD,0CAA0C;AAC1C,MAAMC,2BAA2BC,oBAAY;IAC3C,YAAYC,WAAmB,EAAEC,QAAgB,CAAE;QACjD,KAAK,CACH,kBACA,CAAC,iBAAiB,EAAEA,SAAS,uDAAuD,EAAED,YAAY,CAAC,CAAC;IAExG;AACF;AAEA,SAASE,mBAAmBF,WAAmB,EAAEC,QAAgB;IAC/D,MAAME,eAAeC,sBAAW,CAACC,MAAM,CAACL,aAAaC;IACrD,IAAI,CAACE,cAAc;QACjB,MAAM,IAAIL,mBAAmBE,aAAaC;IAC5C;IACA,OAAOE;AACT;AAEA,SAASG,kBAAkBN,WAAmB,EAAEC,QAAgB;IAC9D,OAAOM,QAAQL,mBAAmBF,aAAaC;AACjD;AAGO,SAASJ,yBAAyBG,WAAmB;IAC1D,OAAOM,kBAAkBN,aAAa;AACxC;AAGO,SAASL,mCAAmCK,WAAmB;IACpE,OAAOM,kBAAkBN,aAAa;AACxC;AAGO,SAASJ,kCACdI,WAAmB;IAEnB,OAAOM,kBAAkBN,aAAa;AACxC"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- ensureEnvironmentSupportsTLSAsync: function() {
12
+ get ensureEnvironmentSupportsTLSAsync () {
13
13
  return ensureEnvironmentSupportsTLSAsync;
14
14
  },
15
- getTLSCertAsync: function() {
15
+ get getTLSCertAsync () {
16
16
  return getTLSCertAsync;
17
17
  }
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/tls.ts"],"sourcesContent":["import { certificateFor } from '@expo/devcert';\nimport chalk from 'chalk';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport * as Log from '../../../log';\nimport { ensureDirectoryAsync } from '../../../utils/dir';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\n\n// TODO: Move to doctor as a prereq.\n\n/** Ensure TLS is setup and environment variables are set. */\nexport async function ensureEnvironmentSupportsTLSAsync(projectRoot: string) {\n if (!process.env.SSL_CRT_FILE || !process.env.SSL_KEY_FILE) {\n const tls = await getTLSCertAsync(projectRoot);\n if (tls) {\n process.env.SSL_CRT_FILE = tls.certPath;\n process.env.SSL_KEY_FILE = tls.keyPath;\n }\n }\n}\n\n/** Create TLS and write to files in the temporary directory. Exposed for testing. */\nexport async function getTLSCertAsync(\n projectRoot: string\n): Promise<{ keyPath: string; certPath: string } | false> {\n Log.log(\n chalk`Creating TLS certificate for localhost. {dim This functionality may not work on all computers.}`\n );\n\n const name = 'localhost';\n const result = await certificateFor(name);\n if (result) {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n\n const { key, cert } = result;\n const folder = path.join(dotExpoDir, 'tls');\n const keyPath = path.join(folder, `key-${name}.pem`);\n const certPath = path.join(folder, `cert-${name}.pem`);\n\n await ensureDirectoryAsync(folder);\n await Promise.allSettled([fs.writeFile(keyPath, key), fs.writeFile(certPath, cert)]);\n\n return {\n keyPath,\n certPath,\n };\n }\n return result;\n}\n"],"names":["ensureEnvironmentSupportsTLSAsync","getTLSCertAsync","projectRoot","process","env","SSL_CRT_FILE","SSL_KEY_FILE","tls","certPath","keyPath","Log","log","chalk","name","result","certificateFor","dotExpoDir","ensureDotExpoProjectDirectoryInitialized","key","cert","folder","path","join","ensureDirectoryAsync","Promise","allSettled","fs","writeFile"],"mappings":";;;;;;;;;;;IAYsBA,iCAAiC;eAAjCA;;IAWAC,eAAe;eAAfA;;;;yBAvBS;;;;;;;gEACb;;;;;;;gEACH;;;;;;;gEACE;;;;;;6DAEI;qBACgB;yBACoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKlD,eAAeD,kCAAkCE,WAAmB;IACzE,IAAI,CAACC,QAAQC,GAAG,CAACC,YAAY,IAAI,CAACF,QAAQC,GAAG,CAACE,YAAY,EAAE;QAC1D,MAAMC,MAAM,MAAMN,gBAAgBC;QAClC,IAAIK,KAAK;YACPJ,QAAQC,GAAG,CAACC,YAAY,GAAGE,IAAIC,QAAQ;YACvCL,QAAQC,GAAG,CAACE,YAAY,GAAGC,IAAIE,OAAO;QACxC;IACF;AACF;AAGO,eAAeR,gBACpBC,WAAmB;IAEnBQ,KAAIC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,+FAA+F,CAAC;IAGxG,MAAMC,OAAO;IACb,MAAMC,SAAS,MAAMC,IAAAA,yBAAc,EAACF;IACpC,IAAIC,QAAQ;QACV,MAAME,aAAaC,IAAAA,iDAAwC,EAACf;QAE5D,MAAM,EAAEgB,GAAG,EAAEC,IAAI,EAAE,GAAGL;QACtB,MAAMM,SAASC,eAAI,CAACC,IAAI,CAACN,YAAY;QACrC,MAAMP,UAAUY,eAAI,CAACC,IAAI,CAACF,QAAQ,CAAC,IAAI,EAAEP,KAAK,IAAI,CAAC;QACnD,MAAML,WAAWa,eAAI,CAACC,IAAI,CAACF,QAAQ,CAAC,KAAK,EAAEP,KAAK,IAAI,CAAC;QAErD,MAAMU,IAAAA,yBAAoB,EAACH;QAC3B,MAAMI,QAAQC,UAAU,CAAC;YAACC,mBAAE,CAACC,SAAS,CAAClB,SAASS;YAAMQ,mBAAE,CAACC,SAAS,CAACnB,UAAUW;SAAM;QAEnF,OAAO;YACLV;YACAD;QACF;IACF;IACA,OAAOM;AACT"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/tls.ts"],"sourcesContent":["import { certificateFor } from '@expo/devcert';\nimport chalk from 'chalk';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport * as Log from '../../../log';\nimport { ensureDirectoryAsync } from '../../../utils/dir';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\n\n// TODO: Move to doctor as a prereq.\n\n/** Ensure TLS is setup and environment variables are set. */\nexport async function ensureEnvironmentSupportsTLSAsync(projectRoot: string) {\n if (!process.env.SSL_CRT_FILE || !process.env.SSL_KEY_FILE) {\n const tls = await getTLSCertAsync(projectRoot);\n if (tls) {\n process.env.SSL_CRT_FILE = tls.certPath;\n process.env.SSL_KEY_FILE = tls.keyPath;\n }\n }\n}\n\n/** Create TLS and write to files in the temporary directory. Exposed for testing. */\nexport async function getTLSCertAsync(\n projectRoot: string\n): Promise<{ keyPath: string; certPath: string } | false> {\n Log.log(\n chalk`Creating TLS certificate for localhost. {dim This functionality may not work on all computers.}`\n );\n\n const name = 'localhost';\n const result = await certificateFor(name);\n if (result) {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n\n const { key, cert } = result;\n const folder = path.join(dotExpoDir, 'tls');\n const keyPath = path.join(folder, `key-${name}.pem`);\n const certPath = path.join(folder, `cert-${name}.pem`);\n\n await ensureDirectoryAsync(folder);\n await Promise.allSettled([fs.writeFile(keyPath, key), fs.writeFile(certPath, cert)]);\n\n return {\n keyPath,\n certPath,\n };\n }\n return result;\n}\n"],"names":["ensureEnvironmentSupportsTLSAsync","getTLSCertAsync","projectRoot","process","env","SSL_CRT_FILE","SSL_KEY_FILE","tls","certPath","keyPath","Log","log","chalk","name","result","certificateFor","dotExpoDir","ensureDotExpoProjectDirectoryInitialized","key","cert","folder","path","join","ensureDirectoryAsync","Promise","allSettled","fs","writeFile"],"mappings":";;;;;;;;;;;QAYsBA;eAAAA;;QAWAC;eAAAA;;;;yBAvBS;;;;;;;gEACb;;;;;;;gEACH;;;;;;;gEACE;;;;;;6DAEI;qBACgB;yBACoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKlD,eAAeD,kCAAkCE,WAAmB;IACzE,IAAI,CAACC,QAAQC,GAAG,CAACC,YAAY,IAAI,CAACF,QAAQC,GAAG,CAACE,YAAY,EAAE;QAC1D,MAAMC,MAAM,MAAMN,gBAAgBC;QAClC,IAAIK,KAAK;YACPJ,QAAQC,GAAG,CAACC,YAAY,GAAGE,IAAIC,QAAQ;YACvCL,QAAQC,GAAG,CAACE,YAAY,GAAGC,IAAIE,OAAO;QACxC;IACF;AACF;AAGO,eAAeR,gBACpBC,WAAmB;IAEnBQ,KAAIC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,+FAA+F,CAAC;IAGxG,MAAMC,OAAO;IACb,MAAMC,SAAS,MAAMC,IAAAA,yBAAc,EAACF;IACpC,IAAIC,QAAQ;QACV,MAAME,aAAaC,IAAAA,iDAAwC,EAACf;QAE5D,MAAM,EAAEgB,GAAG,EAAEC,IAAI,EAAE,GAAGL;QACtB,MAAMM,SAASC,eAAI,CAACC,IAAI,CAACN,YAAY;QACrC,MAAMP,UAAUY,eAAI,CAACC,IAAI,CAACF,QAAQ,CAAC,IAAI,EAAEP,KAAK,IAAI,CAAC;QACnD,MAAML,WAAWa,eAAI,CAACC,IAAI,CAACF,QAAQ,CAAC,KAAK,EAAEP,KAAK,IAAI,CAAC;QAErD,MAAMU,IAAAA,yBAAoB,EAACH;QAC3B,MAAMI,QAAQC,UAAU,CAAC;YAACC,mBAAE,CAACC,SAAS,CAAClB,SAASS;YAAMQ,mBAAE,CAACC,SAAS,CAACnB,UAAUW;SAAM;QAEnF,OAAO;YACLV;YACAD;QACF;IACF;IACA,OAAOM;AACT"}
@@ -23,20 +23,21 @@ function _chalk() {
23
23
  return data;
24
24
  }
25
25
  const _events = require("../events");
26
+ const _checkDependenciesOnStart = require("./checkDependenciesOnStart");
26
27
  const _SimulatorAppPrerequisite = require("./doctor/apple/SimulatorAppPrerequisite");
27
28
  const _XcodePrerequisite = require("./doctor/apple/XcodePrerequisite");
28
- const _validateDependenciesVersions = require("./doctor/dependencies/validateDependenciesVersions");
29
29
  const _WebSupportProjectPrerequisite = require("./doctor/web/WebSupportProjectPrerequisite");
30
+ const _interactiveActions = require("./interface/interactiveActions");
30
31
  const _startInterface = require("./interface/startInterface");
31
32
  const _resolveOptions = require("./resolveOptions");
32
33
  const _log = /*#__PURE__*/ _interop_require_wildcard(require("../log"));
33
34
  const _DevServerManager = require("./server/DevServerManager");
35
+ const _MCP = require("./server/MCP");
34
36
  const _openPlatforms = require("./server/openPlatforms");
35
37
  const _platformBundlers = require("./server/platformBundlers");
36
38
  const _env = require("../utils/env");
37
39
  const _interactive = require("../utils/interactive");
38
40
  const _profile = require("../utils/profile");
39
- const _MCP = require("./server/MCP");
40
41
  const _MCPDevToolsPluginCLIExtensions = require("./server/MCPDevToolsPluginCLIExtensions");
41
42
  function _interop_require_default(obj) {
42
43
  return obj && obj.__esModule ? obj : {
@@ -129,8 +130,18 @@ async function startAsync(projectRoot, options, settings) {
129
130
  var _exp_platforms, _devServerManager_getDefaultDevServer;
130
131
  if (!(0, _events.shouldReduceLogs)()) {
131
132
  _log.log(_chalk().default.gray(`Starting project at ${projectRoot}`));
133
+ const logFile = (0, _events.getLogFile)();
134
+ if (!(0, _interactive.isInteractive)() && logFile) {
135
+ _log.log(_chalk().default.gray(`Logs: ${logFile}`));
136
+ }
132
137
  }
133
138
  const { exp, pkg } = (0, _profile.profile)(_config().getConfig)(projectRoot);
139
+ // Start dependency version check in the background as early as possible (non-blocking).
140
+ // The result will be displayed in the TUI once it resolves.
141
+ let dependencyCheckRef;
142
+ if (!_env.env.EXPO_OFFLINE && !_env.env.EXPO_NO_DEPENDENCY_VALIDATION && !settings.webOnly) {
143
+ dependencyCheckRef = (0, _checkDependenciesOnStart.checkDependencies)(projectRoot, exp, pkg);
144
+ }
134
145
  if (((_exp_platforms = exp.platforms) == null ? void 0 : _exp_platforms.includes('ios')) && process.platform !== 'win32') {
135
146
  // If Xcode could potentially be used, then we should eagerly perform the
136
147
  // assertions since they can take a while on cold boots.
@@ -155,14 +166,6 @@ async function startAsync(projectRoot, options, settings) {
155
166
  // After the server starts, we can start attempting to bootstrap TypeScript.
156
167
  await devServerManager.bootstrapTypeScriptAsync();
157
168
  }
158
- if (!_env.env.EXPO_NO_DEPENDENCY_VALIDATION && !settings.webOnly && !options.devClient) {
159
- try {
160
- await (0, _profile.profile)(_validateDependenciesVersions.validateDependenciesVersionsAsync)(projectRoot, exp, pkg);
161
- } catch {
162
- // We don't show the dependency validation error, since it's non-essential
163
- // for the user to know it ran or failed
164
- }
165
- }
166
169
  // Open project on devices.
167
170
  await (0, _profile.profile)(_openPlatforms.openPlatformsAsync)(devServerManager, options);
168
171
  const defaultServerUrl = ((_devServerManager_getDefaultDevServer = devServerManager.getDefaultDevServer()) == null ? void 0 : _devServerManager_getDefaultDevServer.getDevServerUrl()) ?? '';
@@ -178,7 +181,8 @@ async function startAsync(projectRoot, options, settings) {
178
181
  'android',
179
182
  'web'
180
183
  ],
181
- mcpServer
184
+ mcpServer,
185
+ dependencyCheckRef
182
186
  });
183
187
  } else {
184
188
  // Display the server location in CI...
@@ -190,6 +194,12 @@ async function startAsync(projectRoot, options, settings) {
190
194
  })}`);
191
195
  }
192
196
  _log.log((0, _chalk().default)`Waiting on {underline ${defaultServerUrl}}`);
197
+ _log.log();
198
+ await (0, _interactiveActions.printDevToolsPluginCliBannersAsync)(devServerManager);
199
+ }
200
+ // In non-interactive mode, print the check outside of an interface, if it's available
201
+ if (dependencyCheckRef == null ? void 0 : dependencyCheckRef.result) {
202
+ (0, _checkDependenciesOnStart.printDependencyCheckResult)(dependencyCheckRef.result);
193
203
  }
194
204
  }
195
205
  if (mcpServer) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/start/startAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { shouldReduceLogs } from '../events';\nimport { SimulatorAppPrerequisite } from './doctor/apple/SimulatorAppPrerequisite';\nimport { getXcodeVersionAsync } from './doctor/apple/XcodePrerequisite';\nimport { validateDependenciesVersionsAsync } from './doctor/dependencies/validateDependenciesVersions';\nimport { WebSupportProjectPrerequisite } from './doctor/web/WebSupportProjectPrerequisite';\nimport { startInterfaceAsync } from './interface/startInterface';\nimport { Options, resolvePortsAsync } from './resolveOptions';\nimport * as Log from '../log';\nimport { BundlerStartOptions } from './server/BundlerDevServer';\nimport { DevServerManager, MultiBundlerStartOptions } from './server/DevServerManager';\nimport { openPlatformsAsync } from './server/openPlatforms';\nimport { getPlatformBundlers, PlatformBundlers } from './server/platformBundlers';\nimport { env } from '../utils/env';\nimport { isInteractive } from '../utils/interactive';\nimport { profile } from '../utils/profile';\nimport { maybeCreateMCPServerAsync } from './server/MCP';\nimport { addMcpCapabilities } from './server/MCPDevToolsPluginCLIExtensions';\n\nasync function getMultiBundlerStartOptions(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean },\n platformBundlers: PlatformBundlers\n): Promise<[BundlerStartOptions, MultiBundlerStartOptions]> {\n const commonOptions: BundlerStartOptions = {\n mode: options.dev ? 'development' : 'production',\n devClient: options.devClient,\n privateKeyPath: options.privateKeyPath ?? undefined,\n https: options.https,\n maxWorkers: options.maxWorkers,\n resetDevServer: options.clear,\n minify: options.minify,\n location: {\n hostType: options.host,\n scheme: options.scheme,\n },\n };\n const multiBundlerSettings = await resolvePortsAsync(projectRoot, options, settings);\n\n const optionalBundlers: Partial<PlatformBundlers> = { ...platformBundlers };\n // In the default case, we don't want to start multiple bundlers since this is\n // a bit slower. Our priority (for legacy) is native platforms.\n if (!options.web) {\n delete optionalBundlers['web'];\n }\n\n const bundlers = [...new Set(Object.values(optionalBundlers))];\n const multiBundlerStartOptions = bundlers.map((bundler) => {\n const port =\n bundler === 'webpack' ? multiBundlerSettings.webpackPort : multiBundlerSettings.metroPort;\n return {\n type: bundler,\n options: {\n ...commonOptions,\n port,\n },\n };\n });\n\n return [commonOptions, multiBundlerStartOptions];\n}\n\nexport async function startAsync(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean }\n) {\n if (!shouldReduceLogs()) {\n Log.log(chalk.gray(`Starting project at ${projectRoot}`));\n }\n\n const { exp, pkg } = profile(getConfig)(projectRoot);\n\n if (exp.platforms?.includes('ios') && process.platform !== 'win32') {\n // If Xcode could potentially be used, then we should eagerly perform the\n // assertions since they can take a while on cold boots.\n getXcodeVersionAsync({ silent: true });\n SimulatorAppPrerequisite.instance.assertAsync().catch(() => {\n // noop -- this will be thrown again when the user attempts to open the project.\n });\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(\n projectRoot,\n options,\n settings,\n platformBundlers\n );\n\n const devServerManager = new DevServerManager(projectRoot, defaultOptions);\n\n // Validations\n\n if (options.web || settings.webOnly) {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n }\n\n // Start the server as soon as possible.\n await profile(devServerManager.startAsync.bind(devServerManager))(startOptions);\n\n if (!settings.webOnly) {\n await devServerManager.watchEnvironmentVariables();\n\n // After the server starts, we can start attempting to bootstrap TypeScript.\n await devServerManager.bootstrapTypeScriptAsync();\n }\n\n if (!env.EXPO_NO_DEPENDENCY_VALIDATION && !settings.webOnly && !options.devClient) {\n try {\n await profile(validateDependenciesVersionsAsync)(projectRoot, exp, pkg);\n } catch {\n // We don't show the dependency validation error, since it's non-essential\n // for the user to know it ran or failed\n }\n }\n\n // Open project on devices.\n await profile(openPlatformsAsync)(devServerManager, options);\n\n const defaultServerUrl = devServerManager.getDefaultDevServer()?.getDevServerUrl() ?? '';\n const mcpServer =\n (await profile(maybeCreateMCPServerAsync)({\n projectRoot,\n devServerUrl: defaultServerUrl,\n })) ?? undefined;\n\n // Present the Terminal UI.\n if (isInteractive()) {\n await profile(startInterfaceAsync)(devServerManager, {\n platforms: exp.platforms ?? ['ios', 'android', 'web'],\n mcpServer,\n });\n } else {\n // Display the server location in CI...\n if (defaultServerUrl) {\n if (env.__EXPO_E2E_TEST) {\n // Print the URL to stdout for tests\n console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({ url: defaultServerUrl })}`);\n }\n Log.log(chalk`Waiting on {underline ${defaultServerUrl}}`);\n }\n }\n\n if (mcpServer) {\n addMcpCapabilities(mcpServer, devServerManager);\n mcpServer.start();\n }\n\n // Final note about closing the server.\n const logLocation = settings.webOnly ? 'in the browser console' : 'below';\n Log.log(\n chalk`Logs for your project will appear ${logLocation}.${\n isInteractive() ? chalk.dim(` Press Ctrl+C to exit.`) : ''\n }`\n );\n}\n"],"names":["startAsync","getMultiBundlerStartOptions","projectRoot","options","settings","platformBundlers","commonOptions","mode","dev","devClient","privateKeyPath","undefined","https","maxWorkers","resetDevServer","clear","minify","location","hostType","host","scheme","multiBundlerSettings","resolvePortsAsync","optionalBundlers","web","bundlers","Set","Object","values","multiBundlerStartOptions","map","bundler","port","webpackPort","metroPort","type","exp","devServerManager","shouldReduceLogs","Log","log","chalk","gray","pkg","profile","getConfig","platforms","includes","process","platform","getXcodeVersionAsync","silent","SimulatorAppPrerequisite","instance","assertAsync","catch","getPlatformBundlers","defaultOptions","startOptions","DevServerManager","webOnly","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","bind","watchEnvironmentVariables","bootstrapTypeScriptAsync","env","EXPO_NO_DEPENDENCY_VALIDATION","validateDependenciesVersionsAsync","openPlatformsAsync","defaultServerUrl","getDefaultDevServer","getDevServerUrl","mcpServer","maybeCreateMCPServerAsync","devServerUrl","isInteractive","startInterfaceAsync","__EXPO_E2E_TEST","console","info","JSON","stringify","url","addMcpCapabilities","start","logLocation","dim"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/start/startAsync.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport chalk from 'chalk';\n\nimport { getLogFile, shouldReduceLogs } from '../events';\nimport {\n checkDependencies,\n printDependencyCheckResult,\n type DependencyCheckRef,\n} from './checkDependenciesOnStart';\nimport { SimulatorAppPrerequisite } from './doctor/apple/SimulatorAppPrerequisite';\nimport { getXcodeVersionAsync } from './doctor/apple/XcodePrerequisite';\nimport { WebSupportProjectPrerequisite } from './doctor/web/WebSupportProjectPrerequisite';\nimport { printDevToolsPluginCliBannersAsync } from './interface/interactiveActions';\nimport { startInterfaceAsync } from './interface/startInterface';\nimport type { Options } from './resolveOptions';\nimport { resolvePortsAsync } from './resolveOptions';\nimport * as Log from '../log';\nimport type { BundlerStartOptions } from './server/BundlerDevServer';\nimport type { MultiBundlerStartOptions } from './server/DevServerManager';\nimport { DevServerManager } from './server/DevServerManager';\nimport { maybeCreateMCPServerAsync } from './server/MCP';\nimport { openPlatformsAsync } from './server/openPlatforms';\nimport type { PlatformBundlers } from './server/platformBundlers';\nimport { getPlatformBundlers } from './server/platformBundlers';\nimport { env } from '../utils/env';\nimport { isInteractive } from '../utils/interactive';\nimport { profile } from '../utils/profile';\nimport { addMcpCapabilities } from './server/MCPDevToolsPluginCLIExtensions';\n\nasync function getMultiBundlerStartOptions(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean },\n platformBundlers: PlatformBundlers\n): Promise<[BundlerStartOptions, MultiBundlerStartOptions]> {\n const commonOptions: BundlerStartOptions = {\n mode: options.dev ? 'development' : 'production',\n devClient: options.devClient,\n privateKeyPath: options.privateKeyPath ?? undefined,\n https: options.https,\n maxWorkers: options.maxWorkers,\n resetDevServer: options.clear,\n minify: options.minify,\n location: {\n hostType: options.host,\n scheme: options.scheme,\n },\n };\n const multiBundlerSettings = await resolvePortsAsync(projectRoot, options, settings);\n\n const optionalBundlers: Partial<PlatformBundlers> = { ...platformBundlers };\n // In the default case, we don't want to start multiple bundlers since this is\n // a bit slower. Our priority (for legacy) is native platforms.\n if (!options.web) {\n delete optionalBundlers['web'];\n }\n\n const bundlers = [...new Set(Object.values(optionalBundlers))];\n const multiBundlerStartOptions = bundlers.map((bundler) => {\n const port =\n bundler === 'webpack' ? multiBundlerSettings.webpackPort : multiBundlerSettings.metroPort;\n return {\n type: bundler,\n options: {\n ...commonOptions,\n port,\n },\n };\n });\n\n return [commonOptions, multiBundlerStartOptions];\n}\n\nexport async function startAsync(\n projectRoot: string,\n options: Options,\n settings: { webOnly?: boolean }\n) {\n if (!shouldReduceLogs()) {\n Log.log(chalk.gray(`Starting project at ${projectRoot}`));\n const logFile = getLogFile();\n if (!isInteractive() && logFile) {\n Log.log(chalk.gray(`Logs: ${logFile}`));\n }\n }\n\n const { exp, pkg } = profile(getConfig)(projectRoot);\n\n // Start dependency version check in the background as early as possible (non-blocking).\n // The result will be displayed in the TUI once it resolves.\n let dependencyCheckRef: DependencyCheckRef | undefined;\n if (!env.EXPO_OFFLINE && !env.EXPO_NO_DEPENDENCY_VALIDATION && !settings.webOnly) {\n dependencyCheckRef = checkDependencies(projectRoot, exp, pkg);\n }\n\n if (exp.platforms?.includes('ios') && process.platform !== 'win32') {\n // If Xcode could potentially be used, then we should eagerly perform the\n // assertions since they can take a while on cold boots.\n getXcodeVersionAsync({ silent: true });\n SimulatorAppPrerequisite.instance.assertAsync().catch(() => {\n // noop -- this will be thrown again when the user attempts to open the project.\n });\n }\n\n const platformBundlers = getPlatformBundlers(projectRoot, exp);\n\n const [defaultOptions, startOptions] = await getMultiBundlerStartOptions(\n projectRoot,\n options,\n settings,\n platformBundlers\n );\n\n const devServerManager = new DevServerManager(projectRoot, defaultOptions);\n\n // Validations\n\n if (options.web || settings.webOnly) {\n await devServerManager.ensureProjectPrerequisiteAsync(WebSupportProjectPrerequisite);\n }\n\n // Start the server as soon as possible.\n await profile(devServerManager.startAsync.bind(devServerManager))(startOptions);\n\n if (!settings.webOnly) {\n await devServerManager.watchEnvironmentVariables();\n\n // After the server starts, we can start attempting to bootstrap TypeScript.\n await devServerManager.bootstrapTypeScriptAsync();\n }\n\n // Open project on devices.\n await profile(openPlatformsAsync)(devServerManager, options);\n\n const defaultServerUrl = devServerManager.getDefaultDevServer()?.getDevServerUrl() ?? '';\n const mcpServer =\n (await profile(maybeCreateMCPServerAsync)({\n projectRoot,\n devServerUrl: defaultServerUrl,\n })) ?? undefined;\n\n // Present the Terminal UI.\n if (isInteractive()) {\n await profile(startInterfaceAsync)(devServerManager, {\n platforms: exp.platforms ?? ['ios', 'android', 'web'],\n mcpServer,\n dependencyCheckRef,\n });\n } else {\n // Display the server location in CI...\n if (defaultServerUrl) {\n if (env.__EXPO_E2E_TEST) {\n // Print the URL to stdout for tests\n console.info(`[__EXPO_E2E_TEST:server] ${JSON.stringify({ url: defaultServerUrl })}`);\n }\n Log.log(chalk`Waiting on {underline ${defaultServerUrl}}`);\n Log.log();\n await printDevToolsPluginCliBannersAsync(devServerManager);\n }\n // In non-interactive mode, print the check outside of an interface, if it's available\n if (dependencyCheckRef?.result) {\n printDependencyCheckResult(dependencyCheckRef.result);\n }\n }\n\n if (mcpServer) {\n addMcpCapabilities(mcpServer, devServerManager);\n mcpServer.start();\n }\n\n // Final note about closing the server.\n const logLocation = settings.webOnly ? 'in the browser console' : 'below';\n Log.log(\n chalk`Logs for your project will appear ${logLocation}.${\n isInteractive() ? chalk.dim(` Press Ctrl+C to exit.`) : ''\n }`\n );\n}\n"],"names":["startAsync","getMultiBundlerStartOptions","projectRoot","options","settings","platformBundlers","commonOptions","mode","dev","devClient","privateKeyPath","undefined","https","maxWorkers","resetDevServer","clear","minify","location","hostType","host","scheme","multiBundlerSettings","resolvePortsAsync","optionalBundlers","web","bundlers","Set","Object","values","multiBundlerStartOptions","map","bundler","port","webpackPort","metroPort","type","exp","devServerManager","shouldReduceLogs","Log","log","chalk","gray","logFile","getLogFile","isInteractive","pkg","profile","getConfig","dependencyCheckRef","env","EXPO_OFFLINE","EXPO_NO_DEPENDENCY_VALIDATION","webOnly","checkDependencies","platforms","includes","process","platform","getXcodeVersionAsync","silent","SimulatorAppPrerequisite","instance","assertAsync","catch","getPlatformBundlers","defaultOptions","startOptions","DevServerManager","ensureProjectPrerequisiteAsync","WebSupportProjectPrerequisite","bind","watchEnvironmentVariables","bootstrapTypeScriptAsync","openPlatformsAsync","defaultServerUrl","getDefaultDevServer","getDevServerUrl","mcpServer","maybeCreateMCPServerAsync","devServerUrl","startInterfaceAsync","__EXPO_E2E_TEST","console","info","JSON","stringify","url","printDevToolsPluginCliBannersAsync","result","printDependencyCheckResult","addMcpCapabilities","start","logLocation","dim"],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  // NOTE(@kitten): Provide type augmentations for `@expo/metro`
2
2
  import 'expo-module-scripts/types/expo-metro-augmentations.d.ts';
3
+
4
+ import 'expo-module-scripts/types/react-server-dom-webpack.d.ts';
@@ -97,7 +97,7 @@ class FileNotifier {
97
97
  this.moduleIds = moduleIds;
98
98
  this.settings = settings;
99
99
  this.unsubscribe = null;
100
- this.watchFile = (0, _fn.memoize)(this.startWatchingFile.bind(this));
100
+ /** Watch the file and warn to reload the CLI if it changes. */ this.watchFile = (0, _fn.memoize)(this.startWatchingFile.bind(this));
101
101
  FileNotifier.instances.push(this);
102
102
  }
103
103
  /** Get the file in the project. */ resolveFilePath() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/FileNotifier.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { watchFile } from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { memoize } from './fn';\nimport * as Log from '../log';\n\nconst debug = require('debug')('expo:utils:fileNotifier') as typeof console.log;\n\n/** Observes and reports file changes. */\nexport class FileNotifier {\n static instances: FileNotifier[] = [];\n\n static stopAll() {\n for (const instance of FileNotifier.instances) {\n instance.stopObserving();\n }\n }\n\n private unsubscribe: (() => void) | null = null;\n\n constructor(\n /** Project root to resolve the module IDs relative to. */\n private projectRoot: string,\n /** List of module IDs sorted by priority. Only the first file that exists will be observed. */\n private moduleIds: string[],\n private settings: {\n /** An additional warning message to add to the notice. */\n additionalWarning?: string;\n } = {}\n ) {\n FileNotifier.instances.push(this);\n }\n\n /** Get the file in the project. */\n private resolveFilePath(): string | null {\n for (const moduleId of this.moduleIds) {\n const filePath = resolveFrom.silent(this.projectRoot, moduleId);\n if (filePath) {\n return filePath;\n }\n }\n return null;\n }\n\n public startObserving(callback?: (cur: any, prev: any) => void) {\n const configPath = this.resolveFilePath();\n if (configPath) {\n debug(`Observing ${configPath}`);\n return this.watchFile(configPath, callback);\n }\n return configPath;\n }\n\n public stopObserving() {\n this.unsubscribe?.();\n }\n\n /** Watch the file and warn to reload the CLI if it changes. */\n public watchFile = memoize(this.startWatchingFile.bind(this));\n\n private startWatchingFile(filePath: string, callback?: (cur: any, prev: any) => void): string {\n const configName = path.relative(this.projectRoot, filePath);\n const listener = (cur: any, prev: any) => {\n if (prev.size || cur.size) {\n Log.log(\n `\\u203A Detected a change in ${chalk.bold(\n configName\n )}. Restart the server to see the new results.` + (this.settings.additionalWarning || '')\n );\n }\n };\n\n const watcher = watchFile(filePath, callback ?? listener);\n\n this.unsubscribe = () => {\n watcher.unref();\n };\n\n return filePath;\n }\n}\n"],"names":["FileNotifier","debug","require","instances","stopAll","instance","stopObserving","constructor","projectRoot","moduleIds","settings","unsubscribe","watchFile","memoize","startWatchingFile","bind","push","resolveFilePath","moduleId","filePath","resolveFrom","silent","startObserving","callback","configPath","configName","path","relative","listener","cur","prev","size","Log","log","chalk","bold","additionalWarning","watcher","unref"],"mappings":";;;;+BAWaA;;;eAAAA;;;;gEAXK;;;;;;;yBACQ;;;;;;;gEACT;;;;;;;gEACO;;;;;;oBAEA;6DACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,MAAMF;qBACJG,YAA4B,EAAE;IAErC,OAAOC,UAAU;QACf,KAAK,MAAMC,YAAYL,aAAaG,SAAS,CAAE;YAC7CE,SAASC,aAAa;QACxB;IACF;IAIAC,YACE,wDAAwD,GACxD,AAAQC,WAAmB,EAC3B,6FAA6F,GAC7F,AAAQC,SAAmB,EAC3B,AAAQC,WAGJ,CAAC,CAAC,CACN;aAPQF,cAAAA;aAEAC,YAAAA;aACAC,WAAAA;aAPFC,cAAmC;aAwCpCC,YAAYC,IAAAA,WAAO,EAAC,IAAI,CAACC,iBAAiB,CAACC,IAAI,CAAC,IAAI;QA5BzDf,aAAaG,SAAS,CAACa,IAAI,CAAC,IAAI;IAClC;IAEA,iCAAiC,GACjC,AAAQC,kBAAiC;QACvC,KAAK,MAAMC,YAAY,IAAI,CAACT,SAAS,CAAE;YACrC,MAAMU,WAAWC,sBAAW,CAACC,MAAM,CAAC,IAAI,CAACb,WAAW,EAAEU;YACtD,IAAIC,UAAU;gBACZ,OAAOA;YACT;QACF;QACA,OAAO;IACT;IAEOG,eAAeC,QAAwC,EAAE;QAC9D,MAAMC,aAAa,IAAI,CAACP,eAAe;QACvC,IAAIO,YAAY;YACdvB,MAAM,CAAC,UAAU,EAAEuB,YAAY;YAC/B,OAAO,IAAI,CAACZ,SAAS,CAACY,YAAYD;QACpC;QACA,OAAOC;IACT;IAEOlB,gBAAgB;QACrB,IAAI,CAACK,WAAW,oBAAhB,IAAI,CAACA,WAAW,MAAhB,IAAI;IACN;IAKQG,kBAAkBK,QAAgB,EAAEI,QAAwC,EAAU;QAC5F,MAAME,aAAaC,eAAI,CAACC,QAAQ,CAAC,IAAI,CAACnB,WAAW,EAAEW;QACnD,MAAMS,WAAW,CAACC,KAAUC;YAC1B,IAAIA,KAAKC,IAAI,IAAIF,IAAIE,IAAI,EAAE;gBACzBC,KAAIC,GAAG,CACL,CAAC,4BAA4B,EAAEC,gBAAK,CAACC,IAAI,CACvCV,YACA,4CAA4C,CAAC,GAAI,CAAA,IAAI,CAACf,QAAQ,CAAC0B,iBAAiB,IAAI,EAAC;YAE3F;QACF;QAEA,MAAMC,UAAUzB,IAAAA,eAAS,EAACO,UAAUI,YAAYK;QAEhD,IAAI,CAACjB,WAAW,GAAG;YACjB0B,QAAQC,KAAK;QACf;QAEA,OAAOnB;IACT;AACF"}
1
+ {"version":3,"sources":["../../../src/utils/FileNotifier.ts"],"sourcesContent":["import chalk from 'chalk';\nimport { watchFile } from 'fs';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\n\nimport { memoize } from './fn';\nimport * as Log from '../log';\n\nconst debug = require('debug')('expo:utils:fileNotifier') as typeof console.log;\n\n/** Observes and reports file changes. */\nexport class FileNotifier {\n static instances: FileNotifier[] = [];\n\n static stopAll() {\n for (const instance of FileNotifier.instances) {\n instance.stopObserving();\n }\n }\n\n private unsubscribe: (() => void) | null = null;\n\n constructor(\n /** Project root to resolve the module IDs relative to. */\n private projectRoot: string,\n /** List of module IDs sorted by priority. Only the first file that exists will be observed. */\n private moduleIds: string[],\n private settings: {\n /** An additional warning message to add to the notice. */\n additionalWarning?: string;\n } = {}\n ) {\n FileNotifier.instances.push(this);\n }\n\n /** Get the file in the project. */\n private resolveFilePath(): string | null {\n for (const moduleId of this.moduleIds) {\n const filePath = resolveFrom.silent(this.projectRoot, moduleId);\n if (filePath) {\n return filePath;\n }\n }\n return null;\n }\n\n public startObserving(callback?: (cur: any, prev: any) => void) {\n const configPath = this.resolveFilePath();\n if (configPath) {\n debug(`Observing ${configPath}`);\n return this.watchFile(configPath, callback);\n }\n return configPath;\n }\n\n public stopObserving() {\n this.unsubscribe?.();\n }\n\n /** Watch the file and warn to reload the CLI if it changes. */\n public watchFile = memoize(this.startWatchingFile.bind(this));\n\n private startWatchingFile(filePath: string, callback?: (cur: any, prev: any) => void): string {\n const configName = path.relative(this.projectRoot, filePath);\n const listener = (cur: any, prev: any) => {\n if (prev.size || cur.size) {\n Log.log(\n `\\u203A Detected a change in ${chalk.bold(\n configName\n )}. Restart the server to see the new results.` + (this.settings.additionalWarning || '')\n );\n }\n };\n\n const watcher = watchFile(filePath, callback ?? listener);\n\n this.unsubscribe = () => {\n watcher.unref();\n };\n\n return filePath;\n }\n}\n"],"names":["FileNotifier","debug","require","instances","stopAll","instance","stopObserving","projectRoot","moduleIds","settings","unsubscribe","watchFile","memoize","startWatchingFile","bind","push","resolveFilePath","moduleId","filePath","resolveFrom","silent","startObserving","callback","configPath","configName","path","relative","listener","cur","prev","size","Log","log","chalk","bold","additionalWarning","watcher","unref"],"mappings":";;;;+BAWaA;;;eAAAA;;;;gEAXK;;;;;;;yBACQ;;;;;;;gEACT;;;;;;;gEACO;;;;;;oBAEA;6DACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAErB,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,MAAMF;qBACJG,YAA4B,EAAE;IAErC,OAAOC,UAAU;QACf,KAAK,MAAMC,YAAYL,aAAaG,SAAS,CAAE;YAC7CE,SAASC,aAAa;QACxB;IACF;IAIA,YACE,wDAAwD,GACxD,AAAQC,WAAmB,EAC3B,6FAA6F,GAC7F,AAAQC,SAAmB,EAC3B,AAAQC,WAGJ,CAAC,CAAC,CACN;aAPQF,cAAAA;aAEAC,YAAAA;aACAC,WAAAA;aAPFC,cAAmC;QAuC3C,6DAA6D,QACtDC,YAAYC,IAAAA,WAAO,EAAC,IAAI,CAACC,iBAAiB,CAACC,IAAI,CAAC,IAAI;QA5BzDd,aAAaG,SAAS,CAACY,IAAI,CAAC,IAAI;IAClC;IAEA,iCAAiC,GACjC,AAAQC,kBAAiC;QACvC,KAAK,MAAMC,YAAY,IAAI,CAACT,SAAS,CAAE;YACrC,MAAMU,WAAWC,sBAAW,CAACC,MAAM,CAAC,IAAI,CAACb,WAAW,EAAEU;YACtD,IAAIC,UAAU;gBACZ,OAAOA;YACT;QACF;QACA,OAAO;IACT;IAEOG,eAAeC,QAAwC,EAAE;QAC9D,MAAMC,aAAa,IAAI,CAACP,eAAe;QACvC,IAAIO,YAAY;YACdtB,MAAM,CAAC,UAAU,EAAEsB,YAAY;YAC/B,OAAO,IAAI,CAACZ,SAAS,CAACY,YAAYD;QACpC;QACA,OAAOC;IACT;IAEOjB,gBAAgB;QACrB,IAAI,CAACI,WAAW,oBAAhB,IAAI,CAACA,WAAW,MAAhB,IAAI;IACN;IAKQG,kBAAkBK,QAAgB,EAAEI,QAAwC,EAAU;QAC5F,MAAME,aAAaC,eAAI,CAACC,QAAQ,CAAC,IAAI,CAACnB,WAAW,EAAEW;QACnD,MAAMS,WAAW,CAACC,KAAUC;YAC1B,IAAIA,KAAKC,IAAI,IAAIF,IAAIE,IAAI,EAAE;gBACzBC,KAAIC,GAAG,CACL,CAAC,4BAA4B,EAAEC,gBAAK,CAACC,IAAI,CACvCV,YACA,4CAA4C,CAAC,GAAI,CAAA,IAAI,CAACf,QAAQ,CAAC0B,iBAAiB,IAAI,EAAC;YAE3F;QACF;QAEA,MAAMC,UAAUzB,IAAAA,eAAS,EAACO,UAAUI,YAAYK;QAEhD,IAAI,CAACjB,WAAW,GAAG;YACjB0B,QAAQC,KAAK;QACf;QAEA,OAAOnB;IACT;AACF"}