@expo/cli 54.1.0-canary-20251023-4c86f95 → 54.1.0-canary-20260119-17896bf

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 (186) hide show
  1. package/add-module.js +4 -1
  2. package/build/bin/cli +3 -1
  3. package/build/bin/cli.map +1 -1
  4. package/build/src/export/embed/exportEmbedAsync.js +1 -2
  5. package/build/src/export/embed/exportEmbedAsync.js.map +1 -1
  6. package/build/src/install/applyPlugins.js +2 -1
  7. package/build/src/install/applyPlugins.js.map +1 -1
  8. package/build/src/install/fixPackages.js +1 -1
  9. package/build/src/install/fixPackages.js.map +1 -1
  10. package/build/src/install/installAsync.js +1 -1
  11. package/build/src/install/installAsync.js.map +1 -1
  12. package/build/src/install/utils/parsePackageSpecifier.js +24 -0
  13. package/build/src/install/utils/parsePackageSpecifier.js.map +1 -0
  14. package/build/src/run/ios/runIosAsync.js +8 -0
  15. package/build/src/run/ios/runIosAsync.js.map +1 -1
  16. package/build/src/start/interface/commandsTable.js.map +1 -1
  17. package/build/src/start/interface/interactiveActions.js +14 -9
  18. package/build/src/start/interface/interactiveActions.js.map +1 -1
  19. package/build/src/start/interface/startInterface.js +3 -0
  20. package/build/src/start/interface/startInterface.js.map +1 -1
  21. package/build/src/start/platforms/android/adb.js +1 -1
  22. package/build/src/start/platforms/android/adb.js.map +1 -1
  23. package/build/src/start/server/DevToolsPluginManager.js +8 -4
  24. package/build/src/start/server/DevToolsPluginManager.js.map +1 -1
  25. package/build/src/start/server/MCP.js +28 -5
  26. package/build/src/start/server/MCP.js.map +1 -1
  27. package/build/src/start/server/UrlCreator.js +1 -1
  28. package/build/src/start/server/UrlCreator.js.map +1 -1
  29. package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js +10 -2
  30. package/build/src/start/server/metro/DevToolsPluginWebsocketEndpoint.js.map +1 -1
  31. package/build/src/start/server/metro/MetroBundlerDevServer.js +29 -155
  32. package/build/src/start/server/metro/MetroBundlerDevServer.js.map +1 -1
  33. package/build/src/start/server/metro/MetroTerminalReporter.js +151 -33
  34. package/build/src/start/server/metro/MetroTerminalReporter.js.map +1 -1
  35. package/build/src/start/server/metro/createExpoAutolinkingResolver.js +1 -3
  36. package/build/src/start/server/metro/createExpoAutolinkingResolver.js.map +1 -1
  37. package/build/src/start/server/metro/createExpoFallbackResolver.js +1 -3
  38. package/build/src/start/server/metro/createExpoFallbackResolver.js.map +1 -1
  39. package/build/src/start/server/metro/createServerComponentsMiddleware.js +1 -2
  40. package/build/src/start/server/metro/createServerComponentsMiddleware.js.map +1 -1
  41. package/build/src/start/server/metro/createServerRouteMiddleware.js +2 -2
  42. package/build/src/start/server/metro/createServerRouteMiddleware.js.map +1 -1
  43. package/build/src/start/server/metro/debugging/createDebugMiddleware.js +23 -9
  44. package/build/src/start/server/metro/debugging/createDebugMiddleware.js.map +1 -1
  45. package/build/src/start/server/metro/dev-server/compression.js +45 -0
  46. package/build/src/start/server/metro/dev-server/compression.js.map +1 -0
  47. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js +2 -2
  48. package/build/src/start/server/metro/dev-server/createMetroMiddleware.js.map +1 -1
  49. package/build/src/start/server/metro/externals.js +11 -0
  50. package/build/src/start/server/metro/externals.js.map +1 -1
  51. package/build/src/start/server/metro/fetchRouterManifest.js +1 -1
  52. package/build/src/start/server/metro/fetchRouterManifest.js.map +1 -1
  53. package/build/src/start/server/metro/instantiateMetro.js +98 -27
  54. package/build/src/start/server/metro/instantiateMetro.js.map +1 -1
  55. package/build/src/start/server/metro/log-box/LogBoxLog.js +7 -11
  56. package/build/src/start/server/metro/log-box/LogBoxLog.js.map +1 -1
  57. package/build/src/start/server/metro/log-box/LogBoxSymbolication.js.map +1 -1
  58. package/build/src/start/server/metro/metroErrorInterface.js +43 -14
  59. package/build/src/start/server/metro/metroErrorInterface.js.map +1 -1
  60. package/build/src/start/server/metro/withMetroMultiPlatform.js +74 -57
  61. package/build/src/start/server/metro/withMetroMultiPlatform.js.map +1 -1
  62. package/build/src/start/server/middleware/CorsMiddleware.js +43 -12
  63. package/build/src/start/server/middleware/CorsMiddleware.js.map +1 -1
  64. package/build/src/start/server/middleware/CreateFileMiddleware.js +63 -24
  65. package/build/src/start/server/middleware/CreateFileMiddleware.js.map +1 -1
  66. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js +3 -1
  67. package/build/src/start/server/middleware/ExpoGoManifestHandlerMiddleware.js.map +1 -1
  68. package/build/src/start/server/middleware/ManifestMiddleware.js +14 -9
  69. package/build/src/start/server/middleware/ManifestMiddleware.js.map +1 -1
  70. package/build/src/start/startAsync.js +12 -9
  71. package/build/src/start/startAsync.js.map +1 -1
  72. package/build/src/utils/env.js +36 -2
  73. package/build/src/utils/env.js.map +1 -1
  74. package/build/src/utils/interactive.js +1 -1
  75. package/build/src/utils/interactive.js.map +1 -1
  76. package/build/src/utils/jsonl.js +243 -0
  77. package/build/src/utils/jsonl.js.map +1 -0
  78. package/build/src/utils/net.js +43 -0
  79. package/build/src/utils/net.js.map +1 -0
  80. package/build/src/utils/progress.js +5 -0
  81. package/build/src/utils/progress.js.map +1 -1
  82. package/build/src/utils/telemetry/clients/FetchClient.js +1 -1
  83. package/build/src/utils/telemetry/utils/context.js +1 -1
  84. package/build/src/utils/url.js +4 -8
  85. package/build/src/utils/url.js.map +1 -1
  86. package/package.json +25 -28
  87. package/static/canary/react-is/cjs/react-is.development.js +133 -0
  88. package/static/canary/react-is/cjs/react-is.production.js +130 -0
  89. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-dev.js +16820 -0
  90. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-prod.js +10552 -0
  91. package/static/canary/react-native/Libraries/Renderer/implementations/ReactFabric-profiling.js +11255 -0
  92. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js +17064 -0
  93. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-prod.js +10742 -0
  94. package/static/canary/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-profiling.js +11450 -0
  95. package/static/canary/scheduler/cjs/scheduler-unstable_mock.development.js +414 -0
  96. package/static/canary/scheduler/cjs/scheduler-unstable_mock.production.js +406 -0
  97. package/static/canary/scheduler/cjs/scheduler-unstable_post_task.development.js +150 -0
  98. package/static/canary/scheduler/cjs/scheduler-unstable_post_task.production.js +140 -0
  99. package/static/canary/scheduler/cjs/scheduler.development.js +364 -0
  100. package/static/canary/scheduler/cjs/scheduler.native.development.js +350 -0
  101. package/static/canary/scheduler/cjs/scheduler.native.production.js +330 -0
  102. package/static/canary/scheduler/cjs/scheduler.production.js +340 -0
  103. package/static/canary-full/node_modules/react/LICENSE +21 -0
  104. package/static/canary-full/node_modules/react/README.md +37 -0
  105. package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.development.js +24 -0
  106. package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.production.js +16 -0
  107. package/static/canary-full/node_modules/react/cjs/react-compiler-runtime.profiling.js +16 -0
  108. package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.development.js +349 -0
  109. package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.production.js +14 -0
  110. package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.profiling.js +14 -0
  111. package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.react-server.development.js +385 -0
  112. package/static/canary-full/node_modules/react/cjs/react-jsx-dev-runtime.react-server.production.js +40 -0
  113. package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.development.js +358 -0
  114. package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.production.js +34 -0
  115. package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.profiling.js +34 -0
  116. package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.react-server.development.js +385 -0
  117. package/static/canary-full/node_modules/react/cjs/react-jsx-runtime.react-server.production.js +40 -0
  118. package/static/canary-full/node_modules/react/cjs/react.development.js +1250 -0
  119. package/static/canary-full/node_modules/react/cjs/react.production.js +544 -0
  120. package/static/canary-full/node_modules/react/cjs/react.react-server.development.js +815 -0
  121. package/static/canary-full/node_modules/react/cjs/react.react-server.production.js +429 -0
  122. package/static/canary-full/node_modules/react/compiler-runtime.js +14 -0
  123. package/static/canary-full/node_modules/react/index.js +7 -0
  124. package/static/canary-full/node_modules/react/jsx-dev-runtime.js +7 -0
  125. package/static/canary-full/node_modules/react/jsx-dev-runtime.react-server.js +7 -0
  126. package/static/canary-full/node_modules/react/jsx-runtime.js +7 -0
  127. package/static/canary-full/node_modules/react/jsx-runtime.react-server.js +7 -0
  128. package/static/canary-full/node_modules/react/package.json +51 -0
  129. package/static/canary-full/node_modules/react/react.react-server.js +7 -0
  130. package/static/canary-full/node_modules/react-dom/LICENSE +21 -0
  131. package/static/canary-full/node_modules/react-dom/README.md +60 -0
  132. package/static/canary-full/node_modules/react-dom/cjs/react-dom-client.development.js +25089 -0
  133. package/static/canary-full/node_modules/react-dom/cjs/react-dom-client.production.js +15426 -0
  134. package/static/canary-full/node_modules/react-dom/cjs/react-dom-profiling.development.js +25476 -0
  135. package/static/canary-full/node_modules/react-dom/cjs/react-dom-profiling.profiling.js +16296 -0
  136. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.browser.development.js +9035 -0
  137. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.browser.production.js +5892 -0
  138. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.node.development.js +9035 -0
  139. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server-legacy.node.production.js +5972 -0
  140. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.browser.development.js +9424 -0
  141. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.browser.production.js +6384 -0
  142. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.bun.development.js +8739 -0
  143. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.bun.production.js +5967 -0
  144. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.edge.development.js +9443 -0
  145. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.edge.production.js +6477 -0
  146. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.node.development.js +9317 -0
  147. package/static/canary-full/node_modules/react-dom/cjs/react-dom-server.node.production.js +6372 -0
  148. package/static/canary-full/node_modules/react-dom/cjs/react-dom-test-utils.development.js +24 -0
  149. package/static/canary-full/node_modules/react-dom/cjs/react-dom-test-utils.production.js +21 -0
  150. package/static/canary-full/node_modules/react-dom/cjs/react-dom.development.js +424 -0
  151. package/static/canary-full/node_modules/react-dom/cjs/react-dom.production.js +210 -0
  152. package/static/canary-full/node_modules/react-dom/cjs/react-dom.react-server.development.js +340 -0
  153. package/static/canary-full/node_modules/react-dom/cjs/react-dom.react-server.production.js +152 -0
  154. package/static/canary-full/node_modules/react-dom/client.js +38 -0
  155. package/static/canary-full/node_modules/react-dom/client.react-server.js +5 -0
  156. package/static/canary-full/node_modules/react-dom/index.js +38 -0
  157. package/static/canary-full/node_modules/react-dom/package.json +117 -0
  158. package/static/canary-full/node_modules/react-dom/profiling.js +38 -0
  159. package/static/canary-full/node_modules/react-dom/profiling.react-server.js +5 -0
  160. package/static/canary-full/node_modules/react-dom/react-dom.react-server.js +7 -0
  161. package/static/canary-full/node_modules/react-dom/server.browser.js +18 -0
  162. package/static/canary-full/node_modules/react-dom/server.bun.js +19 -0
  163. package/static/canary-full/node_modules/react-dom/server.edge.js +19 -0
  164. package/static/canary-full/node_modules/react-dom/server.js +3 -0
  165. package/static/canary-full/node_modules/react-dom/server.node.js +18 -0
  166. package/static/canary-full/node_modules/react-dom/server.react-server.js +5 -0
  167. package/static/canary-full/node_modules/react-dom/static.browser.js +12 -0
  168. package/static/canary-full/node_modules/react-dom/static.edge.js +12 -0
  169. package/static/canary-full/node_modules/react-dom/static.js +3 -0
  170. package/static/canary-full/node_modules/react-dom/static.node.js +12 -0
  171. package/static/canary-full/node_modules/react-dom/static.react-server.js +5 -0
  172. package/static/canary-full/node_modules/react-dom/test-utils.js +7 -0
  173. package/build/src/start/interface/cliExtensionMenuItemHandler.js +0 -173
  174. package/build/src/start/interface/cliExtensionMenuItemHandler.js.map +0 -1
  175. package/build/src/start/interface/createDevToolsMenuItems.js +0 -159
  176. package/build/src/start/interface/createDevToolsMenuItems.js.map +0 -1
  177. package/build/src/start/server/DevToolsPlugin.js +0 -60
  178. package/build/src/start/server/DevToolsPlugin.js.map +0 -1
  179. package/build/src/start/server/DevToolsPlugin.schema.js +0 -79
  180. package/build/src/start/server/DevToolsPlugin.schema.js.map +0 -1
  181. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js +0 -119
  182. package/build/src/start/server/DevToolsPluginCliExtensionExecutor.js.map +0 -1
  183. package/build/src/start/server/DevToolsPluginCliExtensionResults.js +0 -61
  184. package/build/src/start/server/DevToolsPluginCliExtensionResults.js.map +0 -1
  185. package/build/src/start/server/middleware/DataLoaderModuleMiddleware.js +0 -75
  186. package/build/src/start/server/middleware/DataLoaderModuleMiddleware.js.map +0 -1
@@ -83,13 +83,6 @@ function _path() {
83
83
  };
84
84
  return data;
85
85
  }
86
- function _resolvefrom() {
87
- const data = /*#__PURE__*/ _interop_require_default(require("resolve-from"));
88
- _resolvefrom = function() {
89
- return data;
90
- };
91
- return data;
92
- }
93
86
  const _createServerComponentsMiddleware = require("./createServerComponentsMiddleware");
94
87
  const _createServerRouteMiddleware = require("./createServerRouteMiddleware");
95
88
  const _fetchRouterManifest = require("./fetchRouterManifest");
@@ -108,7 +101,6 @@ const _BundlerDevServer = require("../BundlerDevServer");
108
101
  const _getStaticRenderFunctions = require("../getStaticRenderFunctions");
109
102
  const _ContextModuleSourceMapsMiddleware = require("../middleware/ContextModuleSourceMapsMiddleware");
110
103
  const _CreateFileMiddleware = require("../middleware/CreateFileMiddleware");
111
- const _DataLoaderModuleMiddleware = require("../middleware/DataLoaderModuleMiddleware");
112
104
  const _DevToolsPluginMiddleware = require("../middleware/DevToolsPluginMiddleware");
113
105
  const _DomComponentsMiddleware = require("../middleware/DomComponentsMiddleware");
114
106
  const _FaviconMiddleware = require("../middleware/FaviconMiddleware");
@@ -246,7 +238,10 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
246
238
  debug('Adding RSC route to the manifest:', rscPath);
247
239
  // NOTE: This might need to be sorted to the correct spot in the future.
248
240
  manifest.apiRoutes.push({
249
- file: (0, _resolvefrom().default)(this.projectRoot, '@expo/cli/static/template/[...rsc]+api.ts'),
241
+ // TODO(@kitten): This isn't great, we shouldn't be needing to rely on files like this
242
+ // It might even be better to make templating strings since that'd be type-checked, but currently,
243
+ // we rely on this being an entrypoint for Metro
244
+ file: require.resolve('@expo/cli/static/template/[...rsc]+api.ts'),
250
245
  page: rscPath,
251
246
  namedRegex: '^/_flight(?:/(?<rsc>.+?))?(?:/)?$',
252
247
  routeKeys: {
@@ -307,7 +302,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
307
302
  var _exp_extra, _exp_extra1;
308
303
  const { exp } = (0, _config().getConfig)(this.projectRoot);
309
304
  // NOTE: This could probably be folded back into `renderStaticContent` when expo-asset and font support RSC.
310
- const { getBuildTimeServerManifestAsync, getManifest } = await this.ssrLoadModule('@expo/router-server/build/static/getServerManifest.js', {
305
+ const { getBuildTimeServerManifestAsync, getManifest } = await this.ssrLoadModule('expo-router/build/static/getServerManifest.js', {
311
306
  // Only use react-server environment when the routes are using react-server rendering by default.
312
307
  environment: this.isReactServerRoutesEnabled ? 'react-server' : 'node'
313
308
  });
@@ -320,22 +315,19 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
320
315
  })
321
316
  };
322
317
  }
323
- /**
324
- * This function is invoked when exporting via `expo export`
325
- */ async getStaticRenderFunctionAsync() {
318
+ async getStaticRenderFunctionAsync() {
326
319
  var _exp_extra, _exp_extra1;
327
320
  const url = this.getDevServerUrlOrAssert();
328
- const { getStaticContent, getManifest, getBuildTimeServerManifestAsync } = await this.ssrLoadModule('@expo/router-server/node/render.js', {
321
+ const { getStaticContent, getManifest, getBuildTimeServerManifestAsync } = await this.ssrLoadModule('expo-router/node/render.js', {
329
322
  // This must always use the legacy rendering resolution (no `react-server`) because it leverages
330
323
  // the previous React SSG utilities which aren't available in React 19.
331
324
  environment: 'node'
332
325
  });
333
326
  const { exp } = (0, _config().getConfig)(this.projectRoot);
334
- const serverManifest = await getBuildTimeServerManifestAsync({
335
- ...(_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router
336
- });
337
327
  return {
338
- serverManifest,
328
+ serverManifest: await getBuildTimeServerManifestAsync({
329
+ ...(_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router
330
+ }),
339
331
  // Get routes from Expo Router.
340
332
  manifest: await getManifest({
341
333
  preserveApiRoutes: false,
@@ -371,10 +363,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
371
363
  bytecode: false
372
364
  });
373
365
  }
374
- /**
375
- * This function is invoked when running in development via `expo start`
376
- */ async getStaticPageAsync(pathname, route) {
377
- const { exp } = (0, _config().getConfig)(this.projectRoot);
366
+ async getStaticPageAsync(pathname) {
378
367
  const { mode, isExporting, clientBoundaries, baseUrl, reactCompiler, routerRoot, asyncRoutes } = this.instanceMetroOptions;
379
368
  (0, _assert().default)(mode != null && isExporting != null && baseUrl != null && reactCompiler != null && routerRoot != null && asyncRoutes != null, 'The server must be started before calling getStaticPageAsync.');
380
369
  const platform = 'web';
@@ -396,8 +385,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
396
385
  bytecode: false
397
386
  });
398
387
  const bundleStaticHtml = async ()=>{
399
- var _exp_extra_router, _exp_extra;
400
- const { getStaticContent } = await this.ssrLoadModule('@expo/router-server/node/render.js', {
388
+ const { getStaticContent } = await this.ssrLoadModule('expo-router/node/render.js', {
401
389
  // This must always use the legacy rendering resolution (no `react-server`) because it leverages
402
390
  // the previous React SSG utilities which aren't available in React 19.
403
391
  environment: 'node',
@@ -406,17 +394,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
406
394
  platform
407
395
  });
408
396
  const location = new URL(pathname, this.getDevServerUrlOrAssert());
409
- const useServerDataLoaders = (_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerDataLoaders;
410
- if (useServerDataLoaders) {
411
- const data = await this.executeServerDataLoaderAsync(location, route);
412
- return await getStaticContent(location, {
413
- loader: {
414
- data
415
- }
416
- });
417
- } else {
418
- return await getStaticContent(location);
419
- }
397
+ return await getStaticContent(location);
420
398
  };
421
399
  const [{ artifacts: resources }, staticHtml] = await Promise.all([
422
400
  this.getStaticResourcesAsync({
@@ -820,34 +798,13 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
820
798
  // Add support for DOM components.
821
799
  // TODO: Maybe put behind a flag for now?
822
800
  middleware.use(domComponentRenderer);
823
- // TODO: Disable both of these when tunneling to prevent security issues
824
- middleware.use(new _CreateFileMiddleware.CreateFileMiddleware(this.projectRoot).getHandler());
825
- // For providing info to the error overlay.
826
- middleware.use((req, res, next)=>{
827
- var _req_url;
828
- // Use by `@expo/log-box` https://github.com/expo/expo/blob/f29b9f3715e42dca87bf3eebf11f7e7dd1ff73c1/packages/%40expo/log-box/src/utils/devServerEndpoints.ts#L82
829
- if ((_req_url = req.url) == null ? void 0 : _req_url.startsWith('/_expo/error-overlay-meta')) {
830
- res.statusCode = 200;
831
- res.setHeader('Content-Type', 'application/json');
832
- res.end(JSON.stringify({
833
- projectRoot: this.projectRoot,
834
- serverRoot,
835
- sdkVersion: exp.sdkVersion
836
- }));
837
- return;
838
- }
839
- return next();
840
- });
801
+ middleware.use(new _CreateFileMiddleware.CreateFileMiddleware({
802
+ metroRoot: serverRoot,
803
+ projectRoot: this.projectRoot,
804
+ appDir
805
+ }).getHandler());
841
806
  // Append support for redirecting unhandled requests to the index.html page on web.
842
807
  if (this.isTargetingWeb()) {
843
- var _exp_extra_router1, _exp_extra2;
844
- if ((_exp_extra2 = exp.extra) == null ? void 0 : (_exp_extra_router1 = _exp_extra2.router) == null ? void 0 : _exp_extra_router1.unstable_useServerDataLoaders) {
845
- const loaderModuleMiddleware = new _DataLoaderModuleMiddleware.DataLoaderModuleMiddleware(this.projectRoot, appDir, async (location, route)=>{
846
- return this.executeServerDataLoaderAsync(location, route);
847
- }, ()=>this.getDevServerUrlOrAssert());
848
- // This MUST be before ServeStaticMiddleware so it doesn't treat the loader files as static assets
849
- middleware.use(loaderModuleMiddleware.getHandler());
850
- }
851
808
  // This MUST be after the manifest middleware so it doesn't have a chance to serve the template `public/index.html`.
852
809
  middleware.use(new _ServeStaticMiddleware.ServeStaticMiddleware(this.projectRoot).getHandler());
853
810
  // This should come after the static middleware so it doesn't serve the favicon from `public/favicon.ico`.
@@ -858,7 +815,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
858
815
  metro,
859
816
  server
860
817
  }, (events)=>{
861
- var _exp_extra_router, _exp_extra;
862
818
  if (hasApiRoutes) {
863
819
  // NOTE(EvanBacon): We aren't sure what files the API routes are using so we'll just invalidate
864
820
  // aggressively to ensure we always have the latest. The only caching we really get here is for
@@ -877,15 +833,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
877
833
  }
878
834
  }
879
835
  }
880
- // Handle loader file changes for HMR
881
- if ((_exp_extra = exp.extra) == null ? void 0 : (_exp_extra_router = _exp_extra.router) == null ? void 0 : _exp_extra_router.unstable_useServerDataLoaders) {
882
- for (const event of events){
883
- var _event_metadata1;
884
- if (((_event_metadata1 = event.metadata) == null ? void 0 : _event_metadata1.type) !== 'd') {
885
- this.handleLoaderFileChange(event.filePath);
886
- }
887
- }
888
- }
889
836
  });
890
837
  }
891
838
  // If React 19 is enabled, then add RSC middleware to the dev server.
@@ -919,7 +866,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
919
866
  bundleApiRoute: (functionFilePath)=>this.ssrImportApiRoute(functionFilePath, {
920
867
  platform: 'web'
921
868
  }),
922
- getStaticPageAsync: async (pathname, route)=>{
869
+ getStaticPageAsync: async (pathname)=>{
923
870
  // TODO: Add server rendering when RSC is enabled.
924
871
  if (isReactServerComponentsEnabled) {
925
872
  // NOTE: This is a temporary hack to return the SPA/template index.html in development when RSC is enabled.
@@ -930,7 +877,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
930
877
  };
931
878
  }
932
879
  // Non-RSC apps will bundle the static HTML for a given pathname and respond with it.
933
- return this.getStaticPageAsync(pathname, route);
880
+ return this.getStaticPageAsync(pathname);
934
881
  }
935
882
  }));
936
883
  }
@@ -1164,62 +1111,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
1164
1111
  invalidateApiRouteCache() {
1165
1112
  this.pendingRouteOperations.clear();
1166
1113
  }
1167
- /**
1168
- * Execute a route's loader function. Used during SSR/SSG to fetch data required by routes.
1169
- *
1170
- * This function is used during development and production builds, and **must** receive a valid
1171
- * matched route.
1172
- *
1173
- * @experimental
1174
- */ async executeServerDataLoaderAsync(location, route) {
1175
- var _exp_extra;
1176
- const { exp } = (0, _config().getConfig)(this.projectRoot);
1177
- const { unstable_useServerDataLoaders } = (_exp_extra = exp.extra) == null ? void 0 : _exp_extra.router;
1178
- if (!unstable_useServerDataLoaders) {
1179
- throw new _errors.CommandError('LOADERS_NOT_ENABLED', 'Server data loaders are not enabled. Add `unstable_useServerDataLoaders` to your `expo-router` plugin config.');
1180
- }
1181
- // If the route is unmatched, we can ignore it
1182
- // TODO(@hassankhan): Is this the best way of determining the route is unmatched?
1183
- if (route.page === '/+not-found') {
1184
- return;
1185
- }
1186
- const { routerRoot } = this.instanceMetroOptions;
1187
- (0, _assert().default)(routerRoot != null, 'The server must be started before calling executeRouteLoaderAsync.');
1188
- let loaderData;
1189
- try {
1190
- debug('Matched route loader to file: ', route.file);
1191
- // TODO(@hassankhan): This should move to a util function
1192
- const params = {};
1193
- const match = route.namedRegex.exec(location.pathname);
1194
- if (match == null ? void 0 : match.groups) {
1195
- for (const [key, value] of Object.entries(match.groups)){
1196
- const namedKey = route.routeKeys[key];
1197
- params[namedKey] = value;
1198
- }
1199
- }
1200
- let modulePath = route.file;
1201
- const appDir = _path().default.join(this.projectRoot, routerRoot);
1202
- modulePath = _path().default.isAbsolute(modulePath) ? modulePath : _path().default.join(appDir, modulePath);
1203
- modulePath = modulePath.replace(/\.(js|ts)x?$/, '');
1204
- debug('Using loader module path: ', modulePath);
1205
- const routeModule = await this.ssrLoadModule(modulePath, {
1206
- environment: 'node'
1207
- });
1208
- if (routeModule.loader) {
1209
- // Register this module for loader HMR
1210
- this.setupLoaderHmr(modulePath);
1211
- loaderData = await routeModule.loader({
1212
- params,
1213
- // NOTE(@hassankhan): The `request` object should only be available when using SSR
1214
- request: null
1215
- });
1216
- }
1217
- } catch (error) {
1218
- throw new _errors.CommandError('LOADER_EXECUTION_FAILED', `Failed to execute loader for route "${location.pathname}": ${error.message}`);
1219
- }
1220
- debug('Loader data:', loaderData, ' for location:', location.pathname);
1221
- return loaderData;
1222
- }
1223
1114
  // Ensure the global is available for SSR CSS modules to inject client updates.
1224
1115
  bindRSCDevModuleInjectionHandler() {
1225
1116
  // Used by SSR CSS modules to broadcast client updates.
@@ -1258,30 +1149,6 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
1258
1149
  };
1259
1150
  this.registerSsrHmrAsync(url.toString(), onReload);
1260
1151
  }
1261
- setupLoaderHmr(modulePath) {
1262
- if (this.watchedLoaderFiles.has(modulePath)) {
1263
- return;
1264
- }
1265
- this.watchedLoaderFiles.add(modulePath);
1266
- debug('[Loader HMR] Registering loader file for HMR:', modulePath);
1267
- }
1268
- handleLoaderFileChange(changedFilePath) {
1269
- for (const loaderPath of this.watchedLoaderFiles){
1270
- const possibleExtensions = [
1271
- '.tsx',
1272
- '.ts',
1273
- '.jsx',
1274
- '.js'
1275
- ];
1276
- const isLoaderFile = possibleExtensions.some((ext)=>changedFilePath === loaderPath + ext || changedFilePath === loaderPath);
1277
- if (isLoaderFile) {
1278
- debug('[Loader HMR] Loader file changed, triggering reload:', changedFilePath);
1279
- this.broadcastMessage('sendDevCommand', {
1280
- name: 'reload'
1281
- });
1282
- }
1283
- }
1284
- }
1285
1152
  // Direct Metro access
1286
1153
  // Emulates the Metro dev server .bundle endpoint without having to go through a server.
1287
1154
  async _bundleDirectAsync(resolvedEntryFilePath, { transformOptions, resolverOptions, graphOptions, serializerOptions }) {
@@ -1492,7 +1359,14 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
1492
1359
  constructor(...args){
1493
1360
  super(...args), this.metro = null, this.hmrServer = null, this.ssrHmrClients = new Map(), // Set when the server is started.
1494
1361
  this.instanceMetroOptions = {}, this.ssrLoadModule = async (filePath, specificOptions = {}, extras = {})=>{
1495
- const res = await this.ssrLoadModuleContents(filePath, specificOptions);
1362
+ // NOTE(@kitten): We don't properly initialize the server-side modules
1363
+ // Instead, we first load an entrypoint with an empty bundle to initialize the runtime instead
1364
+ // See: ./createServerComponentsMiddleware.ts
1365
+ const getEmptyModulePath = ()=>{
1366
+ (0, _assert().default)(this.metro, 'Metro server must be running to load SSR modules.');
1367
+ return this.metro._config.resolver.emptyModulePath;
1368
+ };
1369
+ const res = await this.ssrLoadModuleContents(filePath ?? getEmptyModulePath(), specificOptions);
1496
1370
  if (// TODO: hot should be a callback function for invalidating the related SSR module.
1497
1371
  extras.hot && this.instanceMetroOptions.isExporting !== true) {
1498
1372
  // Register SSR HMR
@@ -1503,7 +1377,7 @@ class MetroBundlerDevServer extends _BundlerDevServer.BundlerDevServer {
1503
1377
  }
1504
1378
  return (0, _getStaticRenderFunctions.evalMetroAndWrapFunctions)(this.projectRoot, res.src, res.filename, specificOptions.isExporting ?? this.instanceMetroOptions.isExporting);
1505
1379
  }, this.rscRenderer = null, this.onReloadRscEvent = null, // API Routes
1506
- this.pendingRouteOperations = new Map(), this.watchedLoaderFiles = new Set();
1380
+ this.pendingRouteOperations = new Map();
1507
1381
  }
1508
1382
  }
1509
1383
  function getBuildID(buildNumber) {