@depup/expo__cli 55.0.22-depup.1 → 57.0.9-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -18
  3. package/build/bin/cli +4 -4
  4. package/build/bin/cli.map +1 -1
  5. package/build/src/api/endpoint.js +4 -4
  6. package/build/src/api/endpoint.js.map +1 -1
  7. package/build/src/api/getExpoSchema.js +3 -3
  8. package/build/src/api/getExpoSchema.js.map +1 -1
  9. package/build/src/api/graphql/client.js +26 -14
  10. package/build/src/api/graphql/client.js.map +1 -1
  11. package/build/src/api/graphql/mutations/TunnelMutation.js +31 -0
  12. package/build/src/api/graphql/mutations/TunnelMutation.js.map +1 -0
  13. package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
  14. package/build/src/api/rest/cache/ResponseCache.js +5 -5
  15. package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
  16. package/build/src/api/rest/client.js +35 -20
  17. package/build/src/api/rest/client.js.map +1 -1
  18. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
  19. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  20. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  21. package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
  22. package/build/src/api/updateDevelopmentSession.js +6 -5
  23. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  24. package/build/src/api/user/UserSettings.js +28 -15
  25. package/build/src/api/user/UserSettings.js.map +1 -1
  26. package/build/src/api/user/actions.js +10 -3
  27. package/build/src/api/user/actions.js.map +1 -1
  28. package/build/src/api/user/expoSsoLauncher.js +76 -24
  29. package/build/src/api/user/expoSsoLauncher.js.map +1 -1
  30. package/build/src/api/user/otp.js +4 -4
  31. package/build/src/api/user/otp.js.map +1 -1
  32. package/build/src/api/user/user.js +19 -7
  33. package/build/src/api/user/user.js.map +1 -1
  34. package/build/src/config/configAsync.js +3 -3
  35. package/build/src/config/configAsync.js.map +1 -1
  36. package/build/src/config/index.js.map +1 -1
  37. package/build/src/customize/customizeAsync.js.map +1 -1
  38. package/build/src/customize/generate.js +7 -4
  39. package/build/src/customize/generate.js.map +1 -1
  40. package/build/src/customize/index.js.map +1 -1
  41. package/build/src/customize/templates.js +4 -6
  42. package/build/src/customize/templates.js.map +1 -1
  43. package/build/src/customize/typescript.js.map +1 -1
  44. package/build/src/events/index.js +19 -15
  45. package/build/src/events/index.js.map +1 -1
  46. package/build/src/events/stream.js +94 -24
  47. package/build/src/events/stream.js.map +1 -1
  48. package/build/src/expoUpdatesExports.js +50 -7
  49. package/build/src/expoUpdatesExports.js.map +1 -1
  50. package/build/src/export/createMetadataJson.js +2 -1
  51. package/build/src/export/createMetadataJson.js.map +1 -1
  52. package/build/src/export/embed/exportEmbedAsync.js +58 -24
  53. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  54. package/build/src/export/embed/exportServer.js +1 -1
  55. package/build/src/export/embed/exportServer.js.map +1 -1
  56. package/build/src/export/embed/index.js +1 -1
  57. package/build/src/export/embed/index.js.map +1 -1
  58. package/build/src/export/embed/resolveOptions.js +7 -6
  59. package/build/src/export/embed/resolveOptions.js.map +1 -1
  60. package/build/src/export/embed/xcodeCompilerLogger.js +7 -7
  61. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
  62. package/build/src/export/exportApp.js +40 -30
  63. package/build/src/export/exportApp.js.map +1 -1
  64. package/build/src/export/exportAssets.js +5 -5
  65. package/build/src/export/exportAssets.js.map +1 -1
  66. package/build/src/export/exportAsync.js.map +1 -1
  67. package/build/src/export/exportDomComponents.js +16 -9
  68. package/build/src/export/exportDomComponents.js.map +1 -1
  69. package/build/src/export/exportHermes.js +23 -13
  70. package/build/src/export/exportHermes.js.map +1 -1
  71. package/build/src/export/exportStaticAsync.js +30 -21
  72. package/build/src/export/exportStaticAsync.js.map +1 -1
  73. package/build/src/export/favicon.js +26 -34
  74. package/build/src/export/favicon.js.map +1 -1
  75. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  76. package/build/src/export/getResolvedLocales.js.map +1 -1
  77. package/build/src/export/html.js +3 -3
  78. package/build/src/export/html.js.map +1 -1
  79. package/build/src/export/index.js +2 -0
  80. package/build/src/export/index.js.map +1 -1
  81. package/build/src/export/metroAssetLocalPath.js +4 -4
  82. package/build/src/export/metroAssetLocalPath.js.map +1 -1
  83. package/build/src/export/persistMetroAssets.js +6 -6
  84. package/build/src/export/persistMetroAssets.js.map +1 -1
  85. package/build/src/export/publicFolder.js +16 -4
  86. package/build/src/export/publicFolder.js.map +1 -1
  87. package/build/src/export/resolveOptions.js +12 -13
  88. package/build/src/export/resolveOptions.js.map +1 -1
  89. package/build/src/export/saveAssets.js +3 -3
  90. package/build/src/export/saveAssets.js.map +1 -1
  91. package/build/src/export/static.js +6 -0
  92. package/build/src/export/static.js.map +1 -0
  93. package/build/src/export/web/exportWebAsync.js.map +1 -1
  94. package/build/src/export/web/index.js.map +1 -1
  95. package/build/src/export/writeContents.js.map +1 -1
  96. package/build/src/install/checkPackages.js +1 -28
  97. package/build/src/install/checkPackages.js.map +1 -1
  98. package/build/src/install/fixPackages.js.map +1 -1
  99. package/build/src/install/index.js.map +1 -1
  100. package/build/src/install/installAsync.js +3 -3
  101. package/build/src/install/installAsync.js.map +1 -1
  102. package/build/src/install/installExpoPackage.js.map +1 -1
  103. package/build/src/install/resolveOptions.js.map +1 -1
  104. package/build/src/install/utils/autoAddConfigPlugins.js +3 -3
  105. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  106. package/build/src/install/utils/checkPackagesCompatibility.js +32 -16
  107. package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
  108. package/build/src/lint/ESlintPrerequisite.js.map +1 -1
  109. package/build/src/log.js +32 -14
  110. package/build/src/log.js.map +1 -1
  111. package/build/src/login/index.js +25 -5
  112. package/build/src/login/index.js.map +1 -1
  113. package/build/src/logout/index.js.map +1 -1
  114. package/build/src/prebuild/clearNativeFolder.js +49 -14
  115. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  116. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  117. package/build/src/prebuild/copyTemplateFiles.js +3 -3
  118. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  119. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  120. package/build/src/prebuild/index.js +3 -2
  121. package/build/src/prebuild/index.js.map +1 -1
  122. package/build/src/prebuild/prebuildAsync.js +31 -6
  123. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  124. package/build/src/prebuild/renameTemplateAppName.js +8 -5
  125. package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
  126. package/build/src/prebuild/resolveOptions.js +7 -7
  127. package/build/src/prebuild/resolveOptions.js.map +1 -1
  128. package/build/src/prebuild/resolveTemplate.js +10 -5
  129. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  130. package/build/src/prebuild/updateFromTemplate.js +3 -3
  131. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  132. package/build/src/prebuild/updatePackageJson.js +7 -7
  133. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  134. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  135. package/build/src/register/index.js.map +1 -1
  136. package/build/src/run/android/index.js.map +1 -1
  137. package/build/src/run/android/resolveGradlePropsAsync.js +3 -4
  138. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
  139. package/build/src/run/android/resolveInstallApkName.js +48 -1
  140. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  141. package/build/src/run/android/resolveLaunchProps.js +4 -1
  142. package/build/src/run/android/resolveLaunchProps.js.map +1 -1
  143. package/build/src/run/android/resolveOptions.js.map +1 -1
  144. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  145. package/build/src/run/ensureNativeProject.js.map +1 -1
  146. package/build/src/run/hints.js +4 -4
  147. package/build/src/run/hints.js.map +1 -1
  148. package/build/src/run/index.js.map +1 -1
  149. package/build/src/run/ios/XcodeBuild.js +163 -23
  150. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  151. package/build/src/run/ios/appleDevice/AppleDevice.js +6 -5
  152. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  153. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  154. package/build/src/run/ios/appleDevice/client/AFCClient.js +10 -16
  155. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  156. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  157. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  158. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +2 -1
  159. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  160. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  161. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  162. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  163. package/build/src/run/ios/appleDevice/client/ServiceClient.js +3 -3
  164. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  165. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  166. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +3 -3
  167. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  168. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +16 -13
  169. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  170. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +6 -6
  171. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  172. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +5 -5
  173. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  174. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +7 -7
  175. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  176. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +5 -5
  177. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
  178. package/build/src/run/ios/codeSigning/Security.js +8 -8
  179. package/build/src/run/ios/codeSigning/Security.js.map +1 -1
  180. package/build/src/run/ios/codeSigning/configureCodeSigning.js +5 -3
  181. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  182. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +7 -5
  183. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  184. package/build/src/run/ios/codeSigning/settings.js +3 -3
  185. package/build/src/run/ios/codeSigning/settings.js.map +1 -1
  186. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +4 -4
  187. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  188. package/build/src/run/ios/index.js +8 -1
  189. package/build/src/run/ios/index.js.map +1 -1
  190. package/build/src/run/ios/launchApp.js +3 -3
  191. package/build/src/run/ios/launchApp.js.map +1 -1
  192. package/build/src/run/ios/options/appleDestinations.js.map +1 -1
  193. package/build/src/run/ios/options/promptDevice.js +3 -3
  194. package/build/src/run/ios/options/promptDevice.js.map +1 -1
  195. package/build/src/run/ios/options/resolveDevice.js +8 -3
  196. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  197. package/build/src/run/ios/options/resolveNativeScheme.js +4 -4
  198. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  199. package/build/src/run/ios/options/resolveOptions.js +9 -4
  200. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  201. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
  202. package/build/src/run/ios/runIosAsync.js +39 -0
  203. package/build/src/run/ios/runIosAsync.js.map +1 -1
  204. package/build/src/run/ios/validateExternalBinary.js.map +1 -1
  205. package/build/src/run/startBundler.js +4 -0
  206. package/build/src/run/startBundler.js.map +1 -1
  207. package/build/src/serve/index.js +4 -1
  208. package/build/src/serve/index.js.map +1 -1
  209. package/build/src/serve/serveAsync.js +23 -11
  210. package/build/src/serve/serveAsync.js.map +1 -1
  211. package/build/src/serve/static.js +69 -0
  212. package/build/src/serve/static.js.map +1 -0
  213. package/build/src/start/checkDependenciesOnStart.js +131 -0
  214. package/build/src/start/checkDependenciesOnStart.js.map +1 -0
  215. package/build/src/start/detectDevClient.js +3 -3
  216. package/build/src/start/detectDevClient.js.map +1 -1
  217. package/build/src/start/doctor/Prerequisite.js +4 -4
  218. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  219. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +53 -91
  220. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  221. package/build/src/start/doctor/apple/XcodePrerequisite.js +3 -3
  222. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  223. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +3 -3
  224. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  225. package/build/src/start/doctor/dependencies/getMissingPackages.js +5 -5
  226. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  227. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -5
  228. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  229. package/build/src/start/doctor/dependencies/reactNativeTv.js +149 -0
  230. package/build/src/start/doctor/dependencies/reactNativeTv.js.map +1 -0
  231. package/build/src/start/doctor/dependencies/resolvePackages.js +4 -4
  232. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
  233. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +33 -8
  234. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  235. package/build/src/start/doctor/ngrok/ExternalModule.js +14 -9
  236. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  237. package/build/src/start/doctor/ngrok/NgrokResolver.js +3 -3
  238. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
  239. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  240. package/build/src/start/doctor/typescript/updateTSConfig.js +3 -3
  241. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  242. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +5 -12
  243. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  244. package/build/src/start/index.js +2 -0
  245. package/build/src/start/index.js.map +1 -1
  246. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  247. package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -1
  248. package/build/src/start/interface/commandsTable.js +6 -6
  249. package/build/src/start/interface/commandsTable.js.map +1 -1
  250. package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -1
  251. package/build/src/start/interface/interactiveActions.js +49 -6
  252. package/build/src/start/interface/interactiveActions.js.map +1 -1
  253. package/build/src/start/interface/startInterface.js +13 -4
  254. package/build/src/start/interface/startInterface.js.map +1 -1
  255. package/build/src/start/platforms/AppIdResolver.js +4 -0
  256. package/build/src/start/platforms/AppIdResolver.js.map +1 -1
  257. package/build/src/start/platforms/DeviceManager.js.map +1 -1
  258. package/build/src/start/platforms/ExpoGoInstaller.js +13 -4
  259. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  260. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  261. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
  262. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  263. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  264. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  265. package/build/src/start/platforms/android/adb.js +36 -34
  266. package/build/src/start/platforms/android/adb.js.map +1 -1
  267. package/build/src/start/platforms/android/adbReverse.js +4 -4
  268. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  269. package/build/src/start/platforms/android/emulator.js +5 -5
  270. package/build/src/start/platforms/android/emulator.js.map +1 -1
  271. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  272. package/build/src/start/platforms/android/gradle.js +5 -5
  273. package/build/src/start/platforms/android/gradle.js.map +1 -1
  274. package/build/src/start/platforms/android/promptAndroidDevice.js +3 -3
  275. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  276. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
  277. package/build/src/start/platforms/ios/AppleDeviceManager.js +20 -6
  278. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  279. package/build/src/start/platforms/ios/ApplePlatformManager.js +11 -0
  280. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  281. package/build/src/start/platforms/ios/devicectl.js +7 -7
  282. package/build/src/start/platforms/ios/devicectl.js.map +1 -1
  283. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +26 -11
  284. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  285. package/build/src/start/platforms/ios/getBestSimulator.js +5 -5
  286. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  287. package/build/src/start/platforms/ios/promptAppleDevice.js +5 -4
  288. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  289. package/build/src/start/platforms/ios/simctl.js +25 -19
  290. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  291. package/build/src/start/platforms/ios/simctlLogging.js +3 -3
  292. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  293. package/build/src/start/platforms/ios/xcrun.js +3 -3
  294. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  295. package/build/src/start/project/devices.js +6 -6
  296. package/build/src/start/project/devices.js.map +1 -1
  297. package/build/src/start/project/dotExpo.js +4 -3
  298. package/build/src/start/project/dotExpo.js.map +1 -1
  299. package/build/src/start/resolveOptions.js +7 -7
  300. package/build/src/start/resolveOptions.js.map +1 -1
  301. package/build/src/start/server/AsyncNgrok.js +1 -1
  302. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  303. package/build/src/start/server/AsyncWsTunnel.js +120 -35
  304. package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
  305. package/build/src/start/server/Bonjour.js +8 -3
  306. package/build/src/start/server/Bonjour.js.map +1 -1
  307. package/build/src/start/server/BundlerDevServer.js +23 -9
  308. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  309. package/build/src/start/server/DevServerManager.js.map +1 -1
  310. package/build/src/start/server/DevToolsPlugin.js +63 -3
  311. package/build/src/start/server/DevToolsPlugin.js.map +1 -1
  312. package/build/src/start/server/DevToolsPlugin.schema.js +8 -3
  313. package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -1
  314. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +58 -23
  315. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -1
  316. package/build/src/start/server/DevToolsPluginCliExtensionResults.js +29 -0
  317. package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -1
  318. package/build/src/start/server/DevToolsPluginManager.js +20 -6
  319. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  320. package/build/src/start/server/DevToolsPluginServerHelpers.js +83 -0
  321. package/build/src/start/server/DevToolsPluginServerHelpers.js.map +1 -0
  322. package/build/src/start/server/DevelopmentSession.js +41 -24
  323. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  324. package/build/src/start/server/MCP.js +10 -3
  325. package/build/src/start/server/MCP.js.map +1 -1
  326. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +15 -5
  327. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -1
  328. package/build/src/start/server/UrlCreator.js +14 -1
  329. package/build/src/start/server/UrlCreator.js.map +1 -1
  330. package/build/src/start/server/createMCPDevToolsExtensionSchema.js +18 -4
  331. package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -1
  332. package/build/src/start/server/getStaticRenderFunctions.js +13 -24
  333. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  334. package/build/src/start/server/metro/MetroBundlerDevServer.js +245 -114
  335. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  336. package/build/src/start/server/metro/MetroTerminalReporter.js +67 -16
  337. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  338. package/build/src/start/server/metro/TerminalReporter.js +22 -4
  339. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  340. package/build/src/start/server/metro/createExpoAutolinkingResolver.js +25 -12
  341. package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
  342. package/build/src/start/server/metro/createExpoFallbackResolver.js +39 -0
  343. package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
  344. package/build/src/start/server/metro/createFileMap-fork.js +196 -0
  345. package/build/src/start/server/metro/createFileMap-fork.js.map +1 -0
  346. package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -22
  347. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  348. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  349. package/build/src/start/server/metro/createTypescriptResolver.js +410 -0
  350. package/build/src/start/server/metro/createTypescriptResolver.js.map +1 -0
  351. package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
  352. package/build/src/start/server/metro/debugging/attachAtlas.js +3 -3
  353. package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
  354. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +6 -5
  355. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  356. package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
  357. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +20 -4
  358. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
  359. package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
  360. package/build/src/start/server/metro/dev-server/compression.js.map +1 -1
  361. package/build/src/start/server/metro/dev-server/createMessageSocket.js +13 -2
  362. package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
  363. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +9 -2
  364. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
  365. package/build/src/start/server/metro/dev-server/utils/socketMessages.js +3 -3
  366. package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
  367. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -1
  368. package/build/src/start/server/metro/externals.js +4 -4
  369. package/build/src/start/server/metro/externals.js.map +1 -1
  370. package/build/src/start/server/metro/fetchRouterManifest.js +3 -3
  371. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  372. package/build/src/start/server/metro/getCssModulesFromBundler.js +3 -3
  373. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  374. package/build/src/start/server/metro/instantiateMetro.js +141 -57
  375. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  376. package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
  377. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +4 -4
  378. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
  379. package/build/src/start/server/metro/log-box/formatProjectFilePath.js +3 -3
  380. package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
  381. package/build/src/start/server/metro/metroErrorInterface.js +16 -13
  382. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  383. package/build/src/start/server/metro/metroErrors.js +3 -3
  384. package/build/src/start/server/metro/metroErrors.js.map +1 -1
  385. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +48 -16
  386. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
  387. package/build/src/start/server/metro/resolveLoader.js +3 -3
  388. package/build/src/start/server/metro/resolveLoader.js.map +1 -1
  389. package/build/src/start/server/metro/router.js +23 -14
  390. package/build/src/start/server/metro/router.js.map +1 -1
  391. package/build/src/start/server/metro/runServer-fork.js +13 -10
  392. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  393. package/build/src/start/server/metro/serializeHtml.js +29 -13
  394. package/build/src/start/server/metro/serializeHtml.js.map +1 -1
  395. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +36 -34
  396. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  397. package/build/src/start/server/metro/withMetroErrorReportingResolver.js +53 -30
  398. package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
  399. package/build/src/start/server/metro/withMetroMultiPlatform.js +187 -126
  400. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  401. package/build/src/start/server/metro/withMetroResolvers.js +4 -4
  402. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  403. package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
  404. package/build/src/start/server/middleware/CorsMiddleware.js +3 -3
  405. package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
  406. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  407. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +60 -9
  408. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
  409. package/build/src/start/server/middleware/DomComponentsMiddleware.js +30 -17
  410. package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
  411. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +6 -4
  412. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  413. package/build/src/start/server/middleware/ExpoMiddleware.js +3 -3
  414. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  415. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  416. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
  417. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +13 -8
  418. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  419. package/build/src/start/server/middleware/ManifestMiddleware.js +19 -47
  420. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  421. package/build/src/start/server/middleware/OpenMiddleware.js +150 -0
  422. package/build/src/start/server/middleware/OpenMiddleware.js.map +1 -0
  423. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +13 -4
  424. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  425. package/build/src/start/server/middleware/ServeStaticMiddleware.js +2 -9
  426. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  427. package/build/src/start/server/middleware/domPolyfills.js +60 -0
  428. package/build/src/start/server/middleware/domPolyfills.js.map +1 -0
  429. package/build/src/start/server/middleware/inspector/JsInspector.js +6 -31
  430. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  431. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +14 -24
  432. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
  433. package/build/src/start/server/middleware/inspector/middlwareMutations.js +3 -3
  434. package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
  435. package/build/src/start/server/middleware/metroOptions.js +15 -14
  436. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  437. package/build/src/start/server/middleware/mutations.js +3 -3
  438. package/build/src/start/server/middleware/mutations.js.map +1 -1
  439. package/build/src/start/server/middleware/openHandlers.js +157 -0
  440. package/build/src/start/server/middleware/openHandlers.js.map +1 -0
  441. package/build/src/start/server/middleware/resolveAssets.js +4 -4
  442. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  443. package/build/src/start/server/middleware/resolvePlatform.js +9 -7
  444. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  445. package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
  446. package/build/src/start/server/openPlatforms.js.map +1 -1
  447. package/build/src/start/server/platformBundlers.js +3 -1
  448. package/build/src/start/server/platformBundlers.js.map +1 -1
  449. package/build/src/start/server/serverLogLikeMetro.js +13 -36
  450. package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
  451. package/build/src/start/server/type-generation/expo-env.js +3 -3
  452. package/build/src/start/server/type-generation/expo-env.js.map +1 -1
  453. package/build/src/start/server/type-generation/routes.js +14 -55
  454. package/build/src/start/server/type-generation/routes.js.map +1 -1
  455. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  456. package/build/src/start/server/type-generation/tsconfig.js +5 -5
  457. package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
  458. package/build/src/start/server/webTemplate.js +12 -10
  459. package/build/src/start/server/webTemplate.js.map +1 -1
  460. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +3 -3
  461. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  462. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
  463. package/build/src/start/server/webpack/resolveFromProject.js +4 -4
  464. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
  465. package/build/src/start/server/webpack/tls.js +3 -3
  466. package/build/src/start/server/webpack/tls.js.map +1 -1
  467. package/build/src/start/startAsync.js +21 -11
  468. package/build/src/start/startAsync.js.map +1 -1
  469. package/build/src/types.d.ts +2 -0
  470. package/build/src/utils/FileNotifier.js +1 -1
  471. package/build/src/utils/FileNotifier.js.map +1 -1
  472. package/build/src/utils/args.js +5 -5
  473. package/build/src/utils/args.js.map +1 -1
  474. package/build/src/utils/array.js +8 -8
  475. package/build/src/utils/array.js.map +1 -1
  476. package/build/src/utils/build-cache-providers/helpers.js +4 -4
  477. package/build/src/utils/build-cache-providers/helpers.js.map +1 -1
  478. package/build/src/utils/build-cache-providers/index.js +5 -5
  479. package/build/src/utils/build-cache-providers/index.js.map +1 -1
  480. package/build/src/utils/cocoapods.js +5 -5
  481. package/build/src/utils/cocoapods.js.map +1 -1
  482. package/build/src/utils/codesigning.js +12 -6
  483. package/build/src/utils/codesigning.js.map +1 -1
  484. package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
  485. package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
  486. package/build/src/utils/createTempPath.js +3 -3
  487. package/build/src/utils/createTempPath.js.map +1 -1
  488. package/build/src/utils/delay.js +4 -4
  489. package/build/src/utils/delay.js.map +1 -1
  490. package/build/src/utils/dir.js +21 -11
  491. package/build/src/utils/dir.js.map +1 -1
  492. package/build/src/utils/downloadAppAsync.js.map +1 -1
  493. package/build/src/utils/downloadExpoGoAsync.js +4 -4
  494. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  495. package/build/src/utils/editor.js +4 -4
  496. package/build/src/utils/editor.js.map +1 -1
  497. package/build/src/utils/env.js +39 -13
  498. package/build/src/utils/env.js.map +1 -1
  499. package/build/src/utils/errors.js +6 -6
  500. package/build/src/utils/errors.js.map +1 -1
  501. package/build/src/utils/exit.js +15 -19
  502. package/build/src/utils/exit.js.map +1 -1
  503. package/build/src/utils/expoUpdatesCli.js +5 -5
  504. package/build/src/utils/expoUpdatesCli.js.map +1 -1
  505. package/build/src/utils/fetch.js +4 -4
  506. package/build/src/utils/fetch.js.map +1 -1
  507. package/build/src/utils/filePath.js +3 -29
  508. package/build/src/utils/filePath.js.map +1 -1
  509. package/build/src/utils/findUp.js +3 -3
  510. package/build/src/utils/findUp.js.map +1 -1
  511. package/build/src/utils/fn.js +3 -3
  512. package/build/src/utils/fn.js.map +1 -1
  513. package/build/src/utils/freeport.js +3 -3
  514. package/build/src/utils/freeport.js.map +1 -1
  515. package/build/src/utils/getOrPromptApplicationId.js +3 -5
  516. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  517. package/build/src/utils/getRunningProcess.js +5 -5
  518. package/build/src/utils/getRunningProcess.js.map +1 -1
  519. package/build/src/utils/git.js +3 -3
  520. package/build/src/utils/git.js.map +1 -1
  521. package/build/src/utils/glob.js +3 -3
  522. package/build/src/utils/glob.js.map +1 -1
  523. package/build/src/utils/ip.js +4 -4
  524. package/build/src/utils/ip.js.map +1 -1
  525. package/build/src/utils/link.js +3 -3
  526. package/build/src/utils/link.js.map +1 -1
  527. package/build/src/utils/mergeGitIgnorePaths.js +10 -10
  528. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  529. package/build/src/utils/modifyConfigAsync.js +3 -3
  530. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  531. package/build/src/utils/net.js +23 -4
  532. package/build/src/utils/net.js.map +1 -1
  533. package/build/src/utils/nodeEnv.js +6 -6
  534. package/build/src/utils/nodeEnv.js.map +1 -1
  535. package/build/src/utils/npm.js +10 -9
  536. package/build/src/utils/npm.js.map +1 -1
  537. package/build/src/utils/obj.js +4 -4
  538. package/build/src/utils/obj.js.map +1 -1
  539. package/build/src/utils/open.js +240 -11
  540. package/build/src/utils/open.js.map +1 -1
  541. package/build/src/utils/ora.js +4 -4
  542. package/build/src/utils/ora.js.map +1 -1
  543. package/build/src/utils/plist.js +5 -4
  544. package/build/src/utils/plist.js.map +1 -1
  545. package/build/src/utils/port.js +12 -5
  546. package/build/src/utils/port.js.map +1 -1
  547. package/build/src/utils/progress.js +4 -4
  548. package/build/src/utils/progress.js.map +1 -1
  549. package/build/src/utils/prompts.js +11 -11
  550. package/build/src/utils/prompts.js.map +1 -1
  551. package/build/src/utils/qr.js +5 -4
  552. package/build/src/utils/qr.js.map +1 -1
  553. package/build/src/utils/resolveArgs.js +10 -9
  554. package/build/src/utils/resolveArgs.js.map +1 -1
  555. package/build/src/utils/scheme.js +4 -4
  556. package/build/src/utils/scheme.js.map +1 -1
  557. package/build/src/utils/strings.js.map +1 -1
  558. package/build/src/utils/tar.js +8 -7
  559. package/build/src/utils/tar.js.map +1 -1
  560. package/build/src/utils/telemetry/Telemetry.js +5 -0
  561. package/build/src/utils/telemetry/Telemetry.js.map +1 -1
  562. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  563. package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
  564. package/build/src/utils/telemetry/clients/flushFetchDetached.js +5 -1
  565. package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
  566. package/build/src/utils/telemetry/index.js +4 -4
  567. package/build/src/utils/telemetry/index.js.map +1 -1
  568. package/build/src/utils/telemetry/utils/agent.js +42 -0
  569. package/build/src/utils/telemetry/utils/agent.js.map +1 -0
  570. package/build/src/utils/telemetry/utils/constants.js +3 -3
  571. package/build/src/utils/telemetry/utils/constants.js.map +1 -1
  572. package/build/src/utils/telemetry/utils/context.js +3 -2
  573. package/build/src/utils/telemetry/utils/context.js.map +1 -1
  574. package/build/src/utils/url.js +5 -17
  575. package/build/src/utils/url.js.map +1 -1
  576. package/build/src/utils/validateApplicationId.js +12 -12
  577. package/build/src/utils/validateApplicationId.js.map +1 -1
  578. package/build/src/utils/variadic.js +4 -4
  579. package/build/src/utils/variadic.js.map +1 -1
  580. package/build/src/whoami/index.js.map +1 -1
  581. package/changes.json +16 -36
  582. package/main.js +3 -0
  583. package/package.json +86 -90
  584. package/static/loading-page/index.html +45 -3
  585. package/static/template/+html.tsx +14 -5
  586. package/add-module.js +0 -8
  587. package/build/src/start/server/middleware/inspector/CdpClient.js +0 -81
  588. package/build/src/start/server/middleware/inspector/CdpClient.js.map +0 -1
  589. package/build/src/utils/resolveGlobal.js +0 -195
  590. package/build/src/utils/resolveGlobal.js.map +0 -1
  591. package/build/src/utils/resolveWatchFolders.js +0 -67
  592. package/build/src/utils/resolveWatchFolders.js.map +0 -1
  593. package/build/src/utils/tsconfig/evaluateTsConfig.js +0 -87
  594. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +0 -1
  595. package/build/src/utils/tsconfig/loadTsConfigPaths.js +0 -84
  596. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +0 -1
  597. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +0 -94
  598. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +0 -1
  599. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +0 -62
  600. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +0 -1
@@ -5,20 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- openJsInspector: function() {
12
+ get openJsInspector () {
13
13
  return openJsInspector;
14
14
  },
15
- promptInspectorAppAsync: function() {
15
+ get promptInspectorAppAsync () {
16
16
  return promptInspectorAppAsync;
17
17
  },
18
- queryAllInspectorAppsAsync: function() {
18
+ get queryAllInspectorAppsAsync () {
19
19
  return queryAllInspectorAppsAsync;
20
20
  },
21
- queryInspectorAppAsync: function() {
21
+ get queryInspectorAppAsync () {
22
22
  return queryInspectorAppAsync;
23
23
  }
24
24
  });
@@ -29,7 +29,6 @@ function _chalk() {
29
29
  };
30
30
  return data;
31
31
  }
32
- const _CdpClient = require("./CdpClient");
33
32
  const _prompts = require("../../../../utils/prompts");
34
33
  const _pageIsSupported = require("../../metro/debugging/pageIsSupported");
35
34
  function _interop_require_default(obj) {
@@ -74,25 +73,7 @@ async function queryAllInspectorAppsAsync(metroServerOrigin) {
74
73
  // The newest runtime will be at the end of the list,
75
74
  // reversing the result would save time from try-error.
76
75
  const apps = (await resp.json()).reverse();
77
- const results = [];
78
- for (const app of apps){
79
- // Only use targets with better reloading support
80
- if (!(0, _pageIsSupported.pageIsSupported)(app)) {
81
- continue;
82
- }
83
- try {
84
- // Hide targets that are marked as hidden from the inspector, e.g. instances from expo-dev-menu and expo-dev-launcher.
85
- if (await appShouldBeIgnoredAsync(app)) {
86
- continue;
87
- }
88
- } catch (e) {
89
- // If we can't evaluate the JS, we just ignore the error and skips the target.
90
- debug(`Can't evaluate the JS on the app:`, JSON.stringify(e, null, 2));
91
- continue;
92
- }
93
- results.push(app);
94
- }
95
- return results;
76
+ return apps.filter((app)=>(0, _pageIsSupported.pageIsSupported)(app));
96
77
  }
97
78
  async function promptInspectorAppAsync(apps) {
98
79
  var _choices_find;
@@ -113,11 +94,5 @@ async function promptInspectorAppAsync(apps) {
113
94
  const value = await (0, _prompts.selectAsync)((0, _chalk().default)`Debug target {dim (Hermes only)}`, choices);
114
95
  return (_choices_find = choices.find((item)=>item.value === value)) == null ? void 0 : _choices_find.app;
115
96
  }
116
- const HIDE_FROM_INSPECTOR_ENV = 'globalThis.__expo_hide_from_inspector__';
117
- async function appShouldBeIgnoredAsync(app) {
118
- const hideFromInspector = await (0, _CdpClient.evaluateJsFromCdpAsync)(app.webSocketDebuggerUrl, HIDE_FROM_INSPECTOR_ENV);
119
- debug(`[appShouldBeIgnoredAsync] webSocketDebuggerUrl[${app.webSocketDebuggerUrl}] hideFromInspector[${hideFromInspector}]`);
120
- return hideFromInspector !== undefined;
121
- }
122
97
 
123
98
  //# sourceMappingURL=JsInspector.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/JsInspector.ts"],"sourcesContent":["import type { CustomMessageHandlerConnection } from '@react-native/dev-middleware';\nimport chalk from 'chalk';\n\nimport { evaluateJsFromCdpAsync } from './CdpClient';\nimport { selectAsync } from '../../../../utils/prompts';\nimport { pageIsSupported } from '../../metro/debugging/pageIsSupported';\n\nconst debug = require('debug')(\n 'expo:start:server:middleware:inspector:jsInspector'\n) as typeof console.log;\n\nexport interface MetroInspectorProxyApp {\n /** Unique device ID combined with the page ID */\n id: string;\n /** Information about the underlying CDP implementation, e.g. \"React Native Bridgeless [C++ connection]\" */\n title: string;\n /** The application ID that is currently running on the device, e.g. \"dev.expo.bareexpo\" */\n appId: string;\n /** The description of the runtime, e.g. \"React Native Bridgeless [C++ connection]\" */\n description: string;\n /** The CDP debugger type, which should always be \"node\" */\n type: 'node';\n /** The internal `devtools://..` URL for the debugger to connect to */\n devtoolsFrontendUrl: string;\n /** The websocket URL for the debugger to connect to */\n webSocketDebuggerUrl: string;\n /**\n * Human-readable device name\n * @since react-native@0.73\n */\n deviceName: string;\n /**\n * React Native specific information, like the unique device ID and native capabilities\n * @since react-native@0.74\n */\n reactNative?: {\n /** The unique device ID */\n logicalDeviceId: string;\n /** All supported native capabilities */\n capabilities: CustomMessageHandlerConnection['page']['capabilities'];\n };\n}\n\n/**\n * Launch the React Native DevTools by executing the `POST /open-debugger` request.\n * This endpoint is handled through `@react-native/dev-middleware`.\n */\nexport async function openJsInspector(metroBaseUrl: string, app: MetroInspectorProxyApp) {\n if (!app.reactNative?.logicalDeviceId) {\n debug('Failed to open React Native DevTools, target is missing device ID');\n return false;\n }\n\n const url = new URL('/open-debugger', metroBaseUrl);\n url.searchParams.set('target', app.id);\n\n // Request to open the React Native DevTools, but limit it to 1s\n // This is a workaround as this endpoint might not respond on some devices\n const response = await fetch(url, {\n method: 'POST',\n signal: AbortSignal.timeout(1000),\n }).catch((error) => {\n // Only swallow timeout errors\n if (error.name === 'TimeoutError') {\n return null;\n }\n\n throw error;\n });\n\n if (!response) {\n debug(`No response received from the React Native DevTools.`);\n } else if (response.ok === false) {\n debug('Failed to open React Native DevTools, received response:', response.status);\n }\n\n return response?.ok ?? true;\n}\n\nexport async function queryInspectorAppAsync(\n metroServerOrigin: string,\n appId: string\n): Promise<MetroInspectorProxyApp | null> {\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n return apps.find((app) => app.appId === appId) ?? null;\n}\n\nexport async function queryAllInspectorAppsAsync(\n metroServerOrigin: string\n): Promise<MetroInspectorProxyApp[]> {\n const resp = await fetch(`${metroServerOrigin}/json/list`);\n // The newest runtime will be at the end of the list,\n // reversing the result would save time from try-error.\n const apps: MetroInspectorProxyApp[] = (await resp.json()).reverse();\n const results: MetroInspectorProxyApp[] = [];\n for (const app of apps) {\n // Only use targets with better reloading support\n if (!pageIsSupported(app)) {\n continue;\n }\n\n try {\n // Hide targets that are marked as hidden from the inspector, e.g. instances from expo-dev-menu and expo-dev-launcher.\n if (await appShouldBeIgnoredAsync(app)) {\n continue;\n }\n } catch (e: unknown) {\n // If we can't evaluate the JS, we just ignore the error and skips the target.\n debug(`Can't evaluate the JS on the app:`, JSON.stringify(e, null, 2));\n continue;\n }\n\n results.push(app);\n }\n return results;\n}\n\nexport async function promptInspectorAppAsync(apps: MetroInspectorProxyApp[]) {\n if (apps.length === 1) {\n return apps[0];\n }\n\n // Check if multiple devices are connected with the same device names\n // In this case, append the actual app id (device ID + page number) to the prompt\n const hasDuplicateNames = apps.some(\n (app, index) => index !== apps.findIndex((other) => app.deviceName === other.deviceName)\n );\n\n const choices = apps.map((app) => {\n const name = app.deviceName ?? 'Unknown device';\n return {\n title: hasDuplicateNames ? chalk`${name}{dim - ${app.id}}` : name,\n value: app.id,\n app,\n };\n });\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n\n return choices.find((item) => item.value === value)?.app;\n}\n\nconst HIDE_FROM_INSPECTOR_ENV = 'globalThis.__expo_hide_from_inspector__';\n\nasync function appShouldBeIgnoredAsync(app: MetroInspectorProxyApp): Promise<boolean> {\n const hideFromInspector = await evaluateJsFromCdpAsync(\n app.webSocketDebuggerUrl,\n HIDE_FROM_INSPECTOR_ENV\n );\n debug(\n `[appShouldBeIgnoredAsync] webSocketDebuggerUrl[${app.webSocketDebuggerUrl}] hideFromInspector[${hideFromInspector}]`\n );\n return hideFromInspector !== undefined;\n}\n"],"names":["openJsInspector","promptInspectorAppAsync","queryAllInspectorAppsAsync","queryInspectorAppAsync","debug","require","metroBaseUrl","app","reactNative","logicalDeviceId","url","URL","searchParams","set","id","response","fetch","method","signal","AbortSignal","timeout","catch","error","name","ok","status","metroServerOrigin","appId","apps","find","resp","json","reverse","results","pageIsSupported","appShouldBeIgnoredAsync","e","JSON","stringify","push","choices","length","hasDuplicateNames","some","index","findIndex","other","deviceName","map","title","chalk","value","selectAsync","item","HIDE_FROM_INSPECTOR_ENV","hideFromInspector","evaluateJsFromCdpAsync","webSocketDebuggerUrl","undefined"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/JsInspector.ts"],"sourcesContent":["import type { CustomMessageHandlerConnection } from '@react-native/dev-middleware';\nimport chalk from 'chalk';\n\nimport { selectAsync } from '../../../../utils/prompts';\nimport { pageIsSupported } from '../../metro/debugging/pageIsSupported';\n\nconst debug = require('debug')(\n 'expo:start:server:middleware:inspector:jsInspector'\n) as typeof console.log;\n\nexport interface MetroInspectorProxyApp {\n /** Unique device ID combined with the page ID */\n id: string;\n /** Information about the underlying CDP implementation, e.g. \"React Native Bridgeless [C++ connection]\" */\n title: string;\n /** The application ID that is currently running on the device, e.g. \"dev.expo.bareexpo\" */\n appId: string;\n /** The description of the runtime, e.g. \"React Native Bridgeless [C++ connection]\" */\n description: string;\n /** The CDP debugger type, which should always be \"node\" */\n type: 'node';\n /** The internal `devtools://..` URL for the debugger to connect to */\n devtoolsFrontendUrl: string;\n /** The websocket URL for the debugger to connect to */\n webSocketDebuggerUrl: string;\n /**\n * Human-readable device name\n * @since react-native@0.73\n */\n deviceName: string;\n /**\n * React Native specific information, like the unique device ID and native capabilities\n * @since react-native@0.74\n */\n reactNative?: {\n /** The unique device ID */\n logicalDeviceId: string;\n /** All supported native capabilities */\n capabilities: CustomMessageHandlerConnection['page']['capabilities'];\n };\n}\n\n/**\n * Launch the React Native DevTools by executing the `POST /open-debugger` request.\n * This endpoint is handled through `@react-native/dev-middleware`.\n */\nexport async function openJsInspector(metroBaseUrl: string, app: MetroInspectorProxyApp) {\n if (!app.reactNative?.logicalDeviceId) {\n debug('Failed to open React Native DevTools, target is missing device ID');\n return false;\n }\n\n const url = new URL('/open-debugger', metroBaseUrl);\n url.searchParams.set('target', app.id);\n\n // Request to open the React Native DevTools, but limit it to 1s\n // This is a workaround as this endpoint might not respond on some devices\n const response = await fetch(url, {\n method: 'POST',\n signal: AbortSignal.timeout(1000),\n }).catch((error) => {\n // Only swallow timeout errors\n if (error.name === 'TimeoutError') {\n return null;\n }\n\n throw error;\n });\n\n if (!response) {\n debug(`No response received from the React Native DevTools.`);\n } else if (response.ok === false) {\n debug('Failed to open React Native DevTools, received response:', response.status);\n }\n\n return response?.ok ?? true;\n}\n\nexport async function queryInspectorAppAsync(\n metroServerOrigin: string,\n appId: string\n): Promise<MetroInspectorProxyApp | null> {\n const apps = await queryAllInspectorAppsAsync(metroServerOrigin);\n return apps.find((app) => app.appId === appId) ?? null;\n}\n\nexport async function queryAllInspectorAppsAsync(\n metroServerOrigin: string\n): Promise<MetroInspectorProxyApp[]> {\n const resp = await fetch(`${metroServerOrigin}/json/list`);\n // The newest runtime will be at the end of the list,\n // reversing the result would save time from try-error.\n const apps: MetroInspectorProxyApp[] = (await resp.json()).reverse();\n return apps.filter((app) => pageIsSupported(app));\n}\n\nexport async function promptInspectorAppAsync(apps: MetroInspectorProxyApp[]) {\n if (apps.length === 1) {\n return apps[0];\n }\n\n // Check if multiple devices are connected with the same device names\n // In this case, append the actual app id (device ID + page number) to the prompt\n const hasDuplicateNames = apps.some(\n (app, index) => index !== apps.findIndex((other) => app.deviceName === other.deviceName)\n );\n\n const choices = apps.map((app) => {\n const name = app.deviceName ?? 'Unknown device';\n return {\n title: hasDuplicateNames ? chalk`${name}{dim - ${app.id}}` : name,\n value: app.id,\n app,\n };\n });\n\n const value = await selectAsync(chalk`Debug target {dim (Hermes only)}`, choices);\n\n return choices.find((item) => item.value === value)?.app;\n}\n"],"names":["openJsInspector","promptInspectorAppAsync","queryAllInspectorAppsAsync","queryInspectorAppAsync","debug","require","metroBaseUrl","app","reactNative","logicalDeviceId","url","URL","searchParams","set","id","response","fetch","method","signal","AbortSignal","timeout","catch","error","name","ok","status","metroServerOrigin","appId","apps","find","resp","json","reverse","filter","pageIsSupported","choices","length","hasDuplicateNames","some","index","findIndex","other","deviceName","map","title","chalk","value","selectAsync","item"],"mappings":";;;;;;;;;;;QA8CsBA;eAAAA;;QAkDAC;eAAAA;;QAVAC;eAAAA;;QARAC;eAAAA;;;;gEA7EJ;;;;;;yBAEU;iCACI;;;;;;AAEhC,MAAMC,QAAQC,QAAQ,SACpB;AAuCK,eAAeL,gBAAgBM,YAAoB,EAAEC,GAA2B;QAChFA;IAAL,IAAI,GAACA,mBAAAA,IAAIC,WAAW,qBAAfD,iBAAiBE,eAAe,GAAE;QACrCL,MAAM;QACN,OAAO;IACT;IAEA,MAAMM,MAAM,IAAIC,IAAI,kBAAkBL;IACtCI,IAAIE,YAAY,CAACC,GAAG,CAAC,UAAUN,IAAIO,EAAE;IAErC,gEAAgE;IAChE,0EAA0E;IAC1E,MAAMC,WAAW,MAAMC,MAAMN,KAAK;QAChCO,QAAQ;QACRC,QAAQC,YAAYC,OAAO,CAAC;IAC9B,GAAGC,KAAK,CAAC,CAACC;QACR,8BAA8B;QAC9B,IAAIA,MAAMC,IAAI,KAAK,gBAAgB;YACjC,OAAO;QACT;QAEA,MAAMD;IACR;IAEA,IAAI,CAACP,UAAU;QACbX,MAAM,CAAC,oDAAoD,CAAC;IAC9D,OAAO,IAAIW,SAASS,EAAE,KAAK,OAAO;QAChCpB,MAAM,4DAA4DW,SAASU,MAAM;IACnF;IAEA,OAAOV,CAAAA,4BAAAA,SAAUS,EAAE,KAAI;AACzB;AAEO,eAAerB,uBACpBuB,iBAAyB,EACzBC,KAAa;IAEb,MAAMC,OAAO,MAAM1B,2BAA2BwB;IAC9C,OAAOE,KAAKC,IAAI,CAAC,CAACtB,MAAQA,IAAIoB,KAAK,KAAKA,UAAU;AACpD;AAEO,eAAezB,2BACpBwB,iBAAyB;IAEzB,MAAMI,OAAO,MAAMd,MAAM,GAAGU,kBAAkB,UAAU,CAAC;IACzD,qDAAqD;IACrD,uDAAuD;IACvD,MAAME,OAAiC,AAAC,CAAA,MAAME,KAAKC,IAAI,EAAC,EAAGC,OAAO;IAClE,OAAOJ,KAAKK,MAAM,CAAC,CAAC1B,MAAQ2B,IAAAA,gCAAe,EAAC3B;AAC9C;AAEO,eAAeN,wBAAwB2B,IAA8B;QAsBnEO;IArBP,IAAIP,KAAKQ,MAAM,KAAK,GAAG;QACrB,OAAOR,IAAI,CAAC,EAAE;IAChB;IAEA,qEAAqE;IACrE,iFAAiF;IACjF,MAAMS,oBAAoBT,KAAKU,IAAI,CACjC,CAAC/B,KAAKgC,QAAUA,UAAUX,KAAKY,SAAS,CAAC,CAACC,QAAUlC,IAAImC,UAAU,KAAKD,MAAMC,UAAU;IAGzF,MAAMP,UAAUP,KAAKe,GAAG,CAAC,CAACpC;QACxB,MAAMgB,OAAOhB,IAAImC,UAAU,IAAI;QAC/B,OAAO;YACLE,OAAOP,oBAAoBQ,IAAAA,gBAAK,CAAA,CAAC,EAAEtB,KAAK,QAAQ,EAAEhB,IAAIO,EAAE,CAAC,CAAC,CAAC,GAAGS;YAC9DuB,OAAOvC,IAAIO,EAAE;YACbP;QACF;IACF;IAEA,MAAMuC,QAAQ,MAAMC,IAAAA,oBAAW,EAACF,IAAAA,gBAAK,CAAA,CAAC,gCAAgC,CAAC,EAAEV;IAEzE,QAAOA,gBAAAA,QAAQN,IAAI,CAAC,CAACmB,OAASA,KAAKF,KAAK,KAAKA,2BAAtCX,cAA8C5B,GAAG;AAC1D"}
@@ -15,20 +15,6 @@ function _chalk() {
15
15
  };
16
16
  return data;
17
17
  }
18
- function _net() {
19
- const data = /*#__PURE__*/ _interop_require_default(require("net"));
20
- _net = function() {
21
- return data;
22
- };
23
- return data;
24
- }
25
- function _tls() {
26
- const data = require("tls");
27
- _tls = function() {
28
- return data;
29
- };
30
- return data;
31
- }
32
18
  function _url() {
33
19
  const data = require("url");
34
20
  _url = function() {
@@ -37,20 +23,26 @@ function _url() {
37
23
  return data;
38
24
  }
39
25
  const _JsInspector = require("./JsInspector");
26
+ const _net = require("../../../../utils/net");
40
27
  function _interop_require_default(obj) {
41
28
  return obj && obj.__esModule ? obj : {
42
29
  default: obj
43
30
  };
44
31
  }
45
- function createJsInspectorMiddleware() {
32
+ function createJsInspectorMiddleware({ serverBaseUrl }) {
46
33
  return async function(req, res, next) {
47
- const { origin, searchParams } = new (_url()).URL(req.url ?? '/', getServerBase(req));
34
+ if (!(0, _net.isMatchingOrigin)(req, serverBaseUrl)) {
35
+ res.writeHead(403).end();
36
+ return;
37
+ }
38
+ // `req.url` may be absolute-form (HTTP/1.1) — only take search params from it.
39
+ const { searchParams } = new (_url()).URL(req.url ?? '/', serverBaseUrl);
48
40
  const appId = searchParams.get('appId') || searchParams.get('applicationId');
49
41
  if (!appId) {
50
42
  res.writeHead(400).end('Missing application identifier ("?appId=...")');
51
43
  return;
52
44
  }
53
- const app = await (0, _JsInspector.queryInspectorAppAsync)(origin, appId);
45
+ const app = await (0, _JsInspector.queryInspectorAppAsync)(serverBaseUrl, appId);
54
46
  if (!app) {
55
47
  res.writeHead(404).end('Unable to find inspector target from @react-native/dev-middleware');
56
48
  console.warn(_chalk().default.yellow('No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine.'));
@@ -65,8 +57,12 @@ function createJsInspectorMiddleware() {
65
57
  });
66
58
  res.end(data);
67
59
  } else if (req.method === 'POST' || req.method === 'PUT') {
60
+ if ((0, _net.shouldThrottleRemoteDevCall)()) {
61
+ res.writeHead(429).end();
62
+ return;
63
+ }
68
64
  try {
69
- await (0, _JsInspector.openJsInspector)(origin, app);
65
+ await (0, _JsInspector.openJsInspector)(serverBaseUrl, app);
70
66
  } catch (error) {
71
67
  // abort(Error: Command failed: osascript -e POSIX path of (path to application "google chrome")
72
68
  // 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)
@@ -81,11 +77,5 @@ function createJsInspectorMiddleware() {
81
77
  }
82
78
  };
83
79
  }
84
- function getServerBase(req) {
85
- const scheme = req.socket instanceof _tls().TLSSocket && req.socket.encrypted === true ? 'https' : 'http';
86
- const { localAddress, localPort } = req.socket;
87
- const address = localAddress && _net().default.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;
88
- return `${scheme}:${address}:${localPort}`;
89
- }
90
80
 
91
81
  //# sourceMappingURL=createJsInspectorMiddleware.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/createJsInspectorMiddleware.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { NextHandleFunction } from 'connect';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport net from 'net';\nimport { TLSSocket } from 'tls';\nimport { URL } from 'url';\n\nimport { openJsInspector, queryInspectorAppAsync } from './JsInspector';\n\n/**\n * Create a middleware that handles new requests to open the debugger from the dev menu.\n * @todo(cedric): delete this middleware once we fully swap over to the new React Native JS Inspector.\n */\nexport function createJsInspectorMiddleware(): NextHandleFunction {\n return async function (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => void) {\n const { origin, searchParams } = new URL(req.url ?? '/', getServerBase(req));\n const appId = searchParams.get('appId') || searchParams.get('applicationId');\n if (!appId) {\n res.writeHead(400).end('Missing application identifier (\"?appId=...\")');\n return;\n }\n\n const app = await queryInspectorAppAsync(origin, appId);\n if (!app) {\n res.writeHead(404).end('Unable to find inspector target from @react-native/dev-middleware');\n console.warn(\n chalk.yellow(\n 'No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine.'\n )\n );\n return;\n }\n\n if (req.method === 'GET') {\n const data = JSON.stringify(app);\n res.writeHead(200, {\n 'Content-Type': 'application/json; charset=UTF-8',\n 'Cache-Control': 'no-cache',\n 'Content-Length': data.length.toString(),\n });\n res.end(data);\n } else if (req.method === 'POST' || req.method === 'PUT') {\n try {\n await openJsInspector(origin, app);\n } catch (error: any) {\n // abort(Error: Command failed: osascript -e POSIX path of (path to application \"google chrome\")\n // 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)\n\n console.error(\n chalk.red('Error launching JS inspector: ' + (error?.message ?? 'Unknown error occurred'))\n );\n res.writeHead(500);\n res.end();\n return;\n }\n res.end();\n } else {\n res.writeHead(405);\n }\n };\n}\n\nfunction getServerBase(req: IncomingMessage): string {\n const scheme =\n req.socket instanceof TLSSocket && req.socket.encrypted === true ? 'https' : 'http';\n const { localAddress, localPort } = req.socket;\n const address = localAddress && net.isIPv6(localAddress) ? `[${localAddress}]` : localAddress;\n return `${scheme}:${address}:${localPort}`;\n}\n"],"names":["createJsInspectorMiddleware","req","res","next","origin","searchParams","URL","url","getServerBase","appId","get","writeHead","end","app","queryInspectorAppAsync","console","warn","chalk","yellow","method","data","JSON","stringify","length","toString","openJsInspector","error","red","message","scheme","socket","TLSSocket","encrypted","localAddress","localPort","address","net","isIPv6"],"mappings":";;;;+BAagBA;;;eAAAA;;;;gEAbE;;;;;;;gEAGF;;;;;;;yBACU;;;;;;;yBACN;;;;;;6BAEoC;;;;;;AAMjD,SAASA;IACd,OAAO,eAAgBC,GAAoB,EAAEC,GAAmB,EAAEC,IAA2B;QAC3F,MAAM,EAAEC,MAAM,EAAEC,YAAY,EAAE,GAAG,IAAIC,CAAAA,MAAE,KAAC,CAACL,IAAIM,GAAG,IAAI,KAAKC,cAAcP;QACvE,MAAMQ,QAAQJ,aAAaK,GAAG,CAAC,YAAYL,aAAaK,GAAG,CAAC;QAC5D,IAAI,CAACD,OAAO;YACVP,IAAIS,SAAS,CAAC,KAAKC,GAAG,CAAC;YACvB;QACF;QAEA,MAAMC,MAAM,MAAMC,IAAAA,mCAAsB,EAACV,QAAQK;QACjD,IAAI,CAACI,KAAK;YACRX,IAAIS,SAAS,CAAC,KAAKC,GAAG,CAAC;YACvBG,QAAQC,IAAI,CACVC,gBAAK,CAACC,MAAM,CACV;YAGJ;QACF;QAEA,IAAIjB,IAAIkB,MAAM,KAAK,OAAO;YACxB,MAAMC,OAAOC,KAAKC,SAAS,CAACT;YAC5BX,IAAIS,SAAS,CAAC,KAAK;gBACjB,gBAAgB;gBAChB,iBAAiB;gBACjB,kBAAkBS,KAAKG,MAAM,CAACC,QAAQ;YACxC;YACAtB,IAAIU,GAAG,CAACQ;QACV,OAAO,IAAInB,IAAIkB,MAAM,KAAK,UAAUlB,IAAIkB,MAAM,KAAK,OAAO;YACxD,IAAI;gBACF,MAAMM,IAAAA,4BAAe,EAACrB,QAAQS;YAChC,EAAE,OAAOa,OAAY;gBACnB,gGAAgG;gBAChG,wFAAwF;gBAExFX,QAAQW,KAAK,CACXT,gBAAK,CAACU,GAAG,CAAC,mCAAoCD,CAAAA,CAAAA,yBAAAA,MAAOE,OAAO,KAAI,wBAAuB;gBAEzF1B,IAAIS,SAAS,CAAC;gBACdT,IAAIU,GAAG;gBACP;YACF;YACAV,IAAIU,GAAG;QACT,OAAO;YACLV,IAAIS,SAAS,CAAC;QAChB;IACF;AACF;AAEA,SAASH,cAAcP,GAAoB;IACzC,MAAM4B,SACJ5B,IAAI6B,MAAM,YAAYC,gBAAS,IAAI9B,IAAI6B,MAAM,CAACE,SAAS,KAAK,OAAO,UAAU;IAC/E,MAAM,EAAEC,YAAY,EAAEC,SAAS,EAAE,GAAGjC,IAAI6B,MAAM;IAC9C,MAAMK,UAAUF,gBAAgBG,cAAG,CAACC,MAAM,CAACJ,gBAAgB,CAAC,CAAC,EAAEA,aAAa,CAAC,CAAC,GAAGA;IACjF,OAAO,GAAGJ,OAAO,CAAC,EAAEM,QAAQ,CAAC,EAAED,WAAW;AAC5C"}
1
+ {"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/createJsInspectorMiddleware.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { NextHandleFunction } from 'connect';\nimport type { IncomingMessage, ServerResponse } from 'http';\nimport { URL } from 'url';\n\nimport { openJsInspector, queryInspectorAppAsync } from './JsInspector';\nimport { isMatchingOrigin, shouldThrottleRemoteDevCall } from '../../../../utils/net';\n\ninterface JsInspectorMiddlewareOptions {\n serverBaseUrl: string;\n}\n\n/**\n * Create a middleware that handles new requests to open the debugger from the dev menu.\n * @todo(cedric): delete this middleware once we fully swap over to the new React Native JS Inspector.\n */\nexport function createJsInspectorMiddleware({\n serverBaseUrl,\n}: JsInspectorMiddlewareOptions): NextHandleFunction {\n return async function (req: IncomingMessage, res: ServerResponse, next: (err?: Error) => void) {\n if (!isMatchingOrigin(req, serverBaseUrl)) {\n res.writeHead(403).end();\n return;\n }\n\n // `req.url` may be absolute-form (HTTP/1.1) — only take search params from it.\n const { searchParams } = new URL(req.url ?? '/', serverBaseUrl);\n const appId = searchParams.get('appId') || searchParams.get('applicationId');\n if (!appId) {\n res.writeHead(400).end('Missing application identifier (\"?appId=...\")');\n return;\n }\n\n const app = await queryInspectorAppAsync(serverBaseUrl, appId);\n if (!app) {\n res.writeHead(404).end('Unable to find inspector target from @react-native/dev-middleware');\n console.warn(\n chalk.yellow(\n 'No compatible apps connected. JavaScript Debugging can only be used with the Hermes engine.'\n )\n );\n return;\n }\n\n if (req.method === 'GET') {\n const data = JSON.stringify(app);\n res.writeHead(200, {\n 'Content-Type': 'application/json; charset=UTF-8',\n 'Cache-Control': 'no-cache',\n 'Content-Length': data.length.toString(),\n });\n res.end(data);\n } else if (req.method === 'POST' || req.method === 'PUT') {\n if (shouldThrottleRemoteDevCall()) {\n res.writeHead(429).end();\n return;\n }\n try {\n await openJsInspector(serverBaseUrl, app);\n } catch (error: any) {\n // abort(Error: Command failed: osascript -e POSIX path of (path to application \"google chrome\")\n // 15:50: execution error: Google Chrome got an error: Application isn’t running. (-600)\n\n console.error(\n chalk.red('Error launching JS inspector: ' + (error?.message ?? 'Unknown error occurred'))\n );\n res.writeHead(500);\n res.end();\n return;\n }\n res.end();\n } else {\n res.writeHead(405);\n }\n };\n}\n"],"names":["createJsInspectorMiddleware","serverBaseUrl","req","res","next","isMatchingOrigin","writeHead","end","searchParams","URL","url","appId","get","app","queryInspectorAppAsync","console","warn","chalk","yellow","method","data","JSON","stringify","length","toString","shouldThrottleRemoteDevCall","openJsInspector","error","red","message"],"mappings":";;;;+BAgBgBA;;;eAAAA;;;;gEAhBE;;;;;;;yBAGE;;;;;;6BAEoC;qBACM;;;;;;AAUvD,SAASA,4BAA4B,EAC1CC,aAAa,EACgB;IAC7B,OAAO,eAAgBC,GAAoB,EAAEC,GAAmB,EAAEC,IAA2B;QAC3F,IAAI,CAACC,IAAAA,qBAAgB,EAACH,KAAKD,gBAAgB;YACzCE,IAAIG,SAAS,CAAC,KAAKC,GAAG;YACtB;QACF;QAEA,+EAA+E;QAC/E,MAAM,EAAEC,YAAY,EAAE,GAAG,IAAIC,CAAAA,MAAE,KAAC,CAACP,IAAIQ,GAAG,IAAI,KAAKT;QACjD,MAAMU,QAAQH,aAAaI,GAAG,CAAC,YAAYJ,aAAaI,GAAG,CAAC;QAC5D,IAAI,CAACD,OAAO;YACVR,IAAIG,SAAS,CAAC,KAAKC,GAAG,CAAC;YACvB;QACF;QAEA,MAAMM,MAAM,MAAMC,IAAAA,mCAAsB,EAACb,eAAeU;QACxD,IAAI,CAACE,KAAK;YACRV,IAAIG,SAAS,CAAC,KAAKC,GAAG,CAAC;YACvBQ,QAAQC,IAAI,CACVC,gBAAK,CAACC,MAAM,CACV;YAGJ;QACF;QAEA,IAAIhB,IAAIiB,MAAM,KAAK,OAAO;YACxB,MAAMC,OAAOC,KAAKC,SAAS,CAACT;YAC5BV,IAAIG,SAAS,CAAC,KAAK;gBACjB,gBAAgB;gBAChB,iBAAiB;gBACjB,kBAAkBc,KAAKG,MAAM,CAACC,QAAQ;YACxC;YACArB,IAAII,GAAG,CAACa;QACV,OAAO,IAAIlB,IAAIiB,MAAM,KAAK,UAAUjB,IAAIiB,MAAM,KAAK,OAAO;YACxD,IAAIM,IAAAA,gCAA2B,KAAI;gBACjCtB,IAAIG,SAAS,CAAC,KAAKC,GAAG;gBACtB;YACF;YACA,IAAI;gBACF,MAAMmB,IAAAA,4BAAe,EAACzB,eAAeY;YACvC,EAAE,OAAOc,OAAY;gBACnB,gGAAgG;gBAChG,wFAAwF;gBAExFZ,QAAQY,KAAK,CACXV,gBAAK,CAACW,GAAG,CAAC,mCAAoCD,CAAAA,CAAAA,yBAAAA,MAAOE,OAAO,KAAI,wBAAuB;gBAEzF1B,IAAIG,SAAS,CAAC;gBACdH,IAAII,GAAG;gBACP;YACF;YACAJ,IAAII,GAAG;QACT,OAAO;YACLJ,IAAIG,SAAS,CAAC;QAChB;IACF;AACF"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- prependMiddleware: function() {
12
+ get prependMiddleware () {
13
13
  return prependMiddleware;
14
14
  },
15
- replaceMiddlewareWith: function() {
15
+ get replaceMiddlewareWith () {
16
16
  return replaceMiddlewareWith;
17
17
  }
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/middlwareMutations.ts"],"sourcesContent":["import type { Server as ConnectServer, HandleFunction } from 'connect';\n\n/**\n * Prepends a `middleware` to current server middleware stack.\n *\n * @param app connect app server instance\n * @param middleware target middleware to be prepended\n */\nexport function prependMiddleware(app: ConnectServer, middleware: HandleFunction) {\n app.use(middleware);\n app.stack.unshift(app.stack.pop()!);\n}\n\n/**\n * Replaces source middleware with a new middlware in connect app\n *\n * @param app connect app server instance\n * @param sourceMiddleware source middlware to be matched and replaces\n * @param targetMiddleware new middlware\n */\nexport function replaceMiddlewareWith(\n app: ConnectServer,\n sourceMiddleware: HandleFunction,\n targetMiddleware: HandleFunction\n) {\n const item = app.stack.find((middleware) => middleware.handle === sourceMiddleware);\n if (item) {\n item.handle = targetMiddleware;\n }\n}\n"],"names":["prependMiddleware","replaceMiddlewareWith","app","middleware","use","stack","unshift","pop","sourceMiddleware","targetMiddleware","item","find","handle"],"mappings":";;;;;;;;;;;IAQgBA,iBAAiB;eAAjBA;;IAYAC,qBAAqB;eAArBA;;;AAZT,SAASD,kBAAkBE,GAAkB,EAAEC,UAA0B;IAC9ED,IAAIE,GAAG,CAACD;IACRD,IAAIG,KAAK,CAACC,OAAO,CAACJ,IAAIG,KAAK,CAACE,GAAG;AACjC;AASO,SAASN,sBACdC,GAAkB,EAClBM,gBAAgC,EAChCC,gBAAgC;IAEhC,MAAMC,OAAOR,IAAIG,KAAK,CAACM,IAAI,CAAC,CAACR,aAAeA,WAAWS,MAAM,KAAKJ;IAClE,IAAIE,MAAM;QACRA,KAAKE,MAAM,GAAGH;IAChB;AACF"}
1
+ {"version":3,"sources":["../../../../../../src/start/server/middleware/inspector/middlwareMutations.ts"],"sourcesContent":["import type { Server as ConnectServer, HandleFunction } from 'connect';\n\n/**\n * Prepends a `middleware` to current server middleware stack.\n *\n * @param app connect app server instance\n * @param middleware target middleware to be prepended\n */\nexport function prependMiddleware(app: ConnectServer, middleware: HandleFunction) {\n app.use(middleware);\n app.stack.unshift(app.stack.pop()!);\n}\n\n/**\n * Replaces source middleware with a new middlware in connect app\n *\n * @param app connect app server instance\n * @param sourceMiddleware source middlware to be matched and replaces\n * @param targetMiddleware new middlware\n */\nexport function replaceMiddlewareWith(\n app: ConnectServer,\n sourceMiddleware: HandleFunction,\n targetMiddleware: HandleFunction\n) {\n const item = app.stack.find((middleware) => middleware.handle === sourceMiddleware);\n if (item) {\n item.handle = targetMiddleware;\n }\n}\n"],"names":["prependMiddleware","replaceMiddlewareWith","app","middleware","use","stack","unshift","pop","sourceMiddleware","targetMiddleware","item","find","handle"],"mappings":";;;;;;;;;;;QAQgBA;eAAAA;;QAYAC;eAAAA;;;AAZT,SAASD,kBAAkBE,GAAkB,EAAEC,UAA0B;IAC9ED,IAAIE,GAAG,CAACD;IACRD,IAAIG,KAAK,CAACC,OAAO,CAACJ,IAAIG,KAAK,CAACE,GAAG;AACjC;AASO,SAASN,sBACdC,GAAkB,EAClBM,gBAAgC,EAChCC,gBAAgC;IAEhC,MAAMC,OAAOR,IAAIG,KAAK,CAACM,IAAI,CAAC,CAACR,aAAeA,WAAWS,MAAM,KAAKJ;IAClE,IAAIE,MAAM;QACRA,KAAKE,MAAM,GAAGH;IAChB;AACF"}
@@ -5,41 +5,41 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- convertPathToModuleSpecifier: function() {
12
+ get convertPathToModuleSpecifier () {
13
13
  return convertPathToModuleSpecifier;
14
14
  },
15
- createBundleOsPath: function() {
15
+ get createBundleOsPath () {
16
16
  return createBundleOsPath;
17
17
  },
18
- createBundleUrlPath: function() {
18
+ get createBundleUrlPath () {
19
19
  return createBundleUrlPath;
20
20
  },
21
- createBundleUrlPathFromExpoConfig: function() {
21
+ get createBundleUrlPathFromExpoConfig () {
22
22
  return createBundleUrlPathFromExpoConfig;
23
23
  },
24
- createBundleUrlSearchParams: function() {
24
+ get createBundleUrlSearchParams () {
25
25
  return createBundleUrlSearchParams;
26
26
  },
27
- getAsyncRoutesFromExpoConfig: function() {
27
+ get getAsyncRoutesFromExpoConfig () {
28
28
  return getAsyncRoutesFromExpoConfig;
29
29
  },
30
- getBaseUrlFromExpoConfig: function() {
30
+ get getBaseUrlFromExpoConfig () {
31
31
  return getBaseUrlFromExpoConfig;
32
32
  },
33
- getMetroDirectBundleOptions: function() {
33
+ get getMetroDirectBundleOptions () {
34
34
  return getMetroDirectBundleOptions;
35
35
  },
36
- getMetroDirectBundleOptionsForExpoConfig: function() {
36
+ get getMetroDirectBundleOptionsForExpoConfig () {
37
37
  return getMetroDirectBundleOptionsForExpoConfig;
38
38
  },
39
- getMetroOptionsFromUrl: function() {
39
+ get getMetroOptionsFromUrl () {
40
40
  return getMetroOptionsFromUrl;
41
41
  },
42
- isServerEnvironment: function() {
42
+ get isServerEnvironment () {
43
43
  return isServerEnvironment;
44
44
  }
45
45
  });
@@ -85,6 +85,7 @@ function withDefaults({ mode = 'development', minify = mode === 'production', pr
85
85
  lazy: !props.isExporting && lazy,
86
86
  environment: environment === 'client' ? undefined : environment,
87
87
  liveBindings: _env.env.EXPO_UNSTABLE_LIVE_BINDINGS,
88
+ excludeSource: isServerEnvironment(environment),
88
89
  ...props
89
90
  };
90
91
  }
@@ -123,7 +124,7 @@ function getMetroDirectBundleOptionsForExpoConfig(projectRoot, exp, options) {
123
124
  });
124
125
  }
125
126
  function getMetroDirectBundleOptions(options) {
126
- const { mainModuleName, platform, mode, minify, environment, serializerOutput, serializerIncludeMaps, bytecode, lazy, engine, preserveEnvVars, asyncRoutes, baseUrl, routerRoot, isExporting, inlineSourceMap, splitChunks, usedExports, reactCompiler, optimize, domRoot, clientBoundaries, runModule, modulesOnly, useMd5Filename, hosted, liveBindings, isLoaderBundle } = withDefaults(options);
127
+ const { mainModuleName, platform, mode, minify, environment, serializerOutput, serializerIncludeMaps, bytecode, lazy, engine, preserveEnvVars, asyncRoutes, baseUrl, routerRoot, isExporting, inlineSourceMap, splitChunks, usedExports, reactCompiler, optimize, domRoot, clientBoundaries, runModule, modulesOnly, useMd5Filename, hosted, liveBindings, isLoaderBundle, excludeSource } = withDefaults(options);
127
128
  const dev = mode !== 'production';
128
129
  const isHermes = engine === 'hermes';
129
130
  if (isExporting) {
@@ -188,7 +189,7 @@ function getMetroDirectBundleOptions(options) {
188
189
  output: serializerOutput,
189
190
  includeSourceMaps: serializerIncludeMaps,
190
191
  exporting: isExporting || undefined,
191
- excludeSource: _Server().default.DEFAULT_BUNDLE_OPTIONS.excludeSource
192
+ excludeSource: excludeSource ?? _Server().default.DEFAULT_BUNDLE_OPTIONS.excludeSource
192
193
  },
193
194
  // TODO(@kitten): See comments in MetroBundlerDevServer.ts; should all defaults be added and the logic
194
195
  // from `src/start/server/middleware/metroOptions.ts` that adds default be moved here?
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/metroOptions.ts"],"sourcesContent":["import { ExpoConfig } from '@expo/config';\nimport Server from '@expo/metro/metro/Server';\nimport type { BundleOptions as MetroBundleOptions } from '@expo/metro/metro/shared/types';\n\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { toPosixPath } from '../../../utils/filePath';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\n\nconst debug = require('debug')('expo:metro:options') as typeof console.log;\n\n/** Enforce conversion of `true` to `'true'` */\nfunction toBoolStr(x: true): 'true';\nfunction toBoolStr(x: false): 'false';\nfunction toBoolStr(x: boolean): 'true' | 'false';\nfunction toBoolStr(x: boolean): 'true' | 'false' {\n return x ? 'true' : 'false';\n}\n\nexport type MetroEnvironment = 'node' | 'react-server' | 'client';\n\nexport type ExpoMetroOptions = {\n platform: string;\n mainModuleName: string;\n mode: string;\n minify?: boolean;\n environment?: MetroEnvironment;\n serializerOutput?: 'static';\n serializerIncludeMaps?: boolean;\n lazy?: boolean;\n engine?: 'hermes';\n preserveEnvVars?: boolean;\n bytecode?: boolean;\n /** Enable async routes (route-based bundle splitting) in Expo Router. */\n asyncRoutes?: boolean;\n /** Module ID relative to the projectRoot for the Expo Router app directory. */\n routerRoot?: string;\n /** Enable React compiler support in Babel. */\n reactCompiler?: boolean;\n baseUrl?: string;\n isExporting: boolean;\n /** Is bundling a DOM Component (\"use dom\"). Requires the entry dom component file path. */\n domRoot?: string;\n /** Exporting MD5 filename based on file contents, for EAS Update. */\n useMd5Filename?: boolean;\n inlineSourceMap?: boolean;\n clientBoundaries?: string[];\n splitChunks?: boolean;\n usedExports?: boolean;\n /** Enable optimized bundling (required for tree shaking). */\n optimize?: boolean;\n\n modulesOnly?: boolean;\n runModule?: boolean;\n\n /** Should assets be exported for hosting. Always true on web. Always false for embedded builds. Optional for native exports. */\n hosted?: boolean;\n /** Disable live bindings (enabled by default, required for circular deps) in experimental import export support. */\n liveBindings?: boolean;\n /** When true, indicates this bundle should contain only the loader export. */\n isLoaderBundle?: boolean;\n};\n\n// See: @expo/metro-config/src/serializer/fork/baseJSBundle.ts `ExpoSerializerOptions`\nexport type SerializerOptions = {\n includeSourceMaps?: boolean;\n output?: 'static';\n splitChunks?: boolean;\n usedExports?: boolean;\n exporting?: boolean;\n};\n\nexport type ExpoMetroBundleOptions = MetroBundleOptions & {\n serializerOptions?: SerializerOptions;\n};\n\nexport function isServerEnvironment(environment?: any): boolean {\n return environment === 'node' || environment === 'react-server';\n}\n\nfunction withDefaults({\n mode = 'development',\n minify = mode === 'production',\n preserveEnvVars = mode !== 'development' && env.EXPO_NO_CLIENT_ENV_VARS,\n lazy,\n environment,\n ...props\n}: ExpoMetroOptions): ExpoMetroOptions {\n if (props.bytecode) {\n if (props.platform === 'web') {\n throw new CommandError('Cannot use bytecode with the web platform');\n }\n if (props.engine !== 'hermes') {\n throw new CommandError('Bytecode is only supported with the Hermes engine');\n }\n }\n\n const optimize =\n props.optimize ??\n (environment !== 'node' && mode === 'production' && env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH);\n\n return {\n mode,\n minify,\n preserveEnvVars,\n optimize,\n usedExports: optimize && env.EXPO_UNSTABLE_TREE_SHAKING,\n lazy: !props.isExporting && lazy,\n environment: environment === 'client' ? undefined : environment,\n liveBindings: env.EXPO_UNSTABLE_LIVE_BINDINGS,\n ...props,\n };\n}\n\nexport function getBaseUrlFromExpoConfig(exp: ExpoConfig) {\n return exp.experiments?.baseUrl?.trim().replace(/\\/+$/, '') ?? '';\n}\n\nexport function getAsyncRoutesFromExpoConfig(exp: ExpoConfig, mode: string, platform: string) {\n let asyncRoutesSetting;\n\n if (exp.extra?.router?.asyncRoutes) {\n const asyncRoutes = exp.extra?.router?.asyncRoutes;\n if (['boolean', 'string'].includes(typeof asyncRoutes)) {\n asyncRoutesSetting = asyncRoutes;\n } else if (typeof asyncRoutes === 'object') {\n asyncRoutesSetting = asyncRoutes[platform] ?? asyncRoutes.default;\n }\n }\n\n return [mode, true].includes(asyncRoutesSetting);\n}\n\nexport function getMetroDirectBundleOptionsForExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'baseUrl' | 'reactCompiler' | 'routerRoot' | 'asyncRoutes'>\n) {\n return getMetroDirectBundleOptions({\n ...options,\n reactCompiler: !!exp.experiments?.reactCompiler,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n asyncRoutes: getAsyncRoutesFromExpoConfig(exp, options.mode, options.platform),\n });\n}\n\nexport function getMetroDirectBundleOptions(options: ExpoMetroOptions) {\n const {\n mainModuleName,\n platform,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n bytecode,\n lazy,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n isExporting,\n inlineSourceMap,\n splitChunks,\n usedExports,\n reactCompiler,\n optimize,\n domRoot,\n clientBoundaries,\n runModule,\n modulesOnly,\n useMd5Filename,\n hosted,\n liveBindings,\n isLoaderBundle,\n } = withDefaults(options);\n\n const dev = mode !== 'production';\n const isHermes = engine === 'hermes';\n\n if (isExporting) {\n debug('Disabling lazy bundling for export build');\n options.lazy = false;\n }\n\n let fakeSourceUrl: string | undefined;\n let fakeSourceMapUrl: string | undefined;\n\n // TODO: Upstream support to Metro for passing custom serializer options.\n if (serializerIncludeMaps != null || serializerOutput != null) {\n fakeSourceUrl = new URL(\n createBundleUrlPath(options).replace(/^\\//, ''),\n 'http://localhost:8081'\n ).toString();\n if (serializerIncludeMaps) {\n fakeSourceMapUrl = fakeSourceUrl.replace('.bundle?', '.map?');\n }\n }\n\n const customTransformOptions: ExpoMetroBundleOptions['customTransformOptions'] = {\n __proto__: null,\n optimize: optimize || undefined,\n engine,\n clientBoundaries,\n preserveEnvVars: preserveEnvVars || undefined,\n // Use string to match the query param behavior.\n asyncRoutes: asyncRoutes ? toBoolStr(asyncRoutes) : undefined,\n environment,\n baseUrl: baseUrl || undefined,\n routerRoot,\n bytecode: bytecode ? '1' : undefined,\n reactCompiler: reactCompiler ? toBoolStr(reactCompiler) : undefined,\n dom: domRoot,\n hosted: hosted ? '1' : undefined,\n useMd5Filename: useMd5Filename || undefined,\n liveBindings: !liveBindings ? toBoolStr(!!liveBindings) : undefined,\n isLoaderBundle: isLoaderBundle ? toBoolStr(isLoaderBundle) : undefined,\n };\n\n // Iterate and delete undefined values\n for (const key in customTransformOptions) {\n if (customTransformOptions[key] === undefined) {\n delete customTransformOptions[key];\n }\n }\n\n return {\n platform,\n entryFile: mainModuleName,\n dev,\n minify: minify ?? !dev,\n inlineSourceMap: inlineSourceMap ?? false,\n lazy: (!isExporting && lazy) || undefined,\n unstable_transformProfile: isHermes ? 'hermes-stable' : 'default',\n customTransformOptions,\n runModule,\n modulesOnly,\n customResolverOptions: {\n __proto__: null,\n environment,\n exporting: isExporting || undefined,\n },\n sourceMapUrl: fakeSourceMapUrl,\n sourceUrl: fakeSourceUrl,\n serializerOptions: {\n splitChunks,\n usedExports: usedExports || undefined,\n output: serializerOutput,\n includeSourceMaps: serializerIncludeMaps,\n exporting: isExporting || undefined,\n excludeSource: Server.DEFAULT_BUNDLE_OPTIONS.excludeSource,\n },\n // TODO(@kitten): See comments in MetroBundlerDevServer.ts; should all defaults be added and the logic\n // from `src/start/server/middleware/metroOptions.ts` that adds default be moved here?\n shallow: Server.DEFAULT_BUNDLE_OPTIONS.shallow,\n } as const;\n}\n\nexport function createBundleUrlPathFromExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'reactCompiler' | 'baseUrl' | 'routerRoot'>\n): string {\n return createBundleUrlPath({\n ...options,\n reactCompiler: !!exp.experiments?.reactCompiler,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n });\n}\n\nexport function createBundleUrlPath(options: ExpoMetroOptions): string {\n const queryParams = createBundleUrlSearchParams(options);\n return `/${encodeURI(options.mainModuleName.replace(/^\\/+/, ''))}.bundle?${queryParams.toString()}`;\n}\n\n/**\n * Create a bundle URL, containing all required query parameters, using a valid \"os path\".\n * On POSIX systems, this would look something like `/Users/../project/file.js?dev=false&..`.\n * On UNIX systems, this would look something like `C:\\Users\\..\\project\\file.js?dev=false&..`.\n * This path can safely be used with `path.*` modifiers and resolved.\n */\nexport function createBundleOsPath(options: ExpoMetroOptions): string {\n const queryParams = createBundleUrlSearchParams(options);\n const mainModuleName = toPosixPath(options.mainModuleName);\n return `${mainModuleName}.bundle?${queryParams.toString()}`;\n}\n\nexport function createBundleUrlSearchParams(options: ExpoMetroOptions): URLSearchParams {\n const {\n platform,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n lazy,\n bytecode,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n reactCompiler,\n inlineSourceMap,\n isExporting,\n clientBoundaries,\n splitChunks,\n usedExports,\n optimize,\n domRoot,\n modulesOnly,\n runModule,\n hosted,\n liveBindings,\n } = withDefaults(options);\n\n const dev = String(mode !== 'production');\n const queryParams = new URLSearchParams({\n platform: encodeURIComponent(platform),\n dev,\n // TODO: Is this still needed?\n hot: String(false),\n });\n\n // Lazy bundling must be disabled for bundle splitting to work.\n if (!isExporting && lazy) {\n queryParams.append('lazy', String(lazy));\n }\n\n if (inlineSourceMap) {\n queryParams.append('inlineSourceMap', String(inlineSourceMap));\n }\n\n if (minify) {\n queryParams.append('minify', String(minify));\n }\n\n // We split bytecode from the engine since you could technically use Hermes without bytecode.\n // Hermes indicates the type of language features you want to transform out of the JS, whereas bytecode\n // indicates whether you want to use the Hermes bytecode format.\n if (engine) {\n queryParams.append('transform.engine', engine);\n }\n if (bytecode) {\n queryParams.append('transform.bytecode', '1');\n }\n if (asyncRoutes) {\n queryParams.append('transform.asyncRoutes', String(asyncRoutes));\n }\n if (preserveEnvVars) {\n queryParams.append('transform.preserveEnvVars', String(preserveEnvVars));\n }\n if (baseUrl) {\n queryParams.append('transform.baseUrl', baseUrl);\n }\n if (clientBoundaries?.length) {\n queryParams.append('transform.clientBoundaries', JSON.stringify(clientBoundaries));\n }\n if (routerRoot != null) {\n queryParams.append('transform.routerRoot', routerRoot);\n }\n if (reactCompiler) {\n queryParams.append('transform.reactCompiler', String(reactCompiler));\n }\n if (domRoot) {\n queryParams.append('transform.dom', domRoot);\n }\n if (hosted) {\n queryParams.append('transform.hosted', '1');\n }\n\n if (environment) {\n queryParams.append('resolver.environment', environment);\n queryParams.append('transform.environment', environment);\n }\n\n if (isExporting) {\n queryParams.append('resolver.exporting', String(isExporting));\n }\n\n if (splitChunks) {\n queryParams.append('serializer.splitChunks', String(splitChunks));\n }\n if (usedExports) {\n queryParams.append('serializer.usedExports', String(usedExports));\n }\n if (optimize) {\n queryParams.append('transform.optimize', String(optimize));\n }\n if (serializerOutput) {\n queryParams.append('serializer.output', serializerOutput);\n }\n if (serializerIncludeMaps) {\n queryParams.append('serializer.map', String(serializerIncludeMaps));\n }\n if (engine === 'hermes') {\n queryParams.append('unstable_transformProfile', 'hermes-stable');\n }\n\n if (modulesOnly != null) {\n queryParams.set('modulesOnly', String(modulesOnly));\n }\n if (runModule != null) {\n queryParams.set('runModule', String(runModule));\n }\n\n if (liveBindings === false) {\n queryParams.append('transform.liveBindings', String(false));\n }\n\n return queryParams;\n}\n\n/**\n * Convert all path separators to `/`, including on Windows.\n * Metro asumes that all module specifiers are posix paths.\n * References to directories can still be Windows-style paths in Metro.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#importing_features_into_your_script\n * @see https://github.com/facebook/metro/pull/1286\n */\nexport function convertPathToModuleSpecifier(pathLike: string) {\n return toPosixPath(pathLike);\n}\n\nexport function getMetroOptionsFromUrl(urlFragment: string) {\n const url = new URL(urlFragment, 'http://localhost:0');\n const getStringParam = (key: string) => {\n const param = url.searchParams.get(key);\n if (Array.isArray(param)) {\n throw new Error(`Expected single value for ${key}`);\n }\n return param;\n };\n\n let pathname = url.pathname;\n if (pathname.endsWith('.bundle')) {\n pathname = pathname.slice(0, -'.bundle'.length);\n }\n\n const options: ExpoMetroOptions = {\n mode: isTruthy(getStringParam('dev') ?? 'true') ? 'development' : 'production',\n minify: isTruthy(getStringParam('minify') ?? 'false'),\n lazy: isTruthy(getStringParam('lazy') ?? 'false'),\n routerRoot: getStringParam('transform.routerRoot') ?? 'app',\n hosted: isTruthy(getStringParam('transform.hosted')),\n isExporting: isTruthy(getStringParam('resolver.exporting') ?? 'false'),\n environment: assertEnvironment(getStringParam('transform.environment') ?? 'node'),\n platform: url.searchParams.get('platform') ?? 'web',\n bytecode: isTruthy(getStringParam('transform.bytecode') ?? 'false'),\n mainModuleName: convertPathToModuleSpecifier(pathname),\n reactCompiler: isTruthy(getStringParam('transform.reactCompiler') ?? 'false'),\n asyncRoutes: isTruthy(getStringParam('transform.asyncRoutes') ?? 'false'),\n baseUrl: getStringParam('transform.baseUrl') ?? undefined,\n // clientBoundaries: JSON.parse(getStringParam('transform.clientBoundaries') ?? '[]'),\n engine: assertEngine(getStringParam('transform.engine')),\n runModule: isTruthy(getStringParam('runModule') ?? 'true'),\n modulesOnly: isTruthy(getStringParam('modulesOnly') ?? 'false'),\n liveBindings: isTruthy(getStringParam('transform.liveBindings') ?? 'true'),\n };\n\n return options;\n}\n\nfunction isTruthy(value: string | null): boolean {\n return value === 'true' || value === '1';\n}\n\nfunction assertEnvironment(environment: string | undefined): MetroEnvironment | undefined {\n if (!environment) {\n return undefined;\n }\n if (!['node', 'react-server', 'client'].includes(environment)) {\n throw new Error(`Expected transform.environment to be one of: node, react-server, client`);\n }\n return environment as MetroEnvironment;\n}\nfunction assertEngine(engine: string | undefined | null): 'hermes' | undefined {\n if (!engine) {\n return undefined;\n }\n if (!['hermes'].includes(engine)) {\n throw new Error(`Expected transform.engine to be one of: hermes`);\n }\n return engine as 'hermes';\n}\n"],"names":["convertPathToModuleSpecifier","createBundleOsPath","createBundleUrlPath","createBundleUrlPathFromExpoConfig","createBundleUrlSearchParams","getAsyncRoutesFromExpoConfig","getBaseUrlFromExpoConfig","getMetroDirectBundleOptions","getMetroDirectBundleOptionsForExpoConfig","getMetroOptionsFromUrl","isServerEnvironment","debug","require","toBoolStr","x","environment","withDefaults","mode","minify","preserveEnvVars","env","EXPO_NO_CLIENT_ENV_VARS","lazy","props","bytecode","platform","CommandError","engine","optimize","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","usedExports","EXPO_UNSTABLE_TREE_SHAKING","isExporting","undefined","liveBindings","EXPO_UNSTABLE_LIVE_BINDINGS","exp","experiments","baseUrl","trim","replace","asyncRoutesSetting","extra","router","asyncRoutes","includes","default","projectRoot","options","reactCompiler","routerRoot","getRouterDirectoryModuleIdWithManifest","mainModuleName","serializerOutput","serializerIncludeMaps","inlineSourceMap","splitChunks","domRoot","clientBoundaries","runModule","modulesOnly","useMd5Filename","hosted","isLoaderBundle","dev","isHermes","fakeSourceUrl","fakeSourceMapUrl","URL","toString","customTransformOptions","__proto__","dom","key","entryFile","unstable_transformProfile","customResolverOptions","exporting","sourceMapUrl","sourceUrl","serializerOptions","output","includeSourceMaps","excludeSource","Server","DEFAULT_BUNDLE_OPTIONS","shallow","queryParams","encodeURI","toPosixPath","String","URLSearchParams","encodeURIComponent","hot","append","length","JSON","stringify","set","pathLike","urlFragment","url","getStringParam","param","searchParams","get","Array","isArray","Error","pathname","endsWith","slice","isTruthy","assertEnvironment","assertEngine","value"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/metroOptions.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config';\nimport Server from '@expo/metro/metro/Server';\nimport type { BundleOptions as MetroBundleOptions } from '@expo/metro/metro/shared/types';\n\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { toPosixPath } from '../../../utils/filePath';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\n\nconst debug = require('debug')('expo:metro:options') as typeof console.log;\n\n/** Enforce conversion of `true` to `'true'` */\nfunction toBoolStr(x: true): 'true';\nfunction toBoolStr(x: false): 'false';\nfunction toBoolStr(x: boolean): 'true' | 'false';\nfunction toBoolStr(x: boolean): 'true' | 'false' {\n return x ? 'true' : 'false';\n}\n\nexport type MetroEnvironment = 'node' | 'react-server' | 'client';\n\nexport type ExpoMetroOptions = {\n platform: string;\n mainModuleName: string;\n mode: string;\n minify?: boolean;\n environment?: MetroEnvironment;\n serializerOutput?: 'static';\n serializerIncludeMaps?: boolean;\n lazy?: boolean;\n engine?: 'hermes';\n preserveEnvVars?: boolean;\n bytecode?: boolean;\n /** Enable async routes (route-based bundle splitting) in Expo Router. */\n asyncRoutes?: boolean;\n /** Module ID relative to the projectRoot for the Expo Router app directory. */\n routerRoot?: string;\n /** Enable React compiler support in Babel. */\n reactCompiler?: boolean;\n baseUrl?: string;\n isExporting: boolean;\n /** Is bundling a DOM Component (\"use dom\"). Requires the entry dom component file path. */\n domRoot?: string;\n /** Exporting MD5 filename based on file contents, for EAS Update. */\n useMd5Filename?: boolean;\n inlineSourceMap?: boolean;\n clientBoundaries?: string[];\n splitChunks?: boolean;\n usedExports?: boolean;\n /** Enable optimized bundling (required for tree shaking). */\n optimize?: boolean;\n\n modulesOnly?: boolean;\n runModule?: boolean;\n\n /** When true, omits `sourcesContent` from generated source maps (saves ~80x memory for SSR). */\n excludeSource?: boolean;\n\n /** Should assets be exported for hosting. Always true on web. Always false for embedded builds. Optional for native exports. */\n hosted?: boolean;\n /** Disable live bindings (enabled by default, required for circular deps) in experimental import export support. */\n liveBindings?: boolean;\n /** When true, indicates this bundle should contain only the loader export. */\n isLoaderBundle?: boolean;\n};\n\n// See: @expo/metro-config/src/serializer/fork/baseJSBundle.ts `ExpoSerializerOptions`\nexport type SerializerOptions = {\n includeSourceMaps?: boolean;\n output?: 'static';\n splitChunks?: boolean;\n usedExports?: boolean;\n exporting?: boolean;\n};\n\nexport type ExpoMetroBundleOptions = MetroBundleOptions & {\n serializerOptions?: SerializerOptions;\n};\n\nexport function isServerEnvironment(environment?: any): boolean {\n return environment === 'node' || environment === 'react-server';\n}\n\nfunction withDefaults({\n mode = 'development',\n minify = mode === 'production',\n preserveEnvVars = mode !== 'development' && env.EXPO_NO_CLIENT_ENV_VARS,\n lazy,\n environment,\n ...props\n}: ExpoMetroOptions): ExpoMetroOptions {\n if (props.bytecode) {\n if (props.platform === 'web') {\n throw new CommandError('Cannot use bytecode with the web platform');\n }\n if (props.engine !== 'hermes') {\n throw new CommandError('Bytecode is only supported with the Hermes engine');\n }\n }\n\n const optimize =\n props.optimize ??\n (environment !== 'node' && mode === 'production' && env.EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH);\n\n return {\n mode,\n minify,\n preserveEnvVars,\n optimize,\n usedExports: optimize && env.EXPO_UNSTABLE_TREE_SHAKING,\n lazy: !props.isExporting && lazy,\n environment: environment === 'client' ? undefined : environment,\n liveBindings: env.EXPO_UNSTABLE_LIVE_BINDINGS,\n excludeSource: isServerEnvironment(environment),\n ...props,\n };\n}\n\nexport function getBaseUrlFromExpoConfig(exp: ExpoConfig) {\n return exp.experiments?.baseUrl?.trim().replace(/\\/+$/, '') ?? '';\n}\n\nexport function getAsyncRoutesFromExpoConfig(exp: ExpoConfig, mode: string, platform: string) {\n let asyncRoutesSetting;\n\n if (exp.extra?.router?.asyncRoutes) {\n const asyncRoutes = exp.extra?.router?.asyncRoutes;\n if (['boolean', 'string'].includes(typeof asyncRoutes)) {\n asyncRoutesSetting = asyncRoutes;\n } else if (typeof asyncRoutes === 'object') {\n asyncRoutesSetting = asyncRoutes[platform] ?? asyncRoutes.default;\n }\n }\n\n return [mode, true].includes(asyncRoutesSetting);\n}\n\nexport function getMetroDirectBundleOptionsForExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'baseUrl' | 'reactCompiler' | 'routerRoot' | 'asyncRoutes'>\n) {\n return getMetroDirectBundleOptions({\n ...options,\n reactCompiler: !!exp.experiments?.reactCompiler,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n asyncRoutes: getAsyncRoutesFromExpoConfig(exp, options.mode, options.platform),\n });\n}\n\nexport function getMetroDirectBundleOptions(options: ExpoMetroOptions) {\n const {\n mainModuleName,\n platform,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n bytecode,\n lazy,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n isExporting,\n inlineSourceMap,\n splitChunks,\n usedExports,\n reactCompiler,\n optimize,\n domRoot,\n clientBoundaries,\n runModule,\n modulesOnly,\n useMd5Filename,\n hosted,\n liveBindings,\n isLoaderBundle,\n excludeSource,\n } = withDefaults(options);\n\n const dev = mode !== 'production';\n const isHermes = engine === 'hermes';\n\n if (isExporting) {\n debug('Disabling lazy bundling for export build');\n options.lazy = false;\n }\n\n let fakeSourceUrl: string | undefined;\n let fakeSourceMapUrl: string | undefined;\n\n // TODO: Upstream support to Metro for passing custom serializer options.\n if (serializerIncludeMaps != null || serializerOutput != null) {\n fakeSourceUrl = new URL(\n createBundleUrlPath(options).replace(/^\\//, ''),\n 'http://localhost:8081'\n ).toString();\n if (serializerIncludeMaps) {\n fakeSourceMapUrl = fakeSourceUrl.replace('.bundle?', '.map?');\n }\n }\n\n const customTransformOptions: ExpoMetroBundleOptions['customTransformOptions'] = {\n __proto__: null,\n optimize: optimize || undefined,\n engine,\n clientBoundaries,\n preserveEnvVars: preserveEnvVars || undefined,\n // Use string to match the query param behavior.\n asyncRoutes: asyncRoutes ? toBoolStr(asyncRoutes) : undefined,\n environment,\n baseUrl: baseUrl || undefined,\n routerRoot,\n bytecode: bytecode ? '1' : undefined,\n reactCompiler: reactCompiler ? toBoolStr(reactCompiler) : undefined,\n dom: domRoot,\n hosted: hosted ? '1' : undefined,\n useMd5Filename: useMd5Filename || undefined,\n liveBindings: !liveBindings ? toBoolStr(!!liveBindings) : undefined,\n isLoaderBundle: isLoaderBundle ? toBoolStr(isLoaderBundle) : undefined,\n };\n\n // Iterate and delete undefined values\n for (const key in customTransformOptions) {\n if (customTransformOptions[key] === undefined) {\n delete customTransformOptions[key];\n }\n }\n\n return {\n platform,\n entryFile: mainModuleName,\n dev,\n minify: minify ?? !dev,\n inlineSourceMap: inlineSourceMap ?? false,\n lazy: (!isExporting && lazy) || undefined,\n unstable_transformProfile: isHermes ? 'hermes-stable' : 'default',\n customTransformOptions,\n runModule,\n modulesOnly,\n customResolverOptions: {\n __proto__: null,\n environment,\n exporting: isExporting || undefined,\n },\n sourceMapUrl: fakeSourceMapUrl,\n sourceUrl: fakeSourceUrl,\n serializerOptions: {\n splitChunks,\n usedExports: usedExports || undefined,\n output: serializerOutput,\n includeSourceMaps: serializerIncludeMaps,\n exporting: isExporting || undefined,\n excludeSource: excludeSource ?? Server.DEFAULT_BUNDLE_OPTIONS.excludeSource,\n },\n // TODO(@kitten): See comments in MetroBundlerDevServer.ts; should all defaults be added and the logic\n // from `src/start/server/middleware/metroOptions.ts` that adds default be moved here?\n shallow: Server.DEFAULT_BUNDLE_OPTIONS.shallow,\n } as const;\n}\n\nexport function createBundleUrlPathFromExpoConfig(\n projectRoot: string,\n exp: ExpoConfig,\n options: Omit<ExpoMetroOptions, 'reactCompiler' | 'baseUrl' | 'routerRoot'>\n): string {\n return createBundleUrlPath({\n ...options,\n reactCompiler: !!exp.experiments?.reactCompiler,\n baseUrl: getBaseUrlFromExpoConfig(exp),\n routerRoot: getRouterDirectoryModuleIdWithManifest(projectRoot, exp),\n });\n}\n\nexport function createBundleUrlPath(options: ExpoMetroOptions): string {\n const queryParams = createBundleUrlSearchParams(options);\n return `/${encodeURI(options.mainModuleName.replace(/^\\/+/, ''))}.bundle?${queryParams.toString()}`;\n}\n\n/**\n * Create a bundle URL, containing all required query parameters, using a valid \"os path\".\n * On POSIX systems, this would look something like `/Users/../project/file.js?dev=false&..`.\n * On UNIX systems, this would look something like `C:\\Users\\..\\project\\file.js?dev=false&..`.\n * This path can safely be used with `path.*` modifiers and resolved.\n */\nexport function createBundleOsPath(options: ExpoMetroOptions): string {\n const queryParams = createBundleUrlSearchParams(options);\n const mainModuleName = toPosixPath(options.mainModuleName);\n return `${mainModuleName}.bundle?${queryParams.toString()}`;\n}\n\nexport function createBundleUrlSearchParams(options: ExpoMetroOptions): URLSearchParams {\n const {\n platform,\n mode,\n minify,\n environment,\n serializerOutput,\n serializerIncludeMaps,\n lazy,\n bytecode,\n engine,\n preserveEnvVars,\n asyncRoutes,\n baseUrl,\n routerRoot,\n reactCompiler,\n inlineSourceMap,\n isExporting,\n clientBoundaries,\n splitChunks,\n usedExports,\n optimize,\n domRoot,\n modulesOnly,\n runModule,\n hosted,\n liveBindings,\n } = withDefaults(options);\n\n const dev = String(mode !== 'production');\n const queryParams = new URLSearchParams({\n platform: encodeURIComponent(platform),\n dev,\n // TODO: Is this still needed?\n hot: String(false),\n });\n\n // Lazy bundling must be disabled for bundle splitting to work.\n if (!isExporting && lazy) {\n queryParams.append('lazy', String(lazy));\n }\n\n if (inlineSourceMap) {\n queryParams.append('inlineSourceMap', String(inlineSourceMap));\n }\n\n if (minify) {\n queryParams.append('minify', String(minify));\n }\n\n // We split bytecode from the engine since you could technically use Hermes without bytecode.\n // Hermes indicates the type of language features you want to transform out of the JS, whereas bytecode\n // indicates whether you want to use the Hermes bytecode format.\n if (engine) {\n queryParams.append('transform.engine', engine);\n }\n if (bytecode) {\n queryParams.append('transform.bytecode', '1');\n }\n if (asyncRoutes) {\n queryParams.append('transform.asyncRoutes', String(asyncRoutes));\n }\n if (preserveEnvVars) {\n queryParams.append('transform.preserveEnvVars', String(preserveEnvVars));\n }\n if (baseUrl) {\n queryParams.append('transform.baseUrl', baseUrl);\n }\n if (clientBoundaries?.length) {\n queryParams.append('transform.clientBoundaries', JSON.stringify(clientBoundaries));\n }\n if (routerRoot != null) {\n queryParams.append('transform.routerRoot', routerRoot);\n }\n if (reactCompiler) {\n queryParams.append('transform.reactCompiler', String(reactCompiler));\n }\n if (domRoot) {\n queryParams.append('transform.dom', domRoot);\n }\n if (hosted) {\n queryParams.append('transform.hosted', '1');\n }\n\n if (environment) {\n queryParams.append('resolver.environment', environment);\n queryParams.append('transform.environment', environment);\n }\n\n if (isExporting) {\n queryParams.append('resolver.exporting', String(isExporting));\n }\n\n if (splitChunks) {\n queryParams.append('serializer.splitChunks', String(splitChunks));\n }\n if (usedExports) {\n queryParams.append('serializer.usedExports', String(usedExports));\n }\n if (optimize) {\n queryParams.append('transform.optimize', String(optimize));\n }\n if (serializerOutput) {\n queryParams.append('serializer.output', serializerOutput);\n }\n if (serializerIncludeMaps) {\n queryParams.append('serializer.map', String(serializerIncludeMaps));\n }\n if (engine === 'hermes') {\n queryParams.append('unstable_transformProfile', 'hermes-stable');\n }\n\n if (modulesOnly != null) {\n queryParams.set('modulesOnly', String(modulesOnly));\n }\n if (runModule != null) {\n queryParams.set('runModule', String(runModule));\n }\n\n if (liveBindings === false) {\n queryParams.append('transform.liveBindings', String(false));\n }\n\n return queryParams;\n}\n\n/**\n * Convert all path separators to `/`, including on Windows.\n * Metro asumes that all module specifiers are posix paths.\n * References to directories can still be Windows-style paths in Metro.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules#importing_features_into_your_script\n * @see https://github.com/facebook/metro/pull/1286\n */\nexport function convertPathToModuleSpecifier(pathLike: string) {\n return toPosixPath(pathLike);\n}\n\nexport function getMetroOptionsFromUrl(urlFragment: string) {\n const url = new URL(urlFragment, 'http://localhost:0');\n const getStringParam = (key: string) => {\n const param = url.searchParams.get(key);\n if (Array.isArray(param)) {\n throw new Error(`Expected single value for ${key}`);\n }\n return param;\n };\n\n let pathname = url.pathname;\n if (pathname.endsWith('.bundle')) {\n pathname = pathname.slice(0, -'.bundle'.length);\n }\n\n const options: ExpoMetroOptions = {\n mode: isTruthy(getStringParam('dev') ?? 'true') ? 'development' : 'production',\n minify: isTruthy(getStringParam('minify') ?? 'false'),\n lazy: isTruthy(getStringParam('lazy') ?? 'false'),\n routerRoot: getStringParam('transform.routerRoot') ?? 'app',\n hosted: isTruthy(getStringParam('transform.hosted')),\n isExporting: isTruthy(getStringParam('resolver.exporting') ?? 'false'),\n environment: assertEnvironment(getStringParam('transform.environment') ?? 'node'),\n platform: url.searchParams.get('platform') ?? 'web',\n bytecode: isTruthy(getStringParam('transform.bytecode') ?? 'false'),\n mainModuleName: convertPathToModuleSpecifier(pathname),\n reactCompiler: isTruthy(getStringParam('transform.reactCompiler') ?? 'false'),\n asyncRoutes: isTruthy(getStringParam('transform.asyncRoutes') ?? 'false'),\n baseUrl: getStringParam('transform.baseUrl') ?? undefined,\n // clientBoundaries: JSON.parse(getStringParam('transform.clientBoundaries') ?? '[]'),\n engine: assertEngine(getStringParam('transform.engine')),\n runModule: isTruthy(getStringParam('runModule') ?? 'true'),\n modulesOnly: isTruthy(getStringParam('modulesOnly') ?? 'false'),\n liveBindings: isTruthy(getStringParam('transform.liveBindings') ?? 'true'),\n };\n\n return options;\n}\n\nfunction isTruthy(value: string | null): boolean {\n return value === 'true' || value === '1';\n}\n\nfunction assertEnvironment(environment: string | undefined): MetroEnvironment | undefined {\n if (!environment) {\n return undefined;\n }\n if (!['node', 'react-server', 'client'].includes(environment)) {\n throw new Error(`Expected transform.environment to be one of: node, react-server, client`);\n }\n return environment as MetroEnvironment;\n}\nfunction assertEngine(engine: string | undefined | null): 'hermes' | undefined {\n if (!engine) {\n return undefined;\n }\n if (!['hermes'].includes(engine)) {\n throw new Error(`Expected transform.engine to be one of: hermes`);\n }\n return engine as 'hermes';\n}\n"],"names":["convertPathToModuleSpecifier","createBundleOsPath","createBundleUrlPath","createBundleUrlPathFromExpoConfig","createBundleUrlSearchParams","getAsyncRoutesFromExpoConfig","getBaseUrlFromExpoConfig","getMetroDirectBundleOptions","getMetroDirectBundleOptionsForExpoConfig","getMetroOptionsFromUrl","isServerEnvironment","debug","require","toBoolStr","x","environment","withDefaults","mode","minify","preserveEnvVars","env","EXPO_NO_CLIENT_ENV_VARS","lazy","props","bytecode","platform","CommandError","engine","optimize","EXPO_UNSTABLE_METRO_OPTIMIZE_GRAPH","usedExports","EXPO_UNSTABLE_TREE_SHAKING","isExporting","undefined","liveBindings","EXPO_UNSTABLE_LIVE_BINDINGS","excludeSource","exp","experiments","baseUrl","trim","replace","asyncRoutesSetting","extra","router","asyncRoutes","includes","default","projectRoot","options","reactCompiler","routerRoot","getRouterDirectoryModuleIdWithManifest","mainModuleName","serializerOutput","serializerIncludeMaps","inlineSourceMap","splitChunks","domRoot","clientBoundaries","runModule","modulesOnly","useMd5Filename","hosted","isLoaderBundle","dev","isHermes","fakeSourceUrl","fakeSourceMapUrl","URL","toString","customTransformOptions","__proto__","dom","key","entryFile","unstable_transformProfile","customResolverOptions","exporting","sourceMapUrl","sourceUrl","serializerOptions","output","includeSourceMaps","Server","DEFAULT_BUNDLE_OPTIONS","shallow","queryParams","encodeURI","toPosixPath","String","URLSearchParams","encodeURIComponent","hot","append","length","JSON","stringify","set","pathLike","urlFragment","url","getStringParam","param","searchParams","get","Array","isArray","Error","pathname","endsWith","slice","isTruthy","assertEnvironment","assertEngine","value"],"mappings":"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"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- prependMiddleware: function() {
12
+ get prependMiddleware () {
13
13
  return prependMiddleware;
14
14
  },
15
- replaceMiddlewareWith: function() {
15
+ get replaceMiddlewareWith () {
16
16
  return replaceMiddlewareWith;
17
17
  }
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/middleware/mutations.ts"],"sourcesContent":["import type { Server as ConnectServer, HandleFunction } from 'connect';\n\n/**\n * Prepends a `middleware` to current server middleware stack.\n *\n * @param app connect app server instance\n * @param middleware target middleware to be prepended\n */\nexport function prependMiddleware(app: ConnectServer, middleware: HandleFunction) {\n app.use(middleware);\n app.stack.unshift(app.stack.pop()!);\n}\n\n/**\n * Replaces source middleware with a new middlware in connect app\n *\n * @param app connect app server instance\n * @param sourceMiddleware source middlware to be matched and replaces\n * @param targetMiddleware new middlware\n */\nexport function replaceMiddlewareWith(\n app: ConnectServer,\n sourceMiddleware: HandleFunction,\n targetMiddleware: HandleFunction\n) {\n const item = app.stack.find((middleware) => {\n const handlerCode = middleware.handle.toString();\n return !handlerCode.includes('[native code]') && handlerCode === sourceMiddleware.toString();\n });\n if (item) {\n item.handle = targetMiddleware;\n }\n}\n"],"names":["prependMiddleware","replaceMiddlewareWith","app","middleware","use","stack","unshift","pop","sourceMiddleware","targetMiddleware","item","find","handlerCode","handle","toString","includes"],"mappings":";;;;;;;;;;;IAQgBA,iBAAiB;eAAjBA;;IAYAC,qBAAqB;eAArBA;;;AAZT,SAASD,kBAAkBE,GAAkB,EAAEC,UAA0B;IAC9ED,IAAIE,GAAG,CAACD;IACRD,IAAIG,KAAK,CAACC,OAAO,CAACJ,IAAIG,KAAK,CAACE,GAAG;AACjC;AASO,SAASN,sBACdC,GAAkB,EAClBM,gBAAgC,EAChCC,gBAAgC;IAEhC,MAAMC,OAAOR,IAAIG,KAAK,CAACM,IAAI,CAAC,CAACR;QAC3B,MAAMS,cAAcT,WAAWU,MAAM,CAACC,QAAQ;QAC9C,OAAO,CAACF,YAAYG,QAAQ,CAAC,oBAAoBH,gBAAgBJ,iBAAiBM,QAAQ;IAC5F;IACA,IAAIJ,MAAM;QACRA,KAAKG,MAAM,GAAGJ;IAChB;AACF"}
1
+ {"version":3,"sources":["../../../../../src/start/server/middleware/mutations.ts"],"sourcesContent":["import type { Server as ConnectServer, HandleFunction } from 'connect';\n\n/**\n * Prepends a `middleware` to current server middleware stack.\n *\n * @param app connect app server instance\n * @param middleware target middleware to be prepended\n */\nexport function prependMiddleware(app: ConnectServer, middleware: HandleFunction) {\n app.use(middleware);\n app.stack.unshift(app.stack.pop()!);\n}\n\n/**\n * Replaces source middleware with a new middlware in connect app\n *\n * @param app connect app server instance\n * @param sourceMiddleware source middlware to be matched and replaces\n * @param targetMiddleware new middlware\n */\nexport function replaceMiddlewareWith(\n app: ConnectServer,\n sourceMiddleware: HandleFunction,\n targetMiddleware: HandleFunction\n) {\n const item = app.stack.find((middleware) => {\n const handlerCode = middleware.handle.toString();\n return !handlerCode.includes('[native code]') && handlerCode === sourceMiddleware.toString();\n });\n if (item) {\n item.handle = targetMiddleware;\n }\n}\n"],"names":["prependMiddleware","replaceMiddlewareWith","app","middleware","use","stack","unshift","pop","sourceMiddleware","targetMiddleware","item","find","handlerCode","handle","toString","includes"],"mappings":";;;;;;;;;;;QAQgBA;eAAAA;;QAYAC;eAAAA;;;AAZT,SAASD,kBAAkBE,GAAkB,EAAEC,UAA0B;IAC9ED,IAAIE,GAAG,CAACD;IACRD,IAAIG,KAAK,CAACC,OAAO,CAACJ,IAAIG,KAAK,CAACE,GAAG;AACjC;AASO,SAASN,sBACdC,GAAkB,EAClBM,gBAAgC,EAChCC,gBAAgC;IAEhC,MAAMC,OAAOR,IAAIG,KAAK,CAACM,IAAI,CAAC,CAACR;QAC3B,MAAMS,cAAcT,WAAWU,MAAM,CAACC,QAAQ;QAC9C,OAAO,CAACF,YAAYG,QAAQ,CAAC,oBAAoBH,gBAAgBJ,iBAAiBM,QAAQ;IAC5F;IACA,IAAIJ,MAAM;QACRA,KAAKG,MAAM,GAAGJ;IAChB;AACF"}