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.
- package/README.md +80 -1
- package/_/store/src/client/components/ProductCard.tsx +1 -1
- package/_/store/src/client/routes/categories/index.tsx +1 -0
- package/_/store/src/client/routes/products/[id].tsx +9 -1
- package/cli/bin.d.ts +1 -1
- package/cli/bin.js +98170 -6881
- package/cli/bin.js.map +175 -75
- package/cli/index.d.ts +1 -1
- package/cli/index.js +108 -3610
- package/cli/index.js.map +5 -49
- package/cli/src/cli.d.ts +1 -1
- package/cli/src/commands/analyze.d.ts +1 -1
- package/cli/src/commands/analyze.d.ts.map +1 -1
- package/cli/src/commands/build.d.ts +1 -1
- package/cli/src/commands/build.d.ts.map +1 -1
- package/cli/src/commands/dev.d.ts +1 -1
- package/cli/src/commands/dev.d.ts.map +1 -1
- package/cli/src/commands/gen.d.ts +1 -1
- package/cli/src/commands/gen.d.ts.map +1 -1
- package/cli/src/commands/index.d.ts +1 -1
- package/cli/src/commands/init.d.ts +1 -1
- package/cli/src/commands/lib/assets.d.ts +1 -1
- package/cli/src/commands/lib/bundler.d.ts +4 -1
- package/cli/src/commands/lib/bundler.d.ts.map +1 -1
- package/cli/src/commands/lib/command.d.ts +1 -1
- package/cli/src/commands/lib/env.d.ts +1 -1
- package/cli/src/commands/lib/index.d.ts +1 -1
- package/cli/src/commands/lib/log.d.ts +1 -1
- package/cli/src/commands/lib/markdown/availability.d.ts +1 -1
- package/cli/src/commands/lib/markdown/index.d.ts +1 -1
- package/cli/src/commands/lib/markdown/processor.d.ts +1 -1
- package/cli/src/commands/lib/markdown/processor.d.ts.map +1 -1
- package/cli/src/commands/lib/production.d.ts +1 -1
- package/cli/src/commands/lib/server.d.ts +1 -1
- package/cli/src/commands/lib/streaming/analyzer.d.ts +1 -1
- package/cli/src/commands/lib/streaming/suspense.d.ts +1 -1
- package/cli/src/commands/lib/tailwind.d.ts +1 -1
- package/cli/src/commands/lib/tailwind.d.ts.map +1 -1
- package/cli/src/commands/lib/terminal-ui.d.ts +14 -0
- package/cli/src/commands/lib/terminal-ui.d.ts.map +1 -0
- package/cli/src/commands/lib/version.d.ts +1 -1
- package/cli/src/commands/og.d.ts +1 -1
- package/cli/src/commands/og.d.ts.map +1 -1
- package/cli/src/commands/start.d.ts +1 -1
- package/cli/src/index.d.ts +1 -1
- package/core/index.d.ts +1 -1
- package/core/index.js +1320 -1116
- package/core/index.js.map +22 -23
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/config.d.ts +1 -1
- package/core/src/content/discovery.d.ts +1 -1
- package/core/src/content/index.d.ts +1 -1
- package/core/src/content/metadata.d.ts +1 -1
- package/core/src/index.d.ts +1 -1
- package/core/src/llms/extractor.d.ts +1 -1
- package/core/src/llms/extractor.d.ts.map +1 -1
- package/core/src/llms/formatter.d.ts +1 -1
- package/core/src/llms/full-generator.d.ts +1 -1
- package/core/src/llms/full-generator.d.ts.map +1 -1
- package/core/src/llms/index-generator.d.ts +1 -1
- package/core/src/llms/index-generator.d.ts.map +1 -1
- package/core/src/llms/index.d.ts +1 -1
- package/core/src/og/discovery.d.ts +1 -1
- package/core/src/og/index.d.ts +1 -1
- package/core/src/og/meta.d.ts +1 -1
- package/core/src/og/render.d.ts +1 -1
- package/core/src/og/types.d.ts +1 -1
- package/core/src/robots/discovery.d.ts +1 -1
- package/core/src/robots/generator.d.ts +1 -1
- package/core/src/robots/generator.d.ts.map +1 -1
- package/core/src/robots/index.d.ts +1 -1
- package/core/src/robots/policies.d.ts +1 -1
- package/core/src/rss/discovery.d.ts +1 -4
- package/core/src/rss/discovery.d.ts.map +1 -1
- package/core/src/rss/generator.d.ts +1 -1
- package/core/src/rss/index.d.ts +1 -1
- package/core/src/sitemap/discovery.d.ts +1 -1
- package/core/src/sitemap/discovery.d.ts.map +1 -1
- package/core/src/sitemap/generator.d.ts +1 -1
- package/core/src/sitemap/generator.d.ts.map +1 -1
- package/core/src/sitemap/index.d.ts +1 -1
- package/core/src/ssr/index.d.ts +1 -1
- package/core/src/ssr/lib/cache.d.ts +1 -1
- package/core/src/ssr/lib/collections.d.ts +1 -1
- package/core/src/ssr/lib/compression.d.ts +1 -1
- package/core/src/ssr/lib/compute/content.d.ts +1 -1
- package/core/src/ssr/lib/compute/content.d.ts.map +1 -1
- package/core/src/ssr/lib/compute/index.d.ts +1 -1
- package/core/src/ssr/lib/compute/index.d.ts.map +1 -1
- package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
- package/core/src/ssr/lib/compute/layouts.d.ts.map +1 -1
- package/core/src/ssr/lib/compute/routes.d.ts +1 -8
- package/core/src/ssr/lib/compute/routes.d.ts.map +1 -1
- package/core/src/ssr/lib/data.d.ts +1 -5
- package/core/src/ssr/lib/data.d.ts.map +1 -1
- package/core/src/ssr/lib/html.d.ts +1 -6
- package/core/src/ssr/lib/html.d.ts.map +1 -1
- package/core/src/ssr/lib/imports.d.ts +1 -1
- package/core/src/ssr/lib/index.d.ts +1 -1
- package/core/src/ssr/lib/layouts.d.ts +1 -1
- package/core/src/ssr/lib/metadata.d.ts +1 -1
- package/core/src/ssr/lib/mime.d.ts +1 -1
- package/core/src/ssr/lib/modules.d.ts +1 -1
- package/core/src/ssr/lib/path.d.ts +1 -1
- package/core/src/ssr/lib/preload.d.ts +1 -1
- package/core/src/ssr/lib/preload.d.ts.map +1 -1
- package/core/src/ssr/lib/scripts/collections.d.ts +1 -5
- package/core/src/ssr/lib/scripts/collections.d.ts.map +1 -1
- package/core/src/ssr/lib/scripts/data.d.ts +1 -1
- package/core/src/ssr/lib/scripts/escape.d.ts +1 -1
- package/core/src/ssr/lib/scripts/feeds.d.ts +1 -1
- package/core/src/ssr/lib/scripts/index.d.ts +1 -1
- package/core/src/ssr/lib/seed.d.ts +1 -1
- package/core/src/ssr/lib/setup.d.ts +1 -1
- package/core/src/ssr/lib/setup.d.ts.map +1 -1
- package/core/src/ssr/lib/styles.d.ts +3 -2
- package/core/src/ssr/lib/styles.d.ts.map +1 -1
- package/core/src/ssr/lib/template.d.ts +1 -1
- package/core/src/ssr/lib/types.d.ts +1 -1
- package/core/src/ssr/render.d.ts +1 -1
- package/core/src/ssr/stream.d.ts +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +2328 -5181
- package/elysia/index.js.map +36 -81
- package/elysia/src/index.d.ts +1 -1
- package/elysia/src/libs/assets.d.ts +1 -1
- package/elysia/src/libs/cache.d.ts +1 -1
- package/elysia/src/libs/caching.d.ts +1 -1
- package/elysia/src/libs/http.d.ts +1 -1
- package/elysia/src/libs/image.d.ts +1 -4
- package/elysia/src/libs/image.d.ts.map +1 -1
- package/elysia/src/libs/index.d.ts +1 -1
- package/elysia/src/libs/llms.d.ts +1 -1
- package/elysia/src/libs/response.d.ts +1 -1
- package/elysia/src/libs/serving.d.ts +4 -3
- package/elysia/src/libs/serving.d.ts.map +1 -1
- package/elysia/src/plugin.d.ts +1 -1
- package/elysia/src/plugin.d.ts.map +1 -1
- package/elysia/src/routes/artifacts.d.ts +1 -1
- package/elysia/src/routes/artifacts.d.ts.map +1 -1
- package/elysia/src/routes/content.d.ts +1 -1
- package/elysia/src/routes/content.d.ts.map +1 -1
- package/elysia/src/routes/image.d.ts +1 -1
- package/elysia/src/routes/image.d.ts.map +1 -1
- package/elysia/src/routes/index.d.ts +1 -1
- package/elysia/src/routes/internal.d.ts +1 -1
- package/elysia/src/routes/internal.d.ts.map +1 -1
- package/elysia/src/routes/llms.d.ts +1 -1
- package/elysia/src/routes/llms.d.ts.map +1 -1
- package/elysia/src/routes/og.d.ts +1 -1
- package/elysia/src/routes/og.d.ts.map +1 -1
- package/elysia/src/routes/redirects.d.ts +1 -1
- package/elysia/src/routes/redirects.d.ts.map +1 -1
- package/elysia/src/routes/robots.d.ts +1 -1
- package/elysia/src/routes/rss.d.ts +1 -1
- package/elysia/src/routes/rss.d.ts.map +1 -1
- package/elysia/src/routes/search.d.ts +1 -1
- package/elysia/src/routes/search.d.ts.map +1 -1
- package/elysia/src/routes/sitemap.d.ts +1 -1
- package/elysia/src/routes/ssr.d.ts +1 -1
- package/elysia/src/routes/ssr.d.ts.map +1 -1
- package/elysia/src/routes/static.d.ts +1 -1
- package/elysia/src/routes/static.d.ts.map +1 -1
- package/elysia/src/types.d.ts +1 -1
- package/package.json +45 -10
- package/react/index.d.ts +1 -1
- package/react/index.js +9 -9
- package/react/index.js.map +15 -15
- package/react/src/components/ClientOnly.d.ts +1 -1
- package/react/src/components/ContentRoute.d.ts +1 -1
- package/react/src/components/ContentRoute.d.ts.map +1 -1
- package/react/src/components/Image.d.ts +1 -1
- package/react/src/components/Image.d.ts.map +1 -1
- package/react/src/components/LazyRoute.d.ts +1 -1
- package/react/src/components/Link.d.ts +1 -1
- package/react/src/components/Markdown.d.ts +1 -1
- package/react/src/components/Outlet.d.ts +1 -1
- package/react/src/components/index.d.ts +1 -1
- package/react/src/hooks/index.d.ts +1 -1
- package/react/src/hooks/useContent.d.ts +1 -1
- package/react/src/hooks/useContent.d.ts.map +1 -1
- package/react/src/hooks/useData.d.ts +1 -1
- package/react/src/hooks/useData.d.ts.map +1 -1
- package/react/src/hooks/useFeed.d.ts +1 -1
- package/react/src/hooks/useLayoutData.d.ts +1 -1
- package/react/src/hooks/useLayoutData.d.ts.map +1 -1
- package/react/src/hooks/useLlms.d.ts +1 -1
- package/react/src/hooks/useLlms.d.ts.map +1 -1
- package/react/src/hooks/useNavigate.d.ts +1 -1
- package/react/src/hooks/useParams.d.ts +1 -1
- package/react/src/hooks/useRouter.d.ts +1 -1
- package/react/src/hooks/useSearch.d.ts +1 -1
- package/react/src/hooks/useSearch.d.ts.map +1 -1
- package/react/src/hooks/useSearchParams.d.ts +1 -1
- package/react/src/hooks/useToc.d.ts +1 -1
- package/react/src/hooks/useToc.d.ts.map +1 -1
- package/react/src/index.d.ts +1 -1
- package/react/src/lib/collection.d.ts +1 -1
- package/react/src/lib/collection.d.ts.map +1 -1
- package/react/src/lib/content.d.ts +1 -1
- package/react/src/lib/head.d.ts +1 -1
- package/react/src/lib/index.d.ts +1 -1
- package/react/src/lib/lazy-route.d.ts +1 -1
- package/react/src/lib/route-loader.d.ts +1 -1
- package/react/src/providers/ContentProvider.d.ts +1 -1
- package/react/src/providers/RerouteProvider.d.ts +1 -1
- package/react/src/providers/RouterProvider.d.ts +1 -1
- package/react/src/providers/RouterProvider.d.ts.map +1 -1
- package/react/src/providers/index.d.ts +1 -1
- package/react/src/types/any.d.ts +1 -1
- package/react/src/types/index.d.ts +1 -1
- package/react/src/types/router.d.ts +1 -1
- package/telemetry/browser.d.ts +11 -0
- package/telemetry/browser.d.ts.map +1 -0
- package/telemetry/browser.js +340 -0
- package/telemetry/browser.js.map +11 -0
- package/telemetry/index.d.ts +11 -0
- package/telemetry/index.d.ts.map +1 -0
- package/telemetry/index.js +441 -0
- package/telemetry/index.js.map +10 -0
- package/telemetry/react.d.ts +11 -0
- package/telemetry/react.d.ts.map +1 -0
- package/telemetry/react.js +429 -0
- package/telemetry/react.js.map +11 -0
- package/telemetry/src/browser/index.d.ts +104 -0
- package/telemetry/src/browser/index.d.ts.map +1 -0
- package/telemetry/src/browser/react.d.ts +30 -0
- package/telemetry/src/browser/react.d.ts.map +1 -0
- package/telemetry/src/server/index.d.ts +110 -0
- 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
|
|
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