@tracepanel/js 0.3.4 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -4
- package/dist/agent.d.ts +23 -1
- package/dist/agent.js +72 -22
- package/dist/agent.js.map +1 -1
- package/dist/body.d.ts +32 -0
- package/dist/body.js +314 -0
- package/dist/body.js.map +1 -0
- package/dist/bullmq.d.ts +76 -1
- package/dist/bullmq.js +215 -6
- package/dist/bullmq.js.map +1 -1
- package/dist/bun.js +81 -11
- package/dist/bun.js.map +1 -1
- package/dist/config.d.ts +20 -0
- package/dist/config.js +13 -0
- package/dist/config.js.map +1 -1
- package/dist/console.d.ts +5 -0
- package/dist/console.js +16 -0
- package/dist/console.js.map +1 -1
- package/dist/express.js +94 -23
- package/dist/express.js.map +1 -1
- package/dist/headers.js +54 -8
- package/dist/headers.js.map +1 -1
- package/dist/inspector.d.ts +9 -0
- package/dist/inspector.js +47 -0
- package/dist/inspector.js.map +1 -0
- package/dist/locals.d.ts +51 -0
- package/dist/locals.js +269 -0
- package/dist/locals.js.map +1 -0
- package/dist/loggers.d.ts +50 -0
- package/dist/loggers.js +201 -0
- package/dist/loggers.js.map +1 -0
- package/dist/model.d.ts +23 -2
- package/dist/model.js.map +1 -1
- package/dist/next.js +6 -0
- package/dist/next.js.map +1 -1
- package/dist/nuxt-plugin.d.ts +1 -0
- package/dist/nuxt-plugin.js +6 -0
- package/dist/nuxt-plugin.js.map +1 -1
- package/dist/processor.d.ts +23 -2
- package/dist/processor.js +61 -14
- package/dist/processor.js.map +1 -1
- package/dist/profile.d.ts +63 -0
- package/dist/profile.js +300 -0
- package/dist/profile.js.map +1 -0
- package/dist/request.d.ts +61 -0
- package/dist/request.js +244 -0
- package/dist/request.js.map +1 -0
- package/dist/session.d.ts +10 -0
- package/dist/session.js +45 -0
- package/dist/session.js.map +1 -0
- package/dist/setup.js +10 -1
- package/dist/setup.js.map +1 -1
- package/dist/stack.d.ts +27 -3
- package/dist/stack.js +106 -9
- package/dist/stack.js.map +1 -1
- package/dist/widget.d.ts +24 -0
- package/dist/widget.js +62 -1
- package/dist/widget.js.map +1 -1
- package/package.json +16 -4
package/dist/session.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
// The request's session as the app left it, for the panel's Request tab, as the Python SDK records it: session.<key>,
|
|
2
|
+
// each value as text, cut as an error's locals are, masked under a sensitive name and at any depth below one.
|
|
3
|
+
//
|
|
4
|
+
// Only a session the app already read is recorded, from where its framework keeps it decoded: express-session's and
|
|
5
|
+
// cookie-session's `req.session` in Express and Nest, h3's `useSession()` in Nuxt. Nothing here decodes a cookie: a
|
|
6
|
+
// sealed one (iron-session, Auth.js, h3's own) takes the app's secret.
|
|
7
|
+
import { repr } from "./locals.js";
|
|
8
|
+
import { key, MASK, masked } from "./request.js";
|
|
9
|
+
// Keys that say who is signed in, kept as they are: Passport's `{ user }`, under a name that reads as a password's.
|
|
10
|
+
const PLAIN = new Set(["passport"]);
|
|
11
|
+
// Keys that hold what only the server may see, whatever is inside: nuxt-auth-utils' `secure`.
|
|
12
|
+
const MASKED = new Set(["secure"]);
|
|
13
|
+
function value(name, item) {
|
|
14
|
+
if (MASKED.has(name))
|
|
15
|
+
return MASK;
|
|
16
|
+
return repr(PLAIN.has(name) ? "" : name, masked(item));
|
|
17
|
+
}
|
|
18
|
+
/** session.<key> of a session's entries, under a prefix of its own when there are several (session.<name>.<key>). */
|
|
19
|
+
export function sessionAttrs(entries, prefix = "session.") {
|
|
20
|
+
const found = {};
|
|
21
|
+
for (const [name, item] of entries) {
|
|
22
|
+
if (typeof item !== "function")
|
|
23
|
+
found[`${prefix}${key(name)}`] = value(name, item);
|
|
24
|
+
}
|
|
25
|
+
return found;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* The session express-session or cookie-session put on an Express request, as the handler left it; none without one.
|
|
29
|
+
* express-session's `cookie` is the session cookie's settings, not what the app keeps in it.
|
|
30
|
+
*/
|
|
31
|
+
export function expressSession(session) {
|
|
32
|
+
if (session === null || typeof session !== "object")
|
|
33
|
+
return {};
|
|
34
|
+
const own = typeof session.regenerate === "function";
|
|
35
|
+
return sessionAttrs(Object.entries(session).filter(([name]) => !(own && name === "cookie")));
|
|
36
|
+
}
|
|
37
|
+
/** h3's sessions as the request left them (`event.context.sessions`), by name: those `useSession()` read. */
|
|
38
|
+
export function h3Sessions(sessions) {
|
|
39
|
+
if (sessions === null || typeof sessions !== "object")
|
|
40
|
+
return {};
|
|
41
|
+
const read = Object.entries(sessions).filter((entry) => typeof entry[1]?.data === "object" && entry[1].data !== null);
|
|
42
|
+
const named = read.length > 1;
|
|
43
|
+
return Object.assign({}, ...read.map(([name, session]) => sessionAttrs(Object.entries(session.data), named ? `session.${key(name)}.` : "session.")));
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,sHAAsH;AACtH,8GAA8G;AAC9G,EAAE;AACF,oHAAoH;AACpH,oHAAoH;AACpH,uEAAuE;AAEvE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEjD,oHAAoH;AACpH,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;AACpC,8FAA8F;AAC9F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEnC,SAAS,KAAK,CAAC,IAAY,EAAE,IAAa;IACxC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,YAAY,CAAC,OAAoC,EAAE,MAAM,GAAG,UAAU;IACpF,MAAM,KAAK,GAAU,EAAE,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACnC,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,KAAK,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB;IAC7C,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IAC/D,MAAM,GAAG,GAAG,OAAQ,OAAoC,CAAC,UAAU,KAAK,UAAU,CAAC;IACnF,OAAO,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/F,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,UAAU,CAAC,QAAiB;IAC1C,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,MAAM,CAC1C,CAAC,KAAK,EAAuC,EAAE,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAC7G,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC,MAAM,CAClB,EAAE,EACF,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,CAC9B,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CACzF,CACF,CAAC;AACJ,CAAC"}
|
package/dist/setup.js
CHANGED
|
@@ -20,8 +20,10 @@ import { BullMQInstrumentation } from "./bullmq.js";
|
|
|
20
20
|
import { captureConsole } from "./console.js";
|
|
21
21
|
import { DatabasesInstrumentation } from "./explain.js";
|
|
22
22
|
import { traceFetch } from "./fetch.js";
|
|
23
|
+
import { PinoLogs, WinstonLogs } from "./loggers.js";
|
|
23
24
|
import { NestLogs } from "./logs.js";
|
|
24
25
|
import { traceBunCalls } from "./outgoing.js";
|
|
26
|
+
import { ATTRIBUTE as PROFILE, requested } from "./profile.js";
|
|
25
27
|
import { runtime } from "./runtime.js";
|
|
26
28
|
import { TransactionsInstrumentation } from "./transactions.js";
|
|
27
29
|
const STARTED = Symbol.for("tracepanel.started");
|
|
@@ -80,6 +82,8 @@ export function start(options = {}) {
|
|
|
80
82
|
// A Nest app runs on Express: Nest's spans name the controller and method that handled the request.
|
|
81
83
|
nest(),
|
|
82
84
|
new NestLogs(tracepanel.processor),
|
|
85
|
+
new PinoLogs(tracepanel.processor),
|
|
86
|
+
new WinstonLogs(tracepanel.processor),
|
|
83
87
|
new PgInstrumentation({ enhancedDatabaseReporting: true }),
|
|
84
88
|
new MySQL2Instrumentation(),
|
|
85
89
|
new IORedisInstrumentation(),
|
|
@@ -89,7 +93,8 @@ export function start(options = {}) {
|
|
|
89
93
|
new PrismaInstrumentation(),
|
|
90
94
|
// BEGIN … COMMIT on a connection as a transaction span: after pg's and mysql2's, so its statements are inside.
|
|
91
95
|
new TransactionsInstrumentation(),
|
|
92
|
-
|
|
96
|
+
// Its jobs' task events too, for the console's Live list.
|
|
97
|
+
new BullMQInstrumentation(tracepanel.processor),
|
|
93
98
|
// The databases the app queries, for the console's EXPLAIN.
|
|
94
99
|
new DatabasesInstrumentation(),
|
|
95
100
|
// fetch(): Node's own, through undici (Bun's: traceBunCalls() below).
|
|
@@ -101,6 +106,10 @@ export function start(options = {}) {
|
|
|
101
106
|
// A CORS preflight (the browser asking before a call with a traceparent) is the browser's, not the app's work.
|
|
102
107
|
ignoreIncomingRequestHook: (request) => options.httpServer === false ||
|
|
103
108
|
(request.method === "OPTIONS" && request.headers["access-control-request-method"] !== undefined),
|
|
109
|
+
// A request that asks to be profiled says so on its span, as it starts.
|
|
110
|
+
startIncomingSpanHook: (request) => tracepanel.config.profileEnabled && "headers" in request && requested(request.headers)
|
|
111
|
+
? { [PROFILE]: true }
|
|
112
|
+
: {},
|
|
104
113
|
}),
|
|
105
114
|
];
|
|
106
115
|
registerInstrumentations({ instrumentations });
|
package/dist/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../src/setup.ts"],"names":[],"mappings":"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"}
|
package/dist/stack.d.ts
CHANGED
|
@@ -1,13 +1,37 @@
|
|
|
1
1
|
import type { Frame } from "./model.js";
|
|
2
|
+
/** Whether a file is this package's own. */
|
|
3
|
+
export declare function ownFile(file: string): boolean;
|
|
2
4
|
export interface StackFrame {
|
|
3
5
|
function: string;
|
|
4
6
|
file: string;
|
|
5
7
|
line: number;
|
|
6
8
|
}
|
|
7
|
-
|
|
9
|
+
/**
|
|
10
|
+
* The frames of a V8 stack, innermost first. `mapped`: a bundle's frames as the app's sources, through its source
|
|
11
|
+
* map; without it, where the code that ran is, as the debugger sees it.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseStack(stack: string | undefined, mapped?: boolean): StackFrame[];
|
|
14
|
+
/** Whether a line of a V8 stack is an `async` one: a caller waiting for the frame above, not running under it. */
|
|
15
|
+
export declare function asyncFrames(stack: string | undefined): boolean[];
|
|
16
|
+
/** Where a function is in the app's source: a file URL or path and a line and column (1-based) of the code that ran. */
|
|
17
|
+
export declare function place(url: string, line: number, column: number): StackFrame;
|
|
8
18
|
/** The project's own code: under the root, not a dependency, not a bundle, not Node's, not Tracepanel's. */
|
|
9
19
|
export declare function inApp(file: string, root: string): boolean;
|
|
10
20
|
/** `file:line in function` of the innermost frame of the app's own code on the current stack, or null. */
|
|
11
21
|
export declare function origin(root: string): string | null;
|
|
12
|
-
/**
|
|
13
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Where the call being made now was made. `origin`: `file:line in function` of the innermost frame of the app's own
|
|
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.
|
|
26
|
+
*/
|
|
27
|
+
export declare function madeAt(root: string): {
|
|
28
|
+
origin: string | null;
|
|
29
|
+
caller: string | null;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* An error's frames, outermost first as the console shows every SDK's, with the source of the app's own. `locals`:
|
|
33
|
+
* the local variables of the app's frames, by the frame's place in the stack (innermost first), when they were read.
|
|
34
|
+
*/
|
|
35
|
+
export declare function frames(stack: string | undefined, root: string, locals?: readonly (Record<string, string> | undefined)[]): Frame[];
|
|
36
|
+
/** A library's file as its package names it (express/lib/router/index.js), Node's own as Node names them. */
|
|
37
|
+
export declare function libraryPath(file: string): string;
|
package/dist/stack.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
// The app's own code in a V8 stack: where a query was made (code.origin),
|
|
1
|
+
// The app's own code in a V8 stack: where a query was made (code.origin), or the library code that asked for one
|
|
2
|
+
// none of the app's code made (code.caller); and an error's frames with their source.
|
|
2
3
|
import { readFileSync } from "node:fs";
|
|
3
4
|
import nodeModule, {} from "node:module";
|
|
4
5
|
import { dirname, isAbsolute, relative, resolve, sep } from "node:path";
|
|
@@ -8,7 +9,15 @@ const CONTEXT_LINES = 5;
|
|
|
8
9
|
const FRAME = /^\s*at (?:async )?(?:(.+?) \()?(.+?):(\d+):(\d+)\)?$/;
|
|
9
10
|
// This package's own files are never the app's.
|
|
10
11
|
const OWN = fileURLToPath(new URL(".", import.meta.url));
|
|
11
|
-
|
|
12
|
+
/** Whether a file is this package's own. */
|
|
13
|
+
export function ownFile(file) {
|
|
14
|
+
return file.startsWith(OWN);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* The frames of a V8 stack, innermost first. `mapped`: a bundle's frames as the app's sources, through its source
|
|
18
|
+
* map; without it, where the code that ran is, as the debugger sees it.
|
|
19
|
+
*/
|
|
20
|
+
export function parseStack(stack, mapped = true) {
|
|
12
21
|
const frames = [];
|
|
13
22
|
for (const line of (stack ?? "").split("\n").slice(1)) {
|
|
14
23
|
const match = FRAME.exec(line);
|
|
@@ -16,10 +25,19 @@ export function parseStack(stack) {
|
|
|
16
25
|
continue;
|
|
17
26
|
const [, fn, location, lineno, column] = match;
|
|
18
27
|
const file = location?.startsWith("file://") ? fileURLToPath(location) : (location ?? "");
|
|
19
|
-
|
|
28
|
+
const frame = { function: fn ?? "<anonymous>", file, line: Number(lineno) };
|
|
29
|
+
frames.push(mapped ? original(frame, Number(column)) : frame);
|
|
20
30
|
}
|
|
21
31
|
return frames;
|
|
22
32
|
}
|
|
33
|
+
/** Whether a line of a V8 stack is an `async` one: a caller waiting for the frame above, not running under it. */
|
|
34
|
+
export function asyncFrames(stack) {
|
|
35
|
+
return (stack ?? "")
|
|
36
|
+
.split("\n")
|
|
37
|
+
.slice(1)
|
|
38
|
+
.filter((line) => FRAME.test(line))
|
|
39
|
+
.map((line) => /^\s*at async /.test(line));
|
|
40
|
+
}
|
|
23
41
|
// A dev server's bundle (`next dev`'s .next/dev/server/chunks/*.js, `nuxt dev`'s .nuxt/dev/index.mjs) runs the app's
|
|
24
42
|
// code: its frames are mapped back to the app's sources through the bundle's source map. The frames of a bundle
|
|
25
43
|
// without one are the bundler's glue, never the app's.
|
|
@@ -75,6 +93,12 @@ function sourcePath(source, mapFile, sourceRoot) {
|
|
|
75
93
|
return resolve(process.cwd(), webpack[1] ?? "");
|
|
76
94
|
return isAbsolute(source) ? source : resolve(dirname(mapFile), sourceRoot, source);
|
|
77
95
|
}
|
|
96
|
+
/** Where a function is in the app's source: a file URL or path and a line and column (1-based) of the code that ran. */
|
|
97
|
+
export function place(url, line, column) {
|
|
98
|
+
const file = url.startsWith("file://") ? fileURLToPath(url) : url;
|
|
99
|
+
// This package's own code stays where it is: its source map leads out of it, to its TypeScript.
|
|
100
|
+
return ownFile(file) ? { function: "", file, line } : original({ function: "", file, line }, column);
|
|
101
|
+
}
|
|
78
102
|
/** The frame in the app's source, when its file is a bundle with a source map. */
|
|
79
103
|
function original(frame, column) {
|
|
80
104
|
if (!frame.file || !isAbsolute(frame.file) || frame.file.includes(`${sep}node_modules${sep}`))
|
|
@@ -121,8 +145,73 @@ function deepStack() {
|
|
|
121
145
|
}
|
|
122
146
|
/** `file:line in function` of the innermost frame of the app's own code on the current stack, or null. */
|
|
123
147
|
export function origin(root) {
|
|
124
|
-
|
|
125
|
-
|
|
148
|
+
return madeAt(root).origin;
|
|
149
|
+
}
|
|
150
|
+
// What makes a call rather than asks for one: the drivers, the ORMs and query builders on them, their pools, the
|
|
151
|
+
// instrumentation around them and the hooks that load it. Past these is the library code that wanted the call made
|
|
152
|
+
// (a session store, an admin panel, a job queue).
|
|
153
|
+
const CALL_LAYERS = new Set([
|
|
154
|
+
"@opentelemetry",
|
|
155
|
+
"@prisma",
|
|
156
|
+
"@mikro-orm",
|
|
157
|
+
"@redis",
|
|
158
|
+
"@tracepanel",
|
|
159
|
+
"drizzle-orm",
|
|
160
|
+
"generic-pool",
|
|
161
|
+
"import-in-the-middle",
|
|
162
|
+
"ioredis",
|
|
163
|
+
"knex",
|
|
164
|
+
"kysely",
|
|
165
|
+
"mongodb",
|
|
166
|
+
"mongoose",
|
|
167
|
+
"mysql",
|
|
168
|
+
"mysql2",
|
|
169
|
+
"objection",
|
|
170
|
+
"pg",
|
|
171
|
+
"pg-cursor",
|
|
172
|
+
"pg-pool",
|
|
173
|
+
"pg-protocol",
|
|
174
|
+
"prisma",
|
|
175
|
+
"redis",
|
|
176
|
+
"require-in-the-middle",
|
|
177
|
+
"sequelize",
|
|
178
|
+
"shimmer",
|
|
179
|
+
"tarn",
|
|
180
|
+
"tslib",
|
|
181
|
+
"typeorm",
|
|
182
|
+
]);
|
|
183
|
+
/** The installed package a file is in (pg, @prisma/client's scope @prisma), or null for a file in none. */
|
|
184
|
+
function packageOf(file) {
|
|
185
|
+
const at = file.lastIndexOf(`${sep}node_modules${sep}`);
|
|
186
|
+
if (at < 0)
|
|
187
|
+
return null;
|
|
188
|
+
return file.slice(at + `${sep}node_modules${sep}`.length).split(sep)[0] ?? null;
|
|
189
|
+
}
|
|
190
|
+
/** Whether a frame is library code that may have asked for a call: not a driver's, Node's, Tracepanel's or glue. */
|
|
191
|
+
function asks(file, root) {
|
|
192
|
+
if (!isAbsolute(file) || ownFile(file))
|
|
193
|
+
return false;
|
|
194
|
+
const name = packageOf(file);
|
|
195
|
+
if (name !== null)
|
|
196
|
+
return !CALL_LAYERS.has(name);
|
|
197
|
+
// A bundle's frame that no source map led out of is the bundler's glue.
|
|
198
|
+
return !BUNDLES.some((dir) => file.startsWith(root + dir));
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Where the call being made now was made. `origin`: `file:line in function` of the innermost frame of the app's own
|
|
202
|
+
* 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.
|
|
204
|
+
*/
|
|
205
|
+
export function madeAt(root) {
|
|
206
|
+
const stack = parseStack(deepStack());
|
|
207
|
+
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 };
|
|
210
|
+
const asked = stack.find((frame) => asks(frame.file, root));
|
|
211
|
+
return {
|
|
212
|
+
origin: null,
|
|
213
|
+
caller: asked ? `${libraryPath(asked.file)}:${asked.line} in ${shortName(asked.function)}` : null,
|
|
214
|
+
};
|
|
126
215
|
}
|
|
127
216
|
function shortName(fn) {
|
|
128
217
|
return fn.replace(/^Object\.|^Module\./, "");
|
|
@@ -137,10 +226,13 @@ function sourceAround(file, line) {
|
|
|
137
226
|
return { start: null, context: [] };
|
|
138
227
|
}
|
|
139
228
|
}
|
|
140
|
-
/**
|
|
141
|
-
|
|
229
|
+
/**
|
|
230
|
+
* An error's frames, outermost first as the console shows every SDK's, with the source of the app's own. `locals`:
|
|
231
|
+
* the local variables of the app's frames, by the frame's place in the stack (innermost first), when they were read.
|
|
232
|
+
*/
|
|
233
|
+
export function frames(stack, root, locals) {
|
|
142
234
|
return parseStack(stack)
|
|
143
|
-
.map((frame) => {
|
|
235
|
+
.map((frame, index) => {
|
|
144
236
|
const own = inApp(frame.file, root);
|
|
145
237
|
const { start, context } = own ? sourceAround(frame.file, frame.line) : { start: null, context: [] };
|
|
146
238
|
return {
|
|
@@ -151,9 +243,14 @@ export function frames(stack, root) {
|
|
|
151
243
|
in_app: own,
|
|
152
244
|
context_start: start,
|
|
153
245
|
context,
|
|
154
|
-
locals:
|
|
246
|
+
locals: (own && locals?.[index]) || null,
|
|
155
247
|
};
|
|
156
248
|
})
|
|
157
249
|
.reverse();
|
|
158
250
|
}
|
|
251
|
+
/** A library's file as its package names it (express/lib/router/index.js), Node's own as Node names them. */
|
|
252
|
+
export function libraryPath(file) {
|
|
253
|
+
const at = file.lastIndexOf(`${sep}node_modules${sep}`);
|
|
254
|
+
return at >= 0 ? file.slice(at + `${sep}node_modules${sep}`.length) : file;
|
|
255
|
+
}
|
|
159
256
|
//# sourceMappingURL=stack.js.map
|
package/dist/stack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stack.js","sourceRoot":"","sources":["../src/stack.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"stack.js","sourceRoot":"","sources":["../src/stack.ts"],"names":[],"mappings":"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"}
|
package/dist/widget.d.ts
CHANGED
|
@@ -24,3 +24,27 @@ export declare function badge(tracepanel: Runtime, request: BadgeRequest): Badge
|
|
|
24
24
|
export declare function exposedHeaders(allowOrigin: unknown, existing: unknown): string | undefined;
|
|
25
25
|
/** The tag first in <head>, so the widget wraps fetch before the page's scripts keep a reference to it. */
|
|
26
26
|
export declare function inject(page: string, tag: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Whether a response is an HTML page the script can go into as it streams: not compressed, its size not declared
|
|
29
|
+
* (the script would change it).
|
|
30
|
+
*/
|
|
31
|
+
export declare function streamablePage(header: (name: string) => unknown): boolean;
|
|
32
|
+
/** A page streamed this far without either is not one the script goes into: the rest passes as it comes. */
|
|
33
|
+
export declare const STREAM_LOOKAHEAD = 65536;
|
|
34
|
+
/**
|
|
35
|
+
* The script put into an HTML page that goes out in pieces, as they pass.
|
|
36
|
+
*
|
|
37
|
+
* Nothing is held but the end of a piece from its last `<` (a tag that may go on in the next one), until the script
|
|
38
|
+
* is in.
|
|
39
|
+
*/
|
|
40
|
+
export declare class Stream {
|
|
41
|
+
private readonly tag;
|
|
42
|
+
private held;
|
|
43
|
+
private seen;
|
|
44
|
+
private done;
|
|
45
|
+
constructor(tag: string);
|
|
46
|
+
/** What goes out now, of the piece and what was held. */
|
|
47
|
+
feed(piece: Uint8Array): Buffer;
|
|
48
|
+
/** What was held, once the body ends. */
|
|
49
|
+
end(): Buffer;
|
|
50
|
+
}
|
package/dist/widget.js
CHANGED
|
@@ -63,10 +63,71 @@ export function exposedHeaders(allowOrigin, existing) {
|
|
|
63
63
|
}
|
|
64
64
|
/** The tag first in <head>, so the widget wraps fetch before the page's scripts keep a reference to it. */
|
|
65
65
|
export function inject(page, tag) {
|
|
66
|
-
const head = /<head[^>]
|
|
66
|
+
const head = /<head(?:\s[^>]*)?>/i.exec(page);
|
|
67
67
|
if (head)
|
|
68
68
|
return page.slice(0, head.index + head[0].length) + tag + page.slice(head.index + head[0].length);
|
|
69
69
|
const body = page.toLowerCase().lastIndexOf("</body>");
|
|
70
70
|
return body >= 0 ? page.slice(0, body) + tag + page.slice(body) : page;
|
|
71
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Whether a response is an HTML page the script can go into as it streams: not compressed, its size not declared
|
|
74
|
+
* (the script would change it).
|
|
75
|
+
*/
|
|
76
|
+
export function streamablePage(header) {
|
|
77
|
+
const html = String(header("content-type") ?? "").includes("text/html");
|
|
78
|
+
return html && header("content-encoding") == null && header("content-length") == null;
|
|
79
|
+
}
|
|
80
|
+
// Where a streamed page gets the script: right after its <head> opens, or its <body> without one.
|
|
81
|
+
const OPENING = /<(?:head|body)(?:\s[^>]*)?>/i;
|
|
82
|
+
/** A page streamed this far without either is not one the script goes into: the rest passes as it comes. */
|
|
83
|
+
export const STREAM_LOOKAHEAD = 65_536;
|
|
84
|
+
/**
|
|
85
|
+
* The script put into an HTML page that goes out in pieces, as they pass.
|
|
86
|
+
*
|
|
87
|
+
* Nothing is held but the end of a piece from its last `<` (a tag that may go on in the next one), until the script
|
|
88
|
+
* is in.
|
|
89
|
+
*/
|
|
90
|
+
export class Stream {
|
|
91
|
+
tag;
|
|
92
|
+
held = Buffer.alloc(0);
|
|
93
|
+
seen = 0;
|
|
94
|
+
done = false;
|
|
95
|
+
constructor(tag) {
|
|
96
|
+
this.tag = Buffer.from(tag);
|
|
97
|
+
}
|
|
98
|
+
/** What goes out now, of the piece and what was held. */
|
|
99
|
+
feed(piece) {
|
|
100
|
+
const chunk = Buffer.from(piece.buffer, piece.byteOffset, piece.byteLength);
|
|
101
|
+
if (this.done)
|
|
102
|
+
return chunk;
|
|
103
|
+
const data = this.held.length > 0 ? Buffer.concat([this.held, chunk]) : chunk;
|
|
104
|
+
this.held = Buffer.alloc(0);
|
|
105
|
+
// Latin-1 keeps one character per byte: the indexes found are the bytes'.
|
|
106
|
+
const text = data.toString("latin1");
|
|
107
|
+
const found = OPENING.exec(text);
|
|
108
|
+
if (found) {
|
|
109
|
+
this.done = true;
|
|
110
|
+
const at = found.index + found[0].length;
|
|
111
|
+
return Buffer.concat([data.subarray(0, at), this.tag, data.subarray(at)]);
|
|
112
|
+
}
|
|
113
|
+
this.seen += chunk.length;
|
|
114
|
+
if (this.seen > STREAM_LOOKAHEAD) {
|
|
115
|
+
this.done = true;
|
|
116
|
+
return data;
|
|
117
|
+
}
|
|
118
|
+
const cut = text.lastIndexOf("<");
|
|
119
|
+
if (cut === -1 || text.includes(">", cut))
|
|
120
|
+
return data;
|
|
121
|
+
// A copy: the app may reuse the piece's memory once it is written.
|
|
122
|
+
this.held = Buffer.from(data.subarray(cut));
|
|
123
|
+
return data.subarray(0, cut);
|
|
124
|
+
}
|
|
125
|
+
/** What was held, once the body ends. */
|
|
126
|
+
end() {
|
|
127
|
+
const rest = this.held;
|
|
128
|
+
this.held = Buffer.alloc(0);
|
|
129
|
+
this.done = true;
|
|
130
|
+
return rest;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
72
133
|
//# sourceMappingURL=widget.js.map
|
package/dist/widget.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"widget.js","sourceRoot":"","sources":["../src/widget.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAE7G,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACvE,CAAC;AAoBD,uFAAuF;AACvF,MAAM,UAAU,KAAK,CAAC,UAAmB,EAAE,OAAqB;IAC9D,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC;IAC/D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CACxC,OAAO,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CACrF,CAAC;IACF,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1C,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACvD,oGAAoG;QACpG,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IACxC,CAAC;IACD,kHAAkH;IAClH,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,MAAM,OAAO,GAA2B;QACtC,eAAe,EAAE,MAAM,CAAC,EAAE;QAC1B,6FAA6F;QAC7F,eAAe,EAAE,UAAU,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,MAAM,CAAC,OAAO,IAAI,IAAI,cAAc,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC;KAClN,CAAC;IACF,IAAI,UAAU;QAAE,OAAO,CAAC,gBAAgB,CAAC,GAAG,GAAG,UAAU,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;IAC5E,+GAA+G;IAC/G,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,IAAI,UAAU,CAAC;IACtD,MAAM,WAAW,GACf,IAAI,IAAI,UAAU;QAChB,CAAC,CAAC;YACE,GAAG,EAAE,GAAG,GAAG,eAAe;YAC1B,qBAAqB,EAAE,GAAG;YAC1B,oBAAoB,EAAE,MAAM,CAAC,EAAE;YAC/B,wBAAwB,EAAE,MAAM;YAChC,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAAC;YACxC,uBAAuB,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;YAC3C,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,yBAAyB,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YACjD,wBAAwB,EAAE,SAAS;YACnC,yBAAyB,EAAE,YAAY,CAAC,SAAS,CAAC;SACnD;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,MAAM,GAAG,WAAW;QACxB,CAAC,CAAC,WAAW,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC;aACnC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC;aACxD,IAAI,CAAC,GAAG,CAAC,YAAY;QAC1B,CAAC,CAAC,SAAS,CAAC;IACd,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,OAAO,GAAG,CAAC,eAAe,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;AAExF;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,WAAoB,EAAE,QAAiB;IACpE,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;SACjC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,GAAW;IAC9C,MAAM,IAAI,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAiC;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxE,OAAO,IAAI,IAAI,MAAM,CAAC,kBAAkB,CAAC,IAAI,IAAI,IAAI,MAAM,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;AACxF,CAAC;AAED,kGAAkG;AAClG,MAAM,OAAO,GAAG,8BAA8B,CAAC;AAC/C,4GAA4G;AAC5G,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,OAAO,MAAM;IACA,GAAG,CAAS;IACrB,IAAI,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,GAAG,CAAC,CAAC;IACT,IAAI,GAAG,KAAK,CAAC;IAErB,YAAY,GAAW;QACrB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,yDAAyD;IACzD,IAAI,CAAC,KAAiB;QACpB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QAC5E,IAAI,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAC9E,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,0EAA0E;QAC1E,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACzC,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;QAC1B,IAAI,IAAI,CAAC,IAAI,GAAG,gBAAgB,EAAE,CAAC;YACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACvD,mEAAmE;QACnE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,yCAAyC;IACzC,GAAG;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tracepanel/js",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Traces and logs for Node.js and Bun apps (Express, NestJS, Next.js, Nuxt, Bun.serve): every request with its SQL, logs and errors, N+1 queries found",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
"@opentelemetry/sdk-trace-base": "^2.12.0",
|
|
77
77
|
"@opentelemetry/sdk-trace-node": "^2.12.0",
|
|
78
78
|
"@prisma/instrumentation": "^7.10.0",
|
|
79
|
-
"@tracepanel/agent": "~0.
|
|
79
|
+
"@tracepanel/agent": "~0.4.1",
|
|
80
80
|
"import-in-the-middle": "^3.5.2"
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
@@ -98,15 +98,25 @@
|
|
|
98
98
|
"devDependencies": {
|
|
99
99
|
"@biomejs/biome": "2.5.15",
|
|
100
100
|
"@opentelemetry/context-async-hooks": "^2.12.0",
|
|
101
|
+
"@types/cookie-session": "^2.0.49",
|
|
101
102
|
"@types/express": "^5.0.6",
|
|
103
|
+
"@types/express-session": "^1.19.0",
|
|
102
104
|
"@types/node": "^26.6.5",
|
|
103
105
|
"@types/pg": "^8.23.1",
|
|
104
106
|
"@types/react": "^19.3.0",
|
|
107
|
+
"bullmq": "^6.3.17",
|
|
108
|
+
"cookie-session": "^2.1.1",
|
|
105
109
|
"express": "^5.3.0",
|
|
110
|
+
"express-session": "^1.19.0",
|
|
111
|
+
"h3": "^1.15.11",
|
|
106
112
|
"happy-dom": "^21.0.1",
|
|
113
|
+
"hono": "^4.13.13",
|
|
114
|
+
"ioredis": "^6.0.0",
|
|
107
115
|
"pg": "^8.23.1",
|
|
116
|
+
"pino": "^10.4.0",
|
|
108
117
|
"typescript": "^7.0.2",
|
|
109
|
-
"vitest": "^5.0.0"
|
|
118
|
+
"vitest": "^5.0.0",
|
|
119
|
+
"winston": "^3.19.0"
|
|
110
120
|
},
|
|
111
121
|
"keywords": [
|
|
112
122
|
"bun",
|
|
@@ -116,8 +126,10 @@
|
|
|
116
126
|
"nextjs",
|
|
117
127
|
"nuxt",
|
|
118
128
|
"opentelemetry",
|
|
129
|
+
"pino",
|
|
119
130
|
"sql",
|
|
120
|
-
"tracing"
|
|
131
|
+
"tracing",
|
|
132
|
+
"winston"
|
|
121
133
|
],
|
|
122
134
|
"repository": {
|
|
123
135
|
"type": "git",
|