@depup/expo__cli 55.0.23-depup.0 → 57.0.9-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (594) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -15
  3. package/build/bin/cli +4 -4
  4. package/build/bin/cli.map +1 -1
  5. package/build/src/api/endpoint.js +4 -4
  6. package/build/src/api/endpoint.js.map +1 -1
  7. package/build/src/api/getExpoSchema.js +3 -3
  8. package/build/src/api/getExpoSchema.js.map +1 -1
  9. package/build/src/api/graphql/client.js +26 -14
  10. package/build/src/api/graphql/client.js.map +1 -1
  11. package/build/src/api/graphql/mutations/TunnelMutation.js +31 -0
  12. package/build/src/api/graphql/mutations/TunnelMutation.js.map +1 -0
  13. package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
  14. package/build/src/api/rest/cache/ResponseCache.js +5 -5
  15. package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
  16. package/build/src/api/rest/client.js +35 -20
  17. package/build/src/api/rest/client.js.map +1 -1
  18. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
  19. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  20. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  21. package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
  22. package/build/src/api/updateDevelopmentSession.js +6 -5
  23. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  24. package/build/src/api/user/UserSettings.js +28 -15
  25. package/build/src/api/user/UserSettings.js.map +1 -1
  26. package/build/src/api/user/actions.js +10 -3
  27. package/build/src/api/user/actions.js.map +1 -1
  28. package/build/src/api/user/expoSsoLauncher.js +76 -24
  29. package/build/src/api/user/expoSsoLauncher.js.map +1 -1
  30. package/build/src/api/user/otp.js +4 -4
  31. package/build/src/api/user/otp.js.map +1 -1
  32. package/build/src/api/user/user.js +19 -7
  33. package/build/src/api/user/user.js.map +1 -1
  34. package/build/src/config/configAsync.js +3 -3
  35. package/build/src/config/configAsync.js.map +1 -1
  36. package/build/src/config/index.js.map +1 -1
  37. package/build/src/customize/customizeAsync.js.map +1 -1
  38. package/build/src/customize/generate.js +7 -4
  39. package/build/src/customize/generate.js.map +1 -1
  40. package/build/src/customize/index.js.map +1 -1
  41. package/build/src/customize/templates.js +4 -6
  42. package/build/src/customize/templates.js.map +1 -1
  43. package/build/src/customize/typescript.js.map +1 -1
  44. package/build/src/events/index.js +19 -15
  45. package/build/src/events/index.js.map +1 -1
  46. package/build/src/events/stream.js +94 -24
  47. package/build/src/events/stream.js.map +1 -1
  48. package/build/src/expoUpdatesExports.js +4 -4
  49. package/build/src/expoUpdatesExports.js.map +1 -1
  50. package/build/src/export/createMetadataJson.js +2 -1
  51. package/build/src/export/createMetadataJson.js.map +1 -1
  52. package/build/src/export/embed/exportEmbedAsync.js +45 -20
  53. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  54. package/build/src/export/embed/exportServer.js +1 -1
  55. package/build/src/export/embed/exportServer.js.map +1 -1
  56. package/build/src/export/embed/index.js.map +1 -1
  57. package/build/src/export/embed/resolveOptions.js +7 -6
  58. package/build/src/export/embed/resolveOptions.js.map +1 -1
  59. package/build/src/export/embed/xcodeCompilerLogger.js +7 -7
  60. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
  61. package/build/src/export/exportApp.js +32 -28
  62. package/build/src/export/exportApp.js.map +1 -1
  63. package/build/src/export/exportAssets.js +5 -5
  64. package/build/src/export/exportAssets.js.map +1 -1
  65. package/build/src/export/exportAsync.js.map +1 -1
  66. package/build/src/export/exportDomComponents.js +5 -5
  67. package/build/src/export/exportDomComponents.js.map +1 -1
  68. package/build/src/export/exportHermes.js +23 -13
  69. package/build/src/export/exportHermes.js.map +1 -1
  70. package/build/src/export/exportStaticAsync.js +30 -21
  71. package/build/src/export/exportStaticAsync.js.map +1 -1
  72. package/build/src/export/favicon.js +26 -34
  73. package/build/src/export/favicon.js.map +1 -1
  74. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  75. package/build/src/export/getResolvedLocales.js.map +1 -1
  76. package/build/src/export/html.js +3 -3
  77. package/build/src/export/html.js.map +1 -1
  78. package/build/src/export/index.js +2 -0
  79. package/build/src/export/index.js.map +1 -1
  80. package/build/src/export/metroAssetLocalPath.js +4 -4
  81. package/build/src/export/metroAssetLocalPath.js.map +1 -1
  82. package/build/src/export/persistMetroAssets.js +6 -6
  83. package/build/src/export/persistMetroAssets.js.map +1 -1
  84. package/build/src/export/publicFolder.js +16 -4
  85. package/build/src/export/publicFolder.js.map +1 -1
  86. package/build/src/export/resolveOptions.js +12 -13
  87. package/build/src/export/resolveOptions.js.map +1 -1
  88. package/build/src/export/saveAssets.js +3 -3
  89. package/build/src/export/saveAssets.js.map +1 -1
  90. package/build/src/export/static.js +6 -0
  91. package/build/src/export/static.js.map +1 -0
  92. package/build/src/export/web/exportWebAsync.js.map +1 -1
  93. package/build/src/export/web/index.js.map +1 -1
  94. package/build/src/export/writeContents.js.map +1 -1
  95. package/build/src/install/checkPackages.js +1 -28
  96. package/build/src/install/checkPackages.js.map +1 -1
  97. package/build/src/install/fixPackages.js.map +1 -1
  98. package/build/src/install/index.js.map +1 -1
  99. package/build/src/install/installAsync.js +3 -3
  100. package/build/src/install/installAsync.js.map +1 -1
  101. package/build/src/install/installExpoPackage.js.map +1 -1
  102. package/build/src/install/resolveOptions.js.map +1 -1
  103. package/build/src/install/utils/autoAddConfigPlugins.js +3 -3
  104. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  105. package/build/src/install/utils/checkPackagesCompatibility.js +32 -16
  106. package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
  107. package/build/src/lint/ESlintPrerequisite.js.map +1 -1
  108. package/build/src/log.js +32 -14
  109. package/build/src/log.js.map +1 -1
  110. package/build/src/login/index.js +25 -5
  111. package/build/src/login/index.js.map +1 -1
  112. package/build/src/logout/index.js.map +1 -1
  113. package/build/src/prebuild/clearNativeFolder.js +49 -14
  114. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  115. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  116. package/build/src/prebuild/copyTemplateFiles.js +3 -3
  117. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  118. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  119. package/build/src/prebuild/index.js +3 -2
  120. package/build/src/prebuild/index.js.map +1 -1
  121. package/build/src/prebuild/prebuildAsync.js +31 -6
  122. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  123. package/build/src/prebuild/renameTemplateAppName.js +8 -5
  124. package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
  125. package/build/src/prebuild/resolveOptions.js +7 -7
  126. package/build/src/prebuild/resolveOptions.js.map +1 -1
  127. package/build/src/prebuild/resolveTemplate.js +10 -5
  128. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  129. package/build/src/prebuild/updateFromTemplate.js +3 -3
  130. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  131. package/build/src/prebuild/updatePackageJson.js +7 -7
  132. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  133. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  134. package/build/src/register/index.js.map +1 -1
  135. package/build/src/run/android/index.js.map +1 -1
  136. package/build/src/run/android/resolveGradlePropsAsync.js +3 -4
  137. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
  138. package/build/src/run/android/resolveInstallApkName.js +48 -1
  139. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  140. package/build/src/run/android/resolveLaunchProps.js +4 -1
  141. package/build/src/run/android/resolveLaunchProps.js.map +1 -1
  142. package/build/src/run/android/resolveOptions.js.map +1 -1
  143. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  144. package/build/src/run/ensureNativeProject.js.map +1 -1
  145. package/build/src/run/hints.js +4 -4
  146. package/build/src/run/hints.js.map +1 -1
  147. package/build/src/run/index.js.map +1 -1
  148. package/build/src/run/ios/XcodeBuild.js +163 -23
  149. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  150. package/build/src/run/ios/appleDevice/AppleDevice.js +6 -5
  151. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  152. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  153. package/build/src/run/ios/appleDevice/client/AFCClient.js +10 -16
  154. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  155. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  156. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  157. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +2 -1
  158. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  159. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  160. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  161. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  162. package/build/src/run/ios/appleDevice/client/ServiceClient.js +3 -3
  163. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  164. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  165. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +3 -3
  166. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  167. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +16 -13
  168. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  169. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +6 -6
  170. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  171. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +5 -5
  172. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  173. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +7 -7
  174. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  175. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +5 -5
  176. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
  177. package/build/src/run/ios/codeSigning/Security.js +8 -8
  178. package/build/src/run/ios/codeSigning/Security.js.map +1 -1
  179. package/build/src/run/ios/codeSigning/configureCodeSigning.js +5 -3
  180. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  181. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +7 -5
  182. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  183. package/build/src/run/ios/codeSigning/settings.js +3 -3
  184. package/build/src/run/ios/codeSigning/settings.js.map +1 -1
  185. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +4 -4
  186. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  187. package/build/src/run/ios/index.js +8 -1
  188. package/build/src/run/ios/index.js.map +1 -1
  189. package/build/src/run/ios/launchApp.js +3 -3
  190. package/build/src/run/ios/launchApp.js.map +1 -1
  191. package/build/src/run/ios/options/appleDestinations.js.map +1 -1
  192. package/build/src/run/ios/options/promptDevice.js +3 -3
  193. package/build/src/run/ios/options/promptDevice.js.map +1 -1
  194. package/build/src/run/ios/options/resolveDevice.js +8 -3
  195. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  196. package/build/src/run/ios/options/resolveNativeScheme.js +4 -4
  197. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  198. package/build/src/run/ios/options/resolveOptions.js +9 -4
  199. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  200. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
  201. package/build/src/run/ios/runIosAsync.js +39 -0
  202. package/build/src/run/ios/runIosAsync.js.map +1 -1
  203. package/build/src/run/ios/validateExternalBinary.js.map +1 -1
  204. package/build/src/run/startBundler.js +4 -0
  205. package/build/src/run/startBundler.js.map +1 -1
  206. package/build/src/serve/index.js +4 -1
  207. package/build/src/serve/index.js.map +1 -1
  208. package/build/src/serve/serveAsync.js +23 -11
  209. package/build/src/serve/serveAsync.js.map +1 -1
  210. package/build/src/serve/static.js +69 -0
  211. package/build/src/serve/static.js.map +1 -0
  212. package/build/src/start/checkDependenciesOnStart.js +131 -0
  213. package/build/src/start/checkDependenciesOnStart.js.map +1 -0
  214. package/build/src/start/detectDevClient.js +3 -3
  215. package/build/src/start/detectDevClient.js.map +1 -1
  216. package/build/src/start/doctor/Prerequisite.js +4 -4
  217. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  218. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +53 -91
  219. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  220. package/build/src/start/doctor/apple/XcodePrerequisite.js +3 -3
  221. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  222. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +3 -3
  223. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  224. package/build/src/start/doctor/dependencies/getMissingPackages.js +5 -5
  225. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  226. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -5
  227. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  228. package/build/src/start/doctor/dependencies/reactNativeTv.js +149 -0
  229. package/build/src/start/doctor/dependencies/reactNativeTv.js.map +1 -0
  230. package/build/src/start/doctor/dependencies/resolvePackages.js +4 -4
  231. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
  232. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +33 -8
  233. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  234. package/build/src/start/doctor/ngrok/ExternalModule.js +3 -3
  235. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  236. package/build/src/start/doctor/ngrok/NgrokResolver.js +3 -3
  237. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
  238. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  239. package/build/src/start/doctor/typescript/updateTSConfig.js +3 -3
  240. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  241. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +5 -12
  242. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  243. package/build/src/start/index.js +2 -0
  244. package/build/src/start/index.js.map +1 -1
  245. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  246. package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -1
  247. package/build/src/start/interface/commandsTable.js +6 -6
  248. package/build/src/start/interface/commandsTable.js.map +1 -1
  249. package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -1
  250. package/build/src/start/interface/interactiveActions.js +49 -6
  251. package/build/src/start/interface/interactiveActions.js.map +1 -1
  252. package/build/src/start/interface/startInterface.js +13 -4
  253. package/build/src/start/interface/startInterface.js.map +1 -1
  254. package/build/src/start/platforms/AppIdResolver.js +4 -0
  255. package/build/src/start/platforms/AppIdResolver.js.map +1 -1
  256. package/build/src/start/platforms/DeviceManager.js.map +1 -1
  257. package/build/src/start/platforms/ExpoGoInstaller.js +13 -4
  258. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  259. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  260. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
  261. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  262. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  263. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  264. package/build/src/start/platforms/android/adb.js +36 -34
  265. package/build/src/start/platforms/android/adb.js.map +1 -1
  266. package/build/src/start/platforms/android/adbReverse.js +4 -4
  267. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  268. package/build/src/start/platforms/android/emulator.js +5 -5
  269. package/build/src/start/platforms/android/emulator.js.map +1 -1
  270. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  271. package/build/src/start/platforms/android/gradle.js +5 -5
  272. package/build/src/start/platforms/android/gradle.js.map +1 -1
  273. package/build/src/start/platforms/android/promptAndroidDevice.js +3 -3
  274. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  275. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
  276. package/build/src/start/platforms/ios/AppleDeviceManager.js +20 -6
  277. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  278. package/build/src/start/platforms/ios/ApplePlatformManager.js +11 -0
  279. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  280. package/build/src/start/platforms/ios/devicectl.js +7 -7
  281. package/build/src/start/platforms/ios/devicectl.js.map +1 -1
  282. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +26 -11
  283. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  284. package/build/src/start/platforms/ios/getBestSimulator.js +5 -5
  285. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  286. package/build/src/start/platforms/ios/promptAppleDevice.js +5 -4
  287. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  288. package/build/src/start/platforms/ios/simctl.js +25 -19
  289. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  290. package/build/src/start/platforms/ios/simctlLogging.js +3 -3
  291. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  292. package/build/src/start/platforms/ios/xcrun.js +3 -3
  293. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  294. package/build/src/start/project/devices.js +6 -6
  295. package/build/src/start/project/devices.js.map +1 -1
  296. package/build/src/start/project/dotExpo.js +4 -3
  297. package/build/src/start/project/dotExpo.js.map +1 -1
  298. package/build/src/start/resolveOptions.js +7 -7
  299. package/build/src/start/resolveOptions.js.map +1 -1
  300. package/build/src/start/server/AsyncNgrok.js +1 -1
  301. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  302. package/build/src/start/server/AsyncWsTunnel.js +120 -35
  303. package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
  304. package/build/src/start/server/Bonjour.js +8 -3
  305. package/build/src/start/server/Bonjour.js.map +1 -1
  306. package/build/src/start/server/BundlerDevServer.js +23 -9
  307. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  308. package/build/src/start/server/DevServerManager.js.map +1 -1
  309. package/build/src/start/server/DevToolsPlugin.js +63 -3
  310. package/build/src/start/server/DevToolsPlugin.js.map +1 -1
  311. package/build/src/start/server/DevToolsPlugin.schema.js +8 -3
  312. package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -1
  313. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +58 -23
  314. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -1
  315. package/build/src/start/server/DevToolsPluginCliExtensionResults.js +29 -0
  316. package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -1
  317. package/build/src/start/server/DevToolsPluginManager.js +20 -6
  318. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  319. package/build/src/start/server/DevToolsPluginServerHelpers.js +83 -0
  320. package/build/src/start/server/DevToolsPluginServerHelpers.js.map +1 -0
  321. package/build/src/start/server/DevelopmentSession.js +41 -24
  322. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  323. package/build/src/start/server/MCP.js +10 -3
  324. package/build/src/start/server/MCP.js.map +1 -1
  325. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +15 -5
  326. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -1
  327. package/build/src/start/server/UrlCreator.js +14 -1
  328. package/build/src/start/server/UrlCreator.js.map +1 -1
  329. package/build/src/start/server/createMCPDevToolsExtensionSchema.js +18 -4
  330. package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -1
  331. package/build/src/start/server/getStaticRenderFunctions.js +13 -24
  332. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  333. package/build/src/start/server/metro/MetroBundlerDevServer.js +239 -108
  334. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  335. package/build/src/start/server/metro/MetroTerminalReporter.js +67 -16
  336. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  337. package/build/src/start/server/metro/TerminalReporter.js +22 -4
  338. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  339. package/build/src/start/server/metro/createExpoAutolinkingResolver.js +25 -12
  340. package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
  341. package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
  342. package/build/src/start/server/metro/createFileMap-fork.js +196 -0
  343. package/build/src/start/server/metro/createFileMap-fork.js.map +1 -0
  344. package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -22
  345. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  346. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  347. package/build/src/start/server/metro/createTypescriptResolver.js +410 -0
  348. package/build/src/start/server/metro/createTypescriptResolver.js.map +1 -0
  349. package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
  350. package/build/src/start/server/metro/debugging/attachAtlas.js +3 -3
  351. package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
  352. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +6 -5
  353. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  354. package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
  355. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +20 -4
  356. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
  357. package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
  358. package/build/src/start/server/metro/dev-server/compression.js.map +1 -1
  359. package/build/src/start/server/metro/dev-server/createMessageSocket.js +13 -2
  360. package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
  361. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +9 -2
  362. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
  363. package/build/src/start/server/metro/dev-server/utils/socketMessages.js +3 -3
  364. package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
  365. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -1
  366. package/build/src/start/server/metro/externals.js +4 -4
  367. package/build/src/start/server/metro/externals.js.map +1 -1
  368. package/build/src/start/server/metro/fetchRouterManifest.js +3 -3
  369. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  370. package/build/src/start/server/metro/getCssModulesFromBundler.js +3 -3
  371. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  372. package/build/src/start/server/metro/instantiateMetro.js +141 -57
  373. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  374. package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
  375. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +4 -4
  376. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
  377. package/build/src/start/server/metro/log-box/formatProjectFilePath.js +3 -3
  378. package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
  379. package/build/src/start/server/metro/metroErrorInterface.js +16 -13
  380. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  381. package/build/src/start/server/metro/metroErrors.js +3 -3
  382. package/build/src/start/server/metro/metroErrors.js.map +1 -1
  383. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +48 -16
  384. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
  385. package/build/src/start/server/metro/resolveLoader.js +3 -3
  386. package/build/src/start/server/metro/resolveLoader.js.map +1 -1
  387. package/build/src/start/server/metro/router.js +23 -14
  388. package/build/src/start/server/metro/router.js.map +1 -1
  389. package/build/src/start/server/metro/runServer-fork.js +13 -10
  390. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  391. package/build/src/start/server/metro/serializeHtml.js +29 -13
  392. package/build/src/start/server/metro/serializeHtml.js.map +1 -1
  393. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +36 -34
  394. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  395. package/build/src/start/server/metro/withMetroErrorReportingResolver.js +53 -30
  396. package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
  397. package/build/src/start/server/metro/withMetroMultiPlatform.js +187 -126
  398. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  399. package/build/src/start/server/metro/withMetroResolvers.js +4 -4
  400. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  401. package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
  402. package/build/src/start/server/middleware/CorsMiddleware.js +3 -3
  403. package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
  404. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  405. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +60 -9
  406. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
  407. package/build/src/start/server/middleware/DomComponentsMiddleware.js +16 -12
  408. package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
  409. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +6 -4
  410. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  411. package/build/src/start/server/middleware/ExpoMiddleware.js +3 -3
  412. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  413. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  414. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
  415. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +13 -8
  416. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  417. package/build/src/start/server/middleware/ManifestMiddleware.js +15 -6
  418. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  419. package/build/src/start/server/middleware/OpenMiddleware.js +150 -0
  420. package/build/src/start/server/middleware/OpenMiddleware.js.map +1 -0
  421. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +13 -4
  422. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  423. package/build/src/start/server/middleware/ServeStaticMiddleware.js +2 -9
  424. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  425. package/build/src/start/server/middleware/domPolyfills.js +60 -0
  426. package/build/src/start/server/middleware/domPolyfills.js.map +1 -0
  427. package/build/src/start/server/middleware/inspector/JsInspector.js +6 -31
  428. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  429. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +14 -24
  430. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
  431. package/build/src/start/server/middleware/inspector/middlwareMutations.js +3 -3
  432. package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
  433. package/build/src/start/server/middleware/metroOptions.js +15 -14
  434. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  435. package/build/src/start/server/middleware/mutations.js +3 -3
  436. package/build/src/start/server/middleware/mutations.js.map +1 -1
  437. package/build/src/start/server/middleware/openHandlers.js +157 -0
  438. package/build/src/start/server/middleware/openHandlers.js.map +1 -0
  439. package/build/src/start/server/middleware/resolveAssets.js +4 -4
  440. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  441. package/build/src/start/server/middleware/resolvePlatform.js +9 -7
  442. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  443. package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
  444. package/build/src/start/server/openPlatforms.js.map +1 -1
  445. package/build/src/start/server/platformBundlers.js +3 -1
  446. package/build/src/start/server/platformBundlers.js.map +1 -1
  447. package/build/src/start/server/serverLogLikeMetro.js +13 -36
  448. package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
  449. package/build/src/start/server/type-generation/expo-env.js +3 -3
  450. package/build/src/start/server/type-generation/expo-env.js.map +1 -1
  451. package/build/src/start/server/type-generation/routes.js +14 -55
  452. package/build/src/start/server/type-generation/routes.js.map +1 -1
  453. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  454. package/build/src/start/server/type-generation/tsconfig.js +5 -5
  455. package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
  456. package/build/src/start/server/webTemplate.js +12 -10
  457. package/build/src/start/server/webTemplate.js.map +1 -1
  458. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +3 -3
  459. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  460. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
  461. package/build/src/start/server/webpack/resolveFromProject.js +4 -4
  462. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
  463. package/build/src/start/server/webpack/tls.js +3 -3
  464. package/build/src/start/server/webpack/tls.js.map +1 -1
  465. package/build/src/start/startAsync.js +21 -11
  466. package/build/src/start/startAsync.js.map +1 -1
  467. package/build/src/types.d.ts +2 -0
  468. package/build/src/utils/FileNotifier.js +1 -1
  469. package/build/src/utils/FileNotifier.js.map +1 -1
  470. package/build/src/utils/args.js +5 -5
  471. package/build/src/utils/args.js.map +1 -1
  472. package/build/src/utils/array.js +8 -8
  473. package/build/src/utils/array.js.map +1 -1
  474. package/build/src/utils/build-cache-providers/helpers.js +4 -4
  475. package/build/src/utils/build-cache-providers/helpers.js.map +1 -1
  476. package/build/src/utils/build-cache-providers/index.js +5 -5
  477. package/build/src/utils/build-cache-providers/index.js.map +1 -1
  478. package/build/src/utils/cocoapods.js +5 -5
  479. package/build/src/utils/cocoapods.js.map +1 -1
  480. package/build/src/utils/codesigning.js +12 -6
  481. package/build/src/utils/codesigning.js.map +1 -1
  482. package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
  483. package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
  484. package/build/src/utils/createTempPath.js +3 -3
  485. package/build/src/utils/createTempPath.js.map +1 -1
  486. package/build/src/utils/delay.js +4 -4
  487. package/build/src/utils/delay.js.map +1 -1
  488. package/build/src/utils/dir.js +21 -11
  489. package/build/src/utils/dir.js.map +1 -1
  490. package/build/src/utils/downloadAppAsync.js.map +1 -1
  491. package/build/src/utils/downloadExpoGoAsync.js +4 -4
  492. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  493. package/build/src/utils/editor.js +4 -4
  494. package/build/src/utils/editor.js.map +1 -1
  495. package/build/src/utils/env.js +39 -13
  496. package/build/src/utils/env.js.map +1 -1
  497. package/build/src/utils/errors.js +6 -6
  498. package/build/src/utils/errors.js.map +1 -1
  499. package/build/src/utils/exit.js +15 -19
  500. package/build/src/utils/exit.js.map +1 -1
  501. package/build/src/utils/expoUpdatesCli.js +5 -5
  502. package/build/src/utils/expoUpdatesCli.js.map +1 -1
  503. package/build/src/utils/fetch.js +4 -4
  504. package/build/src/utils/fetch.js.map +1 -1
  505. package/build/src/utils/findUp.js +3 -3
  506. package/build/src/utils/findUp.js.map +1 -1
  507. package/build/src/utils/fn.js +3 -3
  508. package/build/src/utils/fn.js.map +1 -1
  509. package/build/src/utils/freeport.js +3 -3
  510. package/build/src/utils/freeport.js.map +1 -1
  511. package/build/src/utils/getOrPromptApplicationId.js +3 -5
  512. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  513. package/build/src/utils/getRunningProcess.js +5 -5
  514. package/build/src/utils/getRunningProcess.js.map +1 -1
  515. package/build/src/utils/git.js +3 -3
  516. package/build/src/utils/git.js.map +1 -1
  517. package/build/src/utils/glob.js +3 -3
  518. package/build/src/utils/glob.js.map +1 -1
  519. package/build/src/utils/ip.js +4 -4
  520. package/build/src/utils/ip.js.map +1 -1
  521. package/build/src/utils/link.js +3 -3
  522. package/build/src/utils/link.js.map +1 -1
  523. package/build/src/utils/mergeGitIgnorePaths.js +10 -10
  524. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  525. package/build/src/utils/modifyConfigAsync.js +3 -3
  526. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  527. package/build/src/utils/net.js +23 -4
  528. package/build/src/utils/net.js.map +1 -1
  529. package/build/src/utils/nodeEnv.js +6 -6
  530. package/build/src/utils/nodeEnv.js.map +1 -1
  531. package/build/src/utils/npm.js +10 -9
  532. package/build/src/utils/npm.js.map +1 -1
  533. package/build/src/utils/obj.js +4 -4
  534. package/build/src/utils/obj.js.map +1 -1
  535. package/build/src/utils/open.js +240 -11
  536. package/build/src/utils/open.js.map +1 -1
  537. package/build/src/utils/ora.js +4 -4
  538. package/build/src/utils/ora.js.map +1 -1
  539. package/build/src/utils/plist.js +5 -4
  540. package/build/src/utils/plist.js.map +1 -1
  541. package/build/src/utils/port.js +12 -5
  542. package/build/src/utils/port.js.map +1 -1
  543. package/build/src/utils/progress.js +4 -4
  544. package/build/src/utils/progress.js.map +1 -1
  545. package/build/src/utils/prompts.js +11 -11
  546. package/build/src/utils/prompts.js.map +1 -1
  547. package/build/src/utils/qr.js +5 -4
  548. package/build/src/utils/qr.js.map +1 -1
  549. package/build/src/utils/resolveArgs.js +10 -9
  550. package/build/src/utils/resolveArgs.js.map +1 -1
  551. package/build/src/utils/scheme.js +4 -4
  552. package/build/src/utils/scheme.js.map +1 -1
  553. package/build/src/utils/strings.js.map +1 -1
  554. package/build/src/utils/tar.js +8 -7
  555. package/build/src/utils/tar.js.map +1 -1
  556. package/build/src/utils/telemetry/Telemetry.js +5 -0
  557. package/build/src/utils/telemetry/Telemetry.js.map +1 -1
  558. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  559. package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
  560. package/build/src/utils/telemetry/clients/flushFetchDetached.js +5 -1
  561. package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
  562. package/build/src/utils/telemetry/index.js +4 -4
  563. package/build/src/utils/telemetry/index.js.map +1 -1
  564. package/build/src/utils/telemetry/utils/agent.js +42 -0
  565. package/build/src/utils/telemetry/utils/agent.js.map +1 -0
  566. package/build/src/utils/telemetry/utils/constants.js +3 -3
  567. package/build/src/utils/telemetry/utils/constants.js.map +1 -1
  568. package/build/src/utils/telemetry/utils/context.js +3 -2
  569. package/build/src/utils/telemetry/utils/context.js.map +1 -1
  570. package/build/src/utils/url.js +5 -17
  571. package/build/src/utils/url.js.map +1 -1
  572. package/build/src/utils/validateApplicationId.js +12 -12
  573. package/build/src/utils/validateApplicationId.js.map +1 -1
  574. package/build/src/utils/variadic.js +4 -4
  575. package/build/src/utils/variadic.js.map +1 -1
  576. package/build/src/whoami/index.js.map +1 -1
  577. package/changes.json +18 -26
  578. package/main.js +3 -0
  579. package/package.json +88 -80
  580. package/static/loading-page/index.html +45 -3
  581. package/static/template/+html.tsx +14 -5
  582. package/add-module.js +0 -8
  583. package/build/src/start/server/middleware/inspector/CdpClient.js +0 -81
  584. package/build/src/start/server/middleware/inspector/CdpClient.js.map +0 -1
  585. package/build/src/utils/resolveWatchFolders.js +0 -67
  586. package/build/src/utils/resolveWatchFolders.js.map +0 -1
  587. package/build/src/utils/tsconfig/evaluateTsConfig.js +0 -87
  588. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +0 -1
  589. package/build/src/utils/tsconfig/loadTsConfigPaths.js +0 -84
  590. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +0 -1
  591. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +0 -94
  592. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +0 -1
  593. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +0 -62
  594. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +0 -1
@@ -5,26 +5,26 @@ 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
- MetroTerminalReporter: function() {
12
+ get MetroTerminalReporter () {
13
13
  return MetroTerminalReporter;
14
14
  },
15
- event: function() {
15
+ get event () {
16
16
  return event;
17
17
  },
18
- extractCodeFrame: function() {
18
+ get extractCodeFrame () {
19
19
  return extractCodeFrame;
20
20
  },
21
- formatUsingNodeStandardLibraryError: function() {
21
+ get formatUsingNodeStandardLibraryError () {
22
22
  return formatUsingNodeStandardLibraryError;
23
23
  },
24
- isNodeStdLibraryModule: function() {
24
+ get isNodeStdLibraryModule () {
25
25
  return isNodeStdLibraryModule;
26
26
  },
27
- stripMetroInfo: function() {
27
+ get stripMetroInfo () {
28
28
  return stripMetroInfo;
29
29
  }
30
30
  });
@@ -57,6 +57,7 @@ const _serverLogLikeMetro = require("../serverLogLikeMetro");
57
57
  const _metroErrorInterface = require("./metroErrorInterface");
58
58
  const _events = require("../../../events");
59
59
  const _ansi = require("../../../utils/ansi");
60
+ const _interactive = require("../../../utils/interactive");
60
61
  function _interop_require_default(obj) {
61
62
  return obj && obj.__esModule ? obj : {
62
63
  default: obj
@@ -82,6 +83,17 @@ class MetroTerminalReporter extends _TerminalReporter.TerminalReporter {
82
83
  constructor(serverRoot, terminal){
83
84
  super(terminal), this.serverRoot = serverRoot;
84
85
  }
86
+ /**
87
+ * Suppress status messages in non-interactive mode.
88
+ * In TTY mode, Terminal overwrites status lines in-place (progress bars).
89
+ * In non-TTY mode, Terminal writes status via a 3500ms throttle, producing
90
+ * permanent output that interleaves with log messages like "Bundled Xms".
91
+ */ _getStatusMessage() {
92
+ if (!(0, _interactive.isInteractive)()) {
93
+ return '';
94
+ }
95
+ return super._getStatusMessage();
96
+ }
85
97
  _log(event) {
86
98
  this.#captureLog(event);
87
99
  switch(event.type){
@@ -250,12 +262,17 @@ class MetroTerminalReporter extends _TerminalReporter.TerminalReporter {
250
262
  }
251
263
  }
252
264
  #onClientLog(evt) {
253
- const { level = 'log', data } = evt;
265
+ const { level = 'log' } = evt;
266
+ // Apply printf-style format substitution (e.g. %s, %d) that browsers handle
267
+ // natively in console methods but Node/Metro terminal logging does not.
268
+ const data = applyConsoleFormatting(evt.data);
269
+ const platformTag = getPlatformTagForClientLog(evt.mode);
254
270
  if (level === 'warn' || level === 'error') {
255
271
  let hasStack = false;
256
272
  const parsed = data.map((msg)=>{
257
273
  // Quick check to see if an unsymbolicated stack is being logged.
258
- if (typeof msg === 'string' && msg.includes('.bundle//&platform=')) {
274
+ if (typeof msg === 'string' && // Native stack frames use `.bundle//&platform=...`; web stack frames use `.bundle?platform=...`.
275
+ (msg.includes('.bundle//&platform=') || msg.includes('.bundle?platform='))) {
259
276
  const stack = (0, _serverLogLikeMetro.parseErrorStringToObject)(msg);
260
277
  if (stack) {
261
278
  hasStack = true;
@@ -300,7 +317,7 @@ class MetroTerminalReporter extends _TerminalReporter.TerminalReporter {
300
317
  level,
301
318
  data: symbolicated
302
319
  });
303
- (0, _serverLogLikeMetro.logLikeMetro)(this.terminal.log.bind(this.terminal), level, null, ...filtered);
320
+ (0, _serverLogLikeMetro.logLikeMetro)(this.terminal.log.bind(this.terminal), level, platformTag, ...filtered);
304
321
  })();
305
322
  return;
306
323
  }
@@ -310,7 +327,7 @@ class MetroTerminalReporter extends _TerminalReporter.TerminalReporter {
310
327
  data
311
328
  });
312
329
  // Overwrite the Metro terminal logging so we can improve the warnings, symbolicate stacks, and inject extra info.
313
- (0, _serverLogLikeMetro.logLikeMetro)(this.terminal.log.bind(this.terminal), level, null, ...data);
330
+ (0, _serverLogLikeMetro.logLikeMetro)(this.terminal.log.bind(this.terminal), level, platformTag, ...data);
314
331
  }
315
332
  #captureLog(evt) {
316
333
  switch(evt.type){
@@ -408,14 +425,48 @@ function stripMetroInfo(errorMessage) {
408
425
  /** @returns if the message matches the initial startup log */ function isAppRegistryStartupMessage(body) {
409
426
  return body.length === 1 && (/^Running application "main" with appParams:/.test(body[0]) || /^Running "main" with \{/.test(body[0]));
410
427
  }
428
+ /** Apply printf-style format substitutions (%s, %d, %i, %f, %o, %O) that browsers handle natively */ function applyConsoleFormatting(data) {
429
+ if (data.length <= 1 || typeof data[0] !== 'string' || !/%[sdifoO%]/.test(data[0])) {
430
+ return data;
431
+ }
432
+ return [
433
+ (0, _util().format)(...data)
434
+ ];
435
+ }
436
+ /** @returns formatted platform name for a client log event, or null if no prefix should be shown */ function getPlatformTagForClientLog(mode) {
437
+ switch(mode){
438
+ case 'ios':
439
+ return 'iOS';
440
+ case 'android':
441
+ return 'Android';
442
+ case 'web':
443
+ return 'Web';
444
+ case 'dom':
445
+ return 'DOM';
446
+ default:
447
+ return null;
448
+ }
449
+ }
411
450
  /** @returns platform specific tag for a `BundleDetails` object */ function getPlatformTagForBuildDetails(bundleDetails) {
412
451
  const platform = (bundleDetails == null ? void 0 : bundleDetails.platform) ?? null;
413
452
  if (platform) {
414
- const formatted = {
415
- ios: 'iOS',
416
- android: 'Android',
417
- web: 'Web'
418
- }[platform] || platform;
453
+ let formatted;
454
+ switch(platform){
455
+ case 'ios':
456
+ formatted = 'iOS';
457
+ break;
458
+ case 'android':
459
+ formatted = 'Android';
460
+ break;
461
+ case 'web':
462
+ formatted = 'Web';
463
+ break;
464
+ case 'dom':
465
+ formatted = 'DOM';
466
+ break;
467
+ default:
468
+ formatted = platform;
469
+ }
419
470
  return `${_chalk().default.bold(formatted)} `;
420
471
  }
421
472
  return '';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/MetroTerminalReporter.ts"],"sourcesContent":["import type { Terminal } from '@expo/metro/metro-core';\nimport chalk from 'chalk';\nimport path from 'path';\nimport { stripVTControlCharacters } from 'util';\n\nimport { logWarning, TerminalReporter } from './TerminalReporter';\nimport {\n BuildPhase,\n BundleDetails,\n BundleProgress,\n SnippetError,\n TerminalReportableEvent,\n} from './TerminalReporter.types';\nimport { NODE_STDLIB_MODULES } from './externals';\nimport { env } from '../../../utils/env';\nimport { learnMore } from '../../../utils/link';\nimport {\n logLikeMetro,\n maybeSymbolicateAndFormatJSErrorStackLogAsync,\n parseErrorStringToObject,\n} from '../serverLogLikeMetro';\nimport { attachImportStackToRootMessage, nearestImportStack } from './metroErrorInterface';\nimport { events, shouldReduceLogs } from '../../../events';\nimport { stripAnsi } from '../../../utils/ansi';\n\ntype ClientLogLevel =\n | 'trace'\n | 'info'\n | 'error'\n | 'warn'\n | 'log'\n | 'group'\n | 'groupCollapsed'\n | 'groupEnd'\n | 'debug';\n\nconst debug = require('debug')('expo:metro:logger') as typeof console.log;\n\n// prettier-ignore\nexport const event = events('metro', (t) => [\n t.event<'bundling:started', {\n id: string;\n platform: null | string;\n environment: null | string;\n entry: string;\n }>(),\n t.event<'bundling:done', {\n id: string | null;\n ms: number | null;\n total: number;\n }>(),\n t.event<'bundling:failed', {\n id: string | null;\n filename: string | null;\n message: string | null;\n importStack: string | null;\n targetModuleName: string | null;\n originModulePath: string | null;\n }>(),\n t.event<'bundling:progress', {\n id: string | null;\n progress: number;\n current: number;\n total: number;\n }>(),\n t.event<'server_log', {\n level: 'info' | 'warn' | 'error' | null;\n data: string | unknown[] | null;\n }>(),\n t.event<'client_log', {\n level: ClientLogLevel | null;\n data: unknown[] | null;\n }>(),\n t.event<'hmr_client_error', {\n message: string;\n }>(),\n t.event<'cache_write_error', {\n message: string;\n }>(),\n t.event<'cache_read_error', {\n message: string;\n }>(),\n]);\n\nconst MAX_PROGRESS_BAR_CHAR_WIDTH = 16;\nconst DARK_BLOCK_CHAR = '\\u2593';\nconst LIGHT_BLOCK_CHAR = '\\u2591';\n/**\n * Extends the default Metro logger and adds some additional features.\n * Also removes the giant Metro logo from the output.\n */\nexport class MetroTerminalReporter extends TerminalReporter {\n #lastFailedBuildID: string | undefined;\n\n constructor(\n public serverRoot: string,\n terminal: Terminal\n ) {\n super(terminal);\n }\n\n _log(event: TerminalReportableEvent): void {\n this.#captureLog(event);\n switch (event.type) {\n case 'unstable_server_log':\n if (typeof event.data?.[0] === 'string') {\n const message = event.data[0];\n if (message.match(/JavaScript logs have moved/)) {\n // Hide this very loud message from upstream React Native in favor of the note in the terminal UI:\n // The \"› Press j │ open debugger\"\n\n // logger?.info(\n // '\\u001B[1m\\u001B[7m💡 JavaScript logs have moved!\\u001B[22m They can now be ' +\n // 'viewed in React Native DevTools. Tip: Type \\u001B[1mj\\u001B[22m in ' +\n // 'the terminal to open (requires Google Chrome or Microsoft Edge).' +\n // '\\u001B[27m',\n // );\n return;\n }\n\n if (!env.EXPO_DEBUG) {\n // In the context of developing an iOS app or website, the MetroInspectorProxy \"connection\" logs are very confusing.\n // Here we'll hide them behind EXPO_DEBUG or DEBUG=expo:*. In the future we can reformat them to clearly indicate that the \"Connection\" is regarding the debugger.\n // These logs are also confusing because they can say \"connection established\" even when the debugger is not in a usable state. Really they belong in a UI or behind some sort of debug logging.\n if (message.match(/Connection (closed|established|failed|terminated)/i)) {\n // Skip logging.\n return;\n }\n }\n }\n break;\n case 'client_log': {\n if (this.shouldFilterClientLog(event)) {\n return;\n } else if (event.level != null) {\n return this.#onClientLog(event);\n } else {\n break;\n }\n }\n }\n return super._log(event);\n }\n\n // Used for testing\n _getElapsedTime(startTime: bigint): bigint {\n return process.hrtime.bigint() - startTime;\n }\n /**\n * Extends the bundle progress to include the current platform that we're bundling.\n *\n * @returns `iOS path/to/bundle.js ▓▓▓▓▓░░░░░░░░░░░ 36.6% (4790/7922)`\n */\n _getBundleStatusMessage(progress: BundleProgress, phase: BuildPhase): string {\n const env = getEnvironmentForBuildDetails(progress.bundleDetails);\n const platform = env || getPlatformTagForBuildDetails(progress.bundleDetails);\n const inProgress = phase === 'in_progress';\n\n const localPath =\n typeof progress.bundleDetails?.customTransformOptions?.dom === 'string' &&\n progress.bundleDetails.customTransformOptions.dom.includes(path.sep)\n ? progress.bundleDetails.customTransformOptions.dom.replace(/^(\\.?\\.[\\\\/])+/, '')\n : this.#normalizePath(progress.bundleDetails.entryFile);\n\n if (!inProgress) {\n const status = phase === 'done' ? `Bundled ` : `Bundling failed `;\n const color = phase === 'done' ? chalk.green : chalk.red;\n\n const startTime = this._bundleTimers.get(progress.bundleDetails.buildID!);\n\n let time: string = '';\n let ms: number | null = null;\n\n if (startTime != null) {\n const elapsed: bigint = this._getElapsedTime(startTime);\n const micro = Number(elapsed) / 1000;\n ms = Number(elapsed) / 1e6;\n // If the milliseconds are < 0.5 then it will display as 0, so we display in microseconds.\n if (ms <= 0.5) {\n const tenthFractionOfMicro = ((micro * 10) / 1000).toFixed(0);\n // Format as microseconds to nearest tenth\n time = chalk.cyan.bold(`0.${tenthFractionOfMicro}ms`);\n } else {\n time = chalk.dim(ms.toFixed(0) + 'ms');\n }\n }\n\n if (phase === 'done') {\n event('bundling:done', {\n id: progress.bundleDetails.buildID ?? null,\n total: progress.totalFileCount,\n ms,\n });\n }\n\n // iOS Bundled 150ms\n const plural = progress.totalFileCount === 1 ? '' : 's';\n return (\n color(platform + status) +\n time +\n chalk.reset.dim(` ${localPath} (${progress.totalFileCount} module${plural})`)\n );\n }\n\n event('bundling:progress', {\n id: progress.bundleDetails.buildID ?? null,\n progress: progress.ratio,\n total: progress.totalFileCount,\n current: progress.transformedFileCount,\n });\n if (shouldReduceLogs()) {\n return '';\n }\n\n const filledBar = Math.floor(progress.ratio * MAX_PROGRESS_BAR_CHAR_WIDTH);\n const _progress = inProgress\n ? chalk.green.bgGreen(DARK_BLOCK_CHAR.repeat(filledBar)) +\n chalk.bgWhite.white(LIGHT_BLOCK_CHAR.repeat(MAX_PROGRESS_BAR_CHAR_WIDTH - filledBar)) +\n chalk.bold(` ${(100 * progress.ratio).toFixed(1).padStart(4)}% `) +\n chalk.dim(\n `(${progress.transformedFileCount\n .toString()\n .padStart(progress.totalFileCount.toString().length)}/${progress.totalFileCount})`\n )\n : '';\n return (\n platform +\n chalk.reset.dim(`${path.dirname(localPath)}${path.sep}`) +\n chalk.bold(path.basename(localPath)) +\n ' ' +\n _progress\n );\n }\n\n _logInitializing(port: number, hasReducedPerformance: boolean): void {\n // Don't print a giant logo...\n if (!shouldReduceLogs()) {\n this.terminal.log(chalk.dim('Starting Metro Bundler') + '\\n');\n }\n }\n\n shouldFilterClientLog(event: { type: 'client_log'; data: unknown[] }): boolean {\n return isAppRegistryStartupMessage(event.data);\n }\n\n shouldFilterBundleEvent(event: TerminalReportableEvent): boolean {\n return 'bundleDetails' in event && event.bundleDetails?.bundleType === 'map';\n }\n\n /** Print the cache clear message. */\n transformCacheReset(): void {\n logWarning(\n this.terminal,\n chalk`Bundler cache is empty, rebuilding {dim (this may take a minute)}`\n );\n }\n\n /** One of the first logs that will be printed */\n dependencyGraphLoading(hasReducedPerformance: boolean): void {\n // this.terminal.log('Dependency graph is loading...');\n if (hasReducedPerformance) {\n // Extends https://github.com/facebook/metro/blob/347b1d7ed87995d7951aaa9fd597c04b06013dac/packages/metro/src/lib/TerminalReporter.js#L283-L290\n this.terminal.log(\n chalk.red(\n [\n 'Metro is operating with reduced performance.',\n 'Fix the problem above and restart Metro.',\n ].join('\\n')\n )\n );\n }\n }\n\n /**\n * Workaround to link build ids to bundling errors.\n * This works because `_logBundleBuildFailed` is called before `_logBundlingError` in synchronous manner.\n * https://github.com/facebook/metro/blob/main/packages/metro/src/Server.js#L939-L945\n */\n _logBundleBuildFailed(buildID: string): void {\n this.#lastFailedBuildID = buildID;\n super._logBundleBuildFailed(buildID);\n }\n\n _logBundlingError(error: SnippetError): void {\n const importStack = nearestImportStack(error);\n const moduleResolutionError = formatUsingNodeStandardLibraryError(this.serverRoot, error);\n\n if (moduleResolutionError) {\n const message = maybeAppendCodeFrame(moduleResolutionError, error.message);\n event('bundling:failed', {\n id: this.#lastFailedBuildID ?? null,\n message: stripAnsi(message) ?? null,\n importStack: importStack ?? null,\n filename: error.filename ?? null,\n targetModuleName: this.#normalizePath(error.targetModuleName),\n originModulePath: this.#normalizePath(error.originModulePath),\n });\n\n return this.terminal.log(importStack ? `${message}\\n\\n${importStack}` : message);\n } else {\n event('bundling:failed', {\n id: this.#lastFailedBuildID ?? null,\n message: stripAnsi(error.message) ?? null,\n importStack: importStack ?? null,\n filename: error.filename ?? null,\n targetModuleName: error.targetModuleName ?? null,\n originModulePath: error.originModulePath ?? null,\n });\n\n attachImportStackToRootMessage(error, importStack);\n\n // NOTE(@kitten): Metro drops the stack forcefully when it finds a `SyntaxError`. However,\n // this is really unhelpful, since it prevents debugging Babel plugins or reporting bugs\n // in Babel plugins or a transformer entirely\n if (error.snippet == null && error.stack != null && error instanceof SyntaxError) {\n error.message = error.stack;\n delete error.stack;\n }\n\n return super._logBundlingError(error);\n }\n }\n\n #onClientLog(evt: { type: 'client_log'; level?: ClientLogLevel; data: unknown[] }) {\n const { level = 'log', data } = evt;\n if (level === 'warn' || (level as string) === 'error') {\n let hasStack = false;\n const parsed = data.map((msg) => {\n // Quick check to see if an unsymbolicated stack is being logged.\n if (typeof msg === 'string' && msg.includes('.bundle//&platform=')) {\n const stack = parseErrorStringToObject(msg);\n if (stack) {\n hasStack = true;\n }\n return stack;\n }\n return msg;\n });\n\n if (hasStack) {\n (async () => {\n const symbolicating = parsed.map((p) => {\n if (typeof p === 'string') {\n return p;\n } else if (\n p &&\n typeof p === 'object' &&\n 'message' in p &&\n typeof p.message === 'string'\n ) {\n return maybeSymbolicateAndFormatJSErrorStackLogAsync(\n this.serverRoot,\n level,\n p as any\n );\n } else {\n return null;\n }\n });\n\n let usefulStackCount = 0;\n const fallbackIndices: number[] = [];\n const symbolicated = (await Promise.allSettled(symbolicating)).map((s, index) => {\n if (s.status === 'rejected') {\n debug('Error formatting stack', parsed[index], s.reason);\n return parsed[index];\n } else if (!s.value) {\n return parsed[index];\n } else if (typeof s.value === 'string') {\n return s.value;\n } else {\n if (!s.value.isFallback) {\n usefulStackCount++;\n } else {\n fallbackIndices.push(index);\n }\n return s.value.stack;\n }\n });\n\n // Using EXPO_DEBUG we can print all stack\n const filtered =\n usefulStackCount && !env.EXPO_DEBUG\n ? symbolicated.filter((_, index) => !fallbackIndices.includes(index))\n : symbolicated;\n\n event('client_log', { level, data: symbolicated });\n logLikeMetro(this.terminal.log.bind(this.terminal), level, null, ...filtered);\n })();\n return;\n }\n }\n\n event('client_log', { level, data });\n // Overwrite the Metro terminal logging so we can improve the warnings, symbolicate stacks, and inject extra info.\n logLikeMetro(this.terminal.log.bind(this.terminal), level, null, ...data);\n }\n\n #captureLog(evt: TerminalReportableEvent) {\n switch (evt.type) {\n case 'bundle_build_started': {\n const entry =\n typeof evt.bundleDetails?.customTransformOptions?.dom === 'string' &&\n evt.bundleDetails.customTransformOptions.dom.includes(path.sep)\n ? evt.bundleDetails.customTransformOptions.dom.replace(/^(\\.?\\.[\\\\/])+/, '')\n : this.#normalizePath(evt.bundleDetails.entryFile);\n return event('bundling:started', {\n id: evt.buildID,\n platform: evt.bundleDetails.platform ?? null,\n environment: evt.bundleDetails.customTransformOptions?.environment ?? null,\n entry,\n });\n }\n case 'unstable_server_log':\n return event('server_log', {\n level: evt.level ?? null,\n data: evt.data ?? null,\n });\n case 'client_log':\n // Handled separately: see this.#onClientLog\n return;\n case 'hmr_client_error':\n case 'cache_write_error':\n case 'cache_read_error':\n return event(evt.type, {\n message: evt.error.message,\n });\n }\n }\n\n #normalizePath<T extends string | null>(dest: T | undefined): T | string {\n return dest != null && path.isAbsolute(dest)\n ? path.relative(this.serverRoot, dest)\n : ((dest || null) as T);\n }\n}\n\n/**\n * Formats an error where the user is attempting to import a module from the Node.js standard library.\n * Exposed for testing.\n *\n * @param error\n * @returns error message or null if not a module resolution error\n */\nexport function formatUsingNodeStandardLibraryError(\n serverRoot: string,\n error: SnippetError\n): string | null {\n if (!error.message) {\n return null;\n }\n const { targetModuleName, originModulePath } = error;\n if (!targetModuleName || !originModulePath) {\n return null;\n }\n const relativePath = path.relative(serverRoot, originModulePath);\n\n const DOCS_PAGE_URL =\n 'https://docs.expo.dev/workflow/using-libraries/#using-third-party-libraries';\n\n if (isNodeStdLibraryModule(targetModuleName)) {\n if (originModulePath.includes('node_modules')) {\n return [\n `The package at \"${chalk.bold(\n relativePath\n )}\" attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n } else {\n return [\n `You attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\" from \"${chalk.bold(relativePath)}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n }\n }\n return `Unable to resolve \"${targetModuleName}\" from \"${relativePath}\"`;\n}\n\nexport function isNodeStdLibraryModule(moduleName: string): boolean {\n return /^node:/.test(moduleName) || NODE_STDLIB_MODULES.includes(moduleName);\n}\n\n/** If the code frame can be found then append it to the existing message. */\nfunction maybeAppendCodeFrame(message: string, rawMessage: string): string {\n const codeFrame = extractCodeFrame(stripMetroInfo(rawMessage));\n if (codeFrame) {\n message += '\\n' + codeFrame;\n }\n return message;\n}\n\n/** Extract fist code frame presented in the error message */\nexport function extractCodeFrame(errorMessage: string): string {\n const codeFrameLine = /^(?:\\s*(?:>?\\s*\\d+\\s*\\||\\s*\\|).*\\n?)+/;\n let wasPreviousLineCodeFrame: boolean | null = null;\n return errorMessage\n .split('\\n')\n .filter((line) => {\n if (wasPreviousLineCodeFrame === false) return false;\n const keep = codeFrameLine.test(stripVTControlCharacters(line));\n if (keep && wasPreviousLineCodeFrame === null) wasPreviousLineCodeFrame = true;\n else if (!keep && wasPreviousLineCodeFrame) wasPreviousLineCodeFrame = false;\n return keep;\n })\n .join('\\n');\n}\n\n/**\n * Remove the Metro cache clearing steps if they exist.\n * In future versions we won't need this.\n * Returns the remaining code frame logs.\n */\nexport function stripMetroInfo(errorMessage: string): string {\n // Newer versions of Metro don't include the list.\n if (!errorMessage.includes('4. Remove the cache')) {\n return errorMessage;\n }\n const lines = errorMessage.split('\\n');\n const index = lines.findIndex((line) => line.includes('4. Remove the cache'));\n if (index === -1) {\n return errorMessage;\n }\n return lines.slice(index + 1).join('\\n');\n}\n\n/** @returns if the message matches the initial startup log */\nfunction isAppRegistryStartupMessage(body: any[]): boolean {\n return (\n body.length === 1 &&\n (/^Running application \"main\" with appParams:/.test(body[0]) ||\n /^Running \"main\" with \\{/.test(body[0]))\n );\n}\n\n/** @returns platform specific tag for a `BundleDetails` object */\nfunction getPlatformTagForBuildDetails(bundleDetails?: BundleDetails | null): string {\n const platform = bundleDetails?.platform ?? null;\n if (platform) {\n const formatted = { ios: 'iOS', android: 'Android', web: 'Web' }[platform] || platform;\n return `${chalk.bold(formatted)} `;\n }\n\n return '';\n}\n/** @returns platform specific tag for a `BundleDetails` object */\nfunction getEnvironmentForBuildDetails(bundleDetails?: BundleDetails | null): string {\n // Expo CLI will pass `customTransformOptions.environment = 'node'` when bundling for the server.\n const env = bundleDetails?.customTransformOptions?.environment ?? null;\n if (env === 'node') {\n return chalk.bold('λ') + ' ';\n } else if (env === 'react-server') {\n return chalk.bold(`RSC(${getPlatformTagForBuildDetails(bundleDetails).trim()})`) + ' ';\n }\n\n if (\n bundleDetails?.customTransformOptions?.dom &&\n typeof bundleDetails?.customTransformOptions?.dom === 'string'\n ) {\n return chalk.bold(`DOM`) + ' ';\n }\n\n return '';\n}\n"],"names":["MetroTerminalReporter","event","extractCodeFrame","formatUsingNodeStandardLibraryError","isNodeStdLibraryModule","stripMetroInfo","debug","require","events","t","MAX_PROGRESS_BAR_CHAR_WIDTH","DARK_BLOCK_CHAR","LIGHT_BLOCK_CHAR","TerminalReporter","constructor","serverRoot","terminal","_log","type","data","message","match","env","EXPO_DEBUG","shouldFilterClientLog","level","_getElapsedTime","startTime","process","hrtime","bigint","_getBundleStatusMessage","progress","phase","getEnvironmentForBuildDetails","bundleDetails","platform","getPlatformTagForBuildDetails","inProgress","localPath","customTransformOptions","dom","includes","path","sep","replace","entryFile","status","color","chalk","green","red","_bundleTimers","get","buildID","time","ms","elapsed","micro","Number","tenthFractionOfMicro","toFixed","cyan","bold","dim","id","total","totalFileCount","plural","reset","ratio","current","transformedFileCount","shouldReduceLogs","filledBar","Math","floor","_progress","bgGreen","repeat","bgWhite","white","padStart","toString","length","dirname","basename","_logInitializing","port","hasReducedPerformance","log","isAppRegistryStartupMessage","shouldFilterBundleEvent","bundleType","transformCacheReset","logWarning","dependencyGraphLoading","join","_logBundleBuildFailed","_logBundlingError","error","importStack","nearestImportStack","moduleResolutionError","maybeAppendCodeFrame","stripAnsi","filename","targetModuleName","originModulePath","attachImportStackToRootMessage","snippet","stack","SyntaxError","evt","hasStack","parsed","map","msg","parseErrorStringToObject","symbolicating","p","maybeSymbolicateAndFormatJSErrorStackLogAsync","usefulStackCount","fallbackIndices","symbolicated","Promise","allSettled","s","index","reason","value","isFallback","push","filtered","filter","_","logLikeMetro","bind","entry","environment","dest","isAbsolute","relative","relativePath","DOCS_PAGE_URL","learnMore","moduleName","test","NODE_STDLIB_MODULES","rawMessage","codeFrame","errorMessage","codeFrameLine","wasPreviousLineCodeFrame","split","line","keep","stripVTControlCharacters","lines","findIndex","slice","body","formatted","ios","android","web","trim"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/MetroTerminalReporter.ts"],"sourcesContent":["import type { Terminal } from '@expo/metro/metro-core';\nimport chalk from 'chalk';\nimport path from 'path';\nimport { format as utilFormat, stripVTControlCharacters } from 'util';\n\nimport { logWarning, TerminalReporter } from './TerminalReporter';\nimport type {\n BuildPhase,\n BundleDetails,\n BundleProgress,\n SnippetError,\n TerminalReportableEvent,\n} from './TerminalReporter.types';\nimport { NODE_STDLIB_MODULES } from './externals';\nimport { env } from '../../../utils/env';\nimport { learnMore } from '../../../utils/link';\nimport {\n logLikeMetro,\n maybeSymbolicateAndFormatJSErrorStackLogAsync,\n parseErrorStringToObject,\n} from '../serverLogLikeMetro';\nimport { attachImportStackToRootMessage, nearestImportStack } from './metroErrorInterface';\nimport { events, shouldReduceLogs } from '../../../events';\nimport { stripAnsi } from '../../../utils/ansi';\nimport { isInteractive } from '../../../utils/interactive';\n\ntype ClientLogLevel =\n | 'trace'\n | 'info'\n | 'error'\n | 'warn'\n | 'log'\n | 'group'\n | 'groupCollapsed'\n | 'groupEnd'\n | 'debug';\n\nconst debug = require('debug')('expo:metro:logger') as typeof console.log;\n\n// prettier-ignore\nexport const event = events('metro', (t) => [\n t.event<'bundling:started', {\n id: string;\n platform: null | string;\n environment: null | string;\n entry: string;\n }>(),\n t.event<'bundling:done', {\n id: string | null;\n ms: number | null;\n total: number;\n }>(),\n t.event<'bundling:failed', {\n id: string | null;\n filename: string | null;\n message: string | null;\n importStack: string | null;\n targetModuleName: string | null;\n originModulePath: string | null;\n }>(),\n t.event<'bundling:progress', {\n id: string | null;\n progress: number;\n current: number;\n total: number;\n }>(),\n t.event<'server_log', {\n level: 'info' | 'warn' | 'error' | null;\n data: string | unknown[] | null;\n }>(),\n t.event<'client_log', {\n level: ClientLogLevel | null;\n data: unknown[] | null;\n }>(),\n t.event<'hmr_client_error', {\n message: string;\n }>(),\n t.event<'cache_write_error', {\n message: string;\n }>(),\n t.event<'cache_read_error', {\n message: string;\n }>(),\n]);\n\nconst MAX_PROGRESS_BAR_CHAR_WIDTH = 16;\nconst DARK_BLOCK_CHAR = '\\u2593';\nconst LIGHT_BLOCK_CHAR = '\\u2591';\n/**\n * Extends the default Metro logger and adds some additional features.\n * Also removes the giant Metro logo from the output.\n */\nexport class MetroTerminalReporter extends TerminalReporter {\n #lastFailedBuildID: string | undefined;\n\n constructor(\n public serverRoot: string,\n terminal: Terminal\n ) {\n super(terminal);\n }\n\n /**\n * Suppress status messages in non-interactive mode.\n * In TTY mode, Terminal overwrites status lines in-place (progress bars).\n * In non-TTY mode, Terminal writes status via a 3500ms throttle, producing\n * permanent output that interleaves with log messages like \"Bundled Xms\".\n */\n _getStatusMessage(): string {\n if (!isInteractive()) {\n return '';\n }\n return super._getStatusMessage();\n }\n\n _log(event: TerminalReportableEvent): void {\n this.#captureLog(event);\n switch (event.type) {\n case 'unstable_server_log':\n if (typeof event.data?.[0] === 'string') {\n const message = event.data[0];\n if (message.match(/JavaScript logs have moved/)) {\n // Hide this very loud message from upstream React Native in favor of the note in the terminal UI:\n // The \"› Press j │ open debugger\"\n\n // logger?.info(\n // '\\u001B[1m\\u001B[7m💡 JavaScript logs have moved!\\u001B[22m They can now be ' +\n // 'viewed in React Native DevTools. Tip: Type \\u001B[1mj\\u001B[22m in ' +\n // 'the terminal to open (requires Google Chrome or Microsoft Edge).' +\n // '\\u001B[27m',\n // );\n return;\n }\n\n if (!env.EXPO_DEBUG) {\n // In the context of developing an iOS app or website, the MetroInspectorProxy \"connection\" logs are very confusing.\n // Here we'll hide them behind EXPO_DEBUG or DEBUG=expo:*. In the future we can reformat them to clearly indicate that the \"Connection\" is regarding the debugger.\n // These logs are also confusing because they can say \"connection established\" even when the debugger is not in a usable state. Really they belong in a UI or behind some sort of debug logging.\n if (message.match(/Connection (closed|established|failed|terminated)/i)) {\n // Skip logging.\n return;\n }\n }\n }\n break;\n case 'client_log': {\n if (this.shouldFilterClientLog(event)) {\n return;\n } else if (event.level != null) {\n return this.#onClientLog(event);\n } else {\n break;\n }\n }\n }\n return super._log(event);\n }\n\n // Used for testing\n _getElapsedTime(startTime: bigint): bigint {\n return process.hrtime.bigint() - startTime;\n }\n /**\n * Extends the bundle progress to include the current platform that we're bundling.\n *\n * @returns `iOS path/to/bundle.js ▓▓▓▓▓░░░░░░░░░░░ 36.6% (4790/7922)`\n */\n _getBundleStatusMessage(progress: BundleProgress, phase: BuildPhase): string {\n const env = getEnvironmentForBuildDetails(progress.bundleDetails);\n const platform = env || getPlatformTagForBuildDetails(progress.bundleDetails);\n const inProgress = phase === 'in_progress';\n\n const localPath =\n typeof progress.bundleDetails?.customTransformOptions?.dom === 'string' &&\n progress.bundleDetails.customTransformOptions.dom.includes(path.sep)\n ? progress.bundleDetails.customTransformOptions.dom.replace(/^(\\.?\\.[\\\\/])+/, '')\n : this.#normalizePath(progress.bundleDetails.entryFile);\n\n if (!inProgress) {\n const status = phase === 'done' ? `Bundled ` : `Bundling failed `;\n const color = phase === 'done' ? chalk.green : chalk.red;\n\n const startTime = this._bundleTimers.get(progress.bundleDetails.buildID!);\n\n let time: string = '';\n let ms: number | null = null;\n\n if (startTime != null) {\n const elapsed: bigint = this._getElapsedTime(startTime);\n const micro = Number(elapsed) / 1000;\n ms = Number(elapsed) / 1e6;\n // If the milliseconds are < 0.5 then it will display as 0, so we display in microseconds.\n if (ms <= 0.5) {\n const tenthFractionOfMicro = ((micro * 10) / 1000).toFixed(0);\n // Format as microseconds to nearest tenth\n time = chalk.cyan.bold(`0.${tenthFractionOfMicro}ms`);\n } else {\n time = chalk.dim(ms.toFixed(0) + 'ms');\n }\n }\n\n if (phase === 'done') {\n event('bundling:done', {\n id: progress.bundleDetails.buildID ?? null,\n total: progress.totalFileCount,\n ms,\n });\n }\n\n // iOS Bundled 150ms\n const plural = progress.totalFileCount === 1 ? '' : 's';\n return (\n color(platform + status) +\n time +\n chalk.reset.dim(` ${localPath} (${progress.totalFileCount} module${plural})`)\n );\n }\n\n event('bundling:progress', {\n id: progress.bundleDetails.buildID ?? null,\n progress: progress.ratio,\n total: progress.totalFileCount,\n current: progress.transformedFileCount,\n });\n if (shouldReduceLogs()) {\n return '';\n }\n\n const filledBar = Math.floor(progress.ratio * MAX_PROGRESS_BAR_CHAR_WIDTH);\n const _progress = inProgress\n ? chalk.green.bgGreen(DARK_BLOCK_CHAR.repeat(filledBar)) +\n chalk.bgWhite.white(LIGHT_BLOCK_CHAR.repeat(MAX_PROGRESS_BAR_CHAR_WIDTH - filledBar)) +\n chalk.bold(` ${(100 * progress.ratio).toFixed(1).padStart(4)}% `) +\n chalk.dim(\n `(${progress.transformedFileCount\n .toString()\n .padStart(progress.totalFileCount.toString().length)}/${progress.totalFileCount})`\n )\n : '';\n return (\n platform +\n chalk.reset.dim(`${path.dirname(localPath)}${path.sep}`) +\n chalk.bold(path.basename(localPath)) +\n ' ' +\n _progress\n );\n }\n\n _logInitializing(port: number, hasReducedPerformance: boolean): void {\n // Don't print a giant logo...\n if (!shouldReduceLogs()) {\n this.terminal.log(chalk.dim('Starting Metro Bundler') + '\\n');\n }\n }\n\n shouldFilterClientLog(event: { type: 'client_log'; data: unknown[] }): boolean {\n return isAppRegistryStartupMessage(event.data);\n }\n\n shouldFilterBundleEvent(event: TerminalReportableEvent): boolean {\n return 'bundleDetails' in event && event.bundleDetails?.bundleType === 'map';\n }\n\n /** Print the cache clear message. */\n transformCacheReset(): void {\n logWarning(\n this.terminal,\n chalk`Bundler cache is empty, rebuilding {dim (this may take a minute)}`\n );\n }\n\n /** One of the first logs that will be printed */\n dependencyGraphLoading(hasReducedPerformance: boolean): void {\n // this.terminal.log('Dependency graph is loading...');\n if (hasReducedPerformance) {\n // Extends https://github.com/facebook/metro/blob/347b1d7ed87995d7951aaa9fd597c04b06013dac/packages/metro/src/lib/TerminalReporter.js#L283-L290\n this.terminal.log(\n chalk.red(\n [\n 'Metro is operating with reduced performance.',\n 'Fix the problem above and restart Metro.',\n ].join('\\n')\n )\n );\n }\n }\n\n /**\n * Workaround to link build ids to bundling errors.\n * This works because `_logBundleBuildFailed` is called before `_logBundlingError` in synchronous manner.\n * https://github.com/facebook/metro/blob/main/packages/metro/src/Server.js#L939-L945\n */\n _logBundleBuildFailed(buildID: string): void {\n this.#lastFailedBuildID = buildID;\n super._logBundleBuildFailed(buildID);\n }\n\n _logBundlingError(error: SnippetError): void {\n const importStack = nearestImportStack(error);\n const moduleResolutionError = formatUsingNodeStandardLibraryError(this.serverRoot, error);\n\n if (moduleResolutionError) {\n const message = maybeAppendCodeFrame(moduleResolutionError, error.message);\n event('bundling:failed', {\n id: this.#lastFailedBuildID ?? null,\n message: stripAnsi(message) ?? null,\n importStack: importStack ?? null,\n filename: error.filename ?? null,\n targetModuleName: this.#normalizePath(error.targetModuleName),\n originModulePath: this.#normalizePath(error.originModulePath),\n });\n\n return this.terminal.log(importStack ? `${message}\\n\\n${importStack}` : message);\n } else {\n event('bundling:failed', {\n id: this.#lastFailedBuildID ?? null,\n message: stripAnsi(error.message) ?? null,\n importStack: importStack ?? null,\n filename: error.filename ?? null,\n targetModuleName: error.targetModuleName ?? null,\n originModulePath: error.originModulePath ?? null,\n });\n\n attachImportStackToRootMessage(error, importStack);\n\n // NOTE(@kitten): Metro drops the stack forcefully when it finds a `SyntaxError`. However,\n // this is really unhelpful, since it prevents debugging Babel plugins or reporting bugs\n // in Babel plugins or a transformer entirely\n if (error.snippet == null && error.stack != null && error instanceof SyntaxError) {\n error.message = error.stack;\n delete error.stack;\n }\n\n return super._logBundlingError(error);\n }\n }\n\n #onClientLog(evt: {\n type: 'client_log';\n level?: ClientLogLevel;\n data: unknown[];\n mode?: string;\n }) {\n const { level = 'log' } = evt;\n // Apply printf-style format substitution (e.g. %s, %d) that browsers handle\n // natively in console methods but Node/Metro terminal logging does not.\n const data = applyConsoleFormatting(evt.data);\n const platformTag = getPlatformTagForClientLog(evt.mode);\n if (level === 'warn' || (level as string) === 'error') {\n let hasStack = false;\n const parsed = data.map((msg) => {\n // Quick check to see if an unsymbolicated stack is being logged.\n if (\n typeof msg === 'string' &&\n // Native stack frames use `.bundle//&platform=...`; web stack frames use `.bundle?platform=...`.\n (msg.includes('.bundle//&platform=') || msg.includes('.bundle?platform='))\n ) {\n const stack = parseErrorStringToObject(msg);\n if (stack) {\n hasStack = true;\n }\n return stack;\n }\n return msg;\n });\n\n if (hasStack) {\n (async () => {\n const symbolicating = parsed.map((p) => {\n if (typeof p === 'string') {\n return p;\n } else if (\n p &&\n typeof p === 'object' &&\n 'message' in p &&\n typeof p.message === 'string'\n ) {\n return maybeSymbolicateAndFormatJSErrorStackLogAsync(\n this.serverRoot,\n level,\n p as any\n );\n } else {\n return null;\n }\n });\n\n let usefulStackCount = 0;\n const fallbackIndices: number[] = [];\n const symbolicated = (await Promise.allSettled(symbolicating)).map((s, index) => {\n if (s.status === 'rejected') {\n debug('Error formatting stack', parsed[index], s.reason);\n return parsed[index];\n } else if (!s.value) {\n return parsed[index];\n } else if (typeof s.value === 'string') {\n return s.value;\n } else {\n if (!s.value.isFallback) {\n usefulStackCount++;\n } else {\n fallbackIndices.push(index);\n }\n return s.value.stack;\n }\n });\n\n // Using EXPO_DEBUG we can print all stack\n const filtered =\n usefulStackCount && !env.EXPO_DEBUG\n ? symbolicated.filter((_, index) => !fallbackIndices.includes(index))\n : symbolicated;\n\n event('client_log', { level, data: symbolicated });\n logLikeMetro(this.terminal.log.bind(this.terminal), level, platformTag, ...filtered);\n })();\n return;\n }\n }\n\n event('client_log', { level, data });\n // Overwrite the Metro terminal logging so we can improve the warnings, symbolicate stacks, and inject extra info.\n logLikeMetro(this.terminal.log.bind(this.terminal), level, platformTag, ...data);\n }\n\n #captureLog(evt: TerminalReportableEvent) {\n switch (evt.type) {\n case 'bundle_build_started': {\n const entry =\n typeof evt.bundleDetails?.customTransformOptions?.dom === 'string' &&\n evt.bundleDetails.customTransformOptions.dom.includes(path.sep)\n ? evt.bundleDetails.customTransformOptions.dom.replace(/^(\\.?\\.[\\\\/])+/, '')\n : this.#normalizePath(evt.bundleDetails.entryFile);\n return event('bundling:started', {\n id: evt.buildID,\n platform: evt.bundleDetails.platform ?? null,\n environment: evt.bundleDetails.customTransformOptions?.environment ?? null,\n entry,\n });\n }\n case 'unstable_server_log':\n return event('server_log', {\n level: evt.level ?? null,\n data: evt.data ?? null,\n });\n case 'client_log':\n // Handled separately: see this.#onClientLog\n return;\n case 'hmr_client_error':\n case 'cache_write_error':\n case 'cache_read_error':\n return event(evt.type, {\n message: evt.error.message,\n });\n }\n }\n\n #normalizePath<T extends string | null>(dest: T | undefined): T | string {\n return dest != null && path.isAbsolute(dest)\n ? path.relative(this.serverRoot, dest)\n : ((dest || null) as T);\n }\n}\n\n/**\n * Formats an error where the user is attempting to import a module from the Node.js standard library.\n * Exposed for testing.\n *\n * @param error\n * @returns error message or null if not a module resolution error\n */\nexport function formatUsingNodeStandardLibraryError(\n serverRoot: string,\n error: SnippetError\n): string | null {\n if (!error.message) {\n return null;\n }\n const { targetModuleName, originModulePath } = error;\n if (!targetModuleName || !originModulePath) {\n return null;\n }\n const relativePath = path.relative(serverRoot, originModulePath);\n\n const DOCS_PAGE_URL =\n 'https://docs.expo.dev/workflow/using-libraries/#using-third-party-libraries';\n\n if (isNodeStdLibraryModule(targetModuleName)) {\n if (originModulePath.includes('node_modules')) {\n return [\n `The package at \"${chalk.bold(\n relativePath\n )}\" attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n } else {\n return [\n `You attempted to import the Node standard library module \"${chalk.bold(\n targetModuleName\n )}\" from \"${chalk.bold(relativePath)}\".`,\n `It failed because the native React runtime does not include the Node standard library.`,\n learnMore(DOCS_PAGE_URL),\n ].join('\\n');\n }\n }\n return `Unable to resolve \"${targetModuleName}\" from \"${relativePath}\"`;\n}\n\nexport function isNodeStdLibraryModule(moduleName: string): boolean {\n return /^node:/.test(moduleName) || NODE_STDLIB_MODULES.includes(moduleName);\n}\n\n/** If the code frame can be found then append it to the existing message. */\nfunction maybeAppendCodeFrame(message: string, rawMessage: string): string {\n const codeFrame = extractCodeFrame(stripMetroInfo(rawMessage));\n if (codeFrame) {\n message += '\\n' + codeFrame;\n }\n return message;\n}\n\n/** Extract fist code frame presented in the error message */\nexport function extractCodeFrame(errorMessage: string): string {\n const codeFrameLine = /^(?:\\s*(?:>?\\s*\\d+\\s*\\||\\s*\\|).*\\n?)+/;\n let wasPreviousLineCodeFrame: boolean | null = null;\n return errorMessage\n .split('\\n')\n .filter((line) => {\n if (wasPreviousLineCodeFrame === false) return false;\n const keep = codeFrameLine.test(stripVTControlCharacters(line));\n if (keep && wasPreviousLineCodeFrame === null) wasPreviousLineCodeFrame = true;\n else if (!keep && wasPreviousLineCodeFrame) wasPreviousLineCodeFrame = false;\n return keep;\n })\n .join('\\n');\n}\n\n/**\n * Remove the Metro cache clearing steps if they exist.\n * In future versions we won't need this.\n * Returns the remaining code frame logs.\n */\nexport function stripMetroInfo(errorMessage: string): string {\n // Newer versions of Metro don't include the list.\n if (!errorMessage.includes('4. Remove the cache')) {\n return errorMessage;\n }\n const lines = errorMessage.split('\\n');\n const index = lines.findIndex((line) => line.includes('4. Remove the cache'));\n if (index === -1) {\n return errorMessage;\n }\n return lines.slice(index + 1).join('\\n');\n}\n\n/** @returns if the message matches the initial startup log */\nfunction isAppRegistryStartupMessage(body: any[]): boolean {\n return (\n body.length === 1 &&\n (/^Running application \"main\" with appParams:/.test(body[0]) ||\n /^Running \"main\" with \\{/.test(body[0]))\n );\n}\n\n/** Apply printf-style format substitutions (%s, %d, %i, %f, %o, %O) that browsers handle natively */\nfunction applyConsoleFormatting(data: unknown[]): unknown[] {\n if (data.length <= 1 || typeof data[0] !== 'string' || !/%[sdifoO%]/.test(data[0])) {\n return data;\n }\n return [utilFormat(...(data as [string, ...unknown[]]))];\n}\n\n/** @returns formatted platform name for a client log event, or null if no prefix should be shown */\nfunction getPlatformTagForClientLog(mode?: string): string | null {\n switch (mode) {\n case 'ios':\n return 'iOS';\n case 'android':\n return 'Android';\n case 'web':\n return 'Web';\n case 'dom':\n return 'DOM';\n default:\n return null;\n }\n}\n\n/** @returns platform specific tag for a `BundleDetails` object */\nfunction getPlatformTagForBuildDetails(bundleDetails?: BundleDetails | null): string {\n const platform = bundleDetails?.platform ?? null;\n if (platform) {\n let formatted: string;\n switch (platform) {\n case 'ios':\n formatted = 'iOS';\n break;\n case 'android':\n formatted = 'Android';\n break;\n case 'web':\n formatted = 'Web';\n break;\n case 'dom':\n formatted = 'DOM';\n break;\n default:\n formatted = platform;\n }\n return `${chalk.bold(formatted)} `;\n }\n\n return '';\n}\n/** @returns platform specific tag for a `BundleDetails` object */\nfunction getEnvironmentForBuildDetails(bundleDetails?: BundleDetails | null): string {\n // Expo CLI will pass `customTransformOptions.environment = 'node'` when bundling for the server.\n const env = bundleDetails?.customTransformOptions?.environment ?? null;\n if (env === 'node') {\n return chalk.bold('λ') + ' ';\n } else if (env === 'react-server') {\n return chalk.bold(`RSC(${getPlatformTagForBuildDetails(bundleDetails).trim()})`) + ' ';\n }\n\n if (\n bundleDetails?.customTransformOptions?.dom &&\n typeof bundleDetails?.customTransformOptions?.dom === 'string'\n ) {\n return chalk.bold(`DOM`) + ' ';\n }\n\n return '';\n}\n"],"names":["MetroTerminalReporter","event","extractCodeFrame","formatUsingNodeStandardLibraryError","isNodeStdLibraryModule","stripMetroInfo","debug","require","events","t","MAX_PROGRESS_BAR_CHAR_WIDTH","DARK_BLOCK_CHAR","LIGHT_BLOCK_CHAR","TerminalReporter","serverRoot","terminal","_getStatusMessage","isInteractive","_log","type","data","message","match","env","EXPO_DEBUG","shouldFilterClientLog","level","_getElapsedTime","startTime","process","hrtime","bigint","_getBundleStatusMessage","progress","phase","getEnvironmentForBuildDetails","bundleDetails","platform","getPlatformTagForBuildDetails","inProgress","localPath","customTransformOptions","dom","includes","path","sep","replace","entryFile","status","color","chalk","green","red","_bundleTimers","get","buildID","time","ms","elapsed","micro","Number","tenthFractionOfMicro","toFixed","cyan","bold","dim","id","total","totalFileCount","plural","reset","ratio","current","transformedFileCount","shouldReduceLogs","filledBar","Math","floor","_progress","bgGreen","repeat","bgWhite","white","padStart","toString","length","dirname","basename","_logInitializing","port","hasReducedPerformance","log","isAppRegistryStartupMessage","shouldFilterBundleEvent","bundleType","transformCacheReset","logWarning","dependencyGraphLoading","join","_logBundleBuildFailed","_logBundlingError","error","importStack","nearestImportStack","moduleResolutionError","maybeAppendCodeFrame","stripAnsi","filename","targetModuleName","originModulePath","attachImportStackToRootMessage","snippet","stack","SyntaxError","evt","applyConsoleFormatting","platformTag","getPlatformTagForClientLog","mode","hasStack","parsed","map","msg","parseErrorStringToObject","symbolicating","p","maybeSymbolicateAndFormatJSErrorStackLogAsync","usefulStackCount","fallbackIndices","symbolicated","Promise","allSettled","s","index","reason","value","isFallback","push","filtered","filter","_","logLikeMetro","bind","entry","environment","dest","isAbsolute","relative","relativePath","DOCS_PAGE_URL","learnMore","moduleName","test","NODE_STDLIB_MODULES","rawMessage","codeFrame","errorMessage","codeFrameLine","wasPreviousLineCodeFrame","split","line","keep","stripVTControlCharacters","lines","findIndex","slice","body","utilFormat","formatted","trim"],"mappings":"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"}
@@ -7,17 +7,17 @@ Object.defineProperty(exports, "__esModule", {
7
7
  function _export(target, all) {
8
8
  for(var name in all)Object.defineProperty(target, name, {
9
9
  enumerable: true,
10
- get: all[name]
10
+ get: Object.getOwnPropertyDescriptor(all, name).get
11
11
  });
12
12
  }
13
13
  _export(exports, {
14
- TerminalReporter: function() {
14
+ get TerminalReporter () {
15
15
  return TerminalReporter;
16
16
  },
17
- logError: function() {
17
+ get logError () {
18
18
  return logError;
19
19
  },
20
- logWarning: function() {
20
+ get logWarning () {
21
21
  return logWarning;
22
22
  }
23
23
  });
@@ -62,6 +62,24 @@ function logError(terminal, format, ...args) {
62
62
  }
63
63
  const XTerminalReporter = _TerminalReporter().default;
64
64
  class TerminalReporter extends XTerminalReporter {
65
+ /**
66
+ * Override Metro's update() to clear the status before _log() runs.
67
+ *
68
+ * Metro's Terminal.#update() is async and snapshots #nextStatusStr at the start.
69
+ * When _log() calls terminal.log(), Terminal starts #update() which captures
70
+ * whatever status is currently set — often a stale progress bar. This progress bar
71
+ * gets written as permanent output between log lines because the next #update()
72
+ * cycle (which would clear it) runs 33ms later.
73
+ *
74
+ * By clearing the status to empty before _log(), Terminal's #update() captures
75
+ * an empty status and doesn't write any progress bars alongside log lines.
76
+ * The correct status is then restored by terminal.status() at the end.
77
+ */ update(event) {
78
+ if (event.type !== 'bundle_transform_progressed' && event.type !== 'bundle_transform_progressed_throttled') {
79
+ this.terminal.status('');
80
+ }
81
+ super.update(event);
82
+ }
65
83
  _log(event) {
66
84
  switch(event.type){
67
85
  case 'transform_cache_reset':
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/TerminalReporter.ts"],"sourcesContent":["// This file represents an abstraction on the metro TerminalReporter.\n// We use this abstraction to safely extend the TerminalReporter for our own custom logging.\nimport UpstreamTerminalReporter from '@expo/metro/metro/lib/TerminalReporter';\nimport type { Terminal } from '@expo/metro/metro-core';\nimport type { WatcherStatus } from '@expo/metro/metro-file-map';\nimport chalk from 'chalk';\nimport util from 'util';\n\nimport {\n BundleDetails,\n BundleProgressUpdate,\n TerminalReportableEvent,\n TerminalReporterInterface,\n} from './TerminalReporter.types';\nimport { stripAnsi } from '../../../utils/ansi';\n\nconst debug = require('debug')('expo:metro:logger') as typeof console.log;\n\n/**\n * A standard way to log a warning to the terminal. This should not be called\n * from some arbitrary Metro logic, only from the reporters. Instead of\n * calling this, add a new type of ReportableEvent instead, and implement a\n * proper handler in the reporter(s).\n */\nexport function logWarning(terminal: Terminal, format: string, ...args: any[]): void {\n const str = util.format(format, ...args);\n terminal.log('%s: %s', chalk.yellow('warning'), str);\n}\n\n/**\n * Similar to `logWarning`, but for messages that require the user to act.\n */\nexport function logError(terminal: Terminal, format: string, ...args: any[]): void {\n terminal.log(\n '%s: %s',\n chalk.red('error'),\n // Syntax errors may have colors applied for displaying code frames\n // in various places outside of where Metro is currently running.\n // If the current terminal does not support color, we'll strip the colors\n // here.\n util.format(chalk.supportsColor ? format : stripAnsi(format), ...args)\n );\n}\n\nconst XTerminalReporter = UpstreamTerminalReporter as unknown as TerminalReporterInterface;\n\n/** Extended TerminalReporter class but with proper types and extra functionality to avoid using the `_log` method directly in subclasses. */\nexport class TerminalReporter extends XTerminalReporter implements TerminalReporterInterface {\n /**\n * A cache of { [buildID]: BundleDetails } which can be used to\n * add more contextual logs. BundleDetails is currently only sent with `bundle_build_started`\n * so we need to cache the details in order to print the platform info with other event types.\n */\n _bundleDetails: Map<string, BundleDetails> = new Map();\n\n /** Keep track of how long a bundle takes to complete */\n _bundleTimers: Map<string, bigint> = new Map();\n\n /** Keep track of bundle processes that should not be logged. */\n _hiddenBundleEvents: Set<string> = new Set();\n\n _log(event: TerminalReportableEvent): void {\n switch (event.type) {\n case 'transform_cache_reset':\n return this.transformCacheReset();\n case 'dep_graph_loading':\n return this.dependencyGraphLoading(event.hasReducedPerformance);\n case 'client_log':\n if (this.shouldFilterClientLog(event)) {\n return;\n }\n break;\n }\n return super._log(event);\n }\n\n /** Gives subclasses an easy interface for filtering out logs. Return `true` to skip. */\n shouldFilterClientLog(event: TerminalReportableEvent): boolean {\n return false;\n }\n\n /** Gives subclasses an easy interface for filtering out bundle events, specifically for source maps. Return `true` to skip. */\n shouldFilterBundleEvent(event: TerminalReportableEvent): boolean {\n return false;\n }\n\n /** Cache has been reset. */\n transformCacheReset(): void {}\n\n /** One of the first logs that will be printed. */\n dependencyGraphLoading(hasReducedPerformance: boolean): void {}\n\n /**\n * Custom log event representing the end of the bundling.\n *\n * @param event event object.\n * @param duration duration of the build in milliseconds.\n */\n bundleBuildEnded(event: TerminalReportableEvent, duration: bigint | number): void {}\n\n // Add a custom format to logs that come from the worker threads.\n // `| <contents>`\n _logWorkerChunk(origin: 'stdout' | 'stderr', chunk: string): void {\n const lines = chunk.split('\\n');\n if (lines.length >= 1 && lines[lines.length - 1] === '') {\n lines.splice(lines.length - 1, 1);\n }\n\n const originTag = origin === 'stdout' ? chalk.dim('|') : chalk.yellow('|');\n lines.forEach((line: string) => {\n this.terminal.log(originTag, line);\n });\n }\n\n _logWatcherStatus(status: WatcherStatus) {\n // Metro logs this warning twice. This helps reduce the noise.\n\n if (status.type === 'watchman_warning') {\n return;\n }\n return super._logWatcherStatus(status);\n }\n\n /**\n * This function is exclusively concerned with updating the internal state.\n * No logging or status updates should be done at this point.\n */\n _updateState(\n event: TerminalReportableEvent & { bundleDetails?: BundleDetails; buildID?: string }\n ) {\n // Append the buildID to the bundleDetails.\n if (event.bundleDetails) {\n event.bundleDetails.buildID = event.buildID;\n }\n\n const buildID = event.bundleDetails?.buildID ?? event.buildID;\n\n if (buildID && !this._hiddenBundleEvents.has(buildID)) {\n if (this.shouldFilterBundleEvent(event)) {\n debug('skipping bundle events for', buildID, event);\n this._hiddenBundleEvents.add(buildID);\n } else {\n super._updateState(event);\n }\n } else {\n super._updateState(event);\n }\n\n switch (event.type) {\n case 'bundle_build_done':\n case 'bundle_build_failed': {\n const startTime = this._bundleTimers.get(event.buildID);\n // Observed a bug in Metro where the `bundle_build_done` is invoked twice during a static bundle\n // i.e. `expo export`.\n if (startTime == null) {\n break;\n }\n\n this.bundleBuildEnded(event, startTime ? process.hrtime.bigint() - startTime : 0);\n this._bundleTimers.delete(event.buildID);\n break;\n }\n case 'bundle_build_started':\n this._bundleDetails.set(event.buildID, event.bundleDetails);\n this._bundleTimers.set(event.buildID, process.hrtime.bigint());\n break;\n }\n }\n\n /**\n * We use Math.pow(ratio, 2) to as a conservative measure of progress because\n * we know the `totalCount` is going to progressively increase as well. We\n * also prevent the ratio from going backwards.\n */\n _updateBundleProgress(options: BundleProgressUpdate) {\n super._updateBundleProgress(options);\n\n const currentProgress = this._activeBundles.get(options.buildID);\n if (!currentProgress) {\n return;\n }\n\n // Fix an issue where the transformer is faster than the resolver,\n // locking the progress bar at 100% after transforming the first and only resolved file (1/1).\n if (currentProgress.ratio === 1 && options.totalFileCount === 1) {\n Object.assign(currentProgress, { ...currentProgress, ratio: 0 });\n }\n }\n}\n"],"names":["TerminalReporter","logError","logWarning","debug","require","terminal","format","args","str","util","log","chalk","yellow","red","supportsColor","stripAnsi","XTerminalReporter","UpstreamTerminalReporter","_log","event","type","transformCacheReset","dependencyGraphLoading","hasReducedPerformance","shouldFilterClientLog","shouldFilterBundleEvent","bundleBuildEnded","duration","_logWorkerChunk","origin","chunk","lines","split","length","splice","originTag","dim","forEach","line","_logWatcherStatus","status","_updateState","bundleDetails","buildID","_hiddenBundleEvents","has","add","startTime","_bundleTimers","get","process","hrtime","bigint","delete","_bundleDetails","set","_updateBundleProgress","options","currentProgress","_activeBundles","ratio","totalFileCount","Object","assign","Map","Set"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/TerminalReporter.ts"],"sourcesContent":["// This file represents an abstraction on the metro TerminalReporter.\n// We use this abstraction to safely extend the TerminalReporter for our own custom logging.\nimport UpstreamTerminalReporter from '@expo/metro/metro/lib/TerminalReporter';\nimport type { Terminal } from '@expo/metro/metro-core';\nimport type { WatcherStatus } from '@expo/metro/metro-file-map';\nimport chalk from 'chalk';\nimport util from 'util';\n\nimport type {\n BundleDetails,\n BundleProgressUpdate,\n TerminalReportableEvent,\n TerminalReporterInterface,\n} from './TerminalReporter.types';\nimport { stripAnsi } from '../../../utils/ansi';\n\nconst debug = require('debug')('expo:metro:logger') as typeof console.log;\n\n/**\n * A standard way to log a warning to the terminal. This should not be called\n * from some arbitrary Metro logic, only from the reporters. Instead of\n * calling this, add a new type of ReportableEvent instead, and implement a\n * proper handler in the reporter(s).\n */\nexport function logWarning(terminal: Terminal, format: string, ...args: any[]): void {\n const str = util.format(format, ...args);\n terminal.log('%s: %s', chalk.yellow('warning'), str);\n}\n\n/**\n * Similar to `logWarning`, but for messages that require the user to act.\n */\nexport function logError(terminal: Terminal, format: string, ...args: any[]): void {\n terminal.log(\n '%s: %s',\n chalk.red('error'),\n // Syntax errors may have colors applied for displaying code frames\n // in various places outside of where Metro is currently running.\n // If the current terminal does not support color, we'll strip the colors\n // here.\n util.format(chalk.supportsColor ? format : stripAnsi(format), ...args)\n );\n}\n\nconst XTerminalReporter = UpstreamTerminalReporter as unknown as TerminalReporterInterface;\n\n/** Extended TerminalReporter class but with proper types and extra functionality to avoid using the `_log` method directly in subclasses. */\nexport class TerminalReporter extends XTerminalReporter implements TerminalReporterInterface {\n /**\n * A cache of { [buildID]: BundleDetails } which can be used to\n * add more contextual logs. BundleDetails is currently only sent with `bundle_build_started`\n * so we need to cache the details in order to print the platform info with other event types.\n */\n _bundleDetails: Map<string, BundleDetails> = new Map();\n\n /** Keep track of how long a bundle takes to complete */\n _bundleTimers: Map<string, bigint> = new Map();\n\n /** Keep track of bundle processes that should not be logged. */\n _hiddenBundleEvents: Set<string> = new Set();\n\n /**\n * Override Metro's update() to clear the status before _log() runs.\n *\n * Metro's Terminal.#update() is async and snapshots #nextStatusStr at the start.\n * When _log() calls terminal.log(), Terminal starts #update() which captures\n * whatever status is currently set — often a stale progress bar. This progress bar\n * gets written as permanent output between log lines because the next #update()\n * cycle (which would clear it) runs 33ms later.\n *\n * By clearing the status to empty before _log(), Terminal's #update() captures\n * an empty status and doesn't write any progress bars alongside log lines.\n * The correct status is then restored by terminal.status() at the end.\n */\n update(event: TerminalReportableEvent): void {\n if (\n event.type !== 'bundle_transform_progressed' &&\n event.type !== ('bundle_transform_progressed_throttled' as string)\n ) {\n this.terminal.status('');\n }\n super.update(event);\n }\n\n _log(event: TerminalReportableEvent): void {\n switch (event.type) {\n case 'transform_cache_reset':\n return this.transformCacheReset();\n case 'dep_graph_loading':\n return this.dependencyGraphLoading(event.hasReducedPerformance);\n case 'client_log':\n if (this.shouldFilterClientLog(event)) {\n return;\n }\n break;\n }\n return super._log(event);\n }\n\n /** Gives subclasses an easy interface for filtering out logs. Return `true` to skip. */\n shouldFilterClientLog(event: TerminalReportableEvent): boolean {\n return false;\n }\n\n /** Gives subclasses an easy interface for filtering out bundle events, specifically for source maps. Return `true` to skip. */\n shouldFilterBundleEvent(event: TerminalReportableEvent): boolean {\n return false;\n }\n\n /** Cache has been reset. */\n transformCacheReset(): void {}\n\n /** One of the first logs that will be printed. */\n dependencyGraphLoading(hasReducedPerformance: boolean): void {}\n\n /**\n * Custom log event representing the end of the bundling.\n *\n * @param event event object.\n * @param duration duration of the build in milliseconds.\n */\n bundleBuildEnded(event: TerminalReportableEvent, duration: bigint | number): void {}\n\n // Add a custom format to logs that come from the worker threads.\n // `| <contents>`\n _logWorkerChunk(origin: 'stdout' | 'stderr', chunk: string): void {\n const lines = chunk.split('\\n');\n if (lines.length >= 1 && lines[lines.length - 1] === '') {\n lines.splice(lines.length - 1, 1);\n }\n\n const originTag = origin === 'stdout' ? chalk.dim('|') : chalk.yellow('|');\n lines.forEach((line: string) => {\n this.terminal.log(originTag, line);\n });\n }\n\n _logWatcherStatus(status: WatcherStatus) {\n // Metro logs this warning twice. This helps reduce the noise.\n\n if (status.type === 'watchman_warning') {\n return;\n }\n return super._logWatcherStatus(status);\n }\n\n /**\n * This function is exclusively concerned with updating the internal state.\n * No logging or status updates should be done at this point.\n */\n _updateState(\n event: TerminalReportableEvent & { bundleDetails?: BundleDetails; buildID?: string }\n ) {\n // Append the buildID to the bundleDetails.\n if (event.bundleDetails) {\n event.bundleDetails.buildID = event.buildID;\n }\n\n const buildID = event.bundleDetails?.buildID ?? event.buildID;\n\n if (buildID && !this._hiddenBundleEvents.has(buildID)) {\n if (this.shouldFilterBundleEvent(event)) {\n debug('skipping bundle events for', buildID, event);\n this._hiddenBundleEvents.add(buildID);\n } else {\n super._updateState(event);\n }\n } else {\n super._updateState(event);\n }\n\n switch (event.type) {\n case 'bundle_build_done':\n case 'bundle_build_failed': {\n const startTime = this._bundleTimers.get(event.buildID);\n // Observed a bug in Metro where the `bundle_build_done` is invoked twice during a static bundle\n // i.e. `expo export`.\n if (startTime == null) {\n break;\n }\n\n this.bundleBuildEnded(event, startTime ? process.hrtime.bigint() - startTime : 0);\n this._bundleTimers.delete(event.buildID);\n break;\n }\n case 'bundle_build_started':\n this._bundleDetails.set(event.buildID, event.bundleDetails);\n this._bundleTimers.set(event.buildID, process.hrtime.bigint());\n break;\n }\n }\n\n /**\n * We use Math.pow(ratio, 2) to as a conservative measure of progress because\n * we know the `totalCount` is going to progressively increase as well. We\n * also prevent the ratio from going backwards.\n */\n _updateBundleProgress(options: BundleProgressUpdate) {\n super._updateBundleProgress(options);\n\n const currentProgress = this._activeBundles.get(options.buildID);\n if (!currentProgress) {\n return;\n }\n\n // Fix an issue where the transformer is faster than the resolver,\n // locking the progress bar at 100% after transforming the first and only resolved file (1/1).\n if (currentProgress.ratio === 1 && options.totalFileCount === 1) {\n Object.assign(currentProgress, { ...currentProgress, ratio: 0 });\n }\n }\n}\n"],"names":["TerminalReporter","logError","logWarning","debug","require","terminal","format","args","str","util","log","chalk","yellow","red","supportsColor","stripAnsi","XTerminalReporter","UpstreamTerminalReporter","update","event","type","status","_log","transformCacheReset","dependencyGraphLoading","hasReducedPerformance","shouldFilterClientLog","shouldFilterBundleEvent","bundleBuildEnded","duration","_logWorkerChunk","origin","chunk","lines","split","length","splice","originTag","dim","forEach","line","_logWatcherStatus","_updateState","bundleDetails","buildID","_hiddenBundleEvents","has","add","startTime","_bundleTimers","get","process","hrtime","bigint","delete","_bundleDetails","set","_updateBundleProgress","options","currentProgress","_activeBundles","ratio","totalFileCount","Object","assign","Map","Set"],"mappings":"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"}
@@ -5,17 +5,17 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- _dependenciesToRegex: function() {
12
+ get _dependenciesToRegex () {
13
13
  return _dependenciesToRegex;
14
14
  },
15
- createAutolinkingModuleResolver: function() {
15
+ get createAutolinkingModuleResolver () {
16
16
  return createAutolinkingModuleResolver;
17
17
  },
18
- createAutolinkingModuleResolverInput: function() {
18
+ get createAutolinkingModuleResolverInput () {
19
19
  return createAutolinkingModuleResolverInput;
20
20
  }
21
21
  });
@@ -52,12 +52,14 @@ const KNOWN_STICKY_DEPENDENCIES = [
52
52
  const AUTOLINKING_PLATFORMS = [
53
53
  'android',
54
54
  'ios',
55
- 'web'
55
+ 'web',
56
+ 'tvos',
57
+ 'macos'
56
58
  ];
57
59
  const escapeDependencyName = (dependency)=>dependency.replace(/[*.?()[\]]/g, (x)=>`\\${x}`);
58
60
  const _dependenciesToRegex = (dependencies)=>new RegExp(`^(${dependencies.map(escapeDependencyName).join('|')})($|/.*)`);
59
61
  const getAutolinkingExports = ()=>require('expo/internal/unstable-autolinking-exports');
60
- const toPlatformModuleDescription = (dependencies, platform)=>{
62
+ const toPlatformModuleDescription = (dependencies, platform, supportPackage)=>{
61
63
  const resolvedModulePaths = {};
62
64
  const resolvedModuleNames = [];
63
65
  for(const dependencyName in dependencies){
@@ -67,11 +69,17 @@ const toPlatformModuleDescription = (dependencies, platform)=>{
67
69
  resolvedModulePaths[dependency.name] = dependency.path;
68
70
  }
69
71
  }
72
+ // Redirect `react-native` to the platform's support package
73
+ const moduleNameRewrites = {};
74
+ if (supportPackage && supportPackage !== 'react-native' && resolvedModulePaths[supportPackage]) {
75
+ moduleNameRewrites['react-native'] = supportPackage;
76
+ }
70
77
  debug(`Sticky resolution for ${platform} registered ${resolvedModuleNames.length} resolutions:`, resolvedModuleNames);
71
78
  return {
72
79
  platform,
73
80
  moduleTestRe: _dependenciesToRegex(resolvedModuleNames),
74
- resolvedModulePaths
81
+ resolvedModulePaths,
82
+ moduleNameRewrites
75
83
  };
76
84
  };
77
85
  async function createAutolinkingModuleResolverInput({ platforms, projectRoot }) {
@@ -83,7 +91,8 @@ async function createAutolinkingModuleResolverInput({ platforms, projectRoot })
83
91
  return AUTOLINKING_PLATFORMS.includes(platform);
84
92
  }).map(async (platform)=>{
85
93
  const dependencies = await autolinking.scanDependencyResolutionsForPlatform(linker, platform, KNOWN_STICKY_DEPENDENCIES);
86
- const moduleDescription = toPlatformModuleDescription(dependencies, platform);
94
+ const supportPackage = autolinking.getSupportPackageForPlatform(platform);
95
+ const moduleDescription = toPlatformModuleDescription(dependencies, platform, supportPackage);
87
96
  return [
88
97
  platform,
89
98
  moduleDescription
@@ -108,15 +117,19 @@ function createAutolinkingModuleResolver(input, { getStrictResolver }) {
108
117
  const moduleDescription = input[platform];
109
118
  const moduleMatch = moduleDescription.moduleTestRe.exec(moduleName);
110
119
  if (moduleMatch) {
111
- const resolvedModulePath = moduleDescription.resolvedModulePaths[moduleMatch[1]] || moduleName;
112
- // We instead resolve as if it was a dependency from within the module (self-require/import)
120
+ var _moduleDescription_moduleNameRewrites;
121
+ const matchedName = moduleMatch[1];
122
+ const rewriteTarget = (_moduleDescription_moduleNameRewrites = moduleDescription.moduleNameRewrites) == null ? void 0 : _moduleDescription_moduleNameRewrites[matchedName];
123
+ const resolvedModuleName = rewriteTarget != null ? rewriteTarget + moduleMatch[2] : moduleName;
124
+ const resolvedModulePath = moduleDescription.resolvedModulePaths[rewriteTarget ?? matchedName] || resolvedModuleName;
125
+ // We instead resolve as if it was a dependency from within the (target) module
113
126
  const context = {
114
127
  ...immutableContext,
115
128
  nodeModulesPaths: [],
116
129
  originModulePath: resolvedModulePath
117
130
  };
118
- const res = getStrictResolver(context, platform)(moduleName);
119
- debug(`Sticky resolution for ${platform}: ${moduleName} -> from: ${resolvedModulePath}`);
131
+ const res = getStrictResolver(context, platform)(resolvedModuleName);
132
+ debug(`Sticky resolution for ${platform}: ${moduleName} -> ${resolvedModuleName} (from: ${resolvedModulePath})`);
120
133
  return res;
121
134
  }
122
135
  return null;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/createExpoAutolinkingResolver.ts"],"sourcesContent":["import type { ResolutionContext } from '@expo/metro/metro-resolver';\nimport type { ResolutionResult as AutolinkingResolutionResult } from 'expo-modules-autolinking/exports';\n\nimport type { StrictResolverFactory } from './withMetroMultiPlatform';\nimport type { ExpoCustomMetroResolver } from './withMetroResolvers';\n\nconst debug = require('debug')(\n 'expo:start:server:metro:autolinking-resolver'\n) as typeof console.log;\n\n// This is a list of known modules we want to always include in sticky resolution\n// Specifying these skips platform- and module-specific checks and always includes them in the output\nconst KNOWN_STICKY_DEPENDENCIES = [\n // NOTE: react and react-dom aren't native modules, but must also be deduplicated in bundles\n 'react',\n 'react-dom',\n // NOTE: react-native won't be in autolinking output, since it's special\n // We include it here manually, since we know it should be an unduplicated direct dependency\n 'react-native',\n // NOTE: We may redirect dependencies from react-native to react-native-web. This fails if\n // a sub-dependency cannot access react-native-web, so we define it here\n 'react-native-web',\n // Peer dependencies from expo\n 'react-native-webview',\n '@expo/dom-webview',\n // Dependencies from expo\n 'expo-asset',\n 'expo-constants',\n 'expo-file-system',\n 'expo-font',\n 'expo-keep-awake',\n 'expo-modules-core',\n // Peer dependencies from expo-router\n 'react-native-gesture-handler',\n 'react-native-reanimated',\n // Has a context that needs to be deduplicated\n '@react-navigation/core',\n '@react-navigation/native',\n];\n\nconst AUTOLINKING_PLATFORMS = ['android', 'ios', 'web'] as const;\ntype AutolinkingPlatform = (typeof AUTOLINKING_PLATFORMS)[number];\n\nconst escapeDependencyName = (dependency: string) =>\n dependency.replace(/[*.?()[\\]]/g, (x) => `\\\\${x}`);\n\n/** Converts a list of module names to a regex that may either match bare module names or sub-modules of modules */\nexport const _dependenciesToRegex = (dependencies: string[]) =>\n new RegExp(`^(${dependencies.map(escapeDependencyName).join('|')})($|/.*)`);\n\nconst getAutolinkingExports = (): typeof import('expo/internal/unstable-autolinking-exports') =>\n require('expo/internal/unstable-autolinking-exports');\n\ninterface PlatformModuleDescription {\n platform: AutolinkingPlatform;\n moduleTestRe: RegExp;\n resolvedModulePaths: Record<string, string>;\n}\n\nconst toPlatformModuleDescription = (\n dependencies: AutolinkingResolutionResult,\n platform: AutolinkingPlatform\n): PlatformModuleDescription => {\n const resolvedModulePaths: Record<string, string> = {};\n const resolvedModuleNames: string[] = [];\n for (const dependencyName in dependencies) {\n const dependency = dependencies[dependencyName];\n if (dependency) {\n resolvedModuleNames.push(dependency.name);\n resolvedModulePaths[dependency.name] = dependency.path;\n }\n }\n debug(\n `Sticky resolution for ${platform} registered ${resolvedModuleNames.length} resolutions:`,\n resolvedModuleNames\n );\n return {\n platform,\n moduleTestRe: _dependenciesToRegex(resolvedModuleNames),\n resolvedModulePaths,\n };\n};\n\nexport type AutolinkingModuleResolverInput = {\n [platform in AutolinkingPlatform]?: PlatformModuleDescription;\n};\n\nexport async function createAutolinkingModuleResolverInput({\n platforms,\n projectRoot,\n}: {\n projectRoot: string;\n platforms: string[];\n}): Promise<AutolinkingModuleResolverInput> {\n const autolinking = getAutolinkingExports();\n const linker = autolinking.makeCachedDependenciesLinker({ projectRoot });\n\n return Object.fromEntries(\n await Promise.all(\n platforms\n .filter((platform): platform is AutolinkingPlatform => {\n return AUTOLINKING_PLATFORMS.includes(platform as any);\n })\n .map(async (platform) => {\n const dependencies = await autolinking.scanDependencyResolutionsForPlatform(\n linker,\n platform,\n KNOWN_STICKY_DEPENDENCIES\n );\n const moduleDescription = toPlatformModuleDescription(dependencies, platform);\n return [platform, moduleDescription] satisfies [\n AutolinkingPlatform,\n PlatformModuleDescription,\n ];\n })\n )\n ) as AutolinkingModuleResolverInput;\n}\n\nexport function createAutolinkingModuleResolver(\n input: AutolinkingModuleResolverInput | undefined,\n { getStrictResolver }: { getStrictResolver: StrictResolverFactory }\n): ExpoCustomMetroResolver | undefined {\n if (!input) {\n return undefined;\n }\n\n const fileSpecifierRe = /^[\\\\/]|^\\.\\.?(?:$|[\\\\/])/i;\n const isAutolinkingPlatform = (platform: string | null): platform is AutolinkingPlatform =>\n !!platform && (input as any)[platform] != null;\n\n return function requestStickyModule(immutableContext, moduleName, platform) {\n // NOTE(@kitten): We currently don't include Web. The `expo-doctor` check already warns\n // about duplicates, and we can try to add Web later on. We should expand expo-modules-autolinking\n // properly to support web first however\n if (!isAutolinkingPlatform(platform)) {\n return null;\n } else if (fileSpecifierRe.test(moduleName)) {\n return null;\n }\n\n const moduleDescription = input[platform]!;\n const moduleMatch = moduleDescription.moduleTestRe.exec(moduleName);\n if (moduleMatch) {\n const resolvedModulePath =\n moduleDescription.resolvedModulePaths[moduleMatch[1]] || moduleName;\n // We instead resolve as if it was a dependency from within the module (self-require/import)\n const context: ResolutionContext = {\n ...immutableContext,\n nodeModulesPaths: [],\n originModulePath: resolvedModulePath,\n };\n const res = getStrictResolver(context, platform)(moduleName);\n debug(`Sticky resolution for ${platform}: ${moduleName} -> from: ${resolvedModulePath}`);\n return res;\n }\n\n return null;\n };\n}\n"],"names":["_dependenciesToRegex","createAutolinkingModuleResolver","createAutolinkingModuleResolverInput","debug","require","KNOWN_STICKY_DEPENDENCIES","AUTOLINKING_PLATFORMS","escapeDependencyName","dependency","replace","x","dependencies","RegExp","map","join","getAutolinkingExports","toPlatformModuleDescription","platform","resolvedModulePaths","resolvedModuleNames","dependencyName","push","name","path","length","moduleTestRe","platforms","projectRoot","autolinking","linker","makeCachedDependenciesLinker","Object","fromEntries","Promise","all","filter","includes","scanDependencyResolutionsForPlatform","moduleDescription","input","getStrictResolver","undefined","fileSpecifierRe","isAutolinkingPlatform","requestStickyModule","immutableContext","moduleName","test","moduleMatch","exec","resolvedModulePath","context","nodeModulesPaths","originModulePath","res"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/createExpoAutolinkingResolver.ts"],"sourcesContent":["import type { Platform } from '@expo/config';\nimport type { ResolutionContext } from '@expo/metro/metro-resolver';\nimport type { ResolutionResult as AutolinkingResolutionResult } from 'expo-modules-autolinking/exports';\n\nimport type { StrictResolverFactory } from './withMetroMultiPlatform';\nimport type { ExpoCustomMetroResolver } from './withMetroResolvers';\n\nconst debug = require('debug')(\n 'expo:start:server:metro:autolinking-resolver'\n) as typeof console.log;\n\n// This is a list of known modules we want to always include in sticky resolution\n// Specifying these skips platform- and module-specific checks and always includes them in the output\nconst KNOWN_STICKY_DEPENDENCIES = [\n // NOTE: react and react-dom aren't native modules, but must also be deduplicated in bundles\n 'react',\n 'react-dom',\n // NOTE: react-native won't be in autolinking output, since it's special\n // We include it here manually, since we know it should be an unduplicated direct dependency\n 'react-native',\n // NOTE: We may redirect dependencies from react-native to react-native-web. This fails if\n // a sub-dependency cannot access react-native-web, so we define it here\n 'react-native-web',\n // Peer dependencies from expo\n 'react-native-webview',\n '@expo/dom-webview',\n // Dependencies from expo\n 'expo-asset',\n 'expo-constants',\n 'expo-file-system',\n 'expo-font',\n 'expo-keep-awake',\n 'expo-modules-core',\n // Peer dependencies from expo-router\n 'react-native-gesture-handler',\n 'react-native-reanimated',\n // Has a context that needs to be deduplicated\n '@react-navigation/core',\n '@react-navigation/native',\n];\n\nconst AUTOLINKING_PLATFORMS: readonly Platform[] = ['android', 'ios', 'web', 'tvos', 'macos'];\n\nexport type AutolinkingPlatform = Platform;\n\nconst escapeDependencyName = (dependency: string) =>\n dependency.replace(/[*.?()[\\]]/g, (x) => `\\\\${x}`);\n\n/** Converts a list of module names to a regex that may either match bare module names or sub-modules of modules */\nexport const _dependenciesToRegex = (dependencies: string[]) =>\n new RegExp(`^(${dependencies.map(escapeDependencyName).join('|')})($|/.*)`);\n\nconst getAutolinkingExports = (): typeof import('expo/internal/unstable-autolinking-exports') =>\n require('expo/internal/unstable-autolinking-exports');\n\ninterface PlatformModuleDescription {\n platform: AutolinkingPlatform;\n moduleTestRe: RegExp;\n resolvedModulePaths: Record<string, string>;\n moduleNameRewrites: Record<string, string | undefined>;\n}\n\nconst toPlatformModuleDescription = (\n dependencies: AutolinkingResolutionResult,\n platform: AutolinkingPlatform,\n supportPackage: string | null\n): PlatformModuleDescription => {\n const resolvedModulePaths: Record<string, string> = {};\n const resolvedModuleNames: string[] = [];\n for (const dependencyName in dependencies) {\n const dependency = dependencies[dependencyName];\n if (dependency) {\n resolvedModuleNames.push(dependency.name);\n resolvedModulePaths[dependency.name] = dependency.path;\n }\n }\n // Redirect `react-native` to the platform's support package\n const moduleNameRewrites: Record<string, string | undefined> = {};\n if (supportPackage && supportPackage !== 'react-native' && resolvedModulePaths[supportPackage]) {\n moduleNameRewrites['react-native'] = supportPackage;\n }\n debug(\n `Sticky resolution for ${platform} registered ${resolvedModuleNames.length} resolutions:`,\n resolvedModuleNames\n );\n return {\n platform,\n moduleTestRe: _dependenciesToRegex(resolvedModuleNames),\n resolvedModulePaths,\n moduleNameRewrites,\n };\n};\n\nexport type AutolinkingModuleResolverInput = {\n [platform in AutolinkingPlatform]?: PlatformModuleDescription;\n};\n\nexport async function createAutolinkingModuleResolverInput({\n platforms,\n projectRoot,\n}: {\n projectRoot: string;\n platforms: string[];\n}): Promise<AutolinkingModuleResolverInput> {\n const autolinking = getAutolinkingExports();\n const linker = autolinking.makeCachedDependenciesLinker({ projectRoot });\n\n return Object.fromEntries(\n await Promise.all(\n platforms\n .filter((platform): platform is AutolinkingPlatform => {\n return AUTOLINKING_PLATFORMS.includes(platform as any);\n })\n .map(async (platform) => {\n const dependencies = await autolinking.scanDependencyResolutionsForPlatform(\n linker,\n platform,\n KNOWN_STICKY_DEPENDENCIES\n );\n const supportPackage = autolinking.getSupportPackageForPlatform(platform);\n const moduleDescription = toPlatformModuleDescription(\n dependencies,\n platform,\n supportPackage\n );\n return [platform, moduleDescription] satisfies [\n AutolinkingPlatform,\n PlatformModuleDescription,\n ];\n })\n )\n ) as AutolinkingModuleResolverInput;\n}\n\nexport function createAutolinkingModuleResolver(\n input: AutolinkingModuleResolverInput | undefined,\n { getStrictResolver }: { getStrictResolver: StrictResolverFactory }\n): ExpoCustomMetroResolver | undefined {\n if (!input) {\n return undefined;\n }\n\n const fileSpecifierRe = /^[\\\\/]|^\\.\\.?(?:$|[\\\\/])/i;\n const isAutolinkingPlatform = (platform: string | null): platform is AutolinkingPlatform =>\n !!platform && (input as any)[platform] != null;\n\n return function requestStickyModule(immutableContext, moduleName, platform) {\n // NOTE(@kitten): We currently don't include Web. The `expo-doctor` check already warns\n // about duplicates, and we can try to add Web later on. We should expand expo-modules-autolinking\n // properly to support web first however\n if (!isAutolinkingPlatform(platform)) {\n return null;\n } else if (fileSpecifierRe.test(moduleName)) {\n return null;\n }\n\n const moduleDescription = input[platform]!;\n const moduleMatch = moduleDescription.moduleTestRe.exec(moduleName);\n if (moduleMatch) {\n const matchedName = moduleMatch[1]!;\n const rewriteTarget = moduleDescription.moduleNameRewrites?.[matchedName];\n const resolvedModuleName =\n rewriteTarget != null ? rewriteTarget + moduleMatch[2]! : moduleName;\n const resolvedModulePath =\n moduleDescription.resolvedModulePaths[rewriteTarget ?? matchedName] || resolvedModuleName;\n // We instead resolve as if it was a dependency from within the (target) module\n const context: ResolutionContext = {\n ...immutableContext,\n nodeModulesPaths: [],\n originModulePath: resolvedModulePath,\n };\n const res = getStrictResolver(context, platform)(resolvedModuleName);\n debug(\n `Sticky resolution for ${platform}: ${moduleName} -> ${resolvedModuleName} (from: ${resolvedModulePath})`\n );\n return res;\n }\n\n return null;\n };\n}\n"],"names":["_dependenciesToRegex","createAutolinkingModuleResolver","createAutolinkingModuleResolverInput","debug","require","KNOWN_STICKY_DEPENDENCIES","AUTOLINKING_PLATFORMS","escapeDependencyName","dependency","replace","x","dependencies","RegExp","map","join","getAutolinkingExports","toPlatformModuleDescription","platform","supportPackage","resolvedModulePaths","resolvedModuleNames","dependencyName","push","name","path","moduleNameRewrites","length","moduleTestRe","platforms","projectRoot","autolinking","linker","makeCachedDependenciesLinker","Object","fromEntries","Promise","all","filter","includes","scanDependencyResolutionsForPlatform","getSupportPackageForPlatform","moduleDescription","input","getStrictResolver","undefined","fileSpecifierRe","isAutolinkingPlatform","requestStickyModule","immutableContext","moduleName","test","moduleMatch","exec","matchedName","rewriteTarget","resolvedModuleName","resolvedModulePath","context","nodeModulesPaths","originModulePath","res"],"mappings":"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"}