@tracepanel/js 0.4.1 → 0.6.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.
Files changed (81) hide show
  1. package/README.md +224 -12
  2. package/dist/agent.d.ts +5 -1
  3. package/dist/agent.js +12 -3
  4. package/dist/agent.js.map +1 -1
  5. package/dist/aws.d.ts +27 -0
  6. package/dist/aws.js +368 -0
  7. package/dist/aws.js.map +1 -0
  8. package/dist/bun.js +6 -82
  9. package/dist/bun.js.map +1 -1
  10. package/dist/calls.d.ts +5 -0
  11. package/dist/calls.js +7 -0
  12. package/dist/calls.js.map +1 -1
  13. package/dist/config.d.ts +7 -0
  14. package/dist/config.js +2 -0
  15. package/dist/config.js.map +1 -1
  16. package/dist/explain.d.ts +5 -0
  17. package/dist/explain.js +56 -7
  18. package/dist/explain.js.map +1 -1
  19. package/dist/fastify.d.ts +2 -0
  20. package/dist/fastify.js +100 -0
  21. package/dist/fastify.js.map +1 -0
  22. package/dist/frameworks.js +3 -0
  23. package/dist/frameworks.js.map +1 -1
  24. package/dist/hono.d.ts +2 -0
  25. package/dist/hono.js +63 -0
  26. package/dist/hono.js.map +1 -0
  27. package/dist/koa.d.ts +2 -0
  28. package/dist/koa.js +119 -0
  29. package/dist/koa.js.map +1 -0
  30. package/dist/llm.d.ts +20 -0
  31. package/dist/llm.js +632 -0
  32. package/dist/llm.js.map +1 -0
  33. package/dist/memory.d.ts +69 -0
  34. package/dist/memory.js +203 -0
  35. package/dist/memory.js.map +1 -0
  36. package/dist/model.d.ts +22 -1
  37. package/dist/model.js.map +1 -1
  38. package/dist/next.js +4 -4
  39. package/dist/next.js.map +1 -1
  40. package/dist/processor.d.ts +40 -4
  41. package/dist/processor.js +156 -29
  42. package/dist/processor.js.map +1 -1
  43. package/dist/profile.d.ts +34 -8
  44. package/dist/profile.js +98 -13
  45. package/dist/profile.js.map +1 -1
  46. package/dist/queries.d.ts +20 -0
  47. package/dist/queries.js +75 -0
  48. package/dist/queries.js.map +1 -0
  49. package/dist/respond.d.ts +12 -0
  50. package/dist/respond.js +85 -0
  51. package/dist/respond.js.map +1 -0
  52. package/dist/setup.js +22 -5
  53. package/dist/setup.js.map +1 -1
  54. package/dist/sql.d.ts +1 -0
  55. package/dist/sql.js +11 -2
  56. package/dist/sql.js.map +1 -1
  57. package/dist/sqlite.d.ts +13 -0
  58. package/dist/sqlite.js +291 -0
  59. package/dist/sqlite.js.map +1 -0
  60. package/dist/stack.d.ts +3 -1
  61. package/dist/stack.js +30 -6
  62. package/dist/stack.js.map +1 -1
  63. package/dist/testing.d.ts +128 -0
  64. package/dist/testing.js +362 -0
  65. package/dist/testing.js.map +1 -0
  66. package/dist/transactions.d.ts +11 -1
  67. package/dist/transactions.js +70 -34
  68. package/dist/transactions.js.map +1 -1
  69. package/dist/view.d.ts +17 -0
  70. package/dist/view.js +71 -0
  71. package/dist/view.js.map +1 -0
  72. package/dist/vitest-setup.d.ts +1 -0
  73. package/dist/vitest-setup.js +63 -0
  74. package/dist/vitest-setup.js.map +1 -0
  75. package/dist/vitest.d.ts +57 -0
  76. package/dist/vitest.js +130 -0
  77. package/dist/vitest.js.map +1 -0
  78. package/dist/widget.d.ts +16 -0
  79. package/dist/widget.js +33 -1
  80. package/dist/widget.js.map +1 -1
  81. package/package.json +69 -4
package/dist/sqlite.js ADDED
@@ -0,0 +1,291 @@
1
+ // SQLite's statements as steps, as the Python SDK records sqlite3's: better-sqlite3, Node's own node:sqlite and libsql
2
+ // (better-sqlite3's API). They run synchronously, in the app's call: a statement's span is the call, made where the
3
+ // app's line is on the stack. Each one keeps its SQL and the values it was run with (their hash tells a duplicate
4
+ // from an N+1), the database file's name, and the rows a read returned.
5
+ //
6
+ // The database each one ran on is remembered for the console's EXPLAIN QUERY PLAN, which runs on that same
7
+ // connection: it only plans, so it changes nothing, and an in-memory database can be explained too (explain.ts).
8
+ // better-sqlite3's db.transaction() is a transaction span (a savepoint inside another), as BEGIN … COMMIT is on any
9
+ // of them (transactions.ts).
10
+ import { basename } from "node:path";
11
+ import { SpanKind, SpanStatusCode, trace } from "@opentelemetry/api";
12
+ import { InstrumentationBase, InstrumentationNodeModuleDefinition, InstrumentationNodeModuleFile, } from "@opentelemetry/instrumentation";
13
+ import { rememberSqlite } from "./explain.js";
14
+ import { commonJs, statementIn, within } from "./transactions.js";
15
+ const PREPARED = new WeakMap();
16
+ /** A statement runs: the driver's own calls inside it (libsql's all() iterates) are part of it. */
17
+ let running = false;
18
+ const MARK = Symbol.for("tracepanel.sqlite");
19
+ const tracer = trace.getTracer("tracepanel-sqlite");
20
+ /** The methods that run a prepared statement, and how many rows each one's result is. */
21
+ const RUNS = {
22
+ run: null,
23
+ get: (row) => (row === undefined ? 0 : 1),
24
+ all: (rows) => (Array.isArray(rows) ? rows.length : 0),
25
+ // Rows as the app reads them: counted as they come, the span ends with the last.
26
+ iterate: null,
27
+ };
28
+ const BETTER_SQLITE3 = { client: "better-sqlite3", system: "sqlite" };
29
+ const NODE_SQLITE = { client: "node:sqlite", system: "sqlite" };
30
+ const LIBSQL = { client: "libsql", system: "sqlite" };
31
+ /** The database's file, as the span names it: its name only; none for one in memory. */
32
+ function fileOf(db, driver) {
33
+ try {
34
+ let path;
35
+ if (driver === NODE_SQLITE)
36
+ path = typeof db.location === "function" ? db.location() : null;
37
+ else
38
+ path = db.memory ? null : db.name;
39
+ return typeof path === "string" && path !== "" && path !== ":memory:" ? basename(path) : null;
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ /** A value as JSON keeps it, to be bound again for EXPLAIN: a bigint as a number or text, bytes as nothing. */
46
+ function jsonable(value) {
47
+ if (typeof value === "bigint")
48
+ return Number.isSafeInteger(Number(value)) ? Number(value) : String(value);
49
+ if (value instanceof Uint8Array || value instanceof ArrayBuffer || value instanceof DataView)
50
+ return null;
51
+ if (Array.isArray(value))
52
+ return value.map(jsonable);
53
+ if (value && typeof value === "object") {
54
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, jsonable(item)]));
55
+ }
56
+ return value === undefined ? null : value;
57
+ }
58
+ /** A statement's span, under the app's current one; none outside a trace. */
59
+ function startSpan(sql, prepared, params) {
60
+ if (!trace.getActiveSpan())
61
+ return undefined;
62
+ const file = fileOf(prepared.db, prepared.driver);
63
+ try {
64
+ rememberSqlite(prepared.db, file);
65
+ }
66
+ catch {
67
+ // EXPLAIN is a convenience.
68
+ }
69
+ let values;
70
+ try {
71
+ values = params ? JSON.stringify(jsonable(params)) : undefined;
72
+ }
73
+ catch {
74
+ values = undefined;
75
+ }
76
+ return tracer.startSpan("sqlite", {
77
+ kind: SpanKind.CLIENT,
78
+ attributes: {
79
+ "db.system.name": "sqlite",
80
+ "db.query.text": sql,
81
+ "tracepanel.db.client": prepared.driver.client,
82
+ ...(values !== undefined ? { "tracepanel.db.params": values } : {}),
83
+ ...(file ? { "db.namespace": file } : {}),
84
+ },
85
+ });
86
+ }
87
+ function failed(span, error) {
88
+ if (!span)
89
+ return;
90
+ span.recordException(error instanceof Error ? error : String(error));
91
+ span.setStatus({ code: SpanStatusCode.ERROR, message: error instanceof Error ? error.message : String(error) });
92
+ span.end();
93
+ }
94
+ /** Runs a statement in its span; BEGIN, COMMIT and the like open and close the connection's transaction span. */
95
+ function traced(sql, prepared, params, call, rows) {
96
+ if (!trace.getActiveSpan())
97
+ return call();
98
+ return statementIn(prepared.db, prepared.driver, sql, () => {
99
+ const span = startSpan(sql, prepared, params);
100
+ let result;
101
+ running = true;
102
+ try {
103
+ result = call();
104
+ }
105
+ catch (error) {
106
+ failed(span, error);
107
+ throw error;
108
+ }
109
+ finally {
110
+ running = false;
111
+ }
112
+ if (span && rows)
113
+ span.setAttribute("db.response.returned_rows", rows(result));
114
+ span?.end();
115
+ return result;
116
+ });
117
+ }
118
+ /** An iterator's rows, counted as the app reads them: the span ends with the last, or when the app stops. */
119
+ function counted(span, iterator) {
120
+ if (!span || !iterator || typeof iterator.next !== "function") {
121
+ span?.end();
122
+ return iterator;
123
+ }
124
+ let count = 0;
125
+ let open = true;
126
+ const done = () => {
127
+ if (!open)
128
+ return;
129
+ open = false;
130
+ span.setAttribute("db.response.returned_rows", count);
131
+ span.end();
132
+ };
133
+ const next = iterator.next.bind(iterator);
134
+ const stop = typeof iterator.return === "function" ? iterator.return.bind(iterator) : undefined;
135
+ iterator.next = (...args) => {
136
+ try {
137
+ const step = next(...args);
138
+ if (step?.done)
139
+ done();
140
+ else
141
+ count += 1;
142
+ return step;
143
+ }
144
+ catch (error) {
145
+ if (open) {
146
+ open = false;
147
+ failed(span, error);
148
+ }
149
+ throw error;
150
+ }
151
+ };
152
+ iterator.return = (...args) => {
153
+ done();
154
+ return stop ? stop(...args) : { done: true, value: undefined };
155
+ };
156
+ return iterator;
157
+ }
158
+ /** Wraps run, get, all and iterate on a statement class, once. */
159
+ function wrapStatements(proto) {
160
+ if (!proto || proto[MARK])
161
+ return;
162
+ Object.defineProperty(proto, MARK, { value: true });
163
+ for (const [method, rows] of Object.entries(RUNS)) {
164
+ const original = proto[method];
165
+ if (typeof original !== "function")
166
+ continue;
167
+ proto[method] = function (...params) {
168
+ const prepared = PREPARED.get(this);
169
+ if (!prepared || running || !trace.getActiveSpan())
170
+ return original.apply(this, params);
171
+ if (method !== "iterate")
172
+ return traced(prepared.sql, prepared, params, () => original.apply(this, params), rows);
173
+ return statementIn(prepared.db, prepared.driver, prepared.sql, () => {
174
+ const span = startSpan(prepared.sql, prepared, params);
175
+ try {
176
+ return counted(span, original.apply(this, params));
177
+ }
178
+ catch (error) {
179
+ failed(span, error);
180
+ throw error;
181
+ }
182
+ });
183
+ };
184
+ }
185
+ }
186
+ /** Wraps prepare (each statement remembers its SQL) and exec (a script, run as one step) on a database class. */
187
+ function wrapDatabase(proto, driver) {
188
+ if (!proto || Object.hasOwn(proto, MARK))
189
+ return;
190
+ Object.defineProperty(proto, MARK, { value: true });
191
+ const prepare = proto.prepare;
192
+ if (typeof prepare === "function") {
193
+ proto.prepare = function (...args) {
194
+ const statement = prepare.apply(this, args);
195
+ try {
196
+ if (statement && typeof args[0] === "string") {
197
+ PREPARED.set(statement, { sql: args[0], db: this, driver });
198
+ wrapStatements(Object.getPrototypeOf(statement));
199
+ }
200
+ }
201
+ catch {
202
+ // Never in the way of the app's statement.
203
+ }
204
+ return statement;
205
+ };
206
+ }
207
+ const exec = proto.exec;
208
+ if (typeof exec === "function") {
209
+ proto.exec = function (...args) {
210
+ const sql = args[0];
211
+ if (typeof sql !== "string")
212
+ return exec.apply(this, args);
213
+ return traced(sql, { db: this, driver }, undefined, () => exec.apply(this, args), null);
214
+ };
215
+ }
216
+ }
217
+ /** better-sqlite3's db.transaction(fn): each of the function's modes runs fn in a transaction span. */
218
+ function wrapTransaction(proto) {
219
+ const transaction = proto?.transaction;
220
+ if (typeof transaction !== "function" || transaction[MARK])
221
+ return;
222
+ const wrapped = function (...args) {
223
+ const made = transaction.apply(this, args);
224
+ const db = this;
225
+ try {
226
+ const modes = ["default", "deferred", "immediate", "exclusive"];
227
+ const traced = Object.fromEntries(modes.map((mode) => {
228
+ const run = made[mode] ?? made;
229
+ return [
230
+ mode,
231
+ function (...params) {
232
+ return within(db, BETTER_SQLITE3, () => run.apply(this, params));
233
+ },
234
+ ];
235
+ }));
236
+ const properties = {
237
+ ...Object.fromEntries(modes.map((mode) => [mode, { value: traced[mode] }])),
238
+ database: { value: db, enumerable: true },
239
+ };
240
+ for (const mode of modes)
241
+ Object.defineProperties(traced[mode], properties);
242
+ return traced.default;
243
+ }
244
+ catch {
245
+ return made;
246
+ }
247
+ };
248
+ Object.defineProperty(wrapped, MARK, { value: true });
249
+ proto.transaction = wrapped;
250
+ }
251
+ /** Nothing to undo: the wrappers stay, and do nothing once no span is active. */
252
+ const keep = (exports) => exports;
253
+ /** Patches better-sqlite3's Database class: its statements, exec and db.transaction(). */
254
+ export function traceBetterSqlite3(Database) {
255
+ wrapDatabase(Database?.prototype, BETTER_SQLITE3);
256
+ wrapTransaction(Database?.prototype);
257
+ }
258
+ /** Patches libsql's Database class (better-sqlite3's API; its transactions run BEGIN and COMMIT through exec). */
259
+ export function traceLibsql(Database) {
260
+ wrapDatabase(Database?.prototype, LIBSQL);
261
+ }
262
+ /** Patches node:sqlite's classes: Database and Statement (DatabaseSync and StatementSync before Node 25.7). */
263
+ export function traceNodeSqlite(exports) {
264
+ const sqlite = commonJs(exports) ?? exports;
265
+ for (const name of ["Database", "DatabaseSync"])
266
+ wrapDatabase(sqlite?.[name]?.prototype, NODE_SQLITE);
267
+ for (const name of ["Statement", "StatementSync"])
268
+ wrapStatements(sqlite?.[name]?.prototype);
269
+ return exports;
270
+ }
271
+ export class SqliteInstrumentation extends InstrumentationBase {
272
+ constructor() {
273
+ super("tracepanel-sqlite", "1.0.0", {});
274
+ }
275
+ init() {
276
+ return [
277
+ new InstrumentationNodeModuleDefinition("better-sqlite3", [">=9"], keep, keep, [
278
+ new InstrumentationNodeModuleFile("better-sqlite3/lib/database.js", [">=9"], (exports) => {
279
+ traceBetterSqlite3(commonJs(exports));
280
+ return exports;
281
+ }, keep),
282
+ ]),
283
+ new InstrumentationNodeModuleDefinition("libsql", [">=0.4"], (exports) => {
284
+ traceLibsql(commonJs(exports));
285
+ return exports;
286
+ }),
287
+ new InstrumentationNodeModuleDefinition("node:sqlite", ["*"], traceNodeSqlite, keep),
288
+ ];
289
+ }
290
+ }
291
+ //# sourceMappingURL=sqlite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"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"}
package/dist/stack.d.ts CHANGED
@@ -22,11 +22,13 @@ export declare function origin(root: string): string | null;
22
22
  /**
23
23
  * Where the call being made now was made. `origin`: `file:line in function` of the innermost frame of the app's own
24
24
  * code. Without one, `caller`: the library code that asked for it, the first frame past the driver, its ORM and
25
- * Tracepanel (`connect-pg-simple/index.js:… in PGStore.get`), as the Python SDK's code.caller names it.
25
+ * Tracepanel (`connect-pg-simple/index.js:… in PGStore.get`), as the Python SDK's code.caller names it. `orm`: the ORM
26
+ * the call went through (`prisma`, `drizzle`), its innermost frame's, or null for a driver called directly.
26
27
  */
27
28
  export declare function madeAt(root: string): {
28
29
  origin: string | null;
29
30
  caller: string | null;
31
+ orm: string | null;
30
32
  };
31
33
  /**
32
34
  * An error's frames, outermost first as the console shows every SDK's, with the source of the app's own. `locals`:
package/dist/stack.js CHANGED
@@ -7,11 +7,13 @@ import { fileURLToPath } from "node:url";
7
7
  const CONTEXT_LINES = 5;
8
8
  // " at fn (file:line:col)", " at file:line:col", " at async fn (file:line:col)".
9
9
  const FRAME = /^\s*at (?:async )?(?:(.+?) \()?(.+?):(\d+):(\d+)\)?$/;
10
- // This package's own files are never the app's.
10
+ // This package's own files are never the app's: its build, and its sources, where a runtime maps the build's frames
11
+ // back through its source maps (Bun does).
11
12
  const OWN = fileURLToPath(new URL(".", import.meta.url));
13
+ const OWN_SOURCES = resolve(OWN, "..", "src") + sep;
12
14
  /** Whether a file is this package's own. */
13
15
  export function ownFile(file) {
14
- return file.startsWith(OWN);
16
+ return file.startsWith(OWN) || file.startsWith(OWN_SOURCES);
15
17
  }
16
18
  /**
17
19
  * The frames of a V8 stack, innermost first. `mapped`: a bundle's frames as the app's sources, through its source
@@ -126,7 +128,7 @@ export function inApp(file, root) {
126
128
  return (file.startsWith(root + sep) &&
127
129
  !file.includes(`${sep}node_modules${sep}`) &&
128
130
  !BUNDLES.some((dir) => file.startsWith(root + dir)) &&
129
- !file.startsWith(OWN) &&
131
+ !ownFile(file) &&
130
132
  !file.startsWith("node:"));
131
133
  }
132
134
  // How deep origin() looks: a driver's span starts under a dozen frames of its own, the instrumentation's and
@@ -155,6 +157,7 @@ const CALL_LAYERS = new Set([
155
157
  "@prisma",
156
158
  "@mikro-orm",
157
159
  "@redis",
160
+ "@sequelize",
158
161
  "@tracepanel",
159
162
  "drizzle-orm",
160
163
  "generic-pool",
@@ -180,6 +183,17 @@ const CALL_LAYERS = new Set([
180
183
  "tslib",
181
184
  "typeorm",
182
185
  ]);
186
+ // The ORMs and query builders a query goes through, by their package: what db.client names, as the Python SDK names
187
+ // Django's and SQLAlchemy's. The agent's N+1 hint is the ORM's own way to load the related rows.
188
+ const ORMS = {
189
+ "@prisma": "prisma",
190
+ "@sequelize": "sequelize",
191
+ "drizzle-orm": "drizzle",
192
+ knex: "knex",
193
+ mongoose: "mongoose",
194
+ sequelize: "sequelize",
195
+ typeorm: "typeorm",
196
+ };
183
197
  /** The installed package a file is in (pg, @prisma/client's scope @prisma), or null for a file in none. */
184
198
  function packageOf(file) {
185
199
  const at = file.lastIndexOf(`${sep}node_modules${sep}`);
@@ -200,19 +214,29 @@ function asks(file, root) {
200
214
  /**
201
215
  * Where the call being made now was made. `origin`: `file:line in function` of the innermost frame of the app's own
202
216
  * code. Without one, `caller`: the library code that asked for it, the first frame past the driver, its ORM and
203
- * Tracepanel (`connect-pg-simple/index.js:… in PGStore.get`), as the Python SDK's code.caller names it.
217
+ * Tracepanel (`connect-pg-simple/index.js:… in PGStore.get`), as the Python SDK's code.caller names it. `orm`: the ORM
218
+ * the call went through (`prisma`, `drizzle`), its innermost frame's, or null for a driver called directly.
204
219
  */
205
220
  export function madeAt(root) {
206
221
  const stack = parseStack(deepStack());
222
+ const ormFrame = stack.find((frame) => ormOf(frame.file) !== null);
223
+ const orm = ormFrame ? ormOf(ormFrame.file) : null;
207
224
  const own = stack.find((frame) => inApp(frame.file, root));
208
- if (own)
209
- return { origin: `${relative(root, own.file)}:${own.line} in ${shortName(own.function)}`, caller: null };
225
+ if (own) {
226
+ return { origin: `${relative(root, own.file)}:${own.line} in ${shortName(own.function)}`, caller: null, orm };
227
+ }
210
228
  const asked = stack.find((frame) => asks(frame.file, root));
211
229
  return {
212
230
  origin: null,
213
231
  caller: asked ? `${libraryPath(asked.file)}:${asked.line} in ${shortName(asked.function)}` : null,
232
+ orm,
214
233
  };
215
234
  }
235
+ /** The ORM whose package a file is in, as db.client names it, or null. */
236
+ function ormOf(file) {
237
+ const name = packageOf(file);
238
+ return name !== null && Object.hasOwn(ORMS, name) ? (ORMS[name] ?? null) : null;
239
+ }
216
240
  function shortName(fn) {
217
241
  return fn.replace(/^Object\.|^Module\./, "");
218
242
  }
package/dist/stack.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stack.js","sourceRoot":"","sources":["../src/stack.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stack.js","sourceRoot":"","sources":["../src/stack.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,128 @@
1
+ import type { Span, Trace } from "./model.js";
2
+ import type { Sink, TracepanelProcessor } from "./processor.js";
3
+ export declare const KINDS: readonly ["n+1", "duplicates", "slow-sql", "slow-http", "slow-call", "error", "long-transaction", "in-transaction", "htmx", "queue-wait", "blocking-call", "large-result"];
4
+ export type Kind = (typeof KINDS)[number];
5
+ /** What fails a test unless the settings say otherwise. */
6
+ export declare const DEFAULT_FAIL_ON: readonly Kind[];
7
+ /** A test's own rules gone wrong (a kind misspelled), or a helper used outside a test: the test fails with it. */
8
+ export declare class UsageError extends Error {
9
+ name: string;
10
+ }
11
+ /** The kinds named: a list of them, or one; an unknown kind is a typo, and an error. */
12
+ export declare function kinds(value: unknown, where: string): Set<Kind>;
13
+ export declare function queries(spans: readonly Span[]): Span[];
14
+ /** Queries as a failure lists them: the statement, and where the project's code made it. */
15
+ export declare function listed(spans: readonly Span[]): string;
16
+ export declare function tooMany(made: readonly Span[], limit: number): string;
17
+ /** An assertion's failure as a test runner shows it: the message, without this SDK's frames. */
18
+ export declare function failure(message: string, name?: string): Error;
19
+ /** An issue the agent found in a test's trace, or in the trace of a request the test made. */
20
+ export interface Finding {
21
+ kind: string;
22
+ title: string;
23
+ /** Where in the project's code: `src/routes/users.ts:21 in list`. */
24
+ culprit: string | null;
25
+ hint: string | null;
26
+ count: number;
27
+ /** The statement of its first query, for an issue about SQL. */
28
+ query: string | null;
29
+ traceId: string;
30
+ traceName: string;
31
+ /** The trace in the agent's console. */
32
+ url: string;
33
+ }
34
+ /** The finding as a failure lists it; the trace it is in unless it is the test's own (`test`, its id). */
35
+ export declare function describe(finding: Finding, test?: string): string;
36
+ export declare function traceUrl(console: string, traceId: string): string;
37
+ interface Summary {
38
+ id: string;
39
+ /** How many issues the agent found in the trace. */
40
+ issues?: number;
41
+ }
42
+ /** The agent's console API, where a test's traces are read back with what the agent found in them. */
43
+ export declare class Console {
44
+ readonly url: string;
45
+ constructor(url: string);
46
+ private get;
47
+ /** The traces' summaries once the agent has stored them all (it writes in a thread of its own), by id. */
48
+ stored(ids: string[], timeoutMs?: number): Promise<Map<string, Summary>>;
49
+ /** What the agent found in these traces, the oldest trace's first. */
50
+ findings(traces: readonly Trace[]): Promise<Finding[]>;
51
+ }
52
+ /** Whether a test is running: what else completes now (a request in a beforeAll) is not a test's. */
53
+ export declare function running(): boolean;
54
+ /** The test whose trace is current: the one running this code, or the one whose request the app is serving. */
55
+ export declare function currentTest(): TracedTest | undefined;
56
+ /**
57
+ * The agent's sink with the tests' traces taken aside: each goes out at once, as its test waits for what the agent
58
+ * found in it; what completes while no test runs (a request a beforeAll made) isn't sent at all, nor is anything
59
+ * without an agent (`send`: there is one).
60
+ */
61
+ export declare class TestSink implements Sink {
62
+ private readonly sink;
63
+ private readonly send;
64
+ constructor(sink: Sink & {
65
+ flushNow?(): void;
66
+ }, send: boolean);
67
+ submit(trace: Trace): void;
68
+ submitEvent(event: Record<string, unknown>): void;
69
+ }
70
+ /** A test run as a trace: what a test runner's integration records, and what testTrace() gives a test. */
71
+ export declare class TracedTest {
72
+ readonly name: string;
73
+ private readonly attrs;
74
+ private readonly processor;
75
+ /** The agent's console, or undefined without an agent. */
76
+ readonly console: Console | undefined;
77
+ /** The test's own trace, once it is sent. */
78
+ trace: Trace | undefined;
79
+ /** The app's traces of the requests the test made. */
80
+ readonly served: Trace[];
81
+ private root;
82
+ constructor(name: string, attrs: Record<string, string | number>, processor: TracepanelProcessor,
83
+ /** The agent's console, or undefined without an agent. */
84
+ console: Console | undefined);
85
+ /** Runs the test as the trace: `run` runs it, `failed` says after it whether it failed (and with what). */
86
+ record(run: () => Promise<void>, failed: () => readonly unknown[]): Promise<void>;
87
+ private get traceId();
88
+ /** A trace of this test's sent: its own, or the app's of a request it made. */
89
+ completed(trace: Trace): void;
90
+ /**
91
+ * Waits for the traces of the requests the test made to be sent; `running`: the test's own trace still is, else
92
+ * it is waited for too.
93
+ */
94
+ settle(running?: boolean): Promise<void>;
95
+ /** The test's own spans so far. */
96
+ ownSpans(): Span[];
97
+ /** The test's trace and those of its requests, as far as they are recorded. */
98
+ get traces(): Trace[];
99
+ /** The traces of the requests the test made, those whose trace isn't sent yet included (their spans so far). */
100
+ private requests;
101
+ /** The queries the test made so far, its requests' included. */
102
+ get sql(): Span[];
103
+ get queries(): number;
104
+ /**
105
+ * What the agent found so far: in the requests the test made; its own trace's once the test has ended. Empty
106
+ * without an agent.
107
+ */
108
+ issues(): Promise<Finding[]>;
109
+ /** The test's trace in the agent's console. */
110
+ get url(): string | undefined;
111
+ private ownId;
112
+ }
113
+ /** What fails a test: more queries than `maxQueries`, or an issue the agent found of a kind in `failOn`. */
114
+ export interface Rules {
115
+ failOn: Set<Kind>;
116
+ maxQueries: number | undefined;
117
+ }
118
+ /** What the test did against its rules: a failure's message each, none when it held to them. */
119
+ export declare function problems(run: TracedTest, rules: Rules, allowedHow: (kinds: string) => string): Promise<string[]>;
120
+ /**
121
+ * Fails (an AssertionError) when `fn` makes more than `limit` SQL queries, those of the requests it makes included.
122
+ *
123
+ * await maxQueries(3, () => request(app).get("/posts"));
124
+ *
125
+ * It counts in the current test's trace.
126
+ */
127
+ export declare function maxQueries<T>(limit: number, fn: () => T | Promise<T>): Promise<Awaited<T>>;
128
+ export {};