reroute-js 0.42.1 → 0.43.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 (186) hide show
  1. package/cli/bin.d.ts +1 -1
  2. package/cli/bin.js +111 -10
  3. package/cli/bin.js.map +6 -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 +107 -6
  35. package/core/index.js.map +6 -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 +81 -5
  39. package/core/src/config.d.ts.map +1 -1
  40. package/core/src/content/discovery.d.ts +1 -1
  41. package/core/src/content/index.d.ts +1 -1
  42. package/core/src/content/metadata.d.ts +1 -1
  43. package/core/src/index.d.ts +1 -1
  44. package/core/src/llms/extractor.d.ts +1 -1
  45. package/core/src/llms/formatter.d.ts +1 -1
  46. package/core/src/llms/full-generator.d.ts +1 -1
  47. package/core/src/llms/index-generator.d.ts +1 -1
  48. package/core/src/llms/index.d.ts +1 -1
  49. package/core/src/og/discovery.d.ts +1 -1
  50. package/core/src/og/index.d.ts +1 -1
  51. package/core/src/og/meta.d.ts +1 -1
  52. package/core/src/og/render.d.ts +1 -1
  53. package/core/src/og/types.d.ts +1 -1
  54. package/core/src/robots/discovery.d.ts +1 -1
  55. package/core/src/robots/generator.d.ts +1 -1
  56. package/core/src/robots/index.d.ts +1 -1
  57. package/core/src/robots/policies.d.ts +1 -1
  58. package/core/src/rss/discovery.d.ts +1 -1
  59. package/core/src/rss/generator.d.ts +1 -1
  60. package/core/src/rss/index.d.ts +1 -1
  61. package/core/src/sitemap/discovery.d.ts +1 -1
  62. package/core/src/sitemap/generator.d.ts +1 -1
  63. package/core/src/sitemap/index.d.ts +1 -1
  64. package/core/src/ssr/index.d.ts +1 -1
  65. package/core/src/ssr/lib/cache.d.ts +1 -1
  66. package/core/src/ssr/lib/collections.d.ts +1 -1
  67. package/core/src/ssr/lib/compression.d.ts +1 -1
  68. package/core/src/ssr/lib/compute/content.d.ts +1 -1
  69. package/core/src/ssr/lib/compute/index.d.ts +1 -1
  70. package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
  71. package/core/src/ssr/lib/compute/routes.d.ts +1 -1
  72. package/core/src/ssr/lib/data.d.ts +1 -1
  73. package/core/src/ssr/lib/html.d.ts +1 -1
  74. package/core/src/ssr/lib/imports.d.ts +1 -1
  75. package/core/src/ssr/lib/index.d.ts +1 -1
  76. package/core/src/ssr/lib/layouts.d.ts +1 -1
  77. package/core/src/ssr/lib/metadata.d.ts +1 -1
  78. package/core/src/ssr/lib/metadata.d.ts.map +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/serialize.d.ts +1 -1
  90. package/core/src/ssr/lib/setup.d.ts +4 -1
  91. package/core/src/ssr/lib/setup.d.ts.map +1 -1
  92. package/core/src/ssr/lib/styles.d.ts +1 -1
  93. package/core/src/ssr/lib/template.d.ts +1 -1
  94. package/core/src/ssr/lib/types.d.ts +3 -1
  95. package/core/src/ssr/lib/types.d.ts.map +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 +163 -43
  101. package/elysia/index.js.map +8 -8
  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/plugin.d.ts.map +1 -1
  114. package/elysia/src/routes/artifacts.d.ts +1 -1
  115. package/elysia/src/routes/content.d.ts +1 -1
  116. package/elysia/src/routes/image.d.ts +1 -1
  117. package/elysia/src/routes/index.d.ts +1 -1
  118. package/elysia/src/routes/internal.d.ts +1 -1
  119. package/elysia/src/routes/llms.d.ts +1 -1
  120. package/elysia/src/routes/og.d.ts +1 -1
  121. package/elysia/src/routes/redirects.d.ts +1 -1
  122. package/elysia/src/routes/robots.d.ts +1 -1
  123. package/elysia/src/routes/rss.d.ts +1 -1
  124. package/elysia/src/routes/search.d.ts +1 -1
  125. package/elysia/src/routes/sitemap.d.ts +1 -1
  126. package/elysia/src/routes/ssr.d.ts +6 -3
  127. package/elysia/src/routes/ssr.d.ts.map +1 -1
  128. package/elysia/src/routes/static.d.ts +1 -1
  129. package/elysia/src/types.d.ts +1 -1
  130. package/package.json +1 -1
  131. package/react/index.d.ts +1 -1
  132. package/react/index.js +17 -5
  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/Markdown.d.ts +1 -1
  140. package/react/src/components/Outlet.d.ts +1 -1
  141. package/react/src/components/index.d.ts +1 -1
  142. package/react/src/hooks/index.d.ts +1 -1
  143. package/react/src/hooks/useContent.d.ts +1 -1
  144. package/react/src/hooks/useData.d.ts +1 -1
  145. package/react/src/hooks/useFeed.d.ts +1 -1
  146. package/react/src/hooks/useLayoutData.d.ts +1 -1
  147. package/react/src/hooks/useLlms.d.ts +1 -1
  148. package/react/src/hooks/useNavigate.d.ts +1 -1
  149. package/react/src/hooks/useParams.d.ts +1 -1
  150. package/react/src/hooks/useRouter.d.ts +1 -1
  151. package/react/src/hooks/useSearch.d.ts +1 -1
  152. package/react/src/hooks/useSearchParams.d.ts +1 -1
  153. package/react/src/hooks/useToc.d.ts +1 -1
  154. package/react/src/index.d.ts +1 -1
  155. package/react/src/lib/collection.d.ts +1 -1
  156. package/react/src/lib/content.d.ts +1 -1
  157. package/react/src/lib/head.d.ts +1 -1
  158. package/react/src/lib/index.d.ts +1 -1
  159. package/react/src/lib/lazy-route.d.ts +1 -1
  160. package/react/src/lib/route-loader.d.ts +1 -1
  161. package/react/src/providers/ContentProvider.d.ts +1 -1
  162. package/react/src/providers/RerouteProvider.d.ts +1 -1
  163. package/react/src/providers/RouterProvider.d.ts +1 -1
  164. package/react/src/providers/RouterProvider.d.ts.map +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/react.d.ts +1 -1
  170. package/telemetry/react.js +2 -2
  171. package/telemetry/react.js.map +1 -1
  172. package/telemetry/server.d.ts +1 -1
  173. package/telemetry/server.js +2 -2
  174. package/telemetry/server.js.map +6 -6
  175. package/telemetry/src/react/api.d.ts +1 -1
  176. package/telemetry/src/react/context.d.ts +1 -1
  177. package/telemetry/src/react/index.d.ts +1 -1
  178. package/telemetry/src/react/telemetry.d.ts +1 -1
  179. package/telemetry/src/server/context.d.ts +1 -1
  180. package/telemetry/src/server/headers/extractor.d.ts +1 -1
  181. package/telemetry/src/server/headers/index.d.ts +1 -1
  182. package/telemetry/src/server/headers/presets.d.ts +1 -1
  183. package/telemetry/src/server/index.d.ts +1 -1
  184. package/telemetry/src/server/instrumentation.d.ts +1 -1
  185. package/telemetry/src/server/plugin.d.ts +1 -1
  186. package/telemetry/src/server/sourcemap.d.ts +1 -1
package/cli/bin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.42.1
2
+ * reroute-js v0.43.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 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.42.1
4
+ * reroute-js v0.43.0
5
5
  *
6
6
  * @license MIT
7
7
  * @copyright 2026 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.42.1";
51
+ return "0.43.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 "9c8c128";
69
+ return "8a3c652";
70
70
  }
71
71
  return "dev";
72
72
  }
@@ -2215,7 +2215,12 @@ ${ogMetaTags}`;
2215
2215
  if (routeResult.lang)
2216
2216
  pageLang = routeResult.lang;
2217
2217
  statusOverride = routeResult.statusOverride;
2218
- return { perPageHead, pageLang, statusOverride };
2218
+ return {
2219
+ perPageHead,
2220
+ pageLang,
2221
+ statusOverride,
2222
+ ssrExport: routeResult.ssrExport
2223
+ };
2219
2224
  }
2220
2225
  async function processLayoutForMetadata(layout, clientDir, isWatchMode, addHead, setLang, ogConfig) {
2221
2226
  if (typeof layout?.path !== "string")
@@ -2285,7 +2290,12 @@ async function extractMatchedRouteMetadata(pathname, clientDir, m, isWatchMode,
2285
2290
  if (ssrHead)
2286
2291
  head += `
2287
2292
  ${ssrHead}`;
2288
- return { head, lang: extractSSRLang(ssr), statusOverride };
2293
+ return {
2294
+ head,
2295
+ lang: extractSSRLang(ssr),
2296
+ statusOverride,
2297
+ ssrExport: ssr
2298
+ };
2289
2299
  }
2290
2300
  return { head, statusOverride };
2291
2301
  } catch {}
@@ -2296,6 +2306,7 @@ async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, curre
2296
2306
  let head = "";
2297
2307
  let lang;
2298
2308
  let statusOverride = currentStatusOverride;
2309
+ let ssrExport;
2299
2310
  try {
2300
2311
  const m = await loadRoutesModule(cwd, isWatchMode);
2301
2312
  if (!m) {
@@ -2312,13 +2323,14 @@ async function extractRouteMetadata(pathname, clientDir, cwd, isWatchMode, curre
2312
2323
  head = result.head;
2313
2324
  lang = result.lang;
2314
2325
  statusOverride = result.statusOverride;
2326
+ ssrExport = result.ssrExport;
2315
2327
  } else {
2316
2328
  head += await extractNotFoundMetadata(pathname, clientDir, m, isWatchMode, (l) => {
2317
2329
  lang = l;
2318
2330
  }, ogConfig);
2319
2331
  }
2320
2332
  } catch {}
2321
- return { head, lang, statusOverride };
2333
+ return { head, lang, statusOverride, ssrExport };
2322
2334
  }
2323
2335
  function findBestNotFoundRoute(list, pathname) {
2324
2336
  let chosen;
@@ -5380,7 +5392,8 @@ async function renderSSRDocumentStream(options) {
5380
5392
  browserTelemetryConfig,
5381
5393
  traceContext,
5382
5394
  parentSpan: options.parentSpan,
5383
- timeout: options.timeout
5395
+ timeout: options.timeout,
5396
+ ssrExport: setup2.metadataResult.ssrExport
5384
5397
  });
5385
5398
  if (debug)
5386
5399
  console.log(`[renderStream] ${pathname} - returning stream: ${(performance.now() - t0).toFixed(2)}ms`);
@@ -5488,12 +5501,100 @@ function buildStreamingScripts(ctx) {
5488
5501
  const feedsScript = createFeedsScript();
5489
5502
  const llmsScript = createLlmsScript();
5490
5503
  let allScripts = dataScript + feedsScript + llmsScript + collectionScripts + ctx.preloadHydrationScript;
5504
+ const metaUpdateScript = generateMetaUpdateScript(ctx, ssrDataSnapshot);
5505
+ if (metaUpdateScript) {
5506
+ allScripts += metaUpdateScript;
5507
+ }
5491
5508
  allScripts += `<script type="module" src="${ctx.bundleUrl}"></script>`;
5492
5509
  if (ctx.isWatchMode) {
5493
5510
  allScripts += `<script type="module" src="/__reroute_watch.js"></script>`;
5494
5511
  }
5495
5512
  return allScripts;
5496
5513
  }
5514
+ function generateMetaUpdateScript(ctx, ssrDataSnapshot) {
5515
+ if (typeof ctx.ssrExport?.head !== "function") {
5516
+ return "";
5517
+ }
5518
+ const routeData = ssrDataSnapshot[ctx.pathname];
5519
+ if (!routeData) {
5520
+ return "";
5521
+ }
5522
+ let headResult;
5523
+ try {
5524
+ headResult = ctx.ssrExport.head({ data: routeData });
5525
+ } catch (err) {
5526
+ console.error("[reroute] Error calling ssr.head() at stream end:", err);
5527
+ return "";
5528
+ }
5529
+ if (!headResult) {
5530
+ return "";
5531
+ }
5532
+ const headHtml = Array.isArray(headResult) ? headResult.join(`
5533
+ `) : headResult;
5534
+ if (!headHtml) {
5535
+ return "";
5536
+ }
5537
+ const metaUpdates = parseHeadForMetaUpdates(headHtml);
5538
+ if (Object.keys(metaUpdates).length === 0) {
5539
+ return "";
5540
+ }
5541
+ const updatesJson = JSON.stringify(metaUpdates);
5542
+ return `<script>(function(){var u=${updatesJson};if(u.title){document.title=u.title}Object.keys(u).forEach(function(k){if(k==='title')return;var s=k.split(':');var isOg=s[0]==='og'||s[0]==='twitter';var el=isOg?document.querySelector('meta[property="'+k+'"]')||document.querySelector('meta[name="'+k+'"]'):document.querySelector('meta[name="'+k+'"]');if(el){el.setAttribute('content',u[k])}else{var m=document.createElement('meta');m.setAttribute(isOg?'property':'name',k);m.setAttribute('content',u[k]);document.head.appendChild(m)}})})()</script>`;
5543
+ }
5544
+ function parseHeadForMetaUpdates(headHtml) {
5545
+ const updates = {};
5546
+ const titleMatch = headHtml.match(/<title[^>]*>(.*?)<\/title>/is);
5547
+ if (titleMatch?.[1]) {
5548
+ updates.title = unescapeHtmlEntities(titleMatch[1].trim());
5549
+ }
5550
+ let descMatch = headHtml.match(/<meta\s+name=["']description["']\s+content=["'](.+?)["']/i);
5551
+ if (!descMatch) {
5552
+ descMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+name=["']description["']/i);
5553
+ }
5554
+ if (descMatch?.[1]) {
5555
+ updates.description = unescapeHtmlEntities(descMatch[1].trim());
5556
+ }
5557
+ let ogTitleMatch = headHtml.match(/<meta\s+property=["']og:title["']\s+content=["'](.+?)["']/i);
5558
+ if (!ogTitleMatch) {
5559
+ ogTitleMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+property=["']og:title["']/i);
5560
+ }
5561
+ if (ogTitleMatch?.[1]) {
5562
+ updates["og:title"] = unescapeHtmlEntities(ogTitleMatch[1].trim());
5563
+ } else if (updates.title) {
5564
+ updates["og:title"] = updates.title;
5565
+ }
5566
+ let ogDescMatch = headHtml.match(/<meta\s+property=["']og:description["']\s+content=["'](.+?)["']/i);
5567
+ if (!ogDescMatch) {
5568
+ ogDescMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+property=["']og:description["']/i);
5569
+ }
5570
+ if (ogDescMatch?.[1]) {
5571
+ updates["og:description"] = unescapeHtmlEntities(ogDescMatch[1].trim());
5572
+ } else if (updates.description) {
5573
+ updates["og:description"] = updates.description;
5574
+ }
5575
+ let twitterTitleMatch = headHtml.match(/<meta\s+name=["']twitter:title["']\s+content=["'](.+?)["']/i);
5576
+ if (!twitterTitleMatch) {
5577
+ twitterTitleMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+name=["']twitter:title["']/i);
5578
+ }
5579
+ if (twitterTitleMatch?.[1]) {
5580
+ updates["twitter:title"] = unescapeHtmlEntities(twitterTitleMatch[1].trim());
5581
+ } else if (updates.title) {
5582
+ updates["twitter:title"] = updates.title;
5583
+ }
5584
+ let twitterDescMatch = headHtml.match(/<meta\s+name=["']twitter:description["']\s+content=["'](.+?)["']/i);
5585
+ if (!twitterDescMatch) {
5586
+ twitterDescMatch = headHtml.match(/<meta\s+content=["'](.+?)["']\s+name=["']twitter:description["']/i);
5587
+ }
5588
+ if (twitterDescMatch?.[1]) {
5589
+ updates["twitter:description"] = unescapeHtmlEntities(twitterDescMatch[1].trim());
5590
+ } else if (updates.description) {
5591
+ updates["twitter:description"] = updates.description;
5592
+ }
5593
+ return updates;
5594
+ }
5595
+ function unescapeHtmlEntities(str) {
5596
+ return str.replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
5597
+ }
5497
5598
  var init_stream = __esm(() => {
5498
5599
  init_server2();
5499
5600
  init_config();
@@ -105896,7 +105997,7 @@ async function getVersionString2() {
105896
105997
  }
105897
105998
  async function getVersion2() {
105898
105999
  if (true) {
105899
- return "0.42.1";
106000
+ return "0.43.0";
105900
106001
  }
105901
106002
  const possiblePaths = [
105902
106003
  path3.join(import.meta.dir, "../../../package.json"),
@@ -105913,10 +106014,10 @@ async function getVersion2() {
105913
106014
  }
105914
106015
  async function getCommit2() {
105915
106016
  if (true) {
105916
- return "9c8c128";
106017
+ return "8a3c652";
105917
106018
  }
105918
106019
  return "dev";
105919
106020
  }
105920
106021
  main();
105921
106022
 
105922
- //# debugId=EC8E02CE3A67EA5F64756E2164756E21
106023
+ //# debugId=F78EC5575219E60664756E2164756E21