bytekit 0.1.12
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/LICENSE +21 -0
- package/README.md +2241 -0
- package/bin/sutils.js +9 -0
- package/dist/api-client.d.ts +2 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +2 -0
- package/dist/api-client.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +401 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/type-generator.d.ts +12 -0
- package/dist/cli/type-generator.d.ts.map +1 -0
- package/dist/cli/type-generator.js +152 -0
- package/dist/cli/type-generator.js.map +1 -0
- package/dist/date-utils.d.ts +2 -0
- package/dist/date-utils.d.ts.map +1 -0
- package/dist/date-utils.js +2 -0
- package/dist/date-utils.js.map +1 -0
- package/dist/debug.d.ts +2 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/debug.js +2 -0
- package/dist/debug.js.map +1 -0
- package/dist/env-manager.d.ts +2 -0
- package/dist/env-manager.d.ts.map +1 -0
- package/dist/env-manager.js +2 -0
- package/dist/env-manager.js.map +1 -0
- package/dist/file-upload.d.ts +2 -0
- package/dist/file-upload.d.ts.map +1 -0
- package/dist/file-upload.js +2 -0
- package/dist/file-upload.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +2 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +2 -0
- package/dist/logger.js.map +1 -0
- package/dist/profiler.d.ts +2 -0
- package/dist/profiler.d.ts.map +1 -0
- package/dist/profiler.js +2 -0
- package/dist/profiler.js.map +1 -0
- package/dist/response-validator.d.ts +2 -0
- package/dist/response-validator.d.ts.map +1 -0
- package/dist/response-validator.js +2 -0
- package/dist/response-validator.js.map +1 -0
- package/dist/retry-policy.d.ts +2 -0
- package/dist/retry-policy.d.ts.map +1 -0
- package/dist/retry-policy.js +2 -0
- package/dist/retry-policy.js.map +1 -0
- package/dist/storage-utils.d.ts +2 -0
- package/dist/storage-utils.d.ts.map +1 -0
- package/dist/storage-utils.js +2 -0
- package/dist/storage-utils.js.map +1 -0
- package/dist/streaming.d.ts +2 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +2 -0
- package/dist/streaming.js.map +1 -0
- package/dist/string-utils.d.ts +2 -0
- package/dist/string-utils.d.ts.map +1 -0
- package/dist/string-utils.js +2 -0
- package/dist/string-utils.js.map +1 -0
- package/dist/utils/core/ApiClient.d.ts +94 -0
- package/dist/utils/core/ApiClient.d.ts.map +1 -0
- package/dist/utils/core/ApiClient.js +291 -0
- package/dist/utils/core/ApiClient.js.map +1 -0
- package/dist/utils/core/ErrorBoundary.d.ts +141 -0
- package/dist/utils/core/ErrorBoundary.d.ts.map +1 -0
- package/dist/utils/core/ErrorBoundary.js +322 -0
- package/dist/utils/core/ErrorBoundary.js.map +1 -0
- package/dist/utils/core/Logger.d.ts +39 -0
- package/dist/utils/core/Logger.d.ts.map +1 -0
- package/dist/utils/core/Logger.js +154 -0
- package/dist/utils/core/Logger.js.map +1 -0
- package/dist/utils/core/Profiler.d.ts +8 -0
- package/dist/utils/core/Profiler.d.ts.map +1 -0
- package/dist/utils/core/Profiler.js +18 -0
- package/dist/utils/core/Profiler.js.map +1 -0
- package/dist/utils/core/RateLimiter.d.ts +74 -0
- package/dist/utils/core/RateLimiter.d.ts.map +1 -0
- package/dist/utils/core/RateLimiter.js +170 -0
- package/dist/utils/core/RateLimiter.js.map +1 -0
- package/dist/utils/core/RequestCache.d.ts +64 -0
- package/dist/utils/core/RequestCache.d.ts.map +1 -0
- package/dist/utils/core/RequestCache.js +139 -0
- package/dist/utils/core/RequestCache.js.map +1 -0
- package/dist/utils/core/RequestDeduplicator.d.ts +41 -0
- package/dist/utils/core/RequestDeduplicator.d.ts.map +1 -0
- package/dist/utils/core/RequestDeduplicator.js +83 -0
- package/dist/utils/core/RequestDeduplicator.js.map +1 -0
- package/dist/utils/core/ResponseValidator.d.ts +26 -0
- package/dist/utils/core/ResponseValidator.d.ts.map +1 -0
- package/dist/utils/core/ResponseValidator.js +140 -0
- package/dist/utils/core/ResponseValidator.js.map +1 -0
- package/dist/utils/core/RetryPolicy.d.ts +43 -0
- package/dist/utils/core/RetryPolicy.d.ts.map +1 -0
- package/dist/utils/core/RetryPolicy.js +119 -0
- package/dist/utils/core/RetryPolicy.js.map +1 -0
- package/dist/utils/core/debug.d.ts +46 -0
- package/dist/utils/core/debug.d.ts.map +1 -0
- package/dist/utils/core/debug.js +83 -0
- package/dist/utils/core/debug.js.map +1 -0
- package/dist/utils/core/index.d.ts +11 -0
- package/dist/utils/core/index.d.ts.map +1 -0
- package/dist/utils/core/index.js +11 -0
- package/dist/utils/core/index.js.map +1 -0
- package/dist/utils/helpers/ArrayUtils.d.ts +134 -0
- package/dist/utils/helpers/ArrayUtils.d.ts.map +1 -0
- package/dist/utils/helpers/ArrayUtils.js +301 -0
- package/dist/utils/helpers/ArrayUtils.js.map +1 -0
- package/dist/utils/helpers/CacheManager.d.ts +67 -0
- package/dist/utils/helpers/CacheManager.d.ts.map +1 -0
- package/dist/utils/helpers/CacheManager.js +222 -0
- package/dist/utils/helpers/CacheManager.js.map +1 -0
- package/dist/utils/helpers/CompressionUtils.d.ts +80 -0
- package/dist/utils/helpers/CompressionUtils.d.ts.map +1 -0
- package/dist/utils/helpers/CompressionUtils.js +224 -0
- package/dist/utils/helpers/CompressionUtils.js.map +1 -0
- package/dist/utils/helpers/CryptoUtils.d.ts +70 -0
- package/dist/utils/helpers/CryptoUtils.d.ts.map +1 -0
- package/dist/utils/helpers/CryptoUtils.js +215 -0
- package/dist/utils/helpers/CryptoUtils.js.map +1 -0
- package/dist/utils/helpers/DateUtils.d.ts +31 -0
- package/dist/utils/helpers/DateUtils.d.ts.map +1 -0
- package/dist/utils/helpers/DateUtils.js +104 -0
- package/dist/utils/helpers/DateUtils.js.map +1 -0
- package/dist/utils/helpers/DiffUtils.d.ts +61 -0
- package/dist/utils/helpers/DiffUtils.d.ts.map +1 -0
- package/dist/utils/helpers/DiffUtils.js +249 -0
- package/dist/utils/helpers/DiffUtils.js.map +1 -0
- package/dist/utils/helpers/EnvManager.d.ts +7 -0
- package/dist/utils/helpers/EnvManager.d.ts.map +1 -0
- package/dist/utils/helpers/EnvManager.js +19 -0
- package/dist/utils/helpers/EnvManager.js.map +1 -0
- package/dist/utils/helpers/EventEmitter.d.ts +78 -0
- package/dist/utils/helpers/EventEmitter.d.ts.map +1 -0
- package/dist/utils/helpers/EventEmitter.js +208 -0
- package/dist/utils/helpers/EventEmitter.js.map +1 -0
- package/dist/utils/helpers/FileUploadHelper.d.ts +44 -0
- package/dist/utils/helpers/FileUploadHelper.d.ts.map +1 -0
- package/dist/utils/helpers/FileUploadHelper.js +127 -0
- package/dist/utils/helpers/FileUploadHelper.js.map +1 -0
- package/dist/utils/helpers/FormUtils.d.ts +162 -0
- package/dist/utils/helpers/FormUtils.d.ts.map +1 -0
- package/dist/utils/helpers/FormUtils.js +378 -0
- package/dist/utils/helpers/FormUtils.js.map +1 -0
- package/dist/utils/helpers/ObjectUtils.d.ts +102 -0
- package/dist/utils/helpers/ObjectUtils.d.ts.map +1 -0
- package/dist/utils/helpers/ObjectUtils.js +297 -0
- package/dist/utils/helpers/ObjectUtils.js.map +1 -0
- package/dist/utils/helpers/PaginationHelper.d.ts +127 -0
- package/dist/utils/helpers/PaginationHelper.d.ts.map +1 -0
- package/dist/utils/helpers/PaginationHelper.js +259 -0
- package/dist/utils/helpers/PaginationHelper.js.map +1 -0
- package/dist/utils/helpers/PollingHelper.d.ts +64 -0
- package/dist/utils/helpers/PollingHelper.d.ts.map +1 -0
- package/dist/utils/helpers/PollingHelper.js +131 -0
- package/dist/utils/helpers/PollingHelper.js.map +1 -0
- package/dist/utils/helpers/StorageUtils.d.ts +9 -0
- package/dist/utils/helpers/StorageUtils.d.ts.map +1 -0
- package/dist/utils/helpers/StorageUtils.js +33 -0
- package/dist/utils/helpers/StorageUtils.js.map +1 -0
- package/dist/utils/helpers/StreamingHelper.d.ts +35 -0
- package/dist/utils/helpers/StreamingHelper.d.ts.map +1 -0
- package/dist/utils/helpers/StreamingHelper.js +167 -0
- package/dist/utils/helpers/StreamingHelper.js.map +1 -0
- package/dist/utils/helpers/StringUtils.d.ts +42 -0
- package/dist/utils/helpers/StringUtils.d.ts.map +1 -0
- package/dist/utils/helpers/StringUtils.js +173 -0
- package/dist/utils/helpers/StringUtils.js.map +1 -0
- package/dist/utils/helpers/TimeUtils.d.ts +87 -0
- package/dist/utils/helpers/TimeUtils.d.ts.map +1 -0
- package/dist/utils/helpers/TimeUtils.js +234 -0
- package/dist/utils/helpers/TimeUtils.js.map +1 -0
- package/dist/utils/helpers/Validator.d.ts +31 -0
- package/dist/utils/helpers/Validator.d.ts.map +1 -0
- package/dist/utils/helpers/Validator.js +156 -0
- package/dist/utils/helpers/Validator.js.map +1 -0
- package/dist/utils/helpers/WebSocketHelper.d.ts +63 -0
- package/dist/utils/helpers/WebSocketHelper.d.ts.map +1 -0
- package/dist/utils/helpers/WebSocketHelper.js +200 -0
- package/dist/utils/helpers/WebSocketHelper.js.map +1 -0
- package/dist/utils/helpers/index.d.ts +20 -0
- package/dist/utils/helpers/index.d.ts.map +1 -0
- package/dist/utils/helpers/index.js +20 -0
- package/dist/utils/helpers/index.js.map +1 -0
- package/dist/utils/index.d.ts +21 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validator.d.ts +2 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +2 -0
- package/dist/validator.js.map +1 -0
- package/dist/websocket.d.ts +2 -0
- package/dist/websocket.d.ts.map +1 -0
- package/dist/websocket.js +2 -0
- package/dist/websocket.js.map +1 -0
- package/package.json +189 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { Logger } from "#core/Logger.js";
|
|
2
|
+
export interface ErrorContext {
|
|
3
|
+
component?: string;
|
|
4
|
+
context?: string;
|
|
5
|
+
userId?: string;
|
|
6
|
+
sessionId?: string;
|
|
7
|
+
metadata?: Record<string, unknown>;
|
|
8
|
+
originalError?: Error;
|
|
9
|
+
}
|
|
10
|
+
export interface ErrorHandler {
|
|
11
|
+
(error: Error, context: ErrorContext): void | Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export interface ErrorBoundaryConfig {
|
|
14
|
+
logger?: Logger;
|
|
15
|
+
handlers?: ErrorHandler[];
|
|
16
|
+
onError?: (error: Error, context: ErrorContext) => void;
|
|
17
|
+
onErrorRecovery?: (error: Error, context: ErrorContext) => void;
|
|
18
|
+
maxRetries?: number;
|
|
19
|
+
retryDelay?: number;
|
|
20
|
+
fallbackUI?: string;
|
|
21
|
+
isDevelopment?: boolean;
|
|
22
|
+
}
|
|
23
|
+
export declare class AppError extends Error {
|
|
24
|
+
readonly code: string;
|
|
25
|
+
readonly statusCode: number;
|
|
26
|
+
readonly context?: ErrorContext | undefined;
|
|
27
|
+
readonly originalError?: Error | undefined;
|
|
28
|
+
constructor(code: string, message: string, statusCode?: number, context?: ErrorContext | undefined, originalError?: Error | undefined);
|
|
29
|
+
}
|
|
30
|
+
export declare class AppValidationError extends AppError {
|
|
31
|
+
constructor(message: string, context?: ErrorContext);
|
|
32
|
+
}
|
|
33
|
+
export declare class NotFoundError extends AppError {
|
|
34
|
+
constructor(message: string, context?: ErrorContext);
|
|
35
|
+
}
|
|
36
|
+
export declare class UnauthorizedError extends AppError {
|
|
37
|
+
constructor(message: string, context?: ErrorContext);
|
|
38
|
+
}
|
|
39
|
+
export declare class ForbiddenError extends AppError {
|
|
40
|
+
constructor(message: string, context?: ErrorContext);
|
|
41
|
+
}
|
|
42
|
+
export declare class ConflictError extends AppError {
|
|
43
|
+
constructor(message: string, context?: ErrorContext);
|
|
44
|
+
}
|
|
45
|
+
export declare class RateLimitError extends AppError {
|
|
46
|
+
constructor(message: string, retryAfter?: number, context?: ErrorContext);
|
|
47
|
+
}
|
|
48
|
+
export declare class TimeoutError extends AppError {
|
|
49
|
+
constructor(message: string, context?: ErrorContext);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Global error boundary for handling and recovering from errors
|
|
53
|
+
*/
|
|
54
|
+
export declare class ErrorBoundary {
|
|
55
|
+
private handlers;
|
|
56
|
+
private logger?;
|
|
57
|
+
private onError?;
|
|
58
|
+
private maxRetries;
|
|
59
|
+
private retryDelay;
|
|
60
|
+
private errorStack;
|
|
61
|
+
private maxStackSize;
|
|
62
|
+
constructor(config?: ErrorBoundaryConfig);
|
|
63
|
+
/**
|
|
64
|
+
* Setup global error handlers
|
|
65
|
+
*/
|
|
66
|
+
private setupGlobalHandlers;
|
|
67
|
+
/**
|
|
68
|
+
* Handle an error
|
|
69
|
+
*/
|
|
70
|
+
handle(error: Error, context?: ErrorContext): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Execute function with error handling and retry logic
|
|
73
|
+
*/
|
|
74
|
+
execute<T>(fn: () => Promise<T>, context?: ErrorContext, retries?: number): Promise<T>;
|
|
75
|
+
/**
|
|
76
|
+
* Execute function synchronously with error handling
|
|
77
|
+
*/
|
|
78
|
+
executeSync<T>(fn: () => T, context?: ErrorContext): T;
|
|
79
|
+
/**
|
|
80
|
+
* Wrap async function with error handling
|
|
81
|
+
*/
|
|
82
|
+
wrap<T extends (...args: unknown[]) => Promise<unknown>>(fn: T, context?: ErrorContext): T;
|
|
83
|
+
/**
|
|
84
|
+
* Wrap sync function with error handling
|
|
85
|
+
*/
|
|
86
|
+
wrapSync<T extends (...args: unknown[]) => unknown>(fn: T, context?: ErrorContext): T;
|
|
87
|
+
/**
|
|
88
|
+
* Register error handler
|
|
89
|
+
*/
|
|
90
|
+
addHandler(handler: ErrorHandler): void;
|
|
91
|
+
/**
|
|
92
|
+
* Remove error handler
|
|
93
|
+
*/
|
|
94
|
+
removeHandler(handler: ErrorHandler): void;
|
|
95
|
+
/**
|
|
96
|
+
* Clear all handlers
|
|
97
|
+
*/
|
|
98
|
+
clearHandlers(): void;
|
|
99
|
+
/**
|
|
100
|
+
* Get error history
|
|
101
|
+
*/
|
|
102
|
+
getErrorHistory(limit?: number): Array<{
|
|
103
|
+
error: Error;
|
|
104
|
+
context: ErrorContext;
|
|
105
|
+
timestamp: number;
|
|
106
|
+
}>;
|
|
107
|
+
/**
|
|
108
|
+
* Clear error history
|
|
109
|
+
*/
|
|
110
|
+
clearErrorHistory(): void;
|
|
111
|
+
/**
|
|
112
|
+
* Normalize error to AppError
|
|
113
|
+
*/
|
|
114
|
+
private normalizeError;
|
|
115
|
+
/**
|
|
116
|
+
* Check if error is retryable
|
|
117
|
+
*/
|
|
118
|
+
private isRetryable;
|
|
119
|
+
/**
|
|
120
|
+
* Create error report
|
|
121
|
+
*/
|
|
122
|
+
createErrorReport(): {
|
|
123
|
+
timestamp: string;
|
|
124
|
+
errors: Array<{
|
|
125
|
+
code: string;
|
|
126
|
+
message: string;
|
|
127
|
+
statusCode: number;
|
|
128
|
+
context?: ErrorContext;
|
|
129
|
+
timestamp: number;
|
|
130
|
+
}>;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Get or create global error boundary
|
|
135
|
+
*/
|
|
136
|
+
export declare function getGlobalErrorBoundary(config?: ErrorBoundaryConfig): ErrorBoundary;
|
|
137
|
+
/**
|
|
138
|
+
* Reset global error boundary
|
|
139
|
+
*/
|
|
140
|
+
export declare function resetGlobalErrorBoundary(): void;
|
|
141
|
+
//# sourceMappingURL=ErrorBoundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.d.ts","sourceRoot":"","sources":["../../../src/utils/core/ErrorBoundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,KAAK,CAAC;CACzB;AAED,MAAM,WAAW,YAAY;IACzB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/D;AAED,MAAM,WAAW,mBAAmB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAC;IAC1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IACxD,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,KAAK,IAAI,CAAC;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,QAAS,SAAQ,KAAK;aAEX,IAAI,EAAE,MAAM;aAEZ,UAAU,EAAE,MAAM;aAClB,OAAO,CAAC,EAAE,YAAY;aACtB,aAAa,CAAC,EAAE,KAAK;gBAJrB,IAAI,EAAE,MAAM,EAC5B,OAAO,EAAE,MAAM,EACC,UAAU,GAAE,MAAY,EACxB,OAAO,CAAC,EAAE,YAAY,YAAA,EACtB,aAAa,CAAC,EAAE,KAAK,YAAA;CAK5C;AAED,qBAAa,kBAAmB,SAAQ,QAAQ;gBAChC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;gBAC/B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,qBAAa,aAAc,SAAQ,QAAQ;gBAC3B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED,qBAAa,cAAe,SAAQ,QAAQ;gBAC5B,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAU3E;AAED,qBAAa,YAAa,SAAQ,QAAQ;gBAC1B,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY;CAItD;AAED;;GAEG;AACH,qBAAa,aAAa;IACtB,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAC,CAAgD;IAChE,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAIV;IACR,OAAO,CAAC,YAAY,CAAO;gBAEf,MAAM,GAAE,mBAAwB;IAU5C;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA6C3B;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2CrE;;OAEG;IACG,OAAO,CAAC,CAAC,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,GAAE,YAAiB,EAC1B,OAAO,SAAkB,GAC1B,OAAO,CAAC,CAAC,CAAC;IAwBb;;OAEG;IACH,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,OAAO,GAAE,YAAiB,GAAG,CAAC;IAe1D;;OAEG;IACH,IAAI,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,EACnD,EAAE,EAAE,CAAC,EACL,OAAO,CAAC,EAAE,YAAY,GACvB,CAAC;IAcJ;;OAEG;IACH,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAC9C,EAAE,EAAE,CAAC,EACL,OAAO,CAAC,EAAE,YAAY,GACvB,CAAC;IAqBJ;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAIvC;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAO1C;;OAEG;IACH,aAAa,IAAI,IAAI;IAIrB;;OAEG;IACH,eAAe,CACX,KAAK,SAAK,GACX,KAAK,CAAC;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,OAAO,EAAE,YAAY,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAIpE;;OAEG;IACH,iBAAiB,IAAI,IAAI;IAIzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwCtB;;OAEG;IACH,OAAO,CAAC,WAAW;IASnB;;OAEG;IACH,iBAAiB,IAAI;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,KAAK,CAAC;YACV,IAAI,EAAE,MAAM,CAAC;YACb,OAAO,EAAE,MAAM,CAAC;YAChB,UAAU,EAAE,MAAM,CAAC;YACnB,OAAO,CAAC,EAAE,YAAY,CAAC;YACvB,SAAS,EAAE,MAAM,CAAC;SACrB,CAAC,CAAC;KACN;CAkBJ;AAOD;;GAEG;AACH,wBAAgB,sBAAsB,CAClC,MAAM,CAAC,EAAE,mBAAmB,GAC7B,aAAa,CAKf;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,IAAI,CAE/C"}
|
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
export class AppError extends Error {
|
|
2
|
+
code;
|
|
3
|
+
statusCode;
|
|
4
|
+
context;
|
|
5
|
+
originalError;
|
|
6
|
+
constructor(code, message, statusCode = 500, context, originalError) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.code = code;
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.context = context;
|
|
11
|
+
this.originalError = originalError;
|
|
12
|
+
this.name = "AppError";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export class AppValidationError extends AppError {
|
|
16
|
+
constructor(message, context) {
|
|
17
|
+
super("VALIDATION_ERROR", message, 400, context);
|
|
18
|
+
this.name = "AppValidationError";
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
export class NotFoundError extends AppError {
|
|
22
|
+
constructor(message, context) {
|
|
23
|
+
super("NOT_FOUND", message, 404, context);
|
|
24
|
+
this.name = "NotFoundError";
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class UnauthorizedError extends AppError {
|
|
28
|
+
constructor(message, context) {
|
|
29
|
+
super("UNAUTHORIZED", message, 401, context);
|
|
30
|
+
this.name = "UnauthorizedError";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
export class ForbiddenError extends AppError {
|
|
34
|
+
constructor(message, context) {
|
|
35
|
+
super("FORBIDDEN", message, 403, context);
|
|
36
|
+
this.name = "ForbiddenError";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export class ConflictError extends AppError {
|
|
40
|
+
constructor(message, context) {
|
|
41
|
+
super("CONFLICT", message, 409, context);
|
|
42
|
+
this.name = "ConflictError";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export class RateLimitError extends AppError {
|
|
46
|
+
constructor(message, retryAfter, context) {
|
|
47
|
+
const contextWithRetry = retryAfter
|
|
48
|
+
? {
|
|
49
|
+
...context,
|
|
50
|
+
metadata: { ...(context?.metadata ?? {}), retryAfter },
|
|
51
|
+
}
|
|
52
|
+
: context;
|
|
53
|
+
super("RATE_LIMIT", message, 429, contextWithRetry);
|
|
54
|
+
this.name = "RateLimitError";
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
export class TimeoutError extends AppError {
|
|
58
|
+
constructor(message, context) {
|
|
59
|
+
super("TIMEOUT", message, 408, context);
|
|
60
|
+
this.name = "TimeoutError";
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Global error boundary for handling and recovering from errors
|
|
65
|
+
*/
|
|
66
|
+
export class ErrorBoundary {
|
|
67
|
+
handlers = [];
|
|
68
|
+
logger;
|
|
69
|
+
onError;
|
|
70
|
+
maxRetries;
|
|
71
|
+
retryDelay;
|
|
72
|
+
errorStack = [];
|
|
73
|
+
maxStackSize = 100;
|
|
74
|
+
constructor(config = {}) {
|
|
75
|
+
this.logger = config.logger;
|
|
76
|
+
this.handlers = config.handlers ?? [];
|
|
77
|
+
this.onError = config.onError;
|
|
78
|
+
this.maxRetries = config.maxRetries ?? 3;
|
|
79
|
+
this.retryDelay = config.retryDelay ?? 1000;
|
|
80
|
+
this.setupGlobalHandlers();
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Setup global error handlers
|
|
84
|
+
*/
|
|
85
|
+
setupGlobalHandlers() {
|
|
86
|
+
if (typeof globalThis !== "undefined") {
|
|
87
|
+
// Handle unhandled promise rejections
|
|
88
|
+
if (typeof globalThis.addEventListener === "function") {
|
|
89
|
+
globalThis.addEventListener("unhandledrejection", (event) => {
|
|
90
|
+
this.handle(event.reason instanceof Error
|
|
91
|
+
? event.reason
|
|
92
|
+
: new Error(String(event.reason)), { context: "unhandledRejection" });
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
// Handle global errors
|
|
96
|
+
if (typeof globalThis.onerror === "function") {
|
|
97
|
+
const originalOnError = globalThis.onerror;
|
|
98
|
+
globalThis.onerror = (message, source, lineno, colno, error) => {
|
|
99
|
+
this.handle(error instanceof Error
|
|
100
|
+
? error
|
|
101
|
+
: new Error(String(message)), {
|
|
102
|
+
context: "globalError",
|
|
103
|
+
metadata: { source, lineno, colno },
|
|
104
|
+
});
|
|
105
|
+
return originalOnError?.(message, source, lineno, colno, error);
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Handle an error
|
|
112
|
+
*/
|
|
113
|
+
async handle(error, context = {}) {
|
|
114
|
+
const appError = this.normalizeError(error);
|
|
115
|
+
// Add to error stack
|
|
116
|
+
this.errorStack.push({
|
|
117
|
+
error: appError,
|
|
118
|
+
context,
|
|
119
|
+
timestamp: Date.now(),
|
|
120
|
+
});
|
|
121
|
+
// Keep stack size manageable
|
|
122
|
+
if (this.errorStack.length > this.maxStackSize) {
|
|
123
|
+
this.errorStack.shift();
|
|
124
|
+
}
|
|
125
|
+
// Log error
|
|
126
|
+
this.logger?.error(appError.message, context, appError);
|
|
127
|
+
// Call custom error handler
|
|
128
|
+
if (this.onError) {
|
|
129
|
+
try {
|
|
130
|
+
this.onError(appError, context);
|
|
131
|
+
}
|
|
132
|
+
catch (e) {
|
|
133
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
134
|
+
this.logger?.error("Error in custom error handler", {}, err);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
// Execute registered handlers
|
|
138
|
+
for (const handler of this.handlers) {
|
|
139
|
+
try {
|
|
140
|
+
await handler(appError, context);
|
|
141
|
+
}
|
|
142
|
+
catch (e) {
|
|
143
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
144
|
+
this.logger?.error("Error in error handler", {}, err);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Execute function with error handling and retry logic
|
|
150
|
+
*/
|
|
151
|
+
async execute(fn, context = {}, retries = this.maxRetries) {
|
|
152
|
+
try {
|
|
153
|
+
return await fn();
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
const appError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
|
|
157
|
+
if (retries > 0 && this.isRetryable(appError)) {
|
|
158
|
+
this.logger?.warn(`Retrying after ${this.retryDelay}ms (${retries} retries left)`, context);
|
|
159
|
+
await new Promise((resolve) => setTimeout(resolve, this.retryDelay));
|
|
160
|
+
return this.execute(fn, context, retries - 1);
|
|
161
|
+
}
|
|
162
|
+
await this.handle(appError, context);
|
|
163
|
+
throw appError;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Execute function synchronously with error handling
|
|
168
|
+
*/
|
|
169
|
+
executeSync(fn, context = {}) {
|
|
170
|
+
try {
|
|
171
|
+
return fn();
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
const appError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
|
|
175
|
+
this.handle(appError, context).catch((e) => {
|
|
176
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
177
|
+
this.logger?.error("Error handling sync error", {}, err);
|
|
178
|
+
});
|
|
179
|
+
throw appError;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Wrap async function with error handling
|
|
184
|
+
*/
|
|
185
|
+
wrap(fn, context) {
|
|
186
|
+
return (async (...args) => {
|
|
187
|
+
try {
|
|
188
|
+
return await fn(...args);
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
const appError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
|
|
192
|
+
await this.handle(appError, context);
|
|
193
|
+
throw appError;
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Wrap sync function with error handling
|
|
199
|
+
*/
|
|
200
|
+
wrapSync(fn, context) {
|
|
201
|
+
return ((...args) => {
|
|
202
|
+
try {
|
|
203
|
+
return fn(...args);
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
const appError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
|
|
207
|
+
this.handle(appError, context ?? {}).catch((e) => {
|
|
208
|
+
const err = e instanceof Error ? e : new Error(String(e));
|
|
209
|
+
this.logger?.error("Error handling wrapped sync error", {}, err);
|
|
210
|
+
});
|
|
211
|
+
throw appError;
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Register error handler
|
|
217
|
+
*/
|
|
218
|
+
addHandler(handler) {
|
|
219
|
+
this.handlers.push(handler);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Remove error handler
|
|
223
|
+
*/
|
|
224
|
+
removeHandler(handler) {
|
|
225
|
+
const index = this.handlers.indexOf(handler);
|
|
226
|
+
if (index > -1) {
|
|
227
|
+
this.handlers.splice(index, 1);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Clear all handlers
|
|
232
|
+
*/
|
|
233
|
+
clearHandlers() {
|
|
234
|
+
this.handlers = [];
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Get error history
|
|
238
|
+
*/
|
|
239
|
+
getErrorHistory(limit = 10) {
|
|
240
|
+
return this.errorStack.slice(-limit);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Clear error history
|
|
244
|
+
*/
|
|
245
|
+
clearErrorHistory() {
|
|
246
|
+
this.errorStack = [];
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Normalize error to AppError
|
|
250
|
+
*/
|
|
251
|
+
normalizeError(error) {
|
|
252
|
+
if (error instanceof AppError) {
|
|
253
|
+
return error;
|
|
254
|
+
}
|
|
255
|
+
// Try to detect error type from message or properties
|
|
256
|
+
if (error.message.includes("timeout") ||
|
|
257
|
+
error.message.includes("Timeout")) {
|
|
258
|
+
return new TimeoutError(error.message, {
|
|
259
|
+
originalError: error,
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
if (error.message.includes("validation") ||
|
|
263
|
+
error.message.includes("Validation")) {
|
|
264
|
+
return new AppValidationError(error.message, {
|
|
265
|
+
originalError: error,
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
if (error.message.includes("not found") ||
|
|
269
|
+
error.message.includes("Not Found")) {
|
|
270
|
+
return new NotFoundError(error.message, { originalError: error });
|
|
271
|
+
}
|
|
272
|
+
return new AppError("UNKNOWN_ERROR", error.message, 500, { originalError: error }, error);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Check if error is retryable
|
|
276
|
+
*/
|
|
277
|
+
isRetryable(error) {
|
|
278
|
+
// Retry on timeout, rate limit, and 5xx errors
|
|
279
|
+
return (error.statusCode === 408 ||
|
|
280
|
+
error.statusCode === 429 ||
|
|
281
|
+
(error.statusCode >= 500 && error.statusCode < 600));
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Create error report
|
|
285
|
+
*/
|
|
286
|
+
createErrorReport() {
|
|
287
|
+
return {
|
|
288
|
+
timestamp: new Date().toISOString(),
|
|
289
|
+
errors: this.errorStack.map((item) => ({
|
|
290
|
+
code: item.error instanceof AppError
|
|
291
|
+
? item.error.code
|
|
292
|
+
: "UNKNOWN",
|
|
293
|
+
message: item.error.message,
|
|
294
|
+
statusCode: item.error instanceof AppError
|
|
295
|
+
? item.error.statusCode
|
|
296
|
+
: 500,
|
|
297
|
+
context: item.context,
|
|
298
|
+
timestamp: item.timestamp,
|
|
299
|
+
})),
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Global error boundary instance
|
|
305
|
+
*/
|
|
306
|
+
let globalErrorBoundary = null;
|
|
307
|
+
/**
|
|
308
|
+
* Get or create global error boundary
|
|
309
|
+
*/
|
|
310
|
+
export function getGlobalErrorBoundary(config) {
|
|
311
|
+
if (!globalErrorBoundary) {
|
|
312
|
+
globalErrorBoundary = new ErrorBoundary(config);
|
|
313
|
+
}
|
|
314
|
+
return globalErrorBoundary;
|
|
315
|
+
}
|
|
316
|
+
/**
|
|
317
|
+
* Reset global error boundary
|
|
318
|
+
*/
|
|
319
|
+
export function resetGlobalErrorBoundary() {
|
|
320
|
+
globalErrorBoundary = null;
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=ErrorBoundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ErrorBoundary.js","sourceRoot":"","sources":["../../../src/utils/core/ErrorBoundary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type LogLevel = "silent" | "error" | "warn" | "info" | "debug";
|
|
2
|
+
export interface LogEntry<TContext extends Record<string, unknown> = Record<string, unknown>> {
|
|
3
|
+
level: LogLevel;
|
|
4
|
+
message: string;
|
|
5
|
+
namespace?: string;
|
|
6
|
+
timestamp: Date;
|
|
7
|
+
context?: TContext;
|
|
8
|
+
error?: Error;
|
|
9
|
+
}
|
|
10
|
+
export type LogTransport = (entry: LogEntry) => void | Promise<void>;
|
|
11
|
+
export interface LoggerOptions {
|
|
12
|
+
namespace?: string;
|
|
13
|
+
level?: LogLevel;
|
|
14
|
+
transports?: LogTransport[];
|
|
15
|
+
includeTimestamp?: boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare const consoleTransportNode: ({ includeTimestamp, }?: {
|
|
18
|
+
includeTimestamp?: boolean;
|
|
19
|
+
}) => LogTransport;
|
|
20
|
+
export declare const consoleTransportBrowser: ({ includeTimestamp, }?: {
|
|
21
|
+
includeTimestamp?: boolean;
|
|
22
|
+
}) => LogTransport;
|
|
23
|
+
export declare class Logger<TContext extends Record<string, unknown> = Record<string, unknown>> {
|
|
24
|
+
private readonly namespace?;
|
|
25
|
+
private readonly transports;
|
|
26
|
+
private level;
|
|
27
|
+
constructor({ namespace, level, transports, includeTimestamp, }?: LoggerOptions);
|
|
28
|
+
setLevel(level: LogLevel): void;
|
|
29
|
+
child(namespace: string): Logger<TContext>;
|
|
30
|
+
debug(message: string, context?: TContext): void;
|
|
31
|
+
info(message: string, context?: TContext): void;
|
|
32
|
+
warn(message: string, context?: TContext): void;
|
|
33
|
+
error(message: string, context?: TContext, error?: Error): void;
|
|
34
|
+
log(level: LogLevel, message: string, context?: TContext, error?: Error): void;
|
|
35
|
+
private shouldLog;
|
|
36
|
+
static silent(): Logger<Record<string, unknown>>;
|
|
37
|
+
}
|
|
38
|
+
export declare const createLogger: (options?: LoggerOptions) => Logger<Record<string, unknown>>;
|
|
39
|
+
//# sourceMappingURL=Logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../../src/utils/core/Logger.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAEtE,MAAM,WAAW,QAAQ,CACrB,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAElE,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,KAAK,CAAC,EAAE,KAAK,CAAC;CACjB;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAErE,MAAM,WAAW,aAAa;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,UAAU,CAAC,EAAE,YAAY,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAwBD,eAAO,MAAM,oBAAoB,GAAI,wBAElC;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,YAkCxC,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,wBAErC;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,KAAG,YAiCxC,CAAC;AAKF,qBAAa,MAAM,CACf,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAElE,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiB;IAC5C,OAAO,CAAC,KAAK,CAAW;gBAEZ,EACR,SAAS,EACT,KAAqB,EACrB,UAAU,EACV,gBAAgB,GACnB,GAAE,aAAkB;IAerB,QAAQ,CAAC,KAAK,EAAE,QAAQ;IAIxB,KAAK,CAAC,SAAS,EAAE,MAAM;IAWvB,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ;IAIzC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ;IAIxC,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ;IAIxC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK;IAIxD,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,KAAK;IAmBvE,OAAO,CAAC,SAAS;IAKjB,MAAM,CAAC,MAAM;CAGhB;AAKD,eAAO,MAAM,YAAY,GAAI,UAAU,aAAa,oCAAwB,CAAC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// ------------------------------------
|
|
2
|
+
// Config & Constants
|
|
3
|
+
// ------------------------------------
|
|
4
|
+
const LEVEL_PRIORITY = {
|
|
5
|
+
silent: 0,
|
|
6
|
+
error: 1,
|
|
7
|
+
warn: 2,
|
|
8
|
+
info: 3,
|
|
9
|
+
debug: 4,
|
|
10
|
+
};
|
|
11
|
+
const DEFAULT_LEVEL = typeof process !== "undefined" && process?.env?.NODE_ENV === "production"
|
|
12
|
+
? "info"
|
|
13
|
+
: "debug";
|
|
14
|
+
const isBrowser = typeof window !== "undefined" && typeof document !== "undefined";
|
|
15
|
+
// ------------------------------------
|
|
16
|
+
// Transports
|
|
17
|
+
// ------------------------------------
|
|
18
|
+
export const consoleTransportNode = ({ includeTimestamp = true, } = {}) => {
|
|
19
|
+
const COLORS = {
|
|
20
|
+
error: "\x1b[31m", // rojo
|
|
21
|
+
warn: "\x1b[33m", // amarillo
|
|
22
|
+
info: "\x1b[32m", // verde
|
|
23
|
+
debug: "\x1b[90m", // gris tenue
|
|
24
|
+
silent: "",
|
|
25
|
+
};
|
|
26
|
+
const RESET = "\x1b[0m";
|
|
27
|
+
return (entry) => {
|
|
28
|
+
const { level, message, namespace, timestamp, context, error } = entry;
|
|
29
|
+
const color = COLORS[level] ?? "";
|
|
30
|
+
const prefixParts = [];
|
|
31
|
+
if (includeTimestamp)
|
|
32
|
+
prefixParts.push(timestamp.toISOString());
|
|
33
|
+
prefixParts.push(color + level.toUpperCase() + RESET);
|
|
34
|
+
if (namespace)
|
|
35
|
+
prefixParts.push(`[${namespace}]`);
|
|
36
|
+
const prefix = prefixParts.join(" ");
|
|
37
|
+
const payload = [`${prefix} ${message}`.trim()];
|
|
38
|
+
if (context && Object.keys(context).length > 0)
|
|
39
|
+
payload.push(context);
|
|
40
|
+
if (error)
|
|
41
|
+
payload.push(error);
|
|
42
|
+
const method = level === "error"
|
|
43
|
+
? console.error
|
|
44
|
+
: level === "warn"
|
|
45
|
+
? console.warn
|
|
46
|
+
: console.log;
|
|
47
|
+
method(...payload);
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
export const consoleTransportBrowser = ({ includeTimestamp = true, } = {}) => {
|
|
51
|
+
const COLORS = {
|
|
52
|
+
error: "color: red",
|
|
53
|
+
warn: "color: orange",
|
|
54
|
+
info: "color: green",
|
|
55
|
+
debug: "color: gray",
|
|
56
|
+
silent: "",
|
|
57
|
+
};
|
|
58
|
+
return (entry) => {
|
|
59
|
+
const { level, message, namespace, timestamp, context, error } = entry;
|
|
60
|
+
const color = COLORS[level] ?? "";
|
|
61
|
+
const prefixParts = [];
|
|
62
|
+
if (includeTimestamp)
|
|
63
|
+
prefixParts.push(timestamp.toISOString());
|
|
64
|
+
prefixParts.push(`${level.toUpperCase()}`);
|
|
65
|
+
if (namespace)
|
|
66
|
+
prefixParts.push(`[${namespace}]`);
|
|
67
|
+
const prefix = prefixParts.join(" ");
|
|
68
|
+
const payload = [`%c${prefix} ${message}`.trim(), color];
|
|
69
|
+
if (context && Object.keys(context).length > 0)
|
|
70
|
+
payload.push(context);
|
|
71
|
+
if (error)
|
|
72
|
+
payload.push(error);
|
|
73
|
+
const method = level === "error"
|
|
74
|
+
? console.error
|
|
75
|
+
: level === "warn"
|
|
76
|
+
? console.warn
|
|
77
|
+
: console.log;
|
|
78
|
+
method(...payload);
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
// ------------------------------------
|
|
82
|
+
// Logger Class
|
|
83
|
+
// ------------------------------------
|
|
84
|
+
export class Logger {
|
|
85
|
+
namespace;
|
|
86
|
+
transports;
|
|
87
|
+
level;
|
|
88
|
+
constructor({ namespace, level = DEFAULT_LEVEL, transports, includeTimestamp, } = {}) {
|
|
89
|
+
this.namespace = namespace;
|
|
90
|
+
this.level = level;
|
|
91
|
+
// Usa el transporte correcto según entorno si no se pasó uno custom
|
|
92
|
+
this.transports =
|
|
93
|
+
transports?.length && transports.length > 0
|
|
94
|
+
? transports
|
|
95
|
+
: [
|
|
96
|
+
isBrowser
|
|
97
|
+
? consoleTransportBrowser({ includeTimestamp })
|
|
98
|
+
: consoleTransportNode({ includeTimestamp }),
|
|
99
|
+
];
|
|
100
|
+
}
|
|
101
|
+
setLevel(level) {
|
|
102
|
+
this.level = level;
|
|
103
|
+
}
|
|
104
|
+
child(namespace) {
|
|
105
|
+
const childNamespace = this.namespace
|
|
106
|
+
? `${this.namespace}:${namespace}`
|
|
107
|
+
: namespace;
|
|
108
|
+
return new Logger({
|
|
109
|
+
namespace: childNamespace,
|
|
110
|
+
level: this.level,
|
|
111
|
+
transports: this.transports,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
debug(message, context) {
|
|
115
|
+
this.log("debug", message, context);
|
|
116
|
+
}
|
|
117
|
+
info(message, context) {
|
|
118
|
+
this.log("info", message, context);
|
|
119
|
+
}
|
|
120
|
+
warn(message, context) {
|
|
121
|
+
this.log("warn", message, context);
|
|
122
|
+
}
|
|
123
|
+
error(message, context, error) {
|
|
124
|
+
this.log("error", message, context, error);
|
|
125
|
+
}
|
|
126
|
+
log(level, message, context, error) {
|
|
127
|
+
if (!this.shouldLog(level))
|
|
128
|
+
return;
|
|
129
|
+
const entry = {
|
|
130
|
+
level,
|
|
131
|
+
message,
|
|
132
|
+
namespace: this.namespace,
|
|
133
|
+
timestamp: new Date(),
|
|
134
|
+
context,
|
|
135
|
+
error,
|
|
136
|
+
};
|
|
137
|
+
for (const transport of this.transports) {
|
|
138
|
+
Promise.resolve(transport(entry)).catch((err) => console.error("[Logger] Transport failure", err));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
shouldLog(level) {
|
|
142
|
+
if (this.level === "silent")
|
|
143
|
+
return false;
|
|
144
|
+
return LEVEL_PRIORITY[level] <= LEVEL_PRIORITY[this.level];
|
|
145
|
+
}
|
|
146
|
+
static silent() {
|
|
147
|
+
return new Logger({ level: "silent" });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// ------------------------------------
|
|
151
|
+
// Factory
|
|
152
|
+
// ------------------------------------
|
|
153
|
+
export const createLogger = (options) => new Logger(options);
|
|
154
|
+
//# sourceMappingURL=Logger.js.map
|