reroute-js 0.41.0 → 0.42.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 (187) hide show
  1. package/cli/bin.d.ts +1 -1
  2. package/cli/bin.js +115 -48
  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/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 +57 -23
  36. package/core/index.js.map +5 -5
  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 +6 -4
  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/discovery.d.ts.map +1 -1
  61. package/core/src/rss/generator.d.ts +1 -1
  62. package/core/src/rss/index.d.ts +1 -1
  63. package/core/src/sitemap/discovery.d.ts +1 -1
  64. package/core/src/sitemap/discovery.d.ts.map +1 -1
  65. package/core/src/sitemap/generator.d.ts +1 -1
  66. package/core/src/sitemap/index.d.ts +1 -1
  67. package/core/src/ssr/index.d.ts +1 -1
  68. package/core/src/ssr/lib/cache.d.ts +1 -1
  69. package/core/src/ssr/lib/collections.d.ts +1 -1
  70. package/core/src/ssr/lib/compression.d.ts +1 -1
  71. package/core/src/ssr/lib/compute/content.d.ts +1 -1
  72. package/core/src/ssr/lib/compute/index.d.ts +1 -1
  73. package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
  74. package/core/src/ssr/lib/compute/routes.d.ts +1 -1
  75. package/core/src/ssr/lib/data.d.ts +1 -1
  76. package/core/src/ssr/lib/html.d.ts +1 -1
  77. package/core/src/ssr/lib/imports.d.ts +1 -1
  78. package/core/src/ssr/lib/index.d.ts +1 -1
  79. package/core/src/ssr/lib/layouts.d.ts +1 -1
  80. package/core/src/ssr/lib/metadata.d.ts +1 -1
  81. package/core/src/ssr/lib/mime.d.ts +1 -1
  82. package/core/src/ssr/lib/modules.d.ts +1 -1
  83. package/core/src/ssr/lib/path.d.ts +1 -1
  84. package/core/src/ssr/lib/preload.d.ts +1 -1
  85. package/core/src/ssr/lib/scripts/collections.d.ts +1 -1
  86. package/core/src/ssr/lib/scripts/data.d.ts +1 -1
  87. package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
  88. package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
  89. package/core/src/ssr/lib/scripts/index.d.ts +1 -1
  90. package/core/src/ssr/lib/seed.d.ts +1 -1
  91. package/core/src/ssr/lib/serialize.d.ts +1 -1
  92. package/core/src/ssr/lib/setup.d.ts +1 -1
  93. package/core/src/ssr/lib/styles.d.ts +1 -1
  94. package/core/src/ssr/lib/template.d.ts +1 -1
  95. package/core/src/ssr/lib/types.d.ts +1 -1
  96. package/core/src/ssr/render.d.ts +1 -1
  97. package/core/src/ssr/stream.d.ts +1 -1
  98. package/elysia/index.d.ts +1 -1
  99. package/elysia/index.js +232 -104
  100. package/elysia/index.js.map +10 -10
  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/internal.d.ts.map +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/og.d.ts.map +1 -1
  122. package/elysia/src/routes/redirects.d.ts +1 -1
  123. package/elysia/src/routes/robots.d.ts +1 -1
  124. package/elysia/src/routes/rss.d.ts +2 -2
  125. package/elysia/src/routes/rss.d.ts.map +1 -1
  126. package/elysia/src/routes/search.d.ts +1 -1
  127. package/elysia/src/routes/sitemap.d.ts +2 -2
  128. package/elysia/src/routes/sitemap.d.ts.map +1 -1
  129. package/elysia/src/routes/ssr.d.ts +1 -1
  130. package/elysia/src/routes/static.d.ts +1 -1
  131. package/elysia/src/types.d.ts +1 -1
  132. package/package.json +1 -1
  133. package/react/index.d.ts +1 -1
  134. package/react/index.js +2 -2
  135. package/react/index.js.map +1 -1
  136. package/react/src/components/ClientOnly.d.ts +1 -1
  137. package/react/src/components/ContentRoute.d.ts +1 -1
  138. package/react/src/components/Image.d.ts +1 -1
  139. package/react/src/components/LazyRoute.d.ts +1 -1
  140. package/react/src/components/Link.d.ts +1 -1
  141. package/react/src/components/Markdown.d.ts +1 -1
  142. package/react/src/components/Outlet.d.ts +1 -1
  143. package/react/src/components/index.d.ts +1 -1
  144. package/react/src/hooks/index.d.ts +1 -1
  145. package/react/src/hooks/useContent.d.ts +1 -1
  146. package/react/src/hooks/useData.d.ts +1 -1
  147. package/react/src/hooks/useFeed.d.ts +1 -1
  148. package/react/src/hooks/useLayoutData.d.ts +1 -1
  149. package/react/src/hooks/useLlms.d.ts +1 -1
  150. package/react/src/hooks/useNavigate.d.ts +1 -1
  151. package/react/src/hooks/useParams.d.ts +1 -1
  152. package/react/src/hooks/useRouter.d.ts +1 -1
  153. package/react/src/hooks/useSearch.d.ts +1 -1
  154. package/react/src/hooks/useSearchParams.d.ts +1 -1
  155. package/react/src/hooks/useToc.d.ts +1 -1
  156. package/react/src/index.d.ts +1 -1
  157. package/react/src/lib/collection.d.ts +1 -1
  158. package/react/src/lib/content.d.ts +1 -1
  159. package/react/src/lib/head.d.ts +1 -1
  160. package/react/src/lib/index.d.ts +1 -1
  161. package/react/src/lib/lazy-route.d.ts +1 -1
  162. package/react/src/lib/route-loader.d.ts +1 -1
  163. package/react/src/providers/ContentProvider.d.ts +1 -1
  164. package/react/src/providers/RerouteProvider.d.ts +1 -1
  165. package/react/src/providers/RouterProvider.d.ts +1 -1
  166. package/react/src/providers/index.d.ts +1 -1
  167. package/react/src/types/any.d.ts +1 -1
  168. package/react/src/types/index.d.ts +1 -1
  169. package/react/src/types/router.d.ts +1 -1
  170. package/telemetry/react.d.ts +1 -1
  171. package/telemetry/react.js +2 -2
  172. package/telemetry/react.js.map +1 -1
  173. package/telemetry/server.d.ts +1 -1
  174. package/telemetry/server.js +2 -2
  175. package/telemetry/server.js.map +3 -3
  176. package/telemetry/src/react/api.d.ts +1 -1
  177. package/telemetry/src/react/context.d.ts +1 -1
  178. package/telemetry/src/react/index.d.ts +1 -1
  179. package/telemetry/src/react/telemetry.d.ts +1 -1
  180. package/telemetry/src/server/context.d.ts +1 -1
  181. package/telemetry/src/server/headers/extractor.d.ts +1 -1
  182. package/telemetry/src/server/headers/index.d.ts +1 -1
  183. package/telemetry/src/server/headers/presets.d.ts +1 -1
  184. package/telemetry/src/server/index.d.ts +1 -1
  185. package/telemetry/src/server/instrumentation.d.ts +1 -1
  186. package/telemetry/src/server/plugin.d.ts +1 -1
  187. 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.41.0
2
+ * reroute-js v0.42.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.41.0
4
+ * reroute-js v0.42.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.41.0";
51
+ return "0.42.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 "fdadb6d";
69
+ return "7dd4c06";
70
70
  }
71
71
  return "dev";
72
72
  }
@@ -4368,13 +4368,13 @@ async function discoverSSRDataRoutes2(cwd, staticRoutes, isWatchMode, baseUrl, s
4368
4368
  const ssrDataRoutes = new Map;
4369
4369
  const bundledRoutes = globalThis.__REROUTE_ROUTES__;
4370
4370
  if (bundledRoutes && Array.isArray(bundledRoutes)) {
4371
- for (const route of staticRoutes) {
4371
+ const routePromises = staticRoutes.map(async (route) => {
4372
4372
  if (sitemapConfig?.excludeDiscovery?.some((excluded) => route.pattern.startsWith(excluded))) {
4373
- continue;
4373
+ return null;
4374
4374
  }
4375
4375
  const bundledRoute = bundledRoutes.find((r) => r?.pattern === route.pattern);
4376
4376
  if (!bundledRoute)
4377
- continue;
4377
+ return null;
4378
4378
  const ssr = bundledRoute?.ssr;
4379
4379
  const dataFn = ssr?.data;
4380
4380
  if (typeof dataFn === "function") {
@@ -4387,15 +4387,22 @@ async function discoverSSRDataRoutes2(cwd, staticRoutes, isWatchMode, baseUrl, s
4387
4387
  });
4388
4388
  const entries = extractEntriesFromData(result, route.pattern, baseUrl, sitemapConfig);
4389
4389
  if (entries.length > 0) {
4390
- ssrDataRoutes.set(route.pattern, entries);
4390
+ return { pattern: route.pattern, entries };
4391
4391
  }
4392
4392
  } catch {}
4393
4393
  }
4394
+ return null;
4395
+ });
4396
+ const results = await Promise.all(routePromises);
4397
+ for (const result of results) {
4398
+ if (result) {
4399
+ ssrDataRoutes.set(result.pattern, result.entries);
4400
+ }
4394
4401
  }
4395
4402
  } else {
4396
- for (const route of staticRoutes) {
4403
+ const routePromises = staticRoutes.map(async (route) => {
4397
4404
  if (sitemapConfig?.excludeDiscovery?.some((excluded) => route.pattern.startsWith(excluded))) {
4398
- continue;
4405
+ return null;
4399
4406
  }
4400
4407
  try {
4401
4408
  const routeModulePath = join2(cwd, "src", "client", "routes", route.path);
@@ -4411,10 +4418,17 @@ async function discoverSSRDataRoutes2(cwd, staticRoutes, isWatchMode, baseUrl, s
4411
4418
  });
4412
4419
  const entries = extractEntriesFromData(result, route.pattern, baseUrl, sitemapConfig);
4413
4420
  if (entries.length > 0) {
4414
- ssrDataRoutes.set(route.pattern, entries);
4421
+ return { pattern: route.pattern, entries };
4415
4422
  }
4416
4423
  }
4417
4424
  } catch {}
4425
+ return null;
4426
+ });
4427
+ const results = await Promise.all(routePromises);
4428
+ for (const result of results) {
4429
+ if (result) {
4430
+ ssrDataRoutes.set(result.pattern, result.entries);
4431
+ }
4418
4432
  }
4419
4433
  }
4420
4434
  return ssrDataRoutes;
@@ -4477,6 +4491,8 @@ function extractIdentifierFromItem(item, routePattern, sitemapConfig) {
4477
4491
  if (sitemapConfig?.extractUrl) {
4478
4492
  try {
4479
4493
  const identifier2 = sitemapConfig.extractUrl(item, routePattern);
4494
+ if (identifier2 === false)
4495
+ return null;
4480
4496
  if (identifier2)
4481
4497
  return identifier2;
4482
4498
  } catch (error) {
@@ -4732,6 +4748,8 @@ function extractIdentifier2(item, routePattern, rssConfig) {
4732
4748
  if (rssConfig?.extractUrl) {
4733
4749
  try {
4734
4750
  const identifier = rssConfig.extractUrl(item, routePattern);
4751
+ if (identifier === false)
4752
+ return null;
4735
4753
  if (identifier)
4736
4754
  return String(identifier);
4737
4755
  } catch (error) {
@@ -4790,24 +4808,28 @@ function createRSSItemFromData(item, routePattern, baseUrl, rssConfig) {
4790
4808
  }
4791
4809
  async function discoverRSSData(cwd, collections2, baseUrl, isWatchMode, rssConfig) {
4792
4810
  const collectionsMap = new Map;
4793
- for (const collection of collections2) {
4811
+ const collectionPromises = collections2.map(async (collection) => {
4794
4812
  const items = await discoverCollectionFeedItems(cwd, collection, isWatchMode, baseUrl, rssConfig);
4795
- if (items.length > 0) {
4796
- collectionsMap.set(collection, items);
4813
+ return items.length > 0 ? { collection, items } : null;
4814
+ });
4815
+ const collectionResults = await Promise.all(collectionPromises);
4816
+ for (const result of collectionResults) {
4817
+ if (result) {
4818
+ collectionsMap.set(result.collection, result.items);
4797
4819
  }
4798
4820
  }
4799
4821
  const ssrDataFeeds = new Map;
4800
4822
  const bundledRoutes = globalThis.__REROUTE_ROUTES__;
4823
+ const { discoverRoutes: discoverRoutes2 } = await Promise.resolve().then(() => (init_discovery4(), exports_discovery));
4824
+ const { staticRoutes } = await discoverRoutes2(cwd, isWatchMode);
4801
4825
  if (bundledRoutes && Array.isArray(bundledRoutes)) {
4802
- const { discoverRoutes: discoverRoutes2 } = await Promise.resolve().then(() => (init_discovery4(), exports_discovery));
4803
- const { staticRoutes } = await discoverRoutes2(cwd, isWatchMode);
4804
- for (const route of staticRoutes) {
4826
+ const routePromises = staticRoutes.map(async (route) => {
4805
4827
  if (rssConfig?.excludeDiscovery?.some((excluded) => route.pattern.startsWith(excluded))) {
4806
- continue;
4828
+ return null;
4807
4829
  }
4808
4830
  const bundledRoute = bundledRoutes.find((r) => r?.pattern === route.pattern);
4809
4831
  if (!bundledRoute)
4810
- continue;
4832
+ return null;
4811
4833
  const ssr = bundledRoute?.ssr;
4812
4834
  const dataFn = ssr?.data;
4813
4835
  if (typeof dataFn === "function") {
@@ -4820,21 +4842,33 @@ async function discoverRSSData(cwd, collections2, baseUrl, isWatchMode, rssConfi
4820
4842
  });
4821
4843
  const items = extractRSSItemsFromData(result, route.pattern, baseUrl, rssConfig);
4822
4844
  if (items.length > 0) {
4823
- ssrDataFeeds.set(route.pattern, items);
4845
+ return { pattern: route.pattern, items };
4824
4846
  }
4825
4847
  } catch {}
4826
4848
  }
4849
+ return null;
4850
+ });
4851
+ const results = await Promise.all(routePromises);
4852
+ for (const result of results) {
4853
+ if (result) {
4854
+ ssrDataFeeds.set(result.pattern, result.items);
4855
+ }
4827
4856
  }
4828
4857
  } else {
4829
- const { discoverRoutes: discoverRoutes2 } = await Promise.resolve().then(() => (init_discovery4(), exports_discovery));
4830
- const { staticRoutes } = await discoverRoutes2(cwd, isWatchMode);
4831
- for (const route of staticRoutes) {
4858
+ const routePromises = staticRoutes.map(async (route) => {
4832
4859
  if (rssConfig?.excludeDiscovery?.some((excluded) => route.pattern.startsWith(excluded))) {
4833
- continue;
4860
+ return null;
4834
4861
  }
4835
4862
  const items = await discoverSSRDataFeedItems(cwd, route.pattern, route.path, isWatchMode, baseUrl, rssConfig);
4836
4863
  if (items.length > 0) {
4837
- ssrDataFeeds.set(route.pattern, items);
4864
+ return { pattern: route.pattern, items };
4865
+ }
4866
+ return null;
4867
+ });
4868
+ const results = await Promise.all(routePromises);
4869
+ for (const result of results) {
4870
+ if (result) {
4871
+ ssrDataFeeds.set(result.pattern, result.items);
4838
4872
  }
4839
4873
  }
4840
4874
  }
@@ -7045,9 +7079,12 @@ async function buildContentChunks(cwd, args = []) {
7045
7079
  lines.push(" return m ? (m as Record<string, any>)[name] : undefined;");
7046
7080
  lines.push("}");
7047
7081
  lines.push("");
7048
- await Bun.write(join9(cwd, OUTPUT_CONTENT_TS), lines.join(`
7049
- `));
7050
- console.log(`[reroute/content] wrote ${join9(cwd, OUTPUT_CONTENT_TS)}`);
7082
+ const writes = [];
7083
+ writes.push({
7084
+ path: join9(cwd, OUTPUT_CONTENT_TS),
7085
+ content: lines.join(`
7086
+ `)
7087
+ });
7051
7088
  const collectionsSet = new Set(results.map((r) => r.collection));
7052
7089
  for (const collection of collectionsSet) {
7053
7090
  const items = results.filter((r) => r.collection === collection);
@@ -7068,10 +7105,16 @@ async function buildContentChunks(cwd, args = []) {
7068
7105
  js.push(" return byName[name];");
7069
7106
  js.push("}");
7070
7107
  js.push("");
7071
- await Bun.write(join9(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`), js.join(`
7072
- `));
7073
- console.log(`[reroute/content] wrote ${join9(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`)}`);
7108
+ writes.push({
7109
+ path: join9(cwd, OUTPUT_COLLECTIONS_DIR, `${collection}.js`),
7110
+ content: js.join(`
7111
+ `)
7112
+ });
7074
7113
  }
7114
+ await Promise.all(writes.map(async ({ path: path3, content: content2 }) => {
7115
+ await Bun.write(path3, content2);
7116
+ console.log(`[reroute/content] wrote ${path3}`);
7117
+ }));
7075
7118
  }
7076
7119
  async function buildSearchIndex(cwd, config2, args = []) {
7077
7120
  const searchConfig = config2.search;
@@ -7665,30 +7708,54 @@ async function gen(args) {
7665
7708
  console.log(`
7666
7709
  [reroute/watch] \uD83C\uDFAF Initializing advanced watch mode...`);
7667
7710
  let isBuilding = false;
7668
- let queuedBuild = null;
7669
- async function enqueueBuild(buildFn, reason) {
7711
+ let pendingBuild = null;
7712
+ let skipCurrentBuild = false;
7713
+ function scheduleBuild(buildFn, reason) {
7670
7714
  if (isBuilding) {
7671
- queuedBuild = buildFn;
7672
- console.log(`[reroute/watch] Build queued (${reason})...`);
7715
+ if (!skipCurrentBuild) {
7716
+ skipCurrentBuild = true;
7717
+ console.log(`[reroute/watch] ⏭️ Superseding current build with: ${reason}`);
7718
+ }
7719
+ pendingBuild = { fn: buildFn, reason };
7673
7720
  return;
7674
7721
  }
7722
+ if (pendingBuild) {
7723
+ console.log(`[reroute/watch] ⏭️ Replacing queued build with: ${reason}`);
7724
+ }
7725
+ pendingBuild = { fn: buildFn, reason };
7726
+ processPendingBuild();
7727
+ }
7728
+ async function processPendingBuild() {
7729
+ if (!pendingBuild || isBuilding)
7730
+ return;
7731
+ const { fn: buildFn, reason } = pendingBuild;
7732
+ pendingBuild = null;
7733
+ skipCurrentBuild = false;
7675
7734
  isBuilding = true;
7676
7735
  const startTime = performance.now();
7677
7736
  await notifyRebuilding();
7678
7737
  try {
7679
7738
  await buildFn();
7739
+ if (skipCurrentBuild) {
7740
+ console.log(`[reroute/watch] ⏭️ Build superseded, skipping reload: ${reason}`);
7741
+ return;
7742
+ }
7680
7743
  const duration = ((performance.now() - startTime) / 1000).toFixed(2);
7681
7744
  console.log(`[reroute/watch] ✓ Rebuild complete in ${duration}s (${reason})`);
7745
+ await Bun.sleep(200);
7746
+ if (skipCurrentBuild || pendingBuild) {
7747
+ console.log(`[reroute/watch] ⏭️ Skipping reload, new build pending`);
7748
+ return;
7749
+ }
7682
7750
  await notifyReload(reason);
7683
7751
  } catch (err) {
7684
- console.error(`[reroute/watch] ✗ Build failed (${reason}):`, err);
7752
+ if (!skipCurrentBuild) {
7753
+ console.error(`[reroute/watch] ✗ Build failed (${reason}):`, err);
7754
+ }
7685
7755
  } finally {
7686
7756
  isBuilding = false;
7687
- if (queuedBuild) {
7688
- const nextBuild = queuedBuild;
7689
- queuedBuild = null;
7690
- console.log("[reroute/watch] \uD83D\uDD04 Processing queued build...");
7691
- await enqueueBuild(nextBuild, "queued");
7757
+ if (pendingBuild) {
7758
+ setTimeout(() => processPendingBuild(), 50);
7692
7759
  }
7693
7760
  }
7694
7761
  }
@@ -7709,7 +7776,7 @@ async function gen(args) {
7709
7776
  try {
7710
7777
  configWatcher = watch(configPath, () => {
7711
7778
  mediumDebounce(() => {
7712
- enqueueBuild(async () => {
7779
+ scheduleBuild(async () => {
7713
7780
  console.log("[reroute/watch] \uD83D\uDCDD Config changed, full rebuild...");
7714
7781
  await generate(cwd, args, { clean: true, writeStubs: false });
7715
7782
  await buildTailwindIfConfigured(cwd, isProd);
@@ -7730,7 +7797,7 @@ async function gen(args) {
7730
7797
  try {
7731
7798
  const envWatcher = watch(envPath, () => {
7732
7799
  mediumDebounce(() => {
7733
- enqueueBuild(async () => {
7800
+ scheduleBuild(async () => {
7734
7801
  console.log(`[reroute/watch] \uD83D\uDD10 ${envFile} changed`);
7735
7802
  await buildEntrypointBundle(cwd, args);
7736
7803
  }, `${envFile} change`);
@@ -7765,7 +7832,7 @@ async function gen(args) {
7765
7832
  if (!/\.(tsx|ts|jsx|js)$/.test(name))
7766
7833
  return;
7767
7834
  slowDebounce(() => {
7768
- enqueueBuild(async () => {
7835
+ scheduleBuild(async () => {
7769
7836
  console.log(`[reroute/watch] \uD83D\uDD27 Package changed: ${name}`);
7770
7837
  await generate(cwd, args, {
7771
7838
  clean: false,
@@ -7783,7 +7850,7 @@ async function gen(args) {
7783
7850
  return;
7784
7851
  const name = String(filename);
7785
7852
  quickDebounce(() => {
7786
- enqueueBuild(async () => {
7853
+ scheduleBuild(async () => {
7787
7854
  const isContentFile = name.includes("/content/") || name.includes("\\content\\");
7788
7855
  const isMarkdown = /\.(md|mdx)$/.test(name);
7789
7856
  const isRoute = /\.(tsx|ts)$/.test(name) && !isContentFile;
@@ -7840,7 +7907,7 @@ async function gen(args) {
7840
7907
  if (!/\.(tsx|ts|jsx|js|html|md|mdx|css)$/.test(name))
7841
7908
  return;
7842
7909
  mediumDebounce(() => {
7843
- enqueueBuild(async () => {
7910
+ scheduleBuild(async () => {
7844
7911
  console.log(`[reroute/watch] \uD83D\uDCE6 Client changed: ${name}`);
7845
7912
  if (name.endsWith(".ts") || name.endsWith(".tsx")) {
7846
7913
  console.log("[reroute/watch] ├─ Rebuilding bundle...");
@@ -105772,7 +105839,7 @@ async function getVersionString2() {
105772
105839
  }
105773
105840
  async function getVersion2() {
105774
105841
  if (true) {
105775
- return "0.41.0";
105842
+ return "0.42.0";
105776
105843
  }
105777
105844
  const possiblePaths = [
105778
105845
  path3.join(import.meta.dir, "../../../package.json"),
@@ -105789,10 +105856,10 @@ async function getVersion2() {
105789
105856
  }
105790
105857
  async function getCommit2() {
105791
105858
  if (true) {
105792
- return "fdadb6d";
105859
+ return "7dd4c06";
105793
105860
  }
105794
105861
  return "dev";
105795
105862
  }
105796
105863
  main();
105797
105864
 
105798
- //# debugId=E4248FFA7E75804564756E2164756E21
105865
+ //# debugId=449323AA472C1CD464756E2164756E21