@rangojs/router 0.0.0-experimental.24 → 0.0.0-experimental.25

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.
@@ -1745,7 +1745,7 @@ import { resolve } from "node:path";
1745
1745
  // package.json
1746
1746
  var package_default = {
1747
1747
  name: "@rangojs/router",
1748
- version: "0.0.0-experimental.24",
1748
+ version: "0.0.0-experimental.25",
1749
1749
  description: "Django-inspired RSC router with composable URL patterns",
1750
1750
  keywords: [
1751
1751
  "react",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rangojs/router",
3
- "version": "0.0.0-experimental.24",
3
+ "version": "0.0.0-experimental.25",
4
4
  "description": "Django-inspired RSC router with composable URL patterns",
5
5
  "keywords": [
6
6
  "react",
@@ -20,7 +20,7 @@ import type {
20
20
  } from "./middleware-types.js";
21
21
  import { _getRequestContext } from "../server/request-context.js";
22
22
  import { isAutoGeneratedRouteName } from "../route-name.js";
23
- import { appendMetric } from "./metrics.js";
23
+ import { appendMetric, createMetricsStore } from "./metrics.js";
24
24
 
25
25
  // Re-export types and cookie utilities for backward compatibility
26
26
  export type {
@@ -256,6 +256,7 @@ export function createMiddlewareContext<TEnv>(
256
256
  const reqCtx = _getRequestContext();
257
257
  if (reqCtx) {
258
258
  reqCtx._debugPerformance = true;
259
+ reqCtx._metricsStore ??= createMetricsStore(true);
259
260
  }
260
261
  },
261
262
  };
@@ -380,14 +381,13 @@ export async function executeMiddleware<TEnv>(
380
381
  responseHolder,
381
382
  reverse,
382
383
  );
383
- const metricsStore = _getRequestContext()?._metricsStore;
384
384
  const metricStart = performance.now();
385
385
  let middlewareFinished = false;
386
386
  const finishMiddleware = () => {
387
387
  if (!middlewareFinished) {
388
388
  middlewareFinished = true;
389
389
  appendMetric(
390
- metricsStore,
390
+ _getRequestContext()?._metricsStore,
391
391
  getMiddlewareMetricLabel(entry, middlewareOrdinal),
392
392
  metricStart,
393
393
  performance.now() - metricStart,
@@ -269,6 +269,12 @@ export interface RSCRouterInternal<
269
269
  */
270
270
  readonly warmupEnabled: boolean;
271
271
 
272
+ /**
273
+ * Whether router-wide performance debugging is enabled.
274
+ * Used by the request handler to create metrics before middleware runs.
275
+ */
276
+ readonly debugPerformance?: boolean;
277
+
272
278
  /**
273
279
  * Whether ?__debug_manifest is allowed in production.
274
280
  * Always enabled in development.
package/src/router.ts CHANGED
@@ -885,6 +885,9 @@ export function createRouter<TEnv = any>(
885
885
  // Expose warmup enabled flag for handler and client
886
886
  warmupEnabled,
887
887
 
888
+ // Expose router-wide performance debugging for request-level metrics setup
889
+ debugPerformance,
890
+
888
891
  // Expose debug manifest flag for handler
889
892
  allowDebugManifest: allowDebugManifestOption,
890
893
 
@@ -66,6 +66,7 @@ import {
66
66
  createDefaultTimeoutResponse,
67
67
  type TimeoutPhase,
68
68
  } from "../router/timeout.js";
69
+ import { createMetricsStore } from "../router/metrics.js";
69
70
 
70
71
  /**
71
72
  * Create an RSC request handler.
@@ -381,6 +382,10 @@ export function createRSCHandler<
381
382
  executionContext: executionCtx,
382
383
  themeConfig: router.themeConfig,
383
384
  });
385
+ if (router.debugPerformance) {
386
+ requestContext._debugPerformance = true;
387
+ requestContext._metricsStore ??= createMetricsStore(true);
388
+ }
384
389
  // Wire background error reporting so "use cache" and other subsystems
385
390
  // can surface non-fatal errors through the router's onError callback.
386
391
  requestContext._reportBackgroundError = (