@mks2508/better-logger 0.18.2-alpha.1 → 0.18.2-alpha.2

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 (185) hide show
  1. package/README.md +38 -336
  2. package/dist/Logger.d.ts +243 -154
  3. package/dist/Logger.d.ts.map +1 -1
  4. package/dist/ScopedLogger.d.ts +511 -8
  5. package/dist/ScopedLogger.d.ts.map +1 -1
  6. package/dist/chunks/HookBridge-C-AvXmPD.cjs +504 -0
  7. package/dist/chunks/HookBridge-C-AvXmPD.cjs.map +1 -0
  8. package/dist/chunks/HookBridge-CI2PH79S.js +487 -0
  9. package/dist/chunks/HookBridge-CI2PH79S.js.map +1 -0
  10. package/dist/chunks/{LogContext-L7HzynFw.cjs → LogContext-BaMXleWj.cjs} +19 -4
  11. package/dist/chunks/LogContext-BaMXleWj.cjs.map +1 -0
  12. package/dist/chunks/{LogContext-Cwn-1Zzb.js → LogContext-DjlITOzZ.js} +19 -4
  13. package/dist/chunks/LogContext-DjlITOzZ.js.map +1 -0
  14. package/dist/chunks/SerializerBridge-Ba43Mk7j.js +393 -0
  15. package/dist/chunks/SerializerBridge-Ba43Mk7j.js.map +1 -0
  16. package/dist/chunks/SerializerBridge-C4a9Z37F.cjs +410 -0
  17. package/dist/chunks/SerializerBridge-C4a9Z37F.cjs.map +1 -0
  18. package/dist/chunks/{StyleManager-CIpd6wbO.cjs → StyleManager-DQ6UNRB-.cjs} +37 -11
  19. package/dist/chunks/StyleManager-DQ6UNRB-.cjs.map +1 -0
  20. package/dist/chunks/StyleManager-DjwAYbxE.js +113 -0
  21. package/dist/chunks/StyleManager-DjwAYbxE.js.map +1 -0
  22. package/dist/chunks/{core-PoT7RrTK.js → core-Blfi2klP.js} +1 -4
  23. package/dist/chunks/core-Blfi2klP.js.map +1 -0
  24. package/dist/chunks/{core-Dzz7agGa.cjs → core-CqS_UBzJ.cjs} +1 -4
  25. package/dist/chunks/core-CqS_UBzJ.cjs.map +1 -0
  26. package/dist/chunks/{environment-detector-CI3TrWK_.js → environment-detector-7NvnYUfr.js} +11 -11
  27. package/dist/chunks/environment-detector-7NvnYUfr.js.map +1 -0
  28. package/dist/chunks/{environment-detector-Cnn6wr6O.cjs → environment-detector-D-tHkKWA.cjs} +11 -11
  29. package/dist/chunks/environment-detector-D-tHkKWA.cjs.map +1 -0
  30. package/dist/chunks/server-fallback-CaCPjWby.cjs +119 -0
  31. package/dist/chunks/server-fallback-CaCPjWby.cjs.map +1 -0
  32. package/dist/chunks/server-fallback-jj0T6XaK.js +114 -0
  33. package/dist/chunks/server-fallback-jj0T6XaK.js.map +1 -0
  34. package/dist/chunks/{spinner-DNvxbM9a.cjs → spinner-BHyYEXsM.cjs} +319 -37
  35. package/dist/chunks/spinner-BHyYEXsM.cjs.map +1 -0
  36. package/dist/chunks/{spinner-D3FsF78o.js → spinner-BtkwpzYv.js} +319 -37
  37. package/dist/chunks/spinner-BtkwpzYv.js.map +1 -0
  38. package/dist/chunks/styling-CRw3KQW4.js +1592 -0
  39. package/dist/chunks/styling-CRw3KQW4.js.map +1 -0
  40. package/dist/chunks/styling-Cel2wPRy.cjs +1645 -0
  41. package/dist/chunks/styling-Cel2wPRy.cjs.map +1 -0
  42. package/dist/chunks/transports-BGfwwakw.js +1237 -0
  43. package/dist/chunks/transports-BGfwwakw.js.map +1 -0
  44. package/dist/chunks/transports-yK6CL0Ml.cjs +1278 -0
  45. package/dist/chunks/transports-yK6CL0Ml.cjs.map +1 -0
  46. package/dist/chunks/{utils-BqlFYocD.cjs → utils-W_cxqriN.cjs} +44 -37
  47. package/dist/chunks/utils-W_cxqriN.cjs.map +1 -0
  48. package/dist/chunks/{utils-VETbVpkR.js → utils-tKfBAWUM.js} +44 -37
  49. package/dist/chunks/utils-tKfBAWUM.js.map +1 -0
  50. package/dist/cli/CommandProcessor.d.ts +166 -19
  51. package/dist/cli/CommandProcessor.d.ts.map +1 -1
  52. package/dist/cli/commands/ConfigCommand.d.ts +36 -1
  53. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -1
  54. package/dist/cli/commands/ExportCommand.d.ts +49 -3
  55. package/dist/cli/commands/ExportCommand.d.ts.map +1 -1
  56. package/dist/cli/commands/ThemeCommand.d.ts +62 -3
  57. package/dist/cli/commands/ThemeCommand.d.ts.map +1 -1
  58. package/dist/cli/help.d.ts +30 -2
  59. package/dist/cli/help.d.ts.map +1 -1
  60. package/dist/cli/index.d.ts +29 -2
  61. package/dist/cli/index.d.ts.map +1 -1
  62. package/dist/cli.cjs +2 -2
  63. package/dist/cli.js +2 -2
  64. package/dist/context/LogContext.d.ts +165 -66
  65. package/dist/context/LogContext.d.ts.map +1 -1
  66. package/dist/context.cjs +1 -1
  67. package/dist/context.js +1 -1
  68. package/dist/core.cjs +52 -29
  69. package/dist/core.cjs.map +1 -1
  70. package/dist/core.d.ts +50 -27
  71. package/dist/core.d.ts.map +1 -1
  72. package/dist/core.js +52 -29
  73. package/dist/core.js.map +1 -1
  74. package/dist/hooks/HookBridge.d.ts +15 -9
  75. package/dist/hooks/HookBridge.d.ts.map +1 -1
  76. package/dist/hooks/HookManager.d.ts +295 -2
  77. package/dist/hooks/HookManager.d.ts.map +1 -1
  78. package/dist/hooks.cjs +1 -1
  79. package/dist/hooks.js +1 -1
  80. package/dist/index.cjs +1092 -212
  81. package/dist/index.cjs.map +1 -1
  82. package/dist/index.js +1092 -212
  83. package/dist/index.js.map +1 -1
  84. package/dist/playground/TerminalBridge.d.ts +23 -16
  85. package/dist/playground/TerminalBridge.d.ts.map +1 -1
  86. package/dist/playground/box.d.ts +36 -5
  87. package/dist/playground/box.d.ts.map +1 -1
  88. package/dist/playground/cli-table.d.ts +41 -5
  89. package/dist/playground/cli-table.d.ts.map +1 -1
  90. package/dist/playground/divider.d.ts +22 -3
  91. package/dist/playground/divider.d.ts.map +1 -1
  92. package/dist/playground/header.d.ts +21 -4
  93. package/dist/playground/header.d.ts.map +1 -1
  94. package/dist/playground/server-fallback.d.ts +96 -9
  95. package/dist/playground/server-fallback.d.ts.map +1 -1
  96. package/dist/playground/spinner.d.ts +159 -10
  97. package/dist/playground/spinner.d.ts.map +1 -1
  98. package/dist/playground/step.d.ts +25 -6
  99. package/dist/playground/step.d.ts.map +1 -1
  100. package/dist/playground.cjs +1 -1
  101. package/dist/playground.js +1 -1
  102. package/dist/serializers/SerializerBridge.d.ts +13 -6
  103. package/dist/serializers/SerializerBridge.d.ts.map +1 -1
  104. package/dist/serializers/SerializerRegistry.d.ts +236 -0
  105. package/dist/serializers/SerializerRegistry.d.ts.map +1 -1
  106. package/dist/serializers.cjs +1 -1
  107. package/dist/serializers.js +1 -1
  108. package/dist/styles/StyleManager.d.ts +138 -31
  109. package/dist/styles/StyleManager.d.ts.map +1 -1
  110. package/dist/styles.cjs +2 -2
  111. package/dist/styles.js +2 -2
  112. package/dist/styling/SmartPresets.d.ts +100 -6
  113. package/dist/styling/SmartPresets.d.ts.map +1 -1
  114. package/dist/styling/StyleBuilder.d.ts +453 -32
  115. package/dist/styling/StyleBuilder.d.ts.map +1 -1
  116. package/dist/styling/banners.d.ts +83 -7
  117. package/dist/styling/banners.d.ts.map +1 -1
  118. package/dist/styling/themes.d.ts +41 -2
  119. package/dist/styling/themes.d.ts.map +1 -1
  120. package/dist/transports/ConsoleTransport.d.ts +95 -0
  121. package/dist/transports/ConsoleTransport.d.ts.map +1 -1
  122. package/dist/transports/FileTransport.d.ts +99 -18
  123. package/dist/transports/FileTransport.d.ts.map +1 -1
  124. package/dist/transports/HttpTransport.d.ts +135 -22
  125. package/dist/transports/HttpTransport.d.ts.map +1 -1
  126. package/dist/transports/OtlpTransport.d.ts +53 -36
  127. package/dist/transports/OtlpTransport.d.ts.map +1 -1
  128. package/dist/transports/TransportBridge.d.ts +19 -13
  129. package/dist/transports/TransportBridge.d.ts.map +1 -1
  130. package/dist/transports/TransportManager.d.ts +223 -8
  131. package/dist/transports/TransportManager.d.ts.map +1 -1
  132. package/dist/transports.cjs +1 -1
  133. package/dist/transports.js +1 -1
  134. package/dist/types/core.d.ts +155 -59
  135. package/dist/types/core.d.ts.map +1 -1
  136. package/dist/types/hooks.d.ts +92 -14
  137. package/dist/types/hooks.d.ts.map +1 -1
  138. package/dist/types/serializers.d.ts +72 -0
  139. package/dist/types/serializers.d.ts.map +1 -1
  140. package/dist/types/transports.d.ts +42 -37
  141. package/dist/types/transports.d.ts.map +1 -1
  142. package/dist/utils/ansi-colors.d.ts +15 -15
  143. package/dist/utils/environment-detector.d.ts +11 -11
  144. package/dist/utils/formatting.d.ts +8 -8
  145. package/dist/utils/output.d.ts +9 -9
  146. package/dist/utils/output.d.ts.map +1 -1
  147. package/dist/utils/stackTrace.d.ts +2 -2
  148. package/package.json +24 -25
  149. package/dist/chunks/HookBridge-CiRfR67f.cjs +0 -190
  150. package/dist/chunks/HookBridge-CiRfR67f.cjs.map +0 -1
  151. package/dist/chunks/HookBridge-SgMmbXZB.js +0 -173
  152. package/dist/chunks/HookBridge-SgMmbXZB.js.map +0 -1
  153. package/dist/chunks/LogContext-Cwn-1Zzb.js.map +0 -1
  154. package/dist/chunks/LogContext-L7HzynFw.cjs.map +0 -1
  155. package/dist/chunks/SerializerBridge-BaOQOb8q.cjs +0 -166
  156. package/dist/chunks/SerializerBridge-BaOQOb8q.cjs.map +0 -1
  157. package/dist/chunks/SerializerBridge-BkpQu5c9.js +0 -149
  158. package/dist/chunks/SerializerBridge-BkpQu5c9.js.map +0 -1
  159. package/dist/chunks/StyleManager-CIpd6wbO.cjs.map +0 -1
  160. package/dist/chunks/StyleManager-LCvVlVdx.js +0 -87
  161. package/dist/chunks/StyleManager-LCvVlVdx.js.map +0 -1
  162. package/dist/chunks/core-Dzz7agGa.cjs.map +0 -1
  163. package/dist/chunks/core-PoT7RrTK.js.map +0 -1
  164. package/dist/chunks/environment-detector-CI3TrWK_.js.map +0 -1
  165. package/dist/chunks/environment-detector-Cnn6wr6O.cjs.map +0 -1
  166. package/dist/chunks/server-fallback-BUKjdLS7.cjs +0 -42
  167. package/dist/chunks/server-fallback-BUKjdLS7.cjs.map +0 -1
  168. package/dist/chunks/server-fallback-BsuWH1Dk.js +0 -37
  169. package/dist/chunks/server-fallback-BsuWH1Dk.js.map +0 -1
  170. package/dist/chunks/spinner-D3FsF78o.js.map +0 -1
  171. package/dist/chunks/spinner-DNvxbM9a.cjs.map +0 -1
  172. package/dist/chunks/styling-84N8T97t.js +0 -941
  173. package/dist/chunks/styling-84N8T97t.js.map +0 -1
  174. package/dist/chunks/styling-Cg5saQ46.cjs +0 -994
  175. package/dist/chunks/styling-Cg5saQ46.cjs.map +0 -1
  176. package/dist/chunks/transports-BiDk345e.js +0 -715
  177. package/dist/chunks/transports-BiDk345e.js.map +0 -1
  178. package/dist/chunks/transports-COPWmlF1.cjs +0 -756
  179. package/dist/chunks/transports-COPWmlF1.cjs.map +0 -1
  180. package/dist/chunks/utils-BqlFYocD.cjs.map +0 -1
  181. package/dist/chunks/utils-VETbVpkR.js.map +0 -1
  182. package/dist/example.d.ts +0 -18
  183. package/dist/example.d.ts.map +0 -1
  184. package/dist/main.d.ts +0 -2
  185. package/dist/main.d.ts.map +0 -1
@@ -1,26 +1,319 @@
1
1
  import type { HookLogEntry, HookEvent, HookCallback, MiddlewareFn, IHookManager } from '../types/index.js';
2
+ /**
3
+ * Implementación por defecto de {@link IHookManager} que orquesta el ciclo de
4
+ * vida de los hooks del logger: `beforeLog`, `afterLog` y `onError`.
5
+ *
6
+ * Permite:
7
+ * - Registrar callbacks por evento con **prioridad** (mayor número = se
8
+ * ejecuta primero; las registraciones se ordenan descendentemente).
9
+ * - Encadenar middlewares sobre el entry previo al dispatch.
10
+ * - Propagar mutaciones: cada hook puede retornar un partial de
11
+ * {@link HookLogEntry} que se mergea al entry actual antes del siguiente hook.
12
+ * - Acotar la recursión de `onError` con un guard de profundidad
13
+ * ({@link MAX_ONERROR_DEPTH}) para que un hook que lanza no loopée para
14
+ * siempre.
15
+ *
16
+ * El flujo típico lo orquesta el logger vía {@link process} (emite `beforeLog`
17
+ * + ejecuta middlewares) y {@link afterProcess} (emite `afterLog`).
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const hooks = new HookManager();
22
+ *
23
+ * // Mayor prioridad => corre primero
24
+ * hooks.on('beforeLog', (entry) => {
25
+ * return { ...entry, attributes: { ...entry.attributes, traced: true } };
26
+ * }, 90);
27
+ *
28
+ * hooks.on('afterLog', (entry) => {
29
+ * metrics.increment('log_emitted', { level: entry.level });
30
+ * });
31
+ *
32
+ * hooks.on('onError', (entry) => {
33
+ * telemetry.capture(entry.error);
34
+ * });
35
+ * ```
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * // Middleware que añade timestamp si falta y delega al siguiente
40
+ * hooks.use(async (entry, next) => {
41
+ * if (!entry.time) entry.time = Date.now();
42
+ * await next();
43
+ * });
44
+ * ```
45
+ *
46
+ * @see {@link IHookManager}
47
+ * @see {@link HookEvent}
48
+ */
2
49
  export declare class HookManager implements IHookManager {
3
50
  private hooks;
4
51
  private middlewares;
5
52
  /**
6
- * Tracks current recursion depth for each hook event so `onError` chains
7
- * that throw can't loop forever. Reset when the outer emit returns.
53
+ * Lleva el conteo de la profundidad de recursión actual por cada evento de
54
+ * hook, para que las cadenas de `onError` que lanzan excepciones no puedan
55
+ * loopéar para siempre. Se resetea cuando el `emit` externo retorna.
8
56
  */
9
57
  private _onErrorDepth;
10
58
  constructor();
59
+ /**
60
+ * Registra un callback persistente para un evento. Se ejecuta en cada
61
+ * emisión hasta que se cancele con la función devuelta o con {@link off}.
62
+ *
63
+ * Los hooks se ordenan por `priority` **descendente**: mayor número =
64
+ * se ejecuta primero. Misma prioridad respeta el orden de registro.
65
+ *
66
+ * @param event - Uno de `'beforeLog' | 'afterLog' | 'onError'`.
67
+ * @param callback - Función asíncrona que recibe el {@link HookLogEntry}
68
+ * actual y puede retornar un partial para mutar el entry que verán los
69
+ * hooks siguientes.
70
+ * @param priority - Peso de ordenamiento. Default `50`. Mayor = primero.
71
+ * @returns {() => void} Función de cancelación; llamarla desregistra el hook.
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * const off = hooks.on('beforeLog', async (entry) => {
76
+ * return { attributes: { ...entry.attributes, requestId: getReqId() } };
77
+ * }, 80);
78
+ *
79
+ * // ...en shutdown:
80
+ * off();
81
+ * ```
82
+ *
83
+ * @see {@link once} para hooks de un solo disparo.
84
+ * @see {@link off} para desregistro por referencia de callback.
85
+ */
11
86
  on(event: HookEvent, callback: HookCallback, priority?: number): () => void;
87
+ /**
88
+ * Igual que {@link on}, pero el hook se auto-desregistra después del primer
89
+ * disparo exitoso. Útil para setup one-shot (warm-up de caché, captura del
90
+ * primer log, ...).
91
+ *
92
+ * Si el callback lanza, el hook NO se elimina (la excepción se deriva a
93
+ * `onError`); la limpieza solo ocurre cuando el callback retorna sin Throw.
94
+ *
95
+ * @param event - Evento a escuchar.
96
+ * @param callback - Handler que se ejecutará una sola vez.
97
+ * @param priority - Peso de ordenamiento (mayor = primero). Default `50`.
98
+ * @returns {() => void} Cancelación manual por si se quiere retirar antes
99
+ * del primer disparo.
100
+ *
101
+ * @example
102
+ * ```ts
103
+ * hooks.once('afterLog', async (entry) => {
104
+ * console.log('Primer log emitido:', entry.msg);
105
+ * });
106
+ * ```
107
+ *
108
+ * @see {@link on}
109
+ */
12
110
  once(event: HookEvent, callback: HookCallback, priority?: number): () => void;
111
+ /**
112
+ * Desregistra un hook por referencia de callback. Solo elimina la primera
113
+ * coincidencia encontrada para el evento.
114
+ *
115
+ * Para hooks registrados con {@link on} o {@link once} es preferible usar
116
+ * la función de cancelación devuelta (que usa el id interno y es O(n) más
117
+ * directa). `off` es útil cuando se perdió la referencia al cancelador o
118
+ * cuando se integra con APIs que piden un método `removeListener(cb)`.
119
+ *
120
+ * @param event - Evento del que se quiere desregistrar.
121
+ * @param callback - Misma referencia de función pasada a {@link on}/{@link once}.
122
+ * @returns {boolean} `true` si se eliminó un hook, `false` si no había match.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * const handler = async (entry) => { /* ... *\/ };
127
+ * hooks.on('afterLog', handler);
128
+ * hooks.off('afterLog', handler); // true
129
+ * ```
130
+ *
131
+ * @see {@link on}
132
+ */
13
133
  off(event: HookEvent, callback: HookCallback): boolean;
14
134
  private removeHook;
135
+ /**
136
+ * Registra un middleware que se encadena sobre el {@link HookLogEntry}
137
+ * **antes** de que se emita el log al resto del pipeline. Los middlewares
138
+ * corren después del evento `beforeLog` y se ejecutan en cascada vía `next()`.
139
+ *
140
+ * Cada middleware recibe `(entry, next)` y debe llamar a `next()` para
141
+ * ceder el control al siguiente. Si NO llama a `next()`, corta la cadena
142
+ * (patrón short-circuit).
143
+ *
144
+ * Ordenamiento: `priority` descendente (mayor = primero), igual que los
145
+ * hooks. La secuencia respetada es la del sort, no la del orden de
146
+ * llamada a `use`.
147
+ *
148
+ * @param middleware - Función `(entry, next) => Promise<void>`.
149
+ * @param priority - Peso de ordenamiento. Default `50`.
150
+ * @returns {() => void} Función de cancelación para retirar el middleware.
151
+ *
152
+ * @example
153
+ * ```ts
154
+ * // PII redaction: enmascara passwords antes de loguear
155
+ * hooks.use(async (entry, next) => {
156
+ * if (entry.attributes?.password) {
157
+ * entry.attributes.password = '***';
158
+ * }
159
+ * await next();
160
+ * }, 90);
161
+ *
162
+ * // Short-circuit: si es level=debug y env=prod, no baja
163
+ * const stop = hooks.use(async (entry, next) => {
164
+ * if (entry.level === 'debug' && ENV === 'production') return;
165
+ * await next();
166
+ * }, 100);
167
+ * ```
168
+ *
169
+ * @see {@link process} para el orquestador que ejecuta la cadena.
170
+ */
15
171
  use(middleware: MiddlewareFn, priority?: number): () => void;
172
+ /**
173
+ * Emite un evento a todos sus hooks registrados, en orden de prioridad, y
174
+ * retorna el entry resultante tras aplicar todos los mutations.
175
+ *
176
+ * Cada hook puede retornar un partial de {@link HookLogEntry}; ese partial
177
+ * se mergea sobre el entry actual antes de invocar al siguiente hook, así
178
+ * los hooks se encadenan como una pipeline de transformaciones.
179
+ *
180
+ * Manejo de errores:
181
+ * - Si un hook de `beforeLog`/`afterLog` lanza, la excepción se captura y
182
+ * se re-emite como evento `onError` con el campo `error` poblado.
183
+ * - Si un hook de `onError` lanza, **NO** se re-emite (rompería el ciclo);
184
+ * se loguea a `console.error` y se traga.
185
+ * - Guard de reentrancia: si `onError` se re-entra más de
186
+ * {@link MAX_ONERROR_DEPTH} veces, se corta y se loguea el entry al
187
+ * console. Previene loops infinitos por errores en cascada.
188
+ *
189
+ * Los hooks marcados como `once` se eliminan tras un disparo exitoso.
190
+ *
191
+ * @param event - Evento a emitir.
192
+ * @param entry - Entry inicial; no se muta in-place (se clona por nivel).
193
+ * @returns {Promise<HookLogEntry>} Entry transformado tras todos los hooks.
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * const enriched = await hooks.emit('beforeLog', rawEntry);
198
+ * // enriched.attributes puede traer merges de varios hooks
199
+ * ```
200
+ *
201
+ * @see {@link on}
202
+ * @see {@link once}
203
+ * @see {@link MAX_ONERROR_DEPTH}
204
+ */
16
205
  emit(event: HookEvent, entry: HookLogEntry): Promise<HookLogEntry>;
206
+ /**
207
+ * Orquesta el pipeline pre-emit de un log. Orden de ejecución:
208
+ *
209
+ * 1. Emite `beforeLog` (todos sus hooks corren en orden de prioridad y
210
+ * pueden mutar el entry vía return partial).
211
+ * 2. Si hay middlewares registrados ({@link use}), los ejecuta en cascada
212
+ * sobre el entry ya enriquecido por los hooks de `beforeLog`.
213
+ *
214
+ * Es el punto de entrada que el logger invoca **antes** de despachar el
215
+ * record a los transports. El entry devuelto es el que finalmente se loguea.
216
+ *
217
+ * No emite `afterLog`; para eso usar {@link afterProcess} una vez que el
218
+ * dispatch al transport haya terminado.
219
+ *
220
+ * @param entry - Entry crudo entrante al pipeline.
221
+ * @returns {Promise<HookLogEntry>} Entry final listo para mandar a transports.
222
+ *
223
+ * @example
224
+ * ```ts
225
+ * const processed = await hooks.process(rawEntry);
226
+ * await transport.write(processed);
227
+ * await hooks.afterProcess(processed);
228
+ * ```
229
+ *
230
+ * @see {@link afterProcess}
231
+ * @see {@link use}
232
+ */
17
233
  process(entry: HookLogEntry): Promise<HookLogEntry>;
234
+ /**
235
+ * Emite el evento `afterLog` con el entry ya procesado y dispatcheado a
236
+ * los transports. Pensado para side-effects post-log: métricas, audit
237
+ * trail, flush de buffers externos, etc.
238
+ *
239
+ * Los hooks de `afterLog` pueden retornar un partial pero el entry ya se
240
+ * ha publicado, así que la mutación no tiene efecto sobre el log emitido;
241
+ * solo queda disponible en el return de {@link emit}, que aquí se descarta.
242
+ *
243
+ * @param entry - Entry final (mismo objeto devuelto por {@link process}).
244
+ * @returns {Promise<void>} Resuelve cuando todos los hooks terminaron.
245
+ *
246
+ * @example
247
+ * ```ts
248
+ * hooks.on('afterLog', async (entry) => {
249
+ * metrics.increment('logs_total', { level: entry.level });
250
+ * });
251
+ *
252
+ * const processed = await hooks.process(rawEntry);
253
+ * await transport.write(processed);
254
+ * await hooks.afterProcess(processed); // dispara métricas
255
+ * ```
256
+ *
257
+ * @see {@link process}
258
+ */
18
259
  afterProcess(entry: HookLogEntry): Promise<void>;
260
+ /**
261
+ * Vacía todos los hooks y middlewares registrados. Útil para resetear el
262
+ * estado entre tests o en hot-reload.
263
+ *
264
+ * Afecta a los tres eventos (`beforeLog`, `afterLog`, `onError`) y a la
265
+ * pila de middlewares. Las funciones de cancelación devueltas por
266
+ * {@link on}/{@link once}/{@link use} se vuelven no-ops pero pueden
267
+ * llamarse sin error.
268
+ *
269
+ * @example
270
+ * ```ts
271
+ * afterEach(() => hooks.clear());
272
+ * ```
273
+ */
19
274
  clear(): void;
275
+ /**
276
+ * Snapshot del estado interno para observabilidad y debugging.
277
+ *
278
+ * @returns {Object} stats
279
+ * @returns {Record<HookEvent, number>} stats.hooks - Conteo de hooks
280
+ * registrados por evento (`beforeLog`, `afterLog`, `onError`).
281
+ * @returns {number} stats.middlewares - Total de middlewares activos.
282
+ *
283
+ * @example
284
+ * ```ts
285
+ * const stats = hooks.getStats();
286
+ * // { hooks: { beforeLog: 2, afterLog: 1, onError: 3 }, middlewares: 1 }
287
+ * if (stats.hooks.onError === 0) {
288
+ * console.warn('Sin handlers onError registrados');
289
+ * }
290
+ * ```
291
+ */
20
292
  getStats(): {
21
293
  hooks: Record<HookEvent, number>;
22
294
  middlewares: number;
23
295
  };
24
296
  }
297
+ /**
298
+ * Devuelve la instancia singleton de {@link HookManager} compartida por todo
299
+ * el proceso. La crea perezosamente en la primera llamada.
300
+ *
301
+ * Pensada como hook manager por defecto del logger; los consumidores que
302
+ * necesiten aislamiento (tests, múltiples loggers con pipelines distintos)
303
+ * deben instanciar su propio `new HookManager()` en lugar de usar este shared.
304
+ *
305
+ * @returns {HookManager} La instancia singleton.
306
+ *
307
+ * @example
308
+ * ```ts
309
+ * import { getDefaultHookManager } from '@mks2508/better-logger/hooks';
310
+ *
311
+ * getDefaultHookManager().on('onError', async (entry) => {
312
+ * telemetry.capture(entry.error);
313
+ * });
314
+ * ```
315
+ *
316
+ * @see {@link HookManager}
317
+ */
25
318
  export declare function getDefaultHookManager(): HookManager;
26
319
  //# sourceMappingURL=HookManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"HookManager.d.ts","sourceRoot":"","sources":["../../src/hooks/HookManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EAGZ,YAAY,EACf,MAAM,mBAAmB,CAAC;AAQ3B,qBAAa,WAAY,YAAW,YAAY;IAC5C,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,WAAW,CAAgC;IACnD;;;OAGG;IACH,OAAO,CAAC,aAAa,CAAqC;;IAQ1D,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,IAAI;IAgB/E,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,IAAI;IAgBjF,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO;IAYtD,OAAO,CAAC,UAAU;IAUlB,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,IAAI;IAkB1D,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDlE,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBnD,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD,KAAK,IAAI,IAAI;IAKb,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;CAUxE;AAID,wBAAgB,qBAAqB,IAAI,WAAW,CAKnD"}
1
+ {"version":3,"file":"HookManager.d.ts","sourceRoot":"","sources":["../../src/hooks/HookManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EAGZ,YAAY,EACf,MAAM,mBAAmB,CAAC;AA2B3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,qBAAa,WAAY,YAAW,YAAY;IAC5C,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,WAAW,CAAgC;IACnD;;;;OAIG;IACH,OAAO,CAAC,aAAa,CAAqC;;IAQ1D;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,IAAI;IAgB/E;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,IAAI;IAgBjF;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO;IAYtD,OAAO,CAAC,UAAU;IAUlB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmCG;IACH,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,IAAI;IAkBhE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACG,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAmDxE;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACG,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAuBzD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACG,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAItD;;;;;;;;;;;;;OAaG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,IAAI;QAAE,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE;CAUxE;AAID;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAKnD"}
package/dist/hooks.cjs CHANGED
@@ -1,5 +1,5 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- const require_HookBridge = require("./chunks/HookBridge-CiRfR67f.cjs");
2
+ const require_HookBridge = require("./chunks/HookBridge-C-AvXmPD.cjs");
3
3
  exports.HookManager = require_HookBridge.HookManager;
4
4
  exports.createHookBridge = require_HookBridge.createHookBridge;
5
5
  exports.getDefaultHookManager = require_HookBridge.getDefaultHookManager;
package/dist/hooks.js CHANGED
@@ -1,2 +1,2 @@
1
- import { n as HookManager, r as getDefaultHookManager, t as createHookBridge } from "./chunks/HookBridge-SgMmbXZB.js";
1
+ import { n as HookManager, r as getDefaultHookManager, t as createHookBridge } from "./chunks/HookBridge-CI2PH79S.js";
2
2
  export { HookManager, createHookBridge, getDefaultHookManager };