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.
Files changed (200) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +2241 -0
  3. package/bin/sutils.js +9 -0
  4. package/dist/api-client.d.ts +2 -0
  5. package/dist/api-client.d.ts.map +1 -0
  6. package/dist/api-client.js +2 -0
  7. package/dist/api-client.js.map +1 -0
  8. package/dist/cli/index.d.ts +2 -0
  9. package/dist/cli/index.d.ts.map +1 -0
  10. package/dist/cli/index.js +401 -0
  11. package/dist/cli/index.js.map +1 -0
  12. package/dist/cli/type-generator.d.ts +12 -0
  13. package/dist/cli/type-generator.d.ts.map +1 -0
  14. package/dist/cli/type-generator.js +152 -0
  15. package/dist/cli/type-generator.js.map +1 -0
  16. package/dist/date-utils.d.ts +2 -0
  17. package/dist/date-utils.d.ts.map +1 -0
  18. package/dist/date-utils.js +2 -0
  19. package/dist/date-utils.js.map +1 -0
  20. package/dist/debug.d.ts +2 -0
  21. package/dist/debug.d.ts.map +1 -0
  22. package/dist/debug.js +2 -0
  23. package/dist/debug.js.map +1 -0
  24. package/dist/env-manager.d.ts +2 -0
  25. package/dist/env-manager.d.ts.map +1 -0
  26. package/dist/env-manager.js +2 -0
  27. package/dist/env-manager.js.map +1 -0
  28. package/dist/file-upload.d.ts +2 -0
  29. package/dist/file-upload.d.ts.map +1 -0
  30. package/dist/file-upload.js +2 -0
  31. package/dist/file-upload.js.map +1 -0
  32. package/dist/index.d.ts +2 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +2 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/logger.d.ts +2 -0
  37. package/dist/logger.d.ts.map +1 -0
  38. package/dist/logger.js +2 -0
  39. package/dist/logger.js.map +1 -0
  40. package/dist/profiler.d.ts +2 -0
  41. package/dist/profiler.d.ts.map +1 -0
  42. package/dist/profiler.js +2 -0
  43. package/dist/profiler.js.map +1 -0
  44. package/dist/response-validator.d.ts +2 -0
  45. package/dist/response-validator.d.ts.map +1 -0
  46. package/dist/response-validator.js +2 -0
  47. package/dist/response-validator.js.map +1 -0
  48. package/dist/retry-policy.d.ts +2 -0
  49. package/dist/retry-policy.d.ts.map +1 -0
  50. package/dist/retry-policy.js +2 -0
  51. package/dist/retry-policy.js.map +1 -0
  52. package/dist/storage-utils.d.ts +2 -0
  53. package/dist/storage-utils.d.ts.map +1 -0
  54. package/dist/storage-utils.js +2 -0
  55. package/dist/storage-utils.js.map +1 -0
  56. package/dist/streaming.d.ts +2 -0
  57. package/dist/streaming.d.ts.map +1 -0
  58. package/dist/streaming.js +2 -0
  59. package/dist/streaming.js.map +1 -0
  60. package/dist/string-utils.d.ts +2 -0
  61. package/dist/string-utils.d.ts.map +1 -0
  62. package/dist/string-utils.js +2 -0
  63. package/dist/string-utils.js.map +1 -0
  64. package/dist/utils/core/ApiClient.d.ts +94 -0
  65. package/dist/utils/core/ApiClient.d.ts.map +1 -0
  66. package/dist/utils/core/ApiClient.js +291 -0
  67. package/dist/utils/core/ApiClient.js.map +1 -0
  68. package/dist/utils/core/ErrorBoundary.d.ts +141 -0
  69. package/dist/utils/core/ErrorBoundary.d.ts.map +1 -0
  70. package/dist/utils/core/ErrorBoundary.js +322 -0
  71. package/dist/utils/core/ErrorBoundary.js.map +1 -0
  72. package/dist/utils/core/Logger.d.ts +39 -0
  73. package/dist/utils/core/Logger.d.ts.map +1 -0
  74. package/dist/utils/core/Logger.js +154 -0
  75. package/dist/utils/core/Logger.js.map +1 -0
  76. package/dist/utils/core/Profiler.d.ts +8 -0
  77. package/dist/utils/core/Profiler.d.ts.map +1 -0
  78. package/dist/utils/core/Profiler.js +18 -0
  79. package/dist/utils/core/Profiler.js.map +1 -0
  80. package/dist/utils/core/RateLimiter.d.ts +74 -0
  81. package/dist/utils/core/RateLimiter.d.ts.map +1 -0
  82. package/dist/utils/core/RateLimiter.js +170 -0
  83. package/dist/utils/core/RateLimiter.js.map +1 -0
  84. package/dist/utils/core/RequestCache.d.ts +64 -0
  85. package/dist/utils/core/RequestCache.d.ts.map +1 -0
  86. package/dist/utils/core/RequestCache.js +139 -0
  87. package/dist/utils/core/RequestCache.js.map +1 -0
  88. package/dist/utils/core/RequestDeduplicator.d.ts +41 -0
  89. package/dist/utils/core/RequestDeduplicator.d.ts.map +1 -0
  90. package/dist/utils/core/RequestDeduplicator.js +83 -0
  91. package/dist/utils/core/RequestDeduplicator.js.map +1 -0
  92. package/dist/utils/core/ResponseValidator.d.ts +26 -0
  93. package/dist/utils/core/ResponseValidator.d.ts.map +1 -0
  94. package/dist/utils/core/ResponseValidator.js +140 -0
  95. package/dist/utils/core/ResponseValidator.js.map +1 -0
  96. package/dist/utils/core/RetryPolicy.d.ts +43 -0
  97. package/dist/utils/core/RetryPolicy.d.ts.map +1 -0
  98. package/dist/utils/core/RetryPolicy.js +119 -0
  99. package/dist/utils/core/RetryPolicy.js.map +1 -0
  100. package/dist/utils/core/debug.d.ts +46 -0
  101. package/dist/utils/core/debug.d.ts.map +1 -0
  102. package/dist/utils/core/debug.js +83 -0
  103. package/dist/utils/core/debug.js.map +1 -0
  104. package/dist/utils/core/index.d.ts +11 -0
  105. package/dist/utils/core/index.d.ts.map +1 -0
  106. package/dist/utils/core/index.js +11 -0
  107. package/dist/utils/core/index.js.map +1 -0
  108. package/dist/utils/helpers/ArrayUtils.d.ts +134 -0
  109. package/dist/utils/helpers/ArrayUtils.d.ts.map +1 -0
  110. package/dist/utils/helpers/ArrayUtils.js +301 -0
  111. package/dist/utils/helpers/ArrayUtils.js.map +1 -0
  112. package/dist/utils/helpers/CacheManager.d.ts +67 -0
  113. package/dist/utils/helpers/CacheManager.d.ts.map +1 -0
  114. package/dist/utils/helpers/CacheManager.js +222 -0
  115. package/dist/utils/helpers/CacheManager.js.map +1 -0
  116. package/dist/utils/helpers/CompressionUtils.d.ts +80 -0
  117. package/dist/utils/helpers/CompressionUtils.d.ts.map +1 -0
  118. package/dist/utils/helpers/CompressionUtils.js +224 -0
  119. package/dist/utils/helpers/CompressionUtils.js.map +1 -0
  120. package/dist/utils/helpers/CryptoUtils.d.ts +70 -0
  121. package/dist/utils/helpers/CryptoUtils.d.ts.map +1 -0
  122. package/dist/utils/helpers/CryptoUtils.js +215 -0
  123. package/dist/utils/helpers/CryptoUtils.js.map +1 -0
  124. package/dist/utils/helpers/DateUtils.d.ts +31 -0
  125. package/dist/utils/helpers/DateUtils.d.ts.map +1 -0
  126. package/dist/utils/helpers/DateUtils.js +104 -0
  127. package/dist/utils/helpers/DateUtils.js.map +1 -0
  128. package/dist/utils/helpers/DiffUtils.d.ts +61 -0
  129. package/dist/utils/helpers/DiffUtils.d.ts.map +1 -0
  130. package/dist/utils/helpers/DiffUtils.js +249 -0
  131. package/dist/utils/helpers/DiffUtils.js.map +1 -0
  132. package/dist/utils/helpers/EnvManager.d.ts +7 -0
  133. package/dist/utils/helpers/EnvManager.d.ts.map +1 -0
  134. package/dist/utils/helpers/EnvManager.js +19 -0
  135. package/dist/utils/helpers/EnvManager.js.map +1 -0
  136. package/dist/utils/helpers/EventEmitter.d.ts +78 -0
  137. package/dist/utils/helpers/EventEmitter.d.ts.map +1 -0
  138. package/dist/utils/helpers/EventEmitter.js +208 -0
  139. package/dist/utils/helpers/EventEmitter.js.map +1 -0
  140. package/dist/utils/helpers/FileUploadHelper.d.ts +44 -0
  141. package/dist/utils/helpers/FileUploadHelper.d.ts.map +1 -0
  142. package/dist/utils/helpers/FileUploadHelper.js +127 -0
  143. package/dist/utils/helpers/FileUploadHelper.js.map +1 -0
  144. package/dist/utils/helpers/FormUtils.d.ts +162 -0
  145. package/dist/utils/helpers/FormUtils.d.ts.map +1 -0
  146. package/dist/utils/helpers/FormUtils.js +378 -0
  147. package/dist/utils/helpers/FormUtils.js.map +1 -0
  148. package/dist/utils/helpers/ObjectUtils.d.ts +102 -0
  149. package/dist/utils/helpers/ObjectUtils.d.ts.map +1 -0
  150. package/dist/utils/helpers/ObjectUtils.js +297 -0
  151. package/dist/utils/helpers/ObjectUtils.js.map +1 -0
  152. package/dist/utils/helpers/PaginationHelper.d.ts +127 -0
  153. package/dist/utils/helpers/PaginationHelper.d.ts.map +1 -0
  154. package/dist/utils/helpers/PaginationHelper.js +259 -0
  155. package/dist/utils/helpers/PaginationHelper.js.map +1 -0
  156. package/dist/utils/helpers/PollingHelper.d.ts +64 -0
  157. package/dist/utils/helpers/PollingHelper.d.ts.map +1 -0
  158. package/dist/utils/helpers/PollingHelper.js +131 -0
  159. package/dist/utils/helpers/PollingHelper.js.map +1 -0
  160. package/dist/utils/helpers/StorageUtils.d.ts +9 -0
  161. package/dist/utils/helpers/StorageUtils.d.ts.map +1 -0
  162. package/dist/utils/helpers/StorageUtils.js +33 -0
  163. package/dist/utils/helpers/StorageUtils.js.map +1 -0
  164. package/dist/utils/helpers/StreamingHelper.d.ts +35 -0
  165. package/dist/utils/helpers/StreamingHelper.d.ts.map +1 -0
  166. package/dist/utils/helpers/StreamingHelper.js +167 -0
  167. package/dist/utils/helpers/StreamingHelper.js.map +1 -0
  168. package/dist/utils/helpers/StringUtils.d.ts +42 -0
  169. package/dist/utils/helpers/StringUtils.d.ts.map +1 -0
  170. package/dist/utils/helpers/StringUtils.js +173 -0
  171. package/dist/utils/helpers/StringUtils.js.map +1 -0
  172. package/dist/utils/helpers/TimeUtils.d.ts +87 -0
  173. package/dist/utils/helpers/TimeUtils.d.ts.map +1 -0
  174. package/dist/utils/helpers/TimeUtils.js +234 -0
  175. package/dist/utils/helpers/TimeUtils.js.map +1 -0
  176. package/dist/utils/helpers/Validator.d.ts +31 -0
  177. package/dist/utils/helpers/Validator.d.ts.map +1 -0
  178. package/dist/utils/helpers/Validator.js +156 -0
  179. package/dist/utils/helpers/Validator.js.map +1 -0
  180. package/dist/utils/helpers/WebSocketHelper.d.ts +63 -0
  181. package/dist/utils/helpers/WebSocketHelper.d.ts.map +1 -0
  182. package/dist/utils/helpers/WebSocketHelper.js +200 -0
  183. package/dist/utils/helpers/WebSocketHelper.js.map +1 -0
  184. package/dist/utils/helpers/index.d.ts +20 -0
  185. package/dist/utils/helpers/index.d.ts.map +1 -0
  186. package/dist/utils/helpers/index.js +20 -0
  187. package/dist/utils/helpers/index.js.map +1 -0
  188. package/dist/utils/index.d.ts +21 -0
  189. package/dist/utils/index.d.ts.map +1 -0
  190. package/dist/utils/index.js +21 -0
  191. package/dist/utils/index.js.map +1 -0
  192. package/dist/validator.d.ts +2 -0
  193. package/dist/validator.d.ts.map +1 -0
  194. package/dist/validator.js +2 -0
  195. package/dist/validator.js.map +1 -0
  196. package/dist/websocket.d.ts +2 -0
  197. package/dist/websocket.d.ts.map +1 -0
  198. package/dist/websocket.js +2 -0
  199. package/dist/websocket.js.map +1 -0
  200. 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":"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"}
@@ -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