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

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 (202) hide show
  1. package/cli/bin.d.ts +1 -1
  2. package/cli/bin.js +112 -67
  3. package/cli/bin.js.map +7 -7
  4. package/cli/index.d.ts +1 -1
  5. package/cli/index.js +28 -11
  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/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/terminal-ui.d.ts +1 -1
  28. package/cli/src/commands/lib/theme.d.ts +5 -4
  29. package/cli/src/commands/lib/theme.d.ts.map +1 -1
  30. package/cli/src/commands/lib/version.d.ts +1 -1
  31. package/cli/src/commands/lib/watch.d.ts +1 -1
  32. package/cli/src/commands/og.d.ts +1 -1
  33. package/cli/src/commands/start.d.ts +1 -1
  34. package/cli/src/index.d.ts +1 -1
  35. package/core/index.d.ts +1 -1
  36. package/core/index.js +57 -29
  37. package/core/index.js.map +5 -5
  38. package/core/src/bundler/hash.d.ts +1 -1
  39. package/core/src/bundler/index.d.ts +1 -1
  40. package/core/src/config.d.ts +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/i18n/catalog.d.ts +1 -1
  45. package/core/src/i18n/discover.d.ts +1 -1
  46. package/core/src/i18n/index.d.ts +1 -1
  47. package/core/src/i18n/messages.d.ts +1 -1
  48. package/core/src/i18n/negotiate.d.ts +1 -1
  49. package/core/src/i18n/pathname.d.ts +1 -1
  50. package/core/src/i18n/resolve.d.ts +1 -1
  51. package/core/src/i18n/types.d.ts +1 -1
  52. package/core/src/index.d.ts +1 -1
  53. package/core/src/llms/discovery.d.ts +1 -1
  54. package/core/src/llms/extractor.d.ts +6 -1
  55. package/core/src/llms/extractor.d.ts.map +1 -1
  56. package/core/src/llms/formatter.d.ts +1 -1
  57. package/core/src/llms/full-generator.d.ts +1 -1
  58. package/core/src/llms/index-generator.d.ts +1 -1
  59. package/core/src/llms/index.d.ts +2 -2
  60. package/core/src/llms/index.d.ts.map +1 -1
  61. package/core/src/og/discovery.d.ts +1 -1
  62. package/core/src/og/index.d.ts +1 -1
  63. package/core/src/og/meta.d.ts +1 -1
  64. package/core/src/og/render.d.ts +1 -1
  65. package/core/src/og/types.d.ts +1 -1
  66. package/core/src/robots/discovery.d.ts +1 -1
  67. package/core/src/robots/generator.d.ts +1 -1
  68. package/core/src/robots/index.d.ts +1 -1
  69. package/core/src/robots/policies.d.ts +1 -1
  70. package/core/src/rss/discovery.d.ts +1 -1
  71. package/core/src/rss/generator.d.ts +1 -1
  72. package/core/src/rss/index.d.ts +1 -1
  73. package/core/src/sitemap/discovery.d.ts +1 -1
  74. package/core/src/sitemap/generator.d.ts +1 -1
  75. package/core/src/sitemap/index.d.ts +1 -1
  76. package/core/src/ssr/index.d.ts +1 -1
  77. package/core/src/ssr/lib/cache.d.ts +1 -1
  78. package/core/src/ssr/lib/cleanup.d.ts +1 -1
  79. package/core/src/ssr/lib/collections.d.ts +1 -1
  80. package/core/src/ssr/lib/compression.d.ts +1 -1
  81. package/core/src/ssr/lib/compute/content.d.ts +1 -1
  82. package/core/src/ssr/lib/compute/index.d.ts +1 -1
  83. package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
  84. package/core/src/ssr/lib/compute/routes.d.ts +1 -1
  85. package/core/src/ssr/lib/content-path.d.ts +1 -1
  86. package/core/src/ssr/lib/data.d.ts +1 -1
  87. package/core/src/ssr/lib/html.d.ts +1 -1
  88. package/core/src/ssr/lib/imports.d.ts +1 -1
  89. package/core/src/ssr/lib/index.d.ts +1 -1
  90. package/core/src/ssr/lib/layouts.d.ts +1 -1
  91. package/core/src/ssr/lib/metadata.d.ts +1 -1
  92. package/core/src/ssr/lib/mime.d.ts +1 -1
  93. package/core/src/ssr/lib/modules.d.ts +1 -1
  94. package/core/src/ssr/lib/path.d.ts +1 -1
  95. package/core/src/ssr/lib/preload.d.ts +1 -1
  96. package/core/src/ssr/lib/route-match.d.ts +1 -1
  97. package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
  98. package/core/src/ssr/lib/scripts/data.d.ts +1 -1
  99. package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
  100. package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
  101. package/core/src/ssr/lib/scripts/index.d.ts +1 -1
  102. package/core/src/ssr/lib/seed.d.ts +1 -1
  103. package/core/src/ssr/lib/serialize.d.ts +1 -1
  104. package/core/src/ssr/lib/setup.d.ts +1 -1
  105. package/core/src/ssr/lib/styles.d.ts +4 -6
  106. package/core/src/ssr/lib/styles.d.ts.map +1 -1
  107. package/core/src/ssr/lib/template.d.ts +1 -1
  108. package/core/src/ssr/lib/types.d.ts +1 -1
  109. package/core/src/ssr/render.d.ts +1 -1
  110. package/core/src/ssr/stream.d.ts +1 -1
  111. package/elysia/index.d.ts +1 -1
  112. package/elysia/index.js +69 -64
  113. package/elysia/index.js.map +7 -7
  114. package/elysia/src/index.d.ts +1 -1
  115. package/elysia/src/libs/assets.d.ts +1 -1
  116. package/elysia/src/libs/cache.d.ts +1 -1
  117. package/elysia/src/libs/caching.d.ts +1 -1
  118. package/elysia/src/libs/http.d.ts +1 -1
  119. package/elysia/src/libs/i18n.d.ts +1 -1
  120. package/elysia/src/libs/image.d.ts +1 -1
  121. package/elysia/src/libs/index.d.ts +1 -1
  122. package/elysia/src/libs/llms.d.ts +1 -1
  123. package/elysia/src/libs/response.d.ts +1 -1
  124. package/elysia/src/libs/serving.d.ts +1 -1
  125. package/elysia/src/plugin.d.ts +1 -1
  126. package/elysia/src/routes/artifacts.d.ts +1 -1
  127. package/elysia/src/routes/artifacts.d.ts.map +1 -1
  128. package/elysia/src/routes/content.d.ts +1 -1
  129. package/elysia/src/routes/image.d.ts +1 -1
  130. package/elysia/src/routes/index.d.ts +1 -1
  131. package/elysia/src/routes/internal.d.ts +1 -1
  132. package/elysia/src/routes/liveReloadClient.d.ts +1 -1
  133. package/elysia/src/routes/llms.d.ts +1 -1
  134. package/elysia/src/routes/og.d.ts +1 -1
  135. package/elysia/src/routes/redirects.d.ts +1 -1
  136. package/elysia/src/routes/robots.d.ts +1 -1
  137. package/elysia/src/routes/rss.d.ts +1 -1
  138. package/elysia/src/routes/search.d.ts +1 -1
  139. package/elysia/src/routes/sitemap.d.ts +1 -1
  140. package/elysia/src/routes/ssr.d.ts +1 -1
  141. package/elysia/src/routes/static.d.ts +1 -1
  142. package/elysia/src/routes/themeCssRefresh.d.ts +1 -1
  143. package/elysia/src/types.d.ts +1 -1
  144. package/package.json +1 -1
  145. package/react/index.d.ts +1 -1
  146. package/react/index.js +2 -2
  147. package/react/index.js.map +1 -1
  148. package/react/src/components/ClientOnly.d.ts +1 -1
  149. package/react/src/components/ContentRoute.d.ts +1 -1
  150. package/react/src/components/Image.d.ts +1 -1
  151. package/react/src/components/LazyRoute.d.ts +1 -1
  152. package/react/src/components/Link.d.ts +1 -1
  153. package/react/src/components/Markdown.d.ts +1 -1
  154. package/react/src/components/Outlet.d.ts +1 -1
  155. package/react/src/components/index.d.ts +1 -1
  156. package/react/src/hooks/index.d.ts +1 -1
  157. package/react/src/hooks/useContent.d.ts +1 -1
  158. package/react/src/hooks/useData.d.ts +1 -1
  159. package/react/src/hooks/useFeed.d.ts +1 -1
  160. package/react/src/hooks/useLayoutData.d.ts +1 -1
  161. package/react/src/hooks/useLlms.d.ts +1 -1
  162. package/react/src/hooks/useNavigate.d.ts +1 -1
  163. package/react/src/hooks/useParams.d.ts +1 -1
  164. package/react/src/hooks/useRouter.d.ts +1 -1
  165. package/react/src/hooks/useSearch.d.ts +1 -1
  166. package/react/src/hooks/useSearchParams.d.ts +1 -1
  167. package/react/src/hooks/useToc.d.ts +1 -1
  168. package/react/src/i18n/LocaleProvider.d.ts +1 -1
  169. package/react/src/i18n/helpers.d.ts +1 -1
  170. package/react/src/i18n/index.d.ts +1 -1
  171. package/react/src/index.d.ts +1 -1
  172. package/react/src/lib/collection.d.ts +1 -1
  173. package/react/src/lib/content.d.ts +1 -1
  174. package/react/src/lib/head.d.ts +1 -1
  175. package/react/src/lib/index.d.ts +1 -1
  176. package/react/src/lib/lazy-route.d.ts +1 -1
  177. package/react/src/lib/route-loader.d.ts +1 -1
  178. package/react/src/providers/ContentProvider.d.ts +1 -1
  179. package/react/src/providers/RerouteProvider.d.ts +1 -1
  180. package/react/src/providers/RouterProvider.d.ts +1 -1
  181. package/react/src/providers/index.d.ts +1 -1
  182. package/react/src/types/any.d.ts +1 -1
  183. package/react/src/types/index.d.ts +1 -1
  184. package/react/src/types/router.d.ts +1 -1
  185. package/telemetry/react.d.ts +1 -1
  186. package/telemetry/react.js +2 -2
  187. package/telemetry/react.js.map +1 -1
  188. package/telemetry/server.d.ts +1 -1
  189. package/telemetry/server.js +2 -2
  190. package/telemetry/server.js.map +4 -4
  191. package/telemetry/src/react/api.d.ts +1 -1
  192. package/telemetry/src/react/context.d.ts +1 -1
  193. package/telemetry/src/react/index.d.ts +1 -1
  194. package/telemetry/src/react/telemetry.d.ts +1 -1
  195. package/telemetry/src/server/context.d.ts +1 -1
  196. package/telemetry/src/server/headers/extractor.d.ts +1 -1
  197. package/telemetry/src/server/headers/index.d.ts +1 -1
  198. package/telemetry/src/server/headers/presets.d.ts +1 -1
  199. package/telemetry/src/server/index.d.ts +1 -1
  200. package/telemetry/src/server/instrumentation.d.ts +1 -1
  201. package/telemetry/src/server/plugin.d.ts +1 -1
  202. package/telemetry/src/server/sourcemap.d.ts +1 -1
package/cli/bin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v1.0.0-alpha.13
2
+ * reroute-js v1.0.0-alpha.15
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 v1.0.0-alpha.13
4
+ * reroute-js v1.0.0-alpha.15
5
5
  *
6
6
  * @license MIT
7
7
  * @copyright 2026 stewones <hi@stewan.io>
@@ -68,7 +68,7 @@ async function getVersionString() {
68
68
  }
69
69
  async function getVersion() {
70
70
  if (true) {
71
- return "1.0.0-alpha.13";
71
+ return "1.0.0-alpha.15";
72
72
  }
73
73
  const possiblePaths = [
74
74
  path.join(import.meta.dir, "../../../../package.json"),
@@ -86,7 +86,7 @@ async function getVersion() {
86
86
  }
87
87
  async function getCommit() {
88
88
  if (true) {
89
- return "b24033d";
89
+ return "30816a9";
90
90
  }
91
91
  return "dev";
92
92
  }
@@ -3835,26 +3835,45 @@ var init_scripts = __esm(() => {
3835
3835
 
3836
3836
  // packages/core/src/ssr/lib/styles.ts
3837
3837
  import { createHash } from "node:crypto";
3838
- function themeLink(query) {
3839
- return `<link rel="stylesheet" href="${THEME_CSS_HREF}?${query}" data-reroute="theme">`;
3838
+ import { readdirSync } from "node:fs";
3839
+ function themeCssHash(css) {
3840
+ return createHash("sha1").update(css).digest("hex").slice(0, 8);
3840
3841
  }
3841
- function hashCss(css) {
3842
- return createHash("sha1").update(css).digest("hex").slice(0, 12);
3842
+ function themeCssFileName(css) {
3843
+ return `index.${themeCssHash(css)}.css`;
3843
3844
  }
3844
- async function readThemeCssFromDisk(clientDir) {
3845
- const candidates = [
3846
- join2(clientDir, "..", ".reroute", "index.css"),
3847
- join2(clientDir, "..", "..", ".reroute", "index.css"),
3848
- join2(clientDir, "..", "..", "..", ".reroute", "index.css"),
3849
- join2(clientDir, "..", "..", "..", "..", ".reroute", "index.css")
3845
+ function themeLink(href) {
3846
+ return `<link rel="stylesheet" href="${href}" data-reroute="theme">`;
3847
+ }
3848
+ function bundlesDirs(clientDir) {
3849
+ return [
3850
+ join2(clientDir, "..", ".reroute", "bundles"),
3851
+ join2(clientDir, "..", "..", ".reroute", "bundles"),
3852
+ join2(clientDir, "..", "..", "..", ".reroute", "bundles"),
3853
+ join2(clientDir, "..", "..", "..", "..", ".reroute", "bundles")
3850
3854
  ];
3851
- for (const cssPath of candidates) {
3852
- if (await Bun.file(cssPath).exists()) {
3853
- const { readFileSync } = await import("node:fs");
3854
- return readFileSync(cssPath, "utf-8");
3855
- }
3855
+ }
3856
+ async function readFileIfExists(path2) {
3857
+ if (!await Bun.file(path2).exists())
3858
+ return "";
3859
+ const { readFileSync } = await import("node:fs");
3860
+ return readFileSync(path2, "utf-8");
3861
+ }
3862
+ async function readThemeFromBundles(clientDir) {
3863
+ for (const dir of bundlesDirs(clientDir)) {
3864
+ try {
3865
+ const hashed = readdirSync(dir).find((name) => HASHED_THEME_RE.test(name));
3866
+ if (hashed) {
3867
+ const css2 = await readFileIfExists(join2(dir, hashed));
3868
+ if (css2)
3869
+ return { css: css2, href: `/bundles/${hashed}` };
3870
+ }
3871
+ const css = await readFileIfExists(join2(dir, "index.css"));
3872
+ if (css)
3873
+ return { css, href: `/bundles/${themeCssFileName(css)}` };
3874
+ } catch {}
3856
3875
  }
3857
- return "";
3876
+ return null;
3858
3877
  }
3859
3878
  function bundledThemeCss() {
3860
3879
  return globalThis.__REROUTE_THEME_CSS__ || "";
@@ -3862,18 +3881,26 @@ function bundledThemeCss() {
3862
3881
  async function inlineThemeCSS(clientDir, isWatchMode = false) {
3863
3882
  try {
3864
3883
  if (isWatchMode) {
3865
- return themeLink(`t=${Date.now()}`);
3884
+ return themeLink(`${THEME_CSS_WATCH_HREF}?t=${Date.now()}`);
3866
3885
  }
3867
- const css = bundledThemeCss() || await readThemeCssFromDisk(clientDir);
3886
+ const fromDisk = await readThemeFromBundles(clientDir);
3887
+ const css = bundledThemeCss() || fromDisk?.css;
3868
3888
  if (!css)
3869
3889
  return "";
3870
- return themeLink(`v=${hashCss(css)}`);
3890
+ if (bundledThemeCss()) {
3891
+ return themeLink(`/bundles/${themeCssFileName(css)}`);
3892
+ }
3893
+ if (fromDisk)
3894
+ return themeLink(fromDisk.href);
3895
+ return "";
3871
3896
  } catch {
3872
3897
  return "";
3873
3898
  }
3874
3899
  }
3875
- var THEME_CSS_HREF = "/.reroute/index.css";
3876
- var init_styles = () => {};
3900
+ var THEME_CSS_WATCH_HREF = "/bundles/index.css", HASHED_THEME_RE;
3901
+ var init_styles = __esm(() => {
3902
+ HASHED_THEME_RE = /^index\.[a-z0-9]{8,}\.css$/i;
3903
+ });
3877
3904
 
3878
3905
  // packages/core/src/ssr/lib/setup.ts
3879
3906
  async function performSSRSetup(options, streaming = false) {
@@ -4388,6 +4415,9 @@ Formats: .txt | .md | Accept: text/plain | Accept: text/markdown`;
4388
4415
  // packages/core/src/llms/extractor.ts
4389
4416
  import { pathToFileURL as pathToFileURL5 } from "node:url";
4390
4417
  import { renderToStaticMarkup } from "react-dom/server";
4418
+ function stripLayoutChrome(html2) {
4419
+ return html2.replace(/<nav[\s\S]*?<\/nav>/gi, "").replace(/<header[\s\S]*?<\/header>/gi, "").replace(/<aside[\s\S]*?<\/aside>/gi, "");
4420
+ }
4391
4421
  function shouldExcludeRoute(pathname, excludeRoutes) {
4392
4422
  if (!excludeRoutes || excludeRoutes.length === 0) {
4393
4423
  return false;
@@ -4510,10 +4540,7 @@ async function extractSSRContent(pathname, rootComponent, clientDir, cwd, isWatc
4510
4540
  if (appDivMatch) {
4511
4541
  contentHtml = appDivMatch[1];
4512
4542
  }
4513
- contentHtml = contentHtml.replace(/<nav[\s\S]*?<\/nav>/gi, "");
4514
- contentHtml = contentHtml.replace(/<footer[\s\S]*?<\/footer>/gi, "");
4515
- contentHtml = contentHtml.replace(/<header[\s\S]*?<\/header>/gi, "");
4516
- contentHtml = contentHtml.replace(/<aside[\s\S]*?<\/aside>/gi, "");
4543
+ contentHtml = stripLayoutChrome(contentHtml);
4517
4544
  return {
4518
4545
  title: extractTitle(html2),
4519
4546
  body: stripHtmlTags(contentHtml),
@@ -7023,6 +7050,7 @@ __export(exports_core, {
7023
7050
  statusCache: () => statusCache,
7024
7051
  stripEnd: () => stripEnd,
7025
7052
  stripHtmlTags: () => stripHtmlTags,
7053
+ stripLayoutChrome: () => stripLayoutChrome,
7026
7054
  stripStart: () => stripStart,
7027
7055
  takeSSRContentResults: () => takeSSRContentResults,
7028
7056
  toBytes: () => toBytes,
@@ -7752,13 +7780,18 @@ var AUTO_HEADER = `// \uD83D\uDEA8 Auto-generated streaming wrapper by Reroute -
7752
7780
  var init_suspense = () => {};
7753
7781
 
7754
7782
  // packages/cli/src/commands/lib/theme.ts
7783
+ import { createHash as createHash2 } from "node:crypto";
7755
7784
  import { existsSync as existsSync5, readFileSync as readFileSync4 } from "node:fs";
7756
- import { mkdir as mkdir2, writeFile } from "node:fs/promises";
7785
+ import { mkdir as mkdir2, readdir as readdir7, unlink as unlink2, writeFile } from "node:fs/promises";
7757
7786
  import { dirname as dirname6, isAbsolute, join as join10, resolve as resolve2 } from "node:path";
7758
7787
  function getCssPaths(cwd) {
7759
7788
  const input = join10(cwd, "src/client/index.css");
7760
- const output = join10(cwd, ".reroute/index.css");
7761
- return { input, output };
7789
+ const bundlesDir = join10(cwd, ".reroute/bundles");
7790
+ return { input, bundlesDir };
7791
+ }
7792
+ function themeCssFileName2(css) {
7793
+ const hash2 = createHash2("sha1").update(css).digest("hex").slice(0, 8);
7794
+ return `index.${hash2}.css`;
7762
7795
  }
7763
7796
  function isFileImport(specifier) {
7764
7797
  if (specifier.startsWith("http://") || specifier.startsWith("https://") || specifier.startsWith("data:") || specifier.startsWith("/")) {
@@ -7801,15 +7834,26 @@ ${bundleFile(importedPath)}
7801
7834
  }
7802
7835
  return bundleFile(absEntry);
7803
7836
  }
7837
+ async function pruneStaleThemeCss(bundlesDir, keep) {
7838
+ const files = await readdir7(bundlesDir);
7839
+ for (const file of files) {
7840
+ if (HASHED_THEME_RE2.test(file) && file !== keep) {
7841
+ await unlink2(join10(bundlesDir, file));
7842
+ }
7843
+ }
7844
+ }
7804
7845
  async function syncThemeCss(cwd) {
7805
- const { input, output } = getCssPaths(cwd);
7846
+ const { input, bundlesDir } = getCssPaths(cwd);
7806
7847
  if (!existsSync5(input)) {
7807
7848
  return false;
7808
7849
  }
7809
- await mkdir2(dirname6(output), { recursive: true });
7850
+ await mkdir2(bundlesDir, { recursive: true });
7810
7851
  try {
7811
7852
  const css = bundleCssEntrypoint(input);
7812
- await writeFile(output, css, "utf-8");
7853
+ const hashedName = themeCssFileName2(css);
7854
+ await writeFile(join10(bundlesDir, "index.css"), css, "utf-8");
7855
+ await writeFile(join10(bundlesDir, hashedName), css, "utf-8");
7856
+ await pruneStaleThemeCss(bundlesDir, hashedName);
7813
7857
  } catch (err) {
7814
7858
  const message = err instanceof Error ? err.message : String(err);
7815
7859
  if (message.startsWith("[reroute/theme]")) {
@@ -7818,16 +7862,17 @@ async function syncThemeCss(cwd) {
7818
7862
  throw new Error(`[reroute/theme] Failed to bundle index.css:
7819
7863
  ${message}`);
7820
7864
  }
7821
- console.log("[reroute/theme] synced index.css");
7865
+ console.log("[reroute/theme] synced /bundles/index.css");
7822
7866
  return true;
7823
7867
  }
7824
- var IMPORT_RE;
7868
+ var HASHED_THEME_RE2, IMPORT_RE;
7825
7869
  var init_theme = __esm(() => {
7870
+ HASHED_THEME_RE2 = /^index\.[a-z0-9]{8,}\.css$/i;
7826
7871
  IMPORT_RE = /@import\s+(?:url\(\s*)?(?:'([^']+)'|"([^"]+)"|([^'")\s]+))\s*\)?\s*([^;]*);/g;
7827
7872
  });
7828
7873
 
7829
7874
  // packages/cli/src/commands/lib/watch.ts
7830
- import { createHash as createHash2 } from "node:crypto";
7875
+ import { createHash as createHash3 } from "node:crypto";
7831
7876
  import { readFile } from "node:fs/promises";
7832
7877
  import { join as join11 } from "node:path";
7833
7878
  function isWatchNoise(name) {
@@ -7842,7 +7887,7 @@ function createContentFingerprint(options) {
7842
7887
  const settling = Date.now() - startedAt < settleMs;
7843
7888
  try {
7844
7889
  const buf = await readFile(absPath);
7845
- const hash2 = createHash2("sha1").update(buf).digest("hex");
7890
+ const hash2 = createHash3("sha1").update(buf).digest("hex");
7846
7891
  const prev = hashes.get(absPath);
7847
7892
  if (prev === hash2)
7848
7893
  return false;
@@ -7878,11 +7923,11 @@ __export(exports_gen, {
7878
7923
  startGenWatch: () => startGenWatch
7879
7924
  });
7880
7925
  import { watch } from "node:fs";
7881
- import { copyFile as copyFile2, mkdir as mkdir3, readdir as readdir7, rm, unlink as unlink2 } from "node:fs/promises";
7926
+ import { copyFile as copyFile2, mkdir as mkdir3, readdir as readdir8, rm, unlink as unlink3 } from "node:fs/promises";
7882
7927
  import { dirname as dirname7, extname as extname4, join as join12 } from "node:path";
7883
7928
  import { pathToFileURL as pathToFileURL8 } from "node:url";
7884
7929
  async function bundleThemeCssIntoArtifacts(cwd) {
7885
- const cssPath = join12(cwd, ".reroute", "index.css");
7930
+ const cssPath = join12(cwd, ".reroute", "bundles", "index.css");
7886
7931
  const artifactsPath = join12(cwd, OUTPUT_ARTIFACTS);
7887
7932
  try {
7888
7933
  const cssContent = await Bun.file(cssPath).text();
@@ -7913,7 +7958,7 @@ async function ensureOutputDir(cwd, options = {}) {
7913
7958
  if (clean) {
7914
7959
  let needsCleanup = false;
7915
7960
  try {
7916
- const entries = await readdir7(outputPath);
7961
+ const entries = await readdir8(outputPath);
7917
7962
  needsCleanup = entries.length > 0;
7918
7963
  } catch {}
7919
7964
  if (needsCleanup) {
@@ -8006,7 +8051,7 @@ function shouldSkipFile(relativePath, entryName) {
8006
8051
  }
8007
8052
  async function scanDirectory(dir, base = "") {
8008
8053
  const files = [];
8009
- const entries = await readdir7(dir, { withFileTypes: true });
8054
+ const entries = await readdir8(dir, { withFileTypes: true });
8010
8055
  for (const entry of entries) {
8011
8056
  const fullPath = join12(dir, entry.name);
8012
8057
  const relativePath = join12(base, entry.name);
@@ -8025,7 +8070,7 @@ async function scanDirectory(dir, base = "") {
8025
8070
  }
8026
8071
  async function scan404Files(dir, base = "") {
8027
8072
  const files = [];
8028
- const entries = await readdir7(dir, { withFileTypes: true });
8073
+ const entries = await readdir8(dir, { withFileTypes: true });
8029
8074
  for (const entry of entries) {
8030
8075
  const fullPath = join12(dir, entry.name);
8031
8076
  const relativePath = join12(base, entry.name);
@@ -8041,7 +8086,7 @@ async function scan404Files(dir, base = "") {
8041
8086
  }
8042
8087
  async function scanOgFiles(dir, base = "") {
8043
8088
  const files = [];
8044
- const entries = await readdir7(dir, { withFileTypes: true });
8089
+ const entries = await readdir8(dir, { withFileTypes: true });
8045
8090
  for (const entry of entries) {
8046
8091
  const fullPath = join12(dir, entry.name);
8047
8092
  const relativePath = join12(base, entry.name);
@@ -8351,7 +8396,7 @@ function isContentFileName(name) {
8351
8396
  }
8352
8397
  async function listLocaleContentFiles(collectionDir, locale) {
8353
8398
  try {
8354
- const nested = await readdir7(join12(collectionDir, locale), {
8399
+ const nested = await readdir8(join12(collectionDir, locale), {
8355
8400
  withFileTypes: true
8356
8401
  });
8357
8402
  const files = [];
@@ -8367,7 +8412,7 @@ async function listLocaleContentFiles(collectionDir, locale) {
8367
8412
  }
8368
8413
  async function listContentFiles2(collectionDir) {
8369
8414
  try {
8370
- const entries = await readdir7(collectionDir, { withFileTypes: true });
8415
+ const entries = await readdir8(collectionDir, { withFileTypes: true });
8371
8416
  const files = [];
8372
8417
  for (const entry of entries) {
8373
8418
  if (entry.isFile() && isContentFileName(entry.name)) {
@@ -8401,7 +8446,7 @@ async function loadContentMeta(absSrc, buildSrc, isMarkdown) {
8401
8446
  const m = await import(pathToFileURL8(tmp).href);
8402
8447
  return m.meta || {};
8403
8448
  } finally {
8404
- await unlink2(tmp).catch(() => {});
8449
+ await unlink3(tmp).catch(() => {});
8405
8450
  }
8406
8451
  }
8407
8452
  function serializeConfig(config2) {
@@ -8540,7 +8585,7 @@ async function buildSingleContentChunk(cwd, collection, fileRef, contentDir, arg
8540
8585
  async function buildContentChunks(cwd, args = [], defaultLocale = "en-US") {
8541
8586
  const routesRoot = join12(cwd, ROUTES_DIR);
8542
8587
  console.log(`[reroute/content] scan ${routesRoot}`);
8543
- const collections2 = await readdir7(routesRoot, { withFileTypes: true });
8588
+ const collections2 = await readdir8(routesRoot, { withFileTypes: true });
8544
8589
  const results = [];
8545
8590
  for (const c of collections2) {
8546
8591
  if (!c.isDirectory())
@@ -8657,7 +8702,7 @@ async function buildSearchIndex(cwd, config2, args = []) {
8657
8702
  maxHeadingLevel = 6
8658
8703
  } = searchConfig;
8659
8704
  const routesRoot = join12(cwd, ROUTES_DIR);
8660
- const collections2 = await readdir7(routesRoot, { withFileTypes: true });
8705
+ const collections2 = await readdir8(routesRoot, { withFileTypes: true });
8661
8706
  const i18n2 = await discoverI18n(cwd, config2.i18n);
8662
8707
  const defaultLocale = i18n2.defaultLocale;
8663
8708
  const searchIndex = [];
@@ -8740,7 +8785,7 @@ async function preprocessMarkdownFiles(cwd, config2) {
8740
8785
  async function scanMarkdown(dir, base = "") {
8741
8786
  const files = [];
8742
8787
  try {
8743
- const entries = await readdir7(dir, { withFileTypes: true });
8788
+ const entries = await readdir8(dir, { withFileTypes: true });
8744
8789
  for (const entry of entries) {
8745
8790
  const fullPath = join12(dir, entry.name);
8746
8791
  const relativePath = join12(base, entry.name);
@@ -8900,7 +8945,7 @@ async function buildEntrypointBundle(cwd, args = []) {
8900
8945
  }
8901
8946
  const newFiles = new Set(outputs.map((o) => o.fileName));
8902
8947
  try {
8903
- const existingFiles = await readdir7(bundlesDir);
8948
+ const existingFiles = await readdir8(bundlesDir);
8904
8949
  for (const file of existingFiles) {
8905
8950
  if (/^(index|chunk|asset)\.[a-z0-9]+\.(js|css|js\.map|css\.map)(\.gz|\.br)?$/i.test(file) && !newFiles.has(file.replace(/\.(gz|br)$/, ""))) {
8906
8951
  await rm(join12(bundlesDir, file), { force: true });
@@ -9041,7 +9086,7 @@ async function generate(cwd, args = [], options = {}) {
9041
9086
  const contentRoutes = [];
9042
9087
  const collectionsDir = join12(cwd, ".reroute", "collections");
9043
9088
  try {
9044
- const collectionFiles = await readdir7(collectionsDir);
9089
+ const collectionFiles = await readdir8(collectionsDir);
9045
9090
  for (const file of collectionFiles) {
9046
9091
  if (file.endsWith(".js")) {
9047
9092
  const collectionPath = join12(collectionsDir, file);
@@ -104577,7 +104622,7 @@ import {
104577
104622
  cpSync,
104578
104623
  existsSync as existsSync9,
104579
104624
  mkdirSync,
104580
- readdirSync
104625
+ readdirSync as readdirSync2
104581
104626
  } from "node:fs";
104582
104627
  import { join as join16 } from "node:path";
104583
104628
  function copyAssetsToReroute(cwd, sourceAssetsDir, rerouteAssetsDir) {
@@ -104593,7 +104638,7 @@ function copyAssetsToReroute(cwd, sourceAssetsDir, rerouteAssetsDir) {
104593
104638
  }
104594
104639
  function countFiles(dir) {
104595
104640
  let count = 0;
104596
- const entries = readdirSync(dir, { withFileTypes: true });
104641
+ const entries = readdirSync2(dir, { withFileTypes: true });
104597
104642
  for (const entry of entries) {
104598
104643
  if (entry.isDirectory()) {
104599
104644
  count += countFiles(join16(dir, entry.name));
@@ -104859,7 +104904,7 @@ __export(exports_analyze, {
104859
104904
  default: () => analyze
104860
104905
  });
104861
104906
  import { existsSync as existsSync11, statSync } from "node:fs";
104862
- import { readdir as readdir8, readFile as readFile2, stat as stat6, writeFile as writeFile2 } from "node:fs/promises";
104907
+ import { readdir as readdir9, readFile as readFile2, stat as stat6, writeFile as writeFile2 } from "node:fs/promises";
104863
104908
  import { basename as basename4, join as join18, relative as relative3 } from "node:path";
104864
104909
  import Table from "cli-table3";
104865
104910
  async function findChunkBundles(cwd) {
@@ -104867,12 +104912,12 @@ async function findChunkBundles(cwd) {
104867
104912
  const chunksDir = join18(cwd, ".reroute", "chunks");
104868
104913
  if (!existsSync11(chunksDir))
104869
104914
  return bundles;
104870
- const collections2 = await readdir8(chunksDir, { withFileTypes: true });
104915
+ const collections2 = await readdir9(chunksDir, { withFileTypes: true });
104871
104916
  for (const collection of collections2) {
104872
104917
  if (!collection.isDirectory())
104873
104918
  continue;
104874
104919
  const collectionDir = join18(chunksDir, collection.name);
104875
- const files = await readdir8(collectionDir);
104920
+ const files = await readdir9(collectionDir);
104876
104921
  for (const file of files) {
104877
104922
  if (!file.endsWith(".js"))
104878
104923
  continue;
@@ -104897,7 +104942,7 @@ async function findDistBundles(cwd) {
104897
104942
  const distDir = join18(cwd, "dist");
104898
104943
  if (!existsSync11(distDir))
104899
104944
  return bundles;
104900
- const files = await readdir8(distDir);
104945
+ const files = await readdir9(distDir);
104901
104946
  for (const file of files) {
104902
104947
  const filePath = join18(distDir, file);
104903
104948
  const stats = statSync(filePath);
@@ -105356,7 +105401,7 @@ async function generateHTMLReport(stats, depTree, mainInfo, browserDepTree, brow
105356
105401
  try {
105357
105402
  const distDir = join18(process.cwd(), "dist");
105358
105403
  if (existsSync11(distDir)) {
105359
- const files = await readdir8(distDir);
105404
+ const files = await readdir9(distDir);
105360
105405
  for (const file of files) {
105361
105406
  const filePath = join18(distDir, file);
105362
105407
  const stats2 = statSync(filePath);
@@ -106842,7 +106887,7 @@ async function printConsoleReport(stats, depTree, mainInfo, browserDepTree, brow
106842
106887
  try {
106843
106888
  const distDir = join18(process.cwd(), "dist");
106844
106889
  if (existsSync11(distDir)) {
106845
- const files = await readdir8(distDir);
106890
+ const files = await readdir9(distDir);
106846
106891
  for (const file of files) {
106847
106892
  const filePath = join18(distDir, file);
106848
106893
  const stats2 = statSync(filePath);
@@ -107086,7 +107131,7 @@ __export(exports_og, {
107086
107131
  default: () => og2
107087
107132
  });
107088
107133
  import { spawn as spawn4 } from "node:child_process";
107089
- import { readdir as readdir9 } from "node:fs/promises";
107134
+ import { readdir as readdir10 } from "node:fs/promises";
107090
107135
  import { join as join19 } from "node:path";
107091
107136
  function getPortFromConfig(baseUrl) {
107092
107137
  if (!baseUrl)
@@ -107164,7 +107209,7 @@ Error output:`, errorOutput);
107164
107209
  }
107165
107210
  async function scanForOgTemplates(dir, base, routes) {
107166
107211
  try {
107167
- const entries = await readdir9(dir, { withFileTypes: true });
107212
+ const entries = await readdir10(dir, { withFileTypes: true });
107168
107213
  for (const entry of entries) {
107169
107214
  const fullPath = join19(dir, entry.name);
107170
107215
  const relativePath = join19(base, entry.name);
@@ -107184,13 +107229,13 @@ function findFirstContentFile(contentFiles) {
107184
107229
  }
107185
107230
  async function addContentRoutes(routesPath, routes) {
107186
107231
  try {
107187
- const entries = await readdir9(routesPath, { withFileTypes: true });
107232
+ const entries = await readdir10(routesPath, { withFileTypes: true });
107188
107233
  for (const entry of entries) {
107189
107234
  if (!entry.isDirectory())
107190
107235
  continue;
107191
107236
  const contentDir = join19(routesPath, entry.name, "content");
107192
107237
  try {
107193
- const contentFiles = await readdir9(contentDir);
107238
+ const contentFiles = await readdir10(contentDir);
107194
107239
  if (contentFiles.length === 0)
107195
107240
  continue;
107196
107241
  const firstFile = findFirstContentFile(contentFiles);
@@ -107468,7 +107513,7 @@ async function getVersionString2() {
107468
107513
  }
107469
107514
  async function getVersion2() {
107470
107515
  if (true) {
107471
- return "1.0.0-alpha.13";
107516
+ return "1.0.0-alpha.15";
107472
107517
  }
107473
107518
  const possiblePaths = [
107474
107519
  path3.join(import.meta.dir, "../../../package.json"),
@@ -107485,10 +107530,10 @@ async function getVersion2() {
107485
107530
  }
107486
107531
  async function getCommit2() {
107487
107532
  if (true) {
107488
- return "b24033d";
107533
+ return "30816a9";
107489
107534
  }
107490
107535
  return "dev";
107491
107536
  }
107492
107537
  main();
107493
107538
 
107494
- //# debugId=14EA3B0FC77A708C64756E2164756E21
107539
+ //# debugId=67BE3770B15AEEBA64756E2164756E21