reroute-js 0.25.2 → 0.26.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 +150 -52
- package/cli/bin.d.ts +1 -1
- package/cli/bin.js +446 -150
- package/cli/bin.js.map +13 -9
- package/cli/index.d.ts +1 -1
- package/cli/index.js +4 -4
- package/cli/index.js.map +1 -1
- package/cli/src/cli.d.ts +1 -1
- package/cli/src/commands/analyze.d.ts +1 -1
- package/cli/src/commands/build.d.ts +1 -1
- package/cli/src/commands/dev.d.ts +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 +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/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/terminal-ui.d.ts +1 -1
- package/cli/src/commands/lib/version.d.ts +1 -1
- package/cli/src/commands/og.d.ts +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 +912 -589
- package/core/index.js.map +22 -14
- package/core/src/bundler/hash.d.ts +1 -1
- package/core/src/bundler/index.d.ts +1 -1
- package/core/src/config.d.ts +243 -2
- package/core/src/config.d.ts.map +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/formatter.d.ts +1 -1
- package/core/src/llms/full-generator.d.ts +1 -1
- package/core/src/llms/index-generator.d.ts +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/index.d.ts +1 -1
- package/core/src/robots/policies.d.ts +1 -1
- package/core/src/rss/discovery.d.ts +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/generator.d.ts +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/index.d.ts +1 -1
- package/core/src/ssr/lib/compute/layouts.d.ts +1 -1
- package/core/src/ssr/lib/compute/routes.d.ts +1 -1
- package/core/src/ssr/lib/data.d.ts +1 -1
- package/core/src/ssr/lib/html.d.ts +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/scripts/collections.d.ts +1 -1
- package/core/src/ssr/lib/scripts/data.d.ts +2 -2
- package/core/src/ssr/lib/scripts/data.d.ts.map +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 +4 -2
- package/core/src/ssr/lib/setup.d.ts.map +1 -1
- package/core/src/ssr/lib/styles.d.ts +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 +4 -2
- package/core/src/ssr/render.d.ts.map +1 -1
- package/core/src/ssr/stream.d.ts +4 -2
- package/core/src/ssr/stream.d.ts.map +1 -1
- package/elysia/index.d.ts +1 -1
- package/elysia/index.js +715 -468
- package/elysia/index.js.map +15 -11
- 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 -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 +1 -1
- package/elysia/src/plugin.d.ts +1 -1
- package/elysia/src/routes/artifacts.d.ts +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/index.d.ts +1 -1
- package/elysia/src/routes/internal.d.ts +1 -1
- package/elysia/src/routes/llms.d.ts +1 -1
- package/elysia/src/routes/og.d.ts +1 -1
- package/elysia/src/routes/redirects.d.ts +1 -1
- package/elysia/src/routes/robots.d.ts +1 -1
- package/elysia/src/routes/rss.d.ts +1 -1
- package/elysia/src/routes/search.d.ts +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 +2 -9
- package/react/index.d.ts +1 -1
- package/react/index.js +2 -2
- package/react/index.js.map +1 -1
- package/react/src/components/ClientOnly.d.ts +1 -1
- package/react/src/components/ContentRoute.d.ts +1 -1
- package/react/src/components/Image.d.ts +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/useData.d.ts +1 -1
- package/react/src/hooks/useFeed.d.ts +1 -1
- package/react/src/hooks/useLayoutData.d.ts +1 -1
- package/react/src/hooks/useLlms.d.ts +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/useSearchParams.d.ts +1 -1
- package/react/src/hooks/useToc.d.ts +1 -1
- package/react/src/index.d.ts +1 -1
- package/react/src/lib/collection.d.ts +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/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/react.d.ts +2 -2
- package/telemetry/react.d.ts.map +1 -1
- package/telemetry/react.js +167 -185
- package/telemetry/react.js.map +7 -6
- package/telemetry/{index.d.ts → server.d.ts} +2 -2
- package/telemetry/server.d.ts.map +1 -0
- package/telemetry/server.js +1134 -0
- package/telemetry/server.js.map +44 -0
- package/telemetry/src/{browser/react.d.ts → react/api.d.ts} +4 -12
- package/telemetry/src/react/api.d.ts.map +1 -0
- package/telemetry/{browser.d.ts → src/react/index.d.ts} +4 -3
- package/telemetry/src/react/index.d.ts.map +1 -0
- package/telemetry/src/{browser/index.d.ts → react/telemetry.d.ts} +13 -13
- package/telemetry/src/react/telemetry.d.ts.map +1 -0
- package/telemetry/src/server/index.d.ts +3 -101
- package/telemetry/src/server/index.d.ts.map +1 -1
- package/telemetry/src/server/instrumentation.d.ts +62 -0
- package/telemetry/src/server/instrumentation.d.ts.map +1 -0
- package/telemetry/src/server/plugin.d.ts +72 -0
- package/telemetry/src/server/plugin.d.ts.map +1 -0
- package/telemetry/browser.d.ts.map +0 -1
- package/telemetry/browser.js +0 -382
- package/telemetry/browser.js.map +0 -10
- package/telemetry/index.d.ts.map +0 -1
- package/telemetry/index.js +0 -509
- package/telemetry/index.js.map +0 -10
- package/telemetry/src/browser/index.d.ts.map +0 -1
- package/telemetry/src/browser/react.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -185,7 +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
|
|
188
|
+
- 📊 **Optional OpenTelemetry** - Built-in tracing for SSR, 404s, cache hits
|
|
189
189
|
|
|
190
190
|
### 🎯 Build System
|
|
191
191
|
- 🔧 **Transpilation** - TypeScript/JSX to optimized JavaScript
|
|
@@ -1479,81 +1479,179 @@ If no `[og].tsx` exists for a route, uses built-in template with:
|
|
|
1479
1479
|
|
|
1480
1480
|
## 📊 OpenTelemetry (Optional)
|
|
1481
1481
|
|
|
1482
|
-
|
|
1482
|
+
### Server Telemetry
|
|
1483
1483
|
|
|
1484
|
-
|
|
1484
|
+
Track HTTP requests, errors, and system metrics.
|
|
1485
|
+
|
|
1486
|
+
**Installation:**
|
|
1485
1487
|
|
|
1486
1488
|
```bash
|
|
1487
|
-
|
|
1489
|
+
# Server telemetry packages
|
|
1490
|
+
bun add @opentelemetry/api \
|
|
1491
|
+
@opentelemetry/api-logs \
|
|
1492
|
+
@opentelemetry/exporter-logs-otlp-proto \
|
|
1493
|
+
@opentelemetry/exporter-metrics-otlp-proto \
|
|
1494
|
+
@opentelemetry/exporter-trace-otlp-proto \
|
|
1495
|
+
@opentelemetry/resources \
|
|
1496
|
+
@opentelemetry/sdk-logs \
|
|
1497
|
+
@opentelemetry/sdk-metrics \
|
|
1498
|
+
@opentelemetry/sdk-trace-node \
|
|
1499
|
+
@opentelemetry/semantic-conventions
|
|
1488
1500
|
```
|
|
1489
1501
|
|
|
1490
|
-
|
|
1502
|
+
**Configuration** in `reroute.config.ts`:
|
|
1491
1503
|
|
|
1492
|
-
|
|
1504
|
+
```typescript
|
|
1505
|
+
export default defineConfig({
|
|
1506
|
+
telemetry: {
|
|
1507
|
+
// Server telemetry
|
|
1508
|
+
enabled: true,
|
|
1509
|
+
environment: process.env.NODE_ENV || 'development',
|
|
1510
|
+
ignoreRoutes: [
|
|
1511
|
+
'/health',
|
|
1512
|
+
(pathname) => pathname.startsWith('/assets/'),
|
|
1513
|
+
/\.(js|css|png|jpg|svg|ico)$/,
|
|
1514
|
+
],
|
|
1515
|
+
sampleRate: 1.0,
|
|
1516
|
+
captureHeaders: ['user-agent'],
|
|
1517
|
+
|
|
1518
|
+
// Browser telemetry proxy (avoids CORS and ad blockers)
|
|
1519
|
+
proxy: {
|
|
1520
|
+
enabled: true, // Default when proxy is an object
|
|
1521
|
+
pathname: '/api/telemetry', // Default
|
|
1522
|
+
verbose: false, // Log proxy requests
|
|
1523
|
+
},
|
|
1524
|
+
|
|
1525
|
+
// Browser telemetry
|
|
1526
|
+
browser: {
|
|
1527
|
+
enabled: true,
|
|
1528
|
+
serviceName: 'my-app-browser',
|
|
1529
|
+
environment: process.env.NODE_ENV || 'development',
|
|
1530
|
+
otlpEndpoint: '/api/telemetry', // Must match proxy.pathname
|
|
1531
|
+
enableConsoleCapture: true,
|
|
1532
|
+
},
|
|
1533
|
+
},
|
|
1534
|
+
});
|
|
1535
|
+
```
|
|
1493
1536
|
|
|
1494
|
-
|
|
1537
|
+
**Usage** - Config loaded automatically:
|
|
1495
1538
|
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
- `reroute.pathname`: `/blog/my-post`
|
|
1499
|
-
- `reroute.collection`: `blog`
|
|
1500
|
-
- `reroute.cache.hit`: `true`/`false`
|
|
1539
|
+
```typescript
|
|
1540
|
+
import { telemetry } from 'reroute-js/telemetry/server';
|
|
1501
1541
|
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1542
|
+
new Elysia()
|
|
1543
|
+
.use(telemetry())
|
|
1544
|
+
.use(reroute({ app: createElement(App) }))
|
|
1545
|
+
.listen(3000);
|
|
1546
|
+
```
|
|
1506
1547
|
|
|
1507
|
-
|
|
1508
|
-
- `reroute.data.path`: `/products/123`
|
|
1509
|
-
- `reroute.data.cache_hit`: `true`/`false`
|
|
1548
|
+
**Browser telemetry** - Track client-side events and errors.
|
|
1510
1549
|
|
|
1511
|
-
|
|
1512
|
-
- `reroute.error`: `true`
|
|
1513
|
-
- `reroute.error.type`: `SSRRenderError`, `SSRDataError`, etc.
|
|
1514
|
-
- `reroute.error.collection`: `blog`
|
|
1550
|
+
**Installation:**
|
|
1515
1551
|
|
|
1516
|
-
|
|
1552
|
+
```bash
|
|
1553
|
+
# Browser telemetry packages
|
|
1554
|
+
bun add @opentelemetry/api \
|
|
1555
|
+
@opentelemetry/auto-instrumentations-web \
|
|
1556
|
+
@opentelemetry/context-zone \
|
|
1557
|
+
@opentelemetry/exporter-trace-otlp-http \
|
|
1558
|
+
@opentelemetry/instrumentation \
|
|
1559
|
+
@opentelemetry/resources \
|
|
1560
|
+
@opentelemetry/sdk-trace-base \
|
|
1561
|
+
@opentelemetry/sdk-trace-web \
|
|
1562
|
+
@opentelemetry/semantic-conventions
|
|
1563
|
+
```
|
|
1517
1564
|
|
|
1518
|
-
|
|
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';
|
|
1565
|
+
**Usage:**
|
|
1524
1566
|
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
}
|
|
1536
|
-
|
|
1537
|
-
.listen(3000);
|
|
1567
|
+
```tsx
|
|
1568
|
+
import { TelemetryProvider } from 'reroute-js/telemetry/react/react';
|
|
1569
|
+
|
|
1570
|
+
// Auto-loads from telemetry.browser config
|
|
1571
|
+
<TelemetryProvider>
|
|
1572
|
+
<RerouteProvider {...bundle} />
|
|
1573
|
+
</TelemetryProvider>
|
|
1574
|
+
|
|
1575
|
+
// Or override config values
|
|
1576
|
+
<TelemetryProvider enabled={true} serviceName="custom-name">
|
|
1577
|
+
<RerouteProvider {...bundle} />
|
|
1578
|
+
</TelemetryProvider>
|
|
1538
1579
|
```
|
|
1539
1580
|
|
|
1540
|
-
|
|
1581
|
+
See [examples/landing](./examples/landing) for a complete example.
|
|
1541
1582
|
|
|
1542
|
-
|
|
1583
|
+
### Custom Instrumentation
|
|
1584
|
+
|
|
1585
|
+
Create custom spans for API calls, database queries, or any operation:
|
|
1543
1586
|
|
|
1544
1587
|
```typescript
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1588
|
+
import { withSpan } from 'reroute-js/telemetry/server';
|
|
1589
|
+
|
|
1590
|
+
// Instrument API endpoints
|
|
1591
|
+
app.get('/api/products', async () => {
|
|
1592
|
+
return withSpan('api.get_products', async (span) => {
|
|
1593
|
+
span.setAttribute('api.operation', 'list_products');
|
|
1594
|
+
|
|
1595
|
+
const products = await fetchProducts();
|
|
1596
|
+
span.setAttribute('api.result_count', products.length);
|
|
1597
|
+
|
|
1598
|
+
return products;
|
|
1599
|
+
});
|
|
1548
1600
|
});
|
|
1549
1601
|
|
|
1550
|
-
//
|
|
1551
|
-
.get('/api/
|
|
1552
|
-
return
|
|
1602
|
+
// Nested spans automatically create parent-child relationships
|
|
1603
|
+
app.get('/api/orders', async () => {
|
|
1604
|
+
return withSpan('api.get_orders', async (span) => {
|
|
1605
|
+
span.setAttribute('api.operation', 'list_orders');
|
|
1606
|
+
|
|
1607
|
+
// Child span
|
|
1608
|
+
const user = await withSpan('api.fetch_user', async (childSpan) => {
|
|
1609
|
+
childSpan.setAttribute('user.id', userId);
|
|
1610
|
+
return await getUser(userId);
|
|
1611
|
+
});
|
|
1612
|
+
|
|
1613
|
+
return { user, orders: await getOrders(user.id) };
|
|
1614
|
+
});
|
|
1553
1615
|
});
|
|
1554
1616
|
```
|
|
1555
1617
|
|
|
1556
|
-
|
|
1618
|
+
**Error Handling:**
|
|
1619
|
+
|
|
1620
|
+
Errors are automatically tracked and the span is properly closed:
|
|
1621
|
+
|
|
1622
|
+
```typescript
|
|
1623
|
+
app.get('/api/user/:id', async ({ params }) => {
|
|
1624
|
+
return withSpan('api.get_user', async (span) => {
|
|
1625
|
+
span.setAttribute('user.id', params.id);
|
|
1626
|
+
|
|
1627
|
+
const user = await getUser(params.id);
|
|
1628
|
+
|
|
1629
|
+
if (!user) {
|
|
1630
|
+
// Error is automatically captured in the span
|
|
1631
|
+
throw new Error('User not found');
|
|
1632
|
+
}
|
|
1633
|
+
|
|
1634
|
+
return user;
|
|
1635
|
+
});
|
|
1636
|
+
});
|
|
1637
|
+
```
|
|
1638
|
+
|
|
1639
|
+
When an error occurs inside a span:
|
|
1640
|
+
1. **Error is recorded** - `span.recordException()` captures the full error details
|
|
1641
|
+
2. **Status is set** - Span status automatically set to `ERROR` with error message
|
|
1642
|
+
3. **Span is closed** - Span properly ended even when errors occur
|
|
1643
|
+
4. **Error is re-thrown** - Error propagates normally (not swallowed)
|
|
1644
|
+
|
|
1645
|
+
This means errors appear in your traces with full context while maintaining normal error handling behavior.
|
|
1646
|
+
|
|
1647
|
+
**Key Features:**
|
|
1648
|
+
- **Automatic error tracking** - Errors are captured and recorded in spans
|
|
1649
|
+
- **Nested spans** - Child spans automatically linked to parent context
|
|
1650
|
+
- **Zero overhead when disabled** - No-op implementation when OpenTelemetry not installed
|
|
1651
|
+
|
|
1652
|
+
### Reroute SSR Tracing
|
|
1653
|
+
|
|
1654
|
+
Built-in tracing for debugging SSR, 404s, and cache behavior. Automatically traces SSR rendering, 404s, data loading, and errors. Filter by `reroute.*` attributes in SigNoz/Jaeger.
|
|
1557
1655
|
|
|
1558
1656
|
## 📖 Learn More
|
|
1559
1657
|
|
package/cli/bin.d.ts
CHANGED