reroute-js 0.45.8 → 0.45.9

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 (183) hide show
  1. package/cli/bin.d.ts +1 -1
  2. package/cli/bin.js +75 -20
  3. package/cli/bin.js.map +7 -6
  4. package/cli/index.d.ts +1 -1
  5. package/cli/index.js +4 -4
  6. package/cli/index.js.map +1 -1
  7. package/cli/src/cli.d.ts +1 -1
  8. package/cli/src/commands/analyze.d.ts +1 -1
  9. package/cli/src/commands/build.d.ts +1 -1
  10. package/cli/src/commands/dev.d.ts +1 -1
  11. package/cli/src/commands/gen.d.ts +1 -1
  12. package/cli/src/commands/index.d.ts +1 -1
  13. package/cli/src/commands/init.d.ts +1 -1
  14. package/cli/src/commands/lib/assets.d.ts +1 -1
  15. package/cli/src/commands/lib/bundler.d.ts +1 -1
  16. package/cli/src/commands/lib/command.d.ts +1 -1
  17. package/cli/src/commands/lib/env.d.ts +1 -1
  18. package/cli/src/commands/lib/index.d.ts +1 -1
  19. package/cli/src/commands/lib/log.d.ts +1 -1
  20. package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
  21. package/cli/src/commands/lib/markdown/index.d.ts +1 -1
  22. package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
  23. package/cli/src/commands/lib/production.d.ts +1 -1
  24. package/cli/src/commands/lib/server.d.ts +1 -1
  25. package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
  26. package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
  27. package/cli/src/commands/lib/tailwind.d.ts +1 -1
  28. package/cli/src/commands/lib/terminal-ui.d.ts +1 -1
  29. package/cli/src/commands/lib/version.d.ts +1 -1
  30. package/cli/src/commands/og.d.ts +1 -1
  31. package/cli/src/commands/start.d.ts +1 -1
  32. package/cli/src/index.d.ts +1 -1
  33. package/core/index.d.ts +1 -1
  34. package/core/index.js +63 -8
  35. package/core/index.js.map +7 -6
  36. package/core/src/bundler/hash.d.ts +1 -1
  37. package/core/src/bundler/index.d.ts +1 -1
  38. package/core/src/config.d.ts +1 -1
  39. package/core/src/content/discovery.d.ts +1 -1
  40. package/core/src/content/index.d.ts +1 -1
  41. package/core/src/content/metadata.d.ts +1 -1
  42. package/core/src/index.d.ts +1 -1
  43. package/core/src/llms/extractor.d.ts +1 -1
  44. package/core/src/llms/formatter.d.ts +1 -1
  45. package/core/src/llms/full-generator.d.ts +1 -1
  46. package/core/src/llms/index-generator.d.ts +1 -1
  47. package/core/src/llms/index.d.ts +1 -1
  48. package/core/src/og/discovery.d.ts +1 -1
  49. package/core/src/og/index.d.ts +1 -1
  50. package/core/src/og/meta.d.ts +1 -1
  51. package/core/src/og/render.d.ts +1 -1
  52. package/core/src/og/types.d.ts +1 -1
  53. package/core/src/robots/discovery.d.ts +1 -1
  54. package/core/src/robots/generator.d.ts +1 -1
  55. package/core/src/robots/index.d.ts +1 -1
  56. package/core/src/robots/policies.d.ts +1 -1
  57. package/core/src/rss/discovery.d.ts +1 -1
  58. package/core/src/rss/generator.d.ts +1 -1
  59. package/core/src/rss/index.d.ts +1 -1
  60. package/core/src/sitemap/discovery.d.ts +1 -1
  61. package/core/src/sitemap/generator.d.ts +1 -1
  62. package/core/src/sitemap/index.d.ts +1 -1
  63. package/core/src/ssr/index.d.ts +1 -1
  64. package/core/src/ssr/lib/cache.d.ts +1 -1
  65. package/core/src/ssr/lib/cleanup.d.ts +15 -0
  66. package/core/src/ssr/lib/cleanup.d.ts.map +1 -0
  67. package/core/src/ssr/lib/collections.d.ts +1 -1
  68. package/core/src/ssr/lib/compression.d.ts +1 -1
  69. package/core/src/ssr/lib/compute/content.d.ts +1 -1
  70. package/core/src/ssr/lib/compute/index.d.ts +1 -1
  71. package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
  72. package/core/src/ssr/lib/compute/routes.d.ts +1 -1
  73. package/core/src/ssr/lib/data.d.ts +1 -1
  74. package/core/src/ssr/lib/html.d.ts +1 -1
  75. package/core/src/ssr/lib/imports.d.ts +1 -1
  76. package/core/src/ssr/lib/index.d.ts +2 -1
  77. package/core/src/ssr/lib/index.d.ts.map +1 -1
  78. package/core/src/ssr/lib/layouts.d.ts +1 -1
  79. package/core/src/ssr/lib/metadata.d.ts +1 -1
  80. package/core/src/ssr/lib/mime.d.ts +1 -1
  81. package/core/src/ssr/lib/modules.d.ts +1 -1
  82. package/core/src/ssr/lib/path.d.ts +1 -1
  83. package/core/src/ssr/lib/preload.d.ts +1 -1
  84. package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
  85. package/core/src/ssr/lib/scripts/data.d.ts +1 -1
  86. package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
  87. package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
  88. package/core/src/ssr/lib/scripts/index.d.ts +1 -1
  89. package/core/src/ssr/lib/seed.d.ts +1 -1
  90. package/core/src/ssr/lib/serialize.d.ts +1 -1
  91. package/core/src/ssr/lib/setup.d.ts +1 -1
  92. package/core/src/ssr/lib/setup.d.ts.map +1 -1
  93. package/core/src/ssr/lib/styles.d.ts +1 -1
  94. package/core/src/ssr/lib/template.d.ts +1 -1
  95. package/core/src/ssr/lib/types.d.ts +1 -1
  96. package/core/src/ssr/render.d.ts +1 -1
  97. package/core/src/ssr/stream.d.ts +1 -1
  98. package/core/src/ssr/stream.d.ts.map +1 -1
  99. package/elysia/index.d.ts +1 -1
  100. package/elysia/index.js +63 -8
  101. package/elysia/index.js.map +7 -6
  102. package/elysia/src/index.d.ts +1 -1
  103. package/elysia/src/libs/assets.d.ts +1 -1
  104. package/elysia/src/libs/cache.d.ts +1 -1
  105. package/elysia/src/libs/caching.d.ts +1 -1
  106. package/elysia/src/libs/http.d.ts +1 -1
  107. package/elysia/src/libs/image.d.ts +1 -1
  108. package/elysia/src/libs/index.d.ts +1 -1
  109. package/elysia/src/libs/llms.d.ts +1 -1
  110. package/elysia/src/libs/response.d.ts +1 -1
  111. package/elysia/src/libs/serving.d.ts +1 -1
  112. package/elysia/src/plugin.d.ts +1 -1
  113. package/elysia/src/routes/artifacts.d.ts +1 -1
  114. package/elysia/src/routes/content.d.ts +1 -1
  115. package/elysia/src/routes/image.d.ts +1 -1
  116. package/elysia/src/routes/index.d.ts +1 -1
  117. package/elysia/src/routes/internal.d.ts +1 -1
  118. package/elysia/src/routes/llms.d.ts +1 -1
  119. package/elysia/src/routes/og.d.ts +1 -1
  120. package/elysia/src/routes/redirects.d.ts +1 -1
  121. package/elysia/src/routes/robots.d.ts +1 -1
  122. package/elysia/src/routes/rss.d.ts +1 -1
  123. package/elysia/src/routes/search.d.ts +1 -1
  124. package/elysia/src/routes/sitemap.d.ts +1 -1
  125. package/elysia/src/routes/ssr.d.ts +1 -1
  126. package/elysia/src/routes/static.d.ts +1 -1
  127. package/elysia/src/types.d.ts +1 -1
  128. package/package.json +1 -1
  129. package/react/index.d.ts +1 -1
  130. package/react/index.js +2 -2
  131. package/react/index.js.map +1 -1
  132. package/react/src/components/ClientOnly.d.ts +1 -1
  133. package/react/src/components/ContentRoute.d.ts +1 -1
  134. package/react/src/components/Image.d.ts +1 -1
  135. package/react/src/components/LazyRoute.d.ts +1 -1
  136. package/react/src/components/Link.d.ts +1 -1
  137. package/react/src/components/Markdown.d.ts +1 -1
  138. package/react/src/components/Outlet.d.ts +1 -1
  139. package/react/src/components/index.d.ts +1 -1
  140. package/react/src/hooks/index.d.ts +1 -1
  141. package/react/src/hooks/useContent.d.ts +1 -1
  142. package/react/src/hooks/useData.d.ts +1 -1
  143. package/react/src/hooks/useFeed.d.ts +1 -1
  144. package/react/src/hooks/useLayoutData.d.ts +1 -1
  145. package/react/src/hooks/useLlms.d.ts +1 -1
  146. package/react/src/hooks/useNavigate.d.ts +1 -1
  147. package/react/src/hooks/useParams.d.ts +1 -1
  148. package/react/src/hooks/useRouter.d.ts +1 -1
  149. package/react/src/hooks/useSearch.d.ts +1 -1
  150. package/react/src/hooks/useSearchParams.d.ts +1 -1
  151. package/react/src/hooks/useToc.d.ts +1 -1
  152. package/react/src/index.d.ts +1 -1
  153. package/react/src/lib/collection.d.ts +1 -1
  154. package/react/src/lib/content.d.ts +1 -1
  155. package/react/src/lib/head.d.ts +1 -1
  156. package/react/src/lib/index.d.ts +1 -1
  157. package/react/src/lib/lazy-route.d.ts +1 -1
  158. package/react/src/lib/route-loader.d.ts +1 -1
  159. package/react/src/providers/ContentProvider.d.ts +1 -1
  160. package/react/src/providers/RerouteProvider.d.ts +1 -1
  161. package/react/src/providers/RouterProvider.d.ts +1 -1
  162. package/react/src/providers/index.d.ts +1 -1
  163. package/react/src/types/any.d.ts +1 -1
  164. package/react/src/types/index.d.ts +1 -1
  165. package/react/src/types/router.d.ts +1 -1
  166. package/telemetry/react.d.ts +1 -1
  167. package/telemetry/react.js +2 -2
  168. package/telemetry/react.js.map +1 -1
  169. package/telemetry/server.d.ts +1 -1
  170. package/telemetry/server.js +2 -3
  171. package/telemetry/server.js.map +5 -5
  172. package/telemetry/src/react/api.d.ts +1 -1
  173. package/telemetry/src/react/context.d.ts +1 -1
  174. package/telemetry/src/react/index.d.ts +1 -1
  175. package/telemetry/src/react/telemetry.d.ts +1 -1
  176. package/telemetry/src/server/context.d.ts +1 -1
  177. package/telemetry/src/server/headers/extractor.d.ts +1 -1
  178. package/telemetry/src/server/headers/index.d.ts +1 -1
  179. package/telemetry/src/server/headers/presets.d.ts +1 -1
  180. package/telemetry/src/server/index.d.ts +1 -1
  181. package/telemetry/src/server/instrumentation.d.ts +1 -1
  182. package/telemetry/src/server/plugin.d.ts +1 -1
  183. package/telemetry/src/server/sourcemap.d.ts +1 -1
package/elysia/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.45.8
2
+ * reroute-js v0.45.9
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -660,6 +660,32 @@ var init_cache = __esm(() => {
660
660
  statusCache = getGlobalStatusCache();
661
661
  });
662
662
 
663
+ // packages/core/src/ssr/lib/cleanup.ts
664
+ function removePathVariants(store, pathname) {
665
+ if (pathname in store) {
666
+ delete store[pathname];
667
+ }
668
+ const pathnameWithoutQuery = pathname.split("?")[0];
669
+ if (pathnameWithoutQuery && pathnameWithoutQuery !== pathname && pathnameWithoutQuery in store) {
670
+ delete store[pathnameWithoutQuery];
671
+ }
672
+ }
673
+ function cleanupPathScopedSSRData(pathname) {
674
+ if (!pathname)
675
+ return;
676
+ try {
677
+ const g = globalThis;
678
+ const dataStore = g.__REROUTE_DATA__;
679
+ if (!dataStore || typeof dataStore !== "object") {
680
+ return;
681
+ }
682
+ removePathVariants(dataStore, pathname);
683
+ if (Object.keys(dataStore).length === 0) {
684
+ delete g.__REROUTE_DATA__;
685
+ }
686
+ } catch {}
687
+ }
688
+
663
689
  // packages/core/src/ssr/lib/imports.ts
664
690
  import { pathToFileURL as pathToFileURL3 } from "node:url";
665
691
  async function dynamicImport(absolutePath, isWatchMode) {
@@ -2867,18 +2893,22 @@ var init_styles = () => {};
2867
2893
  // packages/core/src/ssr/lib/setup.ts
2868
2894
  async function performSSRSetup(options, streaming = false) {
2869
2895
  const { pathname } = options;
2896
+ const timeoutState = { timedOut: false };
2870
2897
  const setupTimeout = streaming ? 1e4 : 30000;
2898
+ let timeoutId = null;
2871
2899
  const timeoutPromise = new Promise((_, reject) => {
2872
- setTimeout(() => {
2900
+ timeoutId = setTimeout(() => {
2901
+ timeoutState.timedOut = true;
2873
2902
  reject(new Error(`[reroute] SSR setup timeout after ${setupTimeout}ms for ${pathname}`));
2874
2903
  }, setupTimeout);
2875
2904
  });
2876
2905
  try {
2877
2906
  return await Promise.race([
2878
- withParentSpan(options.parentSpan, () => performSSRSetupInternal(options, streaming)),
2907
+ withParentSpan(options.parentSpan, () => performSSRSetupInternal(options, streaming, timeoutState)),
2879
2908
  timeoutPromise
2880
2909
  ]);
2881
2910
  } catch (error) {
2911
+ cleanupPathScopedSSRData(pathname);
2882
2912
  console.error("[reroute] SSR setup error:", error);
2883
2913
  return {
2884
2914
  ssrData: {},
@@ -2891,9 +2921,13 @@ async function performSSRSetup(options, streaming = false) {
2891
2921
  inlineStyleTag: "",
2892
2922
  metadataResult: { perPageHead: "" }
2893
2923
  };
2924
+ } finally {
2925
+ if (timeoutId) {
2926
+ clearTimeout(timeoutId);
2927
+ }
2894
2928
  }
2895
2929
  }
2896
- async function performSSRSetupInternal(options, streaming) {
2930
+ async function performSSRSetupInternal(options, streaming, timeoutState) {
2897
2931
  const debug = options.debug ?? false;
2898
2932
  const t0 = debug ? performance.now() : 0;
2899
2933
  const {
@@ -2906,6 +2940,11 @@ async function performSSRSetupInternal(options, streaming) {
2906
2940
  searchParams,
2907
2941
  ogConfig
2908
2942
  } = options;
2943
+ const assertNotTimedOut = () => {
2944
+ if (timeoutState.timedOut) {
2945
+ throw new Error(`[reroute] SSR setup cancelled for ${pathname}`);
2946
+ }
2947
+ };
2909
2948
  await withSpan("ssr.seed", async (span) => {
2910
2949
  span.setAttribute("pathname", pathname);
2911
2950
  span.setAttribute("streaming", streaming);
@@ -2913,6 +2952,7 @@ async function performSSRSetupInternal(options, streaming) {
2913
2952
  if (debug)
2914
2953
  console.log(`[Setup] ${pathname} - seedModule: ${(performance.now() - t0).toFixed(2)}ms`);
2915
2954
  });
2955
+ assertNotTimedOut();
2916
2956
  resetSSRAccessTracking();
2917
2957
  const bundlePreload = createBundlePreload(bundleUrl);
2918
2958
  const preloadResult = await withSpan("ssr.preload", async (span) => {
@@ -2923,6 +2963,7 @@ async function performSSRSetupInternal(options, streaming) {
2923
2963
  console.log(`[Setup] ${pathname} - preloadContent: ${(performance.now() - t0).toFixed(2)}ms`);
2924
2964
  return result;
2925
2965
  });
2966
+ assertNotTimedOut();
2926
2967
  const computeResult = await withSpan("ssr.compute.data", async (span) => {
2927
2968
  span.setAttribute("pathname", pathname);
2928
2969
  span.setAttribute("streaming", streaming);
@@ -2933,6 +2974,7 @@ async function performSSRSetupInternal(options, streaming) {
2933
2974
  console.log(`[Setup] ${pathname} - computeSSRData: ${(performance.now() - t0).toFixed(2)}ms`);
2934
2975
  return result;
2935
2976
  });
2977
+ assertNotTimedOut();
2936
2978
  setGlobalSSRData(computeResult.data);
2937
2979
  const usingCachedCollections = !!options.cachedCollections;
2938
2980
  const byCollectionForSSR = await withSpan("ssr.load.collections", async (span) => {
@@ -2944,6 +2986,7 @@ async function performSSRSetupInternal(options, streaming) {
2944
2986
  console.log(`[Setup] ${pathname} - loadCollections (cached: ${usingCachedCollections}): ${(performance.now() - t0).toFixed(2)}ms`);
2945
2987
  return collections;
2946
2988
  });
2989
+ assertNotTimedOut();
2947
2990
  setGlobalCollections(byCollectionForSSR);
2948
2991
  const usingCachedCSS = !!options.cachedTailwindCSS;
2949
2992
  const inlineStyleTag = await withSpan("ssr.inline.css", async (span) => {
@@ -2956,6 +2999,7 @@ async function performSSRSetupInternal(options, streaming) {
2956
2999
  console.log(`[Setup] ${pathname} - inlineTailwindCSS (cached: ${usingCachedCSS}): ${(performance.now() - t0).toFixed(2)}ms`);
2957
3000
  return css;
2958
3001
  });
3002
+ assertNotTimedOut();
2959
3003
  let statusOverride = preloadResult.statusOverride;
2960
3004
  if (computeResult.statusContainer.value !== undefined) {
2961
3005
  statusOverride = computeResult.statusContainer.value;
@@ -2970,6 +3014,7 @@ async function performSSRSetupInternal(options, streaming) {
2970
3014
  console.log(`[Setup] ${pathname} - extractMetadata: ${(performance.now() - t0).toFixed(2)}ms`);
2971
3015
  return result;
2972
3016
  });
3017
+ assertNotTimedOut();
2973
3018
  return {
2974
3019
  ssrData: computeResult.data,
2975
3020
  ssrError: computeResult.error,
@@ -5286,7 +5331,7 @@ async function streamSSRContent(writer, encoder, ctx) {
5286
5331
  const STREAM_TIMEOUT_MS = ctx.timeout ?? 120000;
5287
5332
  let streamTimedOut = false;
5288
5333
  let timeoutId = null;
5289
- const cleanup = () => {
5334
+ const cleanup2 = () => {
5290
5335
  if (timeoutId) {
5291
5336
  clearTimeout(timeoutId);
5292
5337
  timeoutId = null;
@@ -5336,6 +5381,11 @@ async function streamSSRContent(writer, encoder, ctx) {
5336
5381
  streamTimeoutPromise
5337
5382
  ]);
5338
5383
  if (result.done || streamTimedOut) {
5384
+ if (streamTimedOut) {
5385
+ try {
5386
+ await reader.cancel(`[reroute] stream timeout for ${ctx.pathname}`);
5387
+ } catch {}
5388
+ }
5339
5389
  try {
5340
5390
  reader.releaseLock();
5341
5391
  } catch {}
@@ -5346,12 +5396,15 @@ async function streamSSRContent(writer, encoder, ctx) {
5346
5396
  chunkCount++;
5347
5397
  }
5348
5398
  }
5349
- cleanup();
5399
+ cleanup2();
5350
5400
  span.setAttributes({
5351
5401
  "reroute.stream.chunks": chunkCount,
5352
5402
  "reroute.stream.timedOut": streamTimedOut
5353
5403
  });
5354
5404
  });
5405
+ if (streamTimedOut) {
5406
+ cleanupPathScopedSSRData(ctx.pathname);
5407
+ }
5355
5408
  await writer.write(encoder.encode(ctx.rootEnd));
5356
5409
  const allScripts = await withSpan("ssr.generate.scripts", async (span) => {
5357
5410
  const scripts2 = buildStreamingScripts(ctx);
@@ -5361,7 +5414,8 @@ async function streamSSRContent(writer, encoder, ctx) {
5361
5414
  await writer.write(encoder.encode(allScripts + ctx.htmlTail));
5362
5415
  await writer.close();
5363
5416
  } catch (error) {
5364
- cleanup();
5417
+ cleanup2();
5418
+ cleanupPathScopedSSRData(ctx.pathname);
5365
5419
  console.error("[reroute] Stream error:", error);
5366
5420
  try {
5367
5421
  await writer.abort(error);
@@ -5611,6 +5665,7 @@ __export(exports_core, {
5611
5665
  computeLayoutData: () => computeLayoutData,
5612
5666
  computeContentData: () => computeContentData,
5613
5667
  compressStreamIfAccepted: () => compressStreamIfAccepted,
5668
+ cleanupPathScopedSSRData: () => cleanupPathScopedSSRData,
5614
5669
  buildHeadFromMeta: () => buildHeadFromMeta,
5615
5670
  blockSearchCrawlers: () => blockSearchCrawlers,
5616
5671
  blockAITrainingCrawlers: () => blockAITrainingCrawlers,
@@ -8952,4 +9007,4 @@ export {
8952
9007
  reroute
8953
9008
  };
8954
9009
 
8955
- //# debugId=03CB8CE75296216864756E2164756E21
9010
+ //# debugId=D7E0FB3EC3ACE34264756E2164756E21