@depup/expo__cli 55.0.16-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 (782) hide show
  1. package/README.md +55 -0
  2. package/add-module.js +8 -0
  3. package/build/bin/cli +278 -0
  4. package/build/bin/cli.map +1 -0
  5. package/build/metro-require/require.js +608 -0
  6. package/build/src/api/endpoint.js +39 -0
  7. package/build/src/api/endpoint.js.map +1 -0
  8. package/build/src/api/getExpoGoIntermediateCertificate.js +23 -0
  9. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -0
  10. package/build/src/api/getExpoSchema.js +97 -0
  11. package/build/src/api/getExpoSchema.js.map +1 -0
  12. package/build/src/api/getNativeModuleVersions.js +37 -0
  13. package/build/src/api/getNativeModuleVersions.js.map +1 -0
  14. package/build/src/api/getProjectDevelopmentCertificate.js +26 -0
  15. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -0
  16. package/build/src/api/getVersions.js +29 -0
  17. package/build/src/api/getVersions.js.map +1 -0
  18. package/build/src/api/graphql/client.js +204 -0
  19. package/build/src/api/graphql/client.js.map +1 -0
  20. package/build/src/api/graphql/queries/AppQuery.js +40 -0
  21. package/build/src/api/graphql/queries/AppQuery.js.map +1 -0
  22. package/build/src/api/graphql/queries/UserQuery.js +63 -0
  23. package/build/src/api/graphql/queries/UserQuery.js.map +1 -0
  24. package/build/src/api/rest/cache/FileSystemResponseCache.js +184 -0
  25. package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -0
  26. package/build/src/api/rest/cache/ResponseCache.js +116 -0
  27. package/build/src/api/rest/cache/ResponseCache.js.map +1 -0
  28. package/build/src/api/rest/cache/wrapFetchWithCache.js +76 -0
  29. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -0
  30. package/build/src/api/rest/client.js +168 -0
  31. package/build/src/api/rest/client.js.map +1 -0
  32. package/build/src/api/rest/client.types.js +6 -0
  33. package/build/src/api/rest/client.types.js.map +1 -0
  34. package/build/src/api/rest/wrapFetchWithBaseUrl.js +32 -0
  35. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -0
  36. package/build/src/api/rest/wrapFetchWithOffline.js +26 -0
  37. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -0
  38. package/build/src/api/rest/wrapFetchWithProgress.js +108 -0
  39. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -0
  40. package/build/src/api/rest/wrapFetchWithUserAgent.js +34 -0
  41. package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -0
  42. package/build/src/api/settings.js +33 -0
  43. package/build/src/api/settings.js.map +1 -0
  44. package/build/src/api/updateDevelopmentSession.js +100 -0
  45. package/build/src/api/updateDevelopmentSession.js.map +1 -0
  46. package/build/src/api/user/UserSettings.js +183 -0
  47. package/build/src/api/user/UserSettings.js.map +1 -0
  48. package/build/src/api/user/actions.js +167 -0
  49. package/build/src/api/user/actions.js.map +1 -0
  50. package/build/src/api/user/expoSsoLauncher.js +149 -0
  51. package/build/src/api/user/expoSsoLauncher.js.map +1 -0
  52. package/build/src/api/user/otp.js +177 -0
  53. package/build/src/api/user/otp.js.map +1 -0
  54. package/build/src/api/user/user.js +154 -0
  55. package/build/src/api/user/user.js.map +1 -0
  56. package/build/src/config/configAsync.js +180 -0
  57. package/build/src/config/configAsync.js.map +1 -0
  58. package/build/src/config/index.js +101 -0
  59. package/build/src/config/index.js.map +1 -0
  60. package/build/src/customize/customizeAsync.js +57 -0
  61. package/build/src/customize/customizeAsync.js.map +1 -0
  62. package/build/src/customize/generate.js +94 -0
  63. package/build/src/customize/generate.js.map +1 -0
  64. package/build/src/customize/index.js +51 -0
  65. package/build/src/customize/index.js.map +1 -0
  66. package/build/src/customize/resolveOptions.js +23 -0
  67. package/build/src/customize/resolveOptions.js.map +1 -0
  68. package/build/src/customize/templates.js +189 -0
  69. package/build/src/customize/templates.js.map +1 -0
  70. package/build/src/customize/typescript.js +81 -0
  71. package/build/src/customize/typescript.js.map +1 -0
  72. package/build/src/events/builder.js +6 -0
  73. package/build/src/events/builder.js.map +1 -0
  74. package/build/src/events/index.js +132 -0
  75. package/build/src/events/index.js.map +1 -0
  76. package/build/src/events/stream.js +303 -0
  77. package/build/src/events/stream.js.map +1 -0
  78. package/build/src/events/types.js +6 -0
  79. package/build/src/events/types.js.map +1 -0
  80. package/build/src/expoUpdatesExports.js +28 -0
  81. package/build/src/expoUpdatesExports.js.map +1 -0
  82. package/build/src/export/createMetadataJson.js +55 -0
  83. package/build/src/export/createMetadataJson.js.map +1 -0
  84. package/build/src/export/embed/exportEager.js +33 -0
  85. package/build/src/export/embed/exportEager.js.map +1 -0
  86. package/build/src/export/embed/exportEmbedAsync.js +457 -0
  87. package/build/src/export/embed/exportEmbedAsync.js.map +1 -0
  88. package/build/src/export/embed/exportServer.js +353 -0
  89. package/build/src/export/embed/exportServer.js.map +1 -0
  90. package/build/src/export/embed/index.js +161 -0
  91. package/build/src/export/embed/index.js.map +1 -0
  92. package/build/src/export/embed/resolveOptions.js +159 -0
  93. package/build/src/export/embed/resolveOptions.js.map +1 -0
  94. package/build/src/export/embed/xcodeCompilerLogger.js +148 -0
  95. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -0
  96. package/build/src/export/exportApp.js +387 -0
  97. package/build/src/export/exportApp.js.map +1 -0
  98. package/build/src/export/exportAssets.js +245 -0
  99. package/build/src/export/exportAssets.js.map +1 -0
  100. package/build/src/export/exportAsync.js +103 -0
  101. package/build/src/export/exportAsync.js.map +1 -0
  102. package/build/src/export/exportDomComponents.js +185 -0
  103. package/build/src/export/exportDomComponents.js.map +1 -0
  104. package/build/src/export/exportHermes.js +251 -0
  105. package/build/src/export/exportHermes.js.map +1 -0
  106. package/build/src/export/exportStaticAsync.js +623 -0
  107. package/build/src/export/exportStaticAsync.js.map +1 -0
  108. package/build/src/export/favicon.js +138 -0
  109. package/build/src/export/favicon.js.map +1 -0
  110. package/build/src/export/getPublicExpoManifest.js +39 -0
  111. package/build/src/export/getPublicExpoManifest.js.map +1 -0
  112. package/build/src/export/getResolvedLocales.js +52 -0
  113. package/build/src/export/getResolvedLocales.js.map +1 -0
  114. package/build/src/export/html.js +33 -0
  115. package/build/src/export/html.js.map +1 -0
  116. package/build/src/export/index.js +146 -0
  117. package/build/src/export/index.js.map +1 -0
  118. package/build/src/export/metroAssetLocalPath.js +130 -0
  119. package/build/src/export/metroAssetLocalPath.js.map +1 -0
  120. package/build/src/export/persistMetroAssets.js +269 -0
  121. package/build/src/export/persistMetroAssets.js.map +1 -0
  122. package/build/src/export/publicFolder.js +61 -0
  123. package/build/src/export/publicFolder.js.map +1 -0
  124. package/build/src/export/resolveOptions.js +92 -0
  125. package/build/src/export/resolveOptions.js.map +1 -0
  126. package/build/src/export/saveAssets.js +273 -0
  127. package/build/src/export/saveAssets.js.map +1 -0
  128. package/build/src/export/web/exportWebAsync.js +57 -0
  129. package/build/src/export/web/exportWebAsync.js.map +1 -0
  130. package/build/src/export/web/index.js +92 -0
  131. package/build/src/export/web/index.js.map +1 -0
  132. package/build/src/export/web/resolveOptions.js +18 -0
  133. package/build/src/export/web/resolveOptions.js.map +1 -0
  134. package/build/src/export/writeContents.js +19 -0
  135. package/build/src/export/writeContents.js.map +1 -0
  136. package/build/src/install/applyPlugins.js +81 -0
  137. package/build/src/install/applyPlugins.js.map +1 -0
  138. package/build/src/install/checkPackages.js +157 -0
  139. package/build/src/install/checkPackages.js.map +1 -0
  140. package/build/src/install/fixPackages.js +111 -0
  141. package/build/src/install/fixPackages.js.map +1 -0
  142. package/build/src/install/index.js +64 -0
  143. package/build/src/install/index.js.map +1 -0
  144. package/build/src/install/installAsync.js +203 -0
  145. package/build/src/install/installAsync.js.map +1 -0
  146. package/build/src/install/installExpoPackage.js +124 -0
  147. package/build/src/install/installExpoPackage.js.map +1 -0
  148. package/build/src/install/resolveOptions.js +65 -0
  149. package/build/src/install/resolveOptions.js.map +1 -0
  150. package/build/src/install/utils/autoAddConfigPlugins.js +90 -0
  151. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -0
  152. package/build/src/install/utils/checkPackagesCompatibility.js +66 -0
  153. package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -0
  154. package/build/src/install/utils/parsePackageSpecifier.js +24 -0
  155. package/build/src/install/utils/parsePackageSpecifier.js.map +1 -0
  156. package/build/src/lint/ESlintPrerequisite.js +163 -0
  157. package/build/src/lint/ESlintPrerequisite.js.map +1 -0
  158. package/build/src/lint/index.js +68 -0
  159. package/build/src/lint/index.js.map +1 -0
  160. package/build/src/lint/lintAsync.js +183 -0
  161. package/build/src/lint/lintAsync.js.map +1 -0
  162. package/build/src/lint/resolveOptions.js +115 -0
  163. package/build/src/lint/resolveOptions.js.map +1 -0
  164. package/build/src/log.js +106 -0
  165. package/build/src/log.js.map +1 -0
  166. package/build/src/login/index.js +92 -0
  167. package/build/src/login/index.js.map +1 -0
  168. package/build/src/logout/index.js +70 -0
  169. package/build/src/logout/index.js.map +1 -0
  170. package/build/src/prebuild/clearNativeFolder.js +202 -0
  171. package/build/src/prebuild/clearNativeFolder.js.map +1 -0
  172. package/build/src/prebuild/configureProjectAsync.js +106 -0
  173. package/build/src/prebuild/configureProjectAsync.js.map +1 -0
  174. package/build/src/prebuild/copyTemplateFiles.js +95 -0
  175. package/build/src/prebuild/copyTemplateFiles.js.map +1 -0
  176. package/build/src/prebuild/ensureConfigAsync.js +32 -0
  177. package/build/src/prebuild/ensureConfigAsync.js.map +1 -0
  178. package/build/src/prebuild/index.js +122 -0
  179. package/build/src/prebuild/index.js.map +1 -0
  180. package/build/src/prebuild/prebuildAsync.js +192 -0
  181. package/build/src/prebuild/prebuildAsync.js.map +1 -0
  182. package/build/src/prebuild/renameTemplateAppName.js +135 -0
  183. package/build/src/prebuild/renameTemplateAppName.js.map +1 -0
  184. package/build/src/prebuild/resolveLocalTemplate.js +72 -0
  185. package/build/src/prebuild/resolveLocalTemplate.js.map +1 -0
  186. package/build/src/prebuild/resolveOptions.js +222 -0
  187. package/build/src/prebuild/resolveOptions.js.map +1 -0
  188. package/build/src/prebuild/resolveTemplate.js +216 -0
  189. package/build/src/prebuild/resolveTemplate.js.map +1 -0
  190. package/build/src/prebuild/updateFromTemplate.js +148 -0
  191. package/build/src/prebuild/updateFromTemplate.js.map +1 -0
  192. package/build/src/prebuild/updatePackageJson.js +305 -0
  193. package/build/src/prebuild/updatePackageJson.js.map +1 -0
  194. package/build/src/prebuild/validateTemplatePlatforms.js +85 -0
  195. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -0
  196. package/build/src/register/index.js +70 -0
  197. package/build/src/register/index.js.map +1 -0
  198. package/build/src/register/registerAsync.js +39 -0
  199. package/build/src/register/registerAsync.js.map +1 -0
  200. package/build/src/run/android/index.js +139 -0
  201. package/build/src/run/android/index.js.map +1 -0
  202. package/build/src/run/android/resolveDevice.js +28 -0
  203. package/build/src/run/android/resolveDevice.js.map +1 -0
  204. package/build/src/run/android/resolveGradlePropsAsync.js +82 -0
  205. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -0
  206. package/build/src/run/android/resolveInstallApkName.js +67 -0
  207. package/build/src/run/android/resolveInstallApkName.js.map +1 -0
  208. package/build/src/run/android/resolveLaunchProps.js +44 -0
  209. package/build/src/run/android/resolveLaunchProps.js.map +1 -0
  210. package/build/src/run/android/resolveOptions.js +43 -0
  211. package/build/src/run/android/resolveOptions.js.map +1 -0
  212. package/build/src/run/android/runAndroidAsync.js +157 -0
  213. package/build/src/run/android/runAndroidAsync.js.map +1 -0
  214. package/build/src/run/ensureNativeProject.js +53 -0
  215. package/build/src/run/ensureNativeProject.js.map +1 -0
  216. package/build/src/run/hints.js +46 -0
  217. package/build/src/run/hints.js.map +1 -0
  218. package/build/src/run/index.js +124 -0
  219. package/build/src/run/index.js.map +1 -0
  220. package/build/src/run/ios/XcodeBuild.js +382 -0
  221. package/build/src/run/ios/XcodeBuild.js.map +1 -0
  222. package/build/src/run/ios/XcodeBuild.types.js +6 -0
  223. package/build/src/run/ios/XcodeBuild.types.js.map +1 -0
  224. package/build/src/run/ios/appleDevice/AppleDevice.js +316 -0
  225. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -0
  226. package/build/src/run/ios/appleDevice/ClientManager.js +207 -0
  227. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -0
  228. package/build/src/run/ios/appleDevice/client/AFCClient.js +248 -0
  229. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -0
  230. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +149 -0
  231. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -0
  232. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +113 -0
  233. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -0
  234. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +186 -0
  235. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -0
  236. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +133 -0
  237. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -0
  238. package/build/src/run/ios/appleDevice/client/ServiceClient.js +38 -0
  239. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -0
  240. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +146 -0
  241. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -0
  242. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +153 -0
  243. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -0
  244. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +365 -0
  245. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -0
  246. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +167 -0
  247. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -0
  248. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +153 -0
  249. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -0
  250. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +111 -0
  251. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -0
  252. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +100 -0
  253. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -0
  254. package/build/src/run/ios/codeSigning/Security.js +116 -0
  255. package/build/src/run/ios/codeSigning/Security.js.map +1 -0
  256. package/build/src/run/ios/codeSigning/configureCodeSigning.js +108 -0
  257. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -0
  258. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +165 -0
  259. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -0
  260. package/build/src/run/ios/codeSigning/settings.js +27 -0
  261. package/build/src/run/ios/codeSigning/settings.js.map +1 -0
  262. package/build/src/run/ios/codeSigning/simulatorCodeSigning.js +67 -0
  263. package/build/src/run/ios/codeSigning/simulatorCodeSigning.js.map +1 -0
  264. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +103 -0
  265. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -0
  266. package/build/src/run/ios/index.js +137 -0
  267. package/build/src/run/ios/index.js.map +1 -0
  268. package/build/src/run/ios/launchApp.js +142 -0
  269. package/build/src/run/ios/launchApp.js.map +1 -0
  270. package/build/src/run/ios/options/appleDestinations.js +126 -0
  271. package/build/src/run/ios/options/appleDestinations.js.map +1 -0
  272. package/build/src/run/ios/options/promptDevice.js +64 -0
  273. package/build/src/run/ios/options/promptDevice.js.map +1 -0
  274. package/build/src/run/ios/options/resolveDevice.js +151 -0
  275. package/build/src/run/ios/options/resolveDevice.js.map +1 -0
  276. package/build/src/run/ios/options/resolveNativeScheme.js +147 -0
  277. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -0
  278. package/build/src/run/ios/options/resolveOptions.js +66 -0
  279. package/build/src/run/ios/options/resolveOptions.js.map +1 -0
  280. package/build/src/run/ios/options/resolveXcodeProject.js +50 -0
  281. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -0
  282. package/build/src/run/ios/runIosAsync.js +255 -0
  283. package/build/src/run/ios/runIosAsync.js.map +1 -0
  284. package/build/src/run/ios/validateExternalBinary.js +113 -0
  285. package/build/src/run/ios/validateExternalBinary.js.map +1 -0
  286. package/build/src/run/resolveBundlerProps.js +38 -0
  287. package/build/src/run/resolveBundlerProps.js.map +1 -0
  288. package/build/src/run/startBundler.js +119 -0
  289. package/build/src/run/startBundler.js.map +1 -0
  290. package/build/src/serve/index.js +95 -0
  291. package/build/src/serve/index.js.map +1 -0
  292. package/build/src/serve/serveAsync.js +227 -0
  293. package/build/src/serve/serveAsync.js.map +1 -0
  294. package/build/src/start/detectDevClient.js +53 -0
  295. package/build/src/start/detectDevClient.js.map +1 -0
  296. package/build/src/start/doctor/Prerequisite.js +60 -0
  297. package/build/src/start/doctor/Prerequisite.js.map +1 -0
  298. package/build/src/start/doctor/SecurityBinPrerequisite.js +38 -0
  299. package/build/src/start/doctor/SecurityBinPrerequisite.js.map +1 -0
  300. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +144 -0
  301. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -0
  302. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js +106 -0
  303. package/build/src/start/doctor/apple/XcodeDeveloperDiskImagePrerequisite.js.map +1 -0
  304. package/build/src/start/doctor/apple/XcodePrerequisite.js +239 -0
  305. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -0
  306. package/build/src/start/doctor/apple/XcrunPrerequisite.js +88 -0
  307. package/build/src/start/doctor/apple/XcrunPrerequisite.js.map +1 -0
  308. package/build/src/start/doctor/dependencies/bundledNativeModules.js +112 -0
  309. package/build/src/start/doctor/dependencies/bundledNativeModules.js.map +1 -0
  310. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +192 -0
  311. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -0
  312. package/build/src/start/doctor/dependencies/getMissingPackages.js +108 -0
  313. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -0
  314. package/build/src/start/doctor/dependencies/getVersionedPackages.js +165 -0
  315. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -0
  316. package/build/src/start/doctor/dependencies/resolvePackages.js +95 -0
  317. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -0
  318. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +262 -0
  319. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -0
  320. package/build/src/start/doctor/ngrok/ExternalModule.js +214 -0
  321. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -0
  322. package/build/src/start/doctor/ngrok/NgrokResolver.js +33 -0
  323. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -0
  324. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +205 -0
  325. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -0
  326. package/build/src/start/doctor/typescript/updateTSConfig.js +144 -0
  327. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -0
  328. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +164 -0
  329. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -0
  330. package/build/src/start/index.js +151 -0
  331. package/build/src/start/index.js.map +1 -0
  332. package/build/src/start/interface/KeyPressHandler.js +126 -0
  333. package/build/src/start/interface/KeyPressHandler.js.map +1 -0
  334. package/build/src/start/interface/cliExtensionMenuItemHandler.js +173 -0
  335. package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -0
  336. package/build/src/start/interface/commandsTable.js +273 -0
  337. package/build/src/start/interface/commandsTable.js.map +1 -0
  338. package/build/src/start/interface/createDevToolsMenuItems.js +159 -0
  339. package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -0
  340. package/build/src/start/interface/interactiveActions.js +225 -0
  341. package/build/src/start/interface/interactiveActions.js.map +1 -0
  342. package/build/src/start/interface/startInterface.js +261 -0
  343. package/build/src/start/interface/startInterface.js.map +1 -0
  344. package/build/src/start/platforms/AppIdResolver.js +55 -0
  345. package/build/src/start/platforms/AppIdResolver.js.map +1 -0
  346. package/build/src/start/platforms/DeviceManager.js +74 -0
  347. package/build/src/start/platforms/DeviceManager.js.map +1 -0
  348. package/build/src/start/platforms/ExpoGoInstaller.js +167 -0
  349. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -0
  350. package/build/src/start/platforms/PlatformManager.js +149 -0
  351. package/build/src/start/platforms/PlatformManager.js.map +1 -0
  352. package/build/src/start/platforms/android/ADBServer.js +139 -0
  353. package/build/src/start/platforms/android/ADBServer.js.map +1 -0
  354. package/build/src/start/platforms/android/AndroidAppIdResolver.js +54 -0
  355. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -0
  356. package/build/src/start/platforms/android/AndroidDeviceManager.js +216 -0
  357. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -0
  358. package/build/src/start/platforms/android/AndroidPlatformManager.js +80 -0
  359. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -0
  360. package/build/src/start/platforms/android/AndroidSdk.js +79 -0
  361. package/build/src/start/platforms/android/AndroidSdk.js.map +1 -0
  362. package/build/src/start/platforms/android/activateWindow.js +117 -0
  363. package/build/src/start/platforms/android/activateWindow.js.map +1 -0
  364. package/build/src/start/platforms/android/adb.js +367 -0
  365. package/build/src/start/platforms/android/adb.js.map +1 -0
  366. package/build/src/start/platforms/android/adbReverse.js +129 -0
  367. package/build/src/start/platforms/android/adbReverse.js.map +1 -0
  368. package/build/src/start/platforms/android/emulator.js +185 -0
  369. package/build/src/start/platforms/android/emulator.js.map +1 -0
  370. package/build/src/start/platforms/android/getDevices.js +39 -0
  371. package/build/src/start/platforms/android/getDevices.js.map +1 -0
  372. package/build/src/start/platforms/android/gradle.js +125 -0
  373. package/build/src/start/platforms/android/gradle.js.map +1 -0
  374. package/build/src/start/platforms/android/promptAndroidDevice.js +82 -0
  375. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -0
  376. package/build/src/start/platforms/ios/AppleAppIdResolver.js +76 -0
  377. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -0
  378. package/build/src/start/platforms/ios/AppleDeviceManager.js +283 -0
  379. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -0
  380. package/build/src/start/platforms/ios/ApplePlatformManager.js +34 -0
  381. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -0
  382. package/build/src/start/platforms/ios/assertSystemRequirements.js +22 -0
  383. package/build/src/start/platforms/ios/assertSystemRequirements.js.map +1 -0
  384. package/build/src/start/platforms/ios/devicectl.js +398 -0
  385. package/build/src/start/platforms/ios/devicectl.js.map +1 -0
  386. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +122 -0
  387. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -0
  388. package/build/src/start/platforms/ios/getBestSimulator.js +148 -0
  389. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -0
  390. package/build/src/start/platforms/ios/promptAppleDevice.js +72 -0
  391. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -0
  392. package/build/src/start/platforms/ios/simctl.js +386 -0
  393. package/build/src/start/platforms/ios/simctl.js.map +1 -0
  394. package/build/src/start/platforms/ios/simctlLogging.js +276 -0
  395. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -0
  396. package/build/src/start/platforms/ios/xcrun.js +74 -0
  397. package/build/src/start/platforms/ios/xcrun.js.map +1 -0
  398. package/build/src/start/project/devices.js +92 -0
  399. package/build/src/start/project/devices.js.map +1 -0
  400. package/build/src/start/project/dotExpo.js +109 -0
  401. package/build/src/start/project/dotExpo.js.map +1 -0
  402. package/build/src/start/project/settings.js +17 -0
  403. package/build/src/start/project/settings.js.map +1 -0
  404. package/build/src/start/resolveOptions.js +173 -0
  405. package/build/src/start/resolveOptions.js.map +1 -0
  406. package/build/src/start/server/AsyncNgrok.js +269 -0
  407. package/build/src/start/server/AsyncNgrok.js.map +1 -0
  408. package/build/src/start/server/AsyncWsTunnel.js +156 -0
  409. package/build/src/start/server/AsyncWsTunnel.js.map +1 -0
  410. package/build/src/start/server/Bonjour.js +103 -0
  411. package/build/src/start/server/Bonjour.js.map +1 -0
  412. package/build/src/start/server/BundlerDevServer.js +410 -0
  413. package/build/src/start/server/BundlerDevServer.js.map +1 -0
  414. package/build/src/start/server/DevServerManager.js +259 -0
  415. package/build/src/start/server/DevServerManager.js.map +1 -0
  416. package/build/src/start/server/DevToolsPlugin.js +60 -0
  417. package/build/src/start/server/DevToolsPlugin.js.map +1 -0
  418. package/build/src/start/server/DevToolsPlugin.schema.js +79 -0
  419. package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -0
  420. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +119 -0
  421. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -0
  422. package/build/src/start/server/DevToolsPluginCliExtensionResults.js +61 -0
  423. package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -0
  424. package/build/src/start/server/DevToolsPluginManager.js +60 -0
  425. package/build/src/start/server/DevToolsPluginManager.js.map +1 -0
  426. package/build/src/start/server/DevelopmentSession.js +132 -0
  427. package/build/src/start/server/DevelopmentSession.js.map +1 -0
  428. package/build/src/start/server/MCP.js +106 -0
  429. package/build/src/start/server/MCP.js.map +1 -0
  430. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +86 -0
  431. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -0
  432. package/build/src/start/server/UrlCreator.js +219 -0
  433. package/build/src/start/server/UrlCreator.js.map +1 -0
  434. package/build/src/start/server/createMCPDevToolsExtensionSchema.js +67 -0
  435. package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -0
  436. package/build/src/start/server/getStaticRenderFunctions.js +171 -0
  437. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -0
  438. package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +39 -0
  439. package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -0
  440. package/build/src/start/server/metro/MetroBundlerDevServer.js +1654 -0
  441. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -0
  442. package/build/src/start/server/metro/MetroTerminalReporter.js +438 -0
  443. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -0
  444. package/build/src/start/server/metro/TerminalReporter.js +180 -0
  445. package/build/src/start/server/metro/TerminalReporter.js.map +1 -0
  446. package/build/src/start/server/metro/TerminalReporter.types.js +6 -0
  447. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -0
  448. package/build/src/start/server/metro/createExpoAutolinkingResolver.js +123 -0
  449. package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -0
  450. package/build/src/start/server/metro/createExpoFallbackResolver.js +143 -0
  451. package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -0
  452. package/build/src/start/server/metro/createServerComponentsMiddleware.js +501 -0
  453. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -0
  454. package/build/src/start/server/metro/createServerRouteMiddleware.js +229 -0
  455. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -0
  456. package/build/src/start/server/metro/debugging/AtlasPrerequisite.js +49 -0
  457. package/build/src/start/server/metro/debugging/AtlasPrerequisite.js.map +1 -0
  458. package/build/src/start/server/metro/debugging/MessageHandler.js +30 -0
  459. package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -0
  460. package/build/src/start/server/metro/debugging/attachAtlas.js +103 -0
  461. package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -0
  462. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +127 -0
  463. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -0
  464. package/build/src/start/server/metro/debugging/createHandlersFactory.js +58 -0
  465. package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -0
  466. package/build/src/start/server/metro/debugging/getDebuggerType.js +20 -0
  467. package/build/src/start/server/metro/debugging/getDebuggerType.js.map +1 -0
  468. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +44 -0
  469. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -0
  470. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js +30 -0
  471. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -0
  472. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js +27 -0
  473. package/build/src/start/server/metro/debugging/messageHandlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -0
  474. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js +33 -0
  475. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeCallFunctionOn.js.map +1 -0
  476. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeEvaluate.js +56 -0
  477. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeEvaluate.js.map +1 -0
  478. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js +49 -0
  479. package/build/src/start/server/metro/debugging/messageHandlers/VscodeRuntimeGetProperties.js.map +1 -0
  480. package/build/src/start/server/metro/debugging/pageIsSupported.js +17 -0
  481. package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -0
  482. package/build/src/start/server/metro/debugging/types.js +6 -0
  483. package/build/src/start/server/metro/debugging/types.js.map +1 -0
  484. package/build/src/start/server/metro/dev-server/compression.js +45 -0
  485. package/build/src/start/server/metro/dev-server/compression.js.map +1 -0
  486. package/build/src/start/server/metro/dev-server/createEventSocket.js +103 -0
  487. package/build/src/start/server/metro/dev-server/createEventSocket.js.map +1 -0
  488. package/build/src/start/server/metro/dev-server/createMessageSocket.js +129 -0
  489. package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -0
  490. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +82 -0
  491. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -0
  492. package/build/src/start/server/metro/dev-server/utils/createSocketBroadcaster.js +27 -0
  493. package/build/src/start/server/metro/dev-server/utils/createSocketBroadcaster.js.map +1 -0
  494. package/build/src/start/server/metro/dev-server/utils/createSocketMap.js +43 -0
  495. package/build/src/start/server/metro/dev-server/utils/createSocketMap.js.map +1 -0
  496. package/build/src/start/server/metro/dev-server/utils/socketMessages.js +41 -0
  497. package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -0
  498. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js +17 -0
  499. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -0
  500. package/build/src/start/server/metro/externals.js +89 -0
  501. package/build/src/start/server/metro/externals.js.map +1 -0
  502. package/build/src/start/server/metro/fetchRouterManifest.js +83 -0
  503. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -0
  504. package/build/src/start/server/metro/getCssModulesFromBundler.js +114 -0
  505. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -0
  506. package/build/src/start/server/metro/instantiateMetro.js +492 -0
  507. package/build/src/start/server/metro/instantiateMetro.js.map +1 -0
  508. package/build/src/start/server/metro/log-box/LogBoxLog.js +211 -0
  509. package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -0
  510. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +124 -0
  511. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -0
  512. package/build/src/start/server/metro/log-box/formatProjectFilePath.js +46 -0
  513. package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -0
  514. package/build/src/start/server/metro/metroErrorInterface.js +403 -0
  515. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -0
  516. package/build/src/start/server/metro/metroErrors.js +27 -0
  517. package/build/src/start/server/metro/metroErrors.js.map +1 -0
  518. package/build/src/start/server/metro/metroVirtualModules.js +92 -0
  519. package/build/src/start/server/metro/metroVirtualModules.js.map +1 -0
  520. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +62 -0
  521. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -0
  522. package/build/src/start/server/metro/resolveLoader.js +68 -0
  523. package/build/src/start/server/metro/resolveLoader.js.map +1 -0
  524. package/build/src/start/server/metro/router.js +218 -0
  525. package/build/src/start/server/metro/router.js.map +1 -0
  526. package/build/src/start/server/metro/runServer-fork.js +179 -0
  527. package/build/src/start/server/metro/runServer-fork.js.map +1 -0
  528. package/build/src/start/server/metro/serializeHtml.js +138 -0
  529. package/build/src/start/server/metro/serializeHtml.js.map +1 -0
  530. package/build/src/start/server/metro/symbolicate.js +6 -0
  531. package/build/src/start/server/metro/symbolicate.js.map +1 -0
  532. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +103 -0
  533. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -0
  534. package/build/src/start/server/metro/withMetroErrorReportingResolver.js +266 -0
  535. package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -0
  536. package/build/src/start/server/metro/withMetroMultiPlatform.js +748 -0
  537. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -0
  538. package/build/src/start/server/metro/withMetroResolvers.js +110 -0
  539. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -0
  540. package/build/src/start/server/metro/withMetroSupervisingTransformWorker.js +63 -0
  541. package/build/src/start/server/metro/withMetroSupervisingTransformWorker.js.map +1 -0
  542. package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js +32 -0
  543. package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -0
  544. package/build/src/start/server/middleware/CorsMiddleware.js +92 -0
  545. package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -0
  546. package/build/src/start/server/middleware/CreateFileMiddleware.js +166 -0
  547. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -0
  548. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +78 -0
  549. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -0
  550. package/build/src/start/server/middleware/DomComponentsMiddleware.js +138 -0
  551. package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -0
  552. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +288 -0
  553. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -0
  554. package/build/src/start/server/middleware/ExpoMiddleware.js +121 -0
  555. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -0
  556. package/build/src/start/server/middleware/FaviconMiddleware.js +52 -0
  557. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -0
  558. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js +29 -0
  559. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -0
  560. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +116 -0
  561. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -0
  562. package/build/src/start/server/middleware/ManifestMiddleware.js +362 -0
  563. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -0
  564. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +103 -0
  565. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -0
  566. package/build/src/start/server/middleware/ServeStaticMiddleware.js +85 -0
  567. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -0
  568. package/build/src/start/server/middleware/inspector/CdpClient.js +81 -0
  569. package/build/src/start/server/middleware/inspector/CdpClient.js.map +1 -0
  570. package/build/src/start/server/middleware/inspector/JsInspector.js +123 -0
  571. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -0
  572. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +91 -0
  573. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -0
  574. package/build/src/start/server/middleware/inspector/middlwareMutations.js +30 -0
  575. package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -0
  576. package/build/src/start/server/middleware/metroOptions.js +367 -0
  577. package/build/src/start/server/middleware/metroOptions.js.map +1 -0
  578. package/build/src/start/server/middleware/mutations.js +33 -0
  579. package/build/src/start/server/middleware/mutations.js.map +1 -0
  580. package/build/src/start/server/middleware/resolveAssets.js +154 -0
  581. package/build/src/start/server/middleware/resolveAssets.js.map +1 -0
  582. package/build/src/start/server/middleware/resolvePlatform.js +71 -0
  583. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -0
  584. package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js +38 -0
  585. package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -0
  586. package/build/src/start/server/middleware/server.types.js +6 -0
  587. package/build/src/start/server/middleware/server.types.js.map +1 -0
  588. package/build/src/start/server/openPlatforms.js +33 -0
  589. package/build/src/start/server/openPlatforms.js.map +1 -0
  590. package/build/src/start/server/platformBundlers.js +39 -0
  591. package/build/src/start/server/platformBundlers.js.map +1 -0
  592. package/build/src/start/server/serverLogLikeMetro.js +309 -0
  593. package/build/src/start/server/serverLogLikeMetro.js.map +1 -0
  594. package/build/src/start/server/type-generation/expo-env.js +51 -0
  595. package/build/src/start/server/type-generation/expo-env.js.map +1 -0
  596. package/build/src/start/server/type-generation/routes.js +510 -0
  597. package/build/src/start/server/type-generation/routes.js.map +1 -0
  598. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +79 -0
  599. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -0
  600. package/build/src/start/server/type-generation/tsconfig.js +122 -0
  601. package/build/src/start/server/type-generation/tsconfig.js.map +1 -0
  602. package/build/src/start/server/webTemplate.js +111 -0
  603. package/build/src/start/server/webTemplate.js.map +1 -0
  604. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +316 -0
  605. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -0
  606. package/build/src/start/server/webpack/compile.js +101 -0
  607. package/build/src/start/server/webpack/compile.js.map +1 -0
  608. package/build/src/start/server/webpack/formatWebpackMessages.js +106 -0
  609. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -0
  610. package/build/src/start/server/webpack/resolveFromProject.js +63 -0
  611. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -0
  612. package/build/src/start/server/webpack/tls.js +128 -0
  613. package/build/src/start/server/webpack/tls.js.map +1 -0
  614. package/build/src/start/startAsync.js +204 -0
  615. package/build/src/start/startAsync.js.map +1 -0
  616. package/build/src/types.d.ts +2 -0
  617. package/build/src/utils/FileNotifier.js +138 -0
  618. package/build/src/utils/FileNotifier.js.map +1 -0
  619. package/build/src/utils/ansi.js +22 -0
  620. package/build/src/utils/ansi.js.map +1 -0
  621. package/build/src/utils/args.js +141 -0
  622. package/build/src/utils/args.js.map +1 -0
  623. package/build/src/utils/array.js +92 -0
  624. package/build/src/utils/array.js.map +1 -0
  625. package/build/src/utils/build-cache-providers/helpers.js +61 -0
  626. package/build/src/utils/build-cache-providers/helpers.js.map +1 -0
  627. package/build/src/utils/build-cache-providers/index.js +283 -0
  628. package/build/src/utils/build-cache-providers/index.js.map +1 -0
  629. package/build/src/utils/cocoapods.js +258 -0
  630. package/build/src/utils/cocoapods.js.map +1 -0
  631. package/build/src/utils/codesigning.js +395 -0
  632. package/build/src/utils/codesigning.js.map +1 -0
  633. package/build/src/utils/createFileTransform.js +34 -0
  634. package/build/src/utils/createFileTransform.js.map +1 -0
  635. package/build/src/utils/createTempPath.js +68 -0
  636. package/build/src/utils/createTempPath.js.map +1 -0
  637. package/build/src/utils/delay.js +58 -0
  638. package/build/src/utils/delay.js.map +1 -0
  639. package/build/src/utils/dir.js +121 -0
  640. package/build/src/utils/dir.js.map +1 -0
  641. package/build/src/utils/downloadAppAsync.js +98 -0
  642. package/build/src/utils/downloadAppAsync.js.map +1 -0
  643. package/build/src/utils/downloadExpoGoAsync.js +170 -0
  644. package/build/src/utils/downloadExpoGoAsync.js.map +1 -0
  645. package/build/src/utils/editor.js +527 -0
  646. package/build/src/utils/editor.js.map +1 -0
  647. package/build/src/utils/env.js +266 -0
  648. package/build/src/utils/env.js.map +1 -0
  649. package/build/src/utils/errors.js +134 -0
  650. package/build/src/utils/errors.js.map +1 -0
  651. package/build/src/utils/exit.js +210 -0
  652. package/build/src/utils/exit.js.map +1 -0
  653. package/build/src/utils/expoUpdatesCli.js +120 -0
  654. package/build/src/utils/expoUpdatesCli.js.map +1 -0
  655. package/build/src/utils/fetch.js +41 -0
  656. package/build/src/utils/fetch.js.map +1 -0
  657. package/build/src/utils/filePath.js +42 -0
  658. package/build/src/utils/filePath.js.map +1 -0
  659. package/build/src/utils/findUp.js +61 -0
  660. package/build/src/utils/findUp.js.map +1 -0
  661. package/build/src/utils/fn.js +44 -0
  662. package/build/src/utils/fn.js.map +1 -0
  663. package/build/src/utils/freeport.js +70 -0
  664. package/build/src/utils/freeport.js.map +1 -0
  665. package/build/src/utils/getOrPromptApplicationId.js +259 -0
  666. package/build/src/utils/getOrPromptApplicationId.js.map +1 -0
  667. package/build/src/utils/getRunningProcess.js +181 -0
  668. package/build/src/utils/getRunningProcess.js.map +1 -0
  669. package/build/src/utils/git.js +132 -0
  670. package/build/src/utils/git.js.map +1 -0
  671. package/build/src/utils/glob.js +46 -0
  672. package/build/src/utils/glob.js.map +1 -0
  673. package/build/src/utils/interactive.js +17 -0
  674. package/build/src/utils/interactive.js.map +1 -0
  675. package/build/src/utils/ip.js +63 -0
  676. package/build/src/utils/ip.js.map +1 -0
  677. package/build/src/utils/isModuleSymlinked.js +54 -0
  678. package/build/src/utils/isModuleSymlinked.js.map +1 -0
  679. package/build/src/utils/link.js +55 -0
  680. package/build/src/utils/link.js.map +1 -0
  681. package/build/src/utils/mergeGitIgnorePaths.js +189 -0
  682. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -0
  683. package/build/src/utils/modifyConfigAsync.js +106 -0
  684. package/build/src/utils/modifyConfigAsync.js.map +1 -0
  685. package/build/src/utils/modifyConfigPlugins.js +79 -0
  686. package/build/src/utils/modifyConfigPlugins.js.map +1 -0
  687. package/build/src/utils/net.js +43 -0
  688. package/build/src/utils/net.js.map +1 -0
  689. package/build/src/utils/nodeEnv.js +168 -0
  690. package/build/src/utils/nodeEnv.js.map +1 -0
  691. package/build/src/utils/nodeModules.js +52 -0
  692. package/build/src/utils/nodeModules.js.map +1 -0
  693. package/build/src/utils/npm.js +222 -0
  694. package/build/src/utils/npm.js.map +1 -0
  695. package/build/src/utils/obj.js +59 -0
  696. package/build/src/utils/obj.js.map +1 -0
  697. package/build/src/utils/open.js +36 -0
  698. package/build/src/utils/open.js.map +1 -0
  699. package/build/src/utils/ora.js +113 -0
  700. package/build/src/utils/ora.js.map +1 -0
  701. package/build/src/utils/plist.js +108 -0
  702. package/build/src/utils/plist.js.map +1 -0
  703. package/build/src/utils/port.js +196 -0
  704. package/build/src/utils/port.js.map +1 -0
  705. package/build/src/utils/profile.js +94 -0
  706. package/build/src/utils/profile.js.map +1 -0
  707. package/build/src/utils/progress.js +76 -0
  708. package/build/src/utils/progress.js.map +1 -0
  709. package/build/src/utils/prompts.js +151 -0
  710. package/build/src/utils/prompts.js.map +1 -0
  711. package/build/src/utils/qr.js +186 -0
  712. package/build/src/utils/qr.js.map +1 -0
  713. package/build/src/utils/resolveArgs.js +236 -0
  714. package/build/src/utils/resolveArgs.js.map +1 -0
  715. package/build/src/utils/resolveGlobal.js +195 -0
  716. package/build/src/utils/resolveGlobal.js.map +1 -0
  717. package/build/src/utils/scheme.js +212 -0
  718. package/build/src/utils/scheme.js.map +1 -0
  719. package/build/src/utils/stream.js +31 -0
  720. package/build/src/utils/stream.js.map +1 -0
  721. package/build/src/utils/strings.js +33 -0
  722. package/build/src/utils/strings.js.map +1 -0
  723. package/build/src/utils/tar.js +168 -0
  724. package/build/src/utils/tar.js.map +1 -0
  725. package/build/src/utils/telemetry/Telemetry.js +131 -0
  726. package/build/src/utils/telemetry/Telemetry.js.map +1 -0
  727. package/build/src/utils/telemetry/clients/FetchClient.js +91 -0
  728. package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -0
  729. package/build/src/utils/telemetry/clients/FetchDetachedClient.js +86 -0
  730. package/build/src/utils/telemetry/clients/FetchDetachedClient.js.map +1 -0
  731. package/build/src/utils/telemetry/clients/flushFetchDetached.js +39 -0
  732. package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -0
  733. package/build/src/utils/telemetry/events.js +20 -0
  734. package/build/src/utils/telemetry/events.js.map +1 -0
  735. package/build/src/utils/telemetry/index.js +72 -0
  736. package/build/src/utils/telemetry/index.js.map +1 -0
  737. package/build/src/utils/telemetry/types.js +6 -0
  738. package/build/src/utils/telemetry/types.js.map +1 -0
  739. package/build/src/utils/telemetry/utils/constants.js +23 -0
  740. package/build/src/utils/telemetry/utils/constants.js.map +1 -0
  741. package/build/src/utils/telemetry/utils/context.js +115 -0
  742. package/build/src/utils/telemetry/utils/context.js.map +1 -0
  743. package/build/src/utils/template.js +48 -0
  744. package/build/src/utils/template.js.map +1 -0
  745. package/build/src/utils/terminal.js +15 -0
  746. package/build/src/utils/terminal.js.map +1 -0
  747. package/build/src/utils/tsconfig/evaluateTsConfig.js +87 -0
  748. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +1 -0
  749. package/build/src/utils/tsconfig/loadTsConfigPaths.js +84 -0
  750. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -0
  751. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +94 -0
  752. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +1 -0
  753. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +62 -0
  754. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +1 -0
  755. package/build/src/utils/url.js +92 -0
  756. package/build/src/utils/url.js.map +1 -0
  757. package/build/src/utils/validateApplicationId.js +255 -0
  758. package/build/src/utils/validateApplicationId.js.map +1 -0
  759. package/build/src/utils/variadic.js +132 -0
  760. package/build/src/utils/variadic.js.map +1 -0
  761. package/build/src/whoami/index.js +69 -0
  762. package/build/src/whoami/index.js.map +1 -0
  763. package/build/src/whoami/whoamiAsync.js +75 -0
  764. package/build/src/whoami/whoamiAsync.js.map +1 -0
  765. package/changes.json +106 -0
  766. package/internal/unstable-expo-updates-exports.d.ts +31 -0
  767. package/internal/unstable-expo-updates-exports.js +3 -0
  768. package/package.json +275 -0
  769. package/static/loading-page/index.html +363 -0
  770. package/static/shims/react-native-web/dist/cjs/exports/AppRegistry/AppContainer.js +13 -0
  771. package/static/shims/react-native-web/dist/cjs/exports/BackHandler/index.js +10 -0
  772. package/static/shims/react-native-web/dist/exports/AppRegistry/AppContainer.js +12 -0
  773. package/static/shims/react-native-web/dist/exports/BackHandler/index.js +7 -0
  774. package/static/template/+html.tsx +28 -0
  775. package/static/template/+native-intent.ts +9 -0
  776. package/static/template/.eslintrc.js +5 -0
  777. package/static/template/[...rsc]+api.ts +16 -0
  778. package/static/template/babel.config.js +6 -0
  779. package/static/template/eslint.config.js +10 -0
  780. package/static/template/index.html +36 -0
  781. package/static/template/metro.config.js +7 -0
  782. package/static/template/webpack.config.js +7 -0
@@ -0,0 +1,1654 @@
1
+ /**
2
+ * Copyright © 2022 650 Industries.
3
+ *
4
+ * This source code is licensed under the MIT license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */ "use strict";
7
+ Object.defineProperty(exports, "__esModule", {
8
+ value: true
9
+ });
10
+ function _export(target, all) {
11
+ for(var name in all)Object.defineProperty(target, name, {
12
+ enumerable: true,
13
+ get: all[name]
14
+ });
15
+ }
16
+ _export(exports, {
17
+ MetroBundlerDevServer: function() {
18
+ return MetroBundlerDevServer;
19
+ },
20
+ event: function() {
21
+ return event;
22
+ }
23
+ });
24
+ function _config() {
25
+ const data = require("@expo/config");
26
+ _config = function() {
27
+ return data;
28
+ };
29
+ return data;
30
+ }
31
+ function _paths() {
32
+ const data = require("@expo/config/paths");
33
+ _paths = function() {
34
+ return data;
35
+ };
36
+ return data;
37
+ }
38
+ function _baseJSBundle() {
39
+ const data = /*#__PURE__*/ _interop_require_default(require("@expo/metro/metro/DeltaBundler/Serializers/baseJSBundle"));
40
+ _baseJSBundle = function() {
41
+ return data;
42
+ };
43
+ return data;
44
+ }
45
+ function _sourceMapGenerator() {
46
+ const data = require("@expo/metro/metro/DeltaBundler/Serializers/sourceMapGenerator");
47
+ _sourceMapGenerator = function() {
48
+ return data;
49
+ };
50
+ return data;
51
+ }
52
+ function _bundleToString() {
53
+ const data = /*#__PURE__*/ _interop_require_default(require("@expo/metro/metro/lib/bundleToString"));
54
+ _bundleToString = function() {
55
+ return data;
56
+ };
57
+ return data;
58
+ }
59
+ function _getGraphId() {
60
+ const data = /*#__PURE__*/ _interop_require_default(require("@expo/metro/metro/lib/getGraphId"));
61
+ _getGraphId = function() {
62
+ return data;
63
+ };
64
+ return data;
65
+ }
66
+ function _assert() {
67
+ const data = /*#__PURE__*/ _interop_require_default(require("assert"));
68
+ _assert = function() {
69
+ return data;
70
+ };
71
+ return data;
72
+ }
73
+ function _chalk() {
74
+ const data = /*#__PURE__*/ _interop_require_default(require("chalk"));
75
+ _chalk = function() {
76
+ return data;
77
+ };
78
+ return data;
79
+ }
80
+ function _private() {
81
+ const data = require("expo-server/private");
82
+ _private = function() {
83
+ return data;
84
+ };
85
+ return data;
86
+ }
87
+ function _https() {
88
+ const data = /*#__PURE__*/ _interop_require_default(require("https"));
89
+ _https = function() {
90
+ return data;
91
+ };
92
+ return data;
93
+ }
94
+ function _path() {
95
+ const data = /*#__PURE__*/ _interop_require_default(require("path"));
96
+ _path = function() {
97
+ return data;
98
+ };
99
+ return data;
100
+ }
101
+ const _createServerComponentsMiddleware = require("./createServerComponentsMiddleware");
102
+ const _createServerRouteMiddleware = require("./createServerRouteMiddleware");
103
+ const _fetchRouterManifest = require("./fetchRouterManifest");
104
+ const _instantiateMetro = require("./instantiateMetro");
105
+ const _metroErrorInterface = require("./metroErrorInterface");
106
+ const _metroWatchTypeScriptFiles = require("./metroWatchTypeScriptFiles");
107
+ const _router = require("./router");
108
+ const _serializeHtml = require("./serializeHtml");
109
+ const _waitForMetroToObserveTypeScriptFile = require("./waitForMetroToObserveTypeScriptFile");
110
+ const _events = require("../../../events");
111
+ const _log = require("../../../log");
112
+ const _env = require("../../../utils/env");
113
+ const _errors = require("../../../utils/errors");
114
+ const _filePath = require("../../../utils/filePath");
115
+ const _nodeEnv = require("../../../utils/nodeEnv");
116
+ const _port = require("../../../utils/port");
117
+ const _BundlerDevServer = require("../BundlerDevServer");
118
+ const _getStaticRenderFunctions = require("../getStaticRenderFunctions");
119
+ const _resolveLoader = require("./resolveLoader");
120
+ const _ContextModuleSourceMapsMiddleware = require("../middleware/ContextModuleSourceMapsMiddleware");
121
+ const _CreateFileMiddleware = require("../middleware/CreateFileMiddleware");
122
+ const _DevToolsPluginMiddleware = require("../middleware/DevToolsPluginMiddleware");
123
+ const _DomComponentsMiddleware = require("../middleware/DomComponentsMiddleware");
124
+ const _FaviconMiddleware = require("../middleware/FaviconMiddleware");
125
+ const _HistoryFallbackMiddleware = require("../middleware/HistoryFallbackMiddleware");
126
+ const _InterstitialPageMiddleware = require("../middleware/InterstitialPageMiddleware");
127
+ const _ManifestMiddleware = require("../middleware/ManifestMiddleware");
128
+ const _RuntimeRedirectMiddleware = require("../middleware/RuntimeRedirectMiddleware");
129
+ const _ServeStaticMiddleware = require("../middleware/ServeStaticMiddleware");
130
+ const _metroOptions = require("../middleware/metroOptions");
131
+ const _mutations = require("../middleware/mutations");
132
+ const _startTypescriptTypeGeneration = require("../type-generation/startTypescriptTypeGeneration");
133
+ function _interop_require_default(obj) {
134
+ return obj && obj.__esModule ? obj : {
135
+ default: obj
136
+ };
137
+ }
138
+ function _getRequireWildcardCache(nodeInterop) {
139
+ if (typeof WeakMap !== "function") return null;
140
+ var cacheBabelInterop = new WeakMap();
141
+ var cacheNodeInterop = new WeakMap();
142
+ return (_getRequireWildcardCache = function(nodeInterop) {
143
+ return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
144
+ })(nodeInterop);
145
+ }
146
+ function _interop_require_wildcard(obj, nodeInterop) {
147
+ if (!nodeInterop && obj && obj.__esModule) {
148
+ return obj;
149
+ }
150
+ if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
151
+ return {
152
+ default: obj
153
+ };
154
+ }
155
+ var cache = _getRequireWildcardCache(nodeInterop);
156
+ if (cache && cache.has(obj)) {
157
+ return cache.get(obj);
158
+ }
159
+ var newObj = {
160
+ __proto__: null
161
+ };
162
+ var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
163
+ for(var key in obj){
164
+ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
165
+ var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
166
+ if (desc && (desc.get || desc.set)) {
167
+ Object.defineProperty(newObj, key, desc);
168
+ } else {
169
+ newObj[key] = obj[key];
170
+ }
171
+ }
172
+ }
173
+ newObj.default = obj;
174
+ if (cache) {
175
+ cache.set(obj, newObj);
176
+ }
177
+ return newObj;
178
+ }
179
+ const debug = require('debug')('expo:start:server:metro');
180
+ /** Default port to use for apps running in Expo Go. */ const EXPO_GO_METRO_PORT = 8081;
181
+ /** Default port to use for apps that run in standard React Native projects or Expo Dev Clients. */ const DEV_CLIENT_METRO_PORT = 8081;
182
+ const event = (0, _events.events)('devserver', (t)=>[
183
+ t.event()
184
+ ]);
185
+ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
186
+ get name() {
187
+ return 'metro';
188
+ }
189
+ async resolvePortAsync(options = {}) {
190
+ const port = // If the manually defined port is busy then an error should be thrown...
191
+ options.port ?? // Otherwise use the default port based on the runtime target.
192
+ (options.devClient ? Number(process.env.RCT_METRO_PORT) || DEV_CLIENT_METRO_PORT : await (0, _port.getFreePortAsync)(EXPO_GO_METRO_PORT));
193
+ return port;
194
+ }
195
+ async exportServerRouteAsync({ contents, artifactFilename, files, includeSourceMaps, descriptor }) {
196
+ if (!contents) return;
197
+ let src = contents.src;
198
+ if (includeSourceMaps && contents.map) {
199
+ // TODO(kitten): Merge the source map transformer in the future
200
+ // https://github.com/expo/expo/blob/0dffdb15/packages/%40expo/metro-config/src/serializer/serializeChunks.ts#L422-L439
201
+ // Alternatively, check whether `sourcesRoot` helps here
202
+ const artifactBasename = encodeURIComponent(_path().default.basename(artifactFilename) + '.map');
203
+ src = src.replace(/\/\/# sourceMappingURL=.*/g, `//# sourceMappingURL=${artifactBasename}`);
204
+ const parsedMap = typeof contents.map === 'string' ? JSON.parse(contents.map) : contents.map;
205
+ const mapData = {
206
+ ...descriptor,
207
+ contents: JSON.stringify({
208
+ version: parsedMap.version,
209
+ sources: parsedMap.sources.map((source)=>{
210
+ source = typeof source === 'string' && source.startsWith(this.projectRoot) ? _path().default.relative(this.projectRoot, source) : source;
211
+ return (0, _metroOptions.convertPathToModuleSpecifier)(source);
212
+ }),
213
+ sourcesContent: new Array(parsedMap.sources.length).fill(null),
214
+ names: parsedMap.names,
215
+ mappings: parsedMap.mappings
216
+ }),
217
+ targetDomain: 'server'
218
+ };
219
+ files.set(artifactFilename + '.map', mapData);
220
+ }
221
+ const fileData = {
222
+ ...descriptor,
223
+ contents: src,
224
+ targetDomain: 'server'
225
+ };
226
+ files.set(artifactFilename, fileData);
227
+ }
228
+ async exportMiddlewareAsync({ manifest, appDir, outputDir, files, platform, includeSourceMaps }) {
229
+ if (!manifest.middleware) return;
230
+ const middlewareFilePath = _path().default.isAbsolute(manifest.middleware.file) ? manifest.middleware.file : _path().default.join(appDir, manifest.middleware.file);
231
+ const contents = await this.bundleApiRoute(middlewareFilePath, {
232
+ platform
233
+ });
234
+ const artifactFilename = (0, _metroOptions.convertPathToModuleSpecifier)(_path().default.join(outputDir, _path().default.relative(appDir, middlewareFilePath.replace(/\.[tj]sx?$/, '.js'))));
235
+ await this.exportServerRouteAsync({
236
+ contents,
237
+ artifactFilename,
238
+ files,
239
+ includeSourceMaps,
240
+ descriptor: {
241
+ middlewareId: '/middleware'
242
+ }
243
+ });
244
+ // Remap the middleware file to represent the output file.
245
+ manifest.middleware.file = artifactFilename;
246
+ }
247
+ async exportExpoRouterApiRoutesAsync({ includeSourceMaps, outputDir, prerenderManifest, platform }) {
248
+ const { routerRoot } = this.instanceMetroOptions;
249
+ (0, _assert().default)(routerRoot != null, 'The server must be started before calling exportExpoRouterApiRoutesAsync.');
250
+ const appDir = _path().default.join(this.projectRoot, routerRoot);
251
+ const manifest = await this.getExpoRouterRoutesManifestAsync({
252
+ appDir
253
+ });
254
+ const files = new Map();
255
+ // Inject RSC middleware.
256
+ const rscPath = '/_flight/[...rsc]';
257
+ if (this.isReactServerComponentsEnabled && // If the RSC route is not already in the manifest, add it.
258
+ !manifest.apiRoutes.find((route)=>route.page.startsWith('/_flight/'))) {
259
+ debug('Adding RSC route to the manifest:', rscPath);
260
+ // NOTE: This might need to be sorted to the correct spot in the future.
261
+ manifest.apiRoutes.push({
262
+ // TODO(@kitten): This isn't great, we shouldn't be needing to rely on files like this
263
+ // It might even be better to make templating strings since that'd be type-checked, but currently,
264
+ // we rely on this being an entrypoint for Metro
265
+ file: require.resolve('@expo/cli/static/template/[...rsc]+api.ts'),
266
+ page: rscPath,
267
+ namedRegex: '^/_flight(?:/(?<rsc>.+?))?(?:/)?$',
268
+ routeKeys: {
269
+ rsc: 'rsc'
270
+ }
271
+ });
272
+ }
273
+ await this.exportMiddlewareAsync({
274
+ manifest,
275
+ appDir,
276
+ outputDir,
277
+ files,
278
+ platform,
279
+ includeSourceMaps
280
+ });
281
+ for (const route of manifest.apiRoutes){
282
+ const filepath = _path().default.isAbsolute(route.file) ? route.file : _path().default.join(appDir, route.file);
283
+ const contents = await this.bundleApiRoute(filepath, {
284
+ platform
285
+ });
286
+ const artifactFilename = route.page === rscPath ? (0, _metroOptions.convertPathToModuleSpecifier)(_path().default.join(outputDir, '.' + rscPath + '.js')) : (0, _metroOptions.convertPathToModuleSpecifier)(_path().default.join(outputDir, _path().default.relative(appDir, filepath.replace(/\.[tj]sx?$/, '.js'))));
287
+ await this.exportServerRouteAsync({
288
+ contents,
289
+ artifactFilename,
290
+ files,
291
+ includeSourceMaps,
292
+ descriptor: {
293
+ apiRouteId: route.page
294
+ }
295
+ });
296
+ // Remap the manifest files to represent the output files.
297
+ route.file = artifactFilename;
298
+ }
299
+ return {
300
+ manifest: {
301
+ ...manifest,
302
+ htmlRoutes: prerenderManifest.htmlRoutes
303
+ },
304
+ files
305
+ };
306
+ }
307
+ /**
308
+ * Bundle render module for use in SSR
309
+ */ async exportExpoRouterRenderModuleAsync({ files, includeSourceMaps, platform = 'web' }) {
310
+ const renderModule = await this.ssrLoadModuleContents(require.resolve('@expo/router-server/node/render.js'), {
311
+ environment: 'node',
312
+ platform
313
+ });
314
+ await this.exportServerRouteAsync({
315
+ contents: renderModule,
316
+ artifactFilename: '_expo/server/render.js',
317
+ files,
318
+ includeSourceMaps,
319
+ descriptor: {
320
+ // ssrRenderModule: true,
321
+ targetDomain: 'server'
322
+ }
323
+ });
324
+ return files;
325
+ }
326
+ /**
327
+ * Export loader bundles as standalone JS files for SSR data loading.
328
+ *
329
+ * Each loader bundle contains only the `loader` export from the route file,
330
+ * with all other exports (default, named) stripped out by the Babel plugin.
331
+ * This keeps loader bundles small for efficient server-side execution.
332
+ */ async exportExpoRouterLoadersAsync({ platform, entryPoints, files, outputDir, includeSourceMaps }) {
333
+ // NOTE(@hassankhan): Should we parallelize loader bundling?
334
+ for (const entry of entryPoints){
335
+ const contents = await this.bundleLoader(entry.file, {
336
+ platform
337
+ });
338
+ const pagePath = entry.page.startsWith('/') ? entry.page.slice(1) : entry.page;
339
+ const artifactFilename = (0, _metroOptions.convertPathToModuleSpecifier)(_path().default.join(outputDir, pagePath + '.js'));
340
+ await this.exportServerRouteAsync({
341
+ contents,
342
+ artifactFilename,
343
+ files,
344
+ includeSourceMaps,
345
+ descriptor: {
346
+ loaderId: entry.page
347
+ }
348
+ });
349
+ }
350
+ }
351
+ async getExpoRouterRoutesManifestAsync({ appDir }) {
352
+ var _exp_extra;
353
+ // getBuiltTimeServerManifest
354
+ const { exp } = (0, _config().getConfig)(this.projectRoot);
355
+ const manifest = await (0, _fetchRouterManifest.fetchManifest)(this.projectRoot, {
356
+ ...(_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router,
357
+ preserveRedirectAndRewrites: true,
358
+ asJson: true,
359
+ appDir
360
+ });
361
+ if (!manifest) {
362
+ throw new _errors.CommandError('EXPO_ROUTER_SERVER_MANIFEST', 'Unexpected error: server manifest could not be fetched.');
363
+ }
364
+ return manifest;
365
+ }
366
+ async getServerManifestAsync() {
367
+ var _exp_extra, _exp_extra1;
368
+ const { exp } = (0, _config().getConfig)(this.projectRoot);
369
+ // NOTE: This could probably be folded back into `renderStaticContent` when expo-asset and font support RSC.
370
+ const { getBuildTimeServerManifestAsync, getManifest } = await this.ssrLoadModule(require.resolve('@expo/router-server/build/static/getServerManifest.js'), {
371
+ // Only use react-server environment when the routes are using react-server rendering by default.
372
+ environment: this.isReactServerRoutesEnabled ? 'react-server' : 'node'
373
+ });
374
+ return {
375
+ serverManifest: await getBuildTimeServerManifestAsync({
376
+ ...(_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router
377
+ }),
378
+ htmlManifest: await getManifest({
379
+ ...(_exp_extra1 = exp.extra) == null ? void 0 : _exp_extra1.router
380
+ })
381
+ };
382
+ }
383
+ /**
384
+ * This function is invoked when exporting via `expo export`
385
+ */ async getStaticRenderFunctionAsync() {
386
+ var _exp_extra_router, _exp_extra, _exp_web, _exp_extra1, _exp_extra2;
387
+ const { routerRoot } = this.instanceMetroOptions;
388
+ (0, _assert().default)(routerRoot != null, 'The server must be started before calling getStaticRenderFunctionAsync.');
389
+ const appDir = _path().default.join(this.projectRoot, routerRoot);
390
+ const url = this.getDevServerUrlOrAssert();
391
+ const { getStaticContent, getManifest, getBuildTimeServerManifestAsync } = await this.ssrLoadModule(require.resolve('@expo/router-server/node/render.js'), {
392
+ // This must always use the legacy rendering resolution (no `react-server`) because it leverages
393
+ // the previous React SSG utilities which aren't available in React 19.
394
+ environment: 'node'
395
+ });
396
+ const { exp } = (0, _config().getConfig)(this.projectRoot);
397
+ const useServerRendering = ((_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerRendering) ?? false;
398
+ const isExportingWithSSR = ((_exp_web = exp.web) == null ? void 0 : _exp_web.output) === 'server' && useServerRendering && !this.isReactServerComponentsEnabled;
399
+ const serverManifest = await getBuildTimeServerManifestAsync({
400
+ ...(_exp_extra1 = exp.extra) == null ? void 0 : _exp_extra1.router,
401
+ // Skip static params expansion in SSR mode, routes are matched at runtime instead
402
+ skipStaticParams: isExportingWithSSR
403
+ });
404
+ return {
405
+ serverManifest,
406
+ // Get routes from Expo Router.
407
+ manifest: await getManifest({
408
+ preserveApiRoutes: false,
409
+ ...(_exp_extra2 = exp.extra) == null ? void 0 : _exp_extra2.router
410
+ }),
411
+ // Get route generating function
412
+ renderAsync: async (path, route, opts)=>{
413
+ const location = new URL(path, url);
414
+ return await getStaticContent(location, opts);
415
+ },
416
+ executeLoaderAsync: async (path, route)=>{
417
+ const location = new URL(path, url);
418
+ const resolvedLoaderRoute = (0, _resolveLoader.fromRuntimeManifestRoute)(location.pathname, route, {
419
+ serverManifest: (0, _fetchRouterManifest.inflateManifest)(serverManifest),
420
+ appDir
421
+ });
422
+ if (!resolvedLoaderRoute) {
423
+ return undefined;
424
+ }
425
+ return this.executeServerDataLoaderAsync(location, resolvedLoaderRoute);
426
+ }
427
+ };
428
+ }
429
+ async getStaticResourcesAsync({ includeSourceMaps, mainModuleName, clientBoundaries = this.instanceMetroOptions.clientBoundaries ?? [], platform = 'web' } = {}) {
430
+ const { mode, minify, isExporting, baseUrl, reactCompiler, routerRoot, asyncRoutes } = this.instanceMetroOptions;
431
+ (0, _assert().default)(mode != null && isExporting != null && baseUrl != null && routerRoot != null && reactCompiler != null && asyncRoutes != null, 'The server must be started before calling getStaticResourcesAsync.');
432
+ const resolvedMainModuleName = mainModuleName ?? './' + (0, _ManifestMiddleware.resolveMainModuleName)(this.projectRoot, {
433
+ platform
434
+ });
435
+ return await this.metroImportAsArtifactsAsync(resolvedMainModuleName, {
436
+ splitChunks: isExporting && !_env.env.EXPO_NO_BUNDLE_SPLITTING,
437
+ platform,
438
+ mode,
439
+ minify,
440
+ environment: 'client',
441
+ serializerIncludeMaps: includeSourceMaps,
442
+ mainModuleName: resolvedMainModuleName,
443
+ lazy: !_env.env.EXPO_NO_METRO_LAZY,
444
+ asyncRoutes,
445
+ baseUrl,
446
+ isExporting,
447
+ routerRoot,
448
+ clientBoundaries,
449
+ reactCompiler,
450
+ bytecode: false
451
+ });
452
+ }
453
+ /**
454
+ * This function is invoked when running in development via `expo start`
455
+ */ async getStaticPageAsync(pathname, route, request) {
456
+ const { exp } = (0, _config().getConfig)(this.projectRoot);
457
+ const { mode, isExporting, clientBoundaries, baseUrl, reactCompiler, routerRoot, asyncRoutes } = this.instanceMetroOptions;
458
+ (0, _assert().default)(mode != null && isExporting != null && baseUrl != null && reactCompiler != null && routerRoot != null && asyncRoutes != null, 'The server must be started before calling getStaticPageAsync.');
459
+ const platform = 'web';
460
+ const devBundleUrlPathname = (0, _metroOptions.createBundleUrlPath)({
461
+ splitChunks: isExporting && !_env.env.EXPO_NO_BUNDLE_SPLITTING,
462
+ platform,
463
+ mode,
464
+ environment: 'client',
465
+ reactCompiler,
466
+ mainModuleName: (0, _ManifestMiddleware.resolveMainModuleName)(this.projectRoot, {
467
+ platform
468
+ }),
469
+ lazy: !_env.env.EXPO_NO_METRO_LAZY,
470
+ baseUrl,
471
+ isExporting,
472
+ asyncRoutes,
473
+ routerRoot,
474
+ clientBoundaries,
475
+ bytecode: false
476
+ });
477
+ const bundleStaticHtml = async ()=>{
478
+ var _exp_extra_router, _exp_extra;
479
+ const { getStaticContent } = await this.ssrLoadModule(require.resolve('@expo/router-server/node/render.js'), {
480
+ // This must always use the legacy rendering resolution (no `react-server`) because it leverages
481
+ // the previous React SSG utilities which aren't available in React 19.
482
+ environment: 'node',
483
+ minify: false,
484
+ isExporting,
485
+ platform
486
+ });
487
+ const location = new URL(pathname, this.getDevServerUrlOrAssert());
488
+ const useServerDataLoaders = (_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerDataLoaders;
489
+ if (!useServerDataLoaders) {
490
+ return await getStaticContent(location);
491
+ }
492
+ const resolvedLoaderRoute = (0, _resolveLoader.fromServerManifestRoute)(location.pathname, route);
493
+ if (!resolvedLoaderRoute) {
494
+ return await getStaticContent(location);
495
+ }
496
+ const loaderResult = await this.executeServerDataLoaderAsync(location, resolvedLoaderRoute, request);
497
+ if (!loaderResult) {
498
+ return await getStaticContent(location);
499
+ }
500
+ const loaderData = await loaderResult.json();
501
+ const resolvedLoaderKey = (0, _private().resolveLoaderContextKey)(resolvedLoaderRoute.contextKey, resolvedLoaderRoute.params);
502
+ return await getStaticContent(location, {
503
+ loader: {
504
+ data: loaderData,
505
+ key: resolvedLoaderKey
506
+ }
507
+ });
508
+ };
509
+ const [{ artifacts: resources }, staticHtml] = await Promise.all([
510
+ this.getStaticResourcesAsync({
511
+ clientBoundaries: []
512
+ }),
513
+ bundleStaticHtml()
514
+ ]);
515
+ const content = (0, _serializeHtml.serializeHtmlWithAssets)({
516
+ isExporting,
517
+ resources,
518
+ template: staticHtml,
519
+ devBundleUrl: devBundleUrlPathname,
520
+ baseUrl,
521
+ hydrate: _env.env.EXPO_WEB_DEV_HYDRATE
522
+ });
523
+ return {
524
+ content,
525
+ resources
526
+ };
527
+ }
528
+ async metroImportAsArtifactsAsync(filePath, specificOptions = {}) {
529
+ const results = await this.ssrLoadModuleContents(filePath, {
530
+ serializerOutput: 'static',
531
+ ...specificOptions
532
+ });
533
+ // NOTE: This could potentially need more validation in the future.
534
+ if (results.artifacts && results.assets) {
535
+ return {
536
+ artifacts: results.artifacts,
537
+ assets: results.assets,
538
+ src: results.src,
539
+ filename: results.filename,
540
+ map: results.map
541
+ };
542
+ }
543
+ throw new _errors.CommandError('Invalid bundler results: ' + results);
544
+ }
545
+ async metroLoadModuleContents(filePath, specificOptions, extraOptions = {}) {
546
+ const { baseUrl } = this.instanceMetroOptions;
547
+ (0, _assert().default)(baseUrl != null, 'The server must be started before calling metroLoadModuleContents.');
548
+ const opts = {
549
+ // TODO: Possibly issues with using an absolute path here...
550
+ // mainModuleName: filePath,
551
+ lazy: false,
552
+ asyncRoutes: false,
553
+ inlineSourceMap: false,
554
+ engine: 'hermes',
555
+ minify: false,
556
+ // bytecode: false,
557
+ // Bundle in Node.js mode for SSR.
558
+ environment: 'node',
559
+ // platform: 'web',
560
+ // mode: 'development',
561
+ //
562
+ ...this.instanceMetroOptions,
563
+ baseUrl,
564
+ // routerRoot,
565
+ // isExporting,
566
+ ...specificOptions
567
+ };
568
+ const expoBundleOptions = (0, _metroOptions.getMetroDirectBundleOptions)(opts);
569
+ const resolverOptions = {
570
+ customResolverOptions: expoBundleOptions.customResolverOptions ?? {},
571
+ dev: expoBundleOptions.dev ?? true
572
+ };
573
+ const transformOptions = {
574
+ dev: expoBundleOptions.dev ?? true,
575
+ minify: expoBundleOptions.minify ?? false,
576
+ type: 'module',
577
+ unstable_transformProfile: extraOptions.unstable_transformProfile ?? expoBundleOptions.unstable_transformProfile ?? 'default',
578
+ customTransformOptions: expoBundleOptions.customTransformOptions ?? Object.create(null),
579
+ platform: expoBundleOptions.platform ?? 'web'
580
+ };
581
+ const resolvedEntryFilePath = await this.resolveRelativePathAsync(filePath, {
582
+ resolverOptions,
583
+ transformOptions
584
+ });
585
+ const filename = (0, _metroOptions.createBundleOsPath)({
586
+ ...opts,
587
+ mainModuleName: resolvedEntryFilePath
588
+ });
589
+ // https://github.com/facebook/metro/blob/2405f2f6c37a1b641cc379b9c733b1eff0c1c2a1/packages/metro/src/lib/parseOptionsFromUrl.js#L55-L87
590
+ // TODO(@kitten): We've flagged this way of "direct transpilation" for replacement, since it's hard to maintain
591
+ // It's possible that the intention here was to do something like what `exportEmbedAsync` is doing (using Server.DEFAULT_BUNDLE_OPTIONS)
592
+ // That's why the defaults were added to match types. It's unclear though if that was correct
593
+ // Maybe the `Server.DEFAULT_BUNDLE_OPTIONS` logic should be hoisted into `getMetroDirectBundleOptions`?
594
+ const results = await this._bundleDirectAsync(resolvedEntryFilePath, {
595
+ graphOptions: {
596
+ lazy: expoBundleOptions.lazy ?? false,
597
+ shallow: expoBundleOptions.shallow ?? false
598
+ },
599
+ resolverOptions,
600
+ serializerOptions: {
601
+ ...expoBundleOptions.serializerOptions,
602
+ inlineSourceMap: expoBundleOptions.inlineSourceMap ?? false,
603
+ modulesOnly: expoBundleOptions.modulesOnly ?? false,
604
+ runModule: expoBundleOptions.runModule ?? true,
605
+ sourceUrl: expoBundleOptions.sourceUrl,
606
+ sourceMapUrl: extraOptions.sourceMapUrl ?? expoBundleOptions.sourceMapUrl
607
+ },
608
+ transformOptions
609
+ });
610
+ return {
611
+ ...results,
612
+ filename
613
+ };
614
+ }
615
+ async ssrLoadModuleContents(filePath, specificOptions = {}) {
616
+ const { baseUrl, routerRoot, isExporting } = this.instanceMetroOptions;
617
+ (0, _assert().default)(baseUrl != null && routerRoot != null && isExporting != null, 'The server must be started before calling ssrLoadModuleContents.');
618
+ const opts = {
619
+ // TODO: Possibly issues with using an absolute path here...
620
+ mainModuleName: (0, _metroOptions.convertPathToModuleSpecifier)(filePath),
621
+ lazy: false,
622
+ asyncRoutes: false,
623
+ inlineSourceMap: false,
624
+ engine: 'hermes',
625
+ minify: false,
626
+ bytecode: false,
627
+ // Bundle in Node.js mode for SSR unless RSC is enabled.
628
+ environment: this.isReactServerComponentsEnabled ? 'react-server' : 'node',
629
+ platform: 'web',
630
+ mode: 'development',
631
+ //
632
+ ...this.instanceMetroOptions,
633
+ // Mostly disable compiler in SSR bundles.
634
+ reactCompiler: false,
635
+ baseUrl,
636
+ routerRoot,
637
+ isExporting,
638
+ ...specificOptions
639
+ };
640
+ // https://github.com/facebook/metro/blob/2405f2f6c37a1b641cc379b9c733b1eff0c1c2a1/packages/metro/src/lib/parseOptionsFromUrl.js#L55-L87
641
+ const { filename, bundle, map, ...rest } = await this.metroLoadModuleContents(filePath, opts);
642
+ const scriptContents = wrapBundle(bundle);
643
+ if (map) {
644
+ debug('Registering SSR source map for:', filename);
645
+ _getStaticRenderFunctions.cachedSourceMaps.set(filename, {
646
+ url: this.projectRoot,
647
+ map
648
+ });
649
+ } else {
650
+ debug('No SSR source map found for:', filename);
651
+ }
652
+ return {
653
+ ...rest,
654
+ src: scriptContents,
655
+ filename,
656
+ map
657
+ };
658
+ }
659
+ async nativeExportBundleAsync(exp, options, files, extraOptions = {}) {
660
+ if (this.isReactServerComponentsEnabled) {
661
+ return this.singlePageReactServerComponentExportAsync(exp, options, files, extraOptions);
662
+ }
663
+ return this.legacySinglePageExportBundleAsync(options, extraOptions);
664
+ }
665
+ async singlePageReactServerComponentExportAsync(exp, options, files, extraOptions = {}) {
666
+ var _exp_extra;
667
+ const getReactServerReferences = (artifacts)=>{
668
+ // Get the React server action boundaries from the client bundle.
669
+ return unique(artifacts.filter((a)=>a.type === 'js').map((artifact)=>{
670
+ var _artifact_metadata_reactServerReferences;
671
+ return (_artifact_metadata_reactServerReferences = artifact.metadata.reactServerReferences) == null ? void 0 : _artifact_metadata_reactServerReferences.map((ref)=>(0, _createServerComponentsMiddleware.fileURLToFilePath)(ref));
672
+ })// TODO: Segment by module for splitting.
673
+ .flat().filter(Boolean));
674
+ };
675
+ // NOTE(EvanBacon): This will not support any code elimination since it's a static pass.
676
+ let { reactClientReferences: clientBoundaries, reactServerReferences: serverActionReferencesInServer, cssModules } = await this.rscRenderer.getExpoRouterClientReferencesAsync({
677
+ platform: options.platform,
678
+ domRoot: options.domRoot
679
+ }, files);
680
+ // TODO: The output keys should be in production format or use a lookup manifest.
681
+ const processClientBoundaries = async (reactServerReferences)=>{
682
+ debug('Evaluated client boundaries:', clientBoundaries);
683
+ // Run metro bundler and create the JS bundles/source maps.
684
+ const bundle = await this.legacySinglePageExportBundleAsync({
685
+ ...options,
686
+ clientBoundaries
687
+ }, extraOptions);
688
+ // Get the React server action boundaries from the client bundle.
689
+ const newReactServerReferences = getReactServerReferences(bundle.artifacts);
690
+ if (!newReactServerReferences) {
691
+ // Possible issue with babel plugin / metro-config.
692
+ throw new Error('Static server action references were not returned from the Metro client bundle');
693
+ }
694
+ debug('React server action boundaries from client:', newReactServerReferences);
695
+ const allKnownReactServerReferences = unique([
696
+ ...reactServerReferences,
697
+ ...newReactServerReferences
698
+ ]);
699
+ // When we export the server actions that were imported from the client, we may need to re-bundle the client with the new client boundaries.
700
+ const { clientBoundaries: nestedClientBoundaries } = await this.rscRenderer.exportServerActionsAsync({
701
+ platform: options.platform,
702
+ domRoot: options.domRoot,
703
+ entryPoints: allKnownReactServerReferences
704
+ }, files);
705
+ // TODO: Check against all modules in the initial client bundles.
706
+ const hasUniqueClientBoundaries = nestedClientBoundaries.some((boundary)=>!clientBoundaries.includes(boundary));
707
+ if (!hasUniqueClientBoundaries) {
708
+ return bundle;
709
+ }
710
+ debug('Re-bundling client with nested client boundaries:', nestedClientBoundaries);
711
+ clientBoundaries = unique(clientBoundaries.concat(nestedClientBoundaries));
712
+ // Re-bundle the client with the new client boundaries that only exist in server actions that were imported from the client.
713
+ // Run metro bundler and create the JS bundles/source maps.
714
+ return processClientBoundaries(allKnownReactServerReferences);
715
+ };
716
+ const bundle = await processClientBoundaries(serverActionReferencesInServer);
717
+ // Inject the global CSS that was imported during the server render.
718
+ bundle.artifacts.push(...cssModules);
719
+ const serverRoot = (0, _paths().getMetroServerRoot)(this.projectRoot);
720
+ // HACK: Maybe this should be done in the serializer.
721
+ const clientBoundariesAsOpaqueIds = clientBoundaries.map((boundary)=>// NOTE(cedric): relative module specifiers / IDs should always be POSIX formatted
722
+ (0, _filePath.toPosixPath)(_path().default.relative(serverRoot, boundary)));
723
+ const moduleIdToSplitBundle = bundle.artifacts.map((artifact)=>{
724
+ var _artifact_metadata;
725
+ return (artifact == null ? void 0 : (_artifact_metadata = artifact.metadata) == null ? void 0 : _artifact_metadata.paths) && Object.values(artifact.metadata.paths);
726
+ }).filter(Boolean).flat().reduce((acc, paths)=>({
727
+ ...acc,
728
+ ...paths
729
+ }), {});
730
+ debug('SSR Manifest:', moduleIdToSplitBundle, clientBoundariesAsOpaqueIds);
731
+ const ssrManifest = new Map();
732
+ if (Object.keys(moduleIdToSplitBundle).length) {
733
+ clientBoundariesAsOpaqueIds.forEach((boundary)=>{
734
+ if (boundary in moduleIdToSplitBundle) {
735
+ ssrManifest.set(boundary, moduleIdToSplitBundle[boundary]);
736
+ } else {
737
+ throw new Error(`Could not find boundary "${boundary}" in the SSR manifest. Available: ${Object.keys(moduleIdToSplitBundle).join(', ')}`);
738
+ }
739
+ });
740
+ } else {
741
+ // Native apps with bundle splitting disabled.
742
+ debug('No split bundles');
743
+ clientBoundariesAsOpaqueIds.forEach((boundary)=>{
744
+ ssrManifest.set(boundary, null);
745
+ });
746
+ }
747
+ const routerOptions = (_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router;
748
+ // Export the static RSC files
749
+ await this.rscRenderer.exportRoutesAsync({
750
+ platform: options.platform,
751
+ ssrManifest,
752
+ routerOptions
753
+ }, files);
754
+ // Save the SSR manifest so we can perform more replacements in the server renderer and with server actions.
755
+ files.set(`_expo/rsc/${options.platform}/ssr-manifest.js`, {
756
+ targetDomain: 'server',
757
+ contents: 'module.exports = ' + JSON.stringify(// TODO: Add a less leaky version of this across the framework with just [key, value] (module ID, chunk).
758
+ Object.fromEntries(Array.from(ssrManifest.entries()).map(([key, value])=>[
759
+ // Must match babel plugin.
760
+ './' + (0, _filePath.toPosixPath)(_path().default.relative(this.projectRoot, _path().default.join(serverRoot, key))),
761
+ [
762
+ key,
763
+ value
764
+ ]
765
+ ])))
766
+ });
767
+ return {
768
+ ...bundle,
769
+ files
770
+ };
771
+ }
772
+ async legacySinglePageExportBundleAsync(options, extraOptions = {}) {
773
+ const { baseUrl, routerRoot, isExporting } = this.instanceMetroOptions;
774
+ (0, _assert().default)(options.mainModuleName != null, 'mainModuleName must be provided in options.');
775
+ (0, _assert().default)(baseUrl != null && routerRoot != null && isExporting != null, 'The server must be started before calling legacySinglePageExportBundleAsync.');
776
+ const opts = {
777
+ ...this.instanceMetroOptions,
778
+ baseUrl,
779
+ routerRoot,
780
+ isExporting,
781
+ ...options,
782
+ environment: 'client',
783
+ serializerOutput: 'static'
784
+ };
785
+ // https://github.com/facebook/metro/blob/2405f2f6c37a1b641cc379b9c733b1eff0c1c2a1/packages/metro/src/lib/parseOptionsFromUrl.js#L55-L87
786
+ if (!opts.mainModuleName.startsWith('/') && !_path().default.isAbsolute(opts.mainModuleName)) {
787
+ opts.mainModuleName = './' + opts.mainModuleName;
788
+ }
789
+ const output = await this.metroLoadModuleContents(opts.mainModuleName, opts, extraOptions);
790
+ return {
791
+ artifacts: output.artifacts,
792
+ assets: output.assets
793
+ };
794
+ }
795
+ async watchEnvironmentVariables() {
796
+ if (!this.instance) {
797
+ throw new Error('Cannot observe environment variable changes without a running Metro instance.');
798
+ }
799
+ if (!this.metro) {
800
+ // This can happen when the run command is used and the server is already running in another
801
+ // process.
802
+ debug('Skipping Environment Variable observation because Metro is not running (headless).');
803
+ return;
804
+ }
805
+ (0, _waitForMetroToObserveTypeScriptFile.observeFileChanges)({
806
+ metro: this.metro,
807
+ server: this.instance.server
808
+ }, (0, _nodeEnv.getEnvFiles)(this.projectRoot), ()=>{
809
+ debug('Reloading environment variables...');
810
+ // Force reload the environment variables.
811
+ (0, _nodeEnv.reloadEnvFiles)(this.projectRoot);
812
+ });
813
+ }
814
+ async startImplementationAsync(options) {
815
+ var _exp_experiments, _exp_experiments1, _exp_experiments2, _exp_experiments3, _exp_experiments4, _exp_web, _exp_web1, _exp_experiments5, _exp_extra, _exp_web2, _exp_extra_router, _exp_extra1;
816
+ options.port = await this.resolvePortAsync(options);
817
+ await this.initUrlCreator(options);
818
+ const config = (0, _config().getConfig)(this.projectRoot, {
819
+ skipSDKVersionRequirement: true
820
+ });
821
+ const { exp } = config;
822
+ // NOTE: This will change in the future when it's less experimental, we enable React 19, and turn on more RSC flags by default.
823
+ const isReactServerComponentsEnabled = !!((_exp_experiments = exp.experiments) == null ? void 0 : _exp_experiments.reactServerComponentRoutes) || !!((_exp_experiments1 = exp.experiments) == null ? void 0 : _exp_experiments1.reactServerFunctions);
824
+ const isReactServerActionsOnlyEnabled = !((_exp_experiments2 = exp.experiments) == null ? void 0 : _exp_experiments2.reactServerComponentRoutes) && !!((_exp_experiments3 = exp.experiments) == null ? void 0 : _exp_experiments3.reactServerFunctions);
825
+ this.isReactServerComponentsEnabled = isReactServerComponentsEnabled;
826
+ this.isReactServerRoutesEnabled = !!((_exp_experiments4 = exp.experiments) == null ? void 0 : _exp_experiments4.reactServerComponentRoutes);
827
+ const useServerRendering = [
828
+ 'static',
829
+ 'server'
830
+ ].includes(((_exp_web = exp.web) == null ? void 0 : _exp_web.output) ?? '');
831
+ const hasApiRoutes = isReactServerComponentsEnabled || ((_exp_web1 = exp.web) == null ? void 0 : _exp_web1.output) === 'server';
832
+ const baseUrl = (0, _metroOptions.getBaseUrlFromExpoConfig)(exp);
833
+ const asyncRoutes = (0, _metroOptions.getAsyncRoutesFromExpoConfig)(exp, options.mode ?? 'development', 'web');
834
+ const routerRoot = (0, _router.getRouterDirectoryModuleIdWithManifest)(this.projectRoot, exp);
835
+ const reactCompiler = !!((_exp_experiments5 = exp.experiments) == null ? void 0 : _exp_experiments5.reactCompiler);
836
+ const appDir = _path().default.join(this.projectRoot, routerRoot);
837
+ const mode = options.mode ?? 'development';
838
+ const routerOptions = (_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router;
839
+ if (isReactServerComponentsEnabled && ((_exp_web2 = exp.web) == null ? void 0 : _exp_web2.output) === 'static') {
840
+ throw new _errors.CommandError(`Experimental server component support does not support 'web.output: ${exp.web.output}' yet. Use 'web.output: "server"' during the experimental phase.`);
841
+ }
842
+ // Error early about the window.location polyfill when React Server Components are enabled.
843
+ if (isReactServerComponentsEnabled && (exp == null ? void 0 : (_exp_extra1 = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra1.router) == null ? void 0 : _exp_extra_router.origin) === false) {
844
+ const configPath = config.dynamicConfigPath ?? config.staticConfigPath ?? '/app.json';
845
+ const configFileName = _path().default.basename(configPath);
846
+ throw new _errors.CommandError(`The Expo Router "origin" property in the Expo config (${configFileName}) cannot be "false" when React Server Components is enabled. Remove it from the ${configFileName} file and try again.`);
847
+ }
848
+ const instanceMetroOptions = {
849
+ isExporting: !!options.isExporting,
850
+ baseUrl,
851
+ mode,
852
+ routerRoot,
853
+ reactCompiler,
854
+ minify: options.minify,
855
+ asyncRoutes
856
+ };
857
+ this.instanceMetroOptions = instanceMetroOptions;
858
+ const parsedOptions = {
859
+ host: options.location.hostType === 'localhost' ? 'localhost' : undefined,
860
+ port: options.port,
861
+ maxWorkers: options.maxWorkers,
862
+ resetCache: options.resetDevServer
863
+ };
864
+ event('start', {
865
+ mode,
866
+ web: this.isTargetingWeb(),
867
+ baseUrl,
868
+ asyncRoutes,
869
+ routerRoot: event.path(appDir),
870
+ serverComponents: this.isReactServerComponentsEnabled,
871
+ serverActions: isReactServerActionsOnlyEnabled,
872
+ serverRendering: useServerRendering,
873
+ apiRoutes: hasApiRoutes,
874
+ exporting: !!options.isExporting
875
+ });
876
+ const { metro, hmrServer, server, middleware, messageSocket } = await (0, _instantiateMetro.instantiateMetroAsync)(this, parsedOptions, {
877
+ isExporting: !!options.isExporting,
878
+ exp
879
+ });
880
+ const protocol = server instanceof _https().default.Server ? 'https' : 'http';
881
+ // Required for symbolication:
882
+ process.env.EXPO_DEV_SERVER_ORIGIN = `${protocol}://localhost:${options.port}`;
883
+ if (!options.isExporting) {
884
+ const manifestMiddleware = await this.getManifestMiddlewareAsync(options);
885
+ // Important that we noop source maps for context modules as soon as possible.
886
+ (0, _mutations.prependMiddleware)(middleware, new _ContextModuleSourceMapsMiddleware.ContextModuleSourceMapsMiddleware().getHandler());
887
+ // We need the manifest handler to be the first middleware to run so our
888
+ // routes take precedence over static files. For example, the manifest is
889
+ // served from '/' and if the user has an index.html file in their project
890
+ // then the manifest handler will never run, the static middleware will run
891
+ // and serve index.html instead of the manifest.
892
+ // https://github.com/expo/expo/issues/13114
893
+ (0, _mutations.prependMiddleware)(middleware, manifestMiddleware.getHandler());
894
+ middleware.use(new _InterstitialPageMiddleware.InterstitialPageMiddleware(this.projectRoot, {
895
+ // TODO: Prevent this from becoming stale.
896
+ scheme: options.location.scheme ?? null
897
+ }).getHandler());
898
+ middleware.use(new _DevToolsPluginMiddleware.DevToolsPluginMiddleware(this.projectRoot, this.devToolsPluginManager).getHandler());
899
+ const deepLinkMiddleware = new _RuntimeRedirectMiddleware.RuntimeRedirectMiddleware(this.projectRoot, {
900
+ getLocation: ({ runtime })=>{
901
+ if (runtime === 'custom') {
902
+ var _this_urlCreator;
903
+ return (_this_urlCreator = this.urlCreator) == null ? void 0 : _this_urlCreator.constructDevClientUrl();
904
+ } else {
905
+ var _this_urlCreator1;
906
+ return (_this_urlCreator1 = this.urlCreator) == null ? void 0 : _this_urlCreator1.constructUrl({
907
+ scheme: 'exp'
908
+ });
909
+ }
910
+ }
911
+ });
912
+ middleware.use(deepLinkMiddleware.getHandler());
913
+ const serverRoot = (0, _paths().getMetroServerRoot)(this.projectRoot);
914
+ const domComponentRenderer = (0, _DomComponentsMiddleware.createDomComponentsMiddleware)({
915
+ metroRoot: serverRoot,
916
+ projectRoot: this.projectRoot
917
+ }, instanceMetroOptions);
918
+ // Add support for DOM components.
919
+ // TODO: Maybe put behind a flag for now?
920
+ middleware.use(domComponentRenderer);
921
+ middleware.use(new _CreateFileMiddleware.CreateFileMiddleware({
922
+ metroRoot: serverRoot,
923
+ projectRoot: this.projectRoot,
924
+ appDir
925
+ }).getHandler());
926
+ // For providing info to the error overlay.
927
+ middleware.use((req, res, next)=>{
928
+ var _req_url;
929
+ // Use by `@expo/log-box` https://github.com/expo/expo/blob/f29b9f3715e42dca87bf3eebf11f7e7dd1ff73c1/packages/%40expo/log-box/src/utils/devServerEndpoints.ts#L82
930
+ if ((_req_url = req.url) == null ? void 0 : _req_url.startsWith('/_expo/error-overlay-meta')) {
931
+ res.statusCode = 200;
932
+ res.setHeader('Content-Type', 'application/json');
933
+ res.end(JSON.stringify({
934
+ projectRoot: this.projectRoot,
935
+ serverRoot,
936
+ sdkVersion: exp.sdkVersion
937
+ }));
938
+ return;
939
+ }
940
+ return next();
941
+ });
942
+ // Append support for redirecting unhandled requests to the index.html page on web.
943
+ if (this.isTargetingWeb()) {
944
+ // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.
945
+ middleware.use(new _ServeStaticMiddleware.ServeStaticMiddleware(this.projectRoot).getHandler());
946
+ // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.
947
+ middleware.use(new _FaviconMiddleware.FaviconMiddleware(this.projectRoot).getHandler());
948
+ }
949
+ if (useServerRendering || isReactServerComponentsEnabled) {
950
+ (0, _waitForMetroToObserveTypeScriptFile.observeAnyFileChanges)({
951
+ metro,
952
+ server
953
+ }, (events)=>{
954
+ var _exp_extra_router, _exp_extra;
955
+ if (hasApiRoutes) {
956
+ // NOTE(EvanBacon): We aren't sure what files the API routes are using so we'll just invalidate
957
+ // aggressively to ensure we always have the latest. The only caching we really get here is for
958
+ // cases where the user is making subsequent requests to the same API route without changing anything.
959
+ // This is useful for testing but pretty suboptimal. Luckily our caching is pretty aggressive so it makes
960
+ // up for a lot of the overhead.
961
+ this.invalidateApiRouteCache();
962
+ } else if (!(0, _router.hasWarnedAboutApiRoutes)()) {
963
+ for (const event of events){
964
+ var // If the user did not delete a file that matches the Expo Router API Route convention, then we should warn that
965
+ // API Routes are not enabled in the project.
966
+ _event_metadata;
967
+ if (((_event_metadata = event.metadata) == null ? void 0 : _event_metadata.type) !== 'd' && // Ensure the file is in the project's routes directory to prevent false positives in monorepos.
968
+ event.filePath.startsWith(appDir) && (0, _router.isApiRouteConvention)(event.filePath)) {
969
+ (0, _router.warnInvalidWebOutput)();
970
+ }
971
+ }
972
+ }
973
+ // Handle loader file changes for HMR
974
+ if ((_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerDataLoaders) {
975
+ for (const event of events){
976
+ var _event_metadata1;
977
+ if (((_event_metadata1 = event.metadata) == null ? void 0 : _event_metadata1.type) !== 'd') {
978
+ this.handleLoaderFileChange(event.filePath);
979
+ }
980
+ }
981
+ }
982
+ });
983
+ }
984
+ // If React 19 is enabled, then add RSC middleware to the dev server.
985
+ if (isReactServerComponentsEnabled) {
986
+ this.bindRSCDevModuleInjectionHandler();
987
+ const rscMiddleware = (0, _createServerComponentsMiddleware.createServerComponentsMiddleware)(this.projectRoot, {
988
+ instanceMetroOptions: this.instanceMetroOptions,
989
+ rscPath: '/_flight',
990
+ ssrLoadModule: this.ssrLoadModule.bind(this),
991
+ ssrLoadModuleArtifacts: this.metroImportAsArtifactsAsync.bind(this),
992
+ useClientRouter: isReactServerActionsOnlyEnabled,
993
+ createModuleId: metro._createModuleId.bind(metro),
994
+ routerOptions
995
+ });
996
+ this.rscRenderer = rscMiddleware;
997
+ this.onReloadRscEvent = rscMiddleware.onReloadRscEvent;
998
+ }
999
+ // Append support for redirecting unhandled requests to the index.html page on web.
1000
+ if (this.isTargetingWeb()) {
1001
+ // Use `createRouteHandlerMiddleware()` when either of the following is true:
1002
+ // - Server rendering is enabled (server/static output)
1003
+ // - RSC is enabled. Even in `single` output mode, RSC needs the route handler
1004
+ if (!useServerRendering && !isReactServerComponentsEnabled) {
1005
+ middleware.use(new _HistoryFallbackMiddleware.HistoryFallbackMiddleware(manifestMiddleware.getHandler().internal).getHandler());
1006
+ } else {
1007
+ var _config_exp_extra;
1008
+ middleware.use((0, _createServerRouteMiddleware.createRouteHandlerMiddleware)(this.projectRoot, {
1009
+ appDir,
1010
+ routerRoot,
1011
+ config,
1012
+ ...(_config_exp_extra = config.exp.extra) == null ? void 0 : _config_exp_extra.router,
1013
+ bundleApiRoute: (functionFilePath)=>this.ssrImportApiRoute(functionFilePath, {
1014
+ platform: 'web'
1015
+ }),
1016
+ executeLoaderAsync: async (route, request)=>{
1017
+ var _exp_web, _exp_extra_router, _exp_extra;
1018
+ const url = new URL(request.url);
1019
+ const resolvedLoaderRoute = (0, _resolveLoader.fromServerManifestRoute)(url.pathname, route);
1020
+ if (!resolvedLoaderRoute) {
1021
+ return undefined;
1022
+ }
1023
+ // Only pass the request in SSR mode (server output with SSR enabled).
1024
+ // In static mode, loaders should not receive request data.
1025
+ const isSSREnabled = ((_exp_web = exp.web) == null ? void 0 : _exp_web.output) === 'server' && ((_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerRendering) === true;
1026
+ return this.executeServerDataLoaderAsync(url, resolvedLoaderRoute, isSSREnabled ? request : undefined);
1027
+ },
1028
+ getStaticPageAsync: async (pathname, route, request)=>{
1029
+ // TODO: Add server rendering when RSC is enabled.
1030
+ if (isReactServerComponentsEnabled) {
1031
+ // NOTE: This is a temporary hack to return the SPA/template index.html in development when RSC is enabled.
1032
+ // While this technically works, it doesn't provide the correct experience of server rendering the React code to HTML first.
1033
+ const html = await manifestMiddleware.getSingleHtmlTemplateAsync();
1034
+ return {
1035
+ content: html
1036
+ };
1037
+ }
1038
+ // Non-RSC apps will bundle the static HTML for a given pathname and respond with it.
1039
+ return this.getStaticPageAsync(pathname, route, request);
1040
+ },
1041
+ rsc: isReactServerComponentsEnabled ? {
1042
+ path: '/_flight',
1043
+ handler: this.rscRenderer.handler
1044
+ } : undefined
1045
+ }));
1046
+ }
1047
+ }
1048
+ } else {
1049
+ // If React 19 is enabled, then add RSC middleware to the dev server.
1050
+ if (isReactServerComponentsEnabled) {
1051
+ this.bindRSCDevModuleInjectionHandler();
1052
+ const rscMiddleware = (0, _createServerComponentsMiddleware.createServerComponentsMiddleware)(this.projectRoot, {
1053
+ instanceMetroOptions: this.instanceMetroOptions,
1054
+ rscPath: '/_flight',
1055
+ ssrLoadModule: this.ssrLoadModule.bind(this),
1056
+ ssrLoadModuleArtifacts: this.metroImportAsArtifactsAsync.bind(this),
1057
+ useClientRouter: isReactServerActionsOnlyEnabled,
1058
+ createModuleId: metro._createModuleId.bind(metro),
1059
+ routerOptions
1060
+ });
1061
+ this.rscRenderer = rscMiddleware;
1062
+ }
1063
+ }
1064
+ // Extend the close method to ensure that we clean up the local info.
1065
+ const originalClose = server.close.bind(server);
1066
+ server.close = (callback)=>{
1067
+ return originalClose((err)=>{
1068
+ this.instance = null;
1069
+ this.metro = null;
1070
+ this.hmrServer = null;
1071
+ this.ssrHmrClients = new Map();
1072
+ callback == null ? void 0 : callback(err);
1073
+ });
1074
+ };
1075
+ this.metro = metro;
1076
+ this.hmrServer = hmrServer;
1077
+ return {
1078
+ server,
1079
+ location: {
1080
+ // The port is the main thing we want to send back.
1081
+ port: options.port,
1082
+ // localhost isn't always correct.
1083
+ host: 'localhost',
1084
+ url: `${protocol}://localhost:${options.port}`,
1085
+ protocol
1086
+ },
1087
+ middleware,
1088
+ messageSocket
1089
+ };
1090
+ }
1091
+ async registerSsrHmrAsync(url, onReload) {
1092
+ if (!this.hmrServer || this.ssrHmrClients.has(url)) {
1093
+ return;
1094
+ }
1095
+ debug('[SSR] Register HMR:', url);
1096
+ const sendFn = (message)=>{
1097
+ const data = JSON.parse(String(message));
1098
+ switch(data.type){
1099
+ case 'bundle-registered':
1100
+ case 'update-done':
1101
+ case 'update-start':
1102
+ break;
1103
+ case 'update':
1104
+ {
1105
+ const update = data.body;
1106
+ const { isInitialUpdate, added, modified, deleted } = update;
1107
+ const hasUpdate = added.length || modified.length || deleted.length;
1108
+ // NOTE: We throw away the updates and instead simply send a trigger to the client to re-fetch the server route.
1109
+ if (!isInitialUpdate && hasUpdate) {
1110
+ // Clear all SSR modules before sending the reload event. This ensures that the next event will rebuild the in-memory state from scratch.
1111
+ if (typeof globalThis.__c === 'function') globalThis.__c();
1112
+ const allModuleIds = new Set([
1113
+ ...added,
1114
+ ...modified
1115
+ ].map((m)=>m.module[0]).concat(deleted));
1116
+ const platforms = unique(Array.from(allModuleIds).map((moduleId)=>{
1117
+ var _moduleId_match;
1118
+ if (typeof moduleId !== 'string') {
1119
+ return null;
1120
+ }
1121
+ // Extract platforms from the module IDs.
1122
+ return ((_moduleId_match = moduleId.match(/[?&]platform=([\w]+)/)) == null ? void 0 : _moduleId_match[1]) ?? null;
1123
+ }).filter(Boolean));
1124
+ onReload(platforms);
1125
+ }
1126
+ }
1127
+ break;
1128
+ case 'error':
1129
+ var _data_body;
1130
+ // GraphNotFound can mean that we have an issue in metroOptions where the URL doesn't match the object props.
1131
+ _log.Log.error('[SSR] HMR Error: ' + JSON.stringify(data, null, 2));
1132
+ if (((_data_body = data.body) == null ? void 0 : _data_body.type) === 'GraphNotFoundError') {
1133
+ var _this_metro;
1134
+ _log.Log.error('Available SSR HMR keys:', `${(_this_metro = this.metro) == null ? void 0 : _this_metro._bundler._revisionsByGraphId.keys()}`);
1135
+ }
1136
+ break;
1137
+ default:
1138
+ debug('Unknown HMR message:', data);
1139
+ break;
1140
+ }
1141
+ };
1142
+ const client = await this.hmrServer.onClientConnect(url, sendFn);
1143
+ this.ssrHmrClients.set(url, client);
1144
+ // Opt in...
1145
+ client.optedIntoHMR = true;
1146
+ await this.hmrServer._registerEntryPoint(client, url, sendFn);
1147
+ }
1148
+ async waitForTypeScriptAsync() {
1149
+ if (!this.instance) {
1150
+ throw new Error('Cannot wait for TypeScript without a running server.');
1151
+ }
1152
+ return new Promise((resolve)=>{
1153
+ if (!this.metro) {
1154
+ // This can happen when the run command is used and the server is already running in another
1155
+ // process. In this case we can't wait for the TypeScript check to complete because we don't
1156
+ // have access to the Metro server.
1157
+ debug('Skipping TypeScript check because Metro is not running (headless).');
1158
+ return resolve(false);
1159
+ }
1160
+ const off = (0, _metroWatchTypeScriptFiles.metroWatchTypeScriptFiles)({
1161
+ projectRoot: this.projectRoot,
1162
+ server: this.instance.server,
1163
+ metro: this.metro,
1164
+ tsconfig: true,
1165
+ throttle: true,
1166
+ eventTypes: [
1167
+ 'change',
1168
+ 'add'
1169
+ ],
1170
+ callback: async ()=>{
1171
+ // Run once, this prevents the TypeScript project prerequisite from running on every file change.
1172
+ off();
1173
+ const { TypeScriptProjectPrerequisite } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../../doctor/typescript/TypeScriptProjectPrerequisite.js")));
1174
+ try {
1175
+ const req = new TypeScriptProjectPrerequisite(this.projectRoot);
1176
+ await req.bootstrapAsync();
1177
+ resolve(true);
1178
+ } catch (error) {
1179
+ // Ensure the process doesn't fail if the TypeScript check fails.
1180
+ // This could happen during the install.
1181
+ _log.Log.log();
1182
+ _log.Log.error(_chalk().default.red`Failed to automatically setup TypeScript for your project. Try restarting the dev server to fix.`);
1183
+ _log.Log.exception(error);
1184
+ resolve(false);
1185
+ }
1186
+ }
1187
+ });
1188
+ });
1189
+ }
1190
+ async startTypeScriptServices() {
1191
+ var _this_instance;
1192
+ return (0, _startTypescriptTypeGeneration.startTypescriptTypeGenerationAsync)({
1193
+ server: (_this_instance = this.instance) == null ? void 0 : _this_instance.server,
1194
+ metro: this.metro,
1195
+ projectRoot: this.projectRoot
1196
+ });
1197
+ }
1198
+ getConfigModuleIds() {
1199
+ return [
1200
+ './metro.config.js',
1201
+ './metro.config.json',
1202
+ './rn-cli.config.js'
1203
+ ];
1204
+ }
1205
+ // Bundle the API Route with Metro and return the string contents to be evaluated in the server.
1206
+ async bundleApiRoute(filePath, { platform }) {
1207
+ if (this.pendingRouteOperations.has(filePath)) {
1208
+ return this.pendingRouteOperations.get(filePath);
1209
+ }
1210
+ const bundleAsync = async ()=>{
1211
+ try {
1212
+ debug('Bundle API route:', this.instanceMetroOptions.routerRoot, filePath);
1213
+ return await this.ssrLoadModuleContents(filePath, {
1214
+ isExporting: this.instanceMetroOptions.isExporting,
1215
+ platform
1216
+ });
1217
+ } catch (error) {
1218
+ var _this_instanceMetroOptions;
1219
+ const appDir = ((_this_instanceMetroOptions = this.instanceMetroOptions) == null ? void 0 : _this_instanceMetroOptions.routerRoot) ? _path().default.join(this.projectRoot, this.instanceMetroOptions.routerRoot) : undefined;
1220
+ const relativePath = appDir ? _path().default.relative(appDir, filePath) : filePath;
1221
+ // Expected errors: invalid syntax, missing resolutions.
1222
+ // Wrap with command error for better error messages.
1223
+ const err = new _errors.CommandError('API_ROUTE', (0, _chalk().default)`Failed to bundle API Route: {bold ${relativePath}}\n\n` + error.message);
1224
+ for(const key in error){
1225
+ err[key] = error[key];
1226
+ }
1227
+ throw err;
1228
+ } finally{
1229
+ // pendingRouteOperations.delete(filepath);
1230
+ }
1231
+ };
1232
+ const route = bundleAsync();
1233
+ this.pendingRouteOperations.set(filePath, route);
1234
+ return route;
1235
+ }
1236
+ async ssrImportApiRoute(filePath, { platform }) {
1237
+ // TODO: Cache the evaluated function.
1238
+ try {
1239
+ const apiRoute = await this.bundleApiRoute(filePath, {
1240
+ platform
1241
+ });
1242
+ if (!(apiRoute == null ? void 0 : apiRoute.src)) {
1243
+ return null;
1244
+ }
1245
+ return (0, _getStaticRenderFunctions.evalMetroNoHandling)(this.projectRoot, apiRoute.src, apiRoute.filename);
1246
+ } catch (error) {
1247
+ // Format any errors that were thrown in the global scope of the evaluation.
1248
+ if (error instanceof Error) {
1249
+ try {
1250
+ const htmlServerError = await (0, _metroErrorInterface.getErrorOverlayHtmlAsync)({
1251
+ error,
1252
+ projectRoot: this.projectRoot,
1253
+ routerRoot: this.instanceMetroOptions.routerRoot
1254
+ });
1255
+ return new Response(htmlServerError, {
1256
+ status: 500,
1257
+ headers: {
1258
+ 'Content-Type': 'text/html'
1259
+ }
1260
+ });
1261
+ } catch (internalError) {
1262
+ debug('Failed to generate Metro server error UI for API Route error:', internalError);
1263
+ throw error;
1264
+ }
1265
+ } else {
1266
+ throw error;
1267
+ }
1268
+ }
1269
+ }
1270
+ invalidateApiRouteCache() {
1271
+ this.pendingRouteOperations.clear();
1272
+ }
1273
+ /**
1274
+ * Execute a route's loader function. Used during development and SSG to fetch data required by
1275
+ * routes.
1276
+ *
1277
+ * This function is used during development and production builds, and **must** receive a valid
1278
+ * matched route.
1279
+ *
1280
+ * @experimental
1281
+ */ async executeServerDataLoaderAsync(location, route, // The `request` object is only available when using SSR
1282
+ request) {
1283
+ var _exp_extra;
1284
+ const { exp } = (0, _config().getConfig)(this.projectRoot);
1285
+ const { unstable_useServerDataLoaders, unstable_useServerRendering } = (_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router;
1286
+ if (!unstable_useServerDataLoaders) {
1287
+ throw new _errors.CommandError('LOADERS_NOT_ENABLED', 'Server data loaders are not enabled. Add `unstable_useServerDataLoaders` to your `expo-router` plugin config.');
1288
+ }
1289
+ const { routerRoot } = this.instanceMetroOptions;
1290
+ (0, _assert().default)(routerRoot != null, 'The server must be started before calling executeRouteLoaderAsync.');
1291
+ try {
1292
+ debug(`Matched ${location.pathname} to file: ${route.file}`);
1293
+ const appDir = _path().default.join(this.projectRoot, routerRoot);
1294
+ let modulePath = route.file;
1295
+ modulePath = _path().default.isAbsolute(modulePath) ? modulePath : _path().default.join(appDir, modulePath);
1296
+ modulePath = modulePath.replace(/\.(js|ts)x?$/, '');
1297
+ debug('Using loader module path: ', modulePath);
1298
+ const routeModule = await this.ssrLoadModule(modulePath, {
1299
+ environment: 'node',
1300
+ isLoaderBundle: true
1301
+ });
1302
+ if (routeModule.loader) {
1303
+ // Register this module for loader HMR
1304
+ this.setupLoaderHmr(modulePath);
1305
+ const maybeResponse = await routeModule.loader(request, route.params);
1306
+ let data;
1307
+ if (maybeResponse instanceof Response) {
1308
+ var _exp_web;
1309
+ debug('Loader returned Response for location:', location.pathname);
1310
+ // In SSR, preserve `Response` from the loader
1311
+ if (((_exp_web = exp.web) == null ? void 0 : _exp_web.output) === 'server' && unstable_useServerRendering) {
1312
+ return maybeResponse;
1313
+ }
1314
+ // In SSG, extract body
1315
+ data = await maybeResponse.json();
1316
+ } else {
1317
+ data = maybeResponse;
1318
+ }
1319
+ debug('Loader data:', data ?? null, ' for location:', location.pathname);
1320
+ return Response.json(data ?? null);
1321
+ }
1322
+ debug('No loader found for location:', location.pathname);
1323
+ return undefined;
1324
+ } catch (error) {
1325
+ throw new _errors.CommandError('LOADER_EXECUTION_FAILED', `Failed to execute loader for route "${location.pathname}": ${error.message}`);
1326
+ }
1327
+ }
1328
+ /**
1329
+ * Bundle a loader module with Metro and return the string contents.
1330
+ */ async bundleLoader(filePath, { platform }) {
1331
+ try {
1332
+ debug('Bundle loader:', filePath);
1333
+ return await this.ssrLoadModuleContents(filePath, {
1334
+ isExporting: this.instanceMetroOptions.isExporting,
1335
+ platform,
1336
+ environment: 'node',
1337
+ isLoaderBundle: true
1338
+ });
1339
+ } catch (error) {
1340
+ debug('Failed to bundle loader:', filePath, ':', error.message);
1341
+ throw new _errors.CommandError('LOADER_BUNDLE', (0, _chalk().default)`Failed to bundle loader: {bold ${filePath}}\n\n` + error.message);
1342
+ }
1343
+ }
1344
+ // Ensure the global is available for SSR CSS modules to inject client updates.
1345
+ bindRSCDevModuleInjectionHandler() {
1346
+ // Used by SSR CSS modules to broadcast client updates.
1347
+ globalThis.__expo_rsc_inject_module = this.sendClientModule.bind(this);
1348
+ }
1349
+ // NOTE: This can only target a single platform at a time (web).
1350
+ // used for sending RSC CSS to the root client in development.
1351
+ sendClientModule({ code, id }) {
1352
+ this.broadcastMessage('sendDevCommand', {
1353
+ name: 'module-import',
1354
+ data: {
1355
+ code,
1356
+ id
1357
+ }
1358
+ });
1359
+ }
1360
+ // Metro HMR
1361
+ setupHmr(url) {
1362
+ const onReload = (platforms = [])=>{
1363
+ // Send reload command to client from Fast Refresh code.
1364
+ if (!platforms.length) {
1365
+ // TODO: When is this called?
1366
+ this.broadcastMessage('sendDevCommand', {
1367
+ name: 'rsc-reload'
1368
+ });
1369
+ } else {
1370
+ for (const platform of platforms){
1371
+ this.onReloadRscEvent == null ? void 0 : this.onReloadRscEvent.call(this, platform);
1372
+ this.broadcastMessage('sendDevCommand', {
1373
+ name: 'rsc-reload',
1374
+ platform
1375
+ });
1376
+ }
1377
+ }
1378
+ };
1379
+ this.registerSsrHmrAsync(url.toString(), onReload);
1380
+ }
1381
+ setupLoaderHmr(modulePath) {
1382
+ if (this.watchedLoaderFiles.has(modulePath)) {
1383
+ return;
1384
+ }
1385
+ this.watchedLoaderFiles.add(modulePath);
1386
+ debug('[Loader HMR] Registering loader file for HMR:', modulePath);
1387
+ }
1388
+ handleLoaderFileChange(changedFilePath) {
1389
+ for (const loaderPath of this.watchedLoaderFiles){
1390
+ const possibleExtensions = [
1391
+ '.tsx',
1392
+ '.ts',
1393
+ '.jsx',
1394
+ '.js'
1395
+ ];
1396
+ const isLoaderFile = possibleExtensions.some((ext)=>changedFilePath === loaderPath + ext || changedFilePath === loaderPath);
1397
+ if (isLoaderFile) {
1398
+ debug('[Loader HMR] Loader file changed, triggering reload:', changedFilePath);
1399
+ this.broadcastMessage('sendDevCommand', {
1400
+ name: 'reload'
1401
+ });
1402
+ }
1403
+ }
1404
+ }
1405
+ // Direct Metro access
1406
+ // Emulates the Metro dev server .bundle endpoint without having to go through a server.
1407
+ async _bundleDirectAsync(resolvedEntryFilePath, { transformOptions, resolverOptions, graphOptions, serializerOptions }) {
1408
+ var _this_metro;
1409
+ (0, _assert().default)(this.metro, 'Metro server must be running to bundle directly.');
1410
+ const config = this.metro._config;
1411
+ const buildNumber = this.metro.getNewBuildNumber();
1412
+ const bundlePerfLogger = config.unstable_perfLoggerFactory == null ? void 0 : config.unstable_perfLoggerFactory.call(config, 'BUNDLING_REQUEST', {
1413
+ key: buildNumber
1414
+ });
1415
+ const onProgress = (transformedFileCount, totalFileCount)=>{
1416
+ var _this_metro__reporter_update, _this_metro__reporter, _this_metro;
1417
+ (_this_metro = this.metro) == null ? void 0 : (_this_metro__reporter = _this_metro._reporter) == null ? void 0 : (_this_metro__reporter_update = _this_metro__reporter.update) == null ? void 0 : _this_metro__reporter_update.call(_this_metro__reporter, {
1418
+ buildID: getBuildID(buildNumber),
1419
+ type: 'bundle_transform_progressed',
1420
+ transformedFileCount,
1421
+ totalFileCount
1422
+ });
1423
+ };
1424
+ const revPromise = this.getMetroRevision(resolvedEntryFilePath, {
1425
+ graphOptions,
1426
+ transformOptions,
1427
+ resolverOptions
1428
+ });
1429
+ bundlePerfLogger == null ? void 0 : bundlePerfLogger.point('resolvingAndTransformingDependencies_start');
1430
+ bundlePerfLogger == null ? void 0 : bundlePerfLogger.annotate({
1431
+ bool: {
1432
+ initial_build: revPromise == null
1433
+ }
1434
+ });
1435
+ (_this_metro = this.metro) == null ? void 0 : _this_metro._reporter.update({
1436
+ buildID: getBuildID(buildNumber),
1437
+ bundleDetails: {
1438
+ bundleType: transformOptions.type,
1439
+ dev: transformOptions.dev,
1440
+ entryFile: resolvedEntryFilePath,
1441
+ minify: transformOptions.minify,
1442
+ platform: transformOptions.platform,
1443
+ customResolverOptions: resolverOptions.customResolverOptions,
1444
+ customTransformOptions: transformOptions.customTransformOptions ?? {}
1445
+ },
1446
+ isPrefetch: false,
1447
+ type: 'bundle_build_started'
1448
+ });
1449
+ try {
1450
+ let delta;
1451
+ let revision;
1452
+ try {
1453
+ var _transformOptions_customTransformOptions;
1454
+ // TODO: Some bug in Metro/RSC causes this to break when changing imports in server components.
1455
+ // We should resolve the bug because it results in ~6x faster bundling to reuse the graph revision.
1456
+ if (((_transformOptions_customTransformOptions = transformOptions.customTransformOptions) == null ? void 0 : _transformOptions_customTransformOptions.environment) === 'react-server') {
1457
+ const props = await this.metro.getBundler().initializeGraph(// NOTE: Using absolute path instead of relative input path is a breaking change.
1458
+ // entryFile,
1459
+ resolvedEntryFilePath, transformOptions, resolverOptions, {
1460
+ onProgress,
1461
+ shallow: graphOptions.shallow,
1462
+ lazy: graphOptions.lazy
1463
+ });
1464
+ delta = props.delta;
1465
+ revision = props.revision;
1466
+ } else {
1467
+ const props = await (revPromise != null ? this.metro.getBundler().updateGraph(await revPromise, false) : this.metro.getBundler().initializeGraph(// NOTE: Using absolute path instead of relative input path is a breaking change.
1468
+ // entryFile,
1469
+ resolvedEntryFilePath, transformOptions, resolverOptions, {
1470
+ onProgress,
1471
+ shallow: graphOptions.shallow,
1472
+ lazy: graphOptions.lazy
1473
+ }));
1474
+ delta = props.delta;
1475
+ revision = props.revision;
1476
+ }
1477
+ } catch (error) {
1478
+ (0, _metroErrorInterface.attachImportStackToRootMessage)(error);
1479
+ (0, _metroErrorInterface.dropStackIfContainsCodeFrame)(error);
1480
+ throw error;
1481
+ }
1482
+ bundlePerfLogger == null ? void 0 : bundlePerfLogger.annotate({
1483
+ int: {
1484
+ graph_node_count: revision.graph.dependencies.size
1485
+ }
1486
+ });
1487
+ bundlePerfLogger == null ? void 0 : bundlePerfLogger.point('resolvingAndTransformingDependencies_end');
1488
+ bundlePerfLogger == null ? void 0 : bundlePerfLogger.point('serializingBundle_start');
1489
+ const shouldAddToIgnoreList = this.metro._shouldAddModuleToIgnoreList.bind(this.metro);
1490
+ const serializer = this.getMetroSerializer();
1491
+ const options = {
1492
+ asyncRequireModulePath: await this.metro._resolveRelativePath(config.transformer.asyncRequireModulePath, {
1493
+ relativeTo: 'project',
1494
+ resolverOptions,
1495
+ transformOptions
1496
+ }),
1497
+ // ...serializerOptions,
1498
+ processModuleFilter: config.serializer.processModuleFilter,
1499
+ createModuleId: this.metro._createModuleId,
1500
+ getRunModuleStatement: config.serializer.getRunModuleStatement,
1501
+ globalPrefix: config.transformer.globalPrefix,
1502
+ includeAsyncPaths: graphOptions.lazy,
1503
+ dev: transformOptions.dev,
1504
+ projectRoot: config.projectRoot,
1505
+ modulesOnly: serializerOptions.modulesOnly,
1506
+ runBeforeMainModule: config.serializer.getModulesRunBeforeMainModule(resolvedEntryFilePath),
1507
+ runModule: serializerOptions.runModule,
1508
+ sourceMapUrl: serializerOptions.sourceMapUrl,
1509
+ sourceUrl: serializerOptions.sourceUrl,
1510
+ inlineSourceMap: serializerOptions.inlineSourceMap,
1511
+ serverRoot: config.server.unstable_serverRoot ?? config.projectRoot,
1512
+ shouldAddToIgnoreList,
1513
+ // TODO(@kitten): This is incoherently typed. The target should be typed to accept this coherently
1514
+ // but we have no type overrides or a proper type chain for this
1515
+ serializerOptions
1516
+ };
1517
+ // TODO(@kitten): Yearns for a refactor. The typings here were and are questionable
1518
+ const bundle = await serializer(// NOTE: Using absolute path instead of relative input path is a breaking change.
1519
+ // entryFile,
1520
+ resolvedEntryFilePath, revision.prepend, revision.graph, options);
1521
+ this.metro._reporter.update({
1522
+ buildID: getBuildID(buildNumber),
1523
+ type: 'bundle_build_done'
1524
+ });
1525
+ bundlePerfLogger == null ? void 0 : bundlePerfLogger.point('serializingBundle_end');
1526
+ let bundleCode = null;
1527
+ let bundleMap = null;
1528
+ if (serializerOptions.output === 'static') {
1529
+ try {
1530
+ var _artifacts_filter_, _artifacts_filter;
1531
+ const parsed = typeof bundle === 'string' ? JSON.parse(bundle) : bundle;
1532
+ (0, _assert().default)('artifacts' in parsed && Array.isArray(parsed.artifacts), 'Expected serializer to return an object with key artifacts to contain an array of serial assets.');
1533
+ const artifacts = parsed.artifacts;
1534
+ const assets = parsed.assets;
1535
+ const bundleCode = artifacts.filter((asset)=>asset.type === 'js')[0];
1536
+ const bundleMap = ((_artifacts_filter = artifacts.filter((asset)=>asset.type === 'map')) == null ? void 0 : (_artifacts_filter_ = _artifacts_filter[0]) == null ? void 0 : _artifacts_filter_.source) ?? '';
1537
+ return {
1538
+ numModifiedFiles: delta.reset ? delta.added.size + revision.prepend.length : delta.added.size + delta.modified.size + delta.deleted.size,
1539
+ lastModifiedDate: revision.date,
1540
+ nextRevId: revision.id,
1541
+ bundle: bundleCode.source,
1542
+ map: bundleMap,
1543
+ artifacts,
1544
+ assets
1545
+ };
1546
+ } catch (error) {
1547
+ throw new Error('Serializer did not return expected format. The project copy of `expo/metro-config` may be out of date. Error: ' + error.message);
1548
+ }
1549
+ }
1550
+ if (typeof bundle === 'string') {
1551
+ bundleCode = bundle;
1552
+ // Create the source map in a second pass...
1553
+ let { prepend, graph } = revision;
1554
+ if (serializerOptions.modulesOnly) {
1555
+ prepend = [];
1556
+ }
1557
+ bundleMap = await sourceMapStringAsync([
1558
+ //
1559
+ ...prepend,
1560
+ ...this.metro._getSortedModules(graph)
1561
+ ], {
1562
+ excludeSource: serializerOptions.excludeSource,
1563
+ processModuleFilter: config.serializer.processModuleFilter,
1564
+ shouldAddToIgnoreList
1565
+ });
1566
+ } else {
1567
+ bundleCode = bundle.code;
1568
+ bundleMap = bundle.map;
1569
+ }
1570
+ return {
1571
+ numModifiedFiles: delta.reset ? delta.added.size + revision.prepend.length : delta.added.size + delta.modified.size + delta.deleted.size,
1572
+ lastModifiedDate: revision.date,
1573
+ nextRevId: revision.id,
1574
+ bundle: bundleCode,
1575
+ map: bundleMap
1576
+ };
1577
+ } catch (error) {
1578
+ // Mark the error so we know how to format and return it later.
1579
+ if (error) {
1580
+ error[_metroErrorInterface.IS_METRO_BUNDLE_ERROR_SYMBOL] = true;
1581
+ }
1582
+ this.metro._reporter.update({
1583
+ buildID: getBuildID(buildNumber),
1584
+ type: 'bundle_build_failed'
1585
+ });
1586
+ throw error;
1587
+ }
1588
+ }
1589
+ getMetroSerializer() {
1590
+ var _this_metro__config, _this_metro;
1591
+ return ((_this_metro = this.metro) == null ? void 0 : (_this_metro__config = _this_metro._config) == null ? void 0 : _this_metro__config.serializer.customSerializer) || ((entryPoint, preModules, graph, options)=>(0, _bundleToString().default)((0, _baseJSBundle().default)(entryPoint, preModules, graph, options)).code);
1592
+ }
1593
+ getMetroRevision(resolvedEntryFilePath, { graphOptions, transformOptions, resolverOptions }) {
1594
+ (0, _assert().default)(this.metro, 'Metro server must be running to bundle directly.');
1595
+ const config = this.metro._config;
1596
+ const graphId = (0, _getGraphId().default)(resolvedEntryFilePath, transformOptions, {
1597
+ unstable_allowRequireContext: config.transformer.unstable_allowRequireContext,
1598
+ resolverOptions,
1599
+ shallow: graphOptions.shallow,
1600
+ lazy: graphOptions.lazy
1601
+ });
1602
+ return this.metro.getBundler().getRevisionByGraphId(graphId);
1603
+ }
1604
+ async resolveRelativePathAsync(moduleId, { resolverOptions, transformOptions }) {
1605
+ (0, _assert().default)(this.metro, 'cannot invoke resolveRelativePathAsync without metro instance');
1606
+ return await this.metro._resolveRelativePath((0, _metroOptions.convertPathToModuleSpecifier)(moduleId), {
1607
+ relativeTo: 'server',
1608
+ resolverOptions,
1609
+ transformOptions
1610
+ });
1611
+ }
1612
+ constructor(...args){
1613
+ super(...args), this.metro = null, this.hmrServer = null, this.ssrHmrClients = new Map(), // Set when the server is started.
1614
+ this.instanceMetroOptions = {}, this.ssrLoadModule = async (filePath, specificOptions = {}, extras = {})=>{
1615
+ // NOTE(@kitten): We don't properly initialize the server-side modules
1616
+ // Instead, we first load an entrypoint with an empty bundle to initialize the runtime instead
1617
+ // See: ./createServerComponentsMiddleware.ts
1618
+ const getEmptyModulePath = ()=>{
1619
+ (0, _assert().default)(this.metro, 'Metro server must be running to load SSR modules.');
1620
+ return this.metro._config.resolver.emptyModulePath;
1621
+ };
1622
+ const res = await this.ssrLoadModuleContents(filePath ?? getEmptyModulePath(), specificOptions);
1623
+ if (// TODO: hot should be a callback function for invalidating the related SSR module.
1624
+ extras.hot && this.instanceMetroOptions.isExporting !== true) {
1625
+ // Register SSR HMR
1626
+ const serverRoot = (0, _paths().getMetroServerRoot)(this.projectRoot);
1627
+ const relativePath = _path().default.relative(serverRoot, res.filename);
1628
+ const url = new URL(relativePath, this.getDevServerUrlOrAssert());
1629
+ this.setupHmr(url);
1630
+ }
1631
+ return (0, _getStaticRenderFunctions.evalMetroAndWrapFunctions)(this.projectRoot, res.src, res.filename, specificOptions.isExporting ?? this.instanceMetroOptions.isExporting);
1632
+ }, this.rscRenderer = null, this.onReloadRscEvent = null, // API Routes
1633
+ this.pendingRouteOperations = new Map(), this.watchedLoaderFiles = new Set();
1634
+ }
1635
+ }
1636
+ function getBuildID(buildNumber) {
1637
+ return buildNumber.toString(36);
1638
+ }
1639
+ function wrapBundle(str) {
1640
+ // Skip the metro runtime so debugging is a bit easier.
1641
+ // Replace the __r() call with an export statement.
1642
+ // Use gm to apply to the last require line. This is needed when the bundle has side-effects.
1643
+ return str.replace(/^(__r\(.*\);)$/gm, 'module.exports = $1');
1644
+ }
1645
+ async function sourceMapStringAsync(modules, options) {
1646
+ return (await (0, _sourceMapGenerator().sourceMapGeneratorNonBlocking)(modules, options)).toString(undefined, {
1647
+ excludeSource: options.excludeSource
1648
+ });
1649
+ }
1650
+ function unique(array) {
1651
+ return Array.from(new Set(array));
1652
+ }
1653
+
1654
+ //# sourceMappingURL=MetroBundlerDevServer.js.map