@plumix/core 0.4.0 → 0.5.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/dist/auth/authenticator.d.ts +8 -1
- package/dist/auth/authenticator.d.ts.map +1 -1
- package/dist/auth/authenticator.js +15 -0
- package/dist/auth/authenticator.js.map +1 -1
- package/dist/auth/bearer.js +2 -2
- package/dist/auth/bearer.js.map +1 -1
- package/dist/cache/decision.d.ts +7 -3
- package/dist/cache/decision.d.ts.map +1 -1
- package/dist/cache/decision.js +8 -6
- package/dist/cache/decision.js.map +1 -1
- package/dist/cache/read-through.d.ts +3 -0
- package/dist/cache/read-through.d.ts.map +1 -1
- package/dist/cache/read-through.js +14 -7
- package/dist/cache/read-through.js.map +1 -1
- package/dist/config.d.ts +9 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -0
- package/dist/config.js.map +1 -1
- package/dist/context/app.d.ts +38 -6
- package/dist/context/app.d.ts.map +1 -1
- package/dist/context/app.js +41 -8
- package/dist/context/app.js.map +1 -1
- package/dist/context/collector.d.ts +9 -0
- package/dist/context/collector.d.ts.map +1 -0
- package/dist/context/collector.js +130 -0
- package/dist/context/collector.js.map +1 -0
- package/dist/context/index.d.ts +1 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +1 -0
- package/dist/context/index.js.map +1 -1
- package/dist/context/stores.d.ts +2 -9
- package/dist/context/stores.d.ts.map +1 -1
- package/dist/context/stores.js.map +1 -1
- package/dist/context/telemetry.d.ts +148 -0
- package/dist/context/telemetry.d.ts.map +1 -0
- package/dist/context/telemetry.js +20 -0
- package/dist/context/telemetry.js.map +1 -0
- package/dist/context/traced-fetch.d.ts +14 -0
- package/dist/context/traced-fetch.d.ts.map +1 -0
- package/dist/context/traced-fetch.js +33 -0
- package/dist/context/traced-fetch.js.map +1 -0
- package/dist/db/libsql.d.ts.map +1 -1
- package/dist/db/libsql.js +6 -12
- package/dist/db/libsql.js.map +1 -1
- package/dist/db/query-kind.d.ts +8 -0
- package/dist/db/query-kind.d.ts.map +1 -0
- package/dist/db/query-kind.js +11 -0
- package/dist/db/query-kind.js.map +1 -0
- package/dist/db/trace-libsql.d.ts +15 -0
- package/dist/db/trace-libsql.d.ts.map +1 -0
- package/dist/db/trace-libsql.js +37 -0
- package/dist/db/trace-libsql.js.map +1 -0
- package/dist/db/trace.d.ts +21 -0
- package/dist/db/trace.d.ts.map +1 -0
- package/dist/db/trace.js +64 -0
- package/dist/db/trace.js.map +1 -0
- package/dist/debug-bar/consumer.d.ts +12 -0
- package/dist/debug-bar/consumer.d.ts.map +1 -0
- package/dist/debug-bar/consumer.js +13 -0
- package/dist/debug-bar/consumer.js.map +1 -0
- package/dist/debug-bar/format-param.d.ts +6 -4
- package/dist/debug-bar/format-param.d.ts.map +1 -1
- package/dist/debug-bar/format-param.js +6 -9
- package/dist/debug-bar/format-param.js.map +1 -1
- package/dist/debug-bar/highlight-sql.d.ts +0 -3
- package/dist/debug-bar/highlight-sql.d.ts.map +1 -1
- package/dist/debug-bar/highlight-sql.js +0 -6
- package/dist/debug-bar/highlight-sql.js.map +1 -1
- package/dist/debug-bar/panels/database.d.ts +6 -4
- package/dist/debug-bar/panels/database.d.ts.map +1 -1
- package/dist/debug-bar/panels/database.js +44 -8
- package/dist/debug-bar/panels/database.js.map +1 -1
- package/dist/debug-bar/panels/template.d.ts +1 -1
- package/dist/debug-bar/panels/template.d.ts.map +1 -1
- package/dist/debug-bar/panels/template.js +16 -2
- package/dist/debug-bar/panels/template.js.map +1 -1
- package/dist/debug-bar/panels/timeline.js +1 -1
- package/dist/debug-bar/panels/timeline.js.map +1 -1
- package/dist/debug-bar/styles.d.ts.map +1 -1
- package/dist/debug-bar/styles.js +5 -0
- package/dist/debug-bar/styles.js.map +1 -1
- package/dist/debug-bar/timeline-model.d.ts +3 -3
- package/dist/debug-bar/timeline-model.d.ts.map +1 -1
- package/dist/debug-bar/timeline-model.js +1 -1
- package/dist/debug-bar/timeline-model.js.map +1 -1
- package/dist/debug-bar/types.d.ts +1 -1
- package/dist/hooks/registry.d.ts.map +1 -1
- package/dist/hooks/registry.js +21 -3
- package/dist/hooks/registry.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +9 -3
- package/dist/mcp/server.js.map +1 -1
- package/dist/plugin/manifest.d.ts +17 -0
- package/dist/plugin/manifest.d.ts.map +1 -1
- package/dist/plugin/manifest.js +7 -2
- package/dist/plugin/manifest.js.map +1 -1
- package/dist/plugin/provides-context.d.ts.map +1 -1
- package/dist/plugin/provides-context.js +5 -0
- package/dist/plugin/provides-context.js.map +1 -1
- package/dist/rest/build-handler.d.ts.map +1 -1
- package/dist/rest/build-handler.js +14 -1
- package/dist/rest/build-handler.js.map +1 -1
- package/dist/revisions/snapshot-envelope.d.ts +4 -2
- package/dist/revisions/snapshot-envelope.d.ts.map +1 -1
- package/dist/revisions/snapshot-envelope.js +6 -3
- package/dist/revisions/snapshot-envelope.js.map +1 -1
- package/dist/route/render/render-template.d.ts.map +1 -1
- package/dist/route/render/render-template.js +23 -14
- package/dist/route/render/render-template.js.map +1 -1
- package/dist/route/render/template-builders.d.ts +12 -0
- package/dist/route/render/template-builders.d.ts.map +1 -1
- package/dist/route/render/template-builders.js +20 -0
- package/dist/route/render/template-builders.js.map +1 -1
- package/dist/route/resolve.d.ts.map +1 -1
- package/dist/route/resolve.js +4 -1
- package/dist/route/resolve.js.map +1 -1
- package/dist/rpc/authenticated.d.ts.map +1 -1
- package/dist/rpc/authenticated.js +2 -1
- package/dist/rpc/authenticated.js.map +1 -1
- package/dist/rpc/build-handler.d.ts.map +1 -1
- package/dist/rpc/build-handler.js +12 -0
- package/dist/rpc/build-handler.js.map +1 -1
- package/dist/rpc/procedures/auth/session.d.ts.map +1 -1
- package/dist/rpc/procedures/auth/session.js +2 -1
- package/dist/rpc/procedures/auth/session.js.map +1 -1
- package/dist/rpc/procedures/entry/helpers.d.ts +21 -0
- package/dist/rpc/procedures/entry/helpers.d.ts.map +1 -1
- package/dist/rpc/procedures/entry/helpers.js +44 -0
- package/dist/rpc/procedures/entry/helpers.js.map +1 -1
- package/dist/rpc/procedures/entry/index.d.ts +1 -0
- package/dist/rpc/procedures/entry/index.d.ts.map +1 -1
- package/dist/rpc/procedures/entry/schemas.d.ts +2 -0
- package/dist/rpc/procedures/entry/schemas.d.ts.map +1 -1
- package/dist/rpc/procedures/entry/schemas.js +7 -0
- package/dist/rpc/procedures/entry/schemas.js.map +1 -1
- package/dist/rpc/procedures/entry/update.d.ts +1 -0
- package/dist/rpc/procedures/entry/update.d.ts.map +1 -1
- package/dist/rpc/procedures/entry/update.js +10 -5
- package/dist/rpc/procedures/entry/update.js.map +1 -1
- package/dist/rpc/procedures/user/index.d.ts +1 -0
- package/dist/rpc/procedures/user/index.d.ts.map +1 -1
- package/dist/rpc/procedures/user/schemas.d.ts +1 -0
- package/dist/rpc/procedures/user/schemas.d.ts.map +1 -1
- package/dist/rpc/procedures/user/schemas.js +5 -0
- package/dist/rpc/procedures/user/schemas.js.map +1 -1
- package/dist/rpc/procedures/user/update.d.ts +1 -0
- package/dist/rpc/procedures/user/update.d.ts.map +1 -1
- package/dist/rpc/procedures/user/update.js +10 -1
- package/dist/rpc/procedures/user/update.js.map +1 -1
- package/dist/rpc/router.d.ts +2 -0
- package/dist/rpc/router.d.ts.map +1 -1
- package/dist/rpc/schemas.js +6 -6
- package/dist/rpc/schemas.js.map +1 -1
- package/dist/rpc/validation.d.ts +10 -0
- package/dist/rpc/validation.d.ts.map +1 -1
- package/dist/rpc/validation.js +10 -0
- package/dist/rpc/validation.js.map +1 -1
- package/dist/runtime/dispatcher.d.ts.map +1 -1
- package/dist/runtime/dispatcher.js +35 -8
- package/dist/runtime/dispatcher.js.map +1 -1
- package/dist/runtime/load-user-for-public-request.d.ts.map +1 -1
- package/dist/runtime/load-user-for-public-request.js +2 -2
- package/dist/runtime/load-user-for-public-request.js.map +1 -1
- package/dist/runtime/scheduled.d.ts +3 -1
- package/dist/runtime/scheduled.d.ts.map +1 -1
- package/dist/runtime/scheduled.js +16 -2
- package/dist/runtime/scheduled.js.map +1 -1
- package/dist/runtime/telemetry-delivery.d.ts +14 -0
- package/dist/runtime/telemetry-delivery.d.ts.map +1 -0
- package/dist/runtime/telemetry-delivery.js +39 -0
- package/dist/runtime/telemetry-delivery.js.map +1 -0
- package/dist/test/dispatcher.d.ts +13 -0
- package/dist/test/dispatcher.d.ts.map +1 -1
- package/dist/test/dispatcher.js +9 -3
- package/dist/test/dispatcher.js.map +1 -1
- package/dist/test/harness.d.ts.map +1 -1
- package/dist/test/harness.js +4 -12
- package/dist/test/harness.js.map +1 -1
- package/package.json +2 -2
- package/dist/context/debug.d.ts +0 -25
- package/dist/context/debug.d.ts.map +0 -1
- package/dist/context/debug.js +0 -13
- package/dist/context/debug.js.map +0 -1
- package/dist/debug-bar/collector.d.ts +0 -9
- package/dist/debug-bar/collector.d.ts.map +0 -1
- package/dist/debug-bar/collector.js +0 -80
- package/dist/debug-bar/collector.js.map +0 -1
- package/dist/debug-bar/db-query.d.ts +0 -21
- package/dist/debug-bar/db-query.d.ts.map +0 -1
- package/dist/debug-bar/db-query.js +0 -23
- package/dist/debug-bar/db-query.js.map +0 -1
- package/dist/debug-bar/trace-libsql.d.ts +0 -18
- package/dist/debug-bar/trace-libsql.d.ts.map +0 -1
- package/dist/debug-bar/trace-libsql.js +0 -42
- package/dist/debug-bar/trace-libsql.js.map +0 -1
package/dist/db/trace.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { tryGetContext } from "../context/stores.js";
|
|
2
|
+
import { queryKind } from "./query-kind.js";
|
|
3
|
+
// Bound params may carry driver values (blobs, bigints, dates) that a
|
|
4
|
+
// JSON-serializable snapshot can't hold; degrade those to short descriptions.
|
|
5
|
+
function jsonParam(value) {
|
|
6
|
+
if (value === null ||
|
|
7
|
+
typeof value === "string" ||
|
|
8
|
+
typeof value === "number" ||
|
|
9
|
+
typeof value === "boolean") {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
if (typeof value === "bigint")
|
|
13
|
+
return value.toString();
|
|
14
|
+
if (value instanceof Date)
|
|
15
|
+
return value.toISOString();
|
|
16
|
+
if (value instanceof Uint8Array || value instanceof ArrayBuffer) {
|
|
17
|
+
return `<blob ${value.byteLength} bytes>`;
|
|
18
|
+
}
|
|
19
|
+
return `<${typeof value}>`;
|
|
20
|
+
}
|
|
21
|
+
function dbSpan(name, setAttributes, run, countRows) {
|
|
22
|
+
const ctx = tryGetContext();
|
|
23
|
+
if (!ctx)
|
|
24
|
+
return run();
|
|
25
|
+
return ctx.telemetry.span(name, (s) => {
|
|
26
|
+
setAttributes(s);
|
|
27
|
+
return run().then((result) => {
|
|
28
|
+
s.set("db.rows", countRows(result));
|
|
29
|
+
return result;
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Times one driver-level query as a `db: <kind>` span with the SQL, bound
|
|
35
|
+
* params, and row count as attributes — the single mechanism behind every
|
|
36
|
+
* `ctx.db` driver wrap (libsql, D1, demo proxy). A no-op outside a request;
|
|
37
|
+
* with an inactive collector the span passes through and the lazy params are
|
|
38
|
+
* never serialized. `countRows` reads the driver's result shape: rows
|
|
39
|
+
* returned, or rows affected for a write.
|
|
40
|
+
*/
|
|
41
|
+
export function traceDbQuery(query, run, countRows) {
|
|
42
|
+
return dbSpan(`db: ${queryKind(query.sql)}`, (s) => {
|
|
43
|
+
s.set("db.sql", query.sql);
|
|
44
|
+
if (query.params.length > 0) {
|
|
45
|
+
s.set("db.params", () => query.params.map(jsonParam));
|
|
46
|
+
}
|
|
47
|
+
}, run, countRows);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Times a driver-level batch — one round-trip, so one span (labelled by kind
|
|
51
|
+
* when uniform, `db: batch` otherwise), with the per-statement sql/params under
|
|
52
|
+
* a `db.batch` attribute and the row counts summed across results.
|
|
53
|
+
*/
|
|
54
|
+
export function traceDbBatch(queries, run, countRows) {
|
|
55
|
+
const kinds = new Set(queries.map((query) => queryKind(query.sql)));
|
|
56
|
+
const kind = kinds.size === 1 ? [...kinds][0] : "batch";
|
|
57
|
+
return dbSpan(`db: ${kind} (${queries.length})`, (s) => {
|
|
58
|
+
s.set("db.batch", () => queries.map((query) => ({
|
|
59
|
+
sql: query.sql,
|
|
60
|
+
params: query.params.map(jsonParam),
|
|
61
|
+
})));
|
|
62
|
+
}, run, (results) => results.reduce((total, result) => total + countRows(result), 0));
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=trace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/db/trace.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TelemetryConsumer } from "../context/telemetry.js";
|
|
2
|
+
import type { DebugBarInput } from "./config.js";
|
|
3
|
+
/**
|
|
4
|
+
* The debug bar as a telemetry consumer — the first one registered in dev, so
|
|
5
|
+
* the collector activates for the request the bar renders. It has no
|
|
6
|
+
* `onRequestEnd`: the bar reads the live collector mid-request while
|
|
7
|
+
* rendering. Returns null when the bar is configured off, so a disabled bar
|
|
8
|
+
* costs no collection either. Referenced only under the `PLUMIX_DEV` gate and
|
|
9
|
+
* dead-code-eliminated from production builds.
|
|
10
|
+
*/
|
|
11
|
+
export declare function debugBarTelemetryConsumer(debugBar: DebugBarInput | undefined): TelemetryConsumer | null;
|
|
12
|
+
//# sourceMappingURL=consumer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer.d.ts","sourceRoot":"","sources":["../../src/debug-bar/consumer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACjE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,aAAa,GAAG,SAAS,GAClC,iBAAiB,GAAG,IAAI,CAE1B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { normalizeDebugBar } from "./config.js";
|
|
2
|
+
/**
|
|
3
|
+
* The debug bar as a telemetry consumer — the first one registered in dev, so
|
|
4
|
+
* the collector activates for the request the bar renders. It has no
|
|
5
|
+
* `onRequestEnd`: the bar reads the live collector mid-request while
|
|
6
|
+
* rendering. Returns null when the bar is configured off, so a disabled bar
|
|
7
|
+
* costs no collection either. Referenced only under the `PLUMIX_DEV` gate and
|
|
8
|
+
* dead-code-eliminated from production builds.
|
|
9
|
+
*/
|
|
10
|
+
export function debugBarTelemetryConsumer(debugBar) {
|
|
11
|
+
return normalizeDebugBar(debugBar).enabled ? { id: "debug-bar" } : null;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=consumer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consumer.js","sourceRoot":"","sources":["../../src/debug-bar/consumer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAAmC;IAEnC,OAAO,iBAAiB,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1E,CAAC"}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
type SqlParamKind = "string" | "number" | "boolean" | "null"
|
|
1
|
+
type SqlParamKind = "string" | "number" | "boolean" | "null";
|
|
2
2
|
export interface DescribedParam {
|
|
3
3
|
readonly kind: SqlParamKind;
|
|
4
4
|
readonly text: string;
|
|
5
5
|
}
|
|
6
6
|
/**
|
|
7
7
|
* Describe a bound SQL parameter for the Database panel: its `kind` (for
|
|
8
|
-
* per-type coloring) and display `text` (strings quoted, numbers/
|
|
9
|
-
*
|
|
10
|
-
*
|
|
8
|
+
* per-type coloring) and display `text` (strings quoted, numbers/booleans/null
|
|
9
|
+
* as literals, long strings truncated) — the `?`-form SQL stays copyable.
|
|
10
|
+
* Params arrive as span-attribute `JsonValue`s (driver values like blobs and
|
|
11
|
+
* bigints were already degraded to strings at record time). One pass so the
|
|
12
|
+
* kind and text can't drift apart.
|
|
11
13
|
*/
|
|
12
14
|
export declare function describeSqlParam(value: unknown): DescribedParam;
|
|
13
15
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-param.d.ts","sourceRoot":"","sources":["../../src/debug-bar/format-param.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"format-param.d.ts","sourceRoot":"","sources":["../../src/debug-bar/format-param.ts"],"names":[],"mappings":"AAEA,KAAK,YAAY,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,cAAc,CAY/D"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
const MAX_LEN = 80;
|
|
2
2
|
/**
|
|
3
3
|
* Describe a bound SQL parameter for the Database panel: its `kind` (for
|
|
4
|
-
* per-type coloring) and display `text` (strings quoted, numbers/
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* per-type coloring) and display `text` (strings quoted, numbers/booleans/null
|
|
5
|
+
* as literals, long strings truncated) — the `?`-form SQL stays copyable.
|
|
6
|
+
* Params arrive as span-attribute `JsonValue`s (driver values like blobs and
|
|
7
|
+
* bigints were already degraded to strings at record time). One pass so the
|
|
8
|
+
* kind and text can't drift apart.
|
|
7
9
|
*/
|
|
8
10
|
export function describeSqlParam(value) {
|
|
9
11
|
if (value === null || value === undefined)
|
|
@@ -12,16 +14,11 @@ export function describeSqlParam(value) {
|
|
|
12
14
|
const text = value.length > MAX_LEN ? `${value.slice(0, MAX_LEN)}…` : value;
|
|
13
15
|
return { kind: "string", text: `"${text}"` };
|
|
14
16
|
}
|
|
15
|
-
if (typeof value === "bigint")
|
|
16
|
-
return { kind: "number", text: value.toString() };
|
|
17
17
|
if (typeof value === "number")
|
|
18
18
|
return { kind: "number", text: String(value) };
|
|
19
19
|
if (typeof value === "boolean")
|
|
20
20
|
return { kind: "boolean", text: String(value) };
|
|
21
|
-
|
|
22
|
-
return { kind: "blob", text: `<blob ${value.byteLength} bytes>` };
|
|
23
|
-
}
|
|
24
|
-
// Objects/dates are unusual as bound params — JSON gives a readable form.
|
|
21
|
+
// Nested arrays/objects are unusual as params — JSON gives a readable form.
|
|
25
22
|
return { kind: "string", text: JSON.stringify(value) };
|
|
26
23
|
}
|
|
27
24
|
//# sourceMappingURL=format-param.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format-param.js","sourceRoot":"","sources":["../../src/debug-bar/format-param.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,EAAE,CAAC;AASnB
|
|
1
|
+
{"version":3,"file":"format-param.js","sourceRoot":"","sources":["../../src/debug-bar/format-param.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,EAAE,CAAC;AASnB;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QACvC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,IAAI,GAAG,EAAE,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9E,IAAI,OAAO,KAAK,KAAK,SAAS;QAC5B,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;IAClD,4EAA4E;IAC5E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;AACzD,CAAC"}
|
|
@@ -4,8 +4,5 @@ export interface SqlToken {
|
|
|
4
4
|
readonly kind: SqlTokenKind;
|
|
5
5
|
}
|
|
6
6
|
export declare function tokenizeSql(sql: string): readonly SqlToken[];
|
|
7
|
-
export type QueryKind = "select" | "insert" | "update" | "delete" | "other";
|
|
8
|
-
/** The leading statement kind, for the per-query badge/color. */
|
|
9
|
-
export declare function queryKind(sql: string): QueryKind;
|
|
10
7
|
export {};
|
|
11
8
|
//# sourceMappingURL=highlight-sql.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight-sql.d.ts","sourceRoot":"","sources":["../../src/debug-bar/highlight-sql.ts"],"names":[],"mappings":"AAuDA,KAAK,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAQD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,QAAQ,EAAE,CAa5D
|
|
1
|
+
{"version":3,"file":"highlight-sql.d.ts","sourceRoot":"","sources":["../../src/debug-bar/highlight-sql.ts"],"names":[],"mappings":"AAuDA,KAAK,YAAY,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;CAC7B;AAQD,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,QAAQ,EAAE,CAa5D"}
|
|
@@ -73,10 +73,4 @@ export function tokenizeSql(sql) {
|
|
|
73
73
|
}
|
|
74
74
|
return tokens;
|
|
75
75
|
}
|
|
76
|
-
const KNOWN_KINDS = new Set(["select", "insert", "update", "delete"]);
|
|
77
|
-
/** The leading statement kind, for the per-query badge/color. */
|
|
78
|
-
export function queryKind(sql) {
|
|
79
|
-
const first = sql.trimStart().split(/\s/, 1)[0]?.toLowerCase() ?? "";
|
|
80
|
-
return (KNOWN_KINDS.has(first) ? first : "other");
|
|
81
|
-
}
|
|
82
76
|
//# sourceMappingURL=highlight-sql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"highlight-sql.js","sourceRoot":"","sources":["../../src/debug-bar/highlight-sql.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAE1E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,QAAQ;IACR,UAAU;IACV,MAAM;IACN,OAAO;IACP,KAAK;IACL,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,WAAW;IACX,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;CACT,CAAC,CAAC;AASH,0EAA0E;AAC1E,2EAA2E;AAC3E,6CAA6C;AAC7C,MAAM,KAAK,GACT,8EAA8E,CAAC;AAEjF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;aAC/D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;aACpE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACV,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;aAC5D,CAAC,CAAC;QACL,CAAC;;YAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC
|
|
1
|
+
{"version":3,"file":"highlight-sql.js","sourceRoot":"","sources":["../../src/debug-bar/highlight-sql.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,0EAA0E;AAE1E,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;IACvB,QAAQ;IACR,UAAU;IACV,MAAM;IACN,OAAO;IACP,KAAK;IACL,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,IAAI;IACJ,MAAM;IACN,MAAM;IACN,SAAS;IACT,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,QAAQ;IACR,KAAK;IACL,QAAQ;IACR,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,OAAO;IACP,IAAI;IACJ,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,KAAK;IACL,MAAM;IACN,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,WAAW;IACX,QAAQ;IACR,MAAM;IACN,MAAM;IACN,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;CACT,CAAC,CAAC;AASH,0EAA0E;AAC1E,2EAA2E;AAC3E,6CAA6C;AAC7C,MAAM,KAAK,GACT,8EAA8E,CAAC;AAEjF,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;aAC/D,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;aACpE,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBACV,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM;aAC5D,CAAC,CAAC;QACL,CAAC;;YAAM,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { DebugPanel } from "../types.js";
|
|
2
|
+
/** Panel id, also the disable-denylist key and tab testid suffix. */
|
|
3
|
+
export declare const DB_PANEL_ID = "database";
|
|
2
4
|
/**
|
|
3
|
-
* The Database panel: every query
|
|
4
|
-
*
|
|
5
|
-
* params shown separately (typed-colored) — the `?`-form SQL
|
|
6
|
-
*
|
|
5
|
+
* The Database panel: every query span this request's driver wrap emitted,
|
|
6
|
+
* with SQL syntax highlighting, a per-query kind badge, per-query duration,
|
|
7
|
+
* and the bound params shown separately (typed-colored) — the `?`-form SQL
|
|
8
|
+
* stays copyable.
|
|
7
9
|
*/
|
|
8
10
|
export declare const databasePanel: DebugPanel;
|
|
9
11
|
//# sourceMappingURL=database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/debug-bar/panels/database.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../../src/debug-bar/panels/database.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM9C,qEAAqE;AACrE,eAAO,MAAM,WAAW,aAAa,CAAC;AAgEtC;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,UAqD3B,CAAC"}
|
|
@@ -1,29 +1,65 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import {
|
|
2
|
+
import { queryKind } from "../../db/query-kind.js";
|
|
3
3
|
import { describeSqlParam } from "../format-param.js";
|
|
4
|
-
import {
|
|
4
|
+
import { tokenizeSql } from "../highlight-sql.js";
|
|
5
5
|
import { DebugSection } from "../primitives.js";
|
|
6
|
+
/** Panel id, also the disable-denylist key and tab testid suffix. */
|
|
7
|
+
export const DB_PANEL_ID = "database";
|
|
8
|
+
function asParams(value) {
|
|
9
|
+
return Array.isArray(value) ? value : [];
|
|
10
|
+
}
|
|
11
|
+
// `Array.isArray` narrows a readonly-array union to `any[]`; a dedicated
|
|
12
|
+
// guard keeps the elements typed as JsonValue.
|
|
13
|
+
function isJsonArray(value) {
|
|
14
|
+
return Array.isArray(value);
|
|
15
|
+
}
|
|
16
|
+
// Walks the span tree collecting what the driver wraps emit: a `db.sql` span
|
|
17
|
+
// is one query row; a `db.batch` span flattens into one row per statement.
|
|
18
|
+
function collectQueryRows(spans) {
|
|
19
|
+
const rows = [];
|
|
20
|
+
const visit = (span) => {
|
|
21
|
+
const { "db.sql": sql, "db.params": params, "db.batch": batch, } = span.attributes;
|
|
22
|
+
if (typeof sql === "string") {
|
|
23
|
+
rows.push({ sql, params: asParams(params), durationMs: span.durationMs });
|
|
24
|
+
}
|
|
25
|
+
else if (isJsonArray(batch)) {
|
|
26
|
+
for (const stmt of batch) {
|
|
27
|
+
if (typeof stmt !== "object" || stmt === null || isJsonArray(stmt)) {
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
if (typeof stmt.sql !== "string")
|
|
31
|
+
continue;
|
|
32
|
+
rows.push({ sql: stmt.sql, params: asParams(stmt.params) });
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
for (const child of span.children)
|
|
36
|
+
visit(child);
|
|
37
|
+
};
|
|
38
|
+
for (const span of spans)
|
|
39
|
+
visit(span);
|
|
40
|
+
return rows;
|
|
41
|
+
}
|
|
6
42
|
function HighlightedSql({ sql }) {
|
|
7
43
|
return (_jsx("code", { className: "plumix-debug-bar__sql", children: tokenizeSql(sql).map((token, i) => token.kind === "text" ? (token.text) : (_jsx("span", { className: `plumix-debug-bar__tok--${token.kind}`, children: token.text }, i))) }));
|
|
8
44
|
}
|
|
9
45
|
/**
|
|
10
|
-
* The Database panel: every query
|
|
11
|
-
*
|
|
12
|
-
* params shown separately (typed-colored) — the `?`-form SQL
|
|
13
|
-
*
|
|
46
|
+
* The Database panel: every query span this request's driver wrap emitted,
|
|
47
|
+
* with SQL syntax highlighting, a per-query kind badge, per-query duration,
|
|
48
|
+
* and the bound params shown separately (typed-colored) — the `?`-form SQL
|
|
49
|
+
* stays copyable.
|
|
14
50
|
*/
|
|
15
51
|
export const databasePanel = {
|
|
16
52
|
id: DB_PANEL_ID,
|
|
17
53
|
title: "Database",
|
|
18
54
|
order: 20,
|
|
19
55
|
render: (ctx) => {
|
|
20
|
-
const queries = ctx.
|
|
56
|
+
const queries = collectQueryRows(ctx.telemetry.getSpans());
|
|
21
57
|
if (queries.length === 0) {
|
|
22
58
|
return _jsx("p", { className: "plumix-debug-bar__empty", children: "No queries recorded." });
|
|
23
59
|
}
|
|
24
60
|
return (_jsx(DebugSection, { title: `${queries.length} ${queries.length === 1 ? "query" : "queries"}`, children: _jsx("ol", { className: "plumix-debug-bar__queries", children: queries.map((query, i) => {
|
|
25
61
|
const kind = queryKind(query.sql);
|
|
26
|
-
return (_jsxs("li", { className: "plumix-debug-bar__query", children: [_jsxs("div", { className: "plumix-debug-bar__query-head", children: [_jsx("span", { className: `plumix-debug-bar__kind plumix-debug-bar__kind--${kind}`, children: kind }), _jsx(HighlightedSql, { sql: query.sql })] }), query.params.length > 0 ? (_jsx("div", { className: "plumix-debug-bar__params", children: query.params.map((param, j) => {
|
|
62
|
+
return (_jsxs("li", { className: "plumix-debug-bar__query", children: [_jsxs("div", { className: "plumix-debug-bar__query-head", children: [_jsx("span", { className: `plumix-debug-bar__kind plumix-debug-bar__kind--${kind}`, children: kind }), _jsx(HighlightedSql, { sql: query.sql }), query.durationMs !== undefined ? (_jsxs("span", { className: "plumix-debug-bar__query-ms", children: [query.durationMs, "ms"] })) : null] }), query.params.length > 0 ? (_jsx("div", { className: "plumix-debug-bar__params", children: query.params.map((param, j) => {
|
|
27
63
|
const { kind: paramKind, text } = describeSqlParam(param);
|
|
28
64
|
return (_jsx("span", { className: `plumix-debug-bar__param plumix-debug-bar__param--${paramKind}`, children: text }, j));
|
|
29
65
|
}) })) : null] }, i));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/debug-bar/panels/database.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"database.js","sourceRoot":"","sources":["../../../src/debug-bar/panels/database.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ResolutionTrace } from "../../route/render/template-hierarchy.js";
|
|
2
2
|
import type { DebugPanel } from "../types.js";
|
|
3
|
-
/**
|
|
3
|
+
/** Set as the `template` span's `resolution` attribute by the renderer. */
|
|
4
4
|
export interface TemplateResolution extends ResolutionTrace {
|
|
5
5
|
/** Human label for the resolved route node, e.g. "post: hello-world". */
|
|
6
6
|
readonly nodeLabel: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/debug-bar/panels/template.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/debug-bar/panels/template.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,eAAe,EAChB,MAAM,0CAA0C,CAAC;AAClD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAI9C,2EAA2E;AAC3E,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,yEAAyE;IACzE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAyBD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,UA4C3B,CAAC"}
|
|
@@ -1,6 +1,19 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { DebugKV, DebugSection, DebugTable } from "../primitives.js";
|
|
3
3
|
import { TEMPLATE_PANEL_ID } from "../template-node-label.js";
|
|
4
|
+
// Matches on the resolution attribute too, so an unrelated span that happens
|
|
5
|
+
// to share the `template` name can't shadow the renderer's span.
|
|
6
|
+
function findResolutionSpan(spans) {
|
|
7
|
+
for (const span of spans) {
|
|
8
|
+
if (span.name === TEMPLATE_PANEL_ID && "resolution" in span.attributes) {
|
|
9
|
+
return span;
|
|
10
|
+
}
|
|
11
|
+
const nested = findResolutionSpan(span.children);
|
|
12
|
+
if (nested)
|
|
13
|
+
return nested;
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
4
17
|
/** How a predicate reads in the table — or an em dash when the rule has none. */
|
|
5
18
|
function predicateCell(predicate) {
|
|
6
19
|
if (predicate === undefined)
|
|
@@ -20,9 +33,10 @@ export const templatePanel = {
|
|
|
20
33
|
title: "Template",
|
|
21
34
|
order: 15,
|
|
22
35
|
render: (ctx) => {
|
|
23
|
-
const resolution = ctx.
|
|
36
|
+
const resolution = findResolutionSpan(ctx.telemetry.getSpans())?.attributes
|
|
37
|
+
.resolution;
|
|
24
38
|
if (!resolution) {
|
|
25
|
-
return (_jsx("p", { className: "plumix-debug-bar__empty", children: "No template resolution \u2014
|
|
39
|
+
return (_jsx("p", { className: "plumix-debug-bar__empty", children: "No template resolution recorded \u2014 error pages don't resolve one." }));
|
|
26
40
|
}
|
|
27
41
|
return (_jsxs(_Fragment, { children: [_jsx(DebugSection, { title: "Resolution", children: _jsx(DebugKV, { rows: [
|
|
28
42
|
{ label: "Resolved", value: resolution.nodeLabel },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/debug-bar/panels/template.tsx"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/debug-bar/panels/template.tsx"],"names":[],"mappings":";AAOA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAQ9D,6EAA6E;AAC7E,iEAAiE;AACjE,SAAS,kBAAkB,CACzB,KAA+B;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,IAAI,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACvE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,MAAM;YAAE,OAAO,MAAM,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,iFAAiF;AACjF,SAAS,aAAa,CAAC,SAAsC;IAC3D,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,GAAG,CAAC;IACxC,2EAA2E;IAC3E,IAAI,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACnC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE;QAC1B,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU;aACxE,UAAuD,CAAC;QAC3D,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,CACL,YAAG,SAAS,EAAC,yBAAyB,sFAElC,CACL,CAAC;QACJ,CAAC;QACD,OAAO,CACL,8BACE,KAAC,YAAY,IAAC,KAAK,EAAC,YAAY,YAC9B,KAAC,OAAO,IACN,IAAI,EAAE;4BACJ,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,CAAC,SAAS,EAAE;4BAClD;gCACE,KAAK,EAAE,SAAS;gCAChB,KAAK,EAAE,UAAU,CAAC,MAAM,IAAI,oBAAoB;6BACjD;yBACF,GACD,GACW,EACf,KAAC,YAAY,IAAC,KAAK,EAAC,OAAO,YACzB,KAAC,UAAU,IACT,OAAO,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,EACxC,IAAI,EAAE,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;4BACnC,IAAI,CAAC,KAAK;4BACV,eACE,SAAS,EAAE,sDAAsD,IAAI,CAAC,MAAM,EAAE,YAE7E,IAAI,CAAC,MAAM,GACP;4BACP,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;yBAC9B,CAAC,GACF,GACW,IACd,CACJ,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -36,7 +36,7 @@ export const timelinePanel = {
|
|
|
36
36
|
title: "Timeline",
|
|
37
37
|
order: 50,
|
|
38
38
|
render: (ctx) => {
|
|
39
|
-
const timeline = buildTimeline(ctx.
|
|
39
|
+
const timeline = buildTimeline(ctx.telemetry.getSpans());
|
|
40
40
|
if (timeline.rows.length === 0) {
|
|
41
41
|
return _jsx("p", { className: "plumix-debug-bar__empty", children: "No spans recorded." });
|
|
42
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../src/debug-bar/panels/timeline.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,qEAAqE;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,SAAS,aAAa,CAAC,EACrB,QAAQ,GAGT;IACC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE;QAC1C,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM;QACnC,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,CAAC;KACf,CAAC,CAAC;IAEH,OAAO,CACL,cACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,OAAO,UAAU,IAAI,QAAQ,CAAC,MAAM,EAAE,EAC/C,KAAK,EAAC,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,EACvB,IAAI,EAAC,KAAK,YAET,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;YACtC,OAAO,CACL,wBACE,eACE,SAAS,EAAC,iCAAiC,EAC3C,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAChB,CAAC,EAAE,KAAK,YAEP,IAAI,CAAC,IAAI,GACL,EACP,eACE,SAAS,EAAC,gCAAgC,EAC1C,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAClB,CAAC,EAAE,IAAI,CAAC,CAAC,EACT,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,EAAE,EAAE,CAAC,GACL,EACF,gBACE,SAAS,EAAC,+BAA+B,EACzC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,KAAK,EACR,UAAU,EAAC,KAAK,aAEf,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,UAC7B,KAvBD,CAAC,CAwBL,CACL,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"timeline.js","sourceRoot":"","sources":["../../../src/debug-bar/panels/timeline.tsx"],"names":[],"mappings":";AAKA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,qEAAqE;AACrE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;AAE5C,6EAA6E;AAC7E,8EAA8E;AAC9E,8EAA8E;AAC9E,MAAM,UAAU,GAAG,GAAG,CAAC;AACvB,MAAM,MAAM,GAAG,GAAG,CAAC;AACnB,MAAM,MAAM,GAAG,EAAE,CAAC;AAClB,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,SAAS,aAAa,CAAC,EACrB,QAAQ,GAGT;IACC,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,EAAE;QAC1C,KAAK,EAAE,UAAU,GAAG,MAAM,GAAG,MAAM;QACnC,SAAS,EAAE,UAAU;QACrB,MAAM,EAAE,OAAO;QACf,WAAW,EAAE,CAAC;KACf,CAAC,CAAC;IAEH,OAAO,CACL,cACE,SAAS,EAAC,4BAA4B,EACtC,OAAO,EAAE,OAAO,UAAU,IAAI,QAAQ,CAAC,MAAM,EAAE,EAC/C,KAAK,EAAC,MAAM,EACZ,MAAM,EAAE,QAAQ,CAAC,MAAM,EACvB,IAAI,EAAC,KAAK,YAET,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAC9B,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;YAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC;YACtC,OAAO,CACL,wBACE,eACE,SAAS,EAAC,iCAAiC,EAC3C,CAAC,EAAE,CAAC,GAAG,KAAK,GAAG,CAAC,EAChB,CAAC,EAAE,KAAK,YAEP,IAAI,CAAC,IAAI,GACL,EACP,eACE,SAAS,EAAC,gCAAgC,EAC1C,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC,EAClB,CAAC,EAAE,IAAI,CAAC,CAAC,EACT,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,EAAE,EAAE,CAAC,GACL,EACF,gBACE,SAAS,EAAC,+BAA+B,EACzC,CAAC,EAAE,UAAU,EACb,CAAC,EAAE,KAAK,EACR,UAAU,EAAC,KAAK,aAEf,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,CAAC,UAC7B,KAvBD,CAAC,CAwBL,CACL,CAAC;QACJ,CAAC,CAAC,GACE,CACP,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAe;IACvC,EAAE,EAAE,iBAAiB;IACrB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,CAAC,GAAe,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzD,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO,YAAG,SAAS,EAAC,yBAAyB,mCAAuB,CAAC;QACvE,CAAC;QACD,OAAO,CACL,KAAC,YAAY,IAAC,KAAK,EAAE,SAAS,QAAQ,CAAC,OAAO,IAAI,YAChD,KAAC,aAAa,IAAC,QAAQ,EAAE,QAAQ,GAAI,GACxB,CAChB,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/debug-bar/styles.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/debug-bar/styles.ts"],"names":[],"mappings":"AAyCA,eAAO,MAAM,aAAa,QA+Ud,CAAC"}
|
package/dist/debug-bar/styles.js
CHANGED
|
@@ -300,6 +300,11 @@ export const DEBUG_BAR_CSS = css `
|
|
|
300
300
|
gap: 6px;
|
|
301
301
|
align-items: baseline;
|
|
302
302
|
}
|
|
303
|
+
.plumix-debug-bar__query-ms {
|
|
304
|
+
flex: 0 0 auto;
|
|
305
|
+
margin-left: auto;
|
|
306
|
+
color: #8a929a;
|
|
307
|
+
}
|
|
303
308
|
.plumix-debug-bar__kind {
|
|
304
309
|
flex: 0 0 auto;
|
|
305
310
|
font-size: 9px;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/debug-bar/styles.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,uEAAuE;AACvE,gFAAgF;AAChF,8EAA8E;AAC9E,wEAAwE;AAExE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,0EAA0E;AAC1E,0DAA0D;AAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,SAAS,QAAQ;IACf,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,iCAAiC;QACjC,GAAG,IAAI,wCAAwC,CAAC,8EAA8E,CAAC,kBAAkB,CAAC;QAClJ,2DAA2D;QAC3D,GAAG,IAAI,wCAAwC,CAAC,6DAA6D,CAAC,kCAAkC,CAAC;IACnJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;CAavB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GACxB,GAAG,CAAA
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/debug-bar/styles.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,4EAA4E;AAC5E,8EAA8E;AAC9E,8EAA8E;AAC9E,uEAAuE;AACvE,gFAAgF;AAChF,8EAA8E;AAC9E,wEAAwE;AAExE,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEpC,0EAA0E;AAC1E,0DAA0D;AAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC;AAEpB,SAAS,QAAQ;IACf,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,iCAAiC;QACjC,GAAG,IAAI,wCAAwC,CAAC,8EAA8E,CAAC,kBAAkB,CAAC;QAClJ,2DAA2D;QAC3D,GAAG,IAAI,wCAAwC,CAAC,6DAA6D,CAAC,kCAAkC,CAAC;IACnJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,YAAY,GAAG,GAAG,CAAA;;;;;;;;;;;;;CAavB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GACxB,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4UF;IACD,YAAY;IACZ,QAAQ,EAAE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { TelemetrySpan } from "../context/telemetry.js";
|
|
2
2
|
/** A span flattened into a single waterfall row. */
|
|
3
3
|
interface TimelineRow {
|
|
4
4
|
readonly name: string;
|
|
@@ -16,8 +16,8 @@ export interface Timeline {
|
|
|
16
16
|
/**
|
|
17
17
|
* Flattens a trace-span tree into an ordered list of waterfall rows, each
|
|
18
18
|
* positioned relative to the request's overall time window. Pure — the panel
|
|
19
|
-
* feeds it {@link
|
|
19
|
+
* feeds it {@link TelemetrySpan} roots from the collector and renders the result.
|
|
20
20
|
*/
|
|
21
|
-
export declare function buildTimeline(roots: readonly
|
|
21
|
+
export declare function buildTimeline(roots: readonly TelemetrySpan[]): Timeline;
|
|
22
22
|
export {};
|
|
23
23
|
//# sourceMappingURL=timeline-model.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-model.d.ts","sourceRoot":"","sources":["../../src/debug-bar/timeline-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"timeline-model.d.ts","sourceRoot":"","sources":["../../src/debug-bar/timeline-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAE7D,oDAAoD;AACpD,UAAU,WAAW;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,WAAW,EAAE,CAAC;IACtC,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,QAAQ,CAwBvE"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Flattens a trace-span tree into an ordered list of waterfall rows, each
|
|
3
3
|
* positioned relative to the request's overall time window. Pure — the panel
|
|
4
|
-
* feeds it {@link
|
|
4
|
+
* feeds it {@link TelemetrySpan} roots from the collector and renders the result.
|
|
5
5
|
*/
|
|
6
6
|
export function buildTimeline(roots) {
|
|
7
7
|
let windowStart = Infinity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeline-model.js","sourceRoot":"","sources":["../../src/debug-bar/timeline-model.ts"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"timeline-model.js","sourceRoot":"","sources":["../../src/debug-bar/timeline-model.ts"],"names":[],"mappings":"AAkBA;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAA+B;IAC3D,IAAI,WAAW,GAAG,QAAQ,CAAC;IAC3B,IAAI,SAAS,GAAG,CAAC,QAAQ,CAAC;IAC1B,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAQ,EAAE;QAC1C,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACpD,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAExD,MAAM,IAAI,GAAkB,EAAE,CAAC;IAC/B,MAAM,OAAO,GAAG,CAAC,IAAmB,EAAE,KAAa,EAAQ,EAAE;QAC3D,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,SAAS,GAAG,WAAW;YACtC,UAAU,EAAE,IAAI,CAAC,UAAU;SAC5B,CAAC,CAAC;QACH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC;IACF,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,GAAG,WAAW,EAAE,CAAC;AACpD,CAAC"}
|
|
@@ -14,7 +14,7 @@ export interface DebugPanel {
|
|
|
14
14
|
readonly order?: number;
|
|
15
15
|
/**
|
|
16
16
|
* Rendered in isolation (its own SSR pass) so a throw can't crash the host
|
|
17
|
-
* page. Read request data off `ctx` (and `ctx.
|
|
17
|
+
* page. Read request data off `ctx` (and `ctx.telemetry.get(id)` for your own
|
|
18
18
|
* recorded entries) — outer React context providers are NOT visible across
|
|
19
19
|
* the isolated render, so don't rely on `useContext` from the page tree.
|
|
20
20
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/hooks/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/hooks/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/registry.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { hookStore } from "../context/stores.js";
|
|
1
|
+
import { hookStore, tryGetContext } from "../context/stores.js";
|
|
2
|
+
import { NOOP_TELEMETRY } from "../context/telemetry.js";
|
|
2
3
|
import { HookExecutionError } from "./errors.js";
|
|
3
4
|
import { DEFAULT_HOOK_PRIORITY } from "./types.js";
|
|
4
5
|
export class HookRegistry {
|
|
@@ -38,12 +39,13 @@ export class HookRegistry {
|
|
|
38
39
|
if (!entries || entries.length === 0)
|
|
39
40
|
return input;
|
|
40
41
|
const sorted = sortEntries(entries);
|
|
42
|
+
const telemetry = requestTelemetry();
|
|
41
43
|
let current = input;
|
|
42
44
|
for (const entry of sorted) {
|
|
43
45
|
// structuredClone isolates each filter — mutations inside one filter
|
|
44
46
|
// can't leak into the next. Clone cost is negligible vs. hook work.
|
|
45
47
|
const snapshot = structuredClone(current);
|
|
46
|
-
current = await
|
|
48
|
+
current = await runHandlerTraced(telemetry, name, entry.plugin, () => entry.fn(snapshot, ...rest));
|
|
47
49
|
}
|
|
48
50
|
return current;
|
|
49
51
|
}
|
|
@@ -98,7 +100,8 @@ export class HookRegistry {
|
|
|
98
100
|
if (!entries || entries.length === 0)
|
|
99
101
|
return;
|
|
100
102
|
const sorted = sortEntries(entries);
|
|
101
|
-
const
|
|
103
|
+
const telemetry = requestTelemetry();
|
|
104
|
+
const invocations = sorted.map((entry) => runHandlerTraced(telemetry, name, entry.plugin, () => Promise.resolve().then(() => entry.fn(...args))));
|
|
102
105
|
const results = await Promise.allSettled(invocations);
|
|
103
106
|
for (let i = 0; i < results.length; i++) {
|
|
104
107
|
const result = results[i];
|
|
@@ -115,6 +118,21 @@ export class HookRegistry {
|
|
|
115
118
|
}
|
|
116
119
|
}
|
|
117
120
|
}
|
|
121
|
+
// The registry is app-scoped while telemetry is request-scoped; the request
|
|
122
|
+
// context store bridges the two. Outside a request (build time, tests calling
|
|
123
|
+
// hooks directly) the no-op collector applies and handlers run untraced.
|
|
124
|
+
function requestTelemetry() {
|
|
125
|
+
return tryGetContext()?.telemetry ?? NOOP_TELEMETRY;
|
|
126
|
+
}
|
|
127
|
+
// One handler execution = one `hook:` span wrapping the existing hookStore
|
|
128
|
+
// frame — shared by the traced pipelines (applyFilter, doAction).
|
|
129
|
+
function runHandlerTraced(telemetry, name, plugin, fn) {
|
|
130
|
+
return telemetry.span(`hook: ${name}`, (s) => {
|
|
131
|
+
s.set("hook.name", name);
|
|
132
|
+
s.set("hook.plugin", plugin);
|
|
133
|
+
return hookStore.run({ hook: name, plugin }, fn);
|
|
134
|
+
});
|
|
135
|
+
}
|
|
118
136
|
function isPromiseLike(value) {
|
|
119
137
|
return (typeof value === "object" &&
|
|
120
138
|
value !== null &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/hooks/registry.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/hooks/registry.ts"],"names":[],"mappings":"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"}
|