reroute-js 0.20.6 → 0.21.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 (231) hide show
  1. package/README.md +80 -1
  2. package/_/store/src/client/components/ProductCard.tsx +1 -1
  3. package/_/store/src/client/routes/categories/index.tsx +1 -0
  4. package/_/store/src/client/routes/products/[id].tsx +9 -1
  5. package/cli/bin.d.ts +1 -1
  6. package/cli/bin.js +98170 -6881
  7. package/cli/bin.js.map +175 -75
  8. package/cli/index.d.ts +1 -1
  9. package/cli/index.js +108 -3610
  10. package/cli/index.js.map +5 -49
  11. package/cli/src/cli.d.ts +1 -1
  12. package/cli/src/commands/analyze.d.ts +1 -1
  13. package/cli/src/commands/analyze.d.ts.map +1 -1
  14. package/cli/src/commands/build.d.ts +1 -1
  15. package/cli/src/commands/build.d.ts.map +1 -1
  16. package/cli/src/commands/dev.d.ts +1 -1
  17. package/cli/src/commands/dev.d.ts.map +1 -1
  18. package/cli/src/commands/gen.d.ts +1 -1
  19. package/cli/src/commands/gen.d.ts.map +1 -1
  20. package/cli/src/commands/index.d.ts +1 -1
  21. package/cli/src/commands/init.d.ts +1 -1
  22. package/cli/src/commands/lib/assets.d.ts +1 -1
  23. package/cli/src/commands/lib/bundler.d.ts +4 -1
  24. package/cli/src/commands/lib/bundler.d.ts.map +1 -1
  25. package/cli/src/commands/lib/command.d.ts +1 -1
  26. package/cli/src/commands/lib/env.d.ts +1 -1
  27. package/cli/src/commands/lib/index.d.ts +1 -1
  28. package/cli/src/commands/lib/log.d.ts +1 -1
  29. package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
  30. package/cli/src/commands/lib/markdown/index.d.ts +1 -1
  31. package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
  32. package/cli/src/commands/lib/markdown/processor.d.ts.map +1 -1
  33. package/cli/src/commands/lib/production.d.ts +1 -1
  34. package/cli/src/commands/lib/server.d.ts +1 -1
  35. package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
  36. package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
  37. package/cli/src/commands/lib/tailwind.d.ts +1 -1
  38. package/cli/src/commands/lib/tailwind.d.ts.map +1 -1
  39. package/cli/src/commands/lib/terminal-ui.d.ts +14 -0
  40. package/cli/src/commands/lib/terminal-ui.d.ts.map +1 -0
  41. package/cli/src/commands/lib/version.d.ts +1 -1
  42. package/cli/src/commands/og.d.ts +1 -1
  43. package/cli/src/commands/og.d.ts.map +1 -1
  44. package/cli/src/commands/start.d.ts +1 -1
  45. package/cli/src/index.d.ts +1 -1
  46. package/core/index.d.ts +1 -1
  47. package/core/index.js +1320 -1116
  48. package/core/index.js.map +22 -23
  49. package/core/src/bundler/hash.d.ts +1 -1
  50. package/core/src/bundler/index.d.ts +1 -1
  51. package/core/src/config.d.ts +1 -1
  52. package/core/src/content/discovery.d.ts +1 -1
  53. package/core/src/content/index.d.ts +1 -1
  54. package/core/src/content/metadata.d.ts +1 -1
  55. package/core/src/index.d.ts +1 -1
  56. package/core/src/llms/extractor.d.ts +1 -1
  57. package/core/src/llms/extractor.d.ts.map +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/full-generator.d.ts.map +1 -1
  61. package/core/src/llms/index-generator.d.ts +1 -1
  62. package/core/src/llms/index-generator.d.ts.map +1 -1
  63. package/core/src/llms/index.d.ts +1 -1
  64. package/core/src/og/discovery.d.ts +1 -1
  65. package/core/src/og/index.d.ts +1 -1
  66. package/core/src/og/meta.d.ts +1 -1
  67. package/core/src/og/render.d.ts +1 -1
  68. package/core/src/og/types.d.ts +1 -1
  69. package/core/src/robots/discovery.d.ts +1 -1
  70. package/core/src/robots/generator.d.ts +1 -1
  71. package/core/src/robots/generator.d.ts.map +1 -1
  72. package/core/src/robots/index.d.ts +1 -1
  73. package/core/src/robots/policies.d.ts +1 -1
  74. package/core/src/rss/discovery.d.ts +1 -4
  75. package/core/src/rss/discovery.d.ts.map +1 -1
  76. package/core/src/rss/generator.d.ts +1 -1
  77. package/core/src/rss/index.d.ts +1 -1
  78. package/core/src/sitemap/discovery.d.ts +1 -1
  79. package/core/src/sitemap/discovery.d.ts.map +1 -1
  80. package/core/src/sitemap/generator.d.ts +1 -1
  81. package/core/src/sitemap/generator.d.ts.map +1 -1
  82. package/core/src/sitemap/index.d.ts +1 -1
  83. package/core/src/ssr/index.d.ts +1 -1
  84. package/core/src/ssr/lib/cache.d.ts +1 -1
  85. package/core/src/ssr/lib/collections.d.ts +1 -1
  86. package/core/src/ssr/lib/compression.d.ts +1 -1
  87. package/core/src/ssr/lib/compute/content.d.ts +1 -1
  88. package/core/src/ssr/lib/compute/content.d.ts.map +1 -1
  89. package/core/src/ssr/lib/compute/index.d.ts +1 -1
  90. package/core/src/ssr/lib/compute/index.d.ts.map +1 -1
  91. package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
  92. package/core/src/ssr/lib/compute/layouts.d.ts.map +1 -1
  93. package/core/src/ssr/lib/compute/routes.d.ts +1 -8
  94. package/core/src/ssr/lib/compute/routes.d.ts.map +1 -1
  95. package/core/src/ssr/lib/data.d.ts +1 -5
  96. package/core/src/ssr/lib/data.d.ts.map +1 -1
  97. package/core/src/ssr/lib/html.d.ts +1 -6
  98. package/core/src/ssr/lib/html.d.ts.map +1 -1
  99. package/core/src/ssr/lib/imports.d.ts +1 -1
  100. package/core/src/ssr/lib/index.d.ts +1 -1
  101. package/core/src/ssr/lib/layouts.d.ts +1 -1
  102. package/core/src/ssr/lib/metadata.d.ts +1 -1
  103. package/core/src/ssr/lib/mime.d.ts +1 -1
  104. package/core/src/ssr/lib/modules.d.ts +1 -1
  105. package/core/src/ssr/lib/path.d.ts +1 -1
  106. package/core/src/ssr/lib/preload.d.ts +1 -1
  107. package/core/src/ssr/lib/preload.d.ts.map +1 -1
  108. package/core/src/ssr/lib/scripts/collections.d.ts +1 -5
  109. package/core/src/ssr/lib/scripts/collections.d.ts.map +1 -1
  110. package/core/src/ssr/lib/scripts/data.d.ts +1 -1
  111. package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
  112. package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
  113. package/core/src/ssr/lib/scripts/index.d.ts +1 -1
  114. package/core/src/ssr/lib/seed.d.ts +1 -1
  115. package/core/src/ssr/lib/setup.d.ts +1 -1
  116. package/core/src/ssr/lib/setup.d.ts.map +1 -1
  117. package/core/src/ssr/lib/styles.d.ts +3 -2
  118. package/core/src/ssr/lib/styles.d.ts.map +1 -1
  119. package/core/src/ssr/lib/template.d.ts +1 -1
  120. package/core/src/ssr/lib/types.d.ts +1 -1
  121. package/core/src/ssr/render.d.ts +1 -1
  122. package/core/src/ssr/stream.d.ts +1 -1
  123. package/elysia/index.d.ts +1 -1
  124. package/elysia/index.js +2328 -5181
  125. package/elysia/index.js.map +36 -81
  126. package/elysia/src/index.d.ts +1 -1
  127. package/elysia/src/libs/assets.d.ts +1 -1
  128. package/elysia/src/libs/cache.d.ts +1 -1
  129. package/elysia/src/libs/caching.d.ts +1 -1
  130. package/elysia/src/libs/http.d.ts +1 -1
  131. package/elysia/src/libs/image.d.ts +1 -4
  132. package/elysia/src/libs/image.d.ts.map +1 -1
  133. package/elysia/src/libs/index.d.ts +1 -1
  134. package/elysia/src/libs/llms.d.ts +1 -1
  135. package/elysia/src/libs/response.d.ts +1 -1
  136. package/elysia/src/libs/serving.d.ts +4 -3
  137. package/elysia/src/libs/serving.d.ts.map +1 -1
  138. package/elysia/src/plugin.d.ts +1 -1
  139. package/elysia/src/plugin.d.ts.map +1 -1
  140. package/elysia/src/routes/artifacts.d.ts +1 -1
  141. package/elysia/src/routes/artifacts.d.ts.map +1 -1
  142. package/elysia/src/routes/content.d.ts +1 -1
  143. package/elysia/src/routes/content.d.ts.map +1 -1
  144. package/elysia/src/routes/image.d.ts +1 -1
  145. package/elysia/src/routes/image.d.ts.map +1 -1
  146. package/elysia/src/routes/index.d.ts +1 -1
  147. package/elysia/src/routes/internal.d.ts +1 -1
  148. package/elysia/src/routes/internal.d.ts.map +1 -1
  149. package/elysia/src/routes/llms.d.ts +1 -1
  150. package/elysia/src/routes/llms.d.ts.map +1 -1
  151. package/elysia/src/routes/og.d.ts +1 -1
  152. package/elysia/src/routes/og.d.ts.map +1 -1
  153. package/elysia/src/routes/redirects.d.ts +1 -1
  154. package/elysia/src/routes/redirects.d.ts.map +1 -1
  155. package/elysia/src/routes/robots.d.ts +1 -1
  156. package/elysia/src/routes/rss.d.ts +1 -1
  157. package/elysia/src/routes/rss.d.ts.map +1 -1
  158. package/elysia/src/routes/search.d.ts +1 -1
  159. package/elysia/src/routes/search.d.ts.map +1 -1
  160. package/elysia/src/routes/sitemap.d.ts +1 -1
  161. package/elysia/src/routes/ssr.d.ts +1 -1
  162. package/elysia/src/routes/ssr.d.ts.map +1 -1
  163. package/elysia/src/routes/static.d.ts +1 -1
  164. package/elysia/src/routes/static.d.ts.map +1 -1
  165. package/elysia/src/types.d.ts +1 -1
  166. package/package.json +45 -10
  167. package/react/index.d.ts +1 -1
  168. package/react/index.js +9 -9
  169. package/react/index.js.map +15 -15
  170. package/react/src/components/ClientOnly.d.ts +1 -1
  171. package/react/src/components/ContentRoute.d.ts +1 -1
  172. package/react/src/components/ContentRoute.d.ts.map +1 -1
  173. package/react/src/components/Image.d.ts +1 -1
  174. package/react/src/components/Image.d.ts.map +1 -1
  175. package/react/src/components/LazyRoute.d.ts +1 -1
  176. package/react/src/components/Link.d.ts +1 -1
  177. package/react/src/components/Markdown.d.ts +1 -1
  178. package/react/src/components/Outlet.d.ts +1 -1
  179. package/react/src/components/index.d.ts +1 -1
  180. package/react/src/hooks/index.d.ts +1 -1
  181. package/react/src/hooks/useContent.d.ts +1 -1
  182. package/react/src/hooks/useContent.d.ts.map +1 -1
  183. package/react/src/hooks/useData.d.ts +1 -1
  184. package/react/src/hooks/useData.d.ts.map +1 -1
  185. package/react/src/hooks/useFeed.d.ts +1 -1
  186. package/react/src/hooks/useLayoutData.d.ts +1 -1
  187. package/react/src/hooks/useLayoutData.d.ts.map +1 -1
  188. package/react/src/hooks/useLlms.d.ts +1 -1
  189. package/react/src/hooks/useLlms.d.ts.map +1 -1
  190. package/react/src/hooks/useNavigate.d.ts +1 -1
  191. package/react/src/hooks/useParams.d.ts +1 -1
  192. package/react/src/hooks/useRouter.d.ts +1 -1
  193. package/react/src/hooks/useSearch.d.ts +1 -1
  194. package/react/src/hooks/useSearch.d.ts.map +1 -1
  195. package/react/src/hooks/useSearchParams.d.ts +1 -1
  196. package/react/src/hooks/useToc.d.ts +1 -1
  197. package/react/src/hooks/useToc.d.ts.map +1 -1
  198. package/react/src/index.d.ts +1 -1
  199. package/react/src/lib/collection.d.ts +1 -1
  200. package/react/src/lib/collection.d.ts.map +1 -1
  201. package/react/src/lib/content.d.ts +1 -1
  202. package/react/src/lib/head.d.ts +1 -1
  203. package/react/src/lib/index.d.ts +1 -1
  204. package/react/src/lib/lazy-route.d.ts +1 -1
  205. package/react/src/lib/route-loader.d.ts +1 -1
  206. package/react/src/providers/ContentProvider.d.ts +1 -1
  207. package/react/src/providers/RerouteProvider.d.ts +1 -1
  208. package/react/src/providers/RouterProvider.d.ts +1 -1
  209. package/react/src/providers/RouterProvider.d.ts.map +1 -1
  210. package/react/src/providers/index.d.ts +1 -1
  211. package/react/src/types/any.d.ts +1 -1
  212. package/react/src/types/index.d.ts +1 -1
  213. package/react/src/types/router.d.ts +1 -1
  214. package/telemetry/browser.d.ts +11 -0
  215. package/telemetry/browser.d.ts.map +1 -0
  216. package/telemetry/browser.js +340 -0
  217. package/telemetry/browser.js.map +11 -0
  218. package/telemetry/index.d.ts +11 -0
  219. package/telemetry/index.d.ts.map +1 -0
  220. package/telemetry/index.js +441 -0
  221. package/telemetry/index.js.map +10 -0
  222. package/telemetry/react.d.ts +11 -0
  223. package/telemetry/react.d.ts.map +1 -0
  224. package/telemetry/react.js +429 -0
  225. package/telemetry/react.js.map +11 -0
  226. package/telemetry/src/browser/index.d.ts +104 -0
  227. package/telemetry/src/browser/index.d.ts.map +1 -0
  228. package/telemetry/src/browser/react.d.ts +30 -0
  229. package/telemetry/src/browser/react.d.ts.map +1 -0
  230. package/telemetry/src/server/index.d.ts +110 -0
  231. package/telemetry/src/server/index.d.ts.map +1 -0
package/README.md CHANGED
@@ -185,6 +185,7 @@ Reroute is a dead-simple file-based routing framework for building full-stack Re
185
185
  - 📚 **Content API Routes** - Dynamic content endpoints
186
186
  - 🛠️ **Dev Mode Routes** - Development tooling and live reload
187
187
  - 📦 **Artifact Routes** - Serve generated content chunks and registry
188
+ - 📊 **Optional OpenTelemetry** - Built-in tracing for SSR, 404s, cache hits (install `@elysiajs/opentelemetry` to enable)
188
189
 
189
190
  ### 🎯 Build System
190
191
  - 🔧 **Transpilation** - TypeScript/JSX to optimized JavaScript
@@ -1132,7 +1133,7 @@ export default defineConfig({
1132
1133
  });
1133
1134
  ```
1134
1135
 
1135
- Run `reroute gen` to generate `.reroute/search-index.json`.
1136
+ Run `reroute gen` to generate `.reroute/search.json`.
1136
1137
 
1137
1138
  ### Client-Side Search with Pagination
1138
1139
 
@@ -1476,6 +1477,84 @@ If no `[og].tsx` exists for a route, uses built-in template with:
1476
1477
  - Avatar and siteName from config
1477
1478
  - Clean black card design
1478
1479
 
1480
+ ## 📊 OpenTelemetry (Optional)
1481
+
1482
+ Reroute has built-in support for OpenTelemetry tracing to help debug SSR, 404s, and cache behavior.
1483
+
1484
+ ### Installation
1485
+
1486
+ ```bash
1487
+ bun add @elysiajs/opentelemetry
1488
+ ```
1489
+
1490
+ That's it! Reroute automatically detects and uses it.
1491
+
1492
+ ### What Gets Traced
1493
+
1494
+ Once installed, Reroute sends traces with detailed attributes:
1495
+
1496
+ - **SSR Rendering** (`reroute.ssr.render_stream`, `reroute.ssr.render_sync`)
1497
+ - `reroute.ssr.streaming`: `true`/`false`
1498
+ - `reroute.pathname`: `/blog/my-post`
1499
+ - `reroute.collection`: `blog`
1500
+ - `reroute.cache.hit`: `true`/`false`
1501
+
1502
+ - **404 Not Found** (When routes don't exist)
1503
+ - `reroute.not_found`: `true`
1504
+ - `reroute.pathname`: `/missing-page`
1505
+ - `reroute.method`: `GET`
1506
+
1507
+ - **SSR Data Loading** (`reroute.data.compute`)
1508
+ - `reroute.data.path`: `/products/123`
1509
+ - `reroute.data.cache_hit`: `true`/`false`
1510
+
1511
+ - **Errors** (SSR failures, data loading errors)
1512
+ - `reroute.error`: `true`
1513
+ - `reroute.error.type`: `SSRRenderError`, `SSRDataError`, etc.
1514
+ - `reroute.error.collection`: `blog`
1515
+
1516
+ ### Usage with Your App Telemetry
1517
+
1518
+ ```typescript
1519
+ import { Elysia } from 'elysia';
1520
+ import { reroute } from 'reroute-js/elysia';
1521
+ import { opentelemetry } from '@elysiajs/opentelemetry';
1522
+ import { BatchSpanProcessor } from '@opentelemetry/sdk-trace-node';
1523
+ import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-proto';
1524
+
1525
+ new Elysia()
1526
+ .use(opentelemetry({
1527
+ serviceName: 'My App',
1528
+ spanProcessors: [
1529
+ new BatchSpanProcessor(
1530
+ new OTLPTraceExporter({
1531
+ url: 'http://localhost:4318/v1/traces',
1532
+ })
1533
+ )
1534
+ ]
1535
+ }))
1536
+ .use(reroute({ app: createElement(App) }))
1537
+ .listen(3000);
1538
+ ```
1539
+
1540
+ Reroute traces will appear nested under your request spans. Filter by `reroute.*` attributes in SigNoz/Jaeger.
1541
+
1542
+ **Best Practice:** Use named functions (not arrow functions) for better span names:
1543
+
1544
+ ```typescript
1545
+ // ❌ Bad: Shows as "N/A" or "anonymous" in traces
1546
+ .get('/api/users', async ({ params }) => {
1547
+ return await getUsers();
1548
+ });
1549
+
1550
+ // ✅ Good: Shows as "fetchUsers" in traces
1551
+ .get('/api/users', async function fetchUsers({ params }) {
1552
+ return await getUsers();
1553
+ });
1554
+ ```
1555
+
1556
+ See [examples/landing/src/plugins/telemetry.ts](./examples/landing/src/plugins/telemetry.ts) for a complete telemetry setup.
1557
+
1479
1558
  ## 📖 Learn More
1480
1559
 
1481
1560
  - [Examples](./examples) - Example projects to get started
@@ -21,7 +21,7 @@ export default function ProductCard({ product }: ProductCardProps) {
21
21
  height={180}
22
22
  quality={75}
23
23
  sizes='(max-width: 640px) 50vw, (max-width: 1024px) 33vw, 180px'
24
- className='max-w-full max-h-full object-contain'
24
+ className='max-w-full max-h-full object-contain relative z-10 bg-white'
25
25
  style={{ viewTransitionName: `product-image-${product.id}` }}
26
26
  />
27
27
  </div>
@@ -80,6 +80,7 @@ function CategoriesIndexPage() {
80
80
  <>
81
81
  <Header />
82
82
  <main className='container-custom py-8'>
83
+ <h1 className='section-heading'>Shop by Category</h1>
83
84
  <div className='text-center py-16 text-gray-600 text-lg'>
84
85
  <div className='animate-pulse'>Loading categories...</div>
85
86
  </div>
@@ -18,6 +18,13 @@ const ssr = {
18
18
  };
19
19
  }
20
20
  const product = await getProduct(id);
21
+ if (!product) {
22
+ return {
23
+ product: null,
24
+ relatedProducts: [],
25
+ error: 'Product not found',
26
+ };
27
+ }
21
28
  const allInCategory = await getProductsByCategory(product.category);
22
29
  const relatedProducts = allInCategory
23
30
  .filter((p) => p.id !== id)
@@ -89,6 +96,7 @@ function ProductDetailPage() {
89
96
  <>
90
97
  <Header />
91
98
  <main className='container-custom py-8'>
99
+ <h1 className='text-4xl font-bold text-gray-900 mb-8'>Loading...</h1>
92
100
  <div className='text-center py-16 text-gray-600 text-lg'>
93
101
  <div className='animate-pulse'>Loading product details...</div>
94
102
  </div>
@@ -149,7 +157,7 @@ function ProductDetailPage() {
149
157
  quality={85}
150
158
  sizes='(max-width: 1024px) 90vw, 350px'
151
159
  priority
152
- className='max-w-full max-h-[500px] object-contain'
160
+ className='max-w-full max-h-[500px] object-contain relative z-10'
153
161
  style={{ viewTransitionName: `product-image-${product.id}` }}
154
162
  />
155
163
  </div>
package/cli/bin.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /**
2
- * reroute-js v0.20.6
2
+ * reroute-js v0.21.0
3
3
  *
4
4
  * @license MIT
5
5
  * @copyright 2025 stewones <hi@stewan.io>