reroute-js 0.24.1 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/cli/bin.d.ts +1 -1
  2. package/cli/bin.js +90 -11
  3. package/cli/bin.js.map +7 -7
  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/gen.d.ts.map +1 -1
  13. package/cli/src/commands/index.d.ts +1 -1
  14. package/cli/src/commands/init.d.ts +1 -1
  15. package/cli/src/commands/lib/assets.d.ts +1 -1
  16. package/cli/src/commands/lib/bundler.d.ts +1 -1
  17. package/cli/src/commands/lib/command.d.ts +1 -1
  18. package/cli/src/commands/lib/env.d.ts +1 -1
  19. package/cli/src/commands/lib/index.d.ts +1 -1
  20. package/cli/src/commands/lib/log.d.ts +1 -1
  21. package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
  22. package/cli/src/commands/lib/markdown/index.d.ts +1 -1
  23. package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
  24. package/cli/src/commands/lib/production.d.ts +1 -1
  25. package/cli/src/commands/lib/server.d.ts +1 -1
  26. package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
  27. package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
  28. package/cli/src/commands/lib/tailwind.d.ts +1 -1
  29. package/cli/src/commands/lib/terminal-ui.d.ts +1 -1
  30. package/cli/src/commands/lib/version.d.ts +1 -1
  31. package/cli/src/commands/og.d.ts +1 -1
  32. package/cli/src/commands/start.d.ts +1 -1
  33. package/cli/src/index.d.ts +1 -1
  34. package/core/index.d.ts +1 -1
  35. package/core/index.js +47 -7
  36. package/core/index.js.map +6 -6
  37. package/core/src/bundler/hash.d.ts +1 -1
  38. package/core/src/bundler/index.d.ts +1 -1
  39. package/core/src/config.d.ts +2 -1
  40. package/core/src/config.d.ts.map +1 -1
  41. package/core/src/content/discovery.d.ts +1 -1
  42. package/core/src/content/index.d.ts +1 -1
  43. package/core/src/content/metadata.d.ts +1 -1
  44. package/core/src/index.d.ts +1 -1
  45. package/core/src/llms/extractor.d.ts +1 -1
  46. package/core/src/llms/formatter.d.ts +1 -1
  47. package/core/src/llms/full-generator.d.ts +1 -1
  48. package/core/src/llms/index-generator.d.ts +1 -1
  49. package/core/src/llms/index.d.ts +1 -1
  50. package/core/src/og/discovery.d.ts +1 -1
  51. package/core/src/og/index.d.ts +1 -1
  52. package/core/src/og/meta.d.ts +1 -1
  53. package/core/src/og/render.d.ts +1 -1
  54. package/core/src/og/types.d.ts +1 -1
  55. package/core/src/robots/discovery.d.ts +1 -1
  56. package/core/src/robots/generator.d.ts +1 -1
  57. package/core/src/robots/index.d.ts +1 -1
  58. package/core/src/robots/policies.d.ts +1 -1
  59. package/core/src/rss/discovery.d.ts +1 -1
  60. package/core/src/rss/generator.d.ts +1 -1
  61. package/core/src/rss/index.d.ts +1 -1
  62. package/core/src/sitemap/discovery.d.ts +1 -1
  63. package/core/src/sitemap/generator.d.ts +1 -1
  64. package/core/src/sitemap/index.d.ts +1 -1
  65. package/core/src/ssr/index.d.ts +1 -1
  66. package/core/src/ssr/lib/cache.d.ts +1 -1
  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 +1 -1
  77. package/core/src/ssr/lib/layouts.d.ts +1 -1
  78. package/core/src/ssr/lib/metadata.d.ts +1 -1
  79. package/core/src/ssr/lib/mime.d.ts +1 -1
  80. package/core/src/ssr/lib/modules.d.ts +1 -1
  81. package/core/src/ssr/lib/path.d.ts +1 -1
  82. package/core/src/ssr/lib/preload.d.ts +1 -1
  83. package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
  84. package/core/src/ssr/lib/scripts/data.d.ts +1 -1
  85. package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
  86. package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
  87. package/core/src/ssr/lib/scripts/index.d.ts +1 -1
  88. package/core/src/ssr/lib/seed.d.ts +1 -1
  89. package/core/src/ssr/lib/setup.d.ts +4 -1
  90. package/core/src/ssr/lib/setup.d.ts.map +1 -1
  91. package/core/src/ssr/lib/styles.d.ts +1 -1
  92. package/core/src/ssr/lib/template.d.ts +1 -1
  93. package/core/src/ssr/lib/types.d.ts +1 -1
  94. package/core/src/ssr/render.d.ts +3 -1
  95. package/core/src/ssr/render.d.ts.map +1 -1
  96. package/core/src/ssr/stream.d.ts +5 -1
  97. package/core/src/ssr/stream.d.ts.map +1 -1
  98. package/elysia/index.d.ts +1 -1
  99. package/elysia/index.js +393 -564
  100. package/elysia/index.js.map +8 -8
  101. package/elysia/src/index.d.ts +1 -1
  102. package/elysia/src/libs/assets.d.ts +1 -1
  103. package/elysia/src/libs/cache.d.ts +1 -1
  104. package/elysia/src/libs/caching.d.ts +1 -1
  105. package/elysia/src/libs/http.d.ts +1 -1
  106. package/elysia/src/libs/image.d.ts +1 -1
  107. package/elysia/src/libs/index.d.ts +1 -1
  108. package/elysia/src/libs/llms.d.ts +1 -1
  109. package/elysia/src/libs/response.d.ts +1 -1
  110. package/elysia/src/libs/serving.d.ts +1 -1
  111. package/elysia/src/plugin.d.ts +1 -1
  112. package/elysia/src/plugin.d.ts.map +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 +6 -7
  126. package/elysia/src/routes/ssr.d.ts.map +1 -1
  127. package/elysia/src/routes/static.d.ts +1 -1
  128. package/elysia/src/types.d.ts +2 -1
  129. package/elysia/src/types.d.ts.map +1 -1
  130. package/package.json +1 -1
  131. package/react/index.d.ts +1 -1
  132. package/react/index.js +9 -8
  133. package/react/index.js.map +3 -3
  134. package/react/src/components/ClientOnly.d.ts +1 -1
  135. package/react/src/components/ContentRoute.d.ts +1 -1
  136. package/react/src/components/Image.d.ts +1 -1
  137. package/react/src/components/LazyRoute.d.ts +1 -1
  138. package/react/src/components/Link.d.ts +1 -1
  139. package/react/src/components/Link.d.ts.map +1 -1
  140. package/react/src/components/Markdown.d.ts +1 -1
  141. package/react/src/components/Outlet.d.ts +1 -1
  142. package/react/src/components/index.d.ts +1 -1
  143. package/react/src/hooks/index.d.ts +1 -1
  144. package/react/src/hooks/useContent.d.ts +1 -1
  145. package/react/src/hooks/useData.d.ts +1 -1
  146. package/react/src/hooks/useFeed.d.ts +1 -1
  147. package/react/src/hooks/useLayoutData.d.ts +1 -1
  148. package/react/src/hooks/useLlms.d.ts +1 -1
  149. package/react/src/hooks/useNavigate.d.ts +1 -1
  150. package/react/src/hooks/useParams.d.ts +1 -1
  151. package/react/src/hooks/useRouter.d.ts +1 -1
  152. package/react/src/hooks/useSearch.d.ts +1 -1
  153. package/react/src/hooks/useSearchParams.d.ts +1 -1
  154. package/react/src/hooks/useToc.d.ts +1 -1
  155. package/react/src/index.d.ts +1 -1
  156. package/react/src/lib/collection.d.ts +1 -1
  157. package/react/src/lib/content.d.ts +1 -1
  158. package/react/src/lib/head.d.ts +1 -1
  159. package/react/src/lib/index.d.ts +1 -1
  160. package/react/src/lib/lazy-route.d.ts +1 -1
  161. package/react/src/lib/route-loader.d.ts +1 -1
  162. package/react/src/providers/ContentProvider.d.ts +1 -1
  163. package/react/src/providers/RerouteProvider.d.ts +1 -1
  164. package/react/src/providers/RouterProvider.d.ts +1 -1
  165. package/react/src/providers/index.d.ts +1 -1
  166. package/react/src/types/any.d.ts +1 -1
  167. package/react/src/types/index.d.ts +1 -1
  168. package/react/src/types/router.d.ts +1 -1
  169. package/telemetry/browser.d.ts +1 -1
  170. package/telemetry/browser.js +2 -2
  171. package/telemetry/browser.js.map +1 -1
  172. package/telemetry/index.d.ts +1 -1
  173. package/telemetry/index.js +2 -2
  174. package/telemetry/index.js.map +1 -1
  175. package/telemetry/react.d.ts +1 -1
  176. package/telemetry/react.js +2 -2
  177. package/telemetry/react.js.map +1 -1
  178. package/telemetry/src/browser/index.d.ts +1 -1
  179. package/telemetry/src/browser/react.d.ts +1 -1
  180. package/telemetry/src/server/index.d.ts +1 -1
package/cli/bin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.24.1
2
+ * reroute-js v0.25.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2025 stewones <hi@stewan.io>
package/cli/bin.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
3
  /**
4
- * reroute-js v0.24.1
4
+ * reroute-js v0.25.0
5
5
  *
6
6
  * @license MIT
7
7
  * @copyright 2025 stewones <hi@stewan.io>
@@ -48,7 +48,7 @@ async function getVersionString() {
48
48
  }
49
49
  async function getVersion() {
50
50
  if (true) {
51
- return "0.24.1";
51
+ return "0.25.0";
52
52
  }
53
53
  const possiblePaths = [
54
54
  path.join(import.meta.dir, "../../../../package.json"),
@@ -66,7 +66,7 @@ async function getVersion() {
66
66
  }
67
67
  async function getCommit() {
68
68
  if (true) {
69
- return "0a5e69f";
69
+ return "391f6f1";
70
70
  }
71
71
  return "dev";
72
72
  }
@@ -2441,6 +2441,8 @@ async function performSSRSetup(options, streaming = false) {
2441
2441
  }
2442
2442
  }
2443
2443
  async function performSSRSetupInternal(options, streaming) {
2444
+ const debug = options.debug ?? false;
2445
+ const t0 = debug ? performance.now() : 0;
2444
2446
  const {
2445
2447
  pathname,
2446
2448
  clientDir,
@@ -2452,19 +2454,33 @@ async function performSSRSetupInternal(options, streaming) {
2452
2454
  ogConfig
2453
2455
  } = options;
2454
2456
  await seedSSRModuleForPath(pathname, clientDir, cwd, isWatchMode);
2457
+ if (debug)
2458
+ console.log(`[Setup] ${pathname} - seedModule: ${(performance.now() - t0).toFixed(2)}ms`);
2455
2459
  resetSSRAccessTracking();
2456
2460
  const bundlePreload = createBundlePreload(bundleUrl);
2457
2461
  const preloadResult = await preloadContentModule(pathname, clientDir, cwd, isWatchMode);
2462
+ if (debug)
2463
+ console.log(`[Setup] ${pathname} - preloadContent: ${(performance.now() - t0).toFixed(2)}ms`);
2458
2464
  const computeResult = await computeSSRData(pathname, clientDir, cwd, isWatchMode, { streaming, maxAge }, searchParams);
2465
+ if (debug)
2466
+ console.log(`[Setup] ${pathname} - computeSSRData: ${(performance.now() - t0).toFixed(2)}ms`);
2459
2467
  setGlobalSSRData(computeResult.data);
2460
- const byCollectionForSSR = await loadCollections(cwd, isWatchMode);
2468
+ const usingCachedCollections = !!options.cachedCollections;
2469
+ const byCollectionForSSR = options.cachedCollections ? options.cachedCollections : await loadCollections(cwd, isWatchMode);
2470
+ if (debug)
2471
+ console.log(`[Setup] ${pathname} - loadCollections (cached: ${usingCachedCollections}): ${(performance.now() - t0).toFixed(2)}ms`);
2461
2472
  setGlobalCollections(byCollectionForSSR);
2462
- const inlineStyleTag = await inlineTailwindCSS(clientDir, !streaming, isWatchMode);
2473
+ const usingCachedCSS = !!options.cachedTailwindCSS;
2474
+ const inlineStyleTag = options.cachedTailwindCSS ? options.cachedTailwindCSS : await inlineTailwindCSS(clientDir, !streaming, isWatchMode);
2475
+ if (debug)
2476
+ console.log(`[Setup] ${pathname} - inlineTailwindCSS (cached: ${usingCachedCSS}): ${(performance.now() - t0).toFixed(2)}ms`);
2463
2477
  let statusOverride = preloadResult.statusOverride;
2464
2478
  if (computeResult.statusContainer.value) {
2465
2479
  statusOverride = computeResult.statusContainer.value;
2466
2480
  }
2467
2481
  const metadataResult = await extractPageMetadata(pathname, clientDir, cwd, isWatchMode, statusOverride, ogConfig);
2482
+ if (debug)
2483
+ console.log(`[Setup] ${pathname} - extractMetadata: ${(performance.now() - t0).toFixed(2)}ms`);
2468
2484
  return {
2469
2485
  ssrData: computeResult.data,
2470
2486
  ssrError: computeResult.error,
@@ -2578,7 +2594,9 @@ async function renderSSRDocument(options) {
2578
2594
  bundleUrl,
2579
2595
  maxAge,
2580
2596
  searchParams,
2581
- ogConfig
2597
+ ogConfig,
2598
+ cachedCollections: options.cachedCollections,
2599
+ cachedTailwindCSS: options.cachedTailwindCSS
2582
2600
  }, false);
2583
2601
  const duplicatedData = duplicateQueryParamData(setup2.ssrData);
2584
2602
  setGlobalSSRData(duplicatedData);
@@ -4521,6 +4539,8 @@ var init_sitemap = __esm(() => {
4521
4539
  import { cloneElement as cloneElement2 } from "react";
4522
4540
  import { renderToReadableStream } from "react-dom/server";
4523
4541
  async function renderSSRDocumentStream(options) {
4542
+ const debug = options.debug ?? false;
4543
+ const t0 = debug ? performance.now() : 0;
4524
4544
  const {
4525
4545
  pathname,
4526
4546
  rootComponent,
@@ -4535,6 +4555,8 @@ async function renderSSRDocumentStream(options) {
4535
4555
  searchParams,
4536
4556
  ogConfig
4537
4557
  } = options;
4558
+ if (debug)
4559
+ console.log(`[renderStream] ${pathname} - start: 0ms`);
4538
4560
  const setup2 = await performSSRSetup({
4539
4561
  pathname,
4540
4562
  clientDir,
@@ -4543,8 +4565,13 @@ async function renderSSRDocumentStream(options) {
4543
4565
  bundleUrl,
4544
4566
  maxAge,
4545
4567
  searchParams,
4546
- ogConfig
4568
+ ogConfig,
4569
+ cachedCollections: options.cachedCollections,
4570
+ cachedTailwindCSS: options.cachedTailwindCSS,
4571
+ debug
4547
4572
  }, true);
4573
+ if (debug)
4574
+ console.log(`[renderStream] ${pathname} - performSSRSetup: ${(performance.now() - t0).toFixed(2)}ms`);
4548
4575
  let statusOverride = setup2.preloadStatusOverride;
4549
4576
  if (setup2.statusContainer.value) {
4550
4577
  statusOverride = setup2.statusContainer.value;
@@ -4555,8 +4582,15 @@ async function renderSSRDocumentStream(options) {
4555
4582
  const encoder = new TextEncoder;
4556
4583
  const { readable, writable } = new TransformStream;
4557
4584
  const writer = writable.getWriter();
4558
- const baseTemplate = await loadIndexHtml(clientDir);
4585
+ const usingCache = !!options.cachedIndexHtml;
4586
+ const tBeforeLoad = debug ? performance.now() : 0;
4587
+ const baseTemplate = options.cachedIndexHtml ? options.cachedIndexHtml : await loadIndexHtml(clientDir);
4588
+ if (debug)
4589
+ console.log(`[renderStream] ${pathname} - loadIndexHtml (cached: ${usingCache}): ${(performance.now() - t0).toFixed(2)}ms (actual load: ${(performance.now() - tBeforeLoad).toFixed(2)}ms)`);
4590
+ const tBeforeSplit = debug ? performance.now() : 0;
4559
4591
  const { htmlHead, rootStart, rootEnd, htmlTail } = splitTemplate(baseTemplate, appId);
4592
+ if (debug)
4593
+ console.log(`[renderStream] ${pathname} - splitTemplate: ${(performance.now() - t0).toFixed(2)}ms (split took: ${(performance.now() - tBeforeSplit).toFixed(2)}ms)`);
4560
4594
  const pageLang = setup2.metadataResult.pageLang || lang;
4561
4595
  let headWithLang = htmlHead.replace(/<html([^>]*)>/i, `<html$1 lang="${pageLang}">`);
4562
4596
  const extraHead = setup2.bundlePreload + setup2.preloadExtraHead + setup2.metadataResult.perPageHead;
@@ -4580,14 +4614,18 @@ async function renderSSRDocumentStream(options) {
4580
4614
  htmlTail,
4581
4615
  bundleUrl,
4582
4616
  isWatchMode,
4617
+ debug,
4583
4618
  ssrData: setup2.ssrData,
4584
4619
  ssrError: setup2.ssrError,
4585
4620
  byCollectionForSSR: setup2.byCollectionForSSR,
4586
4621
  preloadHydrationScript: setup2.preloadHydrationScript
4587
4622
  });
4623
+ if (debug)
4624
+ console.log(`[renderStream] ${pathname} - returning stream: ${(performance.now() - t0).toFixed(2)}ms`);
4588
4625
  return { stream: readable, status: statusOverride || 200 };
4589
4626
  }
4590
4627
  async function streamSSRContent(writer, encoder, ctx) {
4628
+ const t0 = ctx.debug ? performance.now() : 0;
4591
4629
  const STREAM_TIMEOUT_MS = 60000;
4592
4630
  let streamTimedOut = false;
4593
4631
  let timeoutId = null;
@@ -4604,6 +4642,8 @@ async function streamSSRContent(writer, encoder, ctx) {
4604
4642
  ` : ""}</head>`);
4605
4643
  const headContent = `${headWithLangAndContent}<body>`;
4606
4644
  await writer.write(encoder.encode(headContent));
4645
+ if (ctx.debug)
4646
+ console.log(`[Stream] ${ctx.pathname} - first byte written: ${(performance.now() - t0).toFixed(2)}ms`);
4607
4647
  await writer.write(encoder.encode(ctx.rootStart));
4608
4648
  const componentWithPathname = cloneElement2(ctx.rootComponent, {
4609
4649
  pathname: ctx.pathname,
@@ -6565,6 +6605,45 @@ async function generate(cwd, args = [], options = {}) {
6565
6605
  console.error("[reroute/gen] Failed to generate content:", error);
6566
6606
  throw error;
6567
6607
  }
6608
+ try {
6609
+ await perfTrack("Manifest generation", async () => {
6610
+ const routesPath2 = join9(cwd, OUTPUT_ROUTES);
6611
+ const routesModule = await import(`file://${routesPath2}?t=${Date.now()}`);
6612
+ const routes = routesModule.routes || [];
6613
+ const staticRoutes = routes.filter((r) => !r.params || r.params.length === 0).map((r) => r.pattern);
6614
+ const contentRoutes = [];
6615
+ const collectionsDir = join9(cwd, ".reroute", "collections");
6616
+ try {
6617
+ const collectionFiles = await readdir5(collectionsDir);
6618
+ for (const file of collectionFiles) {
6619
+ if (file.endsWith(".js")) {
6620
+ const collectionPath = join9(collectionsDir, file);
6621
+ const collectionModule = await import(`file://${collectionPath}?t=${Date.now()}`);
6622
+ const items = collectionModule.items || [];
6623
+ for (const item of items) {
6624
+ if (item.href) {
6625
+ contentRoutes.push(item.href);
6626
+ }
6627
+ }
6628
+ }
6629
+ }
6630
+ } catch {}
6631
+ const dynamicRoutes = [];
6632
+ const dynamicFromTree = routes.filter((r) => r.params && r.params.length > 0).map((r) => {
6633
+ return r.pattern.replace(/\/:[^/]+.*$/, "/*");
6634
+ });
6635
+ dynamicRoutes.push(...new Set(dynamicFromTree));
6636
+ const manifest = {
6637
+ staticRoutes,
6638
+ contentRoutes,
6639
+ dynamicRoutes,
6640
+ version: 1
6641
+ };
6642
+ await Bun.write(join9(cwd, ".reroute", "manifest.json"), JSON.stringify(manifest, null, 2));
6643
+ });
6644
+ } catch (error) {
6645
+ console.error("[reroute/gen] Failed to generate manifest:", error);
6646
+ }
6568
6647
  if (config2.search?.enabled) {
6569
6648
  try {
6570
6649
  await perfTrack("Search index", () => buildSearchIndex(cwd, config2));
@@ -104784,7 +104863,7 @@ async function getVersionString2() {
104784
104863
  }
104785
104864
  async function getVersion2() {
104786
104865
  if (true) {
104787
- return "0.24.1";
104866
+ return "0.25.0";
104788
104867
  }
104789
104868
  const possiblePaths = [
104790
104869
  path3.join(import.meta.dir, "../../../package.json"),
@@ -104801,10 +104880,10 @@ async function getVersion2() {
104801
104880
  }
104802
104881
  async function getCommit2() {
104803
104882
  if (true) {
104804
- return "0a5e69f";
104883
+ return "391f6f1";
104805
104884
  }
104806
104885
  return "dev";
104807
104886
  }
104808
104887
  main();
104809
104888
 
104810
- //# debugId=1BCFE4E8AAA30D0D64756E2164756E21
104889
+ //# debugId=5D1B63B507BAD56D64756E2164756E21