@vestig/next 0.11.5 → 0.13.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/client/error-boundary.d.ts +22 -0
- package/dist/client/error-boundary.d.ts.map +1 -1
- package/dist/client/error-boundary.js +89 -2
- package/dist/client/error-boundary.js.map +1 -1
- package/dist/client/provider.d.ts +2 -0
- package/dist/client/provider.d.ts.map +1 -1
- package/dist/client/provider.js +16 -2
- package/dist/client/provider.js.map +1 -1
- package/dist/db/index.d.ts +1 -1
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +1 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/query-logger.d.ts +6 -0
- package/dist/db/query-logger.d.ts.map +1 -1
- package/dist/db/query-logger.js +77 -7
- package/dist/db/query-logger.js.map +1 -1
- package/dist/wide-events/context.d.ts +73 -0
- package/dist/wide-events/context.d.ts.map +1 -0
- package/dist/wide-events/context.js +86 -0
- package/dist/wide-events/context.js.map +1 -0
- package/dist/wide-events/helpers.d.ts +138 -0
- package/dist/wide-events/helpers.d.ts.map +1 -0
- package/dist/wide-events/helpers.js +182 -0
- package/dist/wide-events/helpers.js.map +1 -0
- package/dist/wide-events/index.d.ts +63 -0
- package/dist/wide-events/index.d.ts.map +1 -0
- package/dist/wide-events/index.js +67 -0
- package/dist/wide-events/index.js.map +1 -0
- package/dist/wide-events/middleware.d.ts +65 -0
- package/dist/wide-events/middleware.d.ts.map +1 -0
- package/dist/wide-events/middleware.js +160 -0
- package/dist/wide-events/middleware.js.map +1 -0
- package/dist/wide-events/server-action.d.ts +91 -0
- package/dist/wide-events/server-action.d.ts.map +1 -0
- package/dist/wide-events/server-action.js +158 -0
- package/dist/wide-events/server-action.js.map +1 -0
- package/package.json +9 -2
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
import { type ErrorInfo, type ReactNode } from 'react';
|
|
2
2
|
import type { LogEntry } from 'vestig';
|
|
3
|
+
/**
|
|
4
|
+
* Filter stack trace for production logging
|
|
5
|
+
*
|
|
6
|
+
* Removes noisy framework internals while keeping user code frames.
|
|
7
|
+
* Returns full stack in development for debugging.
|
|
8
|
+
*
|
|
9
|
+
* @param stack - The raw error stack trace
|
|
10
|
+
* @param isDev - Whether we're in development mode
|
|
11
|
+
* @returns Filtered stack trace (or original in development)
|
|
12
|
+
*/
|
|
13
|
+
export declare function filterStackTrace(stack: string | undefined, isDev: boolean): string | undefined;
|
|
14
|
+
/**
|
|
15
|
+
* Filter component stack for production logging
|
|
16
|
+
*
|
|
17
|
+
* In production, limits the component stack to a reasonable size
|
|
18
|
+
* to reduce log volume while preserving debugging context.
|
|
19
|
+
*
|
|
20
|
+
* @param stack - The React component stack
|
|
21
|
+
* @param isDev - Whether we're in development mode
|
|
22
|
+
* @returns Filtered component stack (or original in development)
|
|
23
|
+
*/
|
|
24
|
+
export declare function filterComponentStack(stack: string | null | undefined, isDev: boolean): string | undefined;
|
|
3
25
|
/**
|
|
4
26
|
* Breadcrumb entry for error context
|
|
5
27
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../src/client/error-boundary.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAU,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../src/client/error-boundary.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,OAAO,CAAA;AACjE,OAAO,KAAK,EAAE,QAAQ,EAAU,MAAM,QAAQ,CAAA;AA6B9C;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAgC9F;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CACnC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,KAAK,EAAE,OAAO,GACZ,MAAM,GAAG,SAAS,CAcpB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IAC1B,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACxC,QAAQ,EAAE,SAAS,CAAA;IACnB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,SAAS,CAAC,CAAA;IAC1E,oCAAoC;IACpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI,CAAA;IACtD,gDAAgD;IAChD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iEAAiE;IACjE,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAiBD;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,IAAI,CAY5D;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,SAAS,UAAU,EAAE,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAiJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,SAAS,CAE9E"}
|
|
@@ -2,6 +2,90 @@
|
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Component } from 'react';
|
|
4
4
|
import { useVestigContext } from './provider';
|
|
5
|
+
/**
|
|
6
|
+
* Patterns to filter from stack traces in production
|
|
7
|
+
* These are internal framework frames that add noise without helping debug user code
|
|
8
|
+
*/
|
|
9
|
+
const FILTERED_STACK_PATTERNS = [
|
|
10
|
+
// React internals
|
|
11
|
+
/at (renderWithHooks|mountIndeterminateComponent|beginWork|performUnitOfWork)/,
|
|
12
|
+
/at ReactDOMRoot\.render/,
|
|
13
|
+
/at scheduleUpdateOnFiber/,
|
|
14
|
+
/at (dispatchAction|dispatchSetState)/,
|
|
15
|
+
/at Object\.invokeGuardedCallbackDev/,
|
|
16
|
+
/at invokeGuardedCallback/,
|
|
17
|
+
/at HTMLUnknownElement\.callCallback/,
|
|
18
|
+
// Next.js internals
|
|
19
|
+
/at (AppRouter|HotReload|DevRoot)/,
|
|
20
|
+
/at __webpack_require__/,
|
|
21
|
+
/at __next_route_loader__/,
|
|
22
|
+
/webpack-internal:\/\/\/\(app-pages-browser\)/,
|
|
23
|
+
// Node.js internals
|
|
24
|
+
/at Module\._compile/,
|
|
25
|
+
/at processTicksAndRejections/,
|
|
26
|
+
/at runMicrotasks/,
|
|
27
|
+
// Build/bundle internals
|
|
28
|
+
/node_modules\/(react|react-dom|next|webpack)/,
|
|
29
|
+
];
|
|
30
|
+
/**
|
|
31
|
+
* Filter stack trace for production logging
|
|
32
|
+
*
|
|
33
|
+
* Removes noisy framework internals while keeping user code frames.
|
|
34
|
+
* Returns full stack in development for debugging.
|
|
35
|
+
*
|
|
36
|
+
* @param stack - The raw error stack trace
|
|
37
|
+
* @param isDev - Whether we're in development mode
|
|
38
|
+
* @returns Filtered stack trace (or original in development)
|
|
39
|
+
*/
|
|
40
|
+
export function filterStackTrace(stack, isDev) {
|
|
41
|
+
if (!stack || isDev) {
|
|
42
|
+
return stack;
|
|
43
|
+
}
|
|
44
|
+
const lines = stack.split('\n');
|
|
45
|
+
const filteredLines = [];
|
|
46
|
+
// Always keep the first line (error message)
|
|
47
|
+
if (lines.length > 0 && lines[0]) {
|
|
48
|
+
filteredLines.push(lines[0]);
|
|
49
|
+
}
|
|
50
|
+
// Filter remaining lines
|
|
51
|
+
for (let i = 1; i < lines.length; i++) {
|
|
52
|
+
const line = lines[i];
|
|
53
|
+
if (!line)
|
|
54
|
+
continue;
|
|
55
|
+
// Check if line matches any filter pattern
|
|
56
|
+
const shouldFilter = FILTERED_STACK_PATTERNS.some((pattern) => pattern.test(line));
|
|
57
|
+
if (!shouldFilter) {
|
|
58
|
+
filteredLines.push(line);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// If we filtered everything except the message, include a note
|
|
62
|
+
if (filteredLines.length === 1) {
|
|
63
|
+
filteredLines.push(' (stack frames filtered in production)');
|
|
64
|
+
}
|
|
65
|
+
return filteredLines.join('\n');
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Filter component stack for production logging
|
|
69
|
+
*
|
|
70
|
+
* In production, limits the component stack to a reasonable size
|
|
71
|
+
* to reduce log volume while preserving debugging context.
|
|
72
|
+
*
|
|
73
|
+
* @param stack - The React component stack
|
|
74
|
+
* @param isDev - Whether we're in development mode
|
|
75
|
+
* @returns Filtered component stack (or original in development)
|
|
76
|
+
*/
|
|
77
|
+
export function filterComponentStack(stack, isDev) {
|
|
78
|
+
if (!stack || isDev) {
|
|
79
|
+
return stack ?? undefined;
|
|
80
|
+
}
|
|
81
|
+
const lines = stack.split('\n').filter((line) => line.trim());
|
|
82
|
+
// In production, limit to 10 most relevant frames
|
|
83
|
+
const maxFrames = 10;
|
|
84
|
+
if (lines.length > maxFrames) {
|
|
85
|
+
return [...lines.slice(0, maxFrames), ` ... and ${lines.length - maxFrames} more`].join('\n');
|
|
86
|
+
}
|
|
87
|
+
return lines.join('\n');
|
|
88
|
+
}
|
|
5
89
|
/**
|
|
6
90
|
* Breadcrumb storage (module-level for simplicity)
|
|
7
91
|
*/
|
|
@@ -57,13 +141,16 @@ class VestigErrorBoundaryInner extends Component {
|
|
|
57
141
|
this.setState({ errorInfo });
|
|
58
142
|
// Log the error with vestig
|
|
59
143
|
if (this.props.logger) {
|
|
144
|
+
const isDev = process.env.NODE_ENV === 'development';
|
|
60
145
|
this.props.logger.error('React component error', {
|
|
61
146
|
error: {
|
|
62
147
|
name: error.name,
|
|
63
148
|
message: error.message,
|
|
64
|
-
stack
|
|
149
|
+
// Filter stack traces in production to reduce noise
|
|
150
|
+
stack: filterStackTrace(error.stack, isDev),
|
|
65
151
|
},
|
|
66
|
-
|
|
152
|
+
// Filter component stack in production to limit size
|
|
153
|
+
componentStack: filterComponentStack(errorInfo.componentStack, isDev),
|
|
67
154
|
breadcrumbs: getBreadcrumbs(),
|
|
68
155
|
});
|
|
69
156
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-boundary.js","sourceRoot":"","sources":["../../src/client/error-boundary.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAA;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"error-boundary.js","sourceRoot":"","sources":["../../src/client/error-boundary.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/client/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,SAAS,EAOd,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAAgB,MAAM,QAAQ,CAAA;AAGnE;;GAEG;AACH,UAAU,kBAAkB;IAC3B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,OAAO,EAAE,UAAU,CAAA;IACnB,4CAA4C;IAC5C,WAAW,EAAE,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/client/provider.tsx"],"names":[],"mappings":"AAEA,OAAO,EACN,KAAK,SAAS,EAOd,MAAM,OAAO,CAAA;AACd,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAAgB,MAAM,QAAQ,CAAA;AAGnE;;GAEG;AACH,UAAU,kBAAkB;IAC3B,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,0BAA0B;IAC1B,OAAO,EAAE,UAAU,CAAA;IACnB,4CAA4C;IAC5C,WAAW,EAAE,OAAO,CAAA;IACpB,0DAA0D;IAC1D,SAAS,EAAE,KAAK,GAAG,IAAI,CAAA;CACvB;AAID;;GAEG;AACH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,EAAE,SAAS,CAAA;IACnB,sDAAsD;IACtD,cAAc,CAAC,EAAE,UAAU,CAAA;IAC3B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gCAAgC;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AASD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,EAC9B,QAAQ,EACR,cAAc,EACd,QAAwB,EACxB,SAAoB,EACpB,OAAO,EAAE,aAAa,GACtB,EAAE,mBAAmB,2CAuGrB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,kBAAkB,CAMrD"}
|
package/dist/client/provider.js
CHANGED
|
@@ -42,6 +42,7 @@ function generateClientRequestId() {
|
|
|
42
42
|
*/
|
|
43
43
|
export function VestigProvider({ children, initialContext, endpoint = '/api/vestig', namespace = 'client', context: staticContext, }) {
|
|
44
44
|
const [isConnected, setIsConnected] = useState(false);
|
|
45
|
+
const [initError, setInitError] = useState(null);
|
|
45
46
|
const transportRef = useRef(null);
|
|
46
47
|
const loggerRef = useRef(null);
|
|
47
48
|
// Create transport once
|
|
@@ -85,7 +86,19 @@ export function VestigProvider({ children, initialContext, endpoint = '/api/vest
|
|
|
85
86
|
}, [transport, namespace, staticContext, context]);
|
|
86
87
|
// Initialize transport on mount
|
|
87
88
|
useEffect(() => {
|
|
88
|
-
transport
|
|
89
|
+
transport
|
|
90
|
+
.init()
|
|
91
|
+
.then(() => {
|
|
92
|
+
setIsConnected(true);
|
|
93
|
+
setInitError(null);
|
|
94
|
+
})
|
|
95
|
+
.catch((err) => {
|
|
96
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
97
|
+
setInitError(error);
|
|
98
|
+
setIsConnected(false);
|
|
99
|
+
// Log to console since transport failed
|
|
100
|
+
console.error('[vestig] Transport initialization failed:', error);
|
|
101
|
+
});
|
|
89
102
|
// Flush on page unload
|
|
90
103
|
const handleUnload = () => {
|
|
91
104
|
transport.flush();
|
|
@@ -108,7 +121,8 @@ export function VestigProvider({ children, initialContext, endpoint = '/api/vest
|
|
|
108
121
|
logger,
|
|
109
122
|
context,
|
|
110
123
|
isConnected,
|
|
111
|
-
|
|
124
|
+
initError,
|
|
125
|
+
}), [logger, context, isConnected, initError]);
|
|
112
126
|
return _jsx(VestigContext.Provider, { value: value, children: children });
|
|
113
127
|
}
|
|
114
128
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/client/provider.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAEN,aAAa,EACb,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACR,MAAM,OAAO,CAAA;AACd,OAAO,EAAgC,YAAY,EAAE,MAAM,QAAQ,CAAA;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/client/provider.tsx"],"names":[],"mappings":"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"}
|
package/dist/db/index.d.ts
CHANGED
|
@@ -44,6 +44,6 @@
|
|
|
44
44
|
*/
|
|
45
45
|
export { withVestigPrisma, createPrismaQueryHandler, createPrismaLogConfig, type VestigPrismaOptions, } from './prisma';
|
|
46
46
|
export { createVestigDrizzleLogger, createDrizzleQueryLogger, measureQuery, type VestigDrizzleLoggerOptions, } from './drizzle';
|
|
47
|
-
export { formatDuration, createQueryLogEntry, logQuery, mergeConfig } from './query-logger';
|
|
47
|
+
export { formatDuration, createQueryLogEntry, logQuery, mergeConfig, extractAllTableNames, } from './query-logger';
|
|
48
48
|
export type { QueryLogEntry, DbLoggerConfig, PrismaQueryEvent, PrismaLogEvent, DrizzleLogger, } from './types';
|
|
49
49
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/db/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,EACN,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,mBAAmB,GACxB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,YAAY,EACZ,KAAK,0BAA0B,GAC/B,MAAM,WAAW,CAAA;AAGlB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAGH,OAAO,EACN,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,mBAAmB,GACxB,MAAM,UAAU,CAAA;AAGjB,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,YAAY,EACZ,KAAK,0BAA0B,GAC/B,MAAM,WAAW,CAAA;AAGlB,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,oBAAoB,GACpB,MAAM,gBAAgB,CAAA;AAGvB,YAAY,EACX,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,aAAa,GACb,MAAM,SAAS,CAAA"}
|
package/dist/db/index.js
CHANGED
|
@@ -47,5 +47,5 @@ export { withVestigPrisma, createPrismaQueryHandler, createPrismaLogConfig, } fr
|
|
|
47
47
|
// Drizzle integration
|
|
48
48
|
export { createVestigDrizzleLogger, createDrizzleQueryLogger, measureQuery, } from './drizzle';
|
|
49
49
|
// Core utilities
|
|
50
|
-
export { formatDuration, createQueryLogEntry, logQuery, mergeConfig } from './query-logger';
|
|
50
|
+
export { formatDuration, createQueryLogEntry, logQuery, mergeConfig, extractAllTableNames, } from './query-logger';
|
|
51
51
|
//# sourceMappingURL=index.js.map
|
package/dist/db/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,qBAAqB;AACrB,OAAO,EACN,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,GAErB,MAAM,UAAU,CAAA;AAEjB,sBAAsB;AACtB,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,YAAY,GAEZ,MAAM,WAAW,CAAA;AAElB,iBAAiB;AACjB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/db/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AAEH,qBAAqB;AACrB,OAAO,EACN,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,GAErB,MAAM,UAAU,CAAA;AAEjB,sBAAsB;AACtB,OAAO,EACN,yBAAyB,EACzB,wBAAwB,EACxB,YAAY,GAEZ,MAAM,WAAW,CAAA;AAElB,iBAAiB;AACjB,OAAO,EACN,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,WAAW,EACX,oBAAoB,GACpB,MAAM,gBAAgB,CAAA"}
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import type { Logger } from 'vestig';
|
|
10
10
|
import type { DbLoggerConfig, QueryLogEntry } from './types';
|
|
11
|
+
/**
|
|
12
|
+
* Extract all table names from a query (including JOINs)
|
|
13
|
+
*
|
|
14
|
+
* @returns Array of table names found in the query
|
|
15
|
+
*/
|
|
16
|
+
export declare function extractAllTableNames(query: string): string[];
|
|
11
17
|
/**
|
|
12
18
|
* Format duration for logging
|
|
13
19
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-logger.d.ts","sourceRoot":"","sources":["../../src/db/query-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"query-logger.d.ts","sourceRoot":"","sources":["../../src/db/query-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AA8F5D;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAkC5D;AA6CD;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAIjD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,EAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,EAChC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAChD,aAAa,CAgBf;AAED;;GAEG;AACH,wBAAgB,QAAQ,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,QAAQ,CAAC,cAAc,CAAC,GAC9B,IAAI,CA6BN;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAE7E"}
|
package/dist/db/query-logger.js
CHANGED
|
@@ -40,24 +40,94 @@ function detectOperation(query) {
|
|
|
40
40
|
return 'DELETE';
|
|
41
41
|
return 'OTHER';
|
|
42
42
|
}
|
|
43
|
+
/**
|
|
44
|
+
* Pattern for matching quoted or unquoted table identifiers
|
|
45
|
+
* Supports: table, "table", `table`, 'table', schema.table, "schema"."table"
|
|
46
|
+
*/
|
|
47
|
+
const TABLE_IDENTIFIER = /["'`]?([\w]+)["'`]?(?:\.["'`]?([\w]+)["'`]?)?/;
|
|
43
48
|
/**
|
|
44
49
|
* Extract table name from query (best effort)
|
|
50
|
+
*
|
|
51
|
+
* Handles:
|
|
52
|
+
* - SELECT ... FROM table
|
|
53
|
+
* - INSERT INTO table
|
|
54
|
+
* - UPDATE table SET ...
|
|
55
|
+
* - DELETE FROM table
|
|
56
|
+
* - TRUNCATE table
|
|
57
|
+
* - JOIN table ON ...
|
|
58
|
+
* - Schema-qualified names (schema.table)
|
|
59
|
+
* - Quoted identifiers ("table", `table`)
|
|
45
60
|
*/
|
|
46
61
|
function extractTableName(query) {
|
|
62
|
+
// Normalize whitespace (replace newlines, multiple spaces with single space)
|
|
63
|
+
const normalized = query.replace(/\s+/g, ' ').trim();
|
|
64
|
+
// Table name patterns in order of specificity
|
|
47
65
|
const patterns = [
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
66
|
+
// DELETE FROM [schema.]table
|
|
67
|
+
new RegExp(`DELETE\\s+FROM\\s+${TABLE_IDENTIFIER.source}`, 'i'),
|
|
68
|
+
// INSERT INTO [schema.]table
|
|
69
|
+
new RegExp(`INTO\\s+${TABLE_IDENTIFIER.source}`, 'i'),
|
|
70
|
+
// UPDATE [schema.]table SET
|
|
71
|
+
new RegExp(`UPDATE\\s+${TABLE_IDENTIFIER.source}`, 'i'),
|
|
72
|
+
// TRUNCATE [TABLE] [schema.]table
|
|
73
|
+
new RegExp(`TRUNCATE\\s+(?:TABLE\\s+)?${TABLE_IDENTIFIER.source}`, 'i'),
|
|
74
|
+
// SELECT ... FROM [schema.]table (primary table)
|
|
75
|
+
new RegExp(`FROM\\s+${TABLE_IDENTIFIER.source}(?:\\s+(?:AS\\s+)?\\w+)?(?:\\s*,|\\s+(?:WHERE|LEFT|RIGHT|INNER|OUTER|CROSS|JOIN|ON|GROUP|ORDER|LIMIT|OFFSET|$))`, 'i'),
|
|
76
|
+
// Fallback: just FROM [schema.]table
|
|
77
|
+
new RegExp(`FROM\\s+${TABLE_IDENTIFIER.source}`, 'i'),
|
|
52
78
|
];
|
|
53
79
|
for (const pattern of patterns) {
|
|
54
|
-
const match = pattern.exec(
|
|
55
|
-
if (match
|
|
56
|
-
return
|
|
80
|
+
const match = pattern.exec(normalized);
|
|
81
|
+
if (match) {
|
|
82
|
+
// If we have both schema and table (groups 1 and 2), return schema.table
|
|
83
|
+
if (match[2]) {
|
|
84
|
+
return `${match[1]}.${match[2]}`;
|
|
85
|
+
}
|
|
86
|
+
// Otherwise just return the table name
|
|
87
|
+
if (match[1]) {
|
|
88
|
+
return match[1];
|
|
89
|
+
}
|
|
57
90
|
}
|
|
58
91
|
}
|
|
59
92
|
return undefined;
|
|
60
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Extract all table names from a query (including JOINs)
|
|
96
|
+
*
|
|
97
|
+
* @returns Array of table names found in the query
|
|
98
|
+
*/
|
|
99
|
+
export function extractAllTableNames(query) {
|
|
100
|
+
const normalized = query.replace(/\s+/g, ' ').trim();
|
|
101
|
+
const tables = new Set();
|
|
102
|
+
// Patterns that capture table names
|
|
103
|
+
const tablePatterns = [
|
|
104
|
+
// FROM clause (can have multiple tables separated by commas)
|
|
105
|
+
/FROM\s+(["'`]?[\w]+["'`]?(?:\.["'`]?[\w]+["'`]?)?)/gi,
|
|
106
|
+
// JOIN clauses
|
|
107
|
+
/JOIN\s+(["'`]?[\w]+["'`]?(?:\.["'`]?[\w]+["'`]?)?)/gi,
|
|
108
|
+
// INSERT INTO
|
|
109
|
+
/INTO\s+(["'`]?[\w]+["'`]?(?:\.["'`]?[\w]+["'`]?)?)/gi,
|
|
110
|
+
// UPDATE
|
|
111
|
+
/UPDATE\s+(["'`]?[\w]+["'`]?(?:\.["'`]?[\w]+["'`]?)?)/gi,
|
|
112
|
+
// DELETE FROM
|
|
113
|
+
/DELETE\s+FROM\s+(["'`]?[\w]+["'`]?(?:\.["'`]?[\w]+["'`]?)?)/gi,
|
|
114
|
+
// TRUNCATE
|
|
115
|
+
/TRUNCATE\s+(?:TABLE\s+)?(["'`]?[\w]+["'`]?(?:\.["'`]?[\w]+["'`]?)?)/gi,
|
|
116
|
+
];
|
|
117
|
+
for (const pattern of tablePatterns) {
|
|
118
|
+
let match = pattern.exec(normalized);
|
|
119
|
+
while (match !== null) {
|
|
120
|
+
if (match[1]) {
|
|
121
|
+
const tableName = match[1]
|
|
122
|
+
// Remove quotes
|
|
123
|
+
.replace(/["'`]/g, '');
|
|
124
|
+
tables.add(tableName);
|
|
125
|
+
}
|
|
126
|
+
match = pattern.exec(normalized);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
return Array.from(tables);
|
|
130
|
+
}
|
|
61
131
|
/**
|
|
62
132
|
* Sanitize query parameters to hide sensitive data
|
|
63
133
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-logger.js","sourceRoot":"","sources":["../../src/db/query-logger.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE1C;;GAEG;AACH,MAAM,cAAc,GAA6B;IAChD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;IAC/C,kBAAkB,EAAE,GAAG;IACvB,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM;IACjE,cAAc,EAAE,IAAI;IACpB,cAAc,EAAE,IAAI;IACpB,SAAS,EAAE,IAAI;IACf,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;CACjB,CAAA;AAED;;GAEG;AACH,SAAS,aAAa;IACrB,OAAO,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAA;AAChF,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC1C,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IACjD,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IACjD,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IACjD,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,CAAA;IACjD,OAAO,OAAO,CAAA;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"query-logger.js","sourceRoot":"","sources":["../../src/db/query-logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import type { WideEventBuilder } from 'vestig';
|
|
2
|
+
/**
|
|
3
|
+
* Context for the current wide event in a request
|
|
4
|
+
*/
|
|
5
|
+
export interface WideEventRequestContext {
|
|
6
|
+
/** The wide event builder for this request */
|
|
7
|
+
event: WideEventBuilder;
|
|
8
|
+
/** Request start time for timing */
|
|
9
|
+
startTime: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get the current wide event from the request context.
|
|
13
|
+
*
|
|
14
|
+
* Returns undefined if called outside of a wide event context
|
|
15
|
+
* (e.g., not in a route handler wrapped with withWideEvent).
|
|
16
|
+
*
|
|
17
|
+
* @returns The current WideEventBuilder or undefined
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { getWideEvent } from '@vestig/next/wide-events'
|
|
22
|
+
*
|
|
23
|
+
* export async function fetchUsers() {
|
|
24
|
+
* const event = getWideEvent()
|
|
25
|
+
* if (event) {
|
|
26
|
+
* event.set('db', 'query', 'users.findMany')
|
|
27
|
+
* event.set('db', 'count', users.length)
|
|
28
|
+
* }
|
|
29
|
+
* return users
|
|
30
|
+
* }
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function getWideEvent(): WideEventBuilder | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Get the current wide event or throw if not in context.
|
|
36
|
+
*
|
|
37
|
+
* Use this when you expect to always be in a wide event context.
|
|
38
|
+
*
|
|
39
|
+
* @returns The current WideEventBuilder
|
|
40
|
+
* @throws Error if not in a wide event context
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* import { requireWideEvent } from '@vestig/next/wide-events'
|
|
45
|
+
*
|
|
46
|
+
* export async function createOrder(data: OrderData) {
|
|
47
|
+
* const event = requireWideEvent()
|
|
48
|
+
* event.set('order', 'items', data.items.length)
|
|
49
|
+
* event.set('order', 'total', data.total)
|
|
50
|
+
* // ...
|
|
51
|
+
* }
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
export declare function requireWideEvent(): WideEventBuilder;
|
|
55
|
+
/**
|
|
56
|
+
* Get the elapsed time since the request started.
|
|
57
|
+
*
|
|
58
|
+
* @returns Elapsed time in milliseconds, or undefined if not in context
|
|
59
|
+
*/
|
|
60
|
+
export declare function getWideEventElapsed(): number | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* Run a function within a wide event context.
|
|
63
|
+
*
|
|
64
|
+
* @internal Used by middleware and wrappers
|
|
65
|
+
*/
|
|
66
|
+
export declare function runWithWideEvent<T>(ctx: WideEventRequestContext, fn: () => T): T;
|
|
67
|
+
/**
|
|
68
|
+
* Run an async function within a wide event context.
|
|
69
|
+
*
|
|
70
|
+
* @internal Used by middleware and wrappers
|
|
71
|
+
*/
|
|
72
|
+
export declare function runWithWideEventAsync<T>(ctx: WideEventRequestContext, fn: () => Promise<T>): Promise<T>;
|
|
73
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/wide-events/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAA;AAE9C;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACvC,8CAA8C;IAC9C,KAAK,EAAE,gBAAgB,CAAA;IACvB,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAA;CACjB;AAOD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,YAAY,IAAI,gBAAgB,GAAG,SAAS,CAE3D;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,IAAI,gBAAgB,CASnD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,GAAG,SAAS,CAIxD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,GAAG,EAAE,uBAAuB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAEhF;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,EAC5C,GAAG,EAAE,uBAAuB,EAC5B,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAClB,OAAO,CAAC,CAAC,CAAC,CAEZ"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
/**
|
|
3
|
+
* AsyncLocalStorage for request-scoped wide events
|
|
4
|
+
*/
|
|
5
|
+
const wideEventStorage = new AsyncLocalStorage();
|
|
6
|
+
/**
|
|
7
|
+
* Get the current wide event from the request context.
|
|
8
|
+
*
|
|
9
|
+
* Returns undefined if called outside of a wide event context
|
|
10
|
+
* (e.g., not in a route handler wrapped with withWideEvent).
|
|
11
|
+
*
|
|
12
|
+
* @returns The current WideEventBuilder or undefined
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { getWideEvent } from '@vestig/next/wide-events'
|
|
17
|
+
*
|
|
18
|
+
* export async function fetchUsers() {
|
|
19
|
+
* const event = getWideEvent()
|
|
20
|
+
* if (event) {
|
|
21
|
+
* event.set('db', 'query', 'users.findMany')
|
|
22
|
+
* event.set('db', 'count', users.length)
|
|
23
|
+
* }
|
|
24
|
+
* return users
|
|
25
|
+
* }
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export function getWideEvent() {
|
|
29
|
+
return wideEventStorage.getStore()?.event;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Get the current wide event or throw if not in context.
|
|
33
|
+
*
|
|
34
|
+
* Use this when you expect to always be in a wide event context.
|
|
35
|
+
*
|
|
36
|
+
* @returns The current WideEventBuilder
|
|
37
|
+
* @throws Error if not in a wide event context
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* import { requireWideEvent } from '@vestig/next/wide-events'
|
|
42
|
+
*
|
|
43
|
+
* export async function createOrder(data: OrderData) {
|
|
44
|
+
* const event = requireWideEvent()
|
|
45
|
+
* event.set('order', 'items', data.items.length)
|
|
46
|
+
* event.set('order', 'total', data.total)
|
|
47
|
+
* // ...
|
|
48
|
+
* }
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
export function requireWideEvent() {
|
|
52
|
+
const event = getWideEvent();
|
|
53
|
+
if (!event) {
|
|
54
|
+
throw new Error('requireWideEvent() called outside of a wide event context. ' +
|
|
55
|
+
'Ensure you are using withWideEvent() or vestigWideEventMiddleware().');
|
|
56
|
+
}
|
|
57
|
+
return event;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the elapsed time since the request started.
|
|
61
|
+
*
|
|
62
|
+
* @returns Elapsed time in milliseconds, or undefined if not in context
|
|
63
|
+
*/
|
|
64
|
+
export function getWideEventElapsed() {
|
|
65
|
+
const ctx = wideEventStorage.getStore();
|
|
66
|
+
if (!ctx)
|
|
67
|
+
return undefined;
|
|
68
|
+
return performance.now() - ctx.startTime;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Run a function within a wide event context.
|
|
72
|
+
*
|
|
73
|
+
* @internal Used by middleware and wrappers
|
|
74
|
+
*/
|
|
75
|
+
export function runWithWideEvent(ctx, fn) {
|
|
76
|
+
return wideEventStorage.run(ctx, fn);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Run an async function within a wide event context.
|
|
80
|
+
*
|
|
81
|
+
* @internal Used by middleware and wrappers
|
|
82
|
+
*/
|
|
83
|
+
export async function runWithWideEventAsync(ctx, fn) {
|
|
84
|
+
return wideEventStorage.run(ctx, fn);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/wide-events/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAapD;;GAEG;AACH,MAAM,gBAAgB,GAAG,IAAI,iBAAiB,EAA2B,CAAA;AAEzE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,YAAY;IAC3B,OAAO,gBAAgB,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAA;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,gBAAgB;IAC/B,MAAM,KAAK,GAAG,YAAY,EAAE,CAAA;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACd,6DAA6D;YAC5D,sEAAsE,CACvE,CAAA;IACF,CAAC;IACD,OAAO,KAAK,CAAA;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB;IAClC,MAAM,GAAG,GAAG,gBAAgB,CAAC,QAAQ,EAAE,CAAA;IACvC,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAC1B,OAAO,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,CAAC,SAAS,CAAA;AACzC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAI,GAA4B,EAAE,EAAW;IAC5E,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACrC,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAC1C,GAA4B,EAC5B,EAAoB;IAEpB,OAAO,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;AACrC,CAAC"}
|