@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.
- package/README.md +38 -336
- package/dist/Logger.d.ts +243 -154
- package/dist/Logger.d.ts.map +1 -1
- package/dist/ScopedLogger.d.ts +511 -8
- package/dist/ScopedLogger.d.ts.map +1 -1
- package/dist/chunks/HookBridge-C-AvXmPD.cjs +504 -0
- package/dist/chunks/HookBridge-C-AvXmPD.cjs.map +1 -0
- package/dist/chunks/HookBridge-CI2PH79S.js +487 -0
- package/dist/chunks/HookBridge-CI2PH79S.js.map +1 -0
- package/dist/chunks/{LogContext-L7HzynFw.cjs → LogContext-BaMXleWj.cjs} +19 -4
- package/dist/chunks/LogContext-BaMXleWj.cjs.map +1 -0
- package/dist/chunks/{LogContext-Cwn-1Zzb.js → LogContext-DjlITOzZ.js} +19 -4
- package/dist/chunks/LogContext-DjlITOzZ.js.map +1 -0
- package/dist/chunks/SerializerBridge-Ba43Mk7j.js +393 -0
- package/dist/chunks/SerializerBridge-Ba43Mk7j.js.map +1 -0
- package/dist/chunks/SerializerBridge-C4a9Z37F.cjs +410 -0
- package/dist/chunks/SerializerBridge-C4a9Z37F.cjs.map +1 -0
- package/dist/chunks/{StyleManager-CIpd6wbO.cjs → StyleManager-DQ6UNRB-.cjs} +37 -11
- package/dist/chunks/StyleManager-DQ6UNRB-.cjs.map +1 -0
- package/dist/chunks/StyleManager-DjwAYbxE.js +113 -0
- package/dist/chunks/StyleManager-DjwAYbxE.js.map +1 -0
- package/dist/chunks/{core-PoT7RrTK.js → core-Blfi2klP.js} +1 -4
- package/dist/chunks/core-Blfi2klP.js.map +1 -0
- package/dist/chunks/{core-Dzz7agGa.cjs → core-CqS_UBzJ.cjs} +1 -4
- package/dist/chunks/core-CqS_UBzJ.cjs.map +1 -0
- package/dist/chunks/{environment-detector-CI3TrWK_.js → environment-detector-7NvnYUfr.js} +11 -11
- package/dist/chunks/environment-detector-7NvnYUfr.js.map +1 -0
- package/dist/chunks/{environment-detector-Cnn6wr6O.cjs → environment-detector-D-tHkKWA.cjs} +11 -11
- package/dist/chunks/environment-detector-D-tHkKWA.cjs.map +1 -0
- package/dist/chunks/server-fallback-CaCPjWby.cjs +119 -0
- package/dist/chunks/server-fallback-CaCPjWby.cjs.map +1 -0
- package/dist/chunks/server-fallback-jj0T6XaK.js +114 -0
- package/dist/chunks/server-fallback-jj0T6XaK.js.map +1 -0
- package/dist/chunks/{spinner-DNvxbM9a.cjs → spinner-BHyYEXsM.cjs} +319 -37
- package/dist/chunks/spinner-BHyYEXsM.cjs.map +1 -0
- package/dist/chunks/{spinner-D3FsF78o.js → spinner-BtkwpzYv.js} +319 -37
- package/dist/chunks/spinner-BtkwpzYv.js.map +1 -0
- package/dist/chunks/styling-CRw3KQW4.js +1592 -0
- package/dist/chunks/styling-CRw3KQW4.js.map +1 -0
- package/dist/chunks/styling-Cel2wPRy.cjs +1645 -0
- package/dist/chunks/styling-Cel2wPRy.cjs.map +1 -0
- package/dist/chunks/transports-BGfwwakw.js +1237 -0
- package/dist/chunks/transports-BGfwwakw.js.map +1 -0
- package/dist/chunks/transports-yK6CL0Ml.cjs +1278 -0
- package/dist/chunks/transports-yK6CL0Ml.cjs.map +1 -0
- package/dist/chunks/{utils-BqlFYocD.cjs → utils-W_cxqriN.cjs} +44 -37
- package/dist/chunks/utils-W_cxqriN.cjs.map +1 -0
- package/dist/chunks/{utils-VETbVpkR.js → utils-tKfBAWUM.js} +44 -37
- package/dist/chunks/utils-tKfBAWUM.js.map +1 -0
- package/dist/cli/CommandProcessor.d.ts +166 -19
- package/dist/cli/CommandProcessor.d.ts.map +1 -1
- package/dist/cli/commands/ConfigCommand.d.ts +36 -1
- package/dist/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/dist/cli/commands/ExportCommand.d.ts +49 -3
- package/dist/cli/commands/ExportCommand.d.ts.map +1 -1
- package/dist/cli/commands/ThemeCommand.d.ts +62 -3
- package/dist/cli/commands/ThemeCommand.d.ts.map +1 -1
- package/dist/cli/help.d.ts +30 -2
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.d.ts +29 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli.cjs +2 -2
- package/dist/cli.js +2 -2
- package/dist/context/LogContext.d.ts +165 -66
- package/dist/context/LogContext.d.ts.map +1 -1
- package/dist/context.cjs +1 -1
- package/dist/context.js +1 -1
- package/dist/core.cjs +52 -29
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +50 -27
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +52 -29
- package/dist/core.js.map +1 -1
- package/dist/hooks/HookBridge.d.ts +15 -9
- package/dist/hooks/HookBridge.d.ts.map +1 -1
- package/dist/hooks/HookManager.d.ts +295 -2
- package/dist/hooks/HookManager.d.ts.map +1 -1
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.js +1 -1
- package/dist/index.cjs +1092 -212
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1092 -212
- package/dist/index.js.map +1 -1
- package/dist/playground/TerminalBridge.d.ts +23 -16
- package/dist/playground/TerminalBridge.d.ts.map +1 -1
- package/dist/playground/box.d.ts +36 -5
- package/dist/playground/box.d.ts.map +1 -1
- package/dist/playground/cli-table.d.ts +41 -5
- package/dist/playground/cli-table.d.ts.map +1 -1
- package/dist/playground/divider.d.ts +22 -3
- package/dist/playground/divider.d.ts.map +1 -1
- package/dist/playground/header.d.ts +21 -4
- package/dist/playground/header.d.ts.map +1 -1
- package/dist/playground/server-fallback.d.ts +96 -9
- package/dist/playground/server-fallback.d.ts.map +1 -1
- package/dist/playground/spinner.d.ts +159 -10
- package/dist/playground/spinner.d.ts.map +1 -1
- package/dist/playground/step.d.ts +25 -6
- package/dist/playground/step.d.ts.map +1 -1
- package/dist/playground.cjs +1 -1
- package/dist/playground.js +1 -1
- package/dist/serializers/SerializerBridge.d.ts +13 -6
- package/dist/serializers/SerializerBridge.d.ts.map +1 -1
- package/dist/serializers/SerializerRegistry.d.ts +236 -0
- package/dist/serializers/SerializerRegistry.d.ts.map +1 -1
- package/dist/serializers.cjs +1 -1
- package/dist/serializers.js +1 -1
- package/dist/styles/StyleManager.d.ts +138 -31
- package/dist/styles/StyleManager.d.ts.map +1 -1
- package/dist/styles.cjs +2 -2
- package/dist/styles.js +2 -2
- package/dist/styling/SmartPresets.d.ts +100 -6
- package/dist/styling/SmartPresets.d.ts.map +1 -1
- package/dist/styling/StyleBuilder.d.ts +453 -32
- package/dist/styling/StyleBuilder.d.ts.map +1 -1
- package/dist/styling/banners.d.ts +83 -7
- package/dist/styling/banners.d.ts.map +1 -1
- package/dist/styling/themes.d.ts +41 -2
- package/dist/styling/themes.d.ts.map +1 -1
- package/dist/transports/ConsoleTransport.d.ts +95 -0
- package/dist/transports/ConsoleTransport.d.ts.map +1 -1
- package/dist/transports/FileTransport.d.ts +99 -18
- package/dist/transports/FileTransport.d.ts.map +1 -1
- package/dist/transports/HttpTransport.d.ts +135 -22
- package/dist/transports/HttpTransport.d.ts.map +1 -1
- package/dist/transports/OtlpTransport.d.ts +53 -36
- package/dist/transports/OtlpTransport.d.ts.map +1 -1
- package/dist/transports/TransportBridge.d.ts +19 -13
- package/dist/transports/TransportBridge.d.ts.map +1 -1
- package/dist/transports/TransportManager.d.ts +223 -8
- package/dist/transports/TransportManager.d.ts.map +1 -1
- package/dist/transports.cjs +1 -1
- package/dist/transports.js +1 -1
- package/dist/types/core.d.ts +155 -59
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +92 -14
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/serializers.d.ts +72 -0
- package/dist/types/serializers.d.ts.map +1 -1
- package/dist/types/transports.d.ts +42 -37
- package/dist/types/transports.d.ts.map +1 -1
- package/dist/utils/ansi-colors.d.ts +15 -15
- package/dist/utils/environment-detector.d.ts +11 -11
- package/dist/utils/formatting.d.ts +8 -8
- package/dist/utils/output.d.ts +9 -9
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/stackTrace.d.ts +2 -2
- package/package.json +24 -25
- package/dist/chunks/HookBridge-CiRfR67f.cjs +0 -190
- package/dist/chunks/HookBridge-CiRfR67f.cjs.map +0 -1
- package/dist/chunks/HookBridge-SgMmbXZB.js +0 -173
- package/dist/chunks/HookBridge-SgMmbXZB.js.map +0 -1
- package/dist/chunks/LogContext-Cwn-1Zzb.js.map +0 -1
- package/dist/chunks/LogContext-L7HzynFw.cjs.map +0 -1
- package/dist/chunks/SerializerBridge-BaOQOb8q.cjs +0 -166
- package/dist/chunks/SerializerBridge-BaOQOb8q.cjs.map +0 -1
- package/dist/chunks/SerializerBridge-BkpQu5c9.js +0 -149
- package/dist/chunks/SerializerBridge-BkpQu5c9.js.map +0 -1
- package/dist/chunks/StyleManager-CIpd6wbO.cjs.map +0 -1
- package/dist/chunks/StyleManager-LCvVlVdx.js +0 -87
- package/dist/chunks/StyleManager-LCvVlVdx.js.map +0 -1
- package/dist/chunks/core-Dzz7agGa.cjs.map +0 -1
- package/dist/chunks/core-PoT7RrTK.js.map +0 -1
- package/dist/chunks/environment-detector-CI3TrWK_.js.map +0 -1
- package/dist/chunks/environment-detector-Cnn6wr6O.cjs.map +0 -1
- package/dist/chunks/server-fallback-BUKjdLS7.cjs +0 -42
- package/dist/chunks/server-fallback-BUKjdLS7.cjs.map +0 -1
- package/dist/chunks/server-fallback-BsuWH1Dk.js +0 -37
- package/dist/chunks/server-fallback-BsuWH1Dk.js.map +0 -1
- package/dist/chunks/spinner-D3FsF78o.js.map +0 -1
- package/dist/chunks/spinner-DNvxbM9a.cjs.map +0 -1
- package/dist/chunks/styling-84N8T97t.js +0 -941
- package/dist/chunks/styling-84N8T97t.js.map +0 -1
- package/dist/chunks/styling-Cg5saQ46.cjs +0 -994
- package/dist/chunks/styling-Cg5saQ46.cjs.map +0 -1
- package/dist/chunks/transports-BiDk345e.js +0 -715
- package/dist/chunks/transports-BiDk345e.js.map +0 -1
- package/dist/chunks/transports-COPWmlF1.cjs +0 -756
- package/dist/chunks/transports-COPWmlF1.cjs.map +0 -1
- package/dist/chunks/utils-BqlFYocD.cjs.map +0 -1
- package/dist/chunks/utils-VETbVpkR.js.map +0 -1
- package/dist/example.d.ts +0 -18
- package/dist/example.d.ts.map +0 -1
- package/dist/main.d.ts +0 -2
- 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
|
-
*
|
|
7
|
-
*
|
|
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;
|
|
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-
|
|
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-
|
|
1
|
+
import { n as HookManager, r as getDefaultHookManager, t as createHookBridge } from "./chunks/HookBridge-CI2PH79S.js";
|
|
2
2
|
export { HookManager, createHookBridge, getDefaultHookManager };
|