@expo/cli 0.11.0 → 0.12.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 (281) hide show
  1. package/build/bin/cli +2 -2
  2. package/build/src/api/getExpoGoIntermediateCertificate.js +1 -1
  3. package/build/src/api/getExpoGoIntermediateCertificate.js.map +1 -1
  4. package/build/src/api/getExpoSchema.js +1 -1
  5. package/build/src/api/getExpoSchema.js.map +1 -1
  6. package/build/src/api/getNativeModuleVersions.js +1 -1
  7. package/build/src/api/getNativeModuleVersions.js.map +1 -1
  8. package/build/src/api/getProjectDevelopmentCertificate.js +1 -1
  9. package/build/src/api/getProjectDevelopmentCertificate.js.map +1 -1
  10. package/build/src/api/getVersions.js +1 -1
  11. package/build/src/api/getVersions.js.map +1 -1
  12. package/build/src/api/rest/cache/wrapFetchWithCache.js.map +1 -1
  13. package/build/src/api/rest/client.js +5 -5
  14. package/build/src/api/rest/client.js.map +1 -1
  15. package/build/src/api/rest/wrapFetchWithOffline.js.map +1 -1
  16. package/build/src/api/rest/wrapFetchWithProgress.js.map +1 -1
  17. package/build/src/api/rest/wrapFetchWithProxy.js.map +1 -1
  18. package/build/src/api/updateDevelopmentSession.js +1 -1
  19. package/build/src/api/updateDevelopmentSession.js.map +1 -1
  20. package/build/src/api/user/actions.js +2 -2
  21. package/build/src/api/user/actions.js.map +1 -1
  22. package/build/src/api/user/otp.js +1 -1
  23. package/build/src/api/user/otp.js.map +1 -1
  24. package/build/src/api/user/user.js +2 -2
  25. package/build/src/api/user/user.js.map +1 -1
  26. package/build/src/config/configAsync.js +17 -1
  27. package/build/src/config/configAsync.js.map +1 -1
  28. package/build/src/customize/customizeAsync.js +1 -1
  29. package/build/src/customize/customizeAsync.js.map +1 -1
  30. package/build/src/customize/generate.js +29 -2
  31. package/build/src/customize/generate.js.map +1 -1
  32. package/build/src/customize/templates.js +8 -0
  33. package/build/src/customize/templates.js.map +1 -1
  34. package/build/src/customize/typescript.js +54 -0
  35. package/build/src/customize/typescript.js.map +1 -0
  36. package/build/src/export/createBundles.js +1 -1
  37. package/build/src/export/createBundles.js.map +1 -1
  38. package/build/src/export/createMetadataJson.js.map +1 -1
  39. package/build/src/export/embed/exportEmbedAsync.js +50 -4
  40. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  41. package/build/src/export/embed/index.js +1 -3
  42. package/build/src/export/embed/index.js.map +1 -1
  43. package/build/src/export/embed/resolveOptions.js +6 -10
  44. package/build/src/export/embed/resolveOptions.js.map +1 -1
  45. package/build/src/export/exportApp.js +50 -41
  46. package/build/src/export/exportApp.js.map +1 -1
  47. package/build/src/export/exportAssets.js +2 -2
  48. package/build/src/export/exportAssets.js.map +1 -1
  49. package/build/src/export/exportAsync.js +1 -1
  50. package/build/src/export/exportAsync.js.map +1 -1
  51. package/build/src/export/exportStaticAsync.js +42 -12
  52. package/build/src/export/exportStaticAsync.js.map +1 -1
  53. package/build/src/export/fork-bundleAsync.js +27 -2
  54. package/build/src/export/fork-bundleAsync.js.map +1 -1
  55. package/build/src/export/getPublicExpoManifest.js +1 -1
  56. package/build/src/export/getPublicExpoManifest.js.map +1 -1
  57. package/build/src/export/getResolvedLocales.js.map +1 -1
  58. package/build/src/export/printBundleSizes.js.map +1 -1
  59. package/build/src/export/web/exportWebAsync.js.map +1 -1
  60. package/build/src/export/writeContents.js +5 -1
  61. package/build/src/export/writeContents.js.map +1 -1
  62. package/build/src/install/checkPackages.js +1 -1
  63. package/build/src/install/checkPackages.js.map +1 -1
  64. package/build/src/install/installAsync.js +1 -1
  65. package/build/src/install/installAsync.js.map +1 -1
  66. package/build/src/prebuild/configureProjectAsync.js +5 -9
  67. package/build/src/prebuild/configureProjectAsync.js.map +1 -1
  68. package/build/src/prebuild/prebuildAsync.js +5 -5
  69. package/build/src/prebuild/prebuildAsync.js.map +1 -1
  70. package/build/src/prebuild/updateFromTemplate.js +8 -5
  71. package/build/src/prebuild/updateFromTemplate.js.map +1 -1
  72. package/build/src/register/registerAsync.js +0 -1
  73. package/build/src/register/registerAsync.js.map +1 -1
  74. package/build/src/run/android/resolveInstallApkName.js.map +1 -1
  75. package/build/src/run/android/resolveOptions.js +1 -1
  76. package/build/src/run/android/resolveOptions.js.map +1 -1
  77. package/build/src/run/android/runAndroidAsync.js +2 -2
  78. package/build/src/run/android/runAndroidAsync.js.map +1 -1
  79. package/build/src/run/ios/XcodeBuild.js +2 -2
  80. package/build/src/run/ios/XcodeBuild.js.map +1 -1
  81. package/build/src/run/ios/appleDevice/AppleDevice.js +4 -4
  82. package/build/src/run/ios/appleDevice/AppleDevice.js.map +1 -1
  83. package/build/src/run/ios/appleDevice/ClientManager.js +1 -1
  84. package/build/src/run/ios/appleDevice/ClientManager.js.map +1 -1
  85. package/build/src/run/ios/appleDevice/client/AFCClient.js +1 -1
  86. package/build/src/run/ios/appleDevice/client/AFCClient.js.map +1 -1
  87. package/build/src/run/ios/appleDevice/client/DebugserverClient.js +1 -1
  88. package/build/src/run/ios/appleDevice/client/DebugserverClient.js.map +1 -1
  89. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js +1 -1
  90. package/build/src/run/ios/appleDevice/client/InstallationProxyClient.js.map +1 -1
  91. package/build/src/run/ios/appleDevice/client/LockdowndClient.js +1 -1
  92. package/build/src/run/ios/appleDevice/client/LockdowndClient.js.map +1 -1
  93. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js +1 -1
  94. package/build/src/run/ios/appleDevice/client/MobileImageMounterClient.js.map +1 -1
  95. package/build/src/run/ios/appleDevice/client/ServiceClient.js.map +1 -1
  96. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js +1 -1
  97. package/build/src/run/ios/appleDevice/client/UsbmuxdClient.js.map +1 -1
  98. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js +1 -1
  99. package/build/src/run/ios/appleDevice/installOnDeviceAsync.js.map +1 -1
  100. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js +1 -1
  101. package/build/src/run/ios/appleDevice/protocol/AFCProtocol.js.map +1 -1
  102. package/build/src/run/ios/appleDevice/protocol/AbstractProtocol.js.map +1 -1
  103. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js +1 -1
  104. package/build/src/run/ios/appleDevice/protocol/GDBProtocol.js.map +1 -1
  105. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js +1 -1
  106. package/build/src/run/ios/appleDevice/protocol/LockdownProtocol.js.map +1 -1
  107. package/build/src/run/ios/codeSigning/configureCodeSigning.js +1 -1
  108. package/build/src/run/ios/codeSigning/configureCodeSigning.js.map +1 -1
  109. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js +2 -2
  110. package/build/src/run/ios/codeSigning/resolveCertificateSigningIdentity.js.map +1 -1
  111. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js +3 -0
  112. package/build/src/run/ios/codeSigning/xcodeCodeSigning.js.map +1 -1
  113. package/build/src/run/ios/index.js.map +1 -1
  114. package/build/src/run/ios/launchApp.js +2 -2
  115. package/build/src/run/ios/launchApp.js.map +1 -1
  116. package/build/src/run/ios/options/resolveDevice.js +1 -1
  117. package/build/src/run/ios/options/resolveDevice.js.map +1 -1
  118. package/build/src/run/ios/options/resolveOptions.js +2 -2
  119. package/build/src/run/ios/options/resolveOptions.js.map +1 -1
  120. package/build/src/run/ios/runIosAsync.js +3 -3
  121. package/build/src/run/ios/runIosAsync.js.map +1 -1
  122. package/build/src/start/doctor/apple/XcodePrerequisite.js +43 -2
  123. package/build/src/start/doctor/apple/XcodePrerequisite.js.map +1 -1
  124. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js +1 -1
  125. package/build/src/start/doctor/dependencies/ensureDependenciesAsync.js.map +1 -1
  126. package/build/src/start/doctor/dependencies/getVersionedPackages.js +5 -3
  127. package/build/src/start/doctor/dependencies/getVersionedPackages.js.map +1 -1
  128. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js +1 -1
  129. package/build/src/start/doctor/dependencies/validateDependenciesVersions.js.map +1 -1
  130. package/build/src/start/doctor/ngrok/ExternalModule.js.map +1 -1
  131. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js +7 -7
  132. package/build/src/start/doctor/typescript/TypeScriptProjectPrerequisite.js.map +1 -1
  133. package/build/src/start/doctor/typescript/updateTSConfig.js +11 -10
  134. package/build/src/start/doctor/typescript/updateTSConfig.js.map +1 -1
  135. package/build/src/start/index.js +0 -2
  136. package/build/src/start/index.js.map +1 -1
  137. package/build/src/start/interface/interactiveActions.js +1 -1
  138. package/build/src/start/interface/interactiveActions.js.map +1 -1
  139. package/build/src/start/interface/startInterface.js +3 -3
  140. package/build/src/start/interface/startInterface.js.map +1 -1
  141. package/build/src/start/platforms/ExpoGoInstaller.js.map +1 -1
  142. package/build/src/start/platforms/PlatformManager.js.map +1 -1
  143. package/build/src/start/platforms/android/ADBServer.js +1 -1
  144. package/build/src/start/platforms/android/ADBServer.js.map +1 -1
  145. package/build/src/start/platforms/android/AndroidDeviceManager.js +5 -5
  146. package/build/src/start/platforms/android/AndroidDeviceManager.js.map +1 -1
  147. package/build/src/start/platforms/android/AndroidPlatformManager.js +1 -1
  148. package/build/src/start/platforms/android/AndroidPlatformManager.js.map +1 -1
  149. package/build/src/start/platforms/android/adb.js +1 -1
  150. package/build/src/start/platforms/android/adb.js.map +1 -1
  151. package/build/src/start/platforms/android/adbReverse.js +2 -2
  152. package/build/src/start/platforms/android/adbReverse.js.map +1 -1
  153. package/build/src/start/platforms/android/emulator.js +1 -1
  154. package/build/src/start/platforms/android/emulator.js.map +1 -1
  155. package/build/src/start/platforms/android/getDevices.js +1 -1
  156. package/build/src/start/platforms/android/getDevices.js.map +1 -1
  157. package/build/src/start/platforms/android/promptAndroidDevice.js +1 -1
  158. package/build/src/start/platforms/android/promptAndroidDevice.js.map +1 -1
  159. package/build/src/start/platforms/ios/AppleDeviceManager.js +5 -5
  160. package/build/src/start/platforms/ios/AppleDeviceManager.js.map +1 -1
  161. package/build/src/start/platforms/ios/ApplePlatformManager.js +1 -1
  162. package/build/src/start/platforms/ios/ApplePlatformManager.js.map +1 -1
  163. package/build/src/start/platforms/ios/ensureSimulatorAppRunning.js.map +1 -1
  164. package/build/src/start/platforms/ios/getBestSimulator.js +1 -1
  165. package/build/src/start/platforms/ios/getBestSimulator.js.map +1 -1
  166. package/build/src/start/platforms/ios/promptAppleDevice.js +1 -1
  167. package/build/src/start/platforms/ios/promptAppleDevice.js.map +1 -1
  168. package/build/src/start/platforms/ios/simctl.js +1 -1
  169. package/build/src/start/platforms/ios/simctl.js.map +1 -1
  170. package/build/src/start/platforms/ios/simctlLogging.js +1 -1
  171. package/build/src/start/platforms/ios/simctlLogging.js.map +1 -1
  172. package/build/src/start/resolveOptions.js +0 -5
  173. package/build/src/start/resolveOptions.js.map +1 -1
  174. package/build/src/start/server/AsyncNgrok.js +4 -3
  175. package/build/src/start/server/AsyncNgrok.js.map +1 -1
  176. package/build/src/start/server/BundlerDevServer.js +4 -11
  177. package/build/src/start/server/BundlerDevServer.js.map +1 -1
  178. package/build/src/start/server/DevServerManager.js +3 -2
  179. package/build/src/start/server/DevServerManager.js.map +1 -1
  180. package/build/src/start/server/UrlCreator.js +2 -1
  181. package/build/src/start/server/UrlCreator.js.map +1 -1
  182. package/build/src/start/server/getStaticRenderFunctions.js +2 -2
  183. package/build/src/start/server/getStaticRenderFunctions.js.map +1 -1
  184. package/build/src/start/server/metro/MetroBundlerDevServer.js +42 -25
  185. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  186. package/build/src/start/server/metro/MetroTerminalReporter.js +14 -3
  187. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  188. package/build/src/start/server/metro/TerminalReporter.js.map +1 -1
  189. package/build/src/start/server/metro/TerminalReporter.types.js.map +1 -1
  190. package/build/src/start/server/metro/inspector-proxy/device.js.map +1 -1
  191. package/build/src/start/server/metro/inspector-proxy/handlers/NetworkResponse.js.map +1 -1
  192. package/build/src/start/server/metro/inspector-proxy/handlers/PageReload.js.map +1 -1
  193. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerGetPossibleBreakpoints.js.map +1 -1
  194. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerScriptParsed.js.map +1 -1
  195. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeDebuggerSetBreakpointByUrl.js.map +1 -1
  196. package/build/src/start/server/metro/inspector-proxy/handlers/VscodeRuntimeGetProperties.js.map +1 -1
  197. package/build/src/start/server/metro/inspector-proxy/handlers/types.js.map +1 -1
  198. package/build/src/start/server/metro/inspector-proxy/index.js +1 -1
  199. package/build/src/start/server/metro/inspector-proxy/index.js.map +1 -1
  200. package/build/src/start/server/metro/instantiateMetro.js +49 -8
  201. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  202. package/build/src/start/server/metro/resolveFromProject.js +0 -4
  203. package/build/src/start/server/metro/resolveFromProject.js.map +1 -1
  204. package/build/src/start/server/metro/runServer-fork.js +1 -1
  205. package/build/src/start/server/metro/runServer-fork.js.map +1 -1
  206. package/build/src/start/server/metro/withMetroMultiPlatform.js +59 -9
  207. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  208. package/build/src/start/server/metro/withMetroResolvers.js +6 -5
  209. package/build/src/start/server/metro/withMetroResolvers.js.map +1 -1
  210. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +2 -2
  211. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  212. package/build/src/start/server/middleware/ExpoMiddleware.js.map +1 -1
  213. package/build/src/start/server/middleware/FaviconMiddleware.js +1 -1
  214. package/build/src/start/server/middleware/FaviconMiddleware.js.map +1 -1
  215. package/build/src/start/server/middleware/ManifestMiddleware.js +8 -11
  216. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  217. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js +1 -1
  218. package/build/src/start/server/middleware/RuntimeRedirectMiddleware.js.map +1 -1
  219. package/build/src/start/server/middleware/ServeStaticMiddleware.js +1 -1
  220. package/build/src/start/server/middleware/ServeStaticMiddleware.js.map +1 -1
  221. package/build/src/start/server/middleware/resolvePlatform.js.map +1 -1
  222. package/build/src/start/server/middleware/server.types.js.map +1 -1
  223. package/build/src/start/server/openPlatforms.js.map +1 -1
  224. package/build/src/start/server/type-generation/__typetests__/fixtures/basic.js.map +1 -1
  225. package/build/src/start/server/type-generation/routes.js +6 -6
  226. package/build/src/start/server/type-generation/routes.js.map +1 -1
  227. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js +3 -3
  228. package/build/src/start/server/type-generation/startTypescriptTypeGeneration.js.map +1 -1
  229. package/build/src/start/server/webpack/WebpackBundlerDevServer.js +10 -5
  230. package/build/src/start/server/webpack/WebpackBundlerDevServer.js.map +1 -1
  231. package/build/src/start/server/webpack/compile.js +1 -1
  232. package/build/src/start/server/webpack/compile.js.map +1 -1
  233. package/build/src/start/startAsync.js +10 -32
  234. package/build/src/start/startAsync.js.map +1 -1
  235. package/build/src/utils/FileNotifier.js +1 -1
  236. package/build/src/utils/FileNotifier.js.map +1 -1
  237. package/build/src/utils/analytics/metroDebuggerMiddleware.js +1 -1
  238. package/build/src/utils/analytics/metroDebuggerMiddleware.js.map +1 -1
  239. package/build/src/utils/analytics/rudderstackClient.js +2 -2
  240. package/build/src/utils/array.js.map +1 -1
  241. package/build/src/utils/cocoapods.js +2 -2
  242. package/build/src/utils/cocoapods.js.map +1 -1
  243. package/build/src/utils/codesigning.js +2 -2
  244. package/build/src/utils/codesigning.js.map +1 -1
  245. package/build/src/utils/downloadAppAsync.js +1 -1
  246. package/build/src/utils/downloadAppAsync.js.map +1 -1
  247. package/build/src/utils/downloadExpoGoAsync.js +2 -2
  248. package/build/src/utils/downloadExpoGoAsync.js.map +1 -1
  249. package/build/src/utils/editor.js +1 -1
  250. package/build/src/utils/editor.js.map +1 -1
  251. package/build/src/utils/env.js +1 -1
  252. package/build/src/utils/env.js.map +1 -1
  253. package/build/src/utils/errors.js.map +1 -1
  254. package/build/src/utils/getOrPromptApplicationId.js +2 -2
  255. package/build/src/utils/getOrPromptApplicationId.js.map +1 -1
  256. package/build/src/utils/git.js +1 -1
  257. package/build/src/utils/git.js.map +1 -1
  258. package/build/src/utils/modifyConfigAsync.js +1 -1
  259. package/build/src/utils/modifyConfigAsync.js.map +1 -1
  260. package/build/src/utils/modifyConfigPlugins.js +1 -1
  261. package/build/src/utils/modifyConfigPlugins.js.map +1 -1
  262. package/build/src/utils/npm.js +1 -1
  263. package/build/src/utils/npm.js.map +1 -1
  264. package/build/src/utils/obj.js.map +1 -1
  265. package/build/src/utils/plist.js +1 -1
  266. package/build/src/utils/plist.js.map +1 -1
  267. package/build/src/utils/port.js +1 -1
  268. package/build/src/utils/port.js.map +1 -1
  269. package/build/src/utils/profile.js +1 -1
  270. package/build/src/utils/profile.js.map +1 -1
  271. package/build/src/utils/scheme.js +1 -1
  272. package/build/src/utils/scheme.js.map +1 -1
  273. package/build/src/utils/tsconfig/loadTsConfigPaths.js +1 -1
  274. package/build/src/utils/tsconfig/loadTsConfigPaths.js.map +1 -1
  275. package/build/src/utils/validateApplicationId.js +85 -5
  276. package/build/src/utils/validateApplicationId.js.map +1 -1
  277. package/package.json +11 -8
  278. package/build/src/api/signManifest.js +0 -26
  279. package/build/src/api/signManifest.js.map +0 -1
  280. package/build/src/start/server/middleware/ClassicManifestMiddleware.js +0 -155
  281. package/build/src/start/server/middleware/ClassicManifestMiddleware.js.map +0 -1
@@ -9,9 +9,9 @@ Object.defineProperty(exports, "ExpoInspectorProxy", {
9
9
  }
10
10
  });
11
11
  exports.createInspectorProxy = createInspectorProxy;
12
- var _resolveFromProject = require("../resolveFromProject");
13
12
  var _device = require("./device");
14
13
  var _proxy = require("./proxy");
14
+ var _resolveFromProject = require("../resolveFromProject");
15
15
  const debug = require("debug")("expo:metro:inspector-proxy");
16
16
  function createInspectorProxy(metroBundler, projectRoot) {
17
17
  debug("Expo inspector proxy enabled");
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/start/server/metro/inspector-proxy/index.ts"],"sourcesContent":["import { MetroBundlerDevServer } from '../MetroBundlerDevServer';\nimport {\n importMetroInspectorDeviceFromProject,\n importMetroInspectorProxyFromProject,\n} from '../resolveFromProject';\nimport { createInspectorDeviceClass } from './device';\nimport { ExpoInspectorProxy } from './proxy';\n\nexport { ExpoInspectorProxy } from './proxy';\n\nconst debug = require('debug')('expo:metro:inspector-proxy') as typeof console.log;\n\nexport function createInspectorProxy(metroBundler: MetroBundlerDevServer, projectRoot: string) {\n debug('Expo inspector proxy enabled');\n\n // Import the installed `metro-inspector-proxy` from the project\n // We use these base classes to extend functionality\n const { InspectorProxy: MetroInspectorProxy } = importMetroInspectorProxyFromProject(projectRoot);\n // The device is slightly more complicated, we need to extend that class\n const ExpoInspectorDevice = createInspectorDeviceClass(\n metroBundler,\n importMetroInspectorDeviceFromProject(projectRoot)\n );\n\n const inspectorProxy = new ExpoInspectorProxy(\n new MetroInspectorProxy(projectRoot),\n ExpoInspectorDevice\n );\n\n return inspectorProxy;\n}\n"],"names":["ExpoInspectorProxy","createInspectorProxy","debug","require","metroBundler","projectRoot","InspectorProxy","MetroInspectorProxy","importMetroInspectorProxyFromProject","ExpoInspectorDevice","createInspectorDeviceClass","importMetroInspectorDeviceFromProject","inspectorProxy"],"mappings":"AAAA;;;;+BAQSA,oBAAkB;;;eAFQ,MAAS,CAEnCA,kBAAkB;;;QAIXC,oBAAoB,GAApBA,oBAAoB;AAR7B,IAAA,mBAAuB,WAAvB,uBAAuB,CAAA;AACa,IAAA,OAAU,WAAV,UAAU,CAAA;AAClB,IAAA,MAAS,WAAT,SAAS,CAAA;AAI5C,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,4BAA4B,CAAC,AAAsB,AAAC;AAE5E,SAASF,oBAAoB,CAACG,YAAmC,EAAEC,WAAmB,EAAE;IAC7FH,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAEtC,gEAAgE;IAChE,oDAAoD;IACpD,MAAM,EAAEI,cAAc,EAAEC,mBAAmB,CAAA,EAAE,GAAGC,CAAAA,GAAAA,mBAAoC,AAAa,CAAA,qCAAb,CAACH,WAAW,CAAC,AAAC;IAClG,wEAAwE;IACxE,MAAMI,mBAAmB,GAAGC,CAAAA,GAAAA,OAA0B,AAGrD,CAAA,2BAHqD,CACpDN,YAAY,EACZO,CAAAA,GAAAA,mBAAqC,AAAa,CAAA,sCAAb,CAACN,WAAW,CAAC,CACnD,AAAC;IAEF,MAAMO,cAAc,GAAG,IAAIZ,MAAkB,mBAAA,CAC3C,IAAIO,mBAAmB,CAACF,WAAW,CAAC,EACpCI,mBAAmB,CACpB,AAAC;IAEF,OAAOG,cAAc,CAAC;CACvB"}
1
+ {"version":3,"sources":["../../../../../../src/start/server/metro/inspector-proxy/index.ts"],"sourcesContent":["import { createInspectorDeviceClass } from './device';\nimport { ExpoInspectorProxy } from './proxy';\nimport { MetroBundlerDevServer } from '../MetroBundlerDevServer';\nimport {\n importMetroInspectorDeviceFromProject,\n importMetroInspectorProxyFromProject,\n} from '../resolveFromProject';\n\nexport { ExpoInspectorProxy } from './proxy';\n\nconst debug = require('debug')('expo:metro:inspector-proxy') as typeof console.log;\n\nexport function createInspectorProxy(metroBundler: MetroBundlerDevServer, projectRoot: string) {\n debug('Expo inspector proxy enabled');\n\n // Import the installed `metro-inspector-proxy` from the project\n // We use these base classes to extend functionality\n const { InspectorProxy: MetroInspectorProxy } = importMetroInspectorProxyFromProject(projectRoot);\n // The device is slightly more complicated, we need to extend that class\n const ExpoInspectorDevice = createInspectorDeviceClass(\n metroBundler,\n importMetroInspectorDeviceFromProject(projectRoot)\n );\n\n const inspectorProxy = new ExpoInspectorProxy(\n new MetroInspectorProxy(projectRoot),\n ExpoInspectorDevice\n );\n\n return inspectorProxy;\n}\n"],"names":["ExpoInspectorProxy","createInspectorProxy","debug","require","metroBundler","projectRoot","InspectorProxy","MetroInspectorProxy","importMetroInspectorProxyFromProject","ExpoInspectorDevice","createInspectorDeviceClass","importMetroInspectorDeviceFromProject","inspectorProxy"],"mappings":"AAAA;;;;+BAQSA,oBAAkB;;;eAPQ,MAAS,CAOnCA,kBAAkB;;;QAIXC,oBAAoB,GAApBA,oBAAoB;AAZO,IAAA,OAAU,WAAV,UAAU,CAAA;AAClB,IAAA,MAAS,WAAT,SAAS,CAAA;AAKrC,IAAA,mBAAuB,WAAvB,uBAAuB,CAAA;AAI9B,MAAMC,KAAK,GAAGC,OAAO,CAAC,OAAO,CAAC,CAAC,4BAA4B,CAAC,AAAsB,AAAC;AAE5E,SAASF,oBAAoB,CAACG,YAAmC,EAAEC,WAAmB,EAAE;IAC7FH,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAEtC,gEAAgE;IAChE,oDAAoD;IACpD,MAAM,EAAEI,cAAc,EAAEC,mBAAmB,CAAA,EAAE,GAAGC,CAAAA,GAAAA,mBAAoC,AAAa,CAAA,qCAAb,CAACH,WAAW,CAAC,AAAC;IAClG,wEAAwE;IACxE,MAAMI,mBAAmB,GAAGC,CAAAA,GAAAA,OAA0B,AAGrD,CAAA,2BAHqD,CACpDN,YAAY,EACZO,CAAAA,GAAAA,mBAAqC,AAAa,CAAA,sCAAb,CAACN,WAAW,CAAC,CACnD,AAAC;IAEF,MAAMO,cAAc,GAAG,IAAIZ,MAAkB,mBAAA,CAC3C,IAAIO,mBAAmB,CAACF,WAAW,CAAC,EACpCI,mBAAmB,CACpB,AAAC;IAEF,OAAOG,cAAc,CAAC;CACvB"}
@@ -6,8 +6,16 @@ exports.loadMetroConfigAsync = loadMetroConfigAsync;
6
6
  exports.instantiateMetroAsync = instantiateMetroAsync;
7
7
  exports.isWatchEnabled = isWatchEnabled;
8
8
  var _config = require("@expo/config");
9
+ var _devServer = require("@expo/dev-server");
9
10
  var _chalk = _interopRequireDefault(require("chalk"));
10
11
  var _metroCore = require("metro-core");
12
+ var _semver = _interopRequireDefault(require("semver"));
13
+ var _url = require("url");
14
+ var _metroTerminalReporter = require("./MetroTerminalReporter");
15
+ var _resolveFromProject = require("./resolveFromProject");
16
+ var _router = require("./router");
17
+ var _runServerFork = require("./runServer-fork");
18
+ var _withMetroMultiPlatform = require("./withMetroMultiPlatform");
11
19
  var _log = require("../../../log");
12
20
  var _getMetroProperties = require("../../../utils/analytics/getMetroProperties");
13
21
  var _metroDebuggerMiddleware = require("../../../utils/analytics/metroDebuggerMiddleware");
@@ -16,20 +24,28 @@ var _env = require("../../../utils/env");
16
24
  var _manifestMiddleware = require("../middleware/ManifestMiddleware");
17
25
  var _createDevServerMiddleware = require("../middleware/createDevServerMiddleware");
18
26
  var _platformBundlers = require("../platformBundlers");
19
- var _metroTerminalReporter = require("./MetroTerminalReporter");
20
- var _resolveFromProject = require("./resolveFromProject");
21
- var _router = require("./router");
22
- var _runServerFork = require("./runServer-fork");
23
- var _withMetroMultiPlatform = require("./withMetroMultiPlatform");
24
27
  function _interopRequireDefault(obj) {
25
28
  return obj && obj.__esModule ? obj : {
26
29
  default: obj
27
30
  };
28
31
  }
32
+ function gteSdkVersion(exp, sdkVersion) {
33
+ if (!exp.sdkVersion) {
34
+ return false;
35
+ }
36
+ if (exp.sdkVersion === "UNVERSIONED") {
37
+ return true;
38
+ }
39
+ try {
40
+ return _semver.default.gte(exp.sdkVersion, sdkVersion);
41
+ } catch {
42
+ throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);
43
+ }
44
+ }
29
45
  async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).getConfig(projectRoot, {
30
46
  skipSDKVersionRequirement: true,
31
47
  skipPlugins: true
32
- }).exp } = {}) {
48
+ }).exp , isExporting }) {
33
49
  var ref, ref1, ref2, ref3;
34
50
  let reportEvent;
35
51
  const serverRoot = (0, _manifestMiddleware).getMetroServerRoot(projectRoot);
@@ -48,6 +64,18 @@ async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).ge
48
64
  reporter,
49
65
  ...options
50
66
  });
67
+ if (// Requires SDK 50 for expo-assets hashAssetPlugin change.
68
+ !exp.sdkVersion || gteSdkVersion(exp, "50.0.0")) {
69
+ // TODO: Handle asset prefix.
70
+ if (isExporting) {
71
+ // This token will be used in the asset plugin to ensure the path is correct for writing locally.
72
+ // @ts-expect-error: typed as readonly.
73
+ config.transformer.publicPath = "/assets?export_path=/assets";
74
+ } else {
75
+ // @ts-expect-error: typed as readonly
76
+ config.transformer.publicPath = "/assets/?unstable_path=.";
77
+ }
78
+ }
51
79
  const platformBundlers = (0, _platformBundlers).getPlatformBundlers(exp);
52
80
  var ref4, ref5;
53
81
  config = await (0, _withMetroMultiPlatform).withMetroMultiPlatformAsync(projectRoot, {
@@ -65,7 +93,7 @@ async function loadMetroConfigAsync(projectRoot, options, { exp =(0, _config).ge
65
93
  reporter: terminalReporter
66
94
  };
67
95
  }
68
- async function instantiateMetroAsync(metroBundler, options) {
96
+ async function instantiateMetroAsync(metroBundler, options, { isExporting }) {
69
97
  const projectRoot = metroBundler.projectRoot;
70
98
  // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.
71
99
  const { exp } = (0, _config).getConfig(projectRoot, {
@@ -73,7 +101,8 @@ async function instantiateMetroAsync(metroBundler, options) {
73
101
  skipPlugins: true
74
102
  });
75
103
  const { config: metroConfig , setEventReporter } = await loadMetroConfigAsync(projectRoot, options, {
76
- exp
104
+ exp,
105
+ isExporting
77
106
  });
78
107
  const { middleware , websocketEndpoints , eventsSocketEndpoint , messageSocketEndpoint } = (0, _createDevServerMiddleware).createDevServerMiddleware(projectRoot, {
79
108
  port: metroConfig.server.port,
@@ -94,6 +123,18 @@ async function instantiateMetroAsync(metroBundler, options) {
94
123
  websocketEndpoints,
95
124
  watch: isWatchEnabled()
96
125
  });
126
+ (0, _devServer).prependMiddleware(middleware, (req, res, next)=>{
127
+ // If the URL is a Metro asset request, then we need to skip all other middleware to prevent
128
+ // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.
129
+ // /assets/?unstable_path=.
130
+ if (req.url) {
131
+ const url = new _url.URL(req.url, "http://localhost:8000");
132
+ if (url.pathname.match(/^\/assets\/?/) && url.searchParams.get("unstable_path") != null) {
133
+ return metro.processRequest(req, res, next);
134
+ }
135
+ }
136
+ return next();
137
+ });
97
138
  setEventReporter(eventsSocketEndpoint.reportEvent);
98
139
  return {
99
140
  metro,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { MetroDevServerOptions } from '@expo/dev-server';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\n\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { createDevServerMiddleware } from '../middleware/createDevServerMiddleware';\nimport { getPlatformBundlers } from '../platformBundlers';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { importExpoMetroConfig } from './resolveFromProject';\nimport { getRouterDirectory } from './router';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true, skipPlugins: true }).exp,\n }: { exp?: ExpoConfig } = {}\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n const ExpoMetroConfig = importExpoMetroConfig(projectRoot);\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n routerDirectory: exp.extra?.router?.unstable_src ?? getRouterDirectory(projectRoot),\n config,\n platformBundlers,\n isTsconfigPathsEnabled: !!exp.experiments?.tsconfigPaths,\n webOutput: exp.web?.output ?? 'single',\n });\n\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<MetroDevServerOptions, 'logger'>\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp }\n );\n\n const { middleware, websocketEndpoints, eventsSocketEndpoint, messageSocketEndpoint } =\n createDevServerMiddleware(projectRoot, {\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n hmrEnabled: true,\n // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api\n websocketEndpoints,\n watch: isWatchEnabled(),\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","projectRoot","options","exp","getConfig","skipSDKVersionRequirement","skipPlugins","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","ExpoMetroConfig","importExpoMetroConfig","config","loadAsync","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","routerDirectory","extra","router","unstable_src","getRouterDirectory","isTsconfigPathsEnabled","experiments","tsconfigPaths","webOutput","web","output","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","middleware","websocketEndpoints","eventsSocketEndpoint","messageSocketEndpoint","createDevServerMiddleware","port","server","watchFolders","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","use","createDebuggerTelemetryMiddleware","metro","runServer","hmrEnabled","watch","messageSocket","env","CI","Log","log","chalk"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/instantiateMetro.ts"],"sourcesContent":["import { ExpoConfig, getConfig } from '@expo/config';\nimport { MetroDevServerOptions, prependMiddleware } from '@expo/dev-server';\nimport type { LoadOptions } from '@expo/metro-config';\nimport chalk from 'chalk';\nimport http from 'http';\nimport type Metro from 'metro';\nimport { Terminal } from 'metro-core';\nimport semver from 'semver';\nimport { URL } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { MetroTerminalReporter } from './MetroTerminalReporter';\nimport { importExpoMetroConfig } from './resolveFromProject';\nimport { getRouterDirectory } from './router';\nimport { runServer } from './runServer-fork';\nimport { withMetroMultiPlatformAsync } from './withMetroMultiPlatform';\nimport { Log } from '../../../log';\nimport { getMetroProperties } from '../../../utils/analytics/getMetroProperties';\nimport { createDebuggerTelemetryMiddleware } from '../../../utils/analytics/metroDebuggerMiddleware';\nimport { logEventAsync } from '../../../utils/analytics/rudderstackClient';\nimport { env } from '../../../utils/env';\nimport { getMetroServerRoot } from '../middleware/ManifestMiddleware';\nimport { createDevServerMiddleware } from '../middleware/createDevServerMiddleware';\nimport { ServerNext, ServerRequest, ServerResponse } from '../middleware/server.types';\nimport { getPlatformBundlers } from '../platformBundlers';\n\n// From expo/dev-server but with ability to use custom logger.\ntype MessageSocket = {\n broadcast: (method: string, params?: Record<string, any> | undefined) => void;\n};\n\nfunction gteSdkVersion(exp: Pick<ExpoConfig, 'sdkVersion'>, sdkVersion: string): boolean {\n if (!exp.sdkVersion) {\n return false;\n }\n\n if (exp.sdkVersion === 'UNVERSIONED') {\n return true;\n }\n\n try {\n return semver.gte(exp.sdkVersion, sdkVersion);\n } catch {\n throw new Error(`${exp.sdkVersion} is not a valid version. Must be in the form of x.y.z`);\n }\n}\n\nexport async function loadMetroConfigAsync(\n projectRoot: string,\n options: LoadOptions,\n {\n exp = getConfig(projectRoot, { skipSDKVersionRequirement: true, skipPlugins: true }).exp,\n isExporting,\n }: { exp?: ExpoConfig; isExporting: boolean }\n) {\n let reportEvent: ((event: any) => void) | undefined;\n const serverRoot = getMetroServerRoot(projectRoot);\n\n const terminal = new Terminal(process.stdout);\n const terminalReporter = new MetroTerminalReporter(serverRoot, terminal);\n\n const reporter = {\n update(event: any) {\n terminalReporter.update(event);\n if (reportEvent) {\n reportEvent(event);\n }\n },\n };\n\n const ExpoMetroConfig = importExpoMetroConfig(projectRoot);\n let config = await ExpoMetroConfig.loadAsync(projectRoot, { reporter, ...options });\n\n if (\n // Requires SDK 50 for expo-assets hashAssetPlugin change.\n !exp.sdkVersion ||\n gteSdkVersion(exp, '50.0.0')\n ) {\n // TODO: Handle asset prefix.\n if (isExporting) {\n // This token will be used in the asset plugin to ensure the path is correct for writing locally.\n // @ts-expect-error: typed as readonly.\n config.transformer.publicPath = '/assets?export_path=/assets';\n } else {\n // @ts-expect-error: typed as readonly\n config.transformer.publicPath = '/assets/?unstable_path=.';\n }\n }\n\n const platformBundlers = getPlatformBundlers(exp);\n\n config = await withMetroMultiPlatformAsync(projectRoot, {\n routerDirectory: exp.extra?.router?.unstable_src ?? getRouterDirectory(projectRoot),\n config,\n platformBundlers,\n isTsconfigPathsEnabled: !!exp.experiments?.tsconfigPaths,\n webOutput: exp.web?.output ?? 'single',\n });\n\n logEventAsync('metro config', getMetroProperties(projectRoot, exp, config));\n\n return {\n config,\n setEventReporter: (logger: (event: any) => void) => (reportEvent = logger),\n reporter: terminalReporter,\n };\n}\n\n/** The most generic possible setup for Metro bundler. */\nexport async function instantiateMetroAsync(\n metroBundler: MetroBundlerDevServer,\n options: Omit<MetroDevServerOptions, 'logger'>,\n { isExporting }: { isExporting: boolean }\n): Promise<{\n metro: Metro.Server;\n server: http.Server;\n middleware: any;\n messageSocket: MessageSocket;\n}> {\n const projectRoot = metroBundler.projectRoot;\n\n // TODO: When we bring expo/metro-config into the expo/expo repo, then we can upstream this.\n const { exp } = getConfig(projectRoot, {\n skipSDKVersionRequirement: true,\n skipPlugins: true,\n });\n\n const { config: metroConfig, setEventReporter } = await loadMetroConfigAsync(\n projectRoot,\n options,\n { exp, isExporting }\n );\n\n const { middleware, websocketEndpoints, eventsSocketEndpoint, messageSocketEndpoint } =\n createDevServerMiddleware(projectRoot, {\n port: metroConfig.server.port,\n watchFolders: metroConfig.watchFolders,\n });\n\n const customEnhanceMiddleware = metroConfig.server.enhanceMiddleware;\n // @ts-expect-error: can't mutate readonly config\n metroConfig.server.enhanceMiddleware = (metroMiddleware: any, server: Metro.Server) => {\n if (customEnhanceMiddleware) {\n metroMiddleware = customEnhanceMiddleware(metroMiddleware, server);\n }\n return middleware.use(metroMiddleware);\n };\n\n middleware.use(createDebuggerTelemetryMiddleware(projectRoot, exp));\n\n const { server, metro } = await runServer(metroBundler, metroConfig, {\n hmrEnabled: true,\n // @ts-expect-error: Inconsistent `websocketEndpoints` type between metro and @react-native-community/cli-server-api\n websocketEndpoints,\n watch: isWatchEnabled(),\n });\n\n prependMiddleware(middleware, (req: ServerRequest, res: ServerResponse, next: ServerNext) => {\n // If the URL is a Metro asset request, then we need to skip all other middleware to prevent\n // the community CLI's serve-static from hosting `/assets/index.html` in place of all assets if it exists.\n // /assets/?unstable_path=.\n if (req.url) {\n const url = new URL(req.url!, 'http://localhost:8000');\n if (url.pathname.match(/^\\/assets\\/?/) && url.searchParams.get('unstable_path') != null) {\n return metro.processRequest(req, res, next);\n }\n }\n return next();\n });\n\n setEventReporter(eventsSocketEndpoint.reportEvent);\n\n return {\n metro,\n server,\n middleware,\n messageSocket: messageSocketEndpoint,\n };\n}\n\n/**\n * Simplify and communicate if Metro is running without watching file updates,.\n * Exposed for testing.\n */\nexport function isWatchEnabled() {\n if (env.CI) {\n Log.log(\n chalk`Metro is running in CI mode, reloads are disabled. Remove {bold CI=true} to enable watch mode.`\n );\n }\n\n return !env.CI;\n}\n"],"names":["loadMetroConfigAsync","instantiateMetroAsync","isWatchEnabled","gteSdkVersion","exp","sdkVersion","semver","gte","Error","projectRoot","options","getConfig","skipSDKVersionRequirement","skipPlugins","isExporting","reportEvent","serverRoot","getMetroServerRoot","terminal","Terminal","process","stdout","terminalReporter","MetroTerminalReporter","reporter","update","event","ExpoMetroConfig","importExpoMetroConfig","config","loadAsync","transformer","publicPath","platformBundlers","getPlatformBundlers","withMetroMultiPlatformAsync","routerDirectory","extra","router","unstable_src","getRouterDirectory","isTsconfigPathsEnabled","experiments","tsconfigPaths","webOutput","web","output","logEventAsync","getMetroProperties","setEventReporter","logger","metroBundler","metroConfig","middleware","websocketEndpoints","eventsSocketEndpoint","messageSocketEndpoint","createDevServerMiddleware","port","server","watchFolders","customEnhanceMiddleware","enhanceMiddleware","metroMiddleware","use","createDebuggerTelemetryMiddleware","metro","runServer","hmrEnabled","watch","prependMiddleware","req","res","next","url","URL","pathname","match","searchParams","get","processRequest","messageSocket","env","CI","Log","log","chalk"],"mappings":"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"}
@@ -11,7 +11,6 @@ exports.importMetroResolverFromProject = importMetroResolverFromProject;
11
11
  exports.importMetroInspectorProxyFromProject = importMetroInspectorProxyFromProject;
12
12
  exports.importMetroInspectorDeviceFromProject = importMetroInspectorDeviceFromProject;
13
13
  exports.importCliSaveAssetsFromProject = importCliSaveAssetsFromProject;
14
- exports.importCliBuildBundleWithConfigFromProject = importCliBuildBundleWithConfigFromProject;
15
14
  exports.resolveMetroVersionFromProject = resolveMetroVersionFromProject;
16
15
  var _resolveFrom = _interopRequireDefault(require("resolve-from"));
17
16
  function _interopRequireDefault(obj) {
@@ -71,9 +70,6 @@ function importMetroInspectorDeviceFromProject(projectRoot) {
71
70
  function importCliSaveAssetsFromProject(projectRoot) {
72
71
  return importFromProject(projectRoot, "@react-native-community/cli-plugin-metro/build/commands/bundle/saveAssets").default;
73
72
  }
74
- function importCliBuildBundleWithConfigFromProject(projectRoot) {
75
- return importFromProject(projectRoot, "@react-native-community/cli-plugin-metro/build/commands/bundle/buildBundle").buildBundleWithConfig;
76
- }
77
73
  function resolveMetroVersionFromProject(projectRoot) {
78
74
  return importFromProject(projectRoot, "metro/package.json").version;
79
75
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/resolveFromProject.ts"],"sourcesContent":["import resolveFrom from 'resolve-from';\n\nconst debug = require('debug')('expo:metro:import');\n\n// These resolvers enable us to test the CLI in older projects.\n// We may be able to get rid of this in the future.\n// TODO: Maybe combine with AsyncResolver?\nclass MetroImportError extends Error {\n constructor(projectRoot: string, moduleId: string) {\n super(\n `Missing package \"${moduleId}\" in the project at: ${projectRoot}\\n` +\n 'This usually means \"react-native\" is not installed. ' +\n 'Please verify that dependencies in package.json include \"react-native\" ' +\n 'and run `yarn` or `npm install`.'\n );\n }\n}\n\nfunction resolveFromProject(projectRoot: string, moduleId: string) {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n throw new MetroImportError(projectRoot, moduleId);\n }\n return resolvedPath;\n}\n\nfunction importFromProject(projectRoot: string, moduleId: string) {\n return require(resolveFromProject(projectRoot, moduleId));\n}\n\n/** Import `metro` from the project. */\nexport function importMetroFromProject(projectRoot: string): typeof import('metro') {\n return importFromProject(projectRoot, 'metro');\n}\nexport function importMetroCreateWebsocketServerFromProject(\n projectRoot: string\n): typeof import('metro/src/lib/createWebsocketServer').createWebsocketServer {\n return importFromProject(projectRoot, 'metro/src/lib/createWebsocketServer');\n}\nexport function importMetroHmrServerFromProject(\n projectRoot: string\n): typeof import('metro/src/HmrServer').MetroHmrServer {\n return importFromProject(projectRoot, 'metro/src/HmrServer');\n}\n\nexport function importExpoMetroConfig(projectRoot: string) {\n return importFromProjectOrFallback<typeof import('@expo/metro-config')>(\n projectRoot,\n '@expo/metro-config'\n );\n}\n\n/**\n * Attempt to use the local version of a module or fallback on the CLI version.\n * This should only ever happen when testing Expo CLI in development.\n */\nexport function importFromProjectOrFallback<TModule>(\n projectRoot: string,\n moduleId: string\n): TModule {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n debug(`requiring \"${moduleId}\" relative to the CLI`);\n return require(require.resolve(moduleId));\n }\n debug(`requiring \"${moduleId}\" from the project:`, resolvedPath);\n return require(resolvedPath);\n}\n\n/** Import `metro-resolver` from the project. */\nexport function importMetroResolverFromProject(\n projectRoot: string\n): typeof import('metro-resolver') {\n return importFromProject(projectRoot, 'metro-resolver');\n}\n\n/** Import `metro-inspector-proxy` from the project. */\nexport function importMetroInspectorProxyFromProject(\n projectRoot: string\n): typeof import('metro-inspector-proxy') {\n return importFromProject(projectRoot, 'metro-inspector-proxy');\n}\n\n/** Import `metro-inspector-proxy/src/Device` from the project. */\nexport function importMetroInspectorDeviceFromProject(\n projectRoot: string\n): typeof import('metro-inspector-proxy/src/Device') {\n return importFromProject(projectRoot, 'metro-inspector-proxy/src/Device');\n}\n\n/**\n * Import the internal `saveAssets()` function from `react-native` for the purpose\n * of saving production assets as-is instead of converting them to a hash.\n */\nexport function importCliSaveAssetsFromProject(\n projectRoot: string\n): typeof import('@react-native-community/cli-plugin-metro/build/commands/bundle/saveAssets').default {\n return importFromProject(\n projectRoot,\n '@react-native-community/cli-plugin-metro/build/commands/bundle/saveAssets'\n ).default;\n}\n\nexport function importCliBuildBundleWithConfigFromProject(\n projectRoot: string\n): typeof import('@react-native-community/cli-plugin-metro/build/commands/bundle/buildBundle').buildBundleWithConfig {\n return importFromProject(\n projectRoot,\n '@react-native-community/cli-plugin-metro/build/commands/bundle/buildBundle'\n ).buildBundleWithConfig;\n}\n\n/** Resolve the installed Metro version from project */\nexport function resolveMetroVersionFromProject(projectRoot: string): string {\n return importFromProject(projectRoot, 'metro/package.json').version;\n}\n"],"names":["importMetroFromProject","importMetroCreateWebsocketServerFromProject","importMetroHmrServerFromProject","importExpoMetroConfig","importFromProjectOrFallback","importMetroResolverFromProject","importMetroInspectorProxyFromProject","importMetroInspectorDeviceFromProject","importCliSaveAssetsFromProject","importCliBuildBundleWithConfigFromProject","resolveMetroVersionFromProject","debug","require","MetroImportError","Error","constructor","projectRoot","moduleId","resolveFromProject","resolvedPath","resolveFrom","silent","importFromProject","resolve","default","buildBundleWithConfig","version"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/resolveFromProject.ts"],"sourcesContent":["import resolveFrom from 'resolve-from';\n\nconst debug = require('debug')('expo:metro:import');\n\n// These resolvers enable us to test the CLI in older projects.\n// We may be able to get rid of this in the future.\n// TODO: Maybe combine with AsyncResolver?\nclass MetroImportError extends Error {\n constructor(projectRoot: string, moduleId: string) {\n super(\n `Missing package \"${moduleId}\" in the project at: ${projectRoot}\\n` +\n 'This usually means \"react-native\" is not installed. ' +\n 'Please verify that dependencies in package.json include \"react-native\" ' +\n 'and run `yarn` or `npm install`.'\n );\n }\n}\n\nfunction resolveFromProject(projectRoot: string, moduleId: string) {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n throw new MetroImportError(projectRoot, moduleId);\n }\n return resolvedPath;\n}\n\nfunction importFromProject(projectRoot: string, moduleId: string) {\n return require(resolveFromProject(projectRoot, moduleId));\n}\n\n/** Import `metro` from the project. */\nexport function importMetroFromProject(projectRoot: string): typeof import('metro') {\n return importFromProject(projectRoot, 'metro');\n}\nexport function importMetroCreateWebsocketServerFromProject(\n projectRoot: string\n): typeof import('metro/src/lib/createWebsocketServer').createWebsocketServer {\n return importFromProject(projectRoot, 'metro/src/lib/createWebsocketServer');\n}\nexport function importMetroHmrServerFromProject(\n projectRoot: string\n): typeof import('metro/src/HmrServer').MetroHmrServer {\n return importFromProject(projectRoot, 'metro/src/HmrServer');\n}\n\nexport function importExpoMetroConfig(projectRoot: string) {\n return importFromProjectOrFallback<typeof import('@expo/metro-config')>(\n projectRoot,\n '@expo/metro-config'\n );\n}\n\n/**\n * Attempt to use the local version of a module or fallback on the CLI version.\n * This should only ever happen when testing Expo CLI in development.\n */\nexport function importFromProjectOrFallback<TModule>(\n projectRoot: string,\n moduleId: string\n): TModule {\n const resolvedPath = resolveFrom.silent(projectRoot, moduleId);\n if (!resolvedPath) {\n debug(`requiring \"${moduleId}\" relative to the CLI`);\n return require(require.resolve(moduleId));\n }\n debug(`requiring \"${moduleId}\" from the project:`, resolvedPath);\n return require(resolvedPath);\n}\n\n/** Import `metro-resolver` from the project. */\nexport function importMetroResolverFromProject(\n projectRoot: string\n): typeof import('metro-resolver') {\n return importFromProject(projectRoot, 'metro-resolver');\n}\n\n/** Import `metro-inspector-proxy` from the project. */\nexport function importMetroInspectorProxyFromProject(\n projectRoot: string\n): typeof import('metro-inspector-proxy') {\n return importFromProject(projectRoot, 'metro-inspector-proxy');\n}\n\n/** Import `metro-inspector-proxy/src/Device` from the project. */\nexport function importMetroInspectorDeviceFromProject(\n projectRoot: string\n): typeof import('metro-inspector-proxy/src/Device') {\n return importFromProject(projectRoot, 'metro-inspector-proxy/src/Device');\n}\n\n/**\n * Import the internal `saveAssets()` function from `react-native` for the purpose\n * of saving production assets as-is instead of converting them to a hash.\n */\nexport function importCliSaveAssetsFromProject(\n projectRoot: string\n): typeof import('@react-native-community/cli-plugin-metro/build/commands/bundle/saveAssets').default {\n return importFromProject(\n projectRoot,\n '@react-native-community/cli-plugin-metro/build/commands/bundle/saveAssets'\n ).default;\n}\n\n/** Resolve the installed Metro version from project */\nexport function resolveMetroVersionFromProject(projectRoot: string): string {\n return importFromProject(projectRoot, 'metro/package.json').version;\n}\n"],"names":["importMetroFromProject","importMetroCreateWebsocketServerFromProject","importMetroHmrServerFromProject","importExpoMetroConfig","importFromProjectOrFallback","importMetroResolverFromProject","importMetroInspectorProxyFromProject","importMetroInspectorDeviceFromProject","importCliSaveAssetsFromProject","resolveMetroVersionFromProject","debug","require","MetroImportError","Error","constructor","projectRoot","moduleId","resolveFromProject","resolvedPath","resolveFrom","silent","importFromProject","resolve","default","version"],"mappings":"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"}
@@ -7,9 +7,9 @@ var _assert = _interopRequireDefault(require("assert"));
7
7
  var _http = _interopRequireDefault(require("http"));
8
8
  var _https = _interopRequireDefault(require("https"));
9
9
  var _url = require("url");
10
- var _env = require("../../../utils/env");
11
10
  var _inspectorProxy = require("./inspector-proxy");
12
11
  var _resolveFromProject = require("./resolveFromProject");
12
+ var _env = require("../../../utils/env");
13
13
  function _interopRequireDefault(obj) {
14
14
  return obj && obj.__esModule ? obj : {
15
15
  default: obj
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/start/server/metro/runServer-fork.ts"],"sourcesContent":["// Copyright © 2023 650 Industries.\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forks https://github.com/facebook/metro/blob/b80d9a0f638ee9fb82ff69cd3c8d9f4309ca1da2/packages/metro/src/index.flow.js#L57\n// and adds the ability to access the bundler instance.\nimport assert from 'assert';\nimport http from 'http';\nimport https from 'https';\nimport { RunServerOptions, Server } from 'metro';\nimport { ConfigT } from 'metro-config';\nimport type { InspectorProxy } from 'metro-inspector-proxy';\nimport { parse } from 'url';\n\nimport { env } from '../../../utils/env';\nimport type { ConnectAppType } from '../middleware/server.types';\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { createInspectorProxy, ExpoInspectorProxy } from './inspector-proxy';\nimport {\n importMetroCreateWebsocketServerFromProject,\n importMetroFromProject,\n importMetroHmrServerFromProject,\n importMetroInspectorProxyFromProject,\n} from './resolveFromProject';\n\nexport const runServer = async (\n metroBundler: MetroBundlerDevServer,\n config: ConfigT,\n {\n hasReducedPerformance = false,\n host,\n onError,\n onReady,\n secureServerOptions,\n waitForBundler = false,\n websocketEndpoints = {},\n watch,\n }: RunServerOptions\n): Promise<{ server: http.Server | https.Server; metro: Server }> => {\n const projectRoot = metroBundler.projectRoot;\n\n const Metro = importMetroFromProject(projectRoot);\n\n const createWebsocketServer = importMetroCreateWebsocketServerFromProject(projectRoot);\n\n const MetroHmrServer = importMetroHmrServerFromProject(projectRoot);\n\n // await earlyPortCheck(host, config.server.port);\n\n // if (secure != null || secureCert != null || secureKey != null) {\n // // eslint-disable-next-line no-console\n // console.warn(\n // chalk.inverse.yellow.bold(' DEPRECATED '),\n // 'The `secure`, `secureCert`, and `secureKey` options are now deprecated. ' +\n // 'Please use the `secureServerOptions` object instead to pass options to ' +\n // \"Metro's https development server.\",\n // );\n // }\n\n const { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {\n hasReducedPerformance,\n waitForBundler,\n watch,\n });\n\n assert(typeof (middleware as any).use === 'function');\n const serverApp = middleware as ConnectAppType;\n\n let inspectorProxy: InspectorProxy | ExpoInspectorProxy | null = null;\n if (config.server.runInspectorProxy && !env.EXPO_NO_INSPECTOR_PROXY) {\n inspectorProxy = createInspectorProxy(metroBundler, config.projectRoot);\n } else if (config.server.runInspectorProxy) {\n const { InspectorProxy } = importMetroInspectorProxyFromProject(projectRoot);\n inspectorProxy = new InspectorProxy(config.projectRoot);\n }\n\n let httpServer: http.Server | https.Server;\n\n if (secureServerOptions != null) {\n httpServer = https.createServer(secureServerOptions, serverApp);\n } else {\n httpServer = http.createServer(serverApp);\n }\n return new Promise<{ server: http.Server | https.Server; metro: Server }>((resolve, reject) => {\n httpServer.on('error', (error) => {\n if (onError) {\n onError(error);\n }\n reject(error);\n end();\n });\n\n httpServer.listen(config.server.port, host, () => {\n if (onReady) {\n onReady(httpServer);\n }\n\n Object.assign(websocketEndpoints, {\n ...(inspectorProxy ? { ...inspectorProxy.createWebSocketListeners(httpServer) } : {}),\n '/hot': createWebsocketServer({\n websocketServer: new MetroHmrServer(\n metroServer.getBundler(),\n metroServer.getCreateModuleId(),\n config\n ),\n }),\n });\n\n httpServer.on('upgrade', (request, socket, head) => {\n const { pathname } = parse(request.url!);\n if (pathname != null && websocketEndpoints[pathname]) {\n websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {\n websocketEndpoints[pathname].emit('connection', ws, request);\n });\n } else {\n socket.destroy();\n }\n });\n\n if (inspectorProxy) {\n // TODO(hypuk): Refactor inspectorProxy.processRequest into separate request handlers\n // so that we could provide routes (/json/list and /json/version) here.\n // Currently this causes Metro to give warning about T31407894.\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n serverApp.use(inspectorProxy.processRequest.bind(inspectorProxy));\n }\n\n resolve({ server: httpServer, metro: metroServer });\n });\n\n // Disable any kind of automatic timeout behavior for incoming\n // requests in case it takes the packager more than the default\n // timeout of 120 seconds to respond to a request.\n httpServer.timeout = 0;\n\n httpServer.on('close', () => {\n end();\n });\n });\n};\n"],"names":["runServer","metroBundler","config","hasReducedPerformance","host","onError","onReady","secureServerOptions","waitForBundler","websocketEndpoints","watch","projectRoot","Metro","importMetroFromProject","createWebsocketServer","importMetroCreateWebsocketServerFromProject","MetroHmrServer","importMetroHmrServerFromProject","middleware","end","metroServer","createConnectMiddleware","assert","use","serverApp","inspectorProxy","server","runInspectorProxy","env","EXPO_NO_INSPECTOR_PROXY","createInspectorProxy","InspectorProxy","importMetroInspectorProxyFromProject","httpServer","https","createServer","http","Promise","resolve","reject","on","error","listen","port","Object","assign","createWebSocketListeners","websocketServer","getBundler","getCreateModuleId","request","socket","head","pathname","parse","url","handleUpgrade","ws","emit","destroy","processRequest","bind","metro","timeout"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../src/start/server/metro/runServer-fork.ts"],"sourcesContent":["// Copyright © 2023 650 Industries.\n// Copyright (c) Meta Platforms, Inc. and affiliates.\n//\n// Forks https://github.com/facebook/metro/blob/b80d9a0f638ee9fb82ff69cd3c8d9f4309ca1da2/packages/metro/src/index.flow.js#L57\n// and adds the ability to access the bundler instance.\nimport assert from 'assert';\nimport http from 'http';\nimport https from 'https';\nimport { RunServerOptions, Server } from 'metro';\nimport { ConfigT } from 'metro-config';\nimport type { InspectorProxy } from 'metro-inspector-proxy';\nimport { parse } from 'url';\n\nimport { MetroBundlerDevServer } from './MetroBundlerDevServer';\nimport { createInspectorProxy, ExpoInspectorProxy } from './inspector-proxy';\nimport {\n importMetroCreateWebsocketServerFromProject,\n importMetroFromProject,\n importMetroHmrServerFromProject,\n importMetroInspectorProxyFromProject,\n} from './resolveFromProject';\nimport { env } from '../../../utils/env';\nimport type { ConnectAppType } from '../middleware/server.types';\n\nexport const runServer = async (\n metroBundler: MetroBundlerDevServer,\n config: ConfigT,\n {\n hasReducedPerformance = false,\n host,\n onError,\n onReady,\n secureServerOptions,\n waitForBundler = false,\n websocketEndpoints = {},\n watch,\n }: RunServerOptions\n): Promise<{ server: http.Server | https.Server; metro: Server }> => {\n const projectRoot = metroBundler.projectRoot;\n\n const Metro = importMetroFromProject(projectRoot);\n\n const createWebsocketServer = importMetroCreateWebsocketServerFromProject(projectRoot);\n\n const MetroHmrServer = importMetroHmrServerFromProject(projectRoot);\n\n // await earlyPortCheck(host, config.server.port);\n\n // if (secure != null || secureCert != null || secureKey != null) {\n // // eslint-disable-next-line no-console\n // console.warn(\n // chalk.inverse.yellow.bold(' DEPRECATED '),\n // 'The `secure`, `secureCert`, and `secureKey` options are now deprecated. ' +\n // 'Please use the `secureServerOptions` object instead to pass options to ' +\n // \"Metro's https development server.\",\n // );\n // }\n\n const { middleware, end, metroServer } = await Metro.createConnectMiddleware(config, {\n hasReducedPerformance,\n waitForBundler,\n watch,\n });\n\n assert(typeof (middleware as any).use === 'function');\n const serverApp = middleware as ConnectAppType;\n\n let inspectorProxy: InspectorProxy | ExpoInspectorProxy | null = null;\n if (config.server.runInspectorProxy && !env.EXPO_NO_INSPECTOR_PROXY) {\n inspectorProxy = createInspectorProxy(metroBundler, config.projectRoot);\n } else if (config.server.runInspectorProxy) {\n const { InspectorProxy } = importMetroInspectorProxyFromProject(projectRoot);\n inspectorProxy = new InspectorProxy(config.projectRoot);\n }\n\n let httpServer: http.Server | https.Server;\n\n if (secureServerOptions != null) {\n httpServer = https.createServer(secureServerOptions, serverApp);\n } else {\n httpServer = http.createServer(serverApp);\n }\n return new Promise<{ server: http.Server | https.Server; metro: Server }>((resolve, reject) => {\n httpServer.on('error', (error) => {\n if (onError) {\n onError(error);\n }\n reject(error);\n end();\n });\n\n httpServer.listen(config.server.port, host, () => {\n if (onReady) {\n onReady(httpServer);\n }\n\n Object.assign(websocketEndpoints, {\n ...(inspectorProxy ? { ...inspectorProxy.createWebSocketListeners(httpServer) } : {}),\n '/hot': createWebsocketServer({\n websocketServer: new MetroHmrServer(\n metroServer.getBundler(),\n metroServer.getCreateModuleId(),\n config\n ),\n }),\n });\n\n httpServer.on('upgrade', (request, socket, head) => {\n const { pathname } = parse(request.url!);\n if (pathname != null && websocketEndpoints[pathname]) {\n websocketEndpoints[pathname].handleUpgrade(request, socket, head, (ws) => {\n websocketEndpoints[pathname].emit('connection', ws, request);\n });\n } else {\n socket.destroy();\n }\n });\n\n if (inspectorProxy) {\n // TODO(hypuk): Refactor inspectorProxy.processRequest into separate request handlers\n // so that we could provide routes (/json/list and /json/version) here.\n // Currently this causes Metro to give warning about T31407894.\n // $FlowFixMe[method-unbinding] added when improving typing for this parameters\n serverApp.use(inspectorProxy.processRequest.bind(inspectorProxy));\n }\n\n resolve({ server: httpServer, metro: metroServer });\n });\n\n // Disable any kind of automatic timeout behavior for incoming\n // requests in case it takes the packager more than the default\n // timeout of 120 seconds to respond to a request.\n httpServer.timeout = 0;\n\n httpServer.on('close', () => {\n end();\n });\n });\n};\n"],"names":["runServer","metroBundler","config","hasReducedPerformance","host","onError","onReady","secureServerOptions","waitForBundler","websocketEndpoints","watch","projectRoot","Metro","importMetroFromProject","createWebsocketServer","importMetroCreateWebsocketServerFromProject","MetroHmrServer","importMetroHmrServerFromProject","middleware","end","metroServer","createConnectMiddleware","assert","use","serverApp","inspectorProxy","server","runInspectorProxy","env","EXPO_NO_INSPECTOR_PROXY","createInspectorProxy","InspectorProxy","importMetroInspectorProxyFromProject","httpServer","https","createServer","http","Promise","resolve","reject","on","error","listen","port","Object","assign","createWebSocketListeners","websocketServer","getBundler","getCreateModuleId","request","socket","head","pathname","parse","url","handleUpgrade","ws","emit","destroy","processRequest","bind","metro","timeout"],"mappings":"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"}
@@ -2,13 +2,20 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
+ exports.getNodejsExtensions = getNodejsExtensions;
5
6
  exports.withExtendedResolver = withExtendedResolver;
6
7
  exports.shouldAliasAssetRegistryForWeb = shouldAliasAssetRegistryForWeb;
8
+ exports.shouldAliasModule = shouldAliasModule;
7
9
  exports.withMetroMultiPlatformAsync = withMetroMultiPlatformAsync;
8
10
  var _chalk = _interopRequireDefault(require("chalk"));
9
11
  var _fs = _interopRequireDefault(require("fs"));
10
12
  var _path = _interopRequireDefault(require("path"));
11
13
  var _resolveFrom = _interopRequireDefault(require("resolve-from"));
14
+ var _externals = require("./externals");
15
+ var _metroErrors = require("./metroErrors");
16
+ var _resolveFromProject = require("./resolveFromProject");
17
+ var _router = require("./router");
18
+ var _withMetroResolvers = require("./withMetroResolvers");
12
19
  var _log = require("../../../log");
13
20
  var _fileNotifier = require("../../../utils/FileNotifier");
14
21
  var _env = require("../../../utils/env");
@@ -18,11 +25,6 @@ var _link = require("../../../utils/link");
18
25
  var _loadTsConfigPaths = require("../../../utils/tsconfig/loadTsConfigPaths");
19
26
  var _resolveWithTsConfigPaths = require("../../../utils/tsconfig/resolveWithTsConfigPaths");
20
27
  var _webSupportProjectPrerequisite = require("../../doctor/web/WebSupportProjectPrerequisite");
21
- var _externals = require("./externals");
22
- var _metroErrors = require("./metroErrors");
23
- var _resolveFromProject = require("./resolveFromProject");
24
- var _router = require("./router");
25
- var _withMetroResolvers = require("./withMetroResolvers");
26
28
  function _interopRequireDefault(obj) {
27
29
  return obj && obj.__esModule ? obj : {
28
30
  default: obj
@@ -57,12 +59,30 @@ function withWebPolyfills(config, projectRoot) {
57
59
  function normalizeSlashes(p) {
58
60
  return p.replace(/\\/g, "/");
59
61
  }
62
+ function getNodejsExtensions(srcExts) {
63
+ const mjsExts = srcExts.filter((ext)=>/mjs$/.test(ext)
64
+ );
65
+ const nodejsSourceExtensions = srcExts.filter((ext)=>!/mjs$/.test(ext)
66
+ );
67
+ // find index of last `*.js` extension
68
+ const jsIndex = nodejsSourceExtensions.reduce((index, ext, i)=>{
69
+ return /jsx?$/.test(ext) ? i : index;
70
+ }, -1);
71
+ // insert `*.mjs` extensions after `*.js` extensions
72
+ nodejsSourceExtensions.splice(jsIndex + 1, 0, ...mjsExts);
73
+ return nodejsSourceExtensions;
74
+ }
60
75
  function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isTsconfigPathsEnabled }) {
61
76
  // Get the `transformer.assetRegistryPath`
62
77
  // this needs to be unified since you can't dynamically
63
78
  // swap out the transformer based on platform.
64
79
  const assetRegistryPath = _fs.default.realpathSync(// This is the native asset registry alias for native.
65
80
  _path.default.resolve((0, _resolveFrom).default(projectRoot, "react-native/Libraries/Image/AssetRegistry")));
81
+ let reactNativeWebAppContainer = null;
82
+ try {
83
+ reactNativeWebAppContainer = _fs.default.realpathSync(// This is the native asset registry alias for native.
84
+ _path.default.resolve((0, _resolveFrom).default(projectRoot, "expo-router/build/fork/react-native-web-container")));
85
+ } catch {}
66
86
  const isWebEnabled = platforms.includes("web");
67
87
  const { resolve } = (0, _resolveFromProject).importMetroResolverFromProject(projectRoot);
68
88
  const extraNodeModules = {};
@@ -124,6 +144,7 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
124
144
  } else {
125
145
  debug("Skipping tsconfig.json paths support");
126
146
  }
147
+ let nodejsSourceExtensions = null;
127
148
  return (0, _withMetroResolvers).withMetroResolvers(config, projectRoot, [
128
149
  // Add a resolver to alias the web asset resolver.
129
150
  (immutableContext, moduleName1, platform)=>{
@@ -141,6 +162,11 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
141
162
  moduleName1 = (0, _externals).getNodeExternalModuleId(context.originModulePath, moduleId);
142
163
  debug(`Redirecting Node.js external "${moduleId}" to "${moduleName1}"`);
143
164
  }
165
+ // Adjust nodejs source extensions to sort mjs after js, including platform variants.
166
+ if (nodejsSourceExtensions === null) {
167
+ nodejsSourceExtensions = getNodejsExtensions(context.sourceExts);
168
+ }
169
+ context.sourceExts = nodejsSourceExtensions;
144
170
  }
145
171
  // Conditionally remap `react-native` to `react-native-web` on web in
146
172
  // a way that doesn't require Babel to resolve the alias.
@@ -171,7 +197,8 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
171
197
  // Node.js runtimes should only be importing main at the moment.
172
198
  // This is a temporary fix until we can support the package.json exports.
173
199
  mainFields = [
174
- "main"
200
+ "main",
201
+ "module"
175
202
  ];
176
203
  } else if (_env.env.EXPO_METRO_NO_MAIN_FIELD_OVERRIDE) {
177
204
  mainFields = context.mainFields;
@@ -208,6 +235,14 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
208
235
  return null;
209
236
  }
210
237
  let result = null;
238
+ // React Native uses `event-target-shim` incorrectly and this causes the native runtime
239
+ // to fail to load. This is a temporary workaround until we can fix this upstream.
240
+ // https://github.com/facebook/react-native/pull/38628
241
+ if (moduleName1.includes("event-target-shim") && context.originModulePath.includes(_path.default.sep + "react-native" + _path.default.sep)) {
242
+ context.sourceExts = context.sourceExts.filter((f)=>!f.includes("mjs")
243
+ );
244
+ debug("Skip mjs support for event-target-shim in:", context.originModulePath);
245
+ }
211
246
  if (tsConfigResolve) {
212
247
  result = tsConfigResolve({
213
248
  originModulePath: context.originModulePath,
@@ -222,6 +257,20 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
222
257
  // @ts-expect-error: `readonly` for some reason.
223
258
  result.filePath = assetRegistryPath;
224
259
  }
260
+ // React Native Web adds a couple extra divs for no reason, these
261
+ // make static rendering much harder as we expect the root element to be `<html>`.
262
+ // This resolution will alias to a simple in-out component to avoid React Native web.
263
+ if (// Only apply the transform if expo-router is present.
264
+ reactNativeWebAppContainer && shouldAliasModule({
265
+ platform,
266
+ result
267
+ }, {
268
+ platform: "web",
269
+ output: "react-native-web/dist/exports/AppRegistry/AppContainer.js"
270
+ })) {
271
+ // @ts-expect-error: `readonly` for some reason.
272
+ result.filePath = reactNativeWebAppContainer;
273
+ }
225
274
  }
226
275
  return result;
227
276
  },
@@ -230,6 +279,10 @@ function withExtendedResolver(config, { projectRoot , tsconfig , platforms , isT
230
279
  function shouldAliasAssetRegistryForWeb(platform, result) {
231
280
  return platform === "web" && (result == null ? void 0 : result.type) === "sourceFile" && typeof (result == null ? void 0 : result.filePath) === "string" && normalizeSlashes(result.filePath).endsWith("react-native-web/dist/modules/AssetRegistry/index.js");
232
281
  }
282
+ function shouldAliasModule(input, alias) {
283
+ var ref, ref1;
284
+ return input.platform === alias.platform && ((ref = input.result) == null ? void 0 : ref.type) === "sourceFile" && typeof ((ref1 = input.result) == null ? void 0 : ref1.filePath) === "string" && normalizeSlashes(input.result.filePath).endsWith(alias.output);
285
+ }
233
286
  async function withMetroMultiPlatformAsync(projectRoot, { config , platformBundlers , isTsconfigPathsEnabled , webOutput , routerDirectory }) {
234
287
  // Auto pick app entry for router.
235
288
  process.env.EXPO_ROUTER_APP_ROOT = (0, _router).getAppRouterRelativeEntryPath(projectRoot, routerDirectory);
@@ -248,9 +301,6 @@ async function withMetroMultiPlatformAsync(projectRoot, { config , platformBundl
248
301
  // TODO: import mode
249
302
  if (platformBundlers.web === "metro") {
250
303
  await new _webSupportProjectPrerequisite.WebSupportProjectPrerequisite(projectRoot).assertAsync();
251
- } else if (!isTsconfigPathsEnabled) {
252
- // Bail out early for performance enhancements if no special features are enabled.
253
- return config;
254
304
  }
255
305
  let tsconfig = null;
256
306
  if (isTsconfigPathsEnabled) {