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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (600) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -18
  3. package/build/bin/cli +4 -4
  4. package/build/bin/cli.map +1 -1
  5. package/build/src/api/endpoint.js +4 -4
  6. package/build/src/api/endpoint.js.map +1 -1
  7. package/build/src/api/getExpoSchema.js +3 -3
  8. package/build/src/api/getExpoSchema.js.map +1 -1
  9. package/build/src/api/graphql/client.js +26 -14
  10. package/build/src/api/graphql/client.js.map +1 -1
  11. package/build/src/api/graphql/mutations/TunnelMutation.js +31 -0
  12. package/build/src/api/graphql/mutations/TunnelMutation.js.map +1 -0
  13. package/build/src/api/rest/cache/FileSystemResponseCache.js.map +1 -1
  14. package/build/src/api/rest/cache/ResponseCache.js +5 -5
  15. package/build/src/api/rest/cache/ResponseCache.js.map +1 -1
  16. package/build/src/api/rest/client.js +35 -20
  17. package/build/src/api/rest/client.js.map +1 -1
  18. package/build/src/api/rest/wrapFetchWithBaseUrl.js.map +1 -1
  19. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  20. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  21. package/build/src/api/rest/wrapFetchWithUserAgent.js.map +1 -1
  22. package/build/src/api/updateDevelopmentSession.js +6 -5
  23. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  24. package/build/src/api/user/UserSettings.js +28 -15
  25. package/build/src/api/user/UserSettings.js.map +1 -1
  26. package/build/src/api/user/actions.js +10 -3
  27. package/build/src/api/user/actions.js.map +1 -1
  28. package/build/src/api/user/expoSsoLauncher.js +76 -24
  29. package/build/src/api/user/expoSsoLauncher.js.map +1 -1
  30. package/build/src/api/user/otp.js +4 -4
  31. package/build/src/api/user/otp.js.map +1 -1
  32. package/build/src/api/user/user.js +19 -7
  33. package/build/src/api/user/user.js.map +1 -1
  34. package/build/src/config/configAsync.js +3 -3
  35. package/build/src/config/configAsync.js.map +1 -1
  36. package/build/src/config/index.js.map +1 -1
  37. package/build/src/customize/customizeAsync.js.map +1 -1
  38. package/build/src/customize/generate.js +7 -4
  39. package/build/src/customize/generate.js.map +1 -1
  40. package/build/src/customize/index.js.map +1 -1
  41. package/build/src/customize/templates.js +4 -6
  42. package/build/src/customize/templates.js.map +1 -1
  43. package/build/src/customize/typescript.js.map +1 -1
  44. package/build/src/events/index.js +19 -15
  45. package/build/src/events/index.js.map +1 -1
  46. package/build/src/events/stream.js +94 -24
  47. package/build/src/events/stream.js.map +1 -1
  48. package/build/src/expoUpdatesExports.js +50 -7
  49. package/build/src/expoUpdatesExports.js.map +1 -1
  50. package/build/src/export/createMetadataJson.js +2 -1
  51. package/build/src/export/createMetadataJson.js.map +1 -1
  52. package/build/src/export/embed/exportEmbedAsync.js +58 -24
  53. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  54. package/build/src/export/embed/exportServer.js +1 -1
  55. package/build/src/export/embed/exportServer.js.map +1 -1
  56. package/build/src/export/embed/index.js +1 -1
  57. package/build/src/export/embed/index.js.map +1 -1
  58. package/build/src/export/embed/resolveOptions.js +7 -6
  59. package/build/src/export/embed/resolveOptions.js.map +1 -1
  60. package/build/src/export/embed/xcodeCompilerLogger.js +7 -7
  61. package/build/src/export/embed/xcodeCompilerLogger.js.map +1 -1
  62. package/build/src/export/exportApp.js +40 -30
  63. package/build/src/export/exportApp.js.map +1 -1
  64. package/build/src/export/exportAssets.js +5 -5
  65. package/build/src/export/exportAssets.js.map +1 -1
  66. package/build/src/export/exportAsync.js.map +1 -1
  67. package/build/src/export/exportDomComponents.js +16 -9
  68. package/build/src/export/exportDomComponents.js.map +1 -1
  69. package/build/src/export/exportHermes.js +23 -13
  70. package/build/src/export/exportHermes.js.map +1 -1
  71. package/build/src/export/exportStaticAsync.js +30 -21
  72. package/build/src/export/exportStaticAsync.js.map +1 -1
  73. package/build/src/export/favicon.js +26 -34
  74. package/build/src/export/favicon.js.map +1 -1
  75. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  76. package/build/src/export/getResolvedLocales.js.map +1 -1
  77. package/build/src/export/html.js +3 -3
  78. package/build/src/export/html.js.map +1 -1
  79. package/build/src/export/index.js +2 -0
  80. package/build/src/export/index.js.map +1 -1
  81. package/build/src/export/metroAssetLocalPath.js +4 -4
  82. package/build/src/export/metroAssetLocalPath.js.map +1 -1
  83. package/build/src/export/persistMetroAssets.js +6 -6
  84. package/build/src/export/persistMetroAssets.js.map +1 -1
  85. package/build/src/export/publicFolder.js +16 -4
  86. package/build/src/export/publicFolder.js.map +1 -1
  87. package/build/src/export/resolveOptions.js +12 -13
  88. package/build/src/export/resolveOptions.js.map +1 -1
  89. package/build/src/export/saveAssets.js +3 -3
  90. package/build/src/export/saveAssets.js.map +1 -1
  91. package/build/src/export/static.js +6 -0
  92. package/build/src/export/static.js.map +1 -0
  93. package/build/src/export/web/exportWebAsync.js.map +1 -1
  94. package/build/src/export/web/index.js.map +1 -1
  95. package/build/src/export/writeContents.js.map +1 -1
  96. package/build/src/install/checkPackages.js +1 -28
  97. package/build/src/install/checkPackages.js.map +1 -1
  98. package/build/src/install/fixPackages.js.map +1 -1
  99. package/build/src/install/index.js.map +1 -1
  100. package/build/src/install/installAsync.js +3 -3
  101. package/build/src/install/installAsync.js.map +1 -1
  102. package/build/src/install/installExpoPackage.js.map +1 -1
  103. package/build/src/install/resolveOptions.js.map +1 -1
  104. package/build/src/install/utils/autoAddConfigPlugins.js +3 -3
  105. package/build/src/install/utils/autoAddConfigPlugins.js.map +1 -1
  106. package/build/src/install/utils/checkPackagesCompatibility.js +32 -16
  107. package/build/src/install/utils/checkPackagesCompatibility.js.map +1 -1
  108. package/build/src/lint/ESlintPrerequisite.js.map +1 -1
  109. package/build/src/log.js +32 -14
  110. package/build/src/log.js.map +1 -1
  111. package/build/src/login/index.js +25 -5
  112. package/build/src/login/index.js.map +1 -1
  113. package/build/src/logout/index.js.map +1 -1
  114. package/build/src/prebuild/clearNativeFolder.js +49 -14
  115. package/build/src/prebuild/clearNativeFolder.js.map +1 -1
  116. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  117. package/build/src/prebuild/copyTemplateFiles.js +3 -3
  118. package/build/src/prebuild/copyTemplateFiles.js.map +1 -1
  119. package/build/src/prebuild/ensureConfigAsync.js.map +1 -1
  120. package/build/src/prebuild/index.js +3 -2
  121. package/build/src/prebuild/index.js.map +1 -1
  122. package/build/src/prebuild/prebuildAsync.js +31 -6
  123. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  124. package/build/src/prebuild/renameTemplateAppName.js +8 -5
  125. package/build/src/prebuild/renameTemplateAppName.js.map +1 -1
  126. package/build/src/prebuild/resolveOptions.js +7 -7
  127. package/build/src/prebuild/resolveOptions.js.map +1 -1
  128. package/build/src/prebuild/resolveTemplate.js +10 -5
  129. package/build/src/prebuild/resolveTemplate.js.map +1 -1
  130. package/build/src/prebuild/updateFromTemplate.js +3 -3
  131. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  132. package/build/src/prebuild/updatePackageJson.js +7 -7
  133. package/build/src/prebuild/updatePackageJson.js.map +1 -1
  134. package/build/src/prebuild/validateTemplatePlatforms.js.map +1 -1
  135. package/build/src/register/index.js.map +1 -1
  136. package/build/src/run/android/index.js.map +1 -1
  137. package/build/src/run/android/resolveGradlePropsAsync.js +3 -4
  138. package/build/src/run/android/resolveGradlePropsAsync.js.map +1 -1
  139. package/build/src/run/android/resolveInstallApkName.js +48 -1
  140. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  141. package/build/src/run/android/resolveLaunchProps.js +4 -1
  142. package/build/src/run/android/resolveLaunchProps.js.map +1 -1
  143. package/build/src/run/android/resolveOptions.js.map +1 -1
  144. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  145. package/build/src/run/ensureNativeProject.js.map +1 -1
  146. package/build/src/run/hints.js +4 -4
  147. package/build/src/run/hints.js.map +1 -1
  148. package/build/src/run/index.js.map +1 -1
  149. package/build/src/run/ios/XcodeBuild.js +163 -23
  150. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  151. package/build/src/run/ios/appleDevice/AppleDevice.js +6 -5
  152. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  153. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  154. package/build/src/run/ios/appleDevice/client/AFCClient.js +10 -16
  155. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  156. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  157. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  158. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +2 -1
  159. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  160. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  161. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  162. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  163. package/build/src/run/ios/appleDevice/client/ServiceClient.js +3 -3
  164. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  165. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  166. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +3 -3
  167. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  168. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +16 -13
  169. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  170. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js +6 -6
  171. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  172. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +5 -5
  173. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  174. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +7 -7
  175. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  176. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js +5 -5
  177. package/build/src/run/ios/appleDevice/protocol/UsbmuxProtocol.js.map +1 -1
  178. package/build/src/run/ios/codeSigning/Security.js +8 -8
  179. package/build/src/run/ios/codeSigning/Security.js.map +1 -1
  180. package/build/src/run/ios/codeSigning/configureCodeSigning.js +5 -3
  181. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  182. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +7 -5
  183. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  184. package/build/src/run/ios/codeSigning/settings.js +3 -3
  185. package/build/src/run/ios/codeSigning/settings.js.map +1 -1
  186. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +4 -4
  187. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  188. package/build/src/run/ios/index.js +8 -1
  189. package/build/src/run/ios/index.js.map +1 -1
  190. package/build/src/run/ios/launchApp.js +3 -3
  191. package/build/src/run/ios/launchApp.js.map +1 -1
  192. package/build/src/run/ios/options/appleDestinations.js.map +1 -1
  193. package/build/src/run/ios/options/promptDevice.js +3 -3
  194. package/build/src/run/ios/options/promptDevice.js.map +1 -1
  195. package/build/src/run/ios/options/resolveDevice.js +8 -3
  196. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  197. package/build/src/run/ios/options/resolveNativeScheme.js +4 -4
  198. package/build/src/run/ios/options/resolveNativeScheme.js.map +1 -1
  199. package/build/src/run/ios/options/resolveOptions.js +9 -4
  200. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  201. package/build/src/run/ios/options/resolveXcodeProject.js.map +1 -1
  202. package/build/src/run/ios/runIosAsync.js +39 -0
  203. package/build/src/run/ios/runIosAsync.js.map +1 -1
  204. package/build/src/run/ios/validateExternalBinary.js.map +1 -1
  205. package/build/src/run/startBundler.js +4 -0
  206. package/build/src/run/startBundler.js.map +1 -1
  207. package/build/src/serve/index.js +4 -1
  208. package/build/src/serve/index.js.map +1 -1
  209. package/build/src/serve/serveAsync.js +23 -11
  210. package/build/src/serve/serveAsync.js.map +1 -1
  211. package/build/src/serve/static.js +69 -0
  212. package/build/src/serve/static.js.map +1 -0
  213. package/build/src/start/checkDependenciesOnStart.js +131 -0
  214. package/build/src/start/checkDependenciesOnStart.js.map +1 -0
  215. package/build/src/start/detectDevClient.js +3 -3
  216. package/build/src/start/detectDevClient.js.map +1 -1
  217. package/build/src/start/doctor/Prerequisite.js +4 -4
  218. package/build/src/start/doctor/Prerequisite.js.map +1 -1
  219. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js +53 -91
  220. package/build/src/start/doctor/apple/SimulatorAppPrerequisite.js.map +1 -1
  221. package/build/src/start/doctor/apple/XcodePrerequisite.js +3 -3
  222. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  223. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +3 -3
  224. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  225. package/build/src/start/doctor/dependencies/getMissingPackages.js +5 -5
  226. package/build/src/start/doctor/dependencies/getMissingPackages.js.map +1 -1
  227. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -5
  228. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  229. package/build/src/start/doctor/dependencies/reactNativeTv.js +149 -0
  230. package/build/src/start/doctor/dependencies/reactNativeTv.js.map +1 -0
  231. package/build/src/start/doctor/dependencies/resolvePackages.js +4 -4
  232. package/build/src/start/doctor/dependencies/resolvePackages.js.map +1 -1
  233. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +33 -8
  234. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  235. package/build/src/start/doctor/ngrok/ExternalModule.js +14 -9
  236. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  237. package/build/src/start/doctor/ngrok/NgrokResolver.js +3 -3
  238. package/build/src/start/doctor/ngrok/NgrokResolver.js.map +1 -1
  239. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  240. package/build/src/start/doctor/typescript/updateTSConfig.js +3 -3
  241. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  242. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js +5 -12
  243. package/build/src/start/doctor/web/WebSupportProjectPrerequisite.js.map +1 -1
  244. package/build/src/start/index.js +2 -0
  245. package/build/src/start/index.js.map +1 -1
  246. package/build/src/start/interface/KeyPressHandler.js.map +1 -1
  247. package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +1 -1
  248. package/build/src/start/interface/commandsTable.js +6 -6
  249. package/build/src/start/interface/commandsTable.js.map +1 -1
  250. package/build/src/start/interface/createDevToolsMenuItems.js.map +1 -1
  251. package/build/src/start/interface/interactiveActions.js +49 -6
  252. package/build/src/start/interface/interactiveActions.js.map +1 -1
  253. package/build/src/start/interface/startInterface.js +13 -4
  254. package/build/src/start/interface/startInterface.js.map +1 -1
  255. package/build/src/start/platforms/AppIdResolver.js +4 -0
  256. package/build/src/start/platforms/AppIdResolver.js.map +1 -1
  257. package/build/src/start/platforms/DeviceManager.js.map +1 -1
  258. package/build/src/start/platforms/ExpoGoInstaller.js +13 -4
  259. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  260. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  261. package/build/src/start/platforms/android/AndroidAppIdResolver.js.map +1 -1
  262. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  263. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  264. package/build/src/start/platforms/android/activateWindow.js.map +1 -1
  265. package/build/src/start/platforms/android/adb.js +36 -34
  266. package/build/src/start/platforms/android/adb.js.map +1 -1
  267. package/build/src/start/platforms/android/adbReverse.js +4 -4
  268. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  269. package/build/src/start/platforms/android/emulator.js +5 -5
  270. package/build/src/start/platforms/android/emulator.js.map +1 -1
  271. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  272. package/build/src/start/platforms/android/gradle.js +5 -5
  273. package/build/src/start/platforms/android/gradle.js.map +1 -1
  274. package/build/src/start/platforms/android/promptAndroidDevice.js +3 -3
  275. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  276. package/build/src/start/platforms/ios/AppleAppIdResolver.js.map +1 -1
  277. package/build/src/start/platforms/ios/AppleDeviceManager.js +20 -6
  278. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  279. package/build/src/start/platforms/ios/ApplePlatformManager.js +11 -0
  280. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  281. package/build/src/start/platforms/ios/devicectl.js +7 -7
  282. package/build/src/start/platforms/ios/devicectl.js.map +1 -1
  283. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js +26 -11
  284. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  285. package/build/src/start/platforms/ios/getBestSimulator.js +5 -5
  286. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  287. package/build/src/start/platforms/ios/promptAppleDevice.js +5 -4
  288. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  289. package/build/src/start/platforms/ios/simctl.js +25 -19
  290. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  291. package/build/src/start/platforms/ios/simctlLogging.js +3 -3
  292. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  293. package/build/src/start/platforms/ios/xcrun.js +3 -3
  294. package/build/src/start/platforms/ios/xcrun.js.map +1 -1
  295. package/build/src/start/project/devices.js +6 -6
  296. package/build/src/start/project/devices.js.map +1 -1
  297. package/build/src/start/project/dotExpo.js +4 -3
  298. package/build/src/start/project/dotExpo.js.map +1 -1
  299. package/build/src/start/resolveOptions.js +7 -7
  300. package/build/src/start/resolveOptions.js.map +1 -1
  301. package/build/src/start/server/AsyncNgrok.js +1 -1
  302. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  303. package/build/src/start/server/AsyncWsTunnel.js +120 -35
  304. package/build/src/start/server/AsyncWsTunnel.js.map +1 -1
  305. package/build/src/start/server/Bonjour.js +8 -3
  306. package/build/src/start/server/Bonjour.js.map +1 -1
  307. package/build/src/start/server/BundlerDevServer.js +23 -9
  308. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  309. package/build/src/start/server/DevServerManager.js.map +1 -1
  310. package/build/src/start/server/DevToolsPlugin.js +63 -3
  311. package/build/src/start/server/DevToolsPlugin.js.map +1 -1
  312. package/build/src/start/server/DevToolsPlugin.schema.js +8 -3
  313. package/build/src/start/server/DevToolsPlugin.schema.js.map +1 -1
  314. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +58 -23
  315. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +1 -1
  316. package/build/src/start/server/DevToolsPluginCliExtensionResults.js +29 -0
  317. package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +1 -1
  318. package/build/src/start/server/DevToolsPluginManager.js +20 -6
  319. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  320. package/build/src/start/server/DevToolsPluginServerHelpers.js +83 -0
  321. package/build/src/start/server/DevToolsPluginServerHelpers.js.map +1 -0
  322. package/build/src/start/server/DevelopmentSession.js +41 -24
  323. package/build/src/start/server/DevelopmentSession.js.map +1 -1
  324. package/build/src/start/server/MCP.js +10 -3
  325. package/build/src/start/server/MCP.js.map +1 -1
  326. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js +15 -5
  327. package/build/src/start/server/MCPDevToolsPluginCLIExtensions.js.map +1 -1
  328. package/build/src/start/server/UrlCreator.js +14 -1
  329. package/build/src/start/server/UrlCreator.js.map +1 -1
  330. package/build/src/start/server/createMCPDevToolsExtensionSchema.js +18 -4
  331. package/build/src/start/server/createMCPDevToolsExtensionSchema.js.map +1 -1
  332. package/build/src/start/server/getStaticRenderFunctions.js +13 -24
  333. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  334. package/build/src/start/server/metro/MetroBundlerDevServer.js +245 -114
  335. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  336. package/build/src/start/server/metro/MetroTerminalReporter.js +67 -16
  337. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  338. package/build/src/start/server/metro/TerminalReporter.js +22 -4
  339. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  340. package/build/src/start/server/metro/createExpoAutolinkingResolver.js +25 -12
  341. package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
  342. package/build/src/start/server/metro/createExpoFallbackResolver.js +39 -0
  343. package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
  344. package/build/src/start/server/metro/createFileMap-fork.js +196 -0
  345. package/build/src/start/server/metro/createFileMap-fork.js.map +1 -0
  346. package/build/src/start/server/metro/createServerComponentsMiddleware.js +22 -22
  347. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  348. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  349. package/build/src/start/server/metro/createTypescriptResolver.js +410 -0
  350. package/build/src/start/server/metro/createTypescriptResolver.js.map +1 -0
  351. package/build/src/start/server/metro/debugging/MessageHandler.js.map +1 -1
  352. package/build/src/start/server/metro/debugging/attachAtlas.js +3 -3
  353. package/build/src/start/server/metro/debugging/attachAtlas.js.map +1 -1
  354. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +6 -5
  355. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  356. package/build/src/start/server/metro/debugging/createHandlersFactory.js.map +1 -1
  357. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js +20 -4
  358. package/build/src/start/server/metro/debugging/messageHandlers/NetworkResponse.js.map +1 -1
  359. package/build/src/start/server/metro/debugging/pageIsSupported.js.map +1 -1
  360. package/build/src/start/server/metro/dev-server/compression.js.map +1 -1
  361. package/build/src/start/server/metro/dev-server/createMessageSocket.js +13 -2
  362. package/build/src/start/server/metro/dev-server/createMessageSocket.js.map +1 -1
  363. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +9 -2
  364. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
  365. package/build/src/start/server/metro/dev-server/utils/socketMessages.js +3 -3
  366. package/build/src/start/server/metro/dev-server/utils/socketMessages.js.map +1 -1
  367. package/build/src/start/server/metro/errors/FailedToResolveNativeOnlyModuleError.js.map +1 -1
  368. package/build/src/start/server/metro/externals.js +4 -4
  369. package/build/src/start/server/metro/externals.js.map +1 -1
  370. package/build/src/start/server/metro/fetchRouterManifest.js +3 -3
  371. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  372. package/build/src/start/server/metro/getCssModulesFromBundler.js +3 -3
  373. package/build/src/start/server/metro/getCssModulesFromBundler.js.map +1 -1
  374. package/build/src/start/server/metro/instantiateMetro.js +141 -57
  375. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  376. package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
  377. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js +4 -4
  378. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
  379. package/build/src/start/server/metro/log-box/formatProjectFilePath.js +3 -3
  380. package/build/src/start/server/metro/log-box/formatProjectFilePath.js.map +1 -1
  381. package/build/src/start/server/metro/metroErrorInterface.js +16 -13
  382. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  383. package/build/src/start/server/metro/metroErrors.js +3 -3
  384. package/build/src/start/server/metro/metroErrors.js.map +1 -1
  385. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js +48 -16
  386. package/build/src/start/server/metro/metroWatchTypeScriptFiles.js.map +1 -1
  387. package/build/src/start/server/metro/resolveLoader.js +3 -3
  388. package/build/src/start/server/metro/resolveLoader.js.map +1 -1
  389. package/build/src/start/server/metro/router.js +23 -14
  390. package/build/src/start/server/metro/router.js.map +1 -1
  391. package/build/src/start/server/metro/runServer-fork.js +13 -10
  392. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  393. package/build/src/start/server/metro/serializeHtml.js +29 -13
  394. package/build/src/start/server/metro/serializeHtml.js.map +1 -1
  395. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js +36 -34
  396. package/build/src/start/server/metro/waitForMetroToObserveTypeScriptFile.js.map +1 -1
  397. package/build/src/start/server/metro/withMetroErrorReportingResolver.js +53 -30
  398. package/build/src/start/server/metro/withMetroErrorReportingResolver.js.map +1 -1
  399. package/build/src/start/server/metro/withMetroMultiPlatform.js +187 -126
  400. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  401. package/build/src/start/server/metro/withMetroResolvers.js +4 -4
  402. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  403. package/build/src/start/server/middleware/ContextModuleSourceMapsMiddleware.js.map +1 -1
  404. package/build/src/start/server/middleware/CorsMiddleware.js +3 -3
  405. package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
  406. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  407. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js +60 -9
  408. package/build/src/start/server/middleware/DevToolsPluginMiddleware.js.map +1 -1
  409. package/build/src/start/server/middleware/DomComponentsMiddleware.js +30 -17
  410. package/build/src/start/server/middleware/DomComponentsMiddleware.js.map +1 -1
  411. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +6 -4
  412. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  413. package/build/src/start/server/middleware/ExpoMiddleware.js +3 -3
  414. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  415. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  416. package/build/src/start/server/middleware/HistoryFallbackMiddleware.js.map +1 -1
  417. package/build/src/start/server/middleware/InterstitialPageMiddleware.js +13 -8
  418. package/build/src/start/server/middleware/InterstitialPageMiddleware.js.map +1 -1
  419. package/build/src/start/server/middleware/ManifestMiddleware.js +19 -47
  420. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  421. package/build/src/start/server/middleware/OpenMiddleware.js +150 -0
  422. package/build/src/start/server/middleware/OpenMiddleware.js.map +1 -0
  423. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +13 -4
  424. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  425. package/build/src/start/server/middleware/ServeStaticMiddleware.js +2 -9
  426. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  427. package/build/src/start/server/middleware/domPolyfills.js +60 -0
  428. package/build/src/start/server/middleware/domPolyfills.js.map +1 -0
  429. package/build/src/start/server/middleware/inspector/JsInspector.js +6 -31
  430. package/build/src/start/server/middleware/inspector/JsInspector.js.map +1 -1
  431. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js +14 -24
  432. package/build/src/start/server/middleware/inspector/createJsInspectorMiddleware.js.map +1 -1
  433. package/build/src/start/server/middleware/inspector/middlwareMutations.js +3 -3
  434. package/build/src/start/server/middleware/inspector/middlwareMutations.js.map +1 -1
  435. package/build/src/start/server/middleware/metroOptions.js +15 -14
  436. package/build/src/start/server/middleware/metroOptions.js.map +1 -1
  437. package/build/src/start/server/middleware/mutations.js +3 -3
  438. package/build/src/start/server/middleware/mutations.js.map +1 -1
  439. package/build/src/start/server/middleware/openHandlers.js +157 -0
  440. package/build/src/start/server/middleware/openHandlers.js.map +1 -0
  441. package/build/src/start/server/middleware/resolveAssets.js +4 -4
  442. package/build/src/start/server/middleware/resolveAssets.js.map +1 -1
  443. package/build/src/start/server/middleware/resolvePlatform.js +9 -7
  444. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  445. package/build/src/start/server/middleware/resolveRuntimeVersionWithExpoUpdatesAsync.js.map +1 -1
  446. package/build/src/start/server/openPlatforms.js.map +1 -1
  447. package/build/src/start/server/platformBundlers.js +3 -1
  448. package/build/src/start/server/platformBundlers.js.map +1 -1
  449. package/build/src/start/server/serverLogLikeMetro.js +13 -36
  450. package/build/src/start/server/serverLogLikeMetro.js.map +1 -1
  451. package/build/src/start/server/type-generation/expo-env.js +3 -3
  452. package/build/src/start/server/type-generation/expo-env.js.map +1 -1
  453. package/build/src/start/server/type-generation/routes.js +14 -55
  454. package/build/src/start/server/type-generation/routes.js.map +1 -1
  455. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  456. package/build/src/start/server/type-generation/tsconfig.js +5 -5
  457. package/build/src/start/server/type-generation/tsconfig.js.map +1 -1
  458. package/build/src/start/server/webTemplate.js +12 -10
  459. package/build/src/start/server/webTemplate.js.map +1 -1
  460. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +3 -3
  461. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  462. package/build/src/start/server/webpack/formatWebpackMessages.js.map +1 -1
  463. package/build/src/start/server/webpack/resolveFromProject.js +4 -4
  464. package/build/src/start/server/webpack/resolveFromProject.js.map +1 -1
  465. package/build/src/start/server/webpack/tls.js +3 -3
  466. package/build/src/start/server/webpack/tls.js.map +1 -1
  467. package/build/src/start/startAsync.js +21 -11
  468. package/build/src/start/startAsync.js.map +1 -1
  469. package/build/src/types.d.ts +2 -0
  470. package/build/src/utils/FileNotifier.js +1 -1
  471. package/build/src/utils/FileNotifier.js.map +1 -1
  472. package/build/src/utils/args.js +5 -5
  473. package/build/src/utils/args.js.map +1 -1
  474. package/build/src/utils/array.js +8 -8
  475. package/build/src/utils/array.js.map +1 -1
  476. package/build/src/utils/build-cache-providers/helpers.js +4 -4
  477. package/build/src/utils/build-cache-providers/helpers.js.map +1 -1
  478. package/build/src/utils/build-cache-providers/index.js +5 -5
  479. package/build/src/utils/build-cache-providers/index.js.map +1 -1
  480. package/build/src/utils/cocoapods.js +5 -5
  481. package/build/src/utils/cocoapods.js.map +1 -1
  482. package/build/src/utils/codesigning.js +12 -6
  483. package/build/src/utils/codesigning.js.map +1 -1
  484. package/build/src/utils/composeMetroIgnorePatterns.js +69 -0
  485. package/build/src/utils/composeMetroIgnorePatterns.js.map +1 -0
  486. package/build/src/utils/createTempPath.js +3 -3
  487. package/build/src/utils/createTempPath.js.map +1 -1
  488. package/build/src/utils/delay.js +4 -4
  489. package/build/src/utils/delay.js.map +1 -1
  490. package/build/src/utils/dir.js +21 -11
  491. package/build/src/utils/dir.js.map +1 -1
  492. package/build/src/utils/downloadAppAsync.js.map +1 -1
  493. package/build/src/utils/downloadExpoGoAsync.js +4 -4
  494. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  495. package/build/src/utils/editor.js +4 -4
  496. package/build/src/utils/editor.js.map +1 -1
  497. package/build/src/utils/env.js +39 -13
  498. package/build/src/utils/env.js.map +1 -1
  499. package/build/src/utils/errors.js +6 -6
  500. package/build/src/utils/errors.js.map +1 -1
  501. package/build/src/utils/exit.js +15 -19
  502. package/build/src/utils/exit.js.map +1 -1
  503. package/build/src/utils/expoUpdatesCli.js +5 -5
  504. package/build/src/utils/expoUpdatesCli.js.map +1 -1
  505. package/build/src/utils/fetch.js +4 -4
  506. package/build/src/utils/fetch.js.map +1 -1
  507. package/build/src/utils/filePath.js +3 -29
  508. package/build/src/utils/filePath.js.map +1 -1
  509. package/build/src/utils/findUp.js +3 -3
  510. package/build/src/utils/findUp.js.map +1 -1
  511. package/build/src/utils/fn.js +3 -3
  512. package/build/src/utils/fn.js.map +1 -1
  513. package/build/src/utils/freeport.js +3 -3
  514. package/build/src/utils/freeport.js.map +1 -1
  515. package/build/src/utils/getOrPromptApplicationId.js +3 -5
  516. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  517. package/build/src/utils/getRunningProcess.js +5 -5
  518. package/build/src/utils/getRunningProcess.js.map +1 -1
  519. package/build/src/utils/git.js +3 -3
  520. package/build/src/utils/git.js.map +1 -1
  521. package/build/src/utils/glob.js +3 -3
  522. package/build/src/utils/glob.js.map +1 -1
  523. package/build/src/utils/ip.js +4 -4
  524. package/build/src/utils/ip.js.map +1 -1
  525. package/build/src/utils/link.js +3 -3
  526. package/build/src/utils/link.js.map +1 -1
  527. package/build/src/utils/mergeGitIgnorePaths.js +10 -10
  528. package/build/src/utils/mergeGitIgnorePaths.js.map +1 -1
  529. package/build/src/utils/modifyConfigAsync.js +3 -3
  530. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  531. package/build/src/utils/net.js +23 -4
  532. package/build/src/utils/net.js.map +1 -1
  533. package/build/src/utils/nodeEnv.js +6 -6
  534. package/build/src/utils/nodeEnv.js.map +1 -1
  535. package/build/src/utils/npm.js +10 -9
  536. package/build/src/utils/npm.js.map +1 -1
  537. package/build/src/utils/obj.js +4 -4
  538. package/build/src/utils/obj.js.map +1 -1
  539. package/build/src/utils/open.js +240 -11
  540. package/build/src/utils/open.js.map +1 -1
  541. package/build/src/utils/ora.js +4 -4
  542. package/build/src/utils/ora.js.map +1 -1
  543. package/build/src/utils/plist.js +5 -4
  544. package/build/src/utils/plist.js.map +1 -1
  545. package/build/src/utils/port.js +12 -5
  546. package/build/src/utils/port.js.map +1 -1
  547. package/build/src/utils/progress.js +4 -4
  548. package/build/src/utils/progress.js.map +1 -1
  549. package/build/src/utils/prompts.js +11 -11
  550. package/build/src/utils/prompts.js.map +1 -1
  551. package/build/src/utils/qr.js +5 -4
  552. package/build/src/utils/qr.js.map +1 -1
  553. package/build/src/utils/resolveArgs.js +10 -9
  554. package/build/src/utils/resolveArgs.js.map +1 -1
  555. package/build/src/utils/scheme.js +4 -4
  556. package/build/src/utils/scheme.js.map +1 -1
  557. package/build/src/utils/strings.js.map +1 -1
  558. package/build/src/utils/tar.js +8 -7
  559. package/build/src/utils/tar.js.map +1 -1
  560. package/build/src/utils/telemetry/Telemetry.js +5 -0
  561. package/build/src/utils/telemetry/Telemetry.js.map +1 -1
  562. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  563. package/build/src/utils/telemetry/clients/FetchClient.js.map +1 -1
  564. package/build/src/utils/telemetry/clients/flushFetchDetached.js +5 -1
  565. package/build/src/utils/telemetry/clients/flushFetchDetached.js.map +1 -1
  566. package/build/src/utils/telemetry/index.js +4 -4
  567. package/build/src/utils/telemetry/index.js.map +1 -1
  568. package/build/src/utils/telemetry/utils/agent.js +42 -0
  569. package/build/src/utils/telemetry/utils/agent.js.map +1 -0
  570. package/build/src/utils/telemetry/utils/constants.js +3 -3
  571. package/build/src/utils/telemetry/utils/constants.js.map +1 -1
  572. package/build/src/utils/telemetry/utils/context.js +3 -2
  573. package/build/src/utils/telemetry/utils/context.js.map +1 -1
  574. package/build/src/utils/url.js +5 -17
  575. package/build/src/utils/url.js.map +1 -1
  576. package/build/src/utils/validateApplicationId.js +12 -12
  577. package/build/src/utils/validateApplicationId.js.map +1 -1
  578. package/build/src/utils/variadic.js +4 -4
  579. package/build/src/utils/variadic.js.map +1 -1
  580. package/build/src/whoami/index.js.map +1 -1
  581. package/changes.json +16 -36
  582. package/main.js +3 -0
  583. package/package.json +86 -90
  584. package/static/loading-page/index.html +45 -3
  585. package/static/template/+html.tsx +14 -5
  586. package/add-module.js +0 -8
  587. package/build/src/start/server/middleware/inspector/CdpClient.js +0 -81
  588. package/build/src/start/server/middleware/inspector/CdpClient.js.map +0 -1
  589. package/build/src/utils/resolveGlobal.js +0 -195
  590. package/build/src/utils/resolveGlobal.js.map +0 -1
  591. package/build/src/utils/resolveWatchFolders.js +0 -67
  592. package/build/src/utils/resolveWatchFolders.js.map +0 -1
  593. package/build/src/utils/tsconfig/evaluateTsConfig.js +0 -87
  594. package/build/src/utils/tsconfig/evaluateTsConfig.js.map +0 -1
  595. package/build/src/utils/tsconfig/loadTsConfigPaths.js +0 -84
  596. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +0 -1
  597. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js +0 -94
  598. package/build/src/utils/tsconfig/matchTsConfigPathAlias.js.map +0 -1
  599. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js +0 -62
  600. package/build/src/utils/tsconfig/resolveWithTsConfigPaths.js.map +0 -1
@@ -5,51 +5,44 @@ 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
- ARRAY_GROUP_REGEX: function() {
12
+ get ARRAY_GROUP_REGEX () {
13
13
  return ARRAY_GROUP_REGEX;
14
14
  },
15
- CAPTURE_DYNAMIC_PARAMS: function() {
15
+ get CAPTURE_DYNAMIC_PARAMS () {
16
16
  return CAPTURE_DYNAMIC_PARAMS;
17
17
  },
18
- CAPTURE_GROUP_REGEX: function() {
18
+ get CAPTURE_GROUP_REGEX () {
19
19
  return CAPTURE_GROUP_REGEX;
20
20
  },
21
- CATCH_ALL: function() {
21
+ get CATCH_ALL () {
22
22
  return CATCH_ALL;
23
23
  },
24
- SLUG: function() {
24
+ get SLUG () {
25
25
  return SLUG;
26
26
  },
27
- TYPED_ROUTES_EXCLUSION_REGEX: function() {
27
+ get TYPED_ROUTES_EXCLUSION_REGEX () {
28
28
  return TYPED_ROUTES_EXCLUSION_REGEX;
29
29
  },
30
- extrapolateGroupRoutes: function() {
30
+ get extrapolateGroupRoutes () {
31
31
  return extrapolateGroupRoutes;
32
32
  },
33
- getTemplateString: function() {
33
+ get getTemplateString () {
34
34
  return getTemplateString;
35
35
  },
36
- getTypedRoutesUtils: function() {
36
+ get getTypedRoutesUtils () {
37
37
  return getTypedRoutesUtils;
38
38
  },
39
- setToUnionType: function() {
39
+ get setToUnionType () {
40
40
  return setToUnionType;
41
41
  },
42
- setupTypedRoutes: function() {
42
+ get setupTypedRoutes () {
43
43
  return setupTypedRoutes;
44
44
  }
45
45
  });
46
- function _promises() {
47
- const data = /*#__PURE__*/ _interop_require_default(require("fs/promises"));
48
- _promises = function() {
49
- return data;
50
- };
51
- return data;
52
- }
53
46
  function _path() {
54
47
  const data = /*#__PURE__*/ _interop_require_default(require("path"));
55
48
  _path = function() {
@@ -71,6 +64,7 @@ const ARRAY_GROUP_REGEX = /\(\s*\w[\w\s]*?,.*?\)/g;
71
64
  const CAPTURE_GROUP_REGEX = /[\\(,]\s*(\w[\w\s]*?)\s*(?=[,\\)])/g;
72
65
  const TYPED_ROUTES_EXCLUSION_REGEX = /(_layout|[^/]*?\+[^/]*?)\.[tj]sx?$/;
73
66
  async function setupTypedRoutes(options) {
67
+ // TODO(@kitten): Remove indirection here. Unclear why it's needed
74
68
  const typedRoutesModule = require.resolve('@expo/router-server/build/typed-routes');
75
69
  return typedRoutes(typedRoutesModule, options);
76
70
  }
@@ -109,24 +103,6 @@ async function typedRoutes(typedRoutesModulePath, { server, metro, typesDirector
109
103
  typedRoutesModule.regenerateDeclarations(typesDirectory);
110
104
  }
111
105
  }
112
- function debounce(fn, delay) {
113
- let timeoutId;
114
- return function(...args) {
115
- clearTimeout(timeoutId);
116
- // NOTE(@hassankhan): The cast to `NodeJS.Timeout` below is a hack to work around an issue
117
- // with TypeScript where React Native's types are being imported before Node types
118
- timeoutId = setTimeout(()=>fn.apply(this, args), delay);
119
- };
120
- }
121
- /**
122
- * Generate a router.d.ts file that contains all of the routes in the project.
123
- * Should be debounced as its very common for developers to make changes to multiple files at once (eg Save All)
124
- */ const regenerateRouterDotTS = debounce(async (typesDir, staticRoutes, dynamicRoutes, dynamicRouteTemplates)=>{
125
- await _promises().default.mkdir(typesDir, {
126
- recursive: true
127
- });
128
- await _promises().default.writeFile(_path().default.resolve(typesDir, './router.d.ts'), getTemplateString(staticRoutes, dynamicRoutes, dynamicRouteTemplates));
129
- }, 100);
130
106
  function getTemplateString(staticRoutes, dynamicRoutes, dynamicRouteTemplates) {
131
107
  return routerDotTSTemplate({
132
108
  staticRoutes: setToUnionType(staticRoutes),
@@ -230,21 +206,6 @@ const setToUnionType = (set)=>{
230
206
  ...set
231
207
  ].map((s)=>`\`${s}\``).join(' | ') : 'never';
232
208
  };
233
- /**
234
- * Recursively walk a directory and call the callback with the file path.
235
- */ async function walk(directory, callback) {
236
- const files = await _promises().default.readdir(directory);
237
- for (const file of files){
238
- const p = _path().default.join(directory, file);
239
- if ((await _promises().default.stat(p)).isDirectory()) {
240
- await walk(p, callback);
241
- } else {
242
- // Normalise the paths so they are easier to convert to URLs
243
- const normalizedPath = p.replaceAll(_path().default.sep, '/');
244
- callback(normalizedPath);
245
- }
246
- }
247
- }
248
209
  function extrapolateGroupRoutes(route, routes = new Set()) {
249
210
  // Create a version with no groups. We will then need to cleanup double and/or trailing slashes
250
211
  routes.add(route.replaceAll(ARRAY_GROUP_REGEX, '').replaceAll(/\/+/g, '/').replace(/\/$/, ''));
@@ -263,9 +224,7 @@ function extrapolateGroupRoutes(route, routes = new Set()) {
263
224
  * NOTE: This code refers to a specific version of `expo-router` and is therefore unsafe to
264
225
  * mix with arbitrary versions.
265
226
  * TODO: Version this code with `expo-router` or version expo-router with `@expo/cli`.
266
- */ const routerDotTSTemplate = (0, _template.unsafeTemplate)`/* eslint-disable @typescript-eslint/no-unused-vars */
267
- /* eslint-disable import/export */
268
- /* eslint-disable @typescript-eslint/ban-types */
227
+ */ const routerDotTSTemplate = (0, _template.unsafeTemplate)`/* eslint-disable */
269
228
  declare module "expo-router" {
270
229
  import type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';
271
230
  import type { Router as OriginalRouter } from 'expo-router/build/types';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/type-generation/routes.ts"],"sourcesContent":["import type Server from '@expo/metro/metro/Server';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { directoryExistsAsync } from '../../../utils/dir';\nimport { unsafeTemplate } from '../../../utils/template';\nimport { ServerLike } from '../BundlerDevServer';\nimport { metroWatchTypeScriptFiles } from '../metro/metroWatchTypeScriptFiles';\n\n// /test/[...param1]/[param2]/[param3] - captures [\"param1\", \"param2\", \"param3\"]\nexport const CAPTURE_DYNAMIC_PARAMS = /\\[(?:\\.{3})?(\\w*?)[\\]$]/g;\n// /[...param1]/ - Match [...param1]\nexport const CATCH_ALL = /\\[\\.\\.\\..+?\\]/g;\n// /[param1] - Match [param1]\nexport const SLUG = /\\[.+?\\]/g;\n// /(group1,group2,group3)/test - match (group1,group2,group3)\nexport const ARRAY_GROUP_REGEX = /\\(\\s*\\w[\\w\\s]*?,.*?\\)/g;\n// /(group1,group2,group3)/test - captures [\"group1\", \"group2\", \"group3\"]\nexport const CAPTURE_GROUP_REGEX = /[\\\\(,]\\s*(\\w[\\w\\s]*?)\\s*(?=[,\\\\)])/g;\n/**\n * Match:\n * - _layout files, +html, +not-found, string+api, etc\n * - Routes can still use `+`, but it cannot be in the last segment.\n */\nexport const TYPED_ROUTES_EXCLUSION_REGEX = /(_layout|[^/]*?\\+[^/]*?)\\.[tj]sx?$/;\n\nexport interface SetupTypedRoutesOptions {\n server?: ServerLike;\n metro?: Server | null;\n typesDirectory: string;\n projectRoot: string;\n /** Absolute expo router routes directory. */\n routerDirectory: string;\n plugin?: Record<string, any>;\n}\n\nexport async function setupTypedRoutes(options: SetupTypedRoutesOptions) {\n const typedRoutesModule = require.resolve('@expo/router-server/build/typed-routes');\n return typedRoutes(typedRoutesModule, options);\n}\n\nasync function typedRoutes(\n typedRoutesModulePath: any,\n { server, metro, typesDirectory, projectRoot, routerDirectory, plugin }: SetupTypedRoutesOptions\n) {\n /*\n * Expo Router uses EXPO_ROUTER_APP_ROOT in multiple places to determine the root of the project.\n * In apps compiled by Metro, this code is compiled away. But Typed Routes run in NodeJS with no compilation\n * so we need to explicitly set it.\n */\n process.env.EXPO_ROUTER_APP_ROOT = routerDirectory;\n\n const typedRoutesModule = require(typedRoutesModulePath);\n\n /*\n * Typed Routes can be run with out Metro or a Server, e.g. `expo customize tsconfig.json`\n */\n if (metro && server) {\n // Setup out watcher first\n metroWatchTypeScriptFiles({\n projectRoot,\n server,\n metro,\n eventTypes: ['add', 'delete', 'change'],\n callback: typedRoutesModule.getWatchHandler(typesDirectory),\n });\n }\n\n /*\n * In SDK 52, the `regenerateDeclarations` was changed to accept plugin options.\n * This function has an optional parameter that we cannot override, so we need to ensure the user\n * is using a compatible version of `expo-router`. Otherwise, we will fallback to the old method.\n *\n * TODO(@marklawlor): In SDK53+ we should remove this check and always use the new method.\n */\n if ('version' in typedRoutesModule && typedRoutesModule.version >= 52) {\n typedRoutesModule.regenerateDeclarations(typesDirectory, plugin);\n } else {\n typedRoutesModule.regenerateDeclarations(typesDirectory);\n }\n}\n\nfunction debounce<U, T extends (this: U, ...args: any[]) => void>(fn: T, delay: number): T {\n let timeoutId: NodeJS.Timeout | undefined;\n return function (this: U, ...args: any[]) {\n clearTimeout(timeoutId);\n // NOTE(@hassankhan): The cast to `NodeJS.Timeout` below is a hack to work around an issue\n // with TypeScript where React Native's types are being imported before Node types\n timeoutId = setTimeout(() => fn.apply(this, args), delay) as unknown as NodeJS.Timeout;\n } as T;\n}\n\n/**\n * Generate a router.d.ts file that contains all of the routes in the project.\n * Should be debounced as its very common for developers to make changes to multiple files at once (eg Save All)\n */\nconst regenerateRouterDotTS = debounce(\n async (\n typesDir: string,\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n ) => {\n await fs.mkdir(typesDir, { recursive: true });\n await fs.writeFile(\n path.resolve(typesDir, './router.d.ts'),\n getTemplateString(staticRoutes, dynamicRoutes, dynamicRouteTemplates)\n );\n },\n 100\n);\n\n/*\n * This is exported for testing purposes\n */\nexport function getTemplateString(\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n) {\n return routerDotTSTemplate({\n staticRoutes: setToUnionType(staticRoutes),\n dynamicRoutes: setToUnionType(dynamicRoutes),\n dynamicRouteParams: setToUnionType(dynamicRouteTemplates),\n });\n}\n\n/**\n * Utility functions for typed routes\n *\n * These are extracted for easier testing\n */\nexport function getTypedRoutesUtils(appRoot: string, filePathSeperator = path.sep) {\n /*\n * staticRoutes are a map where the key if the route without groups and the value\n * is another set of all group versions of the route. e.g,\n * Map([\n * [\"/\", [\"/(app)/(notes)\", \"/(app)/(profile)\"]\n * ])\n */\n const staticRoutes = new Map<string, Set<string>>([['/', new Set('/')]]);\n /*\n * dynamicRoutes are the same as staticRoutes (key if the resolved route,\n * and the value is a set of possible routes). e.g:\n *\n * /[...fruits] -> /${CatchAllRoutePart<T>}\n * /color/[color] -> /color/${SingleRoutePart<T>}\n *\n * The keys of this map are also important, as they can be used as \"static\" types\n * <Link href={{ pathname: \"/[...fruits]\",params: { fruits: [\"apple\"] } }} />\n */\n const dynamicRoutes = new Map<string, Set<string>>();\n\n function normalizedFilePath(filePath: string) {\n return filePath.replaceAll(filePathSeperator, '/');\n }\n\n const normalizedAppRoot = normalizedFilePath(appRoot);\n\n const filePathToRoute = (filePath: string) => {\n return normalizedFilePath(filePath)\n .replace(normalizedAppRoot, '')\n .replace(/index\\.[jt]sx?/, '')\n .replace(/\\.[jt]sx?$/, '');\n };\n\n const isRouteFile = (filePath: string) => {\n if (filePath.match(TYPED_ROUTES_EXCLUSION_REGEX)) {\n return false;\n }\n\n // Route files must be nested with in the appRoot\n const relative = path.relative(appRoot, filePath);\n return relative && !relative.startsWith('..') && !path.isAbsolute(relative);\n };\n\n const addFilePath = (filePath: string): boolean => {\n if (!isRouteFile(filePath)) {\n return false;\n }\n\n const route = filePathToRoute(filePath);\n\n // We have already processed this file\n if (staticRoutes.has(route) || dynamicRoutes.has(route)) {\n return false;\n }\n\n const dynamicParams = new Set(\n [...route.matchAll(CAPTURE_DYNAMIC_PARAMS)].map((match) => match[1])\n );\n const isDynamic = dynamicParams.size > 0;\n\n const addRoute = (originalRoute: string, route: string) => {\n if (isDynamic) {\n let set = dynamicRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n dynamicRoutes.set(originalRoute, set);\n }\n\n set.add(\n route\n .replaceAll(CATCH_ALL, '${CatchAllRoutePart<T>}')\n .replaceAll(SLUG, '${SingleRoutePart<T>}')\n );\n } else {\n let set = staticRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n staticRoutes.set(originalRoute, set);\n }\n\n set.add(route);\n }\n };\n\n if (!route.match(ARRAY_GROUP_REGEX)) {\n addRoute(route, route);\n }\n\n // Does this route have a group? eg /(group)\n if (route.includes('/(')) {\n const routeWithoutGroups = route.replace(/\\/\\(.+?\\)/g, '');\n addRoute(route, routeWithoutGroups);\n\n // If there are multiple groups, we need to expand them\n // eg /(test1,test2)/page => /test1/page & /test2/page\n for (const routeWithSingleGroup of extrapolateGroupRoutes(route)) {\n addRoute(route, routeWithSingleGroup);\n }\n }\n\n return true;\n };\n\n return {\n staticRoutes,\n dynamicRoutes,\n filePathToRoute,\n addFilePath,\n isRouteFile,\n };\n}\n\nexport const setToUnionType = <T>(set: Set<T>) => {\n return set.size > 0 ? [...set].map((s) => `\\`${s}\\``).join(' | ') : 'never';\n};\n\n/**\n * Recursively walk a directory and call the callback with the file path.\n */\nasync function walk(directory: string, callback: (filePath: string) => void) {\n const files = await fs.readdir(directory);\n for (const file of files) {\n const p = path.join(directory, file);\n if ((await fs.stat(p)).isDirectory()) {\n await walk(p, callback);\n } else {\n // Normalise the paths so they are easier to convert to URLs\n const normalizedPath = p.replaceAll(path.sep, '/');\n callback(normalizedPath);\n }\n }\n}\n\n/**\n * Given a route, return all possible routes that could be generated from it.\n */\nexport function extrapolateGroupRoutes(\n route: string,\n routes: Set<string> = new Set()\n): Set<string> {\n // Create a version with no groups. We will then need to cleanup double and/or trailing slashes\n routes.add(route.replaceAll(ARRAY_GROUP_REGEX, '').replaceAll(/\\/+/g, '/').replace(/\\/$/, ''));\n\n const match = route.match(ARRAY_GROUP_REGEX);\n\n if (!match) {\n routes.add(route);\n return routes;\n }\n\n const groupsMatch = match[0];\n\n for (const group of groupsMatch.matchAll(CAPTURE_GROUP_REGEX)) {\n extrapolateGroupRoutes(route.replace(groupsMatch, `(${group[1].trim()})`), routes);\n }\n\n return routes;\n}\n\n/**\n * NOTE: This code refers to a specific version of `expo-router` and is therefore unsafe to\n * mix with arbitrary versions.\n * TODO: Version this code with `expo-router` or version expo-router with `@expo/cli`.\n */\nconst routerDotTSTemplate = unsafeTemplate`/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable import/export */\n/* eslint-disable @typescript-eslint/ban-types */\ndeclare module \"expo-router\" {\n import type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\n import type { Router as OriginalRouter } from 'expo-router/build/types';\n export * from 'expo-router/build';\n\n // prettier-ignore\n type StaticRoutes = ${'staticRoutes'};\n // prettier-ignore\n type DynamicRoutes<T extends string> = ${'dynamicRoutes'};\n // prettier-ignore\n type DynamicRouteTemplate = ${'dynamicRouteParams'};\n\n type RelativePathString = \\`./\\${string}\\` | \\`../\\${string}\\` | '..';\n type AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\n type ExternalPathString = \\`\\${string}:\\${string}\\`;\n\n type ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\n export type AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n /****************\n * Route Utils *\n ****************/\n\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`;\n type UnknownInputParams = Record<string, string | number | (string | number)[]>;\n type UnknownOutputParams = Record<string, string | string[]>;\n\n /**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\n type SingleRoutePart<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`(\\${string})\\`\n ? never\n : S extends \\`[\\${string}]\\`\n ? never\n : S;\n\n /**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\n type CatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`\\${string}(\\${string})\\${string}\\`\n ? never\n : S extends \\`\\${string}[\\${string}]\\${string}\\`\n ? never\n : S;\n\n // type OptionalCatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n /**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\n type IsParameter<Part> = Part extends \\`[\\${infer ParamName}]\\` ? ParamName : never;\n\n /**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\n type ParameterNames<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n /**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\n type RouteSegments<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n /**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\n type InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? (string | number)[] : string | number;\n } & UnknownInputParams;\n\n type OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? string[] : string;\n } & UnknownOutputParams;\n\n /**\n * Returns the search parameters for a route.\n */\n export type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n /**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\n export type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends \\`\\${infer P}\\${SearchOrHash}\\`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n /*********\n * Href *\n *********/\n\n export type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\n export type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname'],\n > = P extends DynamicRouteTemplate\n ? { pathname: P; params: InputRouteParams<P> }\n : P extends Route<P>\n ? { pathname: Route<P> | DynamicRouteTemplate; params?: never | InputRouteParams<never> }\n : never;\n\n /***********************\n * Expo Router Exports *\n ***********************/\n\n export type Router = Omit<OriginalRouter, 'push' | 'replace' | 'setParams'> & {\n /** Navigate to the provided href. */\n push: <T>(href: Href<T>) => void;\n /** Navigate to route without appending to the history. */\n replace: <T>(href: Href<T>) => void;\n /** Update the current route query params. */\n setParams: <T = ''>(params?: T extends '' ? Record<string, string> : InputRouteParams<T>) => void;\n };\n\n /** The imperative router. */\n export const router: Router;\n\n /************\n * <Link /> *\n ************/\n export interface LinkProps<T> extends OriginalLinkProps {\n href: Href<T>;\n }\n\n export interface LinkComponent {\n <T>(props: React.PropsWithChildren<LinkProps<T>>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: <T>(href: Href<T>) => string;\n }\n\n /**\n * Component to render link to another route using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.href Absolute path to route (e.g. \\`/feeds/hot\\`).\n * @param props.replace Should replace the current route without adding to the history.\n * @param props.asChild Forward props to child component. Useful for custom buttons.\n * @param props.children Child elements to render the content.\n * @param props.className On web, this sets the HTML \\`class\\` directly. On native, this can be used with CSS interop tools like Nativewind.\n */\n export const Link: LinkComponent;\n\n /** Redirects to the href as soon as the component is mounted. */\n export const Redirect: <T>(\n props: React.PropsWithChildren<{ href: Href<T> }>\n ) => JSX.Element;\n\n /************\n * Hooks *\n ************/\n export function useRouter(): Router;\n\n export function useLocalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n /** @deprecated renamed to \\`useGlobalSearchParams\\` */\n export function useSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useGlobalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useSegments<\n T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString,\n >(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;\n}\n`;\n"],"names":["ARRAY_GROUP_REGEX","CAPTURE_DYNAMIC_PARAMS","CAPTURE_GROUP_REGEX","CATCH_ALL","SLUG","TYPED_ROUTES_EXCLUSION_REGEX","extrapolateGroupRoutes","getTemplateString","getTypedRoutesUtils","setToUnionType","setupTypedRoutes","options","typedRoutesModule","require","resolve","typedRoutes","typedRoutesModulePath","server","metro","typesDirectory","projectRoot","routerDirectory","plugin","process","env","EXPO_ROUTER_APP_ROOT","metroWatchTypeScriptFiles","eventTypes","callback","getWatchHandler","version","regenerateDeclarations","debounce","fn","delay","timeoutId","args","clearTimeout","setTimeout","apply","regenerateRouterDotTS","typesDir","staticRoutes","dynamicRoutes","dynamicRouteTemplates","fs","mkdir","recursive","writeFile","path","routerDotTSTemplate","dynamicRouteParams","appRoot","filePathSeperator","sep","Map","Set","normalizedFilePath","filePath","replaceAll","normalizedAppRoot","filePathToRoute","replace","isRouteFile","match","relative","startsWith","isAbsolute","addFilePath","route","has","dynamicParams","matchAll","map","isDynamic","size","addRoute","originalRoute","set","get","add","includes","routeWithoutGroups","routeWithSingleGroup","s","join","walk","directory","files","readdir","file","p","stat","isDirectory","normalizedPath","routes","groupsMatch","group","trim","unsafeTemplate"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/type-generation/routes.ts"],"sourcesContent":["import type Server from '@expo/metro/metro/Server';\nimport path from 'path';\n\nimport { unsafeTemplate } from '../../../utils/template';\nimport type { ServerLike } from '../BundlerDevServer';\nimport { metroWatchTypeScriptFiles } from '../metro/metroWatchTypeScriptFiles';\n\n// /test/[...param1]/[param2]/[param3] - captures [\"param1\", \"param2\", \"param3\"]\nexport const CAPTURE_DYNAMIC_PARAMS = /\\[(?:\\.{3})?(\\w*?)[\\]$]/g;\n// /[...param1]/ - Match [...param1]\nexport const CATCH_ALL = /\\[\\.\\.\\..+?\\]/g;\n// /[param1] - Match [param1]\nexport const SLUG = /\\[.+?\\]/g;\n// /(group1,group2,group3)/test - match (group1,group2,group3)\nexport const ARRAY_GROUP_REGEX = /\\(\\s*\\w[\\w\\s]*?,.*?\\)/g;\n// /(group1,group2,group3)/test - captures [\"group1\", \"group2\", \"group3\"]\nexport const CAPTURE_GROUP_REGEX = /[\\\\(,]\\s*(\\w[\\w\\s]*?)\\s*(?=[,\\\\)])/g;\n/**\n * Match:\n * - _layout files, +html, +not-found, string+api, etc\n * - Routes can still use `+`, but it cannot be in the last segment.\n */\nexport const TYPED_ROUTES_EXCLUSION_REGEX = /(_layout|[^/]*?\\+[^/]*?)\\.[tj]sx?$/;\n\nexport interface SetupTypedRoutesOptions {\n server?: ServerLike;\n metro?: Server | null;\n typesDirectory: string;\n projectRoot: string;\n /** Absolute expo router routes directory. */\n routerDirectory: string;\n plugin?: Record<string, any>;\n}\n\nexport async function setupTypedRoutes(options: SetupTypedRoutesOptions) {\n // TODO(@kitten): Remove indirection here. Unclear why it's needed\n const typedRoutesModule = require.resolve('@expo/router-server/build/typed-routes');\n return typedRoutes(typedRoutesModule, options);\n}\n\nasync function typedRoutes(\n typedRoutesModulePath: string,\n { server, metro, typesDirectory, projectRoot, routerDirectory, plugin }: SetupTypedRoutesOptions\n) {\n /*\n * Expo Router uses EXPO_ROUTER_APP_ROOT in multiple places to determine the root of the project.\n * In apps compiled by Metro, this code is compiled away. But Typed Routes run in NodeJS with no compilation\n * so we need to explicitly set it.\n */\n process.env.EXPO_ROUTER_APP_ROOT = routerDirectory;\n\n const typedRoutesModule: typeof import('@expo/router-server/build/typed-routes') = require(\n typedRoutesModulePath\n );\n\n /*\n * Typed Routes can be run with out Metro or a Server, e.g. `expo customize tsconfig.json`\n */\n if (metro && server) {\n // Setup out watcher first\n metroWatchTypeScriptFiles({\n projectRoot,\n server,\n metro,\n eventTypes: ['add', 'delete', 'change'],\n callback: typedRoutesModule.getWatchHandler(typesDirectory),\n });\n }\n\n /*\n * In SDK 52, the `regenerateDeclarations` was changed to accept plugin options.\n * This function has an optional parameter that we cannot override, so we need to ensure the user\n * is using a compatible version of `expo-router`. Otherwise, we will fallback to the old method.\n *\n * TODO(@marklawlor): In SDK53+ we should remove this check and always use the new method.\n */\n if ('version' in typedRoutesModule && typedRoutesModule.version >= 52) {\n typedRoutesModule.regenerateDeclarations(typesDirectory, plugin);\n } else {\n typedRoutesModule.regenerateDeclarations(typesDirectory);\n }\n}\n\n/*\n * This is exported for testing purposes\n */\nexport function getTemplateString(\n staticRoutes: Set<string>,\n dynamicRoutes: Set<string>,\n dynamicRouteTemplates: Set<string>\n) {\n return routerDotTSTemplate({\n staticRoutes: setToUnionType(staticRoutes),\n dynamicRoutes: setToUnionType(dynamicRoutes),\n dynamicRouteParams: setToUnionType(dynamicRouteTemplates),\n });\n}\n\n/**\n * Utility functions for typed routes\n *\n * These are extracted for easier testing\n */\nexport function getTypedRoutesUtils(appRoot: string, filePathSeperator = path.sep) {\n /*\n * staticRoutes are a map where the key if the route without groups and the value\n * is another set of all group versions of the route. e.g,\n * Map([\n * [\"/\", [\"/(app)/(notes)\", \"/(app)/(profile)\"]\n * ])\n */\n const staticRoutes = new Map<string, Set<string>>([['/', new Set('/')]]);\n /*\n * dynamicRoutes are the same as staticRoutes (key if the resolved route,\n * and the value is a set of possible routes). e.g:\n *\n * /[...fruits] -> /${CatchAllRoutePart<T>}\n * /color/[color] -> /color/${SingleRoutePart<T>}\n *\n * The keys of this map are also important, as they can be used as \"static\" types\n * <Link href={{ pathname: \"/[...fruits]\",params: { fruits: [\"apple\"] } }} />\n */\n const dynamicRoutes = new Map<string, Set<string>>();\n\n function normalizedFilePath(filePath: string) {\n return filePath.replaceAll(filePathSeperator, '/');\n }\n\n const normalizedAppRoot = normalizedFilePath(appRoot);\n\n const filePathToRoute = (filePath: string) => {\n return normalizedFilePath(filePath)\n .replace(normalizedAppRoot, '')\n .replace(/index\\.[jt]sx?/, '')\n .replace(/\\.[jt]sx?$/, '');\n };\n\n const isRouteFile = (filePath: string) => {\n if (filePath.match(TYPED_ROUTES_EXCLUSION_REGEX)) {\n return false;\n }\n\n // Route files must be nested with in the appRoot\n const relative = path.relative(appRoot, filePath);\n return relative && !relative.startsWith('..') && !path.isAbsolute(relative);\n };\n\n const addFilePath = (filePath: string): boolean => {\n if (!isRouteFile(filePath)) {\n return false;\n }\n\n const route = filePathToRoute(filePath);\n\n // We have already processed this file\n if (staticRoutes.has(route) || dynamicRoutes.has(route)) {\n return false;\n }\n\n const dynamicParams = new Set(\n [...route.matchAll(CAPTURE_DYNAMIC_PARAMS)].map((match) => match[1])\n );\n const isDynamic = dynamicParams.size > 0;\n\n const addRoute = (originalRoute: string, route: string) => {\n if (isDynamic) {\n let set = dynamicRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n dynamicRoutes.set(originalRoute, set);\n }\n\n set.add(\n route\n .replaceAll(CATCH_ALL, '${CatchAllRoutePart<T>}')\n .replaceAll(SLUG, '${SingleRoutePart<T>}')\n );\n } else {\n let set = staticRoutes.get(originalRoute);\n\n if (!set) {\n set = new Set();\n staticRoutes.set(originalRoute, set);\n }\n\n set.add(route);\n }\n };\n\n if (!route.match(ARRAY_GROUP_REGEX)) {\n addRoute(route, route);\n }\n\n // Does this route have a group? eg /(group)\n if (route.includes('/(')) {\n const routeWithoutGroups = route.replace(/\\/\\(.+?\\)/g, '');\n addRoute(route, routeWithoutGroups);\n\n // If there are multiple groups, we need to expand them\n // eg /(test1,test2)/page => /test1/page & /test2/page\n for (const routeWithSingleGroup of extrapolateGroupRoutes(route)) {\n addRoute(route, routeWithSingleGroup);\n }\n }\n\n return true;\n };\n\n return {\n staticRoutes,\n dynamicRoutes,\n filePathToRoute,\n addFilePath,\n isRouteFile,\n };\n}\n\nexport const setToUnionType = <T>(set: Set<T>) => {\n return set.size > 0 ? [...set].map((s) => `\\`${s}\\``).join(' | ') : 'never';\n};\n\n/**\n * Given a route, return all possible routes that could be generated from it.\n */\nexport function extrapolateGroupRoutes(\n route: string,\n routes: Set<string> = new Set()\n): Set<string> {\n // Create a version with no groups. We will then need to cleanup double and/or trailing slashes\n routes.add(route.replaceAll(ARRAY_GROUP_REGEX, '').replaceAll(/\\/+/g, '/').replace(/\\/$/, ''));\n\n const match = route.match(ARRAY_GROUP_REGEX);\n\n if (!match) {\n routes.add(route);\n return routes;\n }\n\n const groupsMatch = match[0];\n\n for (const group of groupsMatch.matchAll(CAPTURE_GROUP_REGEX)) {\n extrapolateGroupRoutes(route.replace(groupsMatch, `(${group[1]!.trim()})`), routes);\n }\n\n return routes;\n}\n\n/**\n * NOTE: This code refers to a specific version of `expo-router` and is therefore unsafe to\n * mix with arbitrary versions.\n * TODO: Version this code with `expo-router` or version expo-router with `@expo/cli`.\n */\nconst routerDotTSTemplate = unsafeTemplate`/* eslint-disable */\ndeclare module \"expo-router\" {\n import type { LinkProps as OriginalLinkProps } from 'expo-router/build/link/Link';\n import type { Router as OriginalRouter } from 'expo-router/build/types';\n export * from 'expo-router/build';\n\n // prettier-ignore\n type StaticRoutes = ${'staticRoutes'};\n // prettier-ignore\n type DynamicRoutes<T extends string> = ${'dynamicRoutes'};\n // prettier-ignore\n type DynamicRouteTemplate = ${'dynamicRouteParams'};\n\n type RelativePathString = \\`./\\${string}\\` | \\`../\\${string}\\` | '..';\n type AbsoluteRoute = DynamicRouteTemplate | StaticRoutes;\n type ExternalPathString = \\`\\${string}:\\${string}\\`;\n\n type ExpoRouterRoutes = DynamicRouteTemplate | StaticRoutes | RelativePathString;\n export type AllRoutes = ExpoRouterRoutes | ExternalPathString;\n\n /****************\n * Route Utils *\n ****************/\n\n type SearchOrHash = \\`?\\${string}\\` | \\`#\\${string}\\`;\n type UnknownInputParams = Record<string, string | number | (string | number)[]>;\n type UnknownOutputParams = Record<string, string | string[]>;\n\n /**\n * Return only the RoutePart of a string. If the string has multiple parts return never\n *\n * string | type\n * ---------|------\n * 123 | 123\n * /123/abc | never\n * 123?abc | never\n * ./123 | never\n * /123 | never\n * 123/../ | never\n */\n type SingleRoutePart<S extends string> = S extends \\`\\${string}/\\${string}\\`\n ? never\n : S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`(\\${string})\\`\n ? never\n : S extends \\`[\\${string}]\\`\n ? never\n : S;\n\n /**\n * Return only the CatchAll router part. If the string has search parameters or a hash return never\n */\n type CatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\`\n ? never\n : S extends ''\n ? never\n : S extends \\`\\${string}(\\${string})\\${string}\\`\n ? never\n : S extends \\`\\${string}[\\${string}]\\${string}\\`\n ? never\n : S;\n\n // type OptionalCatchAllRoutePart<S extends string> = S extends \\`\\${string}\\${SearchOrHash}\\` ? never : S\n\n /**\n * Return the name of a route parameter\n * '[test]' -> 'test'\n * 'test' -> never\n * '[...test]' -> '...test'\n */\n type IsParameter<Part> = Part extends \\`[\\${infer ParamName}]\\` ? ParamName : never;\n\n /**\n * Return a union of all parameter names. If there are no names return never\n *\n * /[test] -> 'test'\n * /[abc]/[...def] -> 'abc'|'...def'\n */\n type ParameterNames<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? IsParameter<PartA> | ParameterNames<PartB>\n : IsParameter<Path>;\n\n /**\n * Returns all segements of a route.\n *\n * /(group)/123/abc/[id]/[...rest] -> ['(group)', '123', 'abc', '[id]', '[...rest]'\n */\n type RouteSegments<Path> = Path extends \\`\\${infer PartA}/\\${infer PartB}\\`\n ? PartA extends '' | '.'\n ? [...RouteSegments<PartB>]\n : [PartA, ...RouteSegments<PartB>]\n : Path extends ''\n ? []\n : [Path];\n\n /**\n * Returns a Record of the routes parameters as strings and CatchAll parameters\n *\n * There are two versions, input and output, as you can input 'string | number' but\n * the output will always be 'string'\n *\n * /[id]/[...rest] -> { id: string, rest: string[] }\n * /no-params -> {}\n */\n type InputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? (string | number)[] : string | number;\n } & UnknownInputParams;\n\n type OutputRouteParams<Path> = {\n [Key in ParameterNames<Path> as Key extends \\`...\\${infer Name}\\`\n ? Name\n : Key]: Key extends \\`...\\${string}\\` ? string[] : string;\n } & UnknownOutputParams;\n\n /**\n * Returns the search parameters for a route.\n */\n export type SearchParams<T extends AllRoutes> = T extends DynamicRouteTemplate\n ? OutputRouteParams<T>\n : T extends StaticRoutes\n ? never\n : UnknownOutputParams;\n\n /**\n * Route is mostly used as part of Href to ensure that a valid route is provided\n *\n * Given a dynamic route, this will return never. This is helpful for conditional logic\n *\n * /test -> /test, /test2, etc\n * /test/[abc] -> never\n * /test/resolve -> /test, /test2, etc\n *\n * Note that if we provide a value for [abc] then the route is allowed\n *\n * This is named Route to prevent confusion, as users they will often see it in tooltips\n */\n export type Route<T> = T extends string\n ? T extends DynamicRouteTemplate\n ? never\n :\n | StaticRoutes\n | RelativePathString\n | ExternalPathString\n | (T extends \\`\\${infer P}\\${SearchOrHash}\\`\n ? P extends DynamicRoutes<infer _>\n ? T\n : never\n : T extends DynamicRoutes<infer _>\n ? T\n : never)\n : never;\n\n /*********\n * Href *\n *********/\n\n export type Href<T> = T extends Record<'pathname', string> ? HrefObject<T> : Route<T>;\n\n export type HrefObject<\n R extends Record<'pathname', string>,\n P = R['pathname'],\n > = P extends DynamicRouteTemplate\n ? { pathname: P; params: InputRouteParams<P> }\n : P extends Route<P>\n ? { pathname: Route<P> | DynamicRouteTemplate; params?: never | InputRouteParams<never> }\n : never;\n\n /***********************\n * Expo Router Exports *\n ***********************/\n\n export type Router = Omit<OriginalRouter, 'push' | 'replace' | 'setParams'> & {\n /** Navigate to the provided href. */\n push: <T>(href: Href<T>) => void;\n /** Navigate to route without appending to the history. */\n replace: <T>(href: Href<T>) => void;\n /** Update the current route query params. */\n setParams: <T = ''>(params?: T extends '' ? Record<string, string> : InputRouteParams<T>) => void;\n };\n\n /** The imperative router. */\n export const router: Router;\n\n /************\n * <Link /> *\n ************/\n export interface LinkProps<T> extends OriginalLinkProps {\n href: Href<T>;\n }\n\n export interface LinkComponent {\n <T>(props: React.PropsWithChildren<LinkProps<T>>): JSX.Element;\n /** Helper method to resolve an Href object into a string. */\n resolveHref: <T>(href: Href<T>) => string;\n }\n\n /**\n * Component to render link to another route using a path.\n * Uses an anchor tag on the web.\n *\n * @param props.href Absolute path to route (e.g. \\`/feeds/hot\\`).\n * @param props.replace Should replace the current route without adding to the history.\n * @param props.asChild Forward props to child component. Useful for custom buttons.\n * @param props.children Child elements to render the content.\n * @param props.className On web, this sets the HTML \\`class\\` directly. On native, this can be used with CSS interop tools like Nativewind.\n */\n export const Link: LinkComponent;\n\n /** Redirects to the href as soon as the component is mounted. */\n export const Redirect: <T>(\n props: React.PropsWithChildren<{ href: Href<T> }>\n ) => JSX.Element;\n\n /************\n * Hooks *\n ************/\n export function useRouter(): Router;\n\n export function useLocalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n /** @deprecated renamed to \\`useGlobalSearchParams\\` */\n export function useSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useGlobalSearchParams<\n T extends AllRoutes | UnknownOutputParams = UnknownOutputParams,\n >(): T extends AllRoutes ? SearchParams<T> : T;\n\n export function useSegments<\n T extends AbsoluteRoute | RouteSegments<AbsoluteRoute> | RelativePathString,\n >(): T extends AbsoluteRoute ? RouteSegments<T> : T extends string ? string[] : T;\n}\n`;\n"],"names":["ARRAY_GROUP_REGEX","CAPTURE_DYNAMIC_PARAMS","CAPTURE_GROUP_REGEX","CATCH_ALL","SLUG","TYPED_ROUTES_EXCLUSION_REGEX","extrapolateGroupRoutes","getTemplateString","getTypedRoutesUtils","setToUnionType","setupTypedRoutes","options","typedRoutesModule","require","resolve","typedRoutes","typedRoutesModulePath","server","metro","typesDirectory","projectRoot","routerDirectory","plugin","process","env","EXPO_ROUTER_APP_ROOT","metroWatchTypeScriptFiles","eventTypes","callback","getWatchHandler","version","regenerateDeclarations","staticRoutes","dynamicRoutes","dynamicRouteTemplates","routerDotTSTemplate","dynamicRouteParams","appRoot","filePathSeperator","path","sep","Map","Set","normalizedFilePath","filePath","replaceAll","normalizedAppRoot","filePathToRoute","replace","isRouteFile","match","relative","startsWith","isAbsolute","addFilePath","route","has","dynamicParams","matchAll","map","isDynamic","size","addRoute","originalRoute","set","get","add","includes","routeWithoutGroups","routeWithSingleGroup","s","join","routes","groupsMatch","group","trim","unsafeTemplate"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/type-generation/startTypescriptTypeGeneration.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport type Server from '@expo/metro/metro/Server';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { removeExpoEnvDTS, writeExpoEnvDTS } from './expo-env';\nimport { setupTypedRoutes } from './routes';\nimport { forceRemovalTSConfig, forceUpdateTSConfig } from './tsconfig';\nimport { upsertGitIgnoreContents } from '../../../utils/mergeGitIgnorePaths';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { ServerLike } from '../BundlerDevServer';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\n\nexport interface TypeScriptTypeGenerationOptions {\n server?: ServerLike;\n metro?: Server | null;\n projectRoot: string;\n}\n\nconst debug = require('debug')('expo:typed-routes') as typeof console.log;\n\n/** Setup all requisite features for statically typed routes in Expo Router v2 / SDK +49. */\nexport async function startTypescriptTypeGenerationAsync({\n metro,\n projectRoot,\n server,\n}: TypeScriptTypeGenerationOptions) {\n const { exp } = getConfig(projectRoot);\n\n // If typed routes are disabled, remove any files that were added.\n if (!exp.experiments?.typedRoutes) {\n debug('Removing typed routes side-effects (experiments.typedRoutes: false)');\n await Promise.all([forceRemovalTSConfig(projectRoot), removeExpoEnvDTS(projectRoot)]);\n } else {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const typesDirectory = path.resolve(dotExpoDir, './types');\n debug(\n 'Ensuring typed routes side-effects are setup (experiments.typedRoutes: true, typesDirectory: %s)',\n typesDirectory\n );\n\n // Ensure the types directory exists.\n await fs.mkdir(typesDirectory, { recursive: true });\n\n await Promise.all([\n upsertGitIgnoreContents(path.join(projectRoot, '.gitignore'), 'expo-env.d.ts'),\n writeExpoEnvDTS(projectRoot),\n forceUpdateTSConfig(projectRoot),\n setupTypedRoutes({\n metro,\n server,\n typesDirectory,\n projectRoot,\n routerDirectory: path.join(\n projectRoot,\n getRouterDirectoryModuleIdWithManifest(projectRoot, exp)\n ),\n plugin: exp?.extra?.router,\n }),\n ]);\n }\n}\n"],"names":["startTypescriptTypeGenerationAsync","debug","require","metro","projectRoot","server","exp","getConfig","experiments","typedRoutes","Promise","all","forceRemovalTSConfig","removeExpoEnvDTS","dotExpoDir","ensureDotExpoProjectDirectoryInitialized","typesDirectory","path","resolve","fs","mkdir","recursive","upsertGitIgnoreContents","join","writeExpoEnvDTS","forceUpdateTSConfig","setupTypedRoutes","routerDirectory","getRouterDirectoryModuleIdWithManifest","plugin","extra","router"],"mappings":";;;;+BAsBsBA;;;eAAAA;;;;yBAtBI;;;;;;;gEAEX;;;;;;;gEACE;;;;;;yBAEiC;wBACjB;0BACyB;qCAClB;yBACiB;wBAEF;;;;;;AAQvD,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,eAAeF,mCAAmC,EACvDG,KAAK,EACLC,WAAW,EACXC,MAAM,EAC0B;QAI3BC;IAHL,MAAM,EAAEA,GAAG,EAAE,GAAGC,IAAAA,mBAAS,EAACH;IAE1B,kEAAkE;IAClE,IAAI,GAACE,mBAAAA,IAAIE,WAAW,qBAAfF,iBAAiBG,WAAW,GAAE;QACjCR,MAAM;QACN,MAAMS,QAAQC,GAAG,CAAC;YAACC,IAAAA,8BAAoB,EAACR;YAAcS,IAAAA,yBAAgB,EAACT;SAAa;IACtF,OAAO;YAwBOE;QAvBZ,MAAMQ,aAAaC,IAAAA,iDAAwC,EAACX;QAC5D,MAAMY,iBAAiBC,eAAI,CAACC,OAAO,CAACJ,YAAY;QAChDb,MACE,oGACAe;QAGF,qCAAqC;QACrC,MAAMG,mBAAE,CAACC,KAAK,CAACJ,gBAAgB;YAAEK,WAAW;QAAK;QAEjD,MAAMX,QAAQC,GAAG,CAAC;YAChBW,IAAAA,4CAAuB,EAACL,eAAI,CAACM,IAAI,CAACnB,aAAa,eAAe;YAC9DoB,IAAAA,wBAAe,EAACpB;YAChBqB,IAAAA,6BAAmB,EAACrB;YACpBsB,IAAAA,wBAAgB,EAAC;gBACfvB;gBACAE;gBACAW;gBACAZ;gBACAuB,iBAAiBV,eAAI,CAACM,IAAI,CACxBnB,aACAwB,IAAAA,8CAAsC,EAACxB,aAAaE;gBAEtDuB,MAAM,EAAEvB,wBAAAA,aAAAA,IAAKwB,KAAK,qBAAVxB,WAAYyB,MAAM;YAC5B;SACD;IACH;AACF"}
1
+ {"version":3,"sources":["../../../../../src/start/server/type-generation/startTypescriptTypeGeneration.ts"],"sourcesContent":["import { getConfig } from '@expo/config';\nimport type Server from '@expo/metro/metro/Server';\nimport fs from 'fs/promises';\nimport path from 'path';\n\nimport { removeExpoEnvDTS, writeExpoEnvDTS } from './expo-env';\nimport { setupTypedRoutes } from './routes';\nimport { forceRemovalTSConfig, forceUpdateTSConfig } from './tsconfig';\nimport { upsertGitIgnoreContents } from '../../../utils/mergeGitIgnorePaths';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport type { ServerLike } from '../BundlerDevServer';\nimport { getRouterDirectoryModuleIdWithManifest } from '../metro/router';\n\nexport interface TypeScriptTypeGenerationOptions {\n server?: ServerLike;\n metro?: Server | null;\n projectRoot: string;\n}\n\nconst debug = require('debug')('expo:typed-routes') as typeof console.log;\n\n/** Setup all requisite features for statically typed routes in Expo Router v2 / SDK +49. */\nexport async function startTypescriptTypeGenerationAsync({\n metro,\n projectRoot,\n server,\n}: TypeScriptTypeGenerationOptions) {\n const { exp } = getConfig(projectRoot);\n\n // If typed routes are disabled, remove any files that were added.\n if (!exp.experiments?.typedRoutes) {\n debug('Removing typed routes side-effects (experiments.typedRoutes: false)');\n await Promise.all([forceRemovalTSConfig(projectRoot), removeExpoEnvDTS(projectRoot)]);\n } else {\n const dotExpoDir = ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const typesDirectory = path.resolve(dotExpoDir, './types');\n debug(\n 'Ensuring typed routes side-effects are setup (experiments.typedRoutes: true, typesDirectory: %s)',\n typesDirectory\n );\n\n // Ensure the types directory exists.\n await fs.mkdir(typesDirectory, { recursive: true });\n\n await Promise.all([\n upsertGitIgnoreContents(path.join(projectRoot, '.gitignore'), 'expo-env.d.ts'),\n writeExpoEnvDTS(projectRoot),\n forceUpdateTSConfig(projectRoot),\n setupTypedRoutes({\n metro,\n server,\n typesDirectory,\n projectRoot,\n routerDirectory: path.join(\n projectRoot,\n getRouterDirectoryModuleIdWithManifest(projectRoot, exp)\n ),\n plugin: exp?.extra?.router,\n }),\n ]);\n }\n}\n"],"names":["startTypescriptTypeGenerationAsync","debug","require","metro","projectRoot","server","exp","getConfig","experiments","typedRoutes","Promise","all","forceRemovalTSConfig","removeExpoEnvDTS","dotExpoDir","ensureDotExpoProjectDirectoryInitialized","typesDirectory","path","resolve","fs","mkdir","recursive","upsertGitIgnoreContents","join","writeExpoEnvDTS","forceUpdateTSConfig","setupTypedRoutes","routerDirectory","getRouterDirectoryModuleIdWithManifest","plugin","extra","router"],"mappings":";;;;+BAsBsBA;;;eAAAA;;;;yBAtBI;;;;;;;gEAEX;;;;;;;gEACE;;;;;;yBAEiC;wBACjB;0BACyB;qCAClB;yBACiB;wBAEF;;;;;;AAQvD,MAAMC,QAAQC,QAAQ,SAAS;AAGxB,eAAeF,mCAAmC,EACvDG,KAAK,EACLC,WAAW,EACXC,MAAM,EAC0B;QAI3BC;IAHL,MAAM,EAAEA,GAAG,EAAE,GAAGC,IAAAA,mBAAS,EAACH;IAE1B,kEAAkE;IAClE,IAAI,GAACE,mBAAAA,IAAIE,WAAW,qBAAfF,iBAAiBG,WAAW,GAAE;QACjCR,MAAM;QACN,MAAMS,QAAQC,GAAG,CAAC;YAACC,IAAAA,8BAAoB,EAACR;YAAcS,IAAAA,yBAAgB,EAACT;SAAa;IACtF,OAAO;YAwBOE;QAvBZ,MAAMQ,aAAaC,IAAAA,iDAAwC,EAACX;QAC5D,MAAMY,iBAAiBC,eAAI,CAACC,OAAO,CAACJ,YAAY;QAChDb,MACE,oGACAe;QAGF,qCAAqC;QACrC,MAAMG,mBAAE,CAACC,KAAK,CAACJ,gBAAgB;YAAEK,WAAW;QAAK;QAEjD,MAAMX,QAAQC,GAAG,CAAC;YAChBW,IAAAA,4CAAuB,EAACL,eAAI,CAACM,IAAI,CAACnB,aAAa,eAAe;YAC9DoB,IAAAA,wBAAe,EAACpB;YAChBqB,IAAAA,6BAAmB,EAACrB;YACpBsB,IAAAA,wBAAgB,EAAC;gBACfvB;gBACAE;gBACAW;gBACAZ;gBACAuB,iBAAiBV,eAAI,CAACM,IAAI,CACxBnB,aACAwB,IAAAA,8CAAsC,EAACxB,aAAaE;gBAEtDuB,MAAM,EAAEvB,wBAAAA,aAAAA,IAAKwB,KAAK,qBAAVxB,WAAYyB,MAAM;YAC5B;SACD;IACH;AACF"}
@@ -5,20 +5,20 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- forceRemovalTSConfig: function() {
12
+ get forceRemovalTSConfig () {
13
13
  return forceRemovalTSConfig;
14
14
  },
15
- forceUpdateTSConfig: function() {
15
+ get forceUpdateTSConfig () {
16
16
  return forceUpdateTSConfig;
17
17
  },
18
- getTSConfigRemoveUpdates: function() {
18
+ get getTSConfigRemoveUpdates () {
19
19
  return getTSConfigRemoveUpdates;
20
20
  },
21
- getTSConfigUpdates: function() {
21
+ get getTSConfigUpdates () {
22
22
  return getTSConfigUpdates;
23
23
  }
24
24
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/type-generation/tsconfig.ts"],"sourcesContent":["import JsonFile, { JSONObject } from '@expo/json-file';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { Log } from '../../../log';\n\n/**\n * Force updates a project tsconfig with Expo values.\n */\nexport async function forceUpdateTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (!tsConfig.include) {\n tsConfig.include = ['**/*.ts', '**/*.tsx', '.expo/types/**/*.ts', 'expo-env.d.ts'];\n updates.add('include');\n } else if (Array.isArray(tsConfig.include)) {\n if (!tsConfig.include.includes('.expo/types/**/*.ts')) {\n tsConfig.include = [...tsConfig.include, '.expo/types/**/*.ts'];\n updates.add('include');\n }\n\n if (!tsConfig.include.includes('expo-env.d.ts')) {\n tsConfig.include = [...tsConfig.include, 'expo-env.d.ts'];\n updates.add('include');\n }\n }\n\n return { tsConfig, updates };\n}\n\nexport async function forceRemovalTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigRemoveUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigRemoveUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (Array.isArray(tsConfig.include)) {\n const filtered = (tsConfig.include as string[]).filter(\n (i) => i !== 'expo-env.d.ts' && i !== '.expo/types/**/*.ts'\n );\n\n if (filtered.length !== tsConfig.include.length) {\n updates.add('include');\n }\n\n tsConfig.include = filtered;\n }\n\n return { tsConfig, updates };\n}\n\nasync function writeUpdates(tsConfigPath: string, tsConfig: JSONObject, updates: Set<string>) {\n if (updates.size) {\n await JsonFile.writeAsync(tsConfigPath, tsConfig);\n for (const update of updates) {\n Log.log(\n chalk`{bold TypeScript}: The {cyan tsconfig.json#${update}} property has been updated`\n );\n }\n }\n}\n"],"names":["forceRemovalTSConfig","forceUpdateTSConfig","getTSConfigRemoveUpdates","getTSConfigUpdates","projectRoot","tsConfigPath","path","join","tsConfig","updates","JsonFile","read","json5","writeUpdates","Set","include","add","Array","isArray","includes","filtered","filter","i","length","size","writeAsync","update","Log","log","chalk"],"mappings":";;;;;;;;;;;IA0CsBA,oBAAoB;eAApBA;;IAjCAC,mBAAmB;eAAnBA;;IA6CNC,wBAAwB;eAAxBA;;IAjCAC,kBAAkB;eAAlBA;;;;gEArBqB;;;;;;;gEACnB;;;;;;;gEACD;;;;;;qBAEG;;;;;;AAKb,eAAeF,oBAAoBG,WAAmB;IAC3D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGN,mBAC5BO,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASN,mBAAmBK,QAAoB;IACrD,MAAMC,UAAU,IAAIK;IAEpB,IAAI,CAACN,SAASO,OAAO,EAAE;QACrBP,SAASO,OAAO,GAAG;YAAC;YAAW;YAAY;YAAuB;SAAgB;QAClFN,QAAQO,GAAG,CAAC;IACd,OAAO,IAAIC,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QAC1C,IAAI,CAACP,SAASO,OAAO,CAACI,QAAQ,CAAC,wBAAwB;YACrDX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAsB;YAC/DN,QAAQO,GAAG,CAAC;QACd;QAEA,IAAI,CAACR,SAASO,OAAO,CAACI,QAAQ,CAAC,kBAAkB;YAC/CX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAgB;YACzDN,QAAQO,GAAG,CAAC;QACd;IACF;IAEA,OAAO;QAAER;QAAUC;IAAQ;AAC7B;AAEO,eAAeT,qBAAqBI,WAAmB;IAC5D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGP,yBAC5BQ,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASP,yBAAyBM,QAAoB;IAC3D,MAAMC,UAAU,IAAIK;IAEpB,IAAIG,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QACnC,MAAMK,WAAW,AAACZ,SAASO,OAAO,CAAcM,MAAM,CACpD,CAACC,IAAMA,MAAM,mBAAmBA,MAAM;QAGxC,IAAIF,SAASG,MAAM,KAAKf,SAASO,OAAO,CAACQ,MAAM,EAAE;YAC/Cd,QAAQO,GAAG,CAAC;QACd;QAEAR,SAASO,OAAO,GAAGK;IACrB;IAEA,OAAO;QAAEZ;QAAUC;IAAQ;AAC7B;AAEA,eAAeI,aAAaR,YAAoB,EAAEG,QAAoB,EAAEC,OAAoB;IAC1F,IAAIA,QAAQe,IAAI,EAAE;QAChB,MAAMd,mBAAQ,CAACe,UAAU,CAACpB,cAAcG;QACxC,KAAK,MAAMkB,UAAUjB,QAAS;YAC5BkB,QAAG,CAACC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,2CAA2C,EAAEH,OAAO,2BAA2B,CAAC;QAE1F;IACF;AACF"}
1
+ {"version":3,"sources":["../../../../../src/start/server/type-generation/tsconfig.ts"],"sourcesContent":["import type { JSONObject } from '@expo/json-file';\nimport JsonFile from '@expo/json-file';\nimport chalk from 'chalk';\nimport path from 'path';\n\nimport { Log } from '../../../log';\n\n/**\n * Force updates a project tsconfig with Expo values.\n */\nexport async function forceUpdateTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (!tsConfig.include) {\n tsConfig.include = ['**/*.ts', '**/*.tsx', '.expo/types/**/*.ts', 'expo-env.d.ts'];\n updates.add('include');\n } else if (Array.isArray(tsConfig.include)) {\n if (!tsConfig.include.includes('.expo/types/**/*.ts')) {\n tsConfig.include = [...tsConfig.include, '.expo/types/**/*.ts'];\n updates.add('include');\n }\n\n if (!tsConfig.include.includes('expo-env.d.ts')) {\n tsConfig.include = [...tsConfig.include, 'expo-env.d.ts'];\n updates.add('include');\n }\n }\n\n return { tsConfig, updates };\n}\n\nexport async function forceRemovalTSConfig(projectRoot: string) {\n // This runs after the TypeScript prerequisite, so we know the tsconfig.json exists\n const tsConfigPath = path.join(projectRoot, 'tsconfig.json');\n const { tsConfig, updates } = getTSConfigRemoveUpdates(\n JsonFile.read(tsConfigPath, {\n json5: true,\n })\n );\n\n await writeUpdates(tsConfigPath, tsConfig, updates);\n}\n\nexport function getTSConfigRemoveUpdates(tsConfig: JSONObject) {\n const updates = new Set<string>();\n\n if (Array.isArray(tsConfig.include)) {\n const filtered = (tsConfig.include as string[]).filter(\n (i) => i !== 'expo-env.d.ts' && i !== '.expo/types/**/*.ts'\n );\n\n if (filtered.length !== tsConfig.include.length) {\n updates.add('include');\n }\n\n tsConfig.include = filtered;\n }\n\n return { tsConfig, updates };\n}\n\nasync function writeUpdates(tsConfigPath: string, tsConfig: JSONObject, updates: Set<string>) {\n if (updates.size) {\n await JsonFile.writeAsync(tsConfigPath, tsConfig);\n for (const update of updates) {\n Log.log(\n chalk`{bold TypeScript}: The {cyan tsconfig.json#${update}} property has been updated`\n );\n }\n }\n}\n"],"names":["forceRemovalTSConfig","forceUpdateTSConfig","getTSConfigRemoveUpdates","getTSConfigUpdates","projectRoot","tsConfigPath","path","join","tsConfig","updates","JsonFile","read","json5","writeUpdates","Set","include","add","Array","isArray","includes","filtered","filter","i","length","size","writeAsync","update","Log","log","chalk"],"mappings":";;;;;;;;;;;QA2CsBA;eAAAA;;QAjCAC;eAAAA;;QA6CNC;eAAAA;;QAjCAC;eAAAA;;;;gEArBK;;;;;;;gEACH;;;;;;;gEACD;;;;;;qBAEG;;;;;;AAKb,eAAeF,oBAAoBG,WAAmB;IAC3D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGN,mBAC5BO,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASN,mBAAmBK,QAAoB;IACrD,MAAMC,UAAU,IAAIK;IAEpB,IAAI,CAACN,SAASO,OAAO,EAAE;QACrBP,SAASO,OAAO,GAAG;YAAC;YAAW;YAAY;YAAuB;SAAgB;QAClFN,QAAQO,GAAG,CAAC;IACd,OAAO,IAAIC,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QAC1C,IAAI,CAACP,SAASO,OAAO,CAACI,QAAQ,CAAC,wBAAwB;YACrDX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAsB;YAC/DN,QAAQO,GAAG,CAAC;QACd;QAEA,IAAI,CAACR,SAASO,OAAO,CAACI,QAAQ,CAAC,kBAAkB;YAC/CX,SAASO,OAAO,GAAG;mBAAIP,SAASO,OAAO;gBAAE;aAAgB;YACzDN,QAAQO,GAAG,CAAC;QACd;IACF;IAEA,OAAO;QAAER;QAAUC;IAAQ;AAC7B;AAEO,eAAeT,qBAAqBI,WAAmB;IAC5D,mFAAmF;IACnF,MAAMC,eAAeC,eAAI,CAACC,IAAI,CAACH,aAAa;IAC5C,MAAM,EAAEI,QAAQ,EAAEC,OAAO,EAAE,GAAGP,yBAC5BQ,mBAAQ,CAACC,IAAI,CAACN,cAAc;QAC1BO,OAAO;IACT;IAGF,MAAMC,aAAaR,cAAcG,UAAUC;AAC7C;AAEO,SAASP,yBAAyBM,QAAoB;IAC3D,MAAMC,UAAU,IAAIK;IAEpB,IAAIG,MAAMC,OAAO,CAACV,SAASO,OAAO,GAAG;QACnC,MAAMK,WAAW,AAACZ,SAASO,OAAO,CAAcM,MAAM,CACpD,CAACC,IAAMA,MAAM,mBAAmBA,MAAM;QAGxC,IAAIF,SAASG,MAAM,KAAKf,SAASO,OAAO,CAACQ,MAAM,EAAE;YAC/Cd,QAAQO,GAAG,CAAC;QACd;QAEAR,SAASO,OAAO,GAAGK;IACrB;IAEA,OAAO;QAAEZ;QAAUC;IAAQ;AAC7B;AAEA,eAAeI,aAAaR,YAAoB,EAAEG,QAAoB,EAAEC,OAAoB;IAC1F,IAAIA,QAAQe,IAAI,EAAE;QAChB,MAAMd,mBAAQ,CAACe,UAAU,CAACpB,cAAcG;QACxC,KAAK,MAAMkB,UAAUjB,QAAS;YAC5BkB,QAAG,CAACC,GAAG,CACLC,IAAAA,gBAAK,CAAA,CAAC,2CAA2C,EAAEH,OAAO,2BAA2B,CAAC;QAE1F;IACF;AACF"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- createTemplateHtmlAsync: function() {
12
+ get createTemplateHtmlAsync () {
13
13
  return createTemplateHtmlAsync;
14
14
  },
15
- createTemplateHtmlFromExpoConfigAsync: function() {
15
+ get createTemplateHtmlFromExpoConfigAsync () {
16
16
  return createTemplateHtmlFromExpoConfigAsync;
17
17
  }
18
18
  });
@@ -39,13 +39,13 @@ function _path() {
39
39
  }
40
40
  const _templates = require("../../customize/templates");
41
41
  const _html = require("../../export/html");
42
- const _env = require("../../utils/env");
42
+ const _publicFolder = require("../../export/publicFolder");
43
43
  function _interop_require_default(obj) {
44
44
  return obj && obj.__esModule ? obj : {
45
45
  default: obj
46
46
  };
47
47
  }
48
- async function createTemplateHtmlFromExpoConfigAsync(projectRoot, { scripts, cssLinks, exp = (0, _config().getConfig)(projectRoot, {
48
+ async function createTemplateHtmlFromExpoConfigAsync(projectRoot, { scripts, cssLinks, extraHead, exp = (0, _config().getConfig)(projectRoot, {
49
49
  skipSDKVersionRequirement: true
50
50
  }).exp }) {
51
51
  var _exp_web, _exp_web1, _exp_web2;
@@ -53,13 +53,14 @@ async function createTemplateHtmlFromExpoConfigAsync(projectRoot, { scripts, css
53
53
  langIsoCode: ((_exp_web = exp.web) == null ? void 0 : _exp_web.lang) ?? 'en',
54
54
  scripts,
55
55
  cssLinks,
56
+ extraHead,
56
57
  title: (0, _config().getNameFromConfig)(exp).webName ?? 'Expo App',
57
58
  description: (_exp_web1 = exp.web) == null ? void 0 : _exp_web1.description,
58
59
  themeColor: (_exp_web2 = exp.web) == null ? void 0 : _exp_web2.themeColor
59
60
  });
60
61
  }
61
- function getFileFromLocalPublicFolder(projectRoot, { publicFolder, filePath }) {
62
- const localFilePath = _path().default.resolve(projectRoot, publicFolder, filePath);
62
+ function getFileFromLocalPublicFolder(projectRoot, { filePath }) {
63
+ const localFilePath = _path().default.resolve((0, _publicFolder.getPublicFolderPath)(projectRoot), filePath);
63
64
  if (!_fs().default.existsSync(localFilePath)) {
64
65
  return null;
65
66
  }
@@ -67,8 +68,6 @@ function getFileFromLocalPublicFolder(projectRoot, { publicFolder, filePath }) {
67
68
  }
68
69
  /** Attempt to read the `index.html` from the local project before falling back on the template `index.html`. */ async function getTemplateIndexHtmlAsync(projectRoot) {
69
70
  let filePath = getFileFromLocalPublicFolder(projectRoot, {
70
- // TODO: Maybe use the app.json override.
71
- publicFolder: _env.env.EXPO_PUBLIC_FOLDER,
72
71
  filePath: 'index.html'
73
72
  });
74
73
  if (!filePath) {
@@ -76,7 +75,7 @@ function getFileFromLocalPublicFolder(projectRoot, { publicFolder, filePath }) {
76
75
  }
77
76
  return _fs().default.promises.readFile(filePath, 'utf8');
78
77
  }
79
- async function createTemplateHtmlAsync(projectRoot, { scripts, cssLinks, description, langIsoCode, title, themeColor }) {
78
+ async function createTemplateHtmlAsync(projectRoot, { scripts, cssLinks, extraHead, description, langIsoCode, title, themeColor }) {
80
79
  // Resolve the best possible index.html template file.
81
80
  let contents = await getTemplateIndexHtmlAsync(projectRoot);
82
81
  contents = contents.replace('%LANG_ISO_CODE%', langIsoCode);
@@ -102,6 +101,9 @@ async function createTemplateHtmlAsync(projectRoot, { scripts, cssLinks, descrip
102
101
  if (description) {
103
102
  contents = addMeta(contents, `name="description" content="${description}"`);
104
103
  }
104
+ if (extraHead) {
105
+ contents = contents.replace('</head>', `${extraHead}</head>`);
106
+ }
105
107
  return contents;
106
108
  }
107
109
  /** Add a `<meta />` tag to the `<head />` element. */ function addMeta(contents, meta) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/start/server/webTemplate.ts"],"sourcesContent":["import { ExpoConfig, getConfig, getNameFromConfig } from '@expo/config';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { TEMPLATES } from '../../customize/templates';\nimport { appendLinkToHtml, appendScriptsToHtml } from '../../export/html';\nimport { env } from '../../utils/env';\n\n/**\n * Create a static HTML for SPA styled websites.\n * This method attempts to reuse the same patterns as `@expo/webpack-config`.\n */\nexport async function createTemplateHtmlFromExpoConfigAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n }: {\n scripts: string[];\n cssLinks?: string[];\n exp?: ExpoConfig;\n }\n) {\n return createTemplateHtmlAsync(projectRoot, {\n langIsoCode: exp.web?.lang ?? 'en',\n scripts,\n cssLinks,\n title: getNameFromConfig(exp).webName ?? 'Expo App',\n description: exp.web?.description,\n themeColor: exp.web?.themeColor,\n });\n}\n\nfunction getFileFromLocalPublicFolder(\n projectRoot: string,\n { publicFolder, filePath }: { publicFolder: string; filePath: string }\n): string | null {\n const localFilePath = path.resolve(projectRoot, publicFolder, filePath);\n if (!fs.existsSync(localFilePath)) {\n return null;\n }\n return localFilePath;\n}\n\n/** Attempt to read the `index.html` from the local project before falling back on the template `index.html`. */\nasync function getTemplateIndexHtmlAsync(projectRoot: string): Promise<string> {\n let filePath = getFileFromLocalPublicFolder(projectRoot, {\n // TODO: Maybe use the app.json override.\n publicFolder: env.EXPO_PUBLIC_FOLDER,\n filePath: 'index.html',\n });\n if (!filePath) {\n filePath = TEMPLATES.find((value) => value.id === 'index.html')!.file(projectRoot);\n }\n return fs.promises.readFile(filePath, 'utf8');\n}\n\n/** Return an `index.html` string with template values added. */\nexport async function createTemplateHtmlAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n description,\n langIsoCode,\n title,\n themeColor,\n }: {\n scripts: string[];\n cssLinks?: string[];\n description?: string;\n langIsoCode: string;\n title: string;\n themeColor?: string;\n }\n): Promise<string> {\n // Resolve the best possible index.html template file.\n let contents = await getTemplateIndexHtmlAsync(projectRoot);\n\n contents = contents.replace('%LANG_ISO_CODE%', langIsoCode);\n contents = contents.replace('%WEB_TITLE%', title);\n\n contents = appendScriptsToHtml(contents, scripts);\n\n if (cssLinks) {\n contents = appendLinkToHtml(\n contents,\n cssLinks\n .map((href) => [\n // NOTE: We probably don't have to preload the CSS files for SPA-styled websites.\n {\n as: 'style',\n rel: 'preload',\n href,\n },\n {\n rel: 'stylesheet',\n href,\n },\n ])\n .flat()\n );\n }\n\n if (themeColor) {\n contents = addMeta(contents, `name=\"theme-color\" content=\"${themeColor}\"`);\n }\n\n if (description) {\n contents = addMeta(contents, `name=\"description\" content=\"${description}\"`);\n }\n\n return contents;\n}\n\n/** Add a `<meta />` tag to the `<head />` element. */\nfunction addMeta(contents: string, meta: string): string {\n return contents.replace('</head>', `<meta ${meta}>\\n</head>`);\n}\n"],"names":["createTemplateHtmlAsync","createTemplateHtmlFromExpoConfigAsync","projectRoot","scripts","cssLinks","exp","getConfig","skipSDKVersionRequirement","langIsoCode","web","lang","title","getNameFromConfig","webName","description","themeColor","getFileFromLocalPublicFolder","publicFolder","filePath","localFilePath","path","resolve","fs","existsSync","getTemplateIndexHtmlAsync","env","EXPO_PUBLIC_FOLDER","TEMPLATES","find","value","id","file","promises","readFile","contents","replace","appendScriptsToHtml","appendLinkToHtml","map","href","as","rel","flat","addMeta","meta"],"mappings":";;;;;;;;;;;IA2DsBA,uBAAuB;eAAvBA;;IA/CAC,qCAAqC;eAArCA;;;;yBAZmC;;;;;;;gEAC1C;;;;;;;gEACE;;;;;;2BAES;sBAC4B;qBAClC;;;;;;AAMb,eAAeA,sCACpBC,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRC,MAAMC,IAAAA,mBAAS,EAACJ,aAAa;IAAEK,2BAA2B;AAAK,GAAGF,GAAG,EAKtE;QAGcA,UAIAA,WACDA;IANd,OAAOL,wBAAwBE,aAAa;QAC1CM,aAAaH,EAAAA,WAAAA,IAAII,GAAG,qBAAPJ,SAASK,IAAI,KAAI;QAC9BP;QACAC;QACAO,OAAOC,IAAAA,2BAAiB,EAACP,KAAKQ,OAAO,IAAI;QACzCC,WAAW,GAAET,YAAAA,IAAII,GAAG,qBAAPJ,UAASS,WAAW;QACjCC,UAAU,GAAEV,YAAAA,IAAII,GAAG,qBAAPJ,UAASU,UAAU;IACjC;AACF;AAEA,SAASC,6BACPd,WAAmB,EACnB,EAAEe,YAAY,EAAEC,QAAQ,EAA8C;IAEtE,MAAMC,gBAAgBC,eAAI,CAACC,OAAO,CAACnB,aAAae,cAAcC;IAC9D,IAAI,CAACI,aAAE,CAACC,UAAU,CAACJ,gBAAgB;QACjC,OAAO;IACT;IACA,OAAOA;AACT;AAEA,8GAA8G,GAC9G,eAAeK,0BAA0BtB,WAAmB;IAC1D,IAAIgB,WAAWF,6BAA6Bd,aAAa;QACvD,yCAAyC;QACzCe,cAAcQ,QAAG,CAACC,kBAAkB;QACpCR,UAAU;IACZ;IACA,IAAI,CAACA,UAAU;QACbA,WAAWS,oBAAS,CAACC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAK,cAAeC,IAAI,CAAC7B;IACxE;IACA,OAAOoB,aAAE,CAACU,QAAQ,CAACC,QAAQ,CAACf,UAAU;AACxC;AAGO,eAAelB,wBACpBE,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRU,WAAW,EACXN,WAAW,EACXG,KAAK,EACLI,UAAU,EAQX;IAED,sDAAsD;IACtD,IAAImB,WAAW,MAAMV,0BAA0BtB;IAE/CgC,WAAWA,SAASC,OAAO,CAAC,mBAAmB3B;IAC/C0B,WAAWA,SAASC,OAAO,CAAC,eAAexB;IAE3CuB,WAAWE,IAAAA,yBAAmB,EAACF,UAAU/B;IAEzC,IAAIC,UAAU;QACZ8B,WAAWG,IAAAA,sBAAgB,EACzBH,UACA9B,SACGkC,GAAG,CAAC,CAACC,OAAS;gBACb,iFAAiF;gBACjF;oBACEC,IAAI;oBACJC,KAAK;oBACLF;gBACF;gBACA;oBACEE,KAAK;oBACLF;gBACF;aACD,EACAG,IAAI;IAEX;IAEA,IAAI3B,YAAY;QACdmB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAEnB,WAAW,CAAC,CAAC;IAC3E;IAEA,IAAID,aAAa;QACfoB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAEpB,YAAY,CAAC,CAAC;IAC5E;IAEA,OAAOoB;AACT;AAEA,oDAAoD,GACpD,SAASS,QAAQT,QAAgB,EAAEU,IAAY;IAC7C,OAAOV,SAASC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAES,KAAK,UAAU,CAAC;AAC9D"}
1
+ {"version":3,"sources":["../../../../src/start/server/webTemplate.ts"],"sourcesContent":["import type { ExpoConfig } from '@expo/config';\nimport { getConfig, getNameFromConfig } from '@expo/config';\nimport fs from 'fs';\nimport path from 'path';\n\nimport { TEMPLATES } from '../../customize/templates';\nimport { appendLinkToHtml, appendScriptsToHtml } from '../../export/html';\nimport { getPublicFolderPath } from '../../export/publicFolder';\n\n/**\n * Create a static HTML for SPA styled websites.\n * This method attempts to reuse the same patterns as `@expo/webpack-config`.\n */\nexport async function createTemplateHtmlFromExpoConfigAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n extraHead,\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true }).exp,\n }: {\n scripts: string[];\n cssLinks?: string[];\n /** Pre-rendered HTML to inject before `</head>`. Used for caller-owned head assets like favicons. */\n extraHead?: string;\n exp?: ExpoConfig;\n }\n) {\n return createTemplateHtmlAsync(projectRoot, {\n langIsoCode: exp.web?.lang ?? 'en',\n scripts,\n cssLinks,\n extraHead,\n title: getNameFromConfig(exp).webName ?? 'Expo App',\n description: exp.web?.description,\n themeColor: exp.web?.themeColor,\n });\n}\n\nfunction getFileFromLocalPublicFolder(\n projectRoot: string,\n { filePath }: { filePath: string }\n): string | null {\n const localFilePath = path.resolve(getPublicFolderPath(projectRoot), filePath);\n if (!fs.existsSync(localFilePath)) {\n return null;\n }\n return localFilePath;\n}\n\n/** Attempt to read the `index.html` from the local project before falling back on the template `index.html`. */\nasync function getTemplateIndexHtmlAsync(projectRoot: string): Promise<string> {\n let filePath = getFileFromLocalPublicFolder(projectRoot, {\n filePath: 'index.html',\n });\n if (!filePath) {\n filePath = TEMPLATES.find((value) => value.id === 'index.html')!.file(projectRoot);\n }\n return fs.promises.readFile(filePath, 'utf8');\n}\n\n/** Return an `index.html` string with template values added. */\nexport async function createTemplateHtmlAsync(\n projectRoot: string,\n {\n scripts,\n cssLinks,\n extraHead,\n description,\n langIsoCode,\n title,\n themeColor,\n }: {\n scripts: string[];\n cssLinks?: string[];\n /** Pre-rendered HTML to inject before `</head>`. */\n extraHead?: string;\n description?: string;\n langIsoCode: string;\n title: string;\n themeColor?: string;\n }\n): Promise<string> {\n // Resolve the best possible index.html template file.\n let contents = await getTemplateIndexHtmlAsync(projectRoot);\n\n contents = contents.replace('%LANG_ISO_CODE%', langIsoCode);\n contents = contents.replace('%WEB_TITLE%', title);\n\n contents = appendScriptsToHtml(contents, scripts);\n\n if (cssLinks) {\n contents = appendLinkToHtml(\n contents,\n cssLinks\n .map((href) => [\n // NOTE: We probably don't have to preload the CSS files for SPA-styled websites.\n {\n as: 'style',\n rel: 'preload',\n href,\n },\n {\n rel: 'stylesheet',\n href,\n },\n ])\n .flat()\n );\n }\n\n if (themeColor) {\n contents = addMeta(contents, `name=\"theme-color\" content=\"${themeColor}\"`);\n }\n\n if (description) {\n contents = addMeta(contents, `name=\"description\" content=\"${description}\"`);\n }\n\n if (extraHead) {\n contents = contents.replace('</head>', `${extraHead}</head>`);\n }\n\n return contents;\n}\n\n/** Add a `<meta />` tag to the `<head />` element. */\nfunction addMeta(contents: string, meta: string): string {\n return contents.replace('</head>', `<meta ${meta}>\\n</head>`);\n}\n"],"names":["createTemplateHtmlAsync","createTemplateHtmlFromExpoConfigAsync","projectRoot","scripts","cssLinks","extraHead","exp","getConfig","skipSDKVersionRequirement","langIsoCode","web","lang","title","getNameFromConfig","webName","description","themeColor","getFileFromLocalPublicFolder","filePath","localFilePath","path","resolve","getPublicFolderPath","fs","existsSync","getTemplateIndexHtmlAsync","TEMPLATES","find","value","id","file","promises","readFile","contents","replace","appendScriptsToHtml","appendLinkToHtml","map","href","as","rel","flat","addMeta","meta"],"mappings":";;;;;;;;;;;QA8DsBA;eAAAA;;QAjDAC;eAAAA;;;;yBAZuB;;;;;;;gEAC9B;;;;;;;gEACE;;;;;;2BAES;sBAC4B;8BAClB;;;;;;AAM7B,eAAeA,sCACpBC,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTC,MAAMC,IAAAA,mBAAS,EAACL,aAAa;IAAEM,2BAA2B;AAAK,GAAGF,GAAG,EAOtE;QAGcA,UAKAA,WACDA;IAPd,OAAON,wBAAwBE,aAAa;QAC1CO,aAAaH,EAAAA,WAAAA,IAAII,GAAG,qBAAPJ,SAASK,IAAI,KAAI;QAC9BR;QACAC;QACAC;QACAO,OAAOC,IAAAA,2BAAiB,EAACP,KAAKQ,OAAO,IAAI;QACzCC,WAAW,GAAET,YAAAA,IAAII,GAAG,qBAAPJ,UAASS,WAAW;QACjCC,UAAU,GAAEV,YAAAA,IAAII,GAAG,qBAAPJ,UAASU,UAAU;IACjC;AACF;AAEA,SAASC,6BACPf,WAAmB,EACnB,EAAEgB,QAAQ,EAAwB;IAElC,MAAMC,gBAAgBC,eAAI,CAACC,OAAO,CAACC,IAAAA,iCAAmB,EAACpB,cAAcgB;IACrE,IAAI,CAACK,aAAE,CAACC,UAAU,CAACL,gBAAgB;QACjC,OAAO;IACT;IACA,OAAOA;AACT;AAEA,8GAA8G,GAC9G,eAAeM,0BAA0BvB,WAAmB;IAC1D,IAAIgB,WAAWD,6BAA6Bf,aAAa;QACvDgB,UAAU;IACZ;IACA,IAAI,CAACA,UAAU;QACbA,WAAWQ,oBAAS,CAACC,IAAI,CAAC,CAACC,QAAUA,MAAMC,EAAE,KAAK,cAAeC,IAAI,CAAC5B;IACxE;IACA,OAAOqB,aAAE,CAACQ,QAAQ,CAACC,QAAQ,CAACd,UAAU;AACxC;AAGO,eAAelB,wBACpBE,WAAmB,EACnB,EACEC,OAAO,EACPC,QAAQ,EACRC,SAAS,EACTU,WAAW,EACXN,WAAW,EACXG,KAAK,EACLI,UAAU,EAUX;IAED,sDAAsD;IACtD,IAAIiB,WAAW,MAAMR,0BAA0BvB;IAE/C+B,WAAWA,SAASC,OAAO,CAAC,mBAAmBzB;IAC/CwB,WAAWA,SAASC,OAAO,CAAC,eAAetB;IAE3CqB,WAAWE,IAAAA,yBAAmB,EAACF,UAAU9B;IAEzC,IAAIC,UAAU;QACZ6B,WAAWG,IAAAA,sBAAgB,EACzBH,UACA7B,SACGiC,GAAG,CAAC,CAACC,OAAS;gBACb,iFAAiF;gBACjF;oBACEC,IAAI;oBACJC,KAAK;oBACLF;gBACF;gBACA;oBACEE,KAAK;oBACLF;gBACF;aACD,EACAG,IAAI;IAEX;IAEA,IAAIzB,YAAY;QACdiB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAEjB,WAAW,CAAC,CAAC;IAC3E;IAEA,IAAID,aAAa;QACfkB,WAAWS,QAAQT,UAAU,CAAC,4BAA4B,EAAElB,YAAY,CAAC,CAAC;IAC5E;IAEA,IAAIV,WAAW;QACb4B,WAAWA,SAASC,OAAO,CAAC,WAAW,GAAG7B,UAAU,OAAO,CAAC;IAC9D;IAEA,OAAO4B;AACT;AAEA,oDAAoD,GACpD,SAASS,QAAQT,QAAgB,EAAEU,IAAY;IAC7C,OAAOV,SAASC,OAAO,CAAC,WAAW,CAAC,MAAM,EAAES,KAAK,UAAU,CAAC;AAC9D"}
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
5
5
  function _export(target, all) {
6
6
  for(var name in all)Object.defineProperty(target, name, {
7
7
  enumerable: true,
8
- get: all[name]
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- WebpackBundlerDevServer: function() {
12
+ get WebpackBundlerDevServer () {
13
13
  return WebpackBundlerDevServer;
14
14
  },
15
- getProjectWebpackConfigFilePath: function() {
15
+ get getProjectWebpackConfigFilePath () {
16
16
  return getProjectWebpackConfigFilePath;
17
17
  }
18
18
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'node:fs';\nimport http from 'node:http';\nimport path from 'node:path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport { compileAsync } from './compile';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { setNodeEnv, loadEnvFiles } from '../../../utils/nodeEnv';\nimport { choosePortAsync } from '../../../utils/port';\nimport { createProgressBar } from '../../../utils/progress';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport { BundlerDevServer, BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:webpack:devServer') as typeof console.log;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite && !value?.sendMessage) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n public async startTypeScriptServices(): Promise<void> {\n // noop -- this feature is Metro-only.\n }\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n if (\n 'sendMessage' in this.instance.server &&\n typeof this.instance.server.sendMessage === 'function'\n ) {\n // NOTE: https://github.com/expo/expo/issues/21994#issuecomment-1517122501\n this.instance.server.sendMessage(this.instance.server.sockets, hackyConvertedMessage, params);\n } else {\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n }\n\n isTargetingNative(): boolean {\n return false;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async bundleAsync({ mode, clear }: { mode: 'development' | 'production'; clear: boolean }) {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n\n if (clear) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n const config = await this.loadConfigAsync({\n isImageEditingEnabled: true,\n mode,\n });\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const bar = createProgressBar(chalk`{bold Web} Bundling Javascript [:bar] :percent`, {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n // NOTE(EvanBacon): Add a progress bar to the webpack logger if defined (e.g. not in CI).\n if (bar != null) {\n config.plugins.push(\n new webpack.ProgressPlugin((percent: number) => {\n bar?.update(percent);\n if (percent === 1) {\n bar?.terminate();\n }\n })\n );\n }\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n try {\n await compileAsync(compiler);\n } catch (error: any) {\n Log.error(chalk.red('Failed to compile'));\n throw error;\n } finally {\n bar?.terminate();\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n\n const { resetDevServer, https, port, mode } = options;\n\n const urlCreator = await this.initUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n const server = new WebpackDevServer(compiler, config.devServer);\n const host =\n env.WEB_HOST ?? (options.location.hostType === 'localhost' ? 'localhost' : undefined);\n\n // Launch WebpackDevServer.\n server.listen(port, host, function (this: http.Server, error) {\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = urlCreator.getDefaultRouteAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n // TODO(@kitten): Why is this not using the URL creator?\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: null,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: Pick<BundlerStartOptions, 'mode' | 'isImageEditingEnabled' | 'https'>,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n\n setNodeEnv(env.mode ?? 'development');\n loadEnvFiles(env.projectRoot);\n\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n\n protected async clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n ): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n }\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n"],"names":["WebpackBundlerDevServer","getProjectWebpackConfigFilePath","debug","require","assertIsWebpackDevServer","value","sockWrite","sendMessage","CommandError","constructor","name","BundlerDevServer","startTypeScriptServices","broadcastMessage","method","params","instance","server","hackyConvertedMessage","sockets","isTargetingNative","getAvailablePortAsync","options","defaultPort","port","choosePortAsync","projectRoot","host","env","WEB_HOST","error","message","bundleAsync","mode","clear","webpack","importWebpackFromProject","clearWebProjectCacheAsync","config","loadConfigAsync","isImageEditingEnabled","plugins","bar","createProgressBar","chalk","width","total","complete","incomplete","push","ProgressPlugin","percent","update","terminate","compiler","compileAsync","Log","red","startImplementationAsync","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","urlCreator","initUrlCreator","location","scheme","ensureEnvironmentSupportsTLSAsync","catch","log","devServer","hostType","undefined","listen","originalClose","close","bind","callback","err","_host","getDefaultRouteAddress","protocol","url","middleware","messageSocket","broadcast","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","logger","info","setNodeEnv","loadEnvFiles","projectWebpackConfig","webpackConfig","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","path","join","fs","promises","rm","recursive","force"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/WebpackBundlerDevServer.ts"],"sourcesContent":["import chalk from 'chalk';\nimport type { Application } from 'express';\nimport fs from 'node:fs';\nimport type http from 'node:http';\nimport path from 'node:path';\nimport resolveFrom from 'resolve-from';\nimport type webpack from 'webpack';\nimport type WebpackDevServer from 'webpack-dev-server';\n\nimport { compileAsync } from './compile';\nimport {\n importExpoWebpackConfigFromProject,\n importWebpackDevServerFromProject,\n importWebpackFromProject,\n} from './resolveFromProject';\nimport { ensureEnvironmentSupportsTLSAsync } from './tls';\nimport * as Log from '../../../log';\nimport { env } from '../../../utils/env';\nimport { CommandError } from '../../../utils/errors';\nimport { setNodeEnv, loadEnvFiles } from '../../../utils/nodeEnv';\nimport { choosePortAsync } from '../../../utils/port';\nimport { createProgressBar } from '../../../utils/progress';\nimport { ensureDotExpoProjectDirectoryInitialized } from '../../project/dotExpo';\nimport type { BundlerStartOptions, DevServerInstance } from '../BundlerDevServer';\nimport { BundlerDevServer } from '../BundlerDevServer';\n\nconst debug = require('debug')('expo:start:server:webpack:devServer') as typeof console.log;\n\nexport type WebpackConfiguration = webpack.Configuration & {\n devServer?: {\n before?: (app: Application, server: WebpackDevServer, compiler: webpack.Compiler) => void;\n };\n};\n\nfunction assertIsWebpackDevServer(value: any): asserts value is WebpackDevServer {\n if (!value?.sockWrite && !value?.sendMessage) {\n throw new CommandError(\n 'WEBPACK',\n value\n ? 'Expected Webpack dev server, found: ' + (value.constructor?.name ?? value)\n : 'Webpack dev server not started yet.'\n );\n }\n}\n\nexport class WebpackBundlerDevServer extends BundlerDevServer {\n get name(): string {\n return 'webpack';\n }\n\n public async startTypeScriptServices(): Promise<void> {\n // noop -- this feature is Metro-only.\n }\n\n public broadcastMessage(\n method: string | 'reload' | 'devMenu' | 'sendDevCommand',\n params?: Record<string, any>\n ): void {\n if (!this.instance) {\n return;\n }\n\n assertIsWebpackDevServer(this.instance?.server);\n\n // TODO(EvanBacon): Custom Webpack overlay.\n // Default webpack-dev-server sockets use \"content-changed\" instead of \"reload\" (what we use on native).\n // For now, just manually convert the value so our CLI interface can be unified.\n const hackyConvertedMessage = method === 'reload' ? 'content-changed' : method;\n\n if (\n 'sendMessage' in this.instance.server &&\n typeof this.instance.server.sendMessage === 'function'\n ) {\n // NOTE: https://github.com/expo/expo/issues/21994#issuecomment-1517122501\n this.instance.server.sendMessage(this.instance.server.sockets, hackyConvertedMessage, params);\n } else {\n this.instance.server.sockWrite(this.instance.server.sockets, hackyConvertedMessage, params);\n }\n }\n\n isTargetingNative(): boolean {\n return false;\n }\n\n private async getAvailablePortAsync(options: { defaultPort?: number }): Promise<number> {\n try {\n const defaultPort = options?.defaultPort ?? 19006;\n const port = await choosePortAsync(this.projectRoot, {\n defaultPort,\n host: env.WEB_HOST,\n });\n if (!port) {\n throw new CommandError('NO_PORT_FOUND', `Port ${defaultPort} not available.`);\n }\n return port;\n } catch (error: any) {\n throw new CommandError('NO_PORT_FOUND', error.message);\n }\n }\n\n async bundleAsync({ mode, clear }: { mode: 'development' | 'production'; clear: boolean }) {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n\n if (clear) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n const config = await this.loadConfigAsync({\n isImageEditingEnabled: true,\n mode,\n });\n\n if (!config.plugins) {\n config.plugins = [];\n }\n\n const bar = createProgressBar(chalk`{bold Web} Bundling Javascript [:bar] :percent`, {\n width: 64,\n total: 100,\n clear: true,\n complete: '=',\n incomplete: ' ',\n });\n\n // NOTE(EvanBacon): Add a progress bar to the webpack logger if defined (e.g. not in CI).\n if (bar != null) {\n config.plugins.push(\n new webpack.ProgressPlugin((percent: number) => {\n bar?.update(percent);\n if (percent === 1) {\n bar?.terminate();\n }\n })\n );\n }\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n try {\n await compileAsync(compiler);\n } catch (error: any) {\n Log.error(chalk.red('Failed to compile'));\n throw error;\n } finally {\n bar?.terminate();\n }\n }\n\n protected async startImplementationAsync(\n options: BundlerStartOptions\n ): Promise<DevServerInstance> {\n // Do this first to fail faster.\n const webpack = importWebpackFromProject(this.projectRoot);\n const WebpackDevServer = importWebpackDevServerFromProject(this.projectRoot);\n\n await this.stopAsync();\n\n options.port = await this.getAvailablePortAsync({\n defaultPort: options.port,\n });\n\n const { resetDevServer, https, port, mode } = options;\n\n const urlCreator = await this.initUrlCreator({\n port,\n location: {\n scheme: https ? 'https' : 'http',\n },\n });\n\n debug('Starting webpack on port: ' + port);\n\n if (resetDevServer) {\n await this.clearWebProjectCacheAsync(this.projectRoot, mode);\n }\n\n if (https) {\n debug('Configuring TLS to enable HTTPS support');\n await ensureEnvironmentSupportsTLSAsync(this.projectRoot).catch((error) => {\n Log.error(`Error creating TLS certificates: ${error}`);\n });\n }\n\n const config = await this.loadConfigAsync(options);\n\n Log.log(chalk`Starting Webpack on port ${port} in {underline ${mode}} mode.`);\n\n // Create a webpack compiler that is configured with custom messages.\n const compiler = webpack(config);\n\n const server = new WebpackDevServer(compiler, config.devServer);\n const host =\n env.WEB_HOST ?? (options.location.hostType === 'localhost' ? 'localhost' : undefined);\n\n // Launch WebpackDevServer.\n server.listen(port, host, function (this: http.Server, error) {\n if (error) {\n Log.error(error.message);\n }\n });\n\n // Extend the close method to ensure that we clean up the local info.\n const originalClose = server.close.bind(server);\n\n server.close = (callback?: (err?: Error) => void) => {\n return originalClose((err?: Error) => {\n this.instance = null;\n callback?.(err);\n });\n };\n\n const _host = urlCreator.getDefaultRouteAddress();\n const protocol = https ? 'https' : 'http';\n\n return {\n // Server instance\n server,\n // URL Info\n // TODO(@kitten): Why is this not using the URL creator?\n location: {\n url: `${protocol}://${_host}:${port}`,\n port,\n protocol,\n host: _host,\n },\n middleware: null,\n // Match the native protocol.\n messageSocket: {\n broadcast: this.broadcastMessage,\n },\n };\n }\n\n /** Load the Webpack config. Exposed for testing. */\n getProjectConfigFilePath(): string | null {\n // Check if the project has a webpack.config.js in the root.\n return (\n this.getConfigModuleIds().reduce<string | null | undefined>(\n (prev, moduleId) => prev || resolveFrom.silent(this.projectRoot, moduleId),\n null\n ) ?? null\n );\n }\n\n async loadConfigAsync(\n options: Pick<BundlerStartOptions, 'mode' | 'isImageEditingEnabled' | 'https'>,\n argv?: string[]\n ): Promise<WebpackConfiguration> {\n // let bar: ProgressBar | null = null;\n\n const env = {\n projectRoot: this.projectRoot,\n pwa: !!options.isImageEditingEnabled,\n // TODO: Use a new loader in Webpack config...\n logger: {\n info() {},\n },\n mode: options.mode,\n https: options.https,\n };\n\n setNodeEnv(env.mode ?? 'development');\n loadEnvFiles(env.projectRoot);\n\n // Check if the project has a webpack.config.js in the root.\n const projectWebpackConfig = this.getProjectConfigFilePath();\n let config: WebpackConfiguration;\n if (projectWebpackConfig) {\n const webpackConfig = require(projectWebpackConfig);\n if (typeof webpackConfig === 'function') {\n config = await webpackConfig(env, argv);\n } else {\n config = webpackConfig;\n }\n } else {\n // Fallback to the default expo webpack config.\n const loadDefaultConfigAsync = importExpoWebpackConfigFromProject(this.projectRoot);\n config = await loadDefaultConfigAsync(env, argv);\n }\n return config;\n }\n\n protected getConfigModuleIds(): string[] {\n return ['./webpack.config.js'];\n }\n\n protected async clearWebProjectCacheAsync(\n projectRoot: string,\n mode: string = 'development'\n ): Promise<void> {\n Log.log(chalk.dim(`Clearing Webpack ${mode} cache directory...`));\n\n const dir = await ensureDotExpoProjectDirectoryInitialized(projectRoot);\n const cacheFolder = path.join(dir, 'web/cache', mode);\n try {\n await fs.promises.rm(cacheFolder, { recursive: true, force: true });\n } catch (error: any) {\n Log.error(`Could not clear ${mode} web cache directory: ${error.message}`);\n }\n }\n}\n\nexport function getProjectWebpackConfigFilePath(projectRoot: string) {\n return resolveFrom.silent(projectRoot, './webpack.config.js');\n}\n"],"names":["WebpackBundlerDevServer","getProjectWebpackConfigFilePath","debug","require","assertIsWebpackDevServer","value","sockWrite","sendMessage","CommandError","name","BundlerDevServer","startTypeScriptServices","broadcastMessage","method","params","instance","server","hackyConvertedMessage","sockets","isTargetingNative","getAvailablePortAsync","options","defaultPort","port","choosePortAsync","projectRoot","host","env","WEB_HOST","error","message","bundleAsync","mode","clear","webpack","importWebpackFromProject","clearWebProjectCacheAsync","config","loadConfigAsync","isImageEditingEnabled","plugins","bar","createProgressBar","chalk","width","total","complete","incomplete","push","ProgressPlugin","percent","update","terminate","compiler","compileAsync","Log","red","startImplementationAsync","WebpackDevServer","importWebpackDevServerFromProject","stopAsync","resetDevServer","https","urlCreator","initUrlCreator","location","scheme","ensureEnvironmentSupportsTLSAsync","catch","log","devServer","hostType","undefined","listen","originalClose","close","bind","callback","err","_host","getDefaultRouteAddress","protocol","url","middleware","messageSocket","broadcast","getProjectConfigFilePath","getConfigModuleIds","reduce","prev","moduleId","resolveFrom","silent","argv","pwa","logger","info","setNodeEnv","loadEnvFiles","projectWebpackConfig","webpackConfig","loadDefaultConfigAsync","importExpoWebpackConfigFromProject","dim","dir","ensureDotExpoProjectDirectoryInitialized","cacheFolder","path","join","fs","promises","rm","recursive","force"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/webpack/formatWebpackMessages.ts"],"sourcesContent":["/**\n * Copyright (c) 2022 Expo, Inc.\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Based on https://github.com/facebook/create-react-app/blob/b172b5e/packages/react-dev-utils/ModuleNotFoundPlugin.js\n * But with Node LTS support.\n */\n\nimport type { Stats } from 'webpack';\n\nconst friendlySyntaxErrorLabel = 'Syntax error:';\n\nfunction isLikelyASyntaxError(message: string): boolean {\n return message.indexOf(friendlySyntaxErrorLabel) !== -1;\n}\n\n// Cleans up webpack error messages.\nfunction formatMessage(message: string | { message: string } | { message: string }[]) {\n let lines: string[] = [];\n\n if (typeof message === 'string') {\n lines = message.split('\\n');\n } else if ('message' in message) {\n lines = message['message'].split('\\n');\n } else if (Array.isArray(message)) {\n message.forEach((message) => {\n if ('message' in message) {\n lines = message['message'].split('\\n');\n }\n });\n }\n\n // Strip webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line) => !/Module [A-z ]+\\(from/.test(line));\n\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line) => {\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return `${friendlySyntaxErrorLabel} ${errorMessage} (${errorLine}:${errorColumn})`;\n });\n\n message = lines.join('\\n');\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(\n /SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g,\n `${friendlySyntaxErrorLabel} $3 ($1:$2)\\n`\n );\n // Clean up export errors\n message = message.replace(\n /^.*export '(.+?)' was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$2'.`\n );\n message = message.replace(\n /^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$2' does not contain a default export (imported as '$1').`\n );\n message = message.replace(\n /^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$3' (imported as '$2').`\n );\n lines = message.split('\\n');\n\n // Remove leading newline\n if (lines.length > 2 && lines[1].trim() === '') {\n lines.splice(1, 1);\n }\n // Clean up file name\n lines[0] = lines[0].replace(/^(.*) \\d+:\\d+-\\d+$/, '$1');\n\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf('Module not found: ') === 0) {\n lines = [\n lines[0],\n lines[1]\n .replace('Error: ', '')\n .replace('Module not found: Cannot find file:', 'Cannot find file:'),\n ];\n }\n\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n lines[1] = 'To import Sass files, you first need to install sass.\\n';\n lines[1] += 'Run `npm install sass` or `yarn add sass` inside your workspace.';\n }\n\n message = lines.join('\\n');\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, ''); // at ... ...:x:y\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, ''); // at <anonymous>\n lines = message.split('\\n');\n\n // Remove duplicated newlines\n lines = lines.filter(\n (line, index, arr) => index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1].trim()\n );\n\n // Reassemble the message\n message = lines.join('\\n');\n return message.trim();\n}\n\nexport function formatWebpackMessages(json?: Stats.ToJsonOutput) {\n const formattedErrors = json?.errors?.map(formatMessage);\n const formattedWarnings = json?.warnings?.map(formatMessage);\n const result = { errors: formattedErrors, warnings: formattedWarnings };\n if (result.errors?.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n }\n return result;\n}\n"],"names":["formatWebpackMessages","friendlySyntaxErrorLabel","isLikelyASyntaxError","message","indexOf","formatMessage","lines","split","Array","isArray","forEach","filter","line","test","map","parsingError","exec","errorLine","errorColumn","errorMessage","join","replace","length","trim","splice","match","index","arr","json","result","formattedErrors","errors","formattedWarnings","warnings","some"],"mappings":"AAAA;;;;;;;;;CASC;;;;+BAwGeA;;;eAAAA;;;AApGhB,MAAMC,2BAA2B;AAEjC,SAASC,qBAAqBC,OAAe;IAC3C,OAAOA,QAAQC,OAAO,CAACH,8BAA8B,CAAC;AACxD;AAEA,oCAAoC;AACpC,SAASI,cAAcF,OAA6D;IAClF,IAAIG,QAAkB,EAAE;IAExB,IAAI,OAAOH,YAAY,UAAU;QAC/BG,QAAQH,QAAQI,KAAK,CAAC;IACxB,OAAO,IAAI,aAAaJ,SAAS;QAC/BG,QAAQH,OAAO,CAAC,UAAU,CAACI,KAAK,CAAC;IACnC,OAAO,IAAIC,MAAMC,OAAO,CAACN,UAAU;QACjCA,QAAQO,OAAO,CAAC,CAACP;YACf,IAAI,aAAaA,SAAS;gBACxBG,QAAQH,OAAO,CAAC,UAAU,CAACI,KAAK,CAAC;YACnC;QACF;IACF;IAEA,kDAAkD;IAClD,oEAAoE;IACpED,QAAQA,MAAMK,MAAM,CAAC,CAACC,OAAS,CAAC,uBAAuBC,IAAI,CAACD;IAE5D,4CAA4C;IAC5C,2CAA2C;IAC3CN,QAAQA,MAAMQ,GAAG,CAAC,CAACF;QACjB,MAAMG,eAAe,gDAAgDC,IAAI,CAACJ;QAC1E,IAAI,CAACG,cAAc;YACjB,OAAOH;QACT;QACA,MAAM,GAAGK,WAAWC,aAAaC,aAAa,GAAGJ;QACjD,OAAO,GAAGd,yBAAyB,CAAC,EAAEkB,aAAa,EAAE,EAAEF,UAAU,CAAC,EAAEC,YAAY,CAAC,CAAC;IACpF;IAEAf,UAAUG,MAAMc,IAAI,CAAC;IACrB,+CAA+C;IAC/CjB,UAAUA,QAAQkB,OAAO,CACvB,4CACA,GAAGpB,yBAAyB,aAAa,CAAC;IAE5C,yBAAyB;IACzBE,UAAUA,QAAQkB,OAAO,CACvB,mDACA,CAAC,uDAAuD,CAAC;IAE3DlB,UAAUA,QAAQkB,OAAO,CACvB,6EACA,CAAC,kFAAkF,CAAC;IAEtFlB,UAAUA,QAAQkB,OAAO,CACvB,2EACA,CAAC,0EAA0E,CAAC;IAE9Ef,QAAQH,QAAQI,KAAK,CAAC;IAEtB,yBAAyB;IACzB,IAAID,MAAMgB,MAAM,GAAG,KAAKhB,KAAK,CAAC,EAAE,CAACiB,IAAI,OAAO,IAAI;QAC9CjB,MAAMkB,MAAM,CAAC,GAAG;IAClB;IACA,qBAAqB;IACrBlB,KAAK,CAAC,EAAE,GAAGA,KAAK,CAAC,EAAE,CAACe,OAAO,CAAC,sBAAsB;IAElD,wEAAwE;IACxE,IAAIf,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,CAACF,OAAO,CAAC,0BAA0B,GAAG;QAC5DE,QAAQ;YACNA,KAAK,CAAC,EAAE;YACRA,KAAK,CAAC,EAAE,CACLe,OAAO,CAAC,WAAW,IACnBA,OAAO,CAAC,uCAAuC;SACnD;IACH;IAEA,sEAAsE;IACtE,IAAIf,KAAK,CAAC,EAAE,IAAIA,KAAK,CAAC,EAAE,CAACmB,KAAK,CAAC,6BAA6B;QAC1DnB,KAAK,CAAC,EAAE,GAAG;QACXA,KAAK,CAAC,EAAE,IAAI;IACd;IAEAH,UAAUG,MAAMc,IAAI,CAAC;IACrB,qEAAqE;IACrE,qEAAqE;IACrE,gEAAgE;IAChE,yDAAyD;IACzDjB,UAAUA,QAAQkB,OAAO,CAAC,kDAAkD,KAAK,iBAAiB;IAClGlB,UAAUA,QAAQkB,OAAO,CAAC,+BAA+B,KAAK,iBAAiB;IAC/Ef,QAAQH,QAAQI,KAAK,CAAC;IAEtB,6BAA6B;IAC7BD,QAAQA,MAAMK,MAAM,CAClB,CAACC,MAAMc,OAAOC,MAAQD,UAAU,KAAKd,KAAKW,IAAI,OAAO,MAAMX,KAAKW,IAAI,OAAOI,GAAG,CAACD,QAAQ,EAAE,CAACH,IAAI;IAGhG,yBAAyB;IACzBpB,UAAUG,MAAMc,IAAI,CAAC;IACrB,OAAOjB,QAAQoB,IAAI;AACrB;AAEO,SAASvB,sBAAsB4B,IAAyB;QACrCA,cACEA,gBAEtBC;IAHJ,MAAMC,kBAAkBF,yBAAAA,eAAAA,KAAMG,MAAM,qBAAZH,aAAcd,GAAG,CAACT;IAC1C,MAAM2B,oBAAoBJ,yBAAAA,iBAAAA,KAAMK,QAAQ,qBAAdL,eAAgBd,GAAG,CAACT;IAC9C,MAAMwB,SAAS;QAAEE,QAAQD;QAAiBG,UAAUD;IAAkB;IACtE,KAAIH,iBAAAA,OAAOE,MAAM,qBAAbF,eAAeK,IAAI,CAAChC,uBAAuB;QAC7C,kDAAkD;QAClD2B,OAAOE,MAAM,GAAGF,OAAOE,MAAM,CAACpB,MAAM,CAACT;IACvC;IACA,OAAO2B;AACT"}
1
+ {"version":3,"sources":["../../../../../src/start/server/webpack/formatWebpackMessages.ts"],"sourcesContent":["/**\n * Copyright (c) 2022 Expo, Inc.\n * Copyright (c) 2015-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n * Based on https://github.com/facebook/create-react-app/blob/b172b5e/packages/react-dev-utils/ModuleNotFoundPlugin.js\n * But with Node LTS support.\n */\n\nimport type { Stats } from 'webpack';\n\nconst friendlySyntaxErrorLabel = 'Syntax error:';\n\nfunction isLikelyASyntaxError(message: string): boolean {\n return message.indexOf(friendlySyntaxErrorLabel) !== -1;\n}\n\n// Cleans up webpack error messages.\nfunction formatMessage(message: string | { message: string } | { message: string }[]) {\n let lines: string[] = [];\n\n if (typeof message === 'string') {\n lines = message.split('\\n');\n } else if ('message' in message) {\n lines = message['message'].split('\\n');\n } else if (Array.isArray(message)) {\n message.forEach((message) => {\n if ('message' in message) {\n lines = message['message'].split('\\n');\n }\n });\n }\n\n // Strip webpack-added headers off errors/warnings\n // https://github.com/webpack/webpack/blob/master/lib/ModuleError.js\n lines = lines.filter((line) => !/Module [A-z ]+\\(from/.test(line));\n\n // Transform parsing error into syntax error\n // TODO: move this to our ESLint formatter?\n lines = lines.map((line) => {\n const parsingError = /Line (\\d+):(?:(\\d+):)?\\s*Parsing error: (.+)$/.exec(line);\n if (!parsingError) {\n return line;\n }\n const [, errorLine, errorColumn, errorMessage] = parsingError;\n return `${friendlySyntaxErrorLabel} ${errorMessage} (${errorLine}:${errorColumn})`;\n });\n\n message = lines.join('\\n');\n // Smoosh syntax errors (commonly found in CSS)\n message = message.replace(\n /SyntaxError\\s+\\((\\d+):(\\d+)\\)\\s*(.+?)\\n/g,\n `${friendlySyntaxErrorLabel} $3 ($1:$2)\\n`\n );\n // Clean up export errors\n message = message.replace(\n /^.*export '(.+?)' was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$2'.`\n );\n message = message.replace(\n /^.*export 'default' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$2' does not contain a default export (imported as '$1').`\n );\n message = message.replace(\n /^.*export '(.+?)' \\(imported as '(.+?)'\\) was not found in '(.+?)'.*$/gm,\n `Attempted import error: '$1' is not exported from '$3' (imported as '$2').`\n );\n lines = message.split('\\n');\n\n // Remove leading newline\n if (lines.length > 2 && lines[1]!.trim() === '') {\n lines.splice(1, 1);\n }\n // Clean up file name\n lines[0] = lines[0]!.replace(/^(.*) \\d+:\\d+-\\d+$/, '$1');\n\n // Cleans up verbose \"module not found\" messages for files and packages.\n if (lines[1] && lines[1].indexOf('Module not found: ') === 0) {\n lines = [\n lines[0],\n lines[1]\n .replace('Error: ', '')\n .replace('Module not found: Cannot find file:', 'Cannot find file:'),\n ];\n }\n\n // Add helpful message for users trying to use Sass for the first time\n if (lines[1] && lines[1].match(/Cannot find module.+sass/)) {\n lines[1] = 'To import Sass files, you first need to install sass.\\n';\n lines[1] += 'Run `npm install sass` or `yarn add sass` inside your workspace.';\n }\n\n message = lines.join('\\n');\n // Internal stacks are generally useless so we strip them... with the\n // exception of stacks containing `webpack:` because they're normally\n // from user code generated by webpack. For more information see\n // https://github.com/facebook/create-react-app/pull/1050\n message = message.replace(/^\\s*at\\s((?!webpack:).)*:\\d+:\\d+[\\s)]*(\\n|$)/gm, ''); // at ... ...:x:y\n message = message.replace(/^\\s*at\\s<anonymous>(\\n|$)/gm, ''); // at <anonymous>\n lines = message.split('\\n');\n\n // Remove duplicated newlines\n lines = lines.filter(\n (line, index, arr) =>\n index === 0 || line.trim() !== '' || line.trim() !== arr[index - 1]!.trim()\n );\n\n // Reassemble the message\n message = lines.join('\\n');\n return message.trim();\n}\n\nexport function formatWebpackMessages(json?: Stats.ToJsonOutput) {\n const formattedErrors = json?.errors?.map(formatMessage);\n const formattedWarnings = json?.warnings?.map(formatMessage);\n const result = { errors: formattedErrors, warnings: formattedWarnings };\n if (result.errors?.some(isLikelyASyntaxError)) {\n // If there are any syntax errors, show just them.\n result.errors = result.errors.filter(isLikelyASyntaxError);\n }\n return result;\n}\n"],"names":["formatWebpackMessages","friendlySyntaxErrorLabel","isLikelyASyntaxError","message","indexOf","formatMessage","lines","split","Array","isArray","forEach","filter","line","test","map","parsingError","exec","errorLine","errorColumn","errorMessage","join","replace","length","trim","splice","match","index","arr","json","result","formattedErrors","errors","formattedWarnings","warnings","some"],"mappings":"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"}