reroute-js 1.0.0-alpha.11 → 1.0.0-alpha.13

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 (208) hide show
  1. package/cli/bin.d.ts +1 -1
  2. package/cli/bin.js +342 -274
  3. package/cli/bin.js.map +9 -8
  4. package/cli/index.d.ts +1 -1
  5. package/cli/index.js +4 -4
  6. package/cli/index.js.map +3 -3
  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/terminal-ui.d.ts +1 -1
  29. package/cli/src/commands/lib/theme.d.ts +2 -2
  30. package/cli/src/commands/lib/theme.d.ts.map +1 -1
  31. package/cli/src/commands/lib/version.d.ts +1 -1
  32. package/cli/src/commands/lib/watch.d.ts +26 -0
  33. package/cli/src/commands/lib/watch.d.ts.map +1 -0
  34. package/cli/src/commands/og.d.ts +1 -1
  35. package/cli/src/commands/start.d.ts +1 -1
  36. package/cli/src/index.d.ts +1 -1
  37. package/core/index.d.ts +1 -1
  38. package/core/index.js +34 -31
  39. package/core/index.js.map +5 -5
  40. package/core/src/bundler/hash.d.ts +1 -1
  41. package/core/src/bundler/index.d.ts +1 -1
  42. package/core/src/config.d.ts +6 -5
  43. package/core/src/config.d.ts.map +1 -1
  44. package/core/src/content/discovery.d.ts +1 -1
  45. package/core/src/content/index.d.ts +1 -1
  46. package/core/src/content/metadata.d.ts +1 -1
  47. package/core/src/i18n/catalog.d.ts +1 -1
  48. package/core/src/i18n/discover.d.ts +1 -1
  49. package/core/src/i18n/index.d.ts +1 -1
  50. package/core/src/i18n/messages.d.ts +1 -1
  51. package/core/src/i18n/negotiate.d.ts +1 -1
  52. package/core/src/i18n/pathname.d.ts +1 -1
  53. package/core/src/i18n/resolve.d.ts +1 -1
  54. package/core/src/i18n/types.d.ts +1 -1
  55. package/core/src/index.d.ts +1 -1
  56. package/core/src/llms/discovery.d.ts +1 -1
  57. package/core/src/llms/extractor.d.ts +1 -1
  58. package/core/src/llms/formatter.d.ts +1 -1
  59. package/core/src/llms/full-generator.d.ts +1 -1
  60. package/core/src/llms/index-generator.d.ts +1 -1
  61. package/core/src/llms/index.d.ts +1 -1
  62. package/core/src/og/discovery.d.ts +1 -1
  63. package/core/src/og/index.d.ts +1 -1
  64. package/core/src/og/meta.d.ts +1 -1
  65. package/core/src/og/render.d.ts +1 -1
  66. package/core/src/og/types.d.ts +1 -1
  67. package/core/src/robots/discovery.d.ts +1 -1
  68. package/core/src/robots/generator.d.ts +1 -1
  69. package/core/src/robots/index.d.ts +1 -1
  70. package/core/src/robots/policies.d.ts +1 -1
  71. package/core/src/rss/discovery.d.ts +1 -1
  72. package/core/src/rss/generator.d.ts +1 -1
  73. package/core/src/rss/index.d.ts +1 -1
  74. package/core/src/sitemap/discovery.d.ts +1 -1
  75. package/core/src/sitemap/generator.d.ts +1 -1
  76. package/core/src/sitemap/index.d.ts +1 -1
  77. package/core/src/ssr/index.d.ts +1 -1
  78. package/core/src/ssr/lib/cache.d.ts +1 -1
  79. package/core/src/ssr/lib/cleanup.d.ts +1 -1
  80. package/core/src/ssr/lib/collections.d.ts +1 -1
  81. package/core/src/ssr/lib/compression.d.ts +1 -1
  82. package/core/src/ssr/lib/compute/content.d.ts +1 -1
  83. package/core/src/ssr/lib/compute/index.d.ts +1 -1
  84. package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
  85. package/core/src/ssr/lib/compute/routes.d.ts +1 -1
  86. package/core/src/ssr/lib/content-path.d.ts +1 -1
  87. package/core/src/ssr/lib/data.d.ts +1 -1
  88. package/core/src/ssr/lib/html.d.ts +1 -1
  89. package/core/src/ssr/lib/imports.d.ts +1 -1
  90. package/core/src/ssr/lib/index.d.ts +1 -1
  91. package/core/src/ssr/lib/layouts.d.ts +1 -1
  92. package/core/src/ssr/lib/metadata.d.ts +1 -1
  93. package/core/src/ssr/lib/mime.d.ts +1 -1
  94. package/core/src/ssr/lib/modules.d.ts +1 -1
  95. package/core/src/ssr/lib/path.d.ts +1 -1
  96. package/core/src/ssr/lib/preload.d.ts +1 -1
  97. package/core/src/ssr/lib/route-match.d.ts +1 -1
  98. package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
  99. package/core/src/ssr/lib/scripts/data.d.ts +1 -1
  100. package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
  101. package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
  102. package/core/src/ssr/lib/scripts/index.d.ts +1 -1
  103. package/core/src/ssr/lib/seed.d.ts +1 -1
  104. package/core/src/ssr/lib/serialize.d.ts +1 -1
  105. package/core/src/ssr/lib/setup.d.ts +1 -1
  106. package/core/src/ssr/lib/styles.d.ts +7 -4
  107. package/core/src/ssr/lib/styles.d.ts.map +1 -1
  108. package/core/src/ssr/lib/template.d.ts +1 -1
  109. package/core/src/ssr/lib/types.d.ts +1 -1
  110. package/core/src/ssr/render.d.ts +1 -1
  111. package/core/src/ssr/stream.d.ts +1 -1
  112. package/elysia/index.d.ts +1 -1
  113. package/elysia/index.js +114 -60
  114. package/elysia/index.js.map +12 -11
  115. package/elysia/src/index.d.ts +1 -1
  116. package/elysia/src/libs/assets.d.ts +1 -1
  117. package/elysia/src/libs/cache.d.ts +6 -1
  118. package/elysia/src/libs/cache.d.ts.map +1 -1
  119. package/elysia/src/libs/caching.d.ts +1 -1
  120. package/elysia/src/libs/http.d.ts +1 -1
  121. package/elysia/src/libs/i18n.d.ts +1 -1
  122. package/elysia/src/libs/image.d.ts +1 -1
  123. package/elysia/src/libs/index.d.ts +1 -1
  124. package/elysia/src/libs/llms.d.ts +1 -1
  125. package/elysia/src/libs/response.d.ts +1 -1
  126. package/elysia/src/libs/serving.d.ts +1 -1
  127. package/elysia/src/plugin.d.ts +1 -1
  128. package/elysia/src/plugin.d.ts.map +1 -1
  129. package/elysia/src/routes/artifacts.d.ts +1 -1
  130. package/elysia/src/routes/artifacts.d.ts.map +1 -1
  131. package/elysia/src/routes/content.d.ts +1 -1
  132. package/elysia/src/routes/image.d.ts +1 -1
  133. package/elysia/src/routes/index.d.ts +1 -1
  134. package/elysia/src/routes/internal.d.ts +1 -1
  135. package/elysia/src/routes/internal.d.ts.map +1 -1
  136. package/elysia/src/routes/liveReloadClient.d.ts +16 -0
  137. package/elysia/src/routes/liveReloadClient.d.ts.map +1 -0
  138. package/elysia/src/routes/llms.d.ts +1 -1
  139. package/elysia/src/routes/og.d.ts +1 -1
  140. package/elysia/src/routes/redirects.d.ts +1 -1
  141. package/elysia/src/routes/robots.d.ts +1 -1
  142. package/elysia/src/routes/rss.d.ts +1 -1
  143. package/elysia/src/routes/search.d.ts +1 -1
  144. package/elysia/src/routes/sitemap.d.ts +1 -1
  145. package/elysia/src/routes/ssr.d.ts +1 -1
  146. package/elysia/src/routes/ssr.d.ts.map +1 -1
  147. package/elysia/src/routes/static.d.ts +1 -1
  148. package/elysia/src/routes/themeCssRefresh.d.ts +1 -1
  149. package/elysia/src/types.d.ts +1 -1
  150. package/package.json +1 -1
  151. package/react/index.d.ts +1 -1
  152. package/react/index.js +2 -2
  153. package/react/index.js.map +1 -1
  154. package/react/src/components/ClientOnly.d.ts +1 -1
  155. package/react/src/components/ContentRoute.d.ts +1 -1
  156. package/react/src/components/Image.d.ts +1 -1
  157. package/react/src/components/LazyRoute.d.ts +1 -1
  158. package/react/src/components/Link.d.ts +1 -1
  159. package/react/src/components/Markdown.d.ts +1 -1
  160. package/react/src/components/Outlet.d.ts +1 -1
  161. package/react/src/components/index.d.ts +1 -1
  162. package/react/src/hooks/index.d.ts +1 -1
  163. package/react/src/hooks/useContent.d.ts +1 -1
  164. package/react/src/hooks/useData.d.ts +1 -1
  165. package/react/src/hooks/useFeed.d.ts +1 -1
  166. package/react/src/hooks/useLayoutData.d.ts +1 -1
  167. package/react/src/hooks/useLlms.d.ts +1 -1
  168. package/react/src/hooks/useNavigate.d.ts +1 -1
  169. package/react/src/hooks/useParams.d.ts +1 -1
  170. package/react/src/hooks/useRouter.d.ts +1 -1
  171. package/react/src/hooks/useSearch.d.ts +1 -1
  172. package/react/src/hooks/useSearchParams.d.ts +1 -1
  173. package/react/src/hooks/useToc.d.ts +1 -1
  174. package/react/src/i18n/LocaleProvider.d.ts +1 -1
  175. package/react/src/i18n/helpers.d.ts +1 -1
  176. package/react/src/i18n/index.d.ts +1 -1
  177. package/react/src/index.d.ts +1 -1
  178. package/react/src/lib/collection.d.ts +1 -1
  179. package/react/src/lib/content.d.ts +1 -1
  180. package/react/src/lib/head.d.ts +1 -1
  181. package/react/src/lib/index.d.ts +1 -1
  182. package/react/src/lib/lazy-route.d.ts +1 -1
  183. package/react/src/lib/route-loader.d.ts +1 -1
  184. package/react/src/providers/ContentProvider.d.ts +1 -1
  185. package/react/src/providers/RerouteProvider.d.ts +1 -1
  186. package/react/src/providers/RouterProvider.d.ts +1 -1
  187. package/react/src/providers/index.d.ts +1 -1
  188. package/react/src/types/any.d.ts +1 -1
  189. package/react/src/types/index.d.ts +1 -1
  190. package/react/src/types/router.d.ts +1 -1
  191. package/telemetry/react.d.ts +1 -1
  192. package/telemetry/react.js +2 -2
  193. package/telemetry/react.js.map +1 -1
  194. package/telemetry/server.d.ts +1 -1
  195. package/telemetry/server.js +2 -2
  196. package/telemetry/server.js.map +4 -4
  197. package/telemetry/src/react/api.d.ts +1 -1
  198. package/telemetry/src/react/context.d.ts +1 -1
  199. package/telemetry/src/react/index.d.ts +1 -1
  200. package/telemetry/src/react/telemetry.d.ts +1 -1
  201. package/telemetry/src/server/context.d.ts +1 -1
  202. package/telemetry/src/server/headers/extractor.d.ts +1 -1
  203. package/telemetry/src/server/headers/index.d.ts +1 -1
  204. package/telemetry/src/server/headers/presets.d.ts +1 -1
  205. package/telemetry/src/server/index.d.ts +1 -1
  206. package/telemetry/src/server/instrumentation.d.ts +1 -1
  207. package/telemetry/src/server/plugin.d.ts +1 -1
  208. package/telemetry/src/server/sourcemap.d.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/ssr/lib/styles.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,cAAc,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,UAAQ,EACd,WAAW,UAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,CA4CjB"}
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../../../../packages/core/src/ssr/lib/styles.ts"],"names":[],"mappings":"AAuCA;;;;;;GAMG;AACH,wBAAsB,cAAc,CACnC,SAAS,EAAE,MAAM,EACjB,WAAW,UAAQ,GACjB,OAAO,CAAC,MAAM,CAAC,CAajB"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v1.0.0-alpha.11
2
+ * reroute-js v1.0.0-alpha.13
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v1.0.0-alpha.11
2
+ * reroute-js v1.0.0-alpha.13
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v1.0.0-alpha.11
2
+ * reroute-js v1.0.0-alpha.13
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v1.0.0-alpha.11
2
+ * reroute-js v1.0.0-alpha.13
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
package/elysia/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v1.0.0-alpha.11
2
+ * reroute-js v1.0.0-alpha.13
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
package/elysia/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v1.0.0-alpha.11
2
+ * reroute-js v1.0.0-alpha.13
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2026 stewones <hi@stewan.io>
@@ -3496,42 +3496,45 @@ var init_scripts = __esm(() => {
3496
3496
  });
3497
3497
 
3498
3498
  // packages/core/src/ssr/lib/styles.ts
3499
- async function inlineThemeCSS(clientDir, minify = false, isWatchMode = false) {
3499
+ import { createHash } from "node:crypto";
3500
+ function themeLink(query) {
3501
+ return `<link rel="stylesheet" href="${THEME_CSS_HREF}?${query}" data-reroute="theme">`;
3502
+ }
3503
+ function hashCss(css) {
3504
+ return createHash("sha1").update(css).digest("hex").slice(0, 12);
3505
+ }
3506
+ async function readThemeCssFromDisk(clientDir) {
3507
+ const candidates = [
3508
+ join(clientDir, "..", ".reroute", "index.css"),
3509
+ join(clientDir, "..", "..", ".reroute", "index.css"),
3510
+ join(clientDir, "..", "..", "..", ".reroute", "index.css"),
3511
+ join(clientDir, "..", "..", "..", "..", ".reroute", "index.css")
3512
+ ];
3513
+ for (const cssPath of candidates) {
3514
+ if (await Bun.file(cssPath).exists()) {
3515
+ const { readFileSync } = await import("node:fs");
3516
+ return readFileSync(cssPath, "utf-8");
3517
+ }
3518
+ }
3519
+ return "";
3520
+ }
3521
+ function bundledThemeCss() {
3522
+ return globalThis.__REROUTE_THEME_CSS__ || "";
3523
+ }
3524
+ async function inlineThemeCSS(clientDir, isWatchMode = false) {
3500
3525
  try {
3501
3526
  if (isWatchMode) {
3502
- const timestamp = Date.now();
3503
- return `<link rel="stylesheet" href="/.reroute/index.css?t=${timestamp}" data-reroute="theme">`;
3504
- }
3505
- const bundledCss = globalThis.__REROUTE_THEME_CSS__;
3506
- if (bundledCss) {
3507
- const css2 = minify ? minifyCSS(bundledCss) : bundledCss;
3508
- return `<style data-reroute="theme">${css2}</style>`;
3509
- }
3510
- const candidates = [
3511
- join(clientDir, "..", ".reroute", "index.css"),
3512
- join(clientDir, "..", "..", ".reroute", "index.css"),
3513
- join(clientDir, "..", "..", "..", ".reroute", "index.css"),
3514
- join(clientDir, "..", "..", "..", "..", ".reroute", "index.css")
3515
- ];
3516
- let cssPath = "";
3517
- for (const p of candidates) {
3518
- if (await Bun.file(p).exists()) {
3519
- cssPath = p;
3520
- break;
3521
- }
3527
+ return themeLink(`t=${Date.now()}`);
3522
3528
  }
3523
- if (!cssPath)
3529
+ const css = bundledThemeCss() || await readThemeCssFromDisk(clientDir);
3530
+ if (!css)
3524
3531
  return "";
3525
- const { readFileSync } = await import("node:fs");
3526
- const css = readFileSync(cssPath, "utf-8");
3527
- return `<style data-reroute="theme">${minifyCSS(css)}</style>`;
3532
+ return themeLink(`v=${hashCss(css)}`);
3528
3533
  } catch {
3529
3534
  return "";
3530
3535
  }
3531
3536
  }
3532
- function minifyCSS(css) {
3533
- return css.replace(/\/\*[\s\S]*?\*\//g, "").replace(/\s+/g, " ").replace(/\s*([{}:;,>+~])\s*/g, "$1").replace(/;}/g, "}").trim();
3534
- }
3537
+ var THEME_CSS_HREF = "/.reroute/index.css";
3535
3538
  var init_styles = () => {};
3536
3539
 
3537
3540
  // packages/core/src/ssr/lib/setup.ts
@@ -3638,7 +3641,7 @@ async function performSSRSetupInternal(options, streaming, timeoutState) {
3638
3641
  setGlobalCollections(byCollectionForSSR);
3639
3642
  const usingCachedCSS = !!options.cachedThemeCSS;
3640
3643
  const inlineStyleTag = await withSpan("ssr.inline.css", async (span) => {
3641
- const css = options.cachedThemeCSS ? options.cachedThemeCSS : await inlineThemeCSS(clientDir, !streaming, isWatchMode);
3644
+ const css = options.cachedThemeCSS ? options.cachedThemeCSS : await inlineThemeCSS(clientDir, isWatchMode);
3642
3645
  span.setAttributes({
3643
3646
  "reroute.cached": usingCachedCSS,
3644
3647
  "reroute.css.size": css.length
@@ -6698,6 +6701,16 @@ import { existsSync as existsSync3 } from "node:fs";
6698
6701
  import { pathToFileURL as pathToFileURL8 } from "node:url";
6699
6702
  import { createElement as createElement2 } from "react";
6700
6703
 
6704
+ // packages/elysia/src/libs/cache.ts
6705
+ function resolveServerDataMaxAge(cacheEnabled, maxAgeSeconds) {
6706
+ if (!cacheEnabled || maxAgeSeconds <= 0)
6707
+ return 0;
6708
+ return maxAgeSeconds;
6709
+ }
6710
+ function getEncoding(acceptEncoding) {
6711
+ return /\bbr\b/i.test(acceptEncoding) ? "br" : /gzip/i.test(acceptEncoding) ? "gz" : "raw";
6712
+ }
6713
+
6701
6714
  // packages/elysia/src/libs/image.ts
6702
6715
  import { existsSync } from "node:fs";
6703
6716
  import { join as join4 } from "node:path";
@@ -6876,11 +6889,6 @@ import { NotFoundError as NotFoundError2 } from "elysia";
6876
6889
  init_core();
6877
6890
  import { NotFoundError } from "elysia";
6878
6891
 
6879
- // packages/elysia/src/libs/cache.ts
6880
- function getEncoding(acceptEncoding) {
6881
- return /\bbr\b/i.test(acceptEncoding) ? "br" : /gzip/i.test(acceptEncoding) ? "gz" : "raw";
6882
- }
6883
-
6884
6892
  // packages/elysia/src/libs/response.ts
6885
6893
  var CONTENT_TYPES = {
6886
6894
  xml: "application/xml; charset=utf-8",
@@ -7042,14 +7050,25 @@ function getAssetCacheControl(filePath, contentType, maxAge, directive, isWatchM
7042
7050
  }
7043
7051
 
7044
7052
  // packages/elysia/src/routes/artifacts.ts
7053
+ function bundledThemeCssResponse(cacheControl) {
7054
+ const bundled = globalThis.__REROUTE_THEME_CSS__;
7055
+ if (!bundled)
7056
+ throw new NotFoundError2;
7057
+ return new Response(bundled, {
7058
+ headers: {
7059
+ "Content-Type": "text/css; charset=utf-8",
7060
+ "Cache-Control": cacheControl
7061
+ }
7062
+ });
7063
+ }
7045
7064
  function registerArtifactsRoutes(app, cwd, fileCache, options) {
7046
7065
  const { bundleMaxAge, directive, isWatchMode = false } = options;
7047
7066
  app.get("/.reroute/index.css", async ({ headers: headers2 }) => {
7048
7067
  const filePath = join(cwd, ".reroute", "index.css");
7049
7068
  const acceptEncoding = headers2["accept-encoding"] ?? "";
7050
- try {
7051
- const cacheControl = isWatchMode ? "no-cache, no-store, must-revalidate" : `${directive}, max-age=${bundleMaxAge}`;
7052
- if (isWatchMode) {
7069
+ const cacheControl = isWatchMode ? "no-cache, no-store, must-revalidate" : `${directive}, max-age=${bundleMaxAge}`;
7070
+ if (isWatchMode) {
7071
+ try {
7053
7072
  const { readFileSync } = await import("node:fs");
7054
7073
  const content2 = readFileSync(filePath);
7055
7074
  return new Response(content2, {
@@ -7058,11 +7077,20 @@ function registerArtifactsRoutes(app, cwd, fileCache, options) {
7058
7077
  "Cache-Control": cacheControl
7059
7078
  }
7060
7079
  });
7080
+ } catch {
7081
+ return bundledThemeCssResponse(cacheControl);
7061
7082
  }
7083
+ }
7084
+ try {
7062
7085
  return await serveFile(filePath, acceptEncoding, fileCache, {
7063
7086
  cacheControl
7064
7087
  });
7065
- } catch {}
7088
+ } catch (error) {
7089
+ if (error instanceof NotFoundError2) {
7090
+ return bundledThemeCssResponse(cacheControl);
7091
+ }
7092
+ throw error;
7093
+ }
7066
7094
  });
7067
7095
  app.get("/bundles/*", async ({ params, headers: headers2 }) => {
7068
7096
  const fileName = String(params["*"] ?? "").replace(/^\/+/, "");
@@ -7388,6 +7416,18 @@ function jsonError(message, status = 500) {
7388
7416
  });
7389
7417
  }
7390
7418
 
7419
+ // packages/elysia/src/routes/liveReloadClient.ts
7420
+ function parseConnectedBootId(data) {
7421
+ if (data === "connected")
7422
+ return "";
7423
+ if (data.startsWith("connected:"))
7424
+ return data.slice("connected:".length);
7425
+ return null;
7426
+ }
7427
+ function shouldReloadOnReconnect(previousBootId, nextBootId) {
7428
+ return Boolean(previousBootId && nextBootId && previousBootId !== nextBootId);
7429
+ }
7430
+
7391
7431
  // packages/elysia/src/routes/themeCssRefresh.ts
7392
7432
  function refreshThemeCss() {
7393
7433
  const href = `/.reroute/index.css?t=${Date.now()}`;
@@ -7465,13 +7505,13 @@ function registerInternalRoutes(app, opts) {
7465
7505
  async function handleKeyRequest(pathname, dataKey, headers2) {
7466
7506
  const { computeSSRData: computeSSRData2 } = await Promise.resolve().then(() => (init_core(), exports_core));
7467
7507
  const cacheKey = `${pathname}:promises`;
7468
- let promiseData = isWatchMode ? undefined : dataCache?.get(cacheKey);
7508
+ let promiseData = isWatchMode || maxAge <= 0 ? undefined : dataCache?.get(cacheKey);
7469
7509
  const promiseDataCached = promiseData !== undefined;
7470
7510
  if (!promiseData) {
7471
7511
  const sp = extractSearchParams(pathname);
7472
7512
  const { data } = await computeSSRData2(pathname, clientDir, cwd, isWatchMode, { streaming: true, maxAge }, sp);
7473
7513
  promiseData = data;
7474
- if (!isWatchMode) {
7514
+ if (!isWatchMode && maxAge > 0) {
7475
7515
  dataCache?.set(cacheKey, promiseData);
7476
7516
  }
7477
7517
  }
@@ -7480,7 +7520,7 @@ function registerInternalRoutes(app, opts) {
7480
7520
  if (value instanceof Promise) {
7481
7521
  const resolved = await value;
7482
7522
  const resolvedCacheKey = `${pathname}:${dataKey}:resolved`;
7483
- if (!isWatchMode) {
7523
+ if (!isWatchMode && maxAge > 0) {
7484
7524
  dataCache?.set(resolvedCacheKey, resolved);
7485
7525
  }
7486
7526
  return jsonWithCache({ data: resolved }, dataCacheControl || "no-cache", headers2, promiseDataCached ? "HIT" : "MISS");
@@ -7494,7 +7534,7 @@ function registerInternalRoutes(app, opts) {
7494
7534
  async function handleFullDataRequest(pathname) {
7495
7535
  const { computeSSRData: computeSSRData2 } = await Promise.resolve().then(() => (init_core(), exports_core));
7496
7536
  const cacheKey = `${pathname}:streaming`;
7497
- let data = isWatchMode ? undefined : dataCache?.get(cacheKey);
7537
+ let data = isWatchMode || maxAge <= 0 ? undefined : dataCache?.get(cacheKey);
7498
7538
  const cacheHit = data !== undefined;
7499
7539
  if (data === undefined) {
7500
7540
  const sp = extractSearchParams(pathname);
@@ -7505,7 +7545,7 @@ function registerInternalRoutes(app, opts) {
7505
7545
  console.error("[__reroute_data] Error computing data:", error);
7506
7546
  data = null;
7507
7547
  }
7508
- if (!isWatchMode) {
7548
+ if (!isWatchMode && maxAge > 0) {
7509
7549
  dataCache?.set(cacheKey, data);
7510
7550
  }
7511
7551
  }
@@ -7559,6 +7599,7 @@ var LIVE_RELOAD_CLIENT_CODE = `// Reroute live reload client
7559
7599
  let eventSource = null;
7560
7600
  let hasConnected = false;
7561
7601
  let wasDisconnected = false;
7602
+ let lastBootId = null;
7562
7603
  let reloadTriggered = false;
7563
7604
  let rebuildNotice = null;
7564
7605
  let reconnectAttempts = 0;
@@ -7611,6 +7652,8 @@ function triggerFullReload(reason) {
7611
7652
  window.location.reload();
7612
7653
  }
7613
7654
 
7655
+ FUNCTION_PARSE_CONNECTED_BOOT_ID
7656
+ FUNCTION_SHOULD_RELOAD_ON_RECONNECT
7614
7657
  FUNCTION_REFRESH_THEME_CSS
7615
7658
 
7616
7659
  function showRebuildNotice() {
@@ -7732,12 +7775,22 @@ function connect() {
7732
7775
  eventSource = new EventSource('/__reroute_watch');
7733
7776
 
7734
7777
  eventSource.addEventListener('message', (e) => {
7735
- if (e.data === 'connected') {
7736
- reconnectAttempts = 0; // Reset backoff on successful connection
7778
+ const bootId = parseConnectedBootId(e.data);
7779
+ if (bootId !== null) {
7780
+ reconnectAttempts = 0;
7781
+ if (bootId) lastBootId = lastBootId ?? bootId;
7737
7782
  if (hasConnected && wasDisconnected && !reloadTriggered) {
7738
- triggerFullReload('Server restarted, reloading...');
7783
+ if (shouldReloadOnReconnect(lastBootId, bootId)) {
7784
+ triggerFullReload('Server restarted, reloading...');
7785
+ return;
7786
+ }
7787
+ lastBootId = bootId || lastBootId;
7788
+ wasDisconnected = false;
7789
+ hideRebuildNotice();
7790
+ console.log('[reroute] ✓ Live reload reconnected');
7739
7791
  return;
7740
7792
  }
7793
+ if (bootId) lastBootId = bootId;
7741
7794
  hasConnected = true;
7742
7795
  wasDisconnected = false;
7743
7796
  console.log('[reroute] ✓ Live reload connected');
@@ -7758,9 +7811,7 @@ function connect() {
7758
7811
  wasDisconnected = true;
7759
7812
  eventSource?.close();
7760
7813
  if (hasConnected && reconnectAttempts === 0) {
7761
- // Only log on first disconnect to reduce console spam
7762
- console.log('[reroute] \uD83D\uDD04 Server restarting...');
7763
- showRebuildNotice();
7814
+ console.log('[reroute] \uD83D\uDD04 Live reload disconnected, reconnecting...');
7764
7815
  }
7765
7816
  scheduleReconnect();
7766
7817
  });
@@ -7768,8 +7819,9 @@ function connect() {
7768
7819
 
7769
7820
  restoreScrollPosition();
7770
7821
  connect();
7771
- `.replace("FUNCTION_REFRESH_THEME_CSS", refreshThemeCss.toString());
7822
+ `.replace("FUNCTION_PARSE_CONNECTED_BOOT_ID", parseConnectedBootId.toString()).replace("FUNCTION_SHOULD_RELOAD_ON_RECONNECT", shouldReloadOnReconnect.toString()).replace("FUNCTION_REFRESH_THEME_CSS", refreshThemeCss.toString());
7772
7823
  function registerLiveReloadRoutes(app, state) {
7824
+ const bootId = crypto.randomUUID();
7773
7825
  console.log("[reroute] Registering SSE endpoint at /__reroute_watch");
7774
7826
  app.get("/__reroute_watch", () => {
7775
7827
  const encoder = new TextEncoder;
@@ -7780,9 +7832,9 @@ function registerLiveReloadRoutes(app, state) {
7780
7832
  currentController = controller;
7781
7833
  state.clients.add(controller);
7782
7834
  console.log("[reroute] Browser connected for live reload");
7783
- controller.enqueue(encoder.encode(`retry: 1000
7835
+ controller.enqueue(encoder.encode(`retry: 2147483647
7784
7836
  `));
7785
- controller.enqueue(encoder.encode(`data: connected
7837
+ controller.enqueue(encoder.encode(`data: connected:${bootId}
7786
7838
 
7787
7839
  `));
7788
7840
  if (state.pendingReload) {
@@ -9378,6 +9430,7 @@ function registerSSRRoutes(app, options) {
9378
9430
  applyLlmsDiscoveryHeaders(headers2, pathname, options.llmsConfig, status);
9379
9431
  };
9380
9432
  const SSR_HTML_TTL_MS = serverCacheEnabled && serverMaxAge > 0 ? serverMaxAge * 1000 : 0;
9433
+ const ssrDataMaxAge = isWatchMode ? 0 : resolveServerDataMaxAge(serverCacheEnabled, serverMaxAge);
9381
9434
  const htmlCache = new LRUCache(200);
9382
9435
  const makeKey = (pathname, searchParams, acceptEncoding) => {
9383
9436
  const queryString = searchParams?.toString();
@@ -9512,7 +9565,7 @@ function registerSSRRoutes(app, options) {
9512
9565
  head,
9513
9566
  lang: i18n2.effectiveLang,
9514
9567
  appId,
9515
- maxAge: isWatchMode ? 0 : serverMaxAge,
9568
+ maxAge: ssrDataMaxAge,
9516
9569
  searchParams,
9517
9570
  ogConfig: options.ogConfig,
9518
9571
  ogMetaConfig: options.ogMetaConfig,
@@ -9691,7 +9744,7 @@ function registerSSRRoutes(app, options) {
9691
9744
  head,
9692
9745
  lang: i18n2.effectiveLang,
9693
9746
  appId,
9694
- maxAge: isWatchMode ? 0 : serverMaxAge,
9747
+ maxAge: ssrDataMaxAge,
9695
9748
  searchParams,
9696
9749
  ogConfig: options.ogConfig,
9697
9750
  ogMetaConfig: options.ogMetaConfig,
@@ -9948,6 +10001,7 @@ var reroute = () => async (app) => {
9948
10001
  const server2 = globalConfig.server;
9949
10002
  const serverCacheEnabled = server2?.cache ?? true;
9950
10003
  const serverMaxAge = server2?.maxAge ?? 3600;
10004
+ const serverDataMaxAge = resolveServerDataMaxAge(serverCacheEnabled, serverMaxAge);
9951
10005
  const browser = globalConfig.browser;
9952
10006
  const browserCacheEnabled = browser?.cache ?? true;
9953
10007
  const browserMaxAge = browser?.maxAge ?? 300;
@@ -10091,7 +10145,7 @@ var reroute = () => async (app) => {
10091
10145
  const getBundleUrl = isWatchMode ? readBundleUrl : async () => initialBundleUrl;
10092
10146
  const { loadCollections: loadCollections2, inlineThemeCSS: inlineThemeCSS2, loadIndexHtml: loadIndexHtml2 } = await Promise.resolve().then(() => (init_core(), exports_core));
10093
10147
  const startupCollections = await loadCollections2(cwd, isWatchMode);
10094
- const startupThemeCSS = await inlineThemeCSS2(clientDir, false, isWatchMode);
10148
+ const startupThemeCSS = await inlineThemeCSS2(clientDir, isWatchMode);
10095
10149
  const startupIndexHtml = await loadIndexHtml2(clientDir);
10096
10150
  const collectionsTtlMs = serverMaxAge * 1000;
10097
10151
  let collectionsCache = serverCacheEnabled ? { data: startupCollections, exp: Date.now() + collectionsTtlMs } : null;
@@ -10109,7 +10163,7 @@ var reroute = () => async (app) => {
10109
10163
  };
10110
10164
  return fresh;
10111
10165
  };
10112
- const getThemeCSS = isWatchMode ? () => inlineThemeCSS2(clientDir, false, isWatchMode) : async () => startupThemeCSS;
10166
+ const getThemeCSS = isWatchMode ? () => inlineThemeCSS2(clientDir, isWatchMode) : async () => startupThemeCSS;
10113
10167
  const getIndexHtml = isWatchMode ? () => loadIndexHtml2(clientDir) : async () => startupIndexHtml;
10114
10168
  if (globalConfig.redirects && globalConfig.redirects.length > 0) {
10115
10169
  registerRedirectRoutes(app, globalConfig.redirects);
@@ -10123,9 +10177,9 @@ var reroute = () => async (app) => {
10123
10177
  clientDir,
10124
10178
  cwd,
10125
10179
  dataCacheControl,
10126
- dataCache,
10180
+ dataCache: serverDataMaxAge > 0 ? dataCache : undefined,
10127
10181
  isWatchMode,
10128
- maxAge: serverMaxAge
10182
+ maxAge: serverDataMaxAge
10129
10183
  });
10130
10184
  registerArtifactsRoutes(app, cwd, fileCache, {
10131
10185
  bundleMaxAge,
@@ -10306,4 +10360,4 @@ export {
10306
10360
  reroute
10307
10361
  };
10308
10362
 
10309
- //# debugId=598589846D0462E964756E2164756E21
10363
+ //# debugId=78024E3217BF060B64756E2164756E21