reroute-js 0.45.8 → 0.45.10

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 +84 -25
  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 +72 -13
  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 +3 -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 +72 -13
  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.10
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,25 @@ 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;
2870
- const setupTimeout = streaming ? 1e4 : 30000;
2896
+ const timeoutState = { timedOut: false };
2897
+ const setupTimeout = options.timeout ?? (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
  });
2905
+ const setupPromise = withParentSpan(options.parentSpan, () => performSSRSetupInternal(options, streaming, timeoutState));
2906
+ const setupPromiseWithCleanup = setupPromise.finally(() => {
2907
+ if (timeoutState.timedOut) {
2908
+ cleanupPathScopedSSRData(pathname);
2909
+ }
2910
+ });
2876
2911
  try {
2877
- return await Promise.race([
2878
- withParentSpan(options.parentSpan, () => performSSRSetupInternal(options, streaming)),
2879
- timeoutPromise
2880
- ]);
2912
+ return await Promise.race([setupPromiseWithCleanup, timeoutPromise]);
2881
2913
  } catch (error) {
2914
+ cleanupPathScopedSSRData(pathname);
2882
2915
  console.error("[reroute] SSR setup error:", error);
2883
2916
  return {
2884
2917
  ssrData: {},
@@ -2891,9 +2924,13 @@ async function performSSRSetup(options, streaming = false) {
2891
2924
  inlineStyleTag: "",
2892
2925
  metadataResult: { perPageHead: "" }
2893
2926
  };
2927
+ } finally {
2928
+ if (timeoutId) {
2929
+ clearTimeout(timeoutId);
2930
+ }
2894
2931
  }
2895
2932
  }
2896
- async function performSSRSetupInternal(options, streaming) {
2933
+ async function performSSRSetupInternal(options, streaming, timeoutState) {
2897
2934
  const debug = options.debug ?? false;
2898
2935
  const t0 = debug ? performance.now() : 0;
2899
2936
  const {
@@ -2906,6 +2943,11 @@ async function performSSRSetupInternal(options, streaming) {
2906
2943
  searchParams,
2907
2944
  ogConfig
2908
2945
  } = options;
2946
+ const assertNotTimedOut = () => {
2947
+ if (timeoutState.timedOut) {
2948
+ throw new Error(`[reroute] SSR setup cancelled for ${pathname}`);
2949
+ }
2950
+ };
2909
2951
  await withSpan("ssr.seed", async (span) => {
2910
2952
  span.setAttribute("pathname", pathname);
2911
2953
  span.setAttribute("streaming", streaming);
@@ -2913,6 +2955,7 @@ async function performSSRSetupInternal(options, streaming) {
2913
2955
  if (debug)
2914
2956
  console.log(`[Setup] ${pathname} - seedModule: ${(performance.now() - t0).toFixed(2)}ms`);
2915
2957
  });
2958
+ assertNotTimedOut();
2916
2959
  resetSSRAccessTracking();
2917
2960
  const bundlePreload = createBundlePreload(bundleUrl);
2918
2961
  const preloadResult = await withSpan("ssr.preload", async (span) => {
@@ -2923,6 +2966,7 @@ async function performSSRSetupInternal(options, streaming) {
2923
2966
  console.log(`[Setup] ${pathname} - preloadContent: ${(performance.now() - t0).toFixed(2)}ms`);
2924
2967
  return result;
2925
2968
  });
2969
+ assertNotTimedOut();
2926
2970
  const computeResult = await withSpan("ssr.compute.data", async (span) => {
2927
2971
  span.setAttribute("pathname", pathname);
2928
2972
  span.setAttribute("streaming", streaming);
@@ -2933,6 +2977,7 @@ async function performSSRSetupInternal(options, streaming) {
2933
2977
  console.log(`[Setup] ${pathname} - computeSSRData: ${(performance.now() - t0).toFixed(2)}ms`);
2934
2978
  return result;
2935
2979
  });
2980
+ assertNotTimedOut();
2936
2981
  setGlobalSSRData(computeResult.data);
2937
2982
  const usingCachedCollections = !!options.cachedCollections;
2938
2983
  const byCollectionForSSR = await withSpan("ssr.load.collections", async (span) => {
@@ -2944,6 +2989,7 @@ async function performSSRSetupInternal(options, streaming) {
2944
2989
  console.log(`[Setup] ${pathname} - loadCollections (cached: ${usingCachedCollections}): ${(performance.now() - t0).toFixed(2)}ms`);
2945
2990
  return collections;
2946
2991
  });
2992
+ assertNotTimedOut();
2947
2993
  setGlobalCollections(byCollectionForSSR);
2948
2994
  const usingCachedCSS = !!options.cachedTailwindCSS;
2949
2995
  const inlineStyleTag = await withSpan("ssr.inline.css", async (span) => {
@@ -2956,6 +3002,7 @@ async function performSSRSetupInternal(options, streaming) {
2956
3002
  console.log(`[Setup] ${pathname} - inlineTailwindCSS (cached: ${usingCachedCSS}): ${(performance.now() - t0).toFixed(2)}ms`);
2957
3003
  return css;
2958
3004
  });
3005
+ assertNotTimedOut();
2959
3006
  let statusOverride = preloadResult.statusOverride;
2960
3007
  if (computeResult.statusContainer.value !== undefined) {
2961
3008
  statusOverride = computeResult.statusContainer.value;
@@ -2970,6 +3017,7 @@ async function performSSRSetupInternal(options, streaming) {
2970
3017
  console.log(`[Setup] ${pathname} - extractMetadata: ${(performance.now() - t0).toFixed(2)}ms`);
2971
3018
  return result;
2972
3019
  });
3020
+ assertNotTimedOut();
2973
3021
  return {
2974
3022
  ssrData: computeResult.data,
2975
3023
  ssrError: computeResult.error,
@@ -5203,7 +5251,8 @@ async function renderSSRDocumentStream(options) {
5203
5251
  cachedTailwindCSS: options.cachedTailwindCSS,
5204
5252
  debug,
5205
5253
  headers: options.headers,
5206
- titleSuffix: options.titleSuffix
5254
+ titleSuffix: options.titleSuffix,
5255
+ timeout: options.timeout
5207
5256
  }, true);
5208
5257
  if (debug)
5209
5258
  console.log(`[renderStream] ${pathname} - performSSRSetup: ${(performance.now() - t0).toFixed(2)}ms`);
@@ -5286,7 +5335,7 @@ async function streamSSRContent(writer, encoder, ctx) {
5286
5335
  const STREAM_TIMEOUT_MS = ctx.timeout ?? 120000;
5287
5336
  let streamTimedOut = false;
5288
5337
  let timeoutId = null;
5289
- const cleanup = () => {
5338
+ const cleanup2 = () => {
5290
5339
  if (timeoutId) {
5291
5340
  clearTimeout(timeoutId);
5292
5341
  timeoutId = null;
@@ -5336,6 +5385,11 @@ async function streamSSRContent(writer, encoder, ctx) {
5336
5385
  streamTimeoutPromise
5337
5386
  ]);
5338
5387
  if (result.done || streamTimedOut) {
5388
+ if (streamTimedOut) {
5389
+ try {
5390
+ await reader.cancel(`[reroute] stream timeout for ${ctx.pathname}`);
5391
+ } catch {}
5392
+ }
5339
5393
  try {
5340
5394
  reader.releaseLock();
5341
5395
  } catch {}
@@ -5346,12 +5400,15 @@ async function streamSSRContent(writer, encoder, ctx) {
5346
5400
  chunkCount++;
5347
5401
  }
5348
5402
  }
5349
- cleanup();
5403
+ cleanup2();
5350
5404
  span.setAttributes({
5351
5405
  "reroute.stream.chunks": chunkCount,
5352
5406
  "reroute.stream.timedOut": streamTimedOut
5353
5407
  });
5354
5408
  });
5409
+ if (streamTimedOut) {
5410
+ cleanupPathScopedSSRData(ctx.pathname);
5411
+ }
5355
5412
  await writer.write(encoder.encode(ctx.rootEnd));
5356
5413
  const allScripts = await withSpan("ssr.generate.scripts", async (span) => {
5357
5414
  const scripts2 = buildStreamingScripts(ctx);
@@ -5361,7 +5418,8 @@ async function streamSSRContent(writer, encoder, ctx) {
5361
5418
  await writer.write(encoder.encode(allScripts + ctx.htmlTail));
5362
5419
  await writer.close();
5363
5420
  } catch (error) {
5364
- cleanup();
5421
+ cleanup2();
5422
+ cleanupPathScopedSSRData(ctx.pathname);
5365
5423
  console.error("[reroute] Stream error:", error);
5366
5424
  try {
5367
5425
  await writer.abort(error);
@@ -5611,6 +5669,7 @@ __export(exports_core, {
5611
5669
  computeLayoutData: () => computeLayoutData,
5612
5670
  computeContentData: () => computeContentData,
5613
5671
  compressStreamIfAccepted: () => compressStreamIfAccepted,
5672
+ cleanupPathScopedSSRData: () => cleanupPathScopedSSRData,
5614
5673
  buildHeadFromMeta: () => buildHeadFromMeta,
5615
5674
  blockSearchCrawlers: () => blockSearchCrawlers,
5616
5675
  blockAITrainingCrawlers: () => blockAITrainingCrawlers,
@@ -8952,4 +9011,4 @@ export {
8952
9011
  reroute
8953
9012
  };
8954
9013
 
8955
- //# debugId=03CB8CE75296216864756E2164756E21
9014
+ //# debugId=368286D61E05EB2164756E2164756E21