vestig 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/dist/config.d.ts +19 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +80 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/context/correlation.d.ts +26 -0
  6. package/dist/context/correlation.d.ts.map +1 -0
  7. package/dist/context/correlation.js +53 -0
  8. package/dist/context/correlation.js.map +1 -0
  9. package/dist/context/index.d.ts +20 -0
  10. package/dist/context/index.d.ts.map +1 -0
  11. package/dist/context/index.js +122 -0
  12. package/dist/context/index.js.map +1 -0
  13. package/dist/index.d.ts +22 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +27 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/levels.d.ts +14 -0
  18. package/dist/levels.d.ts.map +1 -0
  19. package/dist/levels.js +28 -0
  20. package/dist/levels.js.map +1 -0
  21. package/dist/logger.d.ts +82 -0
  22. package/dist/logger.d.ts.map +1 -0
  23. package/dist/logger.js +267 -0
  24. package/dist/logger.js.map +1 -0
  25. package/dist/runtime.d.ts +29 -0
  26. package/dist/runtime.d.ts.map +1 -0
  27. package/dist/runtime.js +72 -0
  28. package/dist/runtime.js.map +1 -0
  29. package/dist/transports/batch.d.ts +69 -0
  30. package/dist/transports/batch.d.ts.map +1 -0
  31. package/dist/transports/batch.js +157 -0
  32. package/dist/transports/batch.js.map +1 -0
  33. package/dist/transports/console.d.ts +27 -0
  34. package/dist/transports/console.d.ts.map +1 -0
  35. package/dist/transports/console.js +82 -0
  36. package/dist/transports/console.js.map +1 -0
  37. package/dist/transports/datadog.d.ts +57 -0
  38. package/dist/transports/datadog.d.ts.map +1 -0
  39. package/dist/transports/datadog.js +173 -0
  40. package/dist/transports/datadog.js.map +1 -0
  41. package/dist/transports/file.d.ts +59 -0
  42. package/dist/transports/file.d.ts.map +1 -0
  43. package/dist/transports/file.js +167 -0
  44. package/dist/transports/file.js.map +1 -0
  45. package/dist/transports/http.d.ts +49 -0
  46. package/dist/transports/http.d.ts.map +1 -0
  47. package/dist/transports/http.js +106 -0
  48. package/dist/transports/http.js.map +1 -0
  49. package/dist/types.d.ts +224 -0
  50. package/dist/types.d.ts.map +1 -0
  51. package/dist/types.js +2 -0
  52. package/dist/types.js.map +1 -0
  53. package/dist/utils/buffer.d.ts +62 -0
  54. package/dist/utils/buffer.d.ts.map +1 -0
  55. package/dist/utils/buffer.js +110 -0
  56. package/dist/utils/buffer.js.map +1 -0
  57. package/dist/utils/error.d.ts +14 -0
  58. package/dist/utils/error.d.ts.map +1 -0
  59. package/dist/utils/error.js +92 -0
  60. package/dist/utils/error.js.map +1 -0
  61. package/dist/utils/sanitize-presets.d.ts +54 -0
  62. package/dist/utils/sanitize-presets.d.ts.map +1 -0
  63. package/dist/utils/sanitize-presets.js +245 -0
  64. package/dist/utils/sanitize-presets.js.map +1 -0
  65. package/dist/utils/sanitize.d.ts +75 -0
  66. package/dist/utils/sanitize.d.ts.map +1 -0
  67. package/dist/utils/sanitize.js +216 -0
  68. package/dist/utils/sanitize.js.map +1 -0
  69. package/package.json +76 -0
@@ -0,0 +1,106 @@
1
+ import { BatchTransport } from './batch';
2
+ /**
3
+ * Default HTTP transport configuration
4
+ */
5
+ const DEFAULTS = {
6
+ method: 'POST',
7
+ timeout: 30000,
8
+ headers: {
9
+ 'Content-Type': 'application/json',
10
+ },
11
+ };
12
+ /**
13
+ * HTTP transport for sending logs to external services
14
+ *
15
+ * Supports any runtime with native fetch (Node 18+, Bun, Deno, Edge, Browser).
16
+ * Features batching, retry logic, custom headers, and payload transformation.
17
+ *
18
+ * @example
19
+ * ```typescript
20
+ * const transport = new HTTPTransport({
21
+ * name: 'my-http',
22
+ * url: 'https://logs.example.com/ingest',
23
+ * headers: {
24
+ * 'Authorization': 'Bearer my-token',
25
+ * },
26
+ * transform: (entries) => ({
27
+ * logs: entries,
28
+ * timestamp: Date.now(),
29
+ * }),
30
+ * })
31
+ * ```
32
+ */
33
+ export class HTTPTransport extends BatchTransport {
34
+ name;
35
+ url;
36
+ method;
37
+ headers;
38
+ timeout;
39
+ transform;
40
+ constructor(config) {
41
+ super({
42
+ ...config,
43
+ name: config.name ?? 'http',
44
+ });
45
+ this.name = config.name ?? 'http';
46
+ this.url = config.url;
47
+ this.method = config.method ?? DEFAULTS.method;
48
+ this.headers = { ...DEFAULTS.headers, ...config.headers };
49
+ this.timeout = config.timeout ?? DEFAULTS.timeout;
50
+ this.transform = config.transform;
51
+ }
52
+ /**
53
+ * Send entries to the configured URL
54
+ */
55
+ async send(entries) {
56
+ const payload = this.transform ? this.transform(entries) : entries;
57
+ const body = JSON.stringify(payload);
58
+ const controller = new AbortController();
59
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
60
+ try {
61
+ const response = await fetch(this.url, {
62
+ method: this.method,
63
+ headers: this.headers,
64
+ body,
65
+ signal: controller.signal,
66
+ });
67
+ if (!response.ok) {
68
+ throw new HTTPTransportError(`HTTP ${response.status}: ${response.statusText}`, response.status, await this.safeReadBody(response));
69
+ }
70
+ }
71
+ catch (err) {
72
+ if (err instanceof Error && err.name === 'AbortError') {
73
+ throw new HTTPTransportError(`Request timeout after ${this.timeout}ms`, 408);
74
+ }
75
+ throw err;
76
+ }
77
+ finally {
78
+ clearTimeout(timeoutId);
79
+ }
80
+ }
81
+ /**
82
+ * Safely read response body for error messages
83
+ */
84
+ async safeReadBody(response) {
85
+ try {
86
+ return await response.text();
87
+ }
88
+ catch {
89
+ return undefined;
90
+ }
91
+ }
92
+ }
93
+ /**
94
+ * Custom error for HTTP transport failures
95
+ */
96
+ export class HTTPTransportError extends Error {
97
+ statusCode;
98
+ responseBody;
99
+ constructor(message, statusCode, responseBody) {
100
+ super(message);
101
+ this.statusCode = statusCode;
102
+ this.responseBody = responseBody;
103
+ this.name = 'HTTPTransportError';
104
+ }
105
+ }
106
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transports/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,224 @@
1
+ /**
2
+ * Log levels from least to most severe
3
+ */
4
+ export type LogLevel = 'trace' | 'debug' | 'info' | 'warn' | 'error';
5
+ /**
6
+ * Runtime environment detection
7
+ */
8
+ export type Runtime = 'node' | 'bun' | 'edge' | 'browser' | 'worker' | 'unknown';
9
+ /**
10
+ * Metadata attached to log entries
11
+ */
12
+ export type LogMetadata = Record<string, unknown>;
13
+ /**
14
+ * Context that persists across async operations
15
+ */
16
+ export interface LogContext {
17
+ requestId?: string;
18
+ traceId?: string;
19
+ spanId?: string;
20
+ userId?: string;
21
+ sessionId?: string;
22
+ [key: string]: unknown;
23
+ }
24
+ /**
25
+ * A structured log entry
26
+ */
27
+ export interface LogEntry {
28
+ timestamp: string;
29
+ level: LogLevel;
30
+ message: string;
31
+ metadata?: LogMetadata;
32
+ context?: LogContext;
33
+ runtime: Runtime;
34
+ namespace?: string;
35
+ error?: SerializedError;
36
+ }
37
+ /**
38
+ * Serialized error with cause chain support
39
+ */
40
+ export interface SerializedError {
41
+ name: string;
42
+ message: string;
43
+ stack?: string;
44
+ cause?: SerializedError;
45
+ code?: string | number;
46
+ [key: string]: unknown;
47
+ }
48
+ /**
49
+ * Field matcher for flexible field matching in sanitization
50
+ */
51
+ export interface FieldMatcher {
52
+ /** Match type */
53
+ type: 'exact' | 'prefix' | 'suffix' | 'contains' | 'regex';
54
+ /** Pattern or field name to match */
55
+ value: string;
56
+ /** Case sensitive matching (default: false) */
57
+ caseSensitive?: boolean;
58
+ }
59
+ /**
60
+ * Pattern definition for sanitizing string content
61
+ */
62
+ export interface SanitizePattern {
63
+ /** Pattern identifier */
64
+ name: string;
65
+ /** Regular expression to match */
66
+ pattern: RegExp;
67
+ /** Replacement string or function (default: '[REDACTED]') */
68
+ replacement?: string | ((match: string) => string);
69
+ }
70
+ /**
71
+ * Sanitization configuration
72
+ */
73
+ export interface SanitizeConfig {
74
+ /** Enable/disable sanitization (default: true) */
75
+ enabled?: boolean;
76
+ /** Fields to sanitize (can be strings or FieldMatchers) */
77
+ fields?: (string | FieldMatcher)[];
78
+ /** Patterns to apply to string values */
79
+ patterns?: SanitizePattern[];
80
+ /** Default replacement string (default: '[REDACTED]') */
81
+ replacement?: string;
82
+ /** Maximum recursion depth (default: 10) */
83
+ depth?: number;
84
+ }
85
+ /**
86
+ * Available sanitization presets
87
+ */
88
+ export type SanitizePreset = 'none' | 'minimal' | 'default' | 'gdpr' | 'hipaa' | 'pci-dss';
89
+ /**
90
+ * Logger configuration options
91
+ */
92
+ export interface LoggerConfig {
93
+ /** Minimum log level to output */
94
+ level?: LogLevel;
95
+ /** Enable/disable logging */
96
+ enabled?: boolean;
97
+ /** Output as JSON (production) or formatted (development) */
98
+ structured?: boolean;
99
+ /** Sanitization configuration: boolean, preset name, or full config */
100
+ sanitize?: boolean | SanitizePreset | SanitizeConfig;
101
+ /** @deprecated Use sanitize config instead */
102
+ sanitizeFields?: string[];
103
+ /** Static context added to all logs */
104
+ context?: LogContext;
105
+ /** Logger namespace for child loggers */
106
+ namespace?: string;
107
+ }
108
+ /**
109
+ * Base transport configuration
110
+ */
111
+ export interface TransportConfig {
112
+ /** Transport name for identification */
113
+ name: string;
114
+ /** Enable/disable this transport (default: true) */
115
+ enabled?: boolean;
116
+ /** Minimum log level for this transport */
117
+ level?: LogLevel;
118
+ /** Filter function for entries */
119
+ filter?: (entry: LogEntry) => boolean;
120
+ }
121
+ /**
122
+ * Transport interface for log output
123
+ */
124
+ export interface Transport {
125
+ /** Transport identifier */
126
+ readonly name: string;
127
+ /** Transport configuration */
128
+ readonly config: TransportConfig;
129
+ /** Initialize transport (called once on startup) */
130
+ init?(): Promise<void>;
131
+ /** Log a single entry */
132
+ log(entry: LogEntry): void | Promise<void>;
133
+ /** Flush any buffered entries */
134
+ flush?(): Promise<void>;
135
+ /** Cleanup resources (called on shutdown) */
136
+ destroy?(): Promise<void>;
137
+ }
138
+ /**
139
+ * Configuration for batch transports
140
+ */
141
+ export interface BatchTransportConfig extends TransportConfig {
142
+ /** Maximum entries before auto-flush (default: 100) */
143
+ batchSize?: number;
144
+ /** Interval in ms between auto-flushes (default: 5000) */
145
+ flushInterval?: number;
146
+ /** Maximum retry attempts on failure (default: 3) */
147
+ maxRetries?: number;
148
+ /** Delay between retries in ms (default: 1000) */
149
+ retryDelay?: number;
150
+ }
151
+ /**
152
+ * HTTP transport configuration
153
+ */
154
+ export interface HTTPTransportConfig extends BatchTransportConfig {
155
+ /** Destination URL for log entries */
156
+ url: string;
157
+ /** HTTP method (default: POST) */
158
+ method?: 'POST' | 'PUT';
159
+ /** Custom headers */
160
+ headers?: Record<string, string>;
161
+ /** Request timeout in ms (default: 30000) */
162
+ timeout?: number;
163
+ /** Transform entries before sending */
164
+ transform?: (entries: LogEntry[]) => unknown;
165
+ }
166
+ /**
167
+ * File transport configuration
168
+ */
169
+ export interface FileTransportConfig extends BatchTransportConfig {
170
+ /** Log file path */
171
+ path: string;
172
+ /** Maximum file size in bytes before rotation (default: 10MB) */
173
+ maxSize?: number;
174
+ /** Maximum number of rotated files to keep (default: 5) */
175
+ maxFiles?: number;
176
+ /** Compress rotated files with gzip (default: false) */
177
+ compress?: boolean;
178
+ }
179
+ /**
180
+ * Datadog transport configuration
181
+ */
182
+ export interface DatadogTransportConfig extends BatchTransportConfig {
183
+ /** Datadog API key */
184
+ apiKey: string;
185
+ /** Datadog site (default: datadoghq.com) */
186
+ site?: 'datadoghq.com' | 'datadoghq.eu' | 'us3.datadoghq.com' | 'us5.datadoghq.com';
187
+ /** Service name for logs */
188
+ service?: string;
189
+ /** Log source identifier */
190
+ source?: string;
191
+ /** Additional tags */
192
+ tags?: string[];
193
+ }
194
+ /**
195
+ * Logger interface
196
+ */
197
+ export interface Logger {
198
+ trace(message: string, metadata?: LogMetadata): void;
199
+ trace(...args: unknown[]): void;
200
+ debug(message: string, metadata?: LogMetadata): void;
201
+ debug(...args: unknown[]): void;
202
+ info(message: string, metadata?: LogMetadata): void;
203
+ info(...args: unknown[]): void;
204
+ warn(message: string, metadata?: LogMetadata): void;
205
+ warn(...args: unknown[]): void;
206
+ error(message: string, metadata?: LogMetadata): void;
207
+ error(...args: unknown[]): void;
208
+ child(namespace: string, config?: Partial<LoggerConfig>): Logger;
209
+ setLevel(level: LogLevel): void;
210
+ getLevel(): LogLevel;
211
+ enable(): void;
212
+ disable(): void;
213
+ isEnabled(): boolean;
214
+ flush(): Promise<void>;
215
+ /** Add a transport to the logger */
216
+ addTransport(transport: Transport): void;
217
+ /** Remove a transport by name */
218
+ removeTransport(name: string): boolean;
219
+ /** Get all registered transports */
220
+ getTransports(): readonly Transport[];
221
+ /** Destroy all transports (call on shutdown) */
222
+ destroy(): Promise<void>;
223
+ }
224
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Circular buffer configuration
3
+ */
4
+ export interface CircularBufferConfig {
5
+ maxSize: number;
6
+ onDrop?: (items: unknown[]) => void;
7
+ }
8
+ /**
9
+ * A memory-safe circular buffer for storing log entries
10
+ */
11
+ export declare class CircularBuffer<T> {
12
+ private buffer;
13
+ private head;
14
+ private tail;
15
+ private count;
16
+ private dropped;
17
+ private readonly maxSize;
18
+ private readonly onDrop?;
19
+ constructor(config: CircularBufferConfig);
20
+ /**
21
+ * Add an item to the buffer
22
+ */
23
+ push(item: T): void;
24
+ /**
25
+ * Remove and return the oldest item
26
+ */
27
+ shift(): T | undefined;
28
+ /**
29
+ * Get the oldest item without removing
30
+ */
31
+ peek(): T | undefined;
32
+ /**
33
+ * Convert buffer to array (oldest first)
34
+ */
35
+ toArray(): T[];
36
+ /**
37
+ * Clear the buffer
38
+ */
39
+ clear(): void;
40
+ /**
41
+ * Get current size
42
+ */
43
+ get size(): number;
44
+ /**
45
+ * Get dropped count
46
+ */
47
+ get droppedCount(): number;
48
+ /**
49
+ * Check if buffer is full
50
+ */
51
+ get isFull(): boolean;
52
+ /**
53
+ * Get buffer statistics
54
+ */
55
+ getStats(): {
56
+ size: number;
57
+ maxSize: number;
58
+ dropped: number;
59
+ utilization: number;
60
+ };
61
+ }
62
+ //# sourceMappingURL=buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.d.ts","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;CACnC;AAED;;GAEG;AACH,qBAAa,cAAc,CAAC,CAAC;IAC5B,OAAO,CAAC,MAAM,CAAmB;IACjC,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAsB;gBAElC,MAAM,EAAE,oBAAoB;IAMxC;;OAEG;IACH,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI;IAiBnB;;OAEG;IACH,KAAK,IAAI,CAAC,GAAG,SAAS;IAWtB;;OAEG;IACH,IAAI,IAAI,CAAC,GAAG,SAAS;IAKrB;;OAEG;IACH,OAAO,IAAI,CAAC,EAAE;IAad;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED;;OAEG;IACH,QAAQ,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;CAQnF"}
@@ -0,0 +1,110 @@
1
+ /**
2
+ * A memory-safe circular buffer for storing log entries
3
+ */
4
+ export class CircularBuffer {
5
+ buffer;
6
+ head = 0;
7
+ tail = 0;
8
+ count = 0;
9
+ dropped = 0;
10
+ maxSize;
11
+ onDrop;
12
+ constructor(config) {
13
+ this.maxSize = config.maxSize;
14
+ this.buffer = new Array(config.maxSize);
15
+ this.onDrop = config.onDrop;
16
+ }
17
+ /**
18
+ * Add an item to the buffer
19
+ */
20
+ push(item) {
21
+ if (this.count === this.maxSize) {
22
+ // Buffer full, drop oldest
23
+ const dropped = this.buffer[this.head];
24
+ if (dropped !== undefined && this.onDrop) {
25
+ this.onDrop([dropped]);
26
+ }
27
+ this.head = (this.head + 1) % this.maxSize;
28
+ this.dropped++;
29
+ }
30
+ else {
31
+ this.count++;
32
+ }
33
+ this.buffer[this.tail] = item;
34
+ this.tail = (this.tail + 1) % this.maxSize;
35
+ }
36
+ /**
37
+ * Remove and return the oldest item
38
+ */
39
+ shift() {
40
+ if (this.count === 0)
41
+ return undefined;
42
+ const item = this.buffer[this.head];
43
+ this.buffer[this.head] = undefined;
44
+ this.head = (this.head + 1) % this.maxSize;
45
+ this.count--;
46
+ return item;
47
+ }
48
+ /**
49
+ * Get the oldest item without removing
50
+ */
51
+ peek() {
52
+ if (this.count === 0)
53
+ return undefined;
54
+ return this.buffer[this.head];
55
+ }
56
+ /**
57
+ * Convert buffer to array (oldest first)
58
+ */
59
+ toArray() {
60
+ const result = [];
61
+ let index = this.head;
62
+ for (let i = 0; i < this.count; i++) {
63
+ const item = this.buffer[index];
64
+ if (item !== undefined) {
65
+ result.push(item);
66
+ }
67
+ index = (index + 1) % this.maxSize;
68
+ }
69
+ return result;
70
+ }
71
+ /**
72
+ * Clear the buffer
73
+ */
74
+ clear() {
75
+ this.buffer = new Array(this.maxSize);
76
+ this.head = 0;
77
+ this.tail = 0;
78
+ this.count = 0;
79
+ }
80
+ /**
81
+ * Get current size
82
+ */
83
+ get size() {
84
+ return this.count;
85
+ }
86
+ /**
87
+ * Get dropped count
88
+ */
89
+ get droppedCount() {
90
+ return this.dropped;
91
+ }
92
+ /**
93
+ * Check if buffer is full
94
+ */
95
+ get isFull() {
96
+ return this.count === this.maxSize;
97
+ }
98
+ /**
99
+ * Get buffer statistics
100
+ */
101
+ getStats() {
102
+ return {
103
+ size: this.count,
104
+ maxSize: this.maxSize,
105
+ dropped: this.dropped,
106
+ utilization: this.count / this.maxSize,
107
+ };
108
+ }
109
+ }
110
+ //# sourceMappingURL=buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buffer.js","sourceRoot":"","sources":["../../src/utils/buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { SerializedError } from '../types';
2
+ /**
3
+ * Check if a value is an Error or error-like object
4
+ */
5
+ export declare function isError(value: unknown): value is Error;
6
+ /**
7
+ * Serialize an error object with cause chain support
8
+ */
9
+ export declare function serializeError(error: unknown, depth?: number): SerializedError | undefined;
10
+ /**
11
+ * Extract error message from any value
12
+ */
13
+ export declare function getErrorMessage(error: unknown): string;
14
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAqB/C;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,CAQtD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,eAAe,GAAG,SAAS,CAkDrF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQtD"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Maximum depth for error cause chain traversal
3
+ */
4
+ const MAX_DEPTH = 10;
5
+ /**
6
+ * Properties to extract from error objects
7
+ */
8
+ const ERROR_PROPERTIES = [
9
+ 'code',
10
+ 'statusCode',
11
+ 'status',
12
+ 'errno',
13
+ 'syscall',
14
+ 'path',
15
+ 'address',
16
+ 'port',
17
+ ];
18
+ /**
19
+ * Check if a value is an Error or error-like object
20
+ */
21
+ export function isError(value) {
22
+ return (value instanceof Error ||
23
+ (typeof value === 'object' &&
24
+ value !== null &&
25
+ 'message' in value &&
26
+ typeof value.message === 'string'));
27
+ }
28
+ /**
29
+ * Serialize an error object with cause chain support
30
+ */
31
+ export function serializeError(error, depth = 0) {
32
+ if (depth > MAX_DEPTH)
33
+ return undefined;
34
+ if (!error)
35
+ return undefined;
36
+ // Handle Error instances
37
+ if (error instanceof Error) {
38
+ const serialized = {
39
+ name: error.name,
40
+ message: error.message,
41
+ stack: error.stack,
42
+ };
43
+ // Extract additional properties
44
+ const errorObj = error;
45
+ for (const prop of ERROR_PROPERTIES) {
46
+ const value = errorObj[prop];
47
+ if (value !== undefined && (typeof value === 'string' || typeof value === 'number')) {
48
+ serialized[prop] = value;
49
+ }
50
+ }
51
+ // Handle cause chain (ES2022)
52
+ if ('cause' in error && error.cause) {
53
+ serialized.cause = serializeError(error.cause, depth + 1);
54
+ }
55
+ return serialized;
56
+ }
57
+ // Handle error-like objects
58
+ if (typeof error === 'object' && error !== null) {
59
+ const obj = error;
60
+ if (typeof obj.message === 'string') {
61
+ return {
62
+ name: obj.name ?? 'Error',
63
+ message: obj.message,
64
+ stack: obj.stack,
65
+ };
66
+ }
67
+ }
68
+ // Handle strings
69
+ if (typeof error === 'string') {
70
+ return {
71
+ name: 'Error',
72
+ message: error,
73
+ };
74
+ }
75
+ return undefined;
76
+ }
77
+ /**
78
+ * Extract error message from any value
79
+ */
80
+ export function getErrorMessage(error) {
81
+ if (error instanceof Error)
82
+ return error.message;
83
+ if (typeof error === 'string')
84
+ return error;
85
+ if (typeof error === 'object' && error !== null) {
86
+ const obj = error;
87
+ if (typeof obj.message === 'string')
88
+ return obj.message;
89
+ }
90
+ return String(error);
91
+ }
92
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/utils/error.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,SAAS,GAAG,EAAE,CAAA;AAEpB;;GAEG;AACH,MAAM,gBAAgB,GAAG;IACxB,MAAM;IACN,YAAY;IACZ,QAAQ;IACR,OAAO;IACP,SAAS;IACT,MAAM;IACN,SAAS;IACT,MAAM;CACG,CAAA;AAEV;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAc;IACrC,OAAO,CACN,KAAK,YAAY,KAAK;QACtB,CAAC,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,SAAS,IAAI,KAAK;YAClB,OAAQ,KAAiC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAChE,CAAA;AACF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,KAAc,EAAE,KAAK,GAAG,CAAC;IACvD,IAAI,KAAK,GAAG,SAAS;QAAE,OAAO,SAAS,CAAA;IACvC,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAA;IAE5B,yBAAyB;IACzB,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAoB;YACnC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;SAClB,CAAA;QAED,gCAAgC;QAChC,MAAM,QAAQ,GAAG,KAA2C,CAAA;QAC5D,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;YAC5B,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,EAAE,CAAC;gBACrF,UAAU,CAAC,IAAI,CAAC,GAAG,KAAK,CAAA;YACzB,CAAC;QACF,CAAC;QAED,8BAA8B;QAC9B,IAAI,OAAO,IAAI,KAAK,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YACrC,UAAU,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,4BAA4B;IAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,KAAgC,CAAA;QAC5C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACrC,OAAO;gBACN,IAAI,EAAG,GAAG,CAAC,IAAe,IAAI,OAAO;gBACrC,OAAO,EAAE,GAAG,CAAC,OAAO;gBACpB,KAAK,EAAE,GAAG,CAAC,KAA2B;aACtC,CAAA;QACF,CAAC;IACF,CAAC;IAED,iBAAiB;IACjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACN,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK;SACd,CAAA;IACF,CAAC;IAED,OAAO,SAAS,CAAA;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,KAAK;QAAE,OAAO,KAAK,CAAC,OAAO,CAAA;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC3C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,KAAgC,CAAA;QAC5C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;YAAE,OAAO,GAAG,CAAC,OAAO,CAAA;IACxD,CAAC;IACD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACrB,CAAC"}