@reckona/mreact-router 0.0.181 → 0.0.183

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 (47) hide show
  1. package/dist/actions.d.ts.map +1 -1
  2. package/dist/actions.js +20 -8
  3. package/dist/actions.js.map +1 -1
  4. package/dist/build.d.ts +3 -0
  5. package/dist/build.d.ts.map +1 -1
  6. package/dist/build.js +263 -5
  7. package/dist/build.js.map +1 -1
  8. package/dist/built-assets.d.ts.map +1 -1
  9. package/dist/built-assets.js +2 -2
  10. package/dist/built-assets.js.map +1 -1
  11. package/dist/cache-config.d.ts +1 -1
  12. package/dist/cache-config.d.ts.map +1 -1
  13. package/dist/cache-config.js.map +1 -1
  14. package/dist/cache.d.ts.map +1 -1
  15. package/dist/cache.js +18 -1
  16. package/dist/cache.js.map +1 -1
  17. package/dist/client.d.ts.map +1 -1
  18. package/dist/client.js +16 -6
  19. package/dist/client.js.map +1 -1
  20. package/dist/config.d.ts +2 -0
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +6 -0
  23. package/dist/config.js.map +1 -1
  24. package/dist/csrf.js +10 -6
  25. package/dist/csrf.js.map +1 -1
  26. package/dist/navigation.d.ts.map +1 -1
  27. package/dist/navigation.js +14 -1
  28. package/dist/navigation.js.map +1 -1
  29. package/dist/render.d.ts +4 -0
  30. package/dist/render.d.ts.map +1 -1
  31. package/dist/render.js +96 -46
  32. package/dist/render.js.map +1 -1
  33. package/dist/vite.d.ts.map +1 -1
  34. package/dist/vite.js +35 -4
  35. package/dist/vite.js.map +1 -1
  36. package/package.json +11 -11
  37. package/src/actions.ts +26 -9
  38. package/src/build.ts +398 -5
  39. package/src/built-assets.ts +2 -3
  40. package/src/cache-config.ts +1 -0
  41. package/src/cache.ts +20 -1
  42. package/src/client.ts +16 -6
  43. package/src/config.ts +8 -0
  44. package/src/csrf.ts +13 -6
  45. package/src/navigation.ts +16 -1
  46. package/src/render.ts +194 -78
  47. package/src/vite.ts +41 -4
package/dist/render.js CHANGED
@@ -212,6 +212,8 @@ const routeOutOfOrderBoundaryAnalysisCache = new Map();
212
212
  const routeOutOfOrderBoundaryAnalysisCacheCounters = createRouterRuntimeCacheCounters();
213
213
  const routeLoaderModuleCache = new Map();
214
214
  const routeLoaderModuleCacheCounters = createRouterRuntimeCacheCounters();
215
+ const routeMetadataModuleCache = new Map();
216
+ const routeMetadataModuleCacheCounters = createRouterRuntimeCacheCounters();
215
217
  const middlewareModuleCache = new Map();
216
218
  const middlewareModuleCacheCounters = createRouterRuntimeCacheCounters();
217
219
  const serverRouteModuleCache = new Map();
@@ -223,6 +225,7 @@ const maxServerSourceFileCacheEntries = resolveRouterCacheLimit("SERVER_SOURCE_F
223
225
  const maxRouteSourceAnalysisCacheEntries = resolveRouterCacheLimit("ROUTE_SOURCE_ANALYSIS", 512);
224
226
  const maxRouteOutOfOrderBoundaryAnalysisCacheEntries = resolveRouterCacheLimit("ROUTE_OUT_OF_ORDER_BOUNDARY_ANALYSIS", 512);
225
227
  const maxRouteLoaderModuleCacheEntries = resolveRouterCacheLimit("ROUTE_LOADER_MODULE", 512);
228
+ const maxRouteMetadataModuleCacheEntries = resolveRouterCacheLimit("ROUTE_METADATA_MODULE", 512);
226
229
  const maxMiddlewareModuleCacheEntries = resolveRouterCacheLimit("MIDDLEWARE_MODULE", 64);
227
230
  const maxServerRouteModuleCacheEntries = resolveRouterCacheLimit("SERVER_ROUTE_MODULE", 512);
228
231
  const maxComposedRouteMetadataCacheEntries = resolveRouterCacheLimit("COMPOSED_ROUTE_METADATA", 512);
@@ -233,6 +236,7 @@ export function routerRenderRuntimeCacheStats() {
233
236
  routerRuntimeCacheStat("route-source-analysis", routeSourceAnalysisCache, maxRouteSourceAnalysisCacheEntries, routeSourceAnalysisCacheCounters),
234
237
  routerRuntimeCacheStat("route-out-of-order-boundary-analysis", routeOutOfOrderBoundaryAnalysisCache, maxRouteOutOfOrderBoundaryAnalysisCacheEntries, routeOutOfOrderBoundaryAnalysisCacheCounters),
235
238
  routerRuntimeCacheStat("route-loader-module", routeLoaderModuleCache, maxRouteLoaderModuleCacheEntries, routeLoaderModuleCacheCounters),
239
+ routerRuntimeCacheStat("route-metadata-module", routeMetadataModuleCache, maxRouteMetadataModuleCacheEntries, routeMetadataModuleCacheCounters),
236
240
  routerRuntimeCacheStat("middleware-module", middlewareModuleCache, maxMiddlewareModuleCacheEntries, middlewareModuleCacheCounters),
237
241
  routerRuntimeCacheStat("server-route-module", serverRouteModuleCache, maxServerRouteModuleCacheEntries, serverRouteModuleCacheCounters),
238
242
  routerRuntimeCacheStat("composed-route-metadata", composedRouteMetadataCache, maxComposedRouteMetadataCacheEntries, composedRouteMetadataCacheCounters),
@@ -304,9 +308,9 @@ function addRenderTimingPhaseDuration(timing, startedAt, phaseName) {
304
308
  timing.phases[phaseName] = (timing.phases[phaseName] ?? 0) + logDurationMs(startedAt);
305
309
  }
306
310
  function routeLoaderMayReturnControlResponse(code) {
307
- return /\b(?:redirect|redirectExternal|rewrite|notFound|throwNotFound)\s*\(/.test(code) ||
311
+ return (/\b(?:redirect|redirectExternal|rewrite|notFound|throwNotFound)\s*\(/.test(code) ||
308
312
  /\bnew\s+Response\s*\(/.test(code) ||
309
- /\bResponse\.(?:redirect|json)\s*\(/.test(code);
313
+ /\bResponse\.(?:redirect|json)\s*\(/.test(code));
310
314
  }
311
315
  async function waitForRenderPreload(options, timing) {
312
316
  if (options.preload?.wait !== "before-render") {
@@ -368,7 +372,9 @@ async function renderAppRequestInternal(options) {
368
372
  finishRenderTimingPhase(timing, phaseStartedAt, "routeScanMs");
369
373
  const url = options.requestUrl ?? new URL(options.request.url);
370
374
  phaseStartedAt = renderTimingPhaseStartedAt(timing);
371
- const matched = options.matchedRoute ?? options.routeMatcher?.match(url.pathname) ?? matchRoute(routes, url.pathname);
375
+ const matched = options.matchedRoute ??
376
+ options.routeMatcher?.match(url.pathname) ??
377
+ matchRoute(routes, url.pathname);
372
378
  finishRenderTimingPhase(timing, phaseStartedAt, "routeMatchMs");
373
379
  const hasMiddleware = options.skipMiddleware === true
374
380
  ? false
@@ -390,6 +396,7 @@ async function renderAppRequestInternal(options) {
390
396
  ? { request: options.request, type: "continue" }
391
397
  : await resolveAppRouterMiddleware({
392
398
  appDir: options.appDir,
399
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
393
400
  importPolicy: options.importPolicy,
394
401
  instrumentation: options.instrumentation,
395
402
  middlewareControl,
@@ -597,6 +604,7 @@ async function renderAppRequestInternal(options) {
597
604
  filename: matched.route.file,
598
605
  importPolicy: options.importPolicy,
599
606
  instrumentation: options.instrumentation,
607
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
600
608
  request: options.request,
601
609
  routeId: routeIdForPath(matched.route.path),
602
610
  routePath: matched.route.path,
@@ -675,7 +683,7 @@ async function renderAppRequestInternal(options) {
675
683
  params: matched.params,
676
684
  queryClient,
677
685
  request: options.request,
678
- }, matched.route.file, options.serverModules, options.serverModuleCacheVersion, options.define, options.vitePlugins, undefined, options.importPolicy));
686
+ }, matched.route.file, options.serverModules, options.serverModuleCacheVersion, options.define, options.vitePlugins, undefined, options.importPolicy, options.devServerModuleCacheVersion));
679
687
  const pageHtml = renderedPage.html;
680
688
  const pageHtmlForLayout = clientRoute
681
689
  ? withHydrationMarkers({
@@ -728,6 +736,7 @@ async function renderAppRequestInternal(options) {
728
736
  routes,
729
737
  serverModules: options.serverModules,
730
738
  serverModuleCacheVersion: options.serverModuleCacheVersion,
739
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
731
740
  serverSourceFiles: options.serverSourceFiles,
732
741
  define: options.define,
733
742
  vitePlugins: options.vitePlugins,
@@ -908,7 +917,7 @@ async function renderAppRequestInternal(options) {
908
917
  params: matched.params,
909
918
  queryClient,
910
919
  request: options.request,
911
- }, matched.route.file, options.serverModules, options.serverModuleCacheVersion, options.define, options.vitePlugins, timing, options.importPolicy));
920
+ }, matched.route.file, options.serverModules, options.serverModuleCacheVersion, options.define, options.vitePlugins, timing, options.importPolicy, options.devServerModuleCacheVersion));
912
921
  finishRenderTimingPhase(timing, phaseStartedAt, "pageRenderMs");
913
922
  const pageHtml = renderedPage.html;
914
923
  // Wrap the page (not the full document) with the hydration marker so
@@ -969,6 +978,7 @@ async function renderAppRequestInternal(options) {
969
978
  routes,
970
979
  serverModules: options.serverModules,
971
980
  serverModuleCacheVersion: options.serverModuleCacheVersion,
981
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
972
982
  serverSourceFiles: options.serverSourceFiles,
973
983
  define: options.define,
974
984
  vitePlugins: options.vitePlugins,
@@ -1049,6 +1059,7 @@ async function renderAppRequestInternal(options) {
1049
1059
  filename: "error.mreact.tsx",
1050
1060
  pageFile: matched.route.file,
1051
1061
  });
1062
+ options.onRenderError?.(error);
1052
1063
  const response = await renderSpecialRoute({
1053
1064
  appDir: options.appDir,
1054
1065
  assetBaseUrl: options.assetBaseUrl,
@@ -1571,6 +1582,7 @@ async function runMiddleware(options) {
1571
1582
  serverModules: options.serverModules,
1572
1583
  serverModuleCacheVersion: options.serverModuleCacheVersion,
1573
1584
  serverSourceFiles: options.serverSourceFiles,
1585
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
1574
1586
  vitePlugins: options.vitePlugins,
1575
1587
  });
1576
1588
  }
@@ -1647,9 +1659,10 @@ async function collectAvailableMiddlewareIds(options) {
1647
1659
  async function loadMiddlewareModule(options) {
1648
1660
  const code = options.code ??
1649
1661
  (await readServerSourceFile(options.file, options.serverModuleCacheVersion, options.serverSourceFiles));
1650
- const cacheKey = options.serverModuleCacheVersion === undefined
1662
+ const moduleCacheVersion = options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion;
1663
+ const cacheKey = moduleCacheVersion === undefined
1651
1664
  ? undefined
1652
- : `middleware\0${options.appDir}\0${options.file}\0${options.serverModuleCacheVersion}\0${memoizedHashText(code)}\0${importPolicyCacheKey(options.importPolicy)}\0${viteDefineCacheKey(options.define)}\0${vitePluginsCacheKey(options.vitePlugins)}`;
1665
+ : `middleware\0${options.serverModuleCacheVersion === undefined ? "dev" : "build"}\0${options.appDir}\0${options.file}\0${moduleCacheVersion}\0${memoizedHashText(code)}\0${importPolicyCacheKey(options.importPolicy)}\0${viteDefineCacheKey(options.define)}\0${vitePluginsCacheKey(options.vitePlugins)}`;
1653
1666
  if (cacheKey !== undefined) {
1654
1667
  const cached = readRouterRuntimeCacheEntry(middlewareModuleCache, cacheKey, middlewareModuleCacheCounters);
1655
1668
  if (cached !== undefined) {
@@ -1663,6 +1676,7 @@ async function loadMiddlewareModule(options) {
1663
1676
  file: options.file,
1664
1677
  importPolicy: options.importPolicy,
1665
1678
  prebuiltArtifact: prebuiltRequestModuleArtifact(options.serverModules, options.file, code),
1679
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
1666
1680
  serverModuleCacheVersion: options.serverModuleCacheVersion,
1667
1681
  vitePlugins: options.vitePlugins,
1668
1682
  }).catch((error) => {
@@ -1718,10 +1732,10 @@ async function loadBundledMiddlewareModule(options) {
1718
1732
  vitePlugins: options.vitePlugins,
1719
1733
  }));
1720
1734
  return importAppRouterSourceModule({
1721
- ...(options.serverModuleCacheVersion === undefined
1735
+ ...((options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion) === undefined
1722
1736
  ? {}
1723
1737
  : {
1724
- cacheKey: `middleware:${options.file}:${options.serverModuleCacheVersion}:${memoizedHashText(compiled)}:${viteDefineCacheKey(options.define)}:${vitePluginsCacheKey(options.vitePlugins)}`,
1738
+ cacheKey: `middleware:${options.serverModuleCacheVersion === undefined ? "dev" : "build"}:${options.file}:${options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion}:${memoizedHashText(compiled)}:${viteDefineCacheKey(options.define)}:${vitePluginsCacheKey(options.vitePlugins)}`,
1725
1739
  }),
1726
1740
  code: compiled,
1727
1741
  define: options.define,
@@ -1897,9 +1911,9 @@ async function runServerModule(code, props, sourcefile, serverModules, serverMod
1897
1911
  async function renderServerComponentResult(value) {
1898
1912
  return typeof value === "string" ? value : renderReactNodeToString(value);
1899
1913
  }
1900
- async function runServerModuleWithSlots(code, props, sourcefile, serverModules, serverModuleCacheVersion, define, vitePlugins, timing, importPolicy) {
1914
+ async function runServerModuleWithSlots(code, props, sourcefile, serverModules, serverModuleCacheVersion, define, vitePlugins, timing, importPolicy, devServerModuleCacheVersion) {
1901
1915
  const moduleLoadStartedAt = renderTimingPhaseStartedAt(timing);
1902
- const module = await loadServerModule(code, sourcefile, serverModules, serverModuleCacheVersion, define, vitePlugins, importPolicy);
1916
+ const module = await loadServerModule(code, sourcefile, serverModules, serverModuleCacheVersion, define, vitePlugins, importPolicy, devServerModuleCacheVersion);
1903
1917
  finishRenderTimingPhase(timing, moduleLoadStartedAt, "pageModuleLoadMs");
1904
1918
  const component = selectServerComponent(module);
1905
1919
  const componentStartedAt = renderTimingPhaseStartedAt(timing);
@@ -1913,7 +1927,7 @@ async function runServerModuleWithSlots(code, props, sourcefile, serverModules,
1913
1927
  slots,
1914
1928
  };
1915
1929
  }
1916
- async function loadServerModule(code, sourcefile, serverModules, serverModuleCacheVersion, define, vitePlugins, importPolicy) {
1930
+ async function loadServerModule(code, sourcefile, serverModules, serverModuleCacheVersion, define, vitePlugins, importPolicy, devServerModuleCacheVersion) {
1917
1931
  const artifact = serverModules?.get(sourcefile)?.string;
1918
1932
  const codeHash = memoizedHashText(code);
1919
1933
  const prebuiltCode = prebuiltServerComponentModuleCode(artifact, code, codeHash);
@@ -1927,10 +1941,13 @@ async function loadServerModule(code, sourcefile, serverModules, serverModuleCac
1927
1941
  serverModuleCacheVersion,
1928
1942
  });
1929
1943
  }
1930
- const moduleCode = prebuiltCode === undefined ? code : rewriteCompatVendorPlaceholderImportsForRunner(prebuiltCode);
1931
- const cacheKey = serverModuleCacheVersion === undefined
1944
+ const moduleCode = prebuiltCode === undefined
1945
+ ? code
1946
+ : rewriteCompatVendorPlaceholderImportsForRunner(prebuiltCode);
1947
+ const sourceModuleCacheVersion = serverModuleCacheVersion ?? devServerModuleCacheVersion;
1948
+ const cacheKey = sourceModuleCacheVersion === undefined
1932
1949
  ? undefined
1933
- : `server-component:${serverModuleCacheVersion}:${sourcefile}:${moduleCode === code ? codeHash : memoizedHashText(moduleCode)}:${importPolicyCacheKey(importPolicy)}:${viteDefineCacheKey(define)}:${vitePluginsCacheKey(vitePlugins)}`;
1950
+ : `server-component:${serverModuleCacheVersion === undefined ? "dev" : "build"}:${sourceModuleCacheVersion}:${sourcefile}:${moduleCode === code ? codeHash : memoizedHashText(moduleCode)}:${importPolicyCacheKey(importPolicy)}:${viteDefineCacheKey(define)}:${vitePluginsCacheKey(vitePlugins)}`;
1934
1951
  return await importAppRouterSourceModule({
1935
1952
  cacheKey,
1936
1953
  code: moduleCode,
@@ -2258,7 +2275,9 @@ async function loadServerStreamModule(code, sourcefile, serverModules, serverMod
2258
2275
  serverModuleCacheVersion,
2259
2276
  });
2260
2277
  }
2261
- const moduleCode = prebuiltCode === undefined ? code : rewriteCompatVendorPlaceholderImportsForRunner(prebuiltCode);
2278
+ const moduleCode = prebuiltCode === undefined
2279
+ ? code
2280
+ : rewriteCompatVendorPlaceholderImportsForRunner(prebuiltCode);
2262
2281
  const cacheKey = serverModuleCacheVersion === undefined
2263
2282
  ? undefined
2264
2283
  : `server-stream-component:${serverModuleCacheVersion}:${sourcefile}:${moduleCode === code ? codeHash : memoizedHashText(moduleCode)}:${importPolicyCacheKey(importPolicy)}:${viteDefineCacheKey(define)}:${vitePluginsCacheKey(vitePlugins)}`;
@@ -2524,8 +2543,7 @@ async function shellFilesForPage(appDir, pageFile, serverModuleCacheVersion) {
2524
2543
  if (devCacheKey !== undefined) {
2525
2544
  const directoryStats = await routeShellDirectoryStats(appDir, pageFile);
2526
2545
  const cached = devShellFilesCache.get(devCacheKey);
2527
- if (cached !== undefined &&
2528
- sameFileStats(cached.directoryStats, directoryStats)) {
2546
+ if (cached !== undefined && sameFileStats(cached.directoryStats, directoryStats)) {
2529
2547
  return cached.files;
2530
2548
  }
2531
2549
  const files = await shellFilesForPageUncached(appDir, pageFile);
@@ -2587,8 +2605,7 @@ async function hasAppMiddleware(options) {
2587
2605
  if (cacheKey === undefined) {
2588
2606
  const directoryStat = await fileStat(options.appDir);
2589
2607
  const cached = devAppMiddlewareFileCache.get(options.appDir);
2590
- if (cached !== undefined &&
2591
- sameFileStat(cached.directoryStat, directoryStat)) {
2608
+ if (cached !== undefined && sameFileStat(cached.directoryStat, directoryStat)) {
2592
2609
  return cached.hasMiddleware;
2593
2610
  }
2594
2611
  const hasMiddleware = await hasAppMiddlewareUncached(middlewareFiles);
@@ -2765,9 +2782,10 @@ async function loadRouteDataWithInstrumentation(options) {
2765
2782
  }
2766
2783
  }
2767
2784
  async function loadRouteLoaderModule(options) {
2768
- const cacheKey = options.serverModuleCacheVersion === undefined
2785
+ const moduleCacheVersion = options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion;
2786
+ const cacheKey = moduleCacheVersion === undefined
2769
2787
  ? undefined
2770
- : `${options.appDir}\0${options.filename}\0${options.serverModuleCacheVersion}\0${memoizedHashText(options.code)}\0${importPolicyCacheKey(options.importPolicy)}\0${viteDefineCacheKey(options.define)}\0${vitePluginsCacheKey(options.vitePlugins)}`;
2788
+ : `${options.serverModuleCacheVersion === undefined ? "dev" : "build"}\0${options.appDir}\0${options.filename}\0${moduleCacheVersion}\0${memoizedHashText(options.code)}\0${importPolicyCacheKey(options.importPolicy)}\0${viteDefineCacheKey(options.define)}\0${vitePluginsCacheKey(options.vitePlugins)}`;
2771
2789
  if (cacheKey !== undefined) {
2772
2790
  const cached = readRouterRuntimeCacheEntry(routeLoaderModuleCache, cacheKey, routeLoaderModuleCacheCounters);
2773
2791
  if (cached !== undefined) {
@@ -2832,10 +2850,10 @@ async function loadBundledRouteLoaderModule(options) {
2832
2850
  vitePlugins: options.vitePlugins,
2833
2851
  }));
2834
2852
  return await importAppRouterSourceModule({
2835
- ...(options.serverModuleCacheVersion === undefined
2853
+ ...((options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion) === undefined
2836
2854
  ? {}
2837
2855
  : {
2838
- cacheKey: `loader:${options.filename}:${options.serverModuleCacheVersion}:${memoizedHashText(code)}:${viteDefineCacheKey(options.define)}`,
2856
+ cacheKey: `loader:${options.serverModuleCacheVersion === undefined ? "dev" : "build"}:${options.filename}:${options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion}:${memoizedHashText(code)}:${viteDefineCacheKey(options.define)}:${vitePluginsCacheKey(options.vitePlugins)}`,
2839
2857
  }),
2840
2858
  code,
2841
2859
  define: options.define,
@@ -2855,19 +2873,54 @@ async function loadRouteMetadata(options) {
2855
2873
  });
2856
2874
  return await resolveRouteMetadataModule(module, options.context);
2857
2875
  }
2858
- const code = prebuiltArtifact?.code ?? (await bundleRouteMetadataModuleCode(options));
2859
- const module = await importAppRouterSourceModule({
2860
- ...(options.serverModuleCacheVersion === undefined
2861
- ? {}
2862
- : {
2863
- cacheKey: `metadata:${options.filename}:${options.serverModuleCacheVersion}:${memoizedHashText(code)}:${viteDefineCacheKey(options.define)}`,
2864
- }),
2865
- code,
2866
- define: options.define,
2867
- label: `metadata:${options.filename}`,
2868
- });
2876
+ const module = await loadRouteMetadataModule(options, prebuiltArtifact);
2869
2877
  return await resolveRouteMetadataModule(module, options.context);
2870
2878
  }
2879
+ async function loadRouteMetadataModule(options, prebuiltArtifact) {
2880
+ if (prebuiltArtifact?.moduleFile !== undefined) {
2881
+ return await importBuiltServerModuleFile({
2882
+ file: prebuiltArtifact.moduleFile,
2883
+ label: `metadata:${options.filename}`,
2884
+ serverModuleCacheVersion: options.serverModuleCacheVersion,
2885
+ });
2886
+ }
2887
+ const sourceHash = memoizedHashText(options.code);
2888
+ const moduleCacheVersion = options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion;
2889
+ const moduleCacheKey = moduleCacheVersion === undefined
2890
+ ? undefined
2891
+ : `metadata-module:${options.serverModuleCacheVersion === undefined ? "dev" : "build"}:${options.filename}:${moduleCacheVersion}:${sourceHash}:${viteDefineCacheKey(options.define)}:${vitePluginsCacheKey(options.vitePlugins)}`;
2892
+ if (moduleCacheKey !== undefined) {
2893
+ const cached = readRouterRuntimeCacheEntry(routeMetadataModuleCache, moduleCacheKey, routeMetadataModuleCacheCounters);
2894
+ if (cached !== undefined) {
2895
+ return await cached;
2896
+ }
2897
+ }
2898
+ const loaded = (async () => {
2899
+ const code = prebuiltArtifact?.code ?? (await bundleRouteMetadataModuleCode(options));
2900
+ return await importAppRouterSourceModule({
2901
+ ...(moduleCacheVersion === undefined
2902
+ ? {}
2903
+ : {
2904
+ cacheKey: `metadata:${options.serverModuleCacheVersion === undefined ? "dev" : "build"}:${options.filename}:${moduleCacheVersion}:${memoizedHashText(code)}:${viteDefineCacheKey(options.define)}`,
2905
+ }),
2906
+ code,
2907
+ define: options.define,
2908
+ label: `metadata:${options.filename}`,
2909
+ });
2910
+ })();
2911
+ if (moduleCacheKey !== undefined) {
2912
+ setBoundedCacheEntry(routeMetadataModuleCache, moduleCacheKey, loaded, maxRouteMetadataModuleCacheEntries, routeMetadataModuleCacheCounters);
2913
+ }
2914
+ try {
2915
+ return await loaded;
2916
+ }
2917
+ catch (error) {
2918
+ if (moduleCacheKey !== undefined) {
2919
+ routeMetadataModuleCache.delete(moduleCacheKey);
2920
+ }
2921
+ throw error;
2922
+ }
2923
+ }
2871
2924
  async function resolveRouteMetadataModule(module, context) {
2872
2925
  const staticMetadata = validateRouteMetadata(module.metadata);
2873
2926
  if (module.generateMetadata === undefined) {
@@ -2937,9 +2990,10 @@ async function loadComposedRouteMetadata(options) {
2937
2990
  }
2938
2991
  }
2939
2992
  function composedRouteMetadataCacheKey(options) {
2940
- return options.serverModuleCacheVersion === undefined
2993
+ const moduleCacheVersion = options.serverModuleCacheVersion ?? options.devServerModuleCacheVersion;
2994
+ return moduleCacheVersion === undefined
2941
2995
  ? undefined
2942
- : `${options.appDir}\0${options.filename}\0${options.serverModuleCacheVersion}\0${memoizedHashText(options.code)}\0${importPolicyCacheKey(options.importPolicy)}\0${viteDefineCacheKey(options.define)}\0${vitePluginsCacheKey(options.vitePlugins)}`;
2996
+ : `${options.appDir}\0${options.filename}\0${options.serverModuleCacheVersion === undefined ? "dev" : "build"}\0${moduleCacheVersion}\0${memoizedHashText(options.code)}\0${importPolicyCacheKey(options.importPolicy)}\0${viteDefineCacheKey(options.define)}\0${vitePluginsCacheKey(options.vitePlugins)}`;
2943
2997
  }
2944
2998
  export const __composedRouteMetadataCacheKeyForTesting = composedRouteMetadataCacheKey;
2945
2999
  async function loadComposedRouteMetadataUncached(options) {
@@ -2959,6 +3013,7 @@ async function loadComposedRouteMetadataUncached(options) {
2959
3013
  importPolicy: options.importPolicy,
2960
3014
  serverModules: options.serverModules,
2961
3015
  serverModuleCacheVersion: options.serverModuleCacheVersion,
3016
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
2962
3017
  define: options.define,
2963
3018
  vitePlugins: options.vitePlugins,
2964
3019
  });
@@ -2972,6 +3027,7 @@ async function loadComposedRouteMetadataUncached(options) {
2972
3027
  importPolicy: options.importPolicy,
2973
3028
  serverModules: options.serverModules,
2974
3029
  serverModuleCacheVersion: options.serverModuleCacheVersion,
3030
+ devServerModuleCacheVersion: options.devServerModuleCacheVersion,
2975
3031
  define: options.define,
2976
3032
  vitePlugins: options.vitePlugins,
2977
3033
  });
@@ -3134,18 +3190,14 @@ function injectQueryState(html, state) {
3134
3190
  return html;
3135
3191
  }
3136
3192
  const script = `<script type="application/json" id="${__MREACT_QUERY_STATE_SCRIPT_ID}">${escapeJsonForHtml(JSON.stringify(state))}</script>`;
3137
- return /<\/body>/i.test(html)
3138
- ? replaceFinalBodyCloseTag(html, script)
3139
- : `${html}${script}`;
3193
+ return /<\/body>/i.test(html) ? replaceFinalBodyCloseTag(html, script) : `${html}${script}`;
3140
3194
  }
3141
3195
  function injectAuthSessionClaims(html, claims) {
3142
3196
  if (claims === undefined) {
3143
3197
  return html;
3144
3198
  }
3145
3199
  const script = `<script type="application/json" id="${authSessionScriptId}">${escapeJsonForHtml(JSON.stringify(claims))}</script>`;
3146
- return /<\/body>/i.test(html)
3147
- ? replaceFinalBodyCloseTag(html, script)
3148
- : `${html}${script}`;
3200
+ return /<\/body>/i.test(html) ? replaceFinalBodyCloseTag(html, script) : `${html}${script}`;
3149
3201
  }
3150
3202
  function replaceFinalBodyCloseTag(html, insertion) {
3151
3203
  const matches = [...html.matchAll(/<\/body>/gi)];
@@ -3198,9 +3250,7 @@ function readServerSourceFile(file, serverModuleCacheVersion, serverSourceFiles)
3198
3250
  async function readDevServerSourceFile(file) {
3199
3251
  const stats = await fileStat(file);
3200
3252
  const cached = devServerSourceFileCache.get(file);
3201
- if (cached !== undefined &&
3202
- cached.mtimeMs === stats.mtimeMs &&
3203
- cached.size === stats.size) {
3253
+ if (cached !== undefined && cached.mtimeMs === stats.mtimeMs && cached.size === stats.size) {
3204
3254
  return cached.source;
3205
3255
  }
3206
3256
  const source = await readFile(file, "utf8");