@mks2508/better-logger 0.14.0-alpha.2 → 1.1.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 (205) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/dist/Logger.d.ts +12 -16
  3. package/dist/Logger.d.ts.map +1 -1
  4. package/dist/ScopedLogger.d.ts +1 -9
  5. package/dist/chunks/{Logger-D_p3xnbq.js → Logger-C9zTFYBh.js} +2 -2
  6. package/dist/chunks/Logger-C9zTFYBh.js.map +1 -0
  7. package/dist/chunks/{Logger-Crw1woqR.js → Logger-Th9SfADL.js} +50 -17
  8. package/dist/chunks/Logger-Th9SfADL.js.map +1 -0
  9. package/dist/chunks/ScopedLogger-HgV_J-ug.js +2 -0
  10. package/dist/chunks/ScopedLogger-HgV_J-ug.js.map +1 -0
  11. package/dist/chunks/ScopedLogger-uAAeJkfA.js +361 -0
  12. package/dist/chunks/ScopedLogger-uAAeJkfA.js.map +1 -0
  13. package/dist/chunks/environment-5I5unY89.js +4 -0
  14. package/dist/chunks/environment-5I5unY89.js.map +1 -0
  15. package/dist/chunks/{environment-Bxbnw4pd.js → environment-wXLQvk5g.js} +103 -11
  16. package/dist/chunks/environment-wXLQvk5g.js.map +1 -0
  17. package/dist/chunks/formatting-CiFnwe1I.js +2 -0
  18. package/dist/chunks/formatting-CiFnwe1I.js.map +1 -0
  19. package/dist/chunks/formatting-DIhpRCCk.js +380 -0
  20. package/dist/chunks/formatting-DIhpRCCk.js.map +1 -0
  21. package/dist/cli/CommandProcessor.d.ts +1 -4
  22. package/dist/cli/commands/ConfigCommand.d.ts +2 -5
  23. package/dist/cli/commands/ExportCommand.d.ts +2 -5
  24. package/dist/cli/commands/HistoryCommand.d.ts +2 -5
  25. package/dist/cli/commands/StatusCommand.d.ts +2 -5
  26. package/dist/cli/commands/ThemeCommand.d.ts +2 -5
  27. package/dist/cli/help.d.ts +2 -5
  28. package/dist/cli/index.d.ts +1 -1
  29. package/dist/constants.d.ts +110 -5
  30. package/dist/constants.d.ts.map +1 -1
  31. package/dist/core.cjs +1 -1
  32. package/dist/core.cjs.map +1 -1
  33. package/dist/core.d.ts +1 -8
  34. package/dist/core.d.ts.map +1 -1
  35. package/dist/core.js +281 -307
  36. package/dist/core.js.map +1 -1
  37. package/dist/exports-module.d.ts +1 -8
  38. package/dist/exports.cjs +1 -1
  39. package/dist/exports.js +2 -2
  40. package/dist/handlers/AnalyticsLogHandler.d.ts +1 -4
  41. package/dist/handlers/ExportLogHandler.d.ts +1 -4
  42. package/dist/handlers/ExportLogHandler.d.ts.map +1 -1
  43. package/dist/handlers/FileLogHandler.d.ts +1 -4
  44. package/dist/handlers/RemoteLogHandler.d.ts +1 -4
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.ts +8 -41
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +246 -159
  50. package/dist/index.js.map +1 -1
  51. package/dist/styling/LogStyleBuilder.d.ts +2 -5
  52. package/dist/styling/SemanticStyles.d.ts +0 -3
  53. package/dist/styling/SmartPresets.d.ts +1 -4
  54. package/dist/styling/banners.d.ts +1 -4
  55. package/dist/styling/themes.d.ts +2 -5
  56. package/dist/styling-module.d.ts +1 -8
  57. package/dist/styling.cjs +1 -1
  58. package/dist/styling.js +3 -3
  59. package/dist/types/core.d.ts +13 -0
  60. package/dist/types/core.d.ts.map +1 -1
  61. package/dist/types/handlers.d.ts +1 -4
  62. package/dist/types/index.d.ts +1 -1
  63. package/dist/types/index.d.ts.map +1 -1
  64. package/dist/utils/ansi-colors.d.ts +156 -0
  65. package/dist/utils/ansi-colors.d.ts.map +1 -0
  66. package/dist/utils/formatting.d.ts +20 -2
  67. package/dist/utils/formatting.d.ts.map +1 -1
  68. package/dist/utils/index.d.ts +1 -0
  69. package/dist/utils/index.d.ts.map +1 -1
  70. package/dist/utils/output.d.ts +1 -4
  71. package/dist/utils/stackTrace.d.ts +1 -4
  72. package/package.json +2 -1
  73. package/src/Logger.ts +102 -64
  74. package/src/constants.ts +131 -1
  75. package/src/core.ts +11 -7
  76. package/src/handlers/ExportLogHandler.ts +2 -1
  77. package/src/index.ts +62 -27
  78. package/src/styling/SemanticStyles.ts +1 -1
  79. package/src/types/core.ts +15 -1
  80. package/src/types/index.ts +1 -0
  81. package/src/utils/ansi-colors.ts +333 -0
  82. package/src/utils/formatting.ts +196 -6
  83. package/src/utils/index.ts +23 -11
  84. package/vite.config.ts +1 -1
  85. package/dist/.tsbuildinfo +0 -1
  86. package/dist/Logger.js +0 -1124
  87. package/dist/ScopedLogger.js +0 -426
  88. package/dist/chunks/Logger-Crw1woqR.js.map +0 -1
  89. package/dist/chunks/Logger-D_p3xnbq.js.map +0 -1
  90. package/dist/chunks/environment-Bxbnw4pd.js.map +0 -1
  91. package/dist/chunks/environment-Dm66zOML.js +0 -4
  92. package/dist/chunks/environment-Dm66zOML.js.map +0 -1
  93. package/dist/chunks/formatting-C0riPC5_.js +0 -95
  94. package/dist/chunks/formatting-C0riPC5_.js.map +0 -1
  95. package/dist/chunks/formatting-DNCAV66-.js +0 -2
  96. package/dist/chunks/formatting-DNCAV66-.js.map +0 -1
  97. package/dist/cli/CommandProcessor.js +0 -184
  98. package/dist/cli/commands/ConfigCommand.js +0 -88
  99. package/dist/cli/commands/ExportCommand.js +0 -243
  100. package/dist/cli/commands/HistoryCommand.js +0 -96
  101. package/dist/cli/commands/StatusCommand.js +0 -93
  102. package/dist/cli/commands/ThemeCommand.js +0 -79
  103. package/dist/cli/help.js +0 -118
  104. package/dist/cli/index.js +0 -46
  105. package/dist/constants.js +0 -159
  106. package/dist/example.js +0 -154
  107. package/dist/exports-module.js +0 -260
  108. package/dist/handlers/AnalyticsLogHandler.js +0 -19
  109. package/dist/handlers/ExportLogHandler.js +0 -516
  110. package/dist/handlers/FileLogHandler.js +0 -156
  111. package/dist/handlers/RemoteLogHandler.js +0 -37
  112. package/dist/handlers/index.js +0 -7
  113. package/dist/main.js +0 -139
  114. package/dist/styling/LogStyleBuilder.js +0 -289
  115. package/dist/styling/SemanticStyles.js +0 -339
  116. package/dist/styling/SmartPresets.js +0 -276
  117. package/dist/styling/StyleBuilder.js +0 -280
  118. package/dist/styling/banners.js +0 -155
  119. package/dist/styling/index.js +0 -9
  120. package/dist/styling/themes.js +0 -231
  121. package/dist/styling-module.js +0 -199
  122. package/dist/types/Logger.d.ts +0 -700
  123. package/dist/types/Logger.d.ts.map +0 -1
  124. package/dist/types/ScopedLogger.d.ts +0 -310
  125. package/dist/types/ScopedLogger.d.ts.map +0 -1
  126. package/dist/types/cli/CommandProcessor.d.ts +0 -100
  127. package/dist/types/cli/CommandProcessor.d.ts.map +0 -1
  128. package/dist/types/cli/commands/ConfigCommand.d.ts +0 -14
  129. package/dist/types/cli/commands/ConfigCommand.d.ts.map +0 -1
  130. package/dist/types/cli/commands/ExportCommand.d.ts +0 -48
  131. package/dist/types/cli/commands/ExportCommand.d.ts.map +0 -1
  132. package/dist/types/cli/commands/HistoryCommand.d.ts +0 -47
  133. package/dist/types/cli/commands/HistoryCommand.d.ts.map +0 -1
  134. package/dist/types/cli/commands/StatusCommand.d.ts +0 -30
  135. package/dist/types/cli/commands/StatusCommand.d.ts.map +0 -1
  136. package/dist/types/cli/commands/ThemeCommand.d.ts +0 -30
  137. package/dist/types/cli/commands/ThemeCommand.d.ts.map +0 -1
  138. package/dist/types/cli/help.d.ts +0 -12
  139. package/dist/types/cli/help.d.ts.map +0 -1
  140. package/dist/types/cli/index.d.ts +0 -15
  141. package/dist/types/cli/index.d.ts.map +0 -1
  142. package/dist/types/constants.d.ts +0 -119
  143. package/dist/types/constants.d.ts.map +0 -1
  144. package/dist/types/core.js +0 -28
  145. package/dist/types/example.d.ts +0 -18
  146. package/dist/types/example.d.ts.map +0 -1
  147. package/dist/types/exports-module.d.ts +0 -196
  148. package/dist/types/exports-module.d.ts.map +0 -1
  149. package/dist/types/handlers/AnalyticsLogHandler.d.ts +0 -8
  150. package/dist/types/handlers/AnalyticsLogHandler.d.ts.map +0 -1
  151. package/dist/types/handlers/ExportLogHandler.d.ts +0 -100
  152. package/dist/types/handlers/ExportLogHandler.d.ts.map +0 -1
  153. package/dist/types/handlers/FileLogHandler.d.ts +0 -33
  154. package/dist/types/handlers/FileLogHandler.d.ts.map +0 -1
  155. package/dist/types/handlers/RemoteLogHandler.d.ts +0 -11
  156. package/dist/types/handlers/RemoteLogHandler.d.ts.map +0 -1
  157. package/dist/types/handlers/index.d.ts +0 -8
  158. package/dist/types/handlers/index.d.ts.map +0 -1
  159. package/dist/types/handlers.js +0 -4
  160. package/dist/types/index.js +0 -4
  161. package/dist/types/main.d.ts +0 -2
  162. package/dist/types/main.d.ts.map +0 -1
  163. package/dist/types/styling/LogStyleBuilder.d.ts +0 -146
  164. package/dist/types/styling/LogStyleBuilder.d.ts.map +0 -1
  165. package/dist/types/styling/SemanticStyles.d.ts +0 -178
  166. package/dist/types/styling/SemanticStyles.d.ts.map +0 -1
  167. package/dist/types/styling/SmartPresets.d.ts +0 -22
  168. package/dist/types/styling/SmartPresets.d.ts.map +0 -1
  169. package/dist/types/styling/StyleBuilder.d.ts +0 -140
  170. package/dist/types/styling/StyleBuilder.d.ts.map +0 -1
  171. package/dist/types/styling/banners.d.ts +0 -42
  172. package/dist/types/styling/banners.d.ts.map +0 -1
  173. package/dist/types/styling/index.d.ts +0 -10
  174. package/dist/types/styling/index.d.ts.map +0 -1
  175. package/dist/types/styling/themes.d.ts +0 -7
  176. package/dist/types/styling/themes.d.ts.map +0 -1
  177. package/dist/types/styling-module.d.ts +0 -178
  178. package/dist/types/styling-module.d.ts.map +0 -1
  179. package/dist/types/types/core.d.ts +0 -221
  180. package/dist/types/types/core.d.ts.map +0 -1
  181. package/dist/types/types/handlers.d.ts +0 -85
  182. package/dist/types/types/handlers.d.ts.map +0 -1
  183. package/dist/types/types/index.d.ts +0 -7
  184. package/dist/types/types/index.d.ts.map +0 -1
  185. package/dist/types/utils/environment.d.ts +0 -47
  186. package/dist/types/utils/environment.d.ts.map +0 -1
  187. package/dist/types/utils/formatting.d.ts +0 -37
  188. package/dist/types/utils/formatting.d.ts.map +0 -1
  189. package/dist/types/utils/index.d.ts +0 -7
  190. package/dist/types/utils/index.d.ts.map +0 -1
  191. package/dist/types/utils/opentui-detection.d.ts +0 -34
  192. package/dist/types/utils/opentui-detection.d.ts.map +0 -1
  193. package/dist/types/utils/output.d.ts +0 -41
  194. package/dist/types/utils/output.d.ts.map +0 -1
  195. package/dist/types/utils/stackTrace.d.ts +0 -6
  196. package/dist/types/utils/stackTrace.d.ts.map +0 -1
  197. package/dist/types/utils/timestamps.d.ts +0 -20
  198. package/dist/types/utils/timestamps.d.ts.map +0 -1
  199. package/dist/utils/environment.js +0 -85
  200. package/dist/utils/formatting.js +0 -117
  201. package/dist/utils/index.js +0 -6
  202. package/dist/utils/opentui-detection.js +0 -116
  203. package/dist/utils/output.js +0 -150
  204. package/dist/utils/stackTrace.js +0 -81
  205. package/dist/utils/timestamps.js +0 -71
@@ -1,426 +0,0 @@
1
- /**
2
- * @fileoverview ScopedLogger con badges y logging contextual
3
- * @version 0.3.0
4
- * @since 2024
5
- *
6
- * Proporciona loggers especializados con contexto, badges automáticos
7
- * y características avanzadas para componentes y APIs.
8
- */
9
- import { Logger } from './Logger.js';
10
- /**
11
- * Logger con scope mejorado con badges y API simplificada
12
- *
13
- * @class ScopedLogger
14
- * @extends Logger
15
- * @description Logger contextual que añade prefijos y badges automáticamente
16
- *
17
- * @example
18
- * const dbLogger = logger.scope('Database');
19
- * dbLogger.info('Conectando...'); // [Database] Conectando...
20
- *
21
- * // Con badges personalizados
22
- * dbLogger.badge('SLOW').warn('Query lenta detectada');
23
- * // [SLOW] [Database] Query lenta detectada
24
- *
25
- * @since 0.3.0
26
- */
27
- export class ScopedLogger extends Logger {
28
- parentLogger;
29
- scopeName;
30
- badgeList = [];
31
- contextStack = [];
32
- constructor(parentLogger, scopeName, config) {
33
- // Initialize with parent's config plus any overrides
34
- super({ ...parentLogger.getConfig(), ...config });
35
- this.parentLogger = parentLogger;
36
- this.scopeName = scopeName;
37
- // Inherit parent's handlers
38
- const parentHandlers = parentLogger.getHandlers();
39
- parentHandlers.forEach(handler => this.addHandler(handler));
40
- }
41
- /**
42
- * Añade múltiples badges a este logger con scope
43
- *
44
- * @param {string[]} badges - Array de badges a añadir
45
- * @returns {ScopedLogger} Esta instancia para encadenamiento
46
- *
47
- * @example
48
- * const api = logger.scope('API');
49
- * api.badges(['v2', 'beta', 'cached'])
50
- * .info('Respuesta desde caché');
51
- * // [v2] [beta] [cached] [API] Respuesta desde caché
52
- *
53
- * @since 0.3.0
54
- */
55
- badges(badges) {
56
- this.badgeList = [...badges];
57
- return this;
58
- }
59
- /**
60
- * Añade un badge individual
61
- *
62
- * @param {string} badge - Badge a añadir
63
- * @returns {ScopedLogger} Esta instancia para encadenamiento
64
- *
65
- * @example
66
- * dbLogger.badge('SLOW').warn('Query tardó 3s');
67
- * // [SLOW] [Database] Query tardó 3s
68
- *
69
- * @since 0.3.0
70
- */
71
- badge(badge) {
72
- if (!this.badgeList.includes(badge)) {
73
- this.badgeList.push(badge);
74
- }
75
- return this;
76
- }
77
- /**
78
- * Elimina todos los badges
79
- *
80
- * @returns {ScopedLogger} Esta instancia para encadenamiento
81
- *
82
- * @example
83
- * api.clearBadges().info('Sin badges');
84
- * // [API] Sin badges
85
- *
86
- * @since 0.3.0
87
- */
88
- clearBadges() {
89
- this.badgeList = [];
90
- return this;
91
- }
92
- /**
93
- * Establece un preset de estilo para este logger con scope
94
- *
95
- * @param {string} presetName - Nombre del preset a aplicar
96
- * @returns {ScopedLogger} Esta instancia para encadenamiento
97
- *
98
- * @example
99
- * const errorLogger = logger.scope('ErrorHandler')
100
- * .style('cyberpunk');
101
- *
102
- * @since 0.3.0
103
- */
104
- style(presetName) {
105
- this.setTheme(presetName); // Will be updated when we implement presets
106
- return this;
107
- }
108
- /**
109
- * Crea un contexto temporal que se limpia automáticamente
110
- *
111
- * @param {string} contextName - Nombre del contexto
112
- * @returns {ContextLogger} Logger con contexto temporal
113
- *
114
- * @example
115
- * const db = logger.scope('Database');
116
- *
117
- * // Contexto temporal para una operación
118
- * db.context('Migration').run(() => {
119
- * db.info('Iniciando migración');
120
- * db.success('Tablas creadas');
121
- * });
122
- * // Contexto automáticamente limpiado
123
- *
124
- * @since 0.3.0
125
- */
126
- context(contextName) {
127
- return new ContextLogger(this, contextName);
128
- }
129
- /**
130
- * Sobrescribe el logging principal para incluir badges
131
- * @protected
132
- * @param {LogLevel} level - Nivel del log
133
- * @param {...any} args - Argumentos del log
134
- */
135
- log(level, ...args) {
136
- // Build the enhanced message with badges
137
- const badges = this.getBadgeString();
138
- const scopePrefix = this.getScopePrefix();
139
- let enhancedMessage = '';
140
- if (badges)
141
- enhancedMessage += badges + ' ';
142
- if (scopePrefix)
143
- enhancedMessage += `[${scopePrefix}] `;
144
- if (args.length > 0) {
145
- enhancedMessage += String(args[0]);
146
- // Replace the first argument with our enhanced message
147
- args[0] = enhancedMessage;
148
- }
149
- // Call parent's log method
150
- super.log(level, ...args);
151
- }
152
- /**
153
- * Obtiene la cadena de badges formateada
154
- * @private
155
- * @returns {string} Badges formateados como [BADGE1][BADGE2]
156
- */
157
- getBadgeString() {
158
- if (this.badgeList.length === 0)
159
- return '';
160
- return this.badgeList.map(badge => `[${badge}]`).join('');
161
- }
162
- /**
163
- * Obtiene el prefijo del scope (incluye stack de contexto)
164
- * @private
165
- * @returns {string} Prefijo completo con contextos
166
- */
167
- getScopePrefix() {
168
- const parts = [this.scopeName, ...this.contextStack].filter(Boolean);
169
- return parts.join(':');
170
- }
171
- /**
172
- * Método interno para añadir contexto
173
- * @internal
174
- */
175
- _pushContext(context) {
176
- this.contextStack.push(context);
177
- }
178
- /**
179
- * Método interno para eliminar contexto
180
- * @internal
181
- */
182
- _popContext() {
183
- this.contextStack.pop();
184
- }
185
- }
186
- /**
187
- * Logger específico para APIs con badges comunes de API
188
- *
189
- * @class APILogger
190
- * @extends ScopedLogger
191
- * @description Logger especializado para endpoints y servicios API
192
- *
193
- * @example
194
- * const api = logger.api('REST');
195
- * api.info('GET /users');
196
- * // [API] [REST] GET /users
197
- *
198
- * api.slow('Query lenta', 3500);
199
- * // [API] [SLOW] [REST] Query lenta (3500ms)
200
- *
201
- * @since 0.3.0
202
- */
203
- export class APILogger extends ScopedLogger {
204
- constructor(parentLogger, apiName, config) {
205
- super(parentLogger, `API:${apiName}`, config);
206
- this.badge('API');
207
- }
208
- /**
209
- * Registra operaciones lentas
210
- *
211
- * @param {string} message - Mensaje sobre la operación lenta
212
- * @param {number} duration - Duración en milisegundos (opcional)
213
- *
214
- * @example
215
- * api.slow('Query compleja', 5000);
216
- * api.slow('Procesamiento pesado');
217
- *
218
- * @since 0.3.0
219
- */
220
- slow(message, duration) {
221
- this.badge('SLOW');
222
- const msg = duration ? `${message} (${duration}ms)` : message;
223
- this.warn(msg);
224
- }
225
- /**
226
- * Registra límites de tasa alcanzados
227
- *
228
- * @param {string} message - Mensaje sobre el límite
229
- *
230
- * @example
231
- * api.rateLimit('Límite excedido: 100 req/min');
232
- *
233
- * @since 0.3.0
234
- */
235
- rateLimit(message) {
236
- this.badge('RATE_LIMIT');
237
- this.warn(message);
238
- }
239
- /**
240
- * Registra problemas de autenticación
241
- *
242
- * @param {string} message - Mensaje de autenticación
243
- *
244
- * @example
245
- * api.auth('Token inválido o expirado');
246
- * api.auth('Credenciales incorrectas');
247
- *
248
- * @since 0.3.0
249
- */
250
- auth(message) {
251
- this.badge('AUTH');
252
- this.error(message);
253
- }
254
- /**
255
- * Registra advertencias de deprecación
256
- *
257
- * @param {string} message - Mensaje de deprecación
258
- *
259
- * @example
260
- * api.deprecated('Este endpoint será eliminado en v2.0');
261
- * api.deprecated('Usar /v2/users en lugar de /users');
262
- *
263
- * @since 0.3.0
264
- */
265
- deprecated(message) {
266
- this.badge('DEPRECATED');
267
- this.warn(message);
268
- }
269
- }
270
- /**
271
- * Logger específico para componentes de UI
272
- *
273
- * @class ComponentLogger
274
- * @extends ScopedLogger
275
- * @description Logger especializado para componentes con eventos de ciclo de vida
276
- *
277
- * @example
278
- * const authForm = logger.component('AuthForm');
279
- * authForm.lifecycle('mounted');
280
- * authForm.stateChange('idle', 'loading');
281
- *
282
- * @since 0.3.0
283
- */
284
- export class ComponentLogger extends ScopedLogger {
285
- constructor(parentLogger, componentName, config) {
286
- super(parentLogger, componentName, config);
287
- this.badge('COMPONENT');
288
- }
289
- /**
290
- * Registra eventos del ciclo de vida del componente
291
- *
292
- * @param {string} event - Nombre del evento (mounted, unmounted, updated, etc)
293
- * @param {string} message - Mensaje adicional (opcional)
294
- *
295
- * @example
296
- * component.lifecycle('mounted', 'Componente listo');
297
- * component.lifecycle('beforeDestroy');
298
- *
299
- * @since 0.3.0
300
- */
301
- lifecycle(event, message) {
302
- this.badge('LIFECYCLE');
303
- const msg = message ? `${event}: ${message}` : event;
304
- this.info(msg);
305
- }
306
- /**
307
- * Registra cambios de estado
308
- *
309
- * @param {string} from - Estado anterior
310
- * @param {string} to - Estado nuevo
311
- * @param {any} data - Datos adicionales (opcional)
312
- *
313
- * @example
314
- * component.stateChange('idle', 'loading');
315
- * component.stateChange('loading', 'error', { code: 404 });
316
- *
317
- * @since 0.3.0
318
- */
319
- stateChange(from, to, data) {
320
- this.badge('STATE');
321
- const msg = `${from} → ${to}`;
322
- if (data) {
323
- this.info(msg, data);
324
- }
325
- else {
326
- this.info(msg);
327
- }
328
- }
329
- /**
330
- * Registra cambios en las propiedades
331
- *
332
- * @param {Record<string, any>} changes - Objeto con los cambios
333
- *
334
- * @example
335
- * component.propsChange({
336
- * user: newUser,
337
- * isActive: true
338
- * });
339
- *
340
- * @since 0.3.0
341
- */
342
- propsChange(changes) {
343
- this.badge('PROPS');
344
- this.debug('Props changed:', changes);
345
- }
346
- }
347
- /**
348
- * Logger de contexto temporal que se limpia automáticamente
349
- *
350
- * @class ContextLogger
351
- * @description Proporciona un contexto temporal para operaciones agrupadas
352
- *
353
- * @example
354
- * const db = logger.scope('Database');
355
- *
356
- * // El contexto se limpia automáticamente al finalizar
357
- * db.context('Transaction').run(() => {
358
- * db.info('Iniciando transacción');
359
- * db.success('Transacción completada');
360
- * });
361
- *
362
- * @since 0.3.0
363
- */
364
- export class ContextLogger {
365
- parentLogger;
366
- contextName;
367
- constructor(parentLogger, contextName) {
368
- this.parentLogger = parentLogger;
369
- this.contextName = contextName;
370
- }
371
- /**
372
- * Ejecuta una función con este contexto activo
373
- *
374
- * @template T - Tipo de retorno de la función
375
- * @param {Function} fn - Función a ejecutar
376
- * @returns {T} Resultado de la función
377
- *
378
- * @example
379
- * const result = logger.context('Process').run(() => {
380
- * logger.info('Procesando...');
381
- * return processData();
382
- * });
383
- *
384
- * @since 0.3.0
385
- */
386
- run(fn) {
387
- this.parentLogger._pushContext(this.contextName);
388
- try {
389
- return fn();
390
- }
391
- finally {
392
- this.parentLogger._popContext();
393
- }
394
- }
395
- /**
396
- * Run an async function with this context active
397
- */
398
- async runAsync(fn) {
399
- this.parentLogger._pushContext(this.contextName);
400
- try {
401
- return await fn();
402
- }
403
- finally {
404
- this.parentLogger._popContext();
405
- }
406
- }
407
- /**
408
- * Start the context (manual mode)
409
- */
410
- start() {
411
- this.parentLogger._pushContext(this.contextName);
412
- }
413
- /**
414
- * End the context (manual mode)
415
- */
416
- end() {
417
- this.parentLogger._popContext();
418
- }
419
- // Delegate logging methods to parent with context
420
- debug(...args) { this.parentLogger.debug(...args); }
421
- info(...args) { this.parentLogger.info(...args); }
422
- warn(...args) { this.parentLogger.warn(...args); }
423
- error(...args) { this.parentLogger.error(...args); }
424
- success(...args) { this.parentLogger.success(...args); }
425
- critical(...args) { this.parentLogger.critical(...args); }
426
- }