@vestig/next 0.6.0 → 0.9.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/README.md +1 -1
- package/dist/__tests__/mocks/next-server.d.ts.map +1 -1
- package/dist/__tests__/mocks/next-server.js.map +1 -1
- package/dist/client/error-boundary.d.ts +80 -0
- package/dist/client/error-boundary.d.ts.map +1 -0
- package/dist/client/error-boundary.js +182 -0
- package/dist/client/error-boundary.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/transport.d.ts +50 -0
- package/dist/client/transport.d.ts.map +1 -1
- package/dist/client/transport.js +200 -3
- package/dist/client/transport.js.map +1 -1
- package/dist/client.d.ts +2 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -1
- package/dist/db/drizzle.d.ts +115 -0
- package/dist/db/drizzle.d.ts.map +1 -0
- package/dist/db/drizzle.js +174 -0
- package/dist/db/drizzle.js.map +1 -0
- package/dist/db/index.d.ts +49 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +51 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/prisma.d.ts +114 -0
- package/dist/db/prisma.d.ts.map +1 -0
- package/dist/db/prisma.js +144 -0
- package/dist/db/prisma.js.map +1 -0
- package/dist/db/query-logger.d.ts +30 -0
- package/dist/db/query-logger.d.ts.map +1 -0
- package/dist/db/query-logger.js +169 -0
- package/dist/db/query-logger.js.map +1 -0
- package/dist/db/types.d.ts +102 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +28 -0
- package/dist/db/types.js.map +1 -0
- package/dist/dev/api/index.d.ts +13 -0
- package/dist/dev/api/index.d.ts.map +1 -0
- package/dist/dev/api/index.js +13 -0
- package/dist/dev/api/index.js.map +1 -0
- package/dist/dev/api/logs-stream.d.ts +119 -0
- package/dist/dev/api/logs-stream.d.ts.map +1 -0
- package/dist/dev/api/logs-stream.js +156 -0
- package/dist/dev/api/logs-stream.js.map +1 -0
- package/dist/dev/filters.d.ts +17 -0
- package/dist/dev/filters.d.ts.map +1 -0
- package/dist/dev/filters.js +100 -0
- package/dist/dev/filters.js.map +1 -0
- package/dist/dev/hooks/use-logs.d.ts +55 -0
- package/dist/dev/hooks/use-logs.d.ts.map +1 -0
- package/dist/dev/hooks/use-logs.js +202 -0
- package/dist/dev/hooks/use-logs.js.map +1 -0
- package/dist/dev/index.d.ts +35 -0
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +41 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/log-entry.d.ts +12 -0
- package/dist/dev/log-entry.d.ts.map +1 -0
- package/dist/dev/log-entry.js +152 -0
- package/dist/dev/log-entry.js.map +1 -0
- package/dist/dev/log-viewer.d.ts +11 -0
- package/dist/dev/log-viewer.d.ts.map +1 -0
- package/dist/dev/log-viewer.js +49 -0
- package/dist/dev/log-viewer.js.map +1 -0
- package/dist/dev/metrics-card.d.ts +18 -0
- package/dist/dev/metrics-card.d.ts.map +1 -0
- package/dist/dev/metrics-card.js +75 -0
- package/dist/dev/metrics-card.js.map +1 -0
- package/dist/dev/metrics-histogram.d.ts +12 -0
- package/dist/dev/metrics-histogram.d.ts.map +1 -0
- package/dist/dev/metrics-histogram.js +69 -0
- package/dist/dev/metrics-histogram.js.map +1 -0
- package/dist/dev/metrics-panel.d.ts +10 -0
- package/dist/dev/metrics-panel.d.ts.map +1 -0
- package/dist/dev/metrics-panel.js +84 -0
- package/dist/dev/metrics-panel.js.map +1 -0
- package/dist/dev/overlay.d.ts +55 -0
- package/dist/dev/overlay.d.ts.map +1 -0
- package/dist/dev/overlay.js +216 -0
- package/dist/dev/overlay.js.map +1 -0
- package/dist/dev/store.d.ts +126 -0
- package/dist/dev/store.d.ts.map +1 -0
- package/dist/dev/store.js +210 -0
- package/dist/dev/store.js.map +1 -0
- package/dist/error/boundary.d.ts +36 -0
- package/dist/error/boundary.d.ts.map +1 -0
- package/dist/error/boundary.js +263 -0
- package/dist/error/boundary.js.map +1 -0
- package/dist/error/breadcrumbs.d.ts +95 -0
- package/dist/error/breadcrumbs.d.ts.map +1 -0
- package/dist/error/breadcrumbs.js +273 -0
- package/dist/error/breadcrumbs.js.map +1 -0
- package/dist/error/fingerprint.d.ts +42 -0
- package/dist/error/fingerprint.d.ts.map +1 -0
- package/dist/error/fingerprint.js +135 -0
- package/dist/error/fingerprint.js.map +1 -0
- package/dist/error/index.d.ts +52 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +56 -0
- package/dist/error/index.js.map +1 -0
- package/dist/error/stack-parser.d.ts +43 -0
- package/dist/error/stack-parser.d.ts.map +1 -0
- package/dist/error/stack-parser.js +166 -0
- package/dist/error/stack-parser.js.map +1 -0
- package/dist/error/types.d.ts +152 -0
- package/dist/error/types.d.ts.map +1 -0
- package/dist/error/types.js +10 -0
- package/dist/error/types.js.map +1 -0
- package/dist/metrics/hooks/use-route-metrics.d.ts +93 -0
- package/dist/metrics/hooks/use-route-metrics.d.ts.map +1 -0
- package/dist/metrics/hooks/use-route-metrics.js +217 -0
- package/dist/metrics/hooks/use-route-metrics.js.map +1 -0
- package/dist/metrics/hooks/use-web-vitals.d.ts +73 -0
- package/dist/metrics/hooks/use-web-vitals.d.ts.map +1 -0
- package/dist/metrics/hooks/use-web-vitals.js +141 -0
- package/dist/metrics/hooks/use-web-vitals.js.map +1 -0
- package/dist/metrics/index.d.ts +51 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +56 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/reporter.d.ts +87 -0
- package/dist/metrics/reporter.d.ts.map +1 -0
- package/dist/metrics/reporter.js +178 -0
- package/dist/metrics/reporter.js.map +1 -0
- package/dist/metrics/store.d.ts +67 -0
- package/dist/metrics/store.d.ts.map +1 -0
- package/dist/metrics/store.js +187 -0
- package/dist/metrics/store.js.map +1 -0
- package/dist/metrics/thresholds.d.ts +84 -0
- package/dist/metrics/thresholds.d.ts.map +1 -0
- package/dist/metrics/thresholds.js +148 -0
- package/dist/metrics/thresholds.js.map +1 -0
- package/dist/metrics/types.d.ts +215 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +10 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/metrics/web-vitals.d.ts +72 -0
- package/dist/metrics/web-vitals.d.ts.map +1 -0
- package/dist/metrics/web-vitals.js +89 -0
- package/dist/metrics/web-vitals.js.map +1 -0
- package/package.json +28 -6
package/dist/client/transport.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* - Retry with exponential backoff
|
|
8
8
|
* - Uses keepalive for beforeunload reliability
|
|
9
9
|
* - Automatic page metadata enrichment
|
|
10
|
+
* - Offline queue persistence with localStorage
|
|
10
11
|
*/
|
|
11
12
|
export class ClientHTTPTransport {
|
|
12
13
|
name;
|
|
@@ -19,11 +20,22 @@ export class ClientHTTPTransport {
|
|
|
19
20
|
onFlushSuccess;
|
|
20
21
|
onFlushError;
|
|
21
22
|
onDrop;
|
|
23
|
+
// Offline queue config
|
|
24
|
+
offlineEnabled;
|
|
25
|
+
offlineStorageKey;
|
|
26
|
+
offlineMaxSize;
|
|
27
|
+
onOfflineRestore;
|
|
28
|
+
onOfflinePersist;
|
|
22
29
|
buffer = [];
|
|
23
30
|
flushTimer = null;
|
|
24
31
|
isFlushing = false;
|
|
25
32
|
isDestroyed = false;
|
|
26
33
|
maxBufferSize = 500;
|
|
34
|
+
isOnline = true;
|
|
35
|
+
boundOnlineHandler;
|
|
36
|
+
boundOfflineHandler;
|
|
37
|
+
flushQueue = Promise.resolve();
|
|
38
|
+
pendingFlush = false;
|
|
27
39
|
constructor(config) {
|
|
28
40
|
this.name = config.name;
|
|
29
41
|
this.config = { name: config.name, enabled: config.enabled ?? true };
|
|
@@ -35,13 +47,141 @@ export class ClientHTTPTransport {
|
|
|
35
47
|
this.onFlushSuccess = config.onFlushSuccess;
|
|
36
48
|
this.onFlushError = config.onFlushError;
|
|
37
49
|
this.onDrop = config.onDrop;
|
|
50
|
+
// Offline queue settings
|
|
51
|
+
const offlineConfig = config.offlineQueue ?? {};
|
|
52
|
+
this.offlineEnabled = offlineConfig.enabled ?? true;
|
|
53
|
+
this.offlineStorageKey = offlineConfig.storageKey ?? 'vestig:offline-queue';
|
|
54
|
+
this.offlineMaxSize = offlineConfig.maxSize ?? 1000;
|
|
55
|
+
this.onOfflineRestore = offlineConfig.onRestore;
|
|
56
|
+
this.onOfflinePersist = offlineConfig.onPersist;
|
|
57
|
+
// Initialize network status (default to true if navigator.onLine is not available)
|
|
58
|
+
this.isOnline =
|
|
59
|
+
typeof navigator !== 'undefined' && navigator.onLine !== undefined ? navigator.onLine : true;
|
|
60
|
+
// Bind handlers for cleanup
|
|
61
|
+
this.boundOnlineHandler = this.handleOnline.bind(this);
|
|
62
|
+
this.boundOfflineHandler = this.handleOffline.bind(this);
|
|
38
63
|
}
|
|
39
64
|
async init() {
|
|
65
|
+
// Restore offline queue if any
|
|
66
|
+
if (this.offlineEnabled) {
|
|
67
|
+
this.restoreOfflineQueue();
|
|
68
|
+
}
|
|
69
|
+
// Listen for network status changes
|
|
70
|
+
if (typeof window !== 'undefined') {
|
|
71
|
+
window.addEventListener('online', this.boundOnlineHandler);
|
|
72
|
+
window.addEventListener('offline', this.boundOfflineHandler);
|
|
73
|
+
}
|
|
40
74
|
// Start flush timer
|
|
41
75
|
this.flushTimer = setInterval(() => {
|
|
42
76
|
this.flush();
|
|
43
77
|
}, this.flushInterval);
|
|
44
78
|
}
|
|
79
|
+
handleOnline() {
|
|
80
|
+
this.isOnline = true;
|
|
81
|
+
// Attempt to flush when back online
|
|
82
|
+
this.flush();
|
|
83
|
+
}
|
|
84
|
+
handleOffline() {
|
|
85
|
+
this.isOnline = false;
|
|
86
|
+
// Persist current buffer to offline storage
|
|
87
|
+
if (this.offlineEnabled && this.buffer.length > 0) {
|
|
88
|
+
this.persistOfflineQueue();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
restoreOfflineQueue() {
|
|
92
|
+
if (typeof localStorage === 'undefined')
|
|
93
|
+
return;
|
|
94
|
+
try {
|
|
95
|
+
const stored = localStorage.getItem(this.offlineStorageKey);
|
|
96
|
+
if (!stored)
|
|
97
|
+
return;
|
|
98
|
+
const entries = JSON.parse(stored);
|
|
99
|
+
if (!Array.isArray(entries) || entries.length === 0)
|
|
100
|
+
return;
|
|
101
|
+
// Add restored entries to the front of the buffer
|
|
102
|
+
this.buffer.unshift(...entries);
|
|
103
|
+
// Enforce max buffer size
|
|
104
|
+
if (this.buffer.length > this.maxBufferSize) {
|
|
105
|
+
const excess = this.buffer.length - this.maxBufferSize;
|
|
106
|
+
this.buffer.splice(this.maxBufferSize);
|
|
107
|
+
this.onDrop?.(excess);
|
|
108
|
+
}
|
|
109
|
+
// Clear stored queue
|
|
110
|
+
localStorage.removeItem(this.offlineStorageKey);
|
|
111
|
+
this.onOfflineRestore?.(entries.length);
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
// Silently ignore parsing errors
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
persistOfflineQueue() {
|
|
118
|
+
if (typeof localStorage === 'undefined')
|
|
119
|
+
return;
|
|
120
|
+
try {
|
|
121
|
+
// Merge existing stored entries with current buffer
|
|
122
|
+
let toStore = [...this.buffer];
|
|
123
|
+
const existingStored = localStorage.getItem(this.offlineStorageKey);
|
|
124
|
+
if (existingStored) {
|
|
125
|
+
try {
|
|
126
|
+
const existing = JSON.parse(existingStored);
|
|
127
|
+
if (Array.isArray(existing)) {
|
|
128
|
+
toStore = [...existing, ...toStore];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
catch {
|
|
132
|
+
// Ignore parse errors
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Enforce max size
|
|
136
|
+
if (toStore.length > this.offlineMaxSize) {
|
|
137
|
+
const excess = toStore.length - this.offlineMaxSize;
|
|
138
|
+
toStore = toStore.slice(excess);
|
|
139
|
+
this.onDrop?.(excess);
|
|
140
|
+
}
|
|
141
|
+
this.safeLocalStorageSet(this.offlineStorageKey, JSON.stringify(toStore));
|
|
142
|
+
this.onOfflinePersist?.(toStore.length);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
// Silently ignore storage errors
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Safely set localStorage with quota handling
|
|
150
|
+
* Removes oldest entries if quota is exceeded
|
|
151
|
+
*/
|
|
152
|
+
safeLocalStorageSet(key, value) {
|
|
153
|
+
try {
|
|
154
|
+
localStorage.setItem(key, value);
|
|
155
|
+
return true;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
// Handle QuotaExceededError
|
|
159
|
+
if (error instanceof Error &&
|
|
160
|
+
(error.name === 'QuotaExceededError' ||
|
|
161
|
+
error.name === 'NS_ERROR_DOM_QUOTA_REACHED' ||
|
|
162
|
+
// Safari private browsing
|
|
163
|
+
error.message.includes('quota'))) {
|
|
164
|
+
// Try to make room by reducing stored entries
|
|
165
|
+
try {
|
|
166
|
+
const parsed = JSON.parse(value);
|
|
167
|
+
if (Array.isArray(parsed) && parsed.length > 1) {
|
|
168
|
+
// Remove half the entries and try again
|
|
169
|
+
const reduced = parsed.slice(Math.floor(parsed.length / 2));
|
|
170
|
+
const droppedCount = parsed.length - reduced.length;
|
|
171
|
+
this.onDrop?.(droppedCount);
|
|
172
|
+
if (reduced.length > 0) {
|
|
173
|
+
return this.safeLocalStorageSet(key, JSON.stringify(reduced));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Parse failed, clear the key entirely
|
|
179
|
+
localStorage.removeItem(key);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
45
185
|
log(entry) {
|
|
46
186
|
if (this.isDestroyed)
|
|
47
187
|
return;
|
|
@@ -71,7 +211,31 @@ export class ClientHTTPTransport {
|
|
|
71
211
|
}
|
|
72
212
|
}
|
|
73
213
|
async flush() {
|
|
74
|
-
if (this.
|
|
214
|
+
if (this.buffer.length === 0 || this.isDestroyed) {
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
// If offline, persist to storage instead of sending
|
|
218
|
+
if (!this.isOnline) {
|
|
219
|
+
if (this.offlineEnabled) {
|
|
220
|
+
this.persistOfflineQueue();
|
|
221
|
+
}
|
|
222
|
+
return;
|
|
223
|
+
}
|
|
224
|
+
// If already flushing, queue this flush request
|
|
225
|
+
if (this.isFlushing) {
|
|
226
|
+
if (!this.pendingFlush) {
|
|
227
|
+
this.pendingFlush = true;
|
|
228
|
+
this.flushQueue = this.flushQueue.then(() => {
|
|
229
|
+
this.pendingFlush = false;
|
|
230
|
+
return this.doFlush();
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
return this.flushQueue;
|
|
234
|
+
}
|
|
235
|
+
return this.doFlush();
|
|
236
|
+
}
|
|
237
|
+
async doFlush() {
|
|
238
|
+
if (this.buffer.length === 0 || this.isDestroyed || this.isFlushing) {
|
|
75
239
|
return;
|
|
76
240
|
}
|
|
77
241
|
this.isFlushing = true;
|
|
@@ -90,6 +254,10 @@ export class ClientHTTPTransport {
|
|
|
90
254
|
this.buffer.splice(this.maxBufferSize);
|
|
91
255
|
this.onDrop?.(excess);
|
|
92
256
|
}
|
|
257
|
+
// If send failed, might be network issue - persist to offline queue
|
|
258
|
+
if (this.offlineEnabled) {
|
|
259
|
+
this.persistOfflineQueue();
|
|
260
|
+
}
|
|
93
261
|
this.onFlushError?.(error instanceof Error ? error : new Error(String(error)));
|
|
94
262
|
}
|
|
95
263
|
finally {
|
|
@@ -124,16 +292,45 @@ export class ClientHTTPTransport {
|
|
|
124
292
|
}
|
|
125
293
|
async destroy() {
|
|
126
294
|
this.isDestroyed = true;
|
|
295
|
+
// Remove network event listeners
|
|
296
|
+
if (typeof window !== 'undefined') {
|
|
297
|
+
window.removeEventListener('online', this.boundOnlineHandler);
|
|
298
|
+
window.removeEventListener('offline', this.boundOfflineHandler);
|
|
299
|
+
}
|
|
127
300
|
if (this.flushTimer) {
|
|
128
301
|
clearInterval(this.flushTimer);
|
|
129
302
|
this.flushTimer = null;
|
|
130
303
|
}
|
|
131
|
-
//
|
|
132
|
-
if (this.buffer.length > 0) {
|
|
304
|
+
// Persist remaining buffer to offline storage
|
|
305
|
+
if (this.offlineEnabled && this.buffer.length > 0) {
|
|
306
|
+
this.persistOfflineQueue();
|
|
307
|
+
}
|
|
308
|
+
// Final flush attempt if online
|
|
309
|
+
if (this.buffer.length > 0 && this.isOnline) {
|
|
133
310
|
this.isFlushing = false; // Reset to allow final flush
|
|
134
311
|
await this.flush();
|
|
135
312
|
}
|
|
136
313
|
}
|
|
314
|
+
/**
|
|
315
|
+
* Get current online status
|
|
316
|
+
*/
|
|
317
|
+
getOnlineStatus() {
|
|
318
|
+
return this.isOnline;
|
|
319
|
+
}
|
|
320
|
+
/**
|
|
321
|
+
* Get current buffer size
|
|
322
|
+
*/
|
|
323
|
+
getBufferSize() {
|
|
324
|
+
return this.buffer.length;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Manually trigger offline queue persistence
|
|
328
|
+
*/
|
|
329
|
+
persistNow() {
|
|
330
|
+
if (this.offlineEnabled) {
|
|
331
|
+
this.persistOfflineQueue();
|
|
332
|
+
}
|
|
333
|
+
}
|
|
137
334
|
}
|
|
138
335
|
/**
|
|
139
336
|
* Create a client HTTP transport with default configuration
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/client/transport.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AA4CZ;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IACtB,IAAI,CAAQ;IACZ,MAAM,CAAiB;IAExB,GAAG,CAAQ;IACX,SAAS,CAAQ;IACjB,aAAa,CAAQ;IACrB,UAAU,CAAQ;IAClB,UAAU,CAAQ;IAClB,cAAc,CAAa;IAC3B,YAAY,CAAyB;IACrC,MAAM,CAA0B;IAExC,uBAAuB;IACf,cAAc,CAAS;IACvB,iBAAiB,CAAQ;IACzB,cAAc,CAAQ;IACtB,gBAAgB,CAA0B;IAC1C,gBAAgB,CAA0B;IAE1C,MAAM,GAAe,EAAE,CAAA;IACvB,UAAU,GAA0C,IAAI,CAAA;IACxD,UAAU,GAAG,KAAK,CAAA;IAClB,WAAW,GAAG,KAAK,CAAA;IACnB,aAAa,GAAG,GAAG,CAAA;IACnB,QAAQ,GAAG,IAAI,CAAA;IACf,kBAAkB,CAAY;IAC9B,mBAAmB,CAAY;IAC/B,UAAU,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAA;IAC7C,YAAY,GAAG,KAAK,CAAA;IAE5B,YAAY,MAAiC;QAC5C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI,EAAE,CAAA;QACpE,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;QACrB,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAA;QACvC,IAAI,CAAC,aAAa,GAAG,MAAM,CAAC,aAAa,IAAI,IAAI,CAAA;QACjD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAA;QACxC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,IAAI,CAAA;QAC3C,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,CAAA;QAC3C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;QAE3B,yBAAyB;QACzB,MAAM,aAAa,GAAG,MAAM,CAAC,YAAY,IAAI,EAAE,CAAA;QAC/C,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,OAAO,IAAI,IAAI,CAAA;QACnD,IAAI,CAAC,iBAAiB,GAAG,aAAa,CAAC,UAAU,IAAI,sBAAsB,CAAA;QAC3E,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,OAAO,IAAI,IAAI,CAAA;QACnD,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAA;QAC/C,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,SAAS,CAAA;QAE/C,mFAAmF;QACnF,IAAI,CAAC,QAAQ;YACZ,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAA;QAE7F,4BAA4B;QAC5B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,IAAI;QACT,+BAA+B;QAC/B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC3B,CAAC;QAED,oCAAoC;QACpC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC1D,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAC7D,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;YAClC,IAAI,CAAC,KAAK,EAAE,CAAA;QACb,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,CAAA;IACvB,CAAC;IAEO,YAAY;QACnB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QACpB,oCAAoC;QACpC,IAAI,CAAC,KAAK,EAAE,CAAA;IACb,CAAC;IAEO,aAAa;QACpB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QACrB,4CAA4C;QAC5C,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC3B,CAAC;IACF,CAAC;IAEO,mBAAmB;QAC1B,IAAI,OAAO,YAAY,KAAK,WAAW;YAAE,OAAM;QAE/C,IAAI,CAAC;YACJ,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC3D,IAAI,CAAC,MAAM;gBAAE,OAAM;YAEnB,MAAM,OAAO,GAAe,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAC9C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAE3D,kDAAkD;YAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;YAE/B,0BAA0B;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;gBACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAA;YACtB,CAAC;YAED,qBAAqB;YACrB,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAE/C,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC;YACR,iCAAiC;QAClC,CAAC;IACF,CAAC;IAEO,mBAAmB;QAC1B,IAAI,OAAO,YAAY,KAAK,WAAW;YAAE,OAAM;QAE/C,IAAI,CAAC;YACJ,oDAAoD;YACpD,IAAI,OAAO,GAAe,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;YAE1C,MAAM,cAAc,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YACnE,IAAI,cAAc,EAAE,CAAC;gBACpB,IAAI,CAAC;oBACJ,MAAM,QAAQ,GAAe,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAA;oBACvD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAC7B,OAAO,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,OAAO,CAAC,CAAA;oBACpC,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,sBAAsB;gBACvB,CAAC;YACF,CAAC;YAED,mBAAmB;YACnB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAA;gBACnD,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC/B,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAA;YACtB,CAAC;YAED,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;YACzE,IAAI,CAAC,gBAAgB,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACxC,CAAC;QAAC,MAAM,CAAC;YACR,iCAAiC;QAClC,CAAC;IACF,CAAC;IAED;;;OAGG;IACK,mBAAmB,CAAC,GAAW,EAAE,KAAa;QACrD,IAAI,CAAC;YACJ,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;YAChC,OAAO,IAAI,CAAA;QACZ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,4BAA4B;YAC5B,IACC,KAAK,YAAY,KAAK;gBACtB,CAAC,KAAK,CAAC,IAAI,KAAK,oBAAoB;oBACnC,KAAK,CAAC,IAAI,KAAK,4BAA4B;oBAC3C,0BAA0B;oBAC1B,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAChC,CAAC;gBACF,8CAA8C;gBAC9C,IAAI,CAAC;oBACJ,MAAM,MAAM,GAAe,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;oBAC5C,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBAChD,wCAAwC;wBACxC,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;wBAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;wBACnD,IAAI,CAAC,MAAM,EAAE,CAAC,YAAY,CAAC,CAAA;wBAE3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;4BACxB,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;wBAC9D,CAAC;oBACF,CAAC;gBACF,CAAC;gBAAC,MAAM,CAAC;oBACR,uCAAuC;oBACvC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;gBAC7B,CAAC;YACF,CAAC;YACD,OAAO,KAAK,CAAA;QACb,CAAC;IACF,CAAC;IAED,GAAG,CAAC,KAAe;QAClB,IAAI,IAAI,CAAC,WAAW;YAAE,OAAM;QAE5B,8BAA8B;QAC9B,MAAM,aAAa,GAAa;YAC/B,GAAG,KAAK;YACR,QAAQ,EAAE;gBACT,GAAG,KAAK,CAAC,QAAQ;gBACjB,OAAO,EAAE;oBACR,GAAG,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;oBACrE,QAAQ,EAAE,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;oBAC9E,SAAS,EACR,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;iBACjF;aACD;SACD,CAAA;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAC9C,sBAAsB;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,CAAA;YACpD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,CAAA;YAChC,IAAI,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAA;QACzB,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QAE/B,mCAAmC;QACnC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAA;QACb,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAK;QACV,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAClD,OAAM;QACP,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAC3B,CAAC;YACD,OAAM;QACP,CAAC;QAED,gDAAgD;QAChD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBACxB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;gBACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE;oBAC3C,IAAI,CAAC,YAAY,GAAG,KAAK,CAAA;oBACzB,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;gBACtB,CAAC,CAAC,CAAA;YACH,CAAC;YACD,OAAO,IAAI,CAAC,UAAU,CAAA;QACvB,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,EAAE,CAAA;IACtB,CAAC;IAEO,KAAK,CAAC,OAAO;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrE,OAAM;QACP,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACtB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAA;QAChC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAEhB,IAAI,CAAC;YACJ,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YACjC,IAAI,CAAC,cAAc,EAAE,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,iDAAiD;YACjD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,CAAA;YAE/B,8BAA8B;YAC9B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;gBAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;gBACtD,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;gBACtC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAA;YACtB,CAAC;YAED,oEAAoE;YACpE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACzB,IAAI,CAAC,mBAAmB,EAAE,CAAA;YAC3B,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QAC/E,CAAC;gBAAS,CAAC;YACV,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QACxB,CAAC;IACF,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,OAAmB;QAC9C,IAAI,SAAS,GAAiB,IAAI,CAAA;QAElC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;YAC5D,IAAI,CAAC;gBACJ,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE;oBACtC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC;oBACjC,SAAS,EAAE,IAAI,EAAE,6BAA6B;iBAC9C,CAAC,CAAA;gBAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;gBACnE,CAAC;gBAED,OAAM;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBAChB,SAAS,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBAErE,8BAA8B;gBAC9B,IAAI,OAAO,GAAG,IAAI,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnC,sBAAsB;oBACtB,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAA;gBACxE,CAAC;YACF,CAAC;QACF,CAAC;QAED,MAAM,SAAS,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QAEvB,iCAAiC;QACjC,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;YACnC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,CAAC,CAAA;YAC7D,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAAA;QAChE,CAAC;QAED,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QACvB,CAAC;QAED,8CAA8C;QAC9C,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnD,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC3B,CAAC;QAED,gCAAgC;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC7C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA,CAAC,6BAA6B;YACrD,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;QACnB,CAAC;IACF,CAAC;IAED;;OAEG;IACH,eAAe;QACd,OAAO,IAAI,CAAC,QAAQ,CAAA;IACrB,CAAC;IAED;;OAEG;IACH,aAAa;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,UAAU;QACT,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACzB,IAAI,CAAC,mBAAmB,EAAE,CAAA;QAC3B,CAAC;IACF,CAAC;CACD;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACpC,UAA8C,EAAE;IAEhD,OAAO,IAAI,mBAAmB,CAAC;QAC9B,IAAI,EAAE,eAAe;QACrB,GAAG,EAAE,aAAa;QAClB,GAAG,OAAO;KACV,CAAC,CAAA;AACH,CAAC"}
|
package/dist/client.d.ts
CHANGED
|
@@ -39,5 +39,6 @@
|
|
|
39
39
|
*/
|
|
40
40
|
export { VestigProvider, useVestigContext, type VestigProviderProps } from './client/provider';
|
|
41
41
|
export { useLogger, useCorrelationContext, useVestigConnection, useComponentLogger, useRenderLogger, } from './client/hooks';
|
|
42
|
-
export {
|
|
42
|
+
export { VestigErrorBoundary, addBreadcrumb, getBreadcrumbs, clearBreadcrumbs, type VestigErrorBoundaryProps, type Breadcrumb, } from './client/error-boundary';
|
|
43
|
+
export { ClientHTTPTransport, createClientTransport, type ClientHTTPTransportConfig, type OfflineQueueConfig, } from './client/transport';
|
|
43
44
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAG9F,OAAO,EACN,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GACf,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,yBAAyB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAGH,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAG9F,OAAO,EACN,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GACf,MAAM,gBAAgB,CAAA;AAGvB,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,KAAK,wBAAwB,EAC7B,KAAK,UAAU,GACf,MAAM,yBAAyB,CAAA;AAGhC,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,yBAAyB,EAC9B,KAAK,kBAAkB,GACvB,MAAM,oBAAoB,CAAA"}
|
package/dist/client.js
CHANGED
|
@@ -42,6 +42,8 @@
|
|
|
42
42
|
export { VestigProvider, useVestigContext } from './client/provider';
|
|
43
43
|
// Hooks
|
|
44
44
|
export { useLogger, useCorrelationContext, useVestigConnection, useComponentLogger, useRenderLogger, } from './client/hooks';
|
|
45
|
+
// Error Boundary
|
|
46
|
+
export { VestigErrorBoundary, addBreadcrumb, getBreadcrumbs, clearBreadcrumbs, } from './client/error-boundary';
|
|
45
47
|
// Transport (for advanced use cases)
|
|
46
48
|
export { ClientHTTPTransport, createClientTransport, } from './client/transport';
|
|
47
49
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA4B,MAAM,mBAAmB,CAAA;AAE9F,QAAQ;AACR,OAAO,EACN,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GACf,MAAM,gBAAgB,CAAA;AAEvB,qCAAqC;AACrC,OAAO,EACN,mBAAmB,EACnB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAA4B,MAAM,mBAAmB,CAAA;AAE9F,QAAQ;AACR,OAAO,EACN,SAAS,EACT,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GACf,MAAM,gBAAgB,CAAA;AAEvB,iBAAiB;AACjB,OAAO,EACN,mBAAmB,EACnB,aAAa,EACb,cAAc,EACd,gBAAgB,GAGhB,MAAM,yBAAyB,CAAA;AAEhC,qCAAqC;AACrC,OAAO,EACN,mBAAmB,EACnB,qBAAqB,GAGrB,MAAM,oBAAoB,CAAA"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drizzle Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides a custom logger for Drizzle ORM that integrates with Vestig.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // lib/db.ts
|
|
9
|
+
* import { drizzle } from 'drizzle-orm/postgres-js'
|
|
10
|
+
* import postgres from 'postgres'
|
|
11
|
+
* import { createVestigDrizzleLogger } from '@vestig/next/db'
|
|
12
|
+
*
|
|
13
|
+
* const client = postgres(process.env.DATABASE_URL!)
|
|
14
|
+
* export const db = drizzle(client, {
|
|
15
|
+
* logger: createVestigDrizzleLogger(),
|
|
16
|
+
* })
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @packageDocumentation
|
|
20
|
+
*/
|
|
21
|
+
import type { Logger as VestigLogger } from 'vestig';
|
|
22
|
+
import type { DbLoggerConfig, DrizzleLogger } from './types';
|
|
23
|
+
/**
|
|
24
|
+
* Options for Vestig Drizzle logger
|
|
25
|
+
*/
|
|
26
|
+
export interface VestigDrizzleLoggerOptions extends DbLoggerConfig {
|
|
27
|
+
/**
|
|
28
|
+
* Logger instance to use
|
|
29
|
+
* If not provided, will use console-based logging
|
|
30
|
+
*/
|
|
31
|
+
logger?: VestigLogger;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Create a Drizzle-compatible logger that integrates with Vestig
|
|
35
|
+
*
|
|
36
|
+
* @example Basic usage
|
|
37
|
+
* ```typescript
|
|
38
|
+
* import { drizzle } from 'drizzle-orm/postgres-js'
|
|
39
|
+
* import { createVestigDrizzleLogger } from '@vestig/next/db'
|
|
40
|
+
*
|
|
41
|
+
* const db = drizzle(client, {
|
|
42
|
+
* logger: createVestigDrizzleLogger(),
|
|
43
|
+
* })
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* @example With Vestig logger
|
|
47
|
+
* ```typescript
|
|
48
|
+
* import { createLogger } from 'vestig'
|
|
49
|
+
* import { createVestigDrizzleLogger } from '@vestig/next/db'
|
|
50
|
+
*
|
|
51
|
+
* const logger = createLogger({ namespace: 'app' })
|
|
52
|
+
*
|
|
53
|
+
* const db = drizzle(client, {
|
|
54
|
+
* logger: createVestigDrizzleLogger({
|
|
55
|
+
* logger,
|
|
56
|
+
* slowQueryThreshold: 200,
|
|
57
|
+
* logLevel: 'slow', // Only log slow queries
|
|
58
|
+
* }),
|
|
59
|
+
* })
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* @example With custom callback
|
|
63
|
+
* ```typescript
|
|
64
|
+
* const db = drizzle(client, {
|
|
65
|
+
* logger: createVestigDrizzleLogger({
|
|
66
|
+
* onQuery: (entry) => {
|
|
67
|
+
* // Send to analytics, APM, etc.
|
|
68
|
+
* if (entry.isSlow) {
|
|
69
|
+
* sendToAPM(entry)
|
|
70
|
+
* }
|
|
71
|
+
* },
|
|
72
|
+
* }),
|
|
73
|
+
* })
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export declare function createVestigDrizzleLogger(options?: VestigDrizzleLoggerOptions): DrizzleLogger;
|
|
77
|
+
/**
|
|
78
|
+
* Create a Drizzle logger that measures actual query duration
|
|
79
|
+
*
|
|
80
|
+
* This is a more accurate version that wraps your database client
|
|
81
|
+
* to measure actual query execution time.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```typescript
|
|
85
|
+
* import { drizzle } from 'drizzle-orm/postgres-js'
|
|
86
|
+
* import { withVestigDrizzle } from '@vestig/next/db'
|
|
87
|
+
*
|
|
88
|
+
* const client = postgres(process.env.DATABASE_URL!)
|
|
89
|
+
* const { db, logger } = withVestigDrizzle(
|
|
90
|
+
* (logger) => drizzle(client, { logger }),
|
|
91
|
+
* { slowQueryThreshold: 100 }
|
|
92
|
+
* )
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
export declare function createDrizzleQueryLogger(options?: VestigDrizzleLoggerOptions): {
|
|
96
|
+
log: (query: string, params: unknown[], durationMs: number) => void;
|
|
97
|
+
config: Required<DbLoggerConfig>;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Utility to wrap any async function with query timing
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* import { measureQuery } from '@vestig/next/db'
|
|
105
|
+
*
|
|
106
|
+
* const result = await measureQuery(
|
|
107
|
+
* () => db.select().from(users).where(eq(users.id, 1)),
|
|
108
|
+
* 'SELECT * FROM users WHERE id = ?',
|
|
109
|
+
* [1],
|
|
110
|
+
* { logger }
|
|
111
|
+
* )
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export declare function measureQuery<T>(queryFn: () => Promise<T>, query: string, params?: unknown[], options?: VestigDrizzleLoggerOptions): Promise<T>;
|
|
115
|
+
//# sourceMappingURL=drizzle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.d.ts","sourceRoot":"","sources":["../../src/db/drizzle.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,QAAQ,CAAA;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,cAAc;IACjE;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAA;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,GAAE,0BAA+B,GAAG,aAAa,CAiDjG;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,0BAA+B;iBAO5D,MAAM,UAAU,OAAO,EAAE,cAAc,MAAM,KAAG,IAAI;;EAsBxE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAAC,CAAC,EACnC,OAAO,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,GAAE,OAAO,EAAO,EACtB,OAAO,GAAE,0BAA+B,GACtC,OAAO,CAAC,CAAC,CAAC,CAcZ"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Drizzle Integration
|
|
3
|
+
*
|
|
4
|
+
* Provides a custom logger for Drizzle ORM that integrates with Vestig.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // lib/db.ts
|
|
9
|
+
* import { drizzle } from 'drizzle-orm/postgres-js'
|
|
10
|
+
* import postgres from 'postgres'
|
|
11
|
+
* import { createVestigDrizzleLogger } from '@vestig/next/db'
|
|
12
|
+
*
|
|
13
|
+
* const client = postgres(process.env.DATABASE_URL!)
|
|
14
|
+
* export const db = drizzle(client, {
|
|
15
|
+
* logger: createVestigDrizzleLogger(),
|
|
16
|
+
* })
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* @packageDocumentation
|
|
20
|
+
*/
|
|
21
|
+
import { createQueryLogEntry, formatDuration, logQuery, mergeConfig } from './query-logger';
|
|
22
|
+
/**
|
|
23
|
+
* Create a Drizzle-compatible logger that integrates with Vestig
|
|
24
|
+
*
|
|
25
|
+
* @example Basic usage
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { drizzle } from 'drizzle-orm/postgres-js'
|
|
28
|
+
* import { createVestigDrizzleLogger } from '@vestig/next/db'
|
|
29
|
+
*
|
|
30
|
+
* const db = drizzle(client, {
|
|
31
|
+
* logger: createVestigDrizzleLogger(),
|
|
32
|
+
* })
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example With Vestig logger
|
|
36
|
+
* ```typescript
|
|
37
|
+
* import { createLogger } from 'vestig'
|
|
38
|
+
* import { createVestigDrizzleLogger } from '@vestig/next/db'
|
|
39
|
+
*
|
|
40
|
+
* const logger = createLogger({ namespace: 'app' })
|
|
41
|
+
*
|
|
42
|
+
* const db = drizzle(client, {
|
|
43
|
+
* logger: createVestigDrizzleLogger({
|
|
44
|
+
* logger,
|
|
45
|
+
* slowQueryThreshold: 200,
|
|
46
|
+
* logLevel: 'slow', // Only log slow queries
|
|
47
|
+
* }),
|
|
48
|
+
* })
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @example With custom callback
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const db = drizzle(client, {
|
|
54
|
+
* logger: createVestigDrizzleLogger({
|
|
55
|
+
* onQuery: (entry) => {
|
|
56
|
+
* // Send to analytics, APM, etc.
|
|
57
|
+
* if (entry.isSlow) {
|
|
58
|
+
* sendToAPM(entry)
|
|
59
|
+
* }
|
|
60
|
+
* },
|
|
61
|
+
* }),
|
|
62
|
+
* })
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export function createVestigDrizzleLogger(options = {}) {
|
|
66
|
+
const config = mergeConfig(options);
|
|
67
|
+
const logger = options.logger;
|
|
68
|
+
// Track query start times for duration calculation
|
|
69
|
+
const queryTimings = new Map();
|
|
70
|
+
return {
|
|
71
|
+
logQuery(query, params) {
|
|
72
|
+
// Drizzle calls logQuery at the start, so we need to track timing ourselves
|
|
73
|
+
// For simplicity, we'll estimate duration as 0 and rely on actual timing if available
|
|
74
|
+
// In practice, Drizzle doesn't provide duration, so we measure it
|
|
75
|
+
const startTime = performance.now();
|
|
76
|
+
const queryKey = `${query}-${JSON.stringify(params)}-${startTime}`;
|
|
77
|
+
// Store start time
|
|
78
|
+
queryTimings.set(queryKey, startTime);
|
|
79
|
+
// Use setTimeout to estimate duration (hacky but works for logging purposes)
|
|
80
|
+
// In real usage, the actual query runs after logQuery is called
|
|
81
|
+
setTimeout(() => {
|
|
82
|
+
const duration = performance.now() - startTime;
|
|
83
|
+
queryTimings.delete(queryKey);
|
|
84
|
+
const entry = createQueryLogEntry(query, params, duration, config);
|
|
85
|
+
if (logger) {
|
|
86
|
+
const nsLogger = logger.child(config.namespace);
|
|
87
|
+
logQuery(nsLogger, entry, config);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
// Fallback to console
|
|
91
|
+
if (entry.isSlow) {
|
|
92
|
+
console.warn(`[${config.namespace}] Slow query:`, entry.query, `(${formatDuration(entry.duration)})`);
|
|
93
|
+
}
|
|
94
|
+
else if (config.logLevel === 'all') {
|
|
95
|
+
console.debug(`[${config.namespace}]`, entry.query, `(${formatDuration(entry.duration)})`);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}, 0);
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a Drizzle logger that measures actual query duration
|
|
104
|
+
*
|
|
105
|
+
* This is a more accurate version that wraps your database client
|
|
106
|
+
* to measure actual query execution time.
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* import { drizzle } from 'drizzle-orm/postgres-js'
|
|
111
|
+
* import { withVestigDrizzle } from '@vestig/next/db'
|
|
112
|
+
*
|
|
113
|
+
* const client = postgres(process.env.DATABASE_URL!)
|
|
114
|
+
* const { db, logger } = withVestigDrizzle(
|
|
115
|
+
* (logger) => drizzle(client, { logger }),
|
|
116
|
+
* { slowQueryThreshold: 100 }
|
|
117
|
+
* )
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
export function createDrizzleQueryLogger(options = {}) {
|
|
121
|
+
const config = mergeConfig(options);
|
|
122
|
+
const vestigLogger = options.logger;
|
|
123
|
+
/**
|
|
124
|
+
* Log a query with explicit timing
|
|
125
|
+
*/
|
|
126
|
+
function log(query, params, durationMs) {
|
|
127
|
+
const entry = createQueryLogEntry(query, params, durationMs, config);
|
|
128
|
+
if (vestigLogger) {
|
|
129
|
+
const nsLogger = vestigLogger.child(config.namespace);
|
|
130
|
+
logQuery(nsLogger, entry, config);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
if (entry.isSlow) {
|
|
134
|
+
console.warn(`[${config.namespace}] Slow query:`, entry.query, `(${formatDuration(entry.duration)})`);
|
|
135
|
+
}
|
|
136
|
+
else if (config.logLevel === 'all') {
|
|
137
|
+
console.debug(`[${config.namespace}]`, entry.query, `(${formatDuration(entry.duration)})`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
config.onQuery(entry);
|
|
141
|
+
}
|
|
142
|
+
return { log, config };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Utility to wrap any async function with query timing
|
|
146
|
+
*
|
|
147
|
+
* @example
|
|
148
|
+
* ```typescript
|
|
149
|
+
* import { measureQuery } from '@vestig/next/db'
|
|
150
|
+
*
|
|
151
|
+
* const result = await measureQuery(
|
|
152
|
+
* () => db.select().from(users).where(eq(users.id, 1)),
|
|
153
|
+
* 'SELECT * FROM users WHERE id = ?',
|
|
154
|
+
* [1],
|
|
155
|
+
* { logger }
|
|
156
|
+
* )
|
|
157
|
+
* ```
|
|
158
|
+
*/
|
|
159
|
+
export async function measureQuery(queryFn, query, params = [], options = {}) {
|
|
160
|
+
const { log } = createDrizzleQueryLogger(options);
|
|
161
|
+
const start = performance.now();
|
|
162
|
+
try {
|
|
163
|
+
const result = await queryFn();
|
|
164
|
+
const duration = performance.now() - start;
|
|
165
|
+
log(query, params, duration);
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
const duration = performance.now() - start;
|
|
170
|
+
log(query, params, duration);
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
//# sourceMappingURL=drizzle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drizzle.js","sourceRoot":"","sources":["../../src/db/drizzle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vestig/next/db - Database Query Logging
|
|
3
|
+
*
|
|
4
|
+
* This module provides database query logging integrations
|
|
5
|
+
* for Prisma and Drizzle ORMs.
|
|
6
|
+
*
|
|
7
|
+
* @example Prisma Integration
|
|
8
|
+
* ```typescript
|
|
9
|
+
* // lib/db.ts
|
|
10
|
+
* import { PrismaClient } from '@prisma/client'
|
|
11
|
+
* import { withVestigPrisma, createPrismaLogConfig } from '@vestig/next/db'
|
|
12
|
+
* import { createLogger } from 'vestig'
|
|
13
|
+
*
|
|
14
|
+
* const logger = createLogger({ namespace: 'app' })
|
|
15
|
+
*
|
|
16
|
+
* const prisma = withVestigPrisma(
|
|
17
|
+
* new PrismaClient({ log: createPrismaLogConfig() }),
|
|
18
|
+
* { logger, slowQueryThreshold: 100 }
|
|
19
|
+
* )
|
|
20
|
+
*
|
|
21
|
+
* export { prisma }
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @example Drizzle Integration
|
|
25
|
+
* ```typescript
|
|
26
|
+
* // lib/db.ts
|
|
27
|
+
* import { drizzle } from 'drizzle-orm/postgres-js'
|
|
28
|
+
* import postgres from 'postgres'
|
|
29
|
+
* import { createVestigDrizzleLogger } from '@vestig/next/db'
|
|
30
|
+
* import { createLogger } from 'vestig'
|
|
31
|
+
*
|
|
32
|
+
* const logger = createLogger({ namespace: 'app' })
|
|
33
|
+
* const client = postgres(process.env.DATABASE_URL!)
|
|
34
|
+
*
|
|
35
|
+
* export const db = drizzle(client, {
|
|
36
|
+
* logger: createVestigDrizzleLogger({
|
|
37
|
+
* logger,
|
|
38
|
+
* slowQueryThreshold: 100,
|
|
39
|
+
* }),
|
|
40
|
+
* })
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @packageDocumentation
|
|
44
|
+
*/
|
|
45
|
+
export { withVestigPrisma, createPrismaQueryHandler, createPrismaLogConfig, type VestigPrismaOptions, } from './prisma';
|
|
46
|
+
export { createVestigDrizzleLogger, createDrizzleQueryLogger, measureQuery, type VestigDrizzleLoggerOptions, } from './drizzle';
|
|
47
|
+
export { formatDuration, createQueryLogEntry, logQuery, mergeConfig } from './query-logger';
|
|
48
|
+
export type { QueryLogEntry, DbLoggerConfig, PrismaQueryEvent, PrismaLogEvent, DrizzleLogger, } from './types';
|
|
49
|
+
//# sourceMappingURL=index.d.ts.map
|