@beignet/devtools 0.0.26 → 0.0.28

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @beignet/devtools
2
2
 
3
+ ## 0.0.28
4
+
5
+ ### Patch Changes
6
+
7
+ - 57504c5: Record a per-stage timing breakdown for every request — `onRequest` hooks, parsing, context creation, `beforeHandle` hooks, handler, and send. `afterSend` hooks receive it as `stages`, recorded `request` events carry it, and the devtools waterfall renders the stages as sub-bars under each request span so slow context creation or a slow handler is visible per request.
8
+
9
+ ## 0.0.27
10
+
11
+ ### Patch Changes
12
+
13
+ - f2461a9: Add lazy Next route server loaders and update generated route files and package docs to avoid booting providers during production build imports.
14
+
3
15
  ## 0.0.26
4
16
 
5
17
  ## 0.0.25
package/README.md CHANGED
@@ -24,17 +24,19 @@ Register the provider:
24
24
 
25
25
  ```typescript
26
26
  import { createDevtoolsProvider } from "@beignet/devtools";
27
- import { createNextServer } from "@beignet/next";
28
-
29
- export const server = await createNextServer({
30
- ports,
31
- providers: [createDevtoolsProvider(), ...providers],
32
- context: ({ ports, requestId, trace }) => ({
33
- requestId,
34
- ...trace,
27
+ import { createNextServer, createNextServerLoader } from "@beignet/next";
28
+
29
+ export const getServer = createNextServerLoader(() =>
30
+ createNextServer({
35
31
  ports,
32
+ providers: [createDevtoolsProvider(), ...providers],
33
+ context: ({ ports, requestId, trace }) => ({
34
+ requestId,
35
+ ...trace,
36
+ ports,
37
+ }),
36
38
  }),
37
- });
39
+ );
38
40
  ```
39
41
 
40
42
  The provider is the only devtools wiring the server needs. Request and error
@@ -54,11 +56,14 @@ Add a catch-all route:
54
56
  ```typescript
55
57
  // app/api/devtools/[[...path]]/route.ts
56
58
  import { createDevtoolsRoute } from "@beignet/devtools";
57
- import { server } from "@/server";
59
+ import { getServer } from "@/server";
58
60
 
59
- export const { GET, POST } = createDevtoolsRoute(server.ports.devtools, {
60
- basePath: "/api/devtools",
61
- });
61
+ export const { GET, POST } = createDevtoolsRoute(
62
+ async () => (await getServer()).ports.devtools,
63
+ {
64
+ basePath: "/api/devtools",
65
+ },
66
+ );
62
67
  ```
63
68
 
64
69
  Open `/api/devtools`.
@@ -113,12 +118,11 @@ the response was route-owned or framework-owned, which use cases ran, which
113
118
  correlated provider events were recorded, which jobs/outbox/schedule/domain
114
119
  events were triggered, and whether stored metadata was redacted.
115
120
 
116
- The public example app has a server integration acceptance test for this graph.
117
- It drives real HTTP write and error requests, reads the devtools events
118
- endpoint, and verifies request rows, use-case spans, durable audit-port side
119
- effects, and route-owned errors remain correlated by request metadata. The same
120
- scenario also checks that Drizzle provider queries and durable outbox writes are
121
- visible in the timeline.
121
+ You can assert this graph in your own integration tests: drive real HTTP write
122
+ and error requests, read the devtools events endpoint, and verify that request
123
+ rows, use-case spans, durable audit-port side effects, and route-owned errors
124
+ stay correlated by request metadata. Provider queries and durable outbox writes
125
+ appear in the same timeline.
122
126
 
123
127
  ## Local persistence
124
128
 
@@ -388,12 +392,18 @@ Route handlers return `404` when `NODE_ENV === "production"` unless explicitly
388
392
  enabled with an app-owned `authorize` callback:
389
393
 
390
394
  ```typescript
391
- export const { GET, POST } = createDevtoolsRoute(server.ports.devtools, {
392
- basePath: "/api/devtools",
393
- enabled: process.env.DEVTOOLS_ENABLED === "true",
394
- authorize: (req: Request) =>
395
- req.headers.get("x-devtools-token") === process.env.DEVTOOLS_TOKEN,
396
- });
395
+ import { createDevtoolsRoute } from "@beignet/devtools";
396
+ import { getServer } from "@/server";
397
+
398
+ export const { GET, POST } = createDevtoolsRoute(
399
+ async () => (await getServer()).ports.devtools,
400
+ {
401
+ basePath: "/api/devtools",
402
+ enabled: process.env.DEVTOOLS_ENABLED === "true",
403
+ authorize: (req: Request) =>
404
+ req.headers.get("x-devtools-token") === process.env.DEVTOOLS_TOKEN,
405
+ },
406
+ );
397
407
  ```
398
408
 
399
409
  If `authorize` returns `false`, devtools responds with `404`. If it returns a
package/dist/routes.d.ts CHANGED
@@ -6,6 +6,8 @@
6
6
  */
7
7
  import { type DevtoolsRouteAccessOptions } from "./access.js";
8
8
  import type { DevtoolsPort } from "./index.js";
9
+ type MaybePromise<T> = T | Promise<T>;
10
+ type DevtoolsSource = DevtoolsPort | (() => MaybePromise<DevtoolsPort>);
9
11
  /**
10
12
  * Devtools route options shared by route handlers.
11
13
  */
@@ -121,5 +123,6 @@ export declare function handleDevtoolsRequest(req: Request, devtools: DevtoolsPo
121
123
  * This is the recommended integration for frameworks such as Next.js that
122
124
  * export HTTP method functions from route modules.
123
125
  */
124
- export declare function createDevtoolsRoute(devtools: DevtoolsPort, options: DevtoolsRequestOptions): DevtoolsRouteHandlers;
126
+ export declare function createDevtoolsRoute(devtools: DevtoolsSource, options: DevtoolsRequestOptions): DevtoolsRouteHandlers;
127
+ export {};
125
128
  //# sourceMappingURL=routes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/D;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,QAAQ,CAAC,CAkDnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,QAAQ,CAAC,CAiBnB;AAQD;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,QAAQ,CAAC,CA+DnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,QAAQ,CAAC,CA6BnB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAQvB"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAEL,KAAK,0BAA0B,EAChC,MAAM,aAAa,CAAC;AAErB,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/D,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AAEtC,KAAK,cAAc,GAAG,YAAY,GAAG,CAAC,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC,CAAC;AAQxE;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,0BAA0B;IACxE;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrC;;OAEG;IACH,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACvC;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,QAAQ,CAAC,CAkDnB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,0BAA0B,CAC9C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,QAAQ,CAAC,CAiBnB;AAQD;;;;;;;GAOG;AACH,wBAAsB,2BAA2B,CAC/C,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,QAAQ,CAAC,CA+DnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,OAAO,EACZ,QAAQ,EAAE,YAAY,EACtB,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,QAAQ,CAAC,CA6BnB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,cAAc,EACxB,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CAWvB"}
package/dist/routes.js CHANGED
@@ -7,6 +7,9 @@
7
7
  import { authorizeDevtoolsRequest, } from "./access.js";
8
8
  import { isDevtoolsEventType } from "./events.js";
9
9
  import { handleDevtoolsUIRequest } from "./ui.js";
10
+ async function resolveDevtoolsSource(source) {
11
+ return typeof source === "function" ? source() : source;
12
+ }
10
13
  /**
11
14
  * Handle GET requests to list devtools events with optional filtering.
12
15
  *
@@ -238,7 +241,10 @@ export async function handleDevtoolsRequest(req, devtools, options) {
238
241
  * export HTTP method functions from route modules.
239
242
  */
240
243
  export function createDevtoolsRoute(devtools, options) {
241
- const handle = (req) => handleDevtoolsRequest(req, devtools, options);
244
+ const handle = async (req) => {
245
+ const resolvedDevtools = await resolveDevtoolsSource(devtools);
246
+ return handleDevtoolsRequest(req, resolvedDevtools, options);
247
+ };
242
248
  return {
243
249
  GET: handle,
244
250
  POST: handle,
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beignet/devtools",
3
- "version": "0.0.26",
3
+ "version": "0.0.28",
4
4
  "type": "module",
5
5
  "description": "Development-time devtools for Beignet - mini Telescope for the server runtime",
6
6
  "main": "./dist/index.js",
package/src/events.ts CHANGED
@@ -59,6 +59,18 @@ export interface BaseDevtoolsEvent {
59
59
  details?: unknown;
60
60
  }
61
61
 
62
+ /**
63
+ * Per-stage timing breakdown of one request pipeline, in milliseconds.
64
+ */
65
+ export interface RequestStageTimings {
66
+ onRequestMs: number;
67
+ parseMs: number;
68
+ contextMs: number;
69
+ beforeHandleMs: number;
70
+ handlerMs: number;
71
+ sendMs: number;
72
+ }
73
+
62
74
  /**
63
75
  * Logged when the server handles a request mapped from a contract.
64
76
  */
@@ -70,6 +82,7 @@ export interface RequestEvent extends BaseDevtoolsEvent {
70
82
  responseOwner?: "route" | "framework" | "transport" | "unknown";
71
83
  status?: number;
72
84
  durationMs?: number;
85
+ stages?: RequestStageTimings;
73
86
  summary?: string;
74
87
  }
75
88
 
package/src/routes.ts CHANGED
@@ -13,6 +13,16 @@ import { isDevtoolsEventType } from "./events.js";
13
13
  import type { DevtoolsFilter, DevtoolsPort } from "./index.js";
14
14
  import { handleDevtoolsUIRequest } from "./ui.js";
15
15
 
16
+ type MaybePromise<T> = T | Promise<T>;
17
+
18
+ type DevtoolsSource = DevtoolsPort | (() => MaybePromise<DevtoolsPort>);
19
+
20
+ async function resolveDevtoolsSource(
21
+ source: DevtoolsSource,
22
+ ): Promise<DevtoolsPort> {
23
+ return typeof source === "function" ? source() : source;
24
+ }
25
+
16
26
  /**
17
27
  * Devtools route options shared by route handlers.
18
28
  */
@@ -316,11 +326,14 @@ export async function handleDevtoolsRequest(
316
326
  * export HTTP method functions from route modules.
317
327
  */
318
328
  export function createDevtoolsRoute(
319
- devtools: DevtoolsPort,
329
+ devtools: DevtoolsSource,
320
330
  options: DevtoolsRequestOptions,
321
331
  ): DevtoolsRouteHandlers {
322
- const handle = (req: Request) =>
323
- handleDevtoolsRequest(req, devtools, options);
332
+ const handle = async (req: Request) => {
333
+ const resolvedDevtools = await resolveDevtoolsSource(devtools);
334
+
335
+ return handleDevtoolsRequest(req, resolvedDevtools, options);
336
+ };
324
337
 
325
338
  return {
326
339
  GET: handle,