@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,9 +1,32 @@
1
1
  /**
2
- * @fileoverview Banner configurations for Advanced Logger
2
+ * @fileoverview Configuraciones de banner para Advanced Logger.
3
3
  */
4
4
  import type { BannerType, ThemeVariant } from '../types/index.js';
5
5
  /**
6
- * Banner variants for different display capabilities
6
+ * Catálogo de variantes del banner de inicialización del logger.
7
+ *
8
+ * Cada variante es un par `{ text, style }` listo para pasar a
9
+ * `console.log(\`%c${text}\`, style)`. Las variantes escalan en complejidad
10
+ * visual según las capacidades del navegador:
11
+ * - `simple` — una sola línea con gradiente.
12
+ * - `ascii` — ASCII art multiníveles (Safari, sin SVG).
13
+ * - `unicode` — caja Unicode con gradiente de fondo.
14
+ * - `svg` — `background-image` SVG con texto vectorial.
15
+ * - `animated` — gradiente animado vía `@keyframes gradientShift`.
16
+ *
17
+ * La función {@link detectBannerCapabilities} elige automáticamente la
18
+ * variante más rica soportada por el entorno actual.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * import { BANNER_VARIANTS } from '@mks2508/better-logger/styles';
23
+ *
24
+ * const { text, style } = BANNER_VARIANTS.unicode;
25
+ * console.log(`%c${text}`, style);
26
+ * ```
27
+ *
28
+ * @see {@link BannerType} para la unión de claves válidas.
29
+ * @see {@link displayInitBanner} para pintar el banner auto-detectado.
7
30
  */
8
31
  export declare const BANNER_VARIANTS: {
9
32
  simple: {
@@ -28,22 +51,75 @@ export declare const BANNER_VARIANTS: {
28
51
  };
29
52
  };
30
53
  /**
31
- * Theme-specific banners for enhanced visual theming
54
+ * Banners de inicialización específicos por {@link ThemeVariant}.
55
+ *
56
+ * Cada theme trae su propio par `{ simple, style }` (banner de una línea
57
+ * + CSS) que combina con la paleta del theme. El texto del banner es
58
+ * siempre una sola línea (sin ASCII art), por lo que es la variante
59
+ * usada por defecto cuando el logger arranca con un theme concreto.
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * import { THEME_BANNERS } from '@mks2508/better-logger/styles';
64
+ *
65
+ * const { simple, style } = THEME_BANNERS.cyberpunk;
66
+ * console.log(`%c${simple}`, style);
67
+ * ```
68
+ *
69
+ * @see {@link THEME_PRESETS} para los estilos de badge por nivel de cada theme.
70
+ * @see {@link ThemeVariant} para la lista de themes disponibles.
32
71
  */
33
72
  export declare const THEME_BANNERS: Record<ThemeVariant, {
34
73
  simple: string;
35
74
  style: string;
36
75
  }>;
37
76
  /**
38
- * Feature detection for banner capabilities. Returns `'simple'` immediately
39
- * if neither `navigator` nor `document` exist (Node, SSR, workers).
77
+ * Detecta la variante de banner más rica que el entorno puede renderizar.
40
78
  *
79
+ * Usa `navigator.userAgent` y probes sobre `document` para decidir entre
80
+ * `animated` (Chrome con CSS animations), `svg` (Chrome/Firefox con SVG),
81
+ * `unicode` (Chrome/Firefox fallback), `ascii` (Safari) o `simple`
82
+ * (todo lo demás). En entornos sin `navigator` o `document` retorna
83
+ * `'simple'` inmediatamente (Node, SSR, Web Workers).
84
+ *
85
+ * @returns {BannerType} Variante de banner recomendada para el entorno.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * import { detectBannerCapabilities } from '@mks2508/better-logger/styles';
90
+ *
91
+ * const capable = detectBannerCapabilities();
92
+ * console.log(`Best banner for this env: ${capable}`);
93
+ * ```
94
+ *
95
+ * @see {@link BANNER_VARIANTS} para el catálogo que indexa este resultado.
41
96
  */
42
97
  export declare function detectBannerCapabilities(): BannerType;
43
98
  /**
44
- * Display initialization banner with advanced styling. No-op in Node,
45
- * SSR, or Web Workers (DOM-guard at the top).
99
+ * Pinta el banner de inicialización del logger en la consola del navegador.
100
+ *
101
+ * Si no se pasa `bannerType`, se auto-detecta vía
102
+ * {@link detectBannerCapabilities}. Además del banner, abre un
103
+ * `console.group` con la lista de features soportadas (styling, stack
104
+ * traces, performance timers, handlers, ...).
105
+ *
106
+ * No-op cuando `document` no está disponible (Node, SSR, Web Workers),
107
+ * para evitar referencias a APIs inexistentes.
108
+ *
109
+ * @param {BannerType} [bannerType] - Variante de banner a pintar. Si se
110
+ * omite, se detecta automáticamente la mejor soportada.
111
+ * @returns {void}
112
+ *
113
+ * @example
114
+ * ```ts
115
+ * import { displayInitBanner } from '@mks2508/better-logger/styles';
116
+ *
117
+ * displayInitBanner(); // auto-detecta
118
+ * displayInitBanner('ascii'); // fuerza ASCII art
119
+ * ```
46
120
  *
121
+ * @see {@link BANNER_VARIANTS} para las variantes disponibles.
122
+ * @see {@link THEME_BANNERS} para banners específicos por theme.
47
123
  */
48
124
  export declare function displayInitBanner(bannerType?: BannerType): void;
49
125
  //# sourceMappingURL=banners.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"banners.d.ts","sourceRoot":"","sources":["../../src/styling/banners.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAElE;;GAEG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAoD3B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAyBjF,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,UAAU,CA8BrD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAyC/D"}
1
+ {"version":3,"file":"banners.d.ts","sourceRoot":"","sources":["../../src/styling/banners.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;CAoD3B,CAAC;AAEF;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAyBjF,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,wBAAwB,IAAI,UAAU,CA8BrD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,IAAI,CAyC/D"}
@@ -1,10 +1,49 @@
1
1
  /**
2
- * @fileoverview Theme presets for Advanced Logger
2
+ * @fileoverview Presets de themes visuales para Advanced Logger.
3
3
  */
4
4
  import type { ThemeVariant } from '../types/index.js';
5
5
  import type { LevelStyleConfig } from '../utils/index.js';
6
6
  /**
7
- * Theme configurations for different visual styles
7
+ * Catálogo de themes visuales para los badges de cada log level.
8
+ *
9
+ * Cada {@link ThemeVariant} mapea a un record de {@link LevelStyleConfig}
10
+ * indexado por nivel (`debug`, `info`, `warn`, `error`, `success`,
11
+ * `critical`). El {@link StyleManager} consume este mappeo para resolver
12
+ * los estilos CSS del badge que rodea al label del nivel en la consola
13
+ * del navegador.
14
+ *
15
+ * Un {@link LevelStyleConfig} por nivel define seis campos visuales:
16
+ * - `emoji` — glyph que precede al label (vacío en themes minimal).
17
+ * - `label` — texto en mayúsculas renderizado dentro del badge.
18
+ * - `background` — CSS background (típicamente un `linear-gradient`).
19
+ * - `color` — color del texto interior del badge.
20
+ * - `border` — CSS border completo (`<width> <style> <color>`).
21
+ * - `shadow` — box-shadow alrededor del badge; `'none'` lo desactiva.
22
+ *
23
+ * Themes disponibles: `default` (gradientes vivos), `dark` (paleta oscura
24
+ * para DevTools oscuro), `neon` (glow neón sobre fondo oscuro), `minimal`
25
+ * (badges planos sin sombras ni emojis), `light` (paleta pastel para
26
+ * DevTools claro) y `cyberpunk` (cian/magenta con sombras extendidas).
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * import { THEME_PRESETS } from '@mks2508/better-logger/styles';
31
+ *
32
+ * // Inspeccionar el badge `error` del theme `neon`
33
+ * const { emoji, label, background, color } = THEME_PRESETS.neon.error;
34
+ * console.log(`${emoji} ${label} → ${background}`);
35
+ * ```
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * // Aplicar un theme al logger entero
40
+ * import logger from '@mks2508/better-logger';
41
+ * logger.configure({ theme: 'cyberpunk' });
42
+ * logger.error('Algo se rompió'); // badge con glow magenta
43
+ * ```
44
+ *
45
+ * @see {@link ThemeVariant} para la lista de claves válidas.
46
+ * @see {@link LevelStyleConfig} para la shape exacta de cada entrada.
8
47
  */
9
48
  export declare const THEME_PRESETS: Record<ThemeVariant, Record<string, LevelStyleConfig>>;
10
49
  //# sourceMappingURL=themes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/styling/themes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;GAEG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAgOhF,CAAC"}
1
+ {"version":3,"file":"themes.d.ts","sourceRoot":"","sources":["../../src/styling/themes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAmQhF,CAAC"}
@@ -1,9 +1,104 @@
1
1
  import type { TransportRecord, TransportOptions, ITransport } from '../types/index.js';
2
+ /**
3
+ * Transport por defecto que escribe cada {@link TransportRecord} al `console`
4
+ * global del runtime (navegador o Node.js).
5
+ *
6
+ * Es el transport que el Logger registra automáticamente cuando no se configura
7
+ * ninguno explícito, garantizando que los registros siempre lleguen a un
8
+ * destino visible sin configuración adicional.
9
+ *
10
+ * **Mapeo level → console method**: traduce cada nivel de log al método más
11
+ * cercano de la API `console`, de forma que el filtrado nativo del DevTools /
12
+ * `NODE_DEBUG` siga funcionando:
13
+ *
14
+ * | LogLevel | console method |
15
+ * |--------------|----------------|
16
+ * | `debug` | `console.log` |
17
+ * | `info` | `console.info` |
18
+ * | `warn` | `console.warn` |
19
+ * | `error` | `console.error`|
20
+ * | `critical` | `console.error`|
21
+ *
22
+ * **Formato de output**: cada línea se compone como
23
+ * `[LEVEL] [prefix] message (file:line)`, donde `prefix` y la localización
24
+ * se omiten si el registro no las trae.
25
+ *
26
+ * @example
27
+ * // Uso directo como ITransport
28
+ * import { ConsoleTransport } from '@mks2508/better-logger/transports';
29
+ * const transport = new ConsoleTransport();
30
+ * transport.write({
31
+ * level: 'info',
32
+ * msg: 'Arrancando worker',
33
+ * prefix: 'worker',
34
+ * // ... resto del TransportRecord
35
+ * });
36
+ * // → console.info("[INFO] [worker] Arrancando worker (worker.ts:12)")
37
+ *
38
+ * @example
39
+ * // Registro a través del Logger (típico — el logger lo añade por defecto)
40
+ * logger.addTransport({ target: new ConsoleTransport() });
41
+ *
42
+ * @see {@link ITransport}
43
+ * @see {@link TransportRecord}
44
+ */
2
45
  export declare class ConsoleTransport implements ITransport {
3
46
  private options?;
47
+ /** Identificador del transport usado por el Logger para deduplicar y exponer metadatos. */
4
48
  readonly name = "console";
49
+ /**
50
+ * Crea una instancia de {@link ConsoleTransport}.
51
+ *
52
+ * El parámetro `options` se acepta para cumplir con la firma canónica de
53
+ * {@link TransportOptions} (filtros de nivel, formateadores, etc.), aunque
54
+ * la implementación actual escribe el registro tal cual llega sin
55
+ * transformaciones adicionales.
56
+ *
57
+ * @param {TransportOptions} [options] - Configuración opcional del transport
58
+ * (nivel mínimo, formatter, etc.).
59
+ *
60
+ * @example
61
+ * const transport = new ConsoleTransport({ level: 'warn' });
62
+ */
5
63
  constructor(options?: TransportOptions | undefined);
64
+ /**
65
+ * Escribe un {@link TransportRecord} al `console` global.
66
+ *
67
+ * Selecciona el método de console según el nivel del registro, compone el
68
+ * prefijo `[LEVEL] [prefix]` y, si la localización está disponible, añade
69
+ * el sufijo `(file:line)`. No lanza ni retorna errores: si `console[method]`
70
+ * fallara (raro), la excepción propagaría al caller.
71
+ *
72
+ * @param {TransportRecord} record - Registro normalizado producido por el Logger.
73
+ * @returns {void}
74
+ *
75
+ * @example
76
+ * transport.write({
77
+ * level: 'error',
78
+ * msg: 'DB connection lost',
79
+ * prefix: 'db',
80
+ * location: { file: 'pool.ts', line: 87, function: 'acquire' },
81
+ * // ... resto del TransportRecord
82
+ * });
83
+ * // → console.error("[ERROR] [db] DB connection lost (pool.ts:87)")
84
+ */
6
85
  write(record: TransportRecord): void;
86
+ /**
87
+ * Resuelve el método de `console` apropiado para un {@link LogLevel}.
88
+ *
89
+ * Tabla de mapeo:
90
+ * - `debug` → `log` (sin ruido en DevTools por defecto)
91
+ * - `info` → `info`
92
+ * - `warn` → `warn`
93
+ * - `error` → `error`
94
+ * - `critical` → `error` (no existe `console.critical`)
95
+ * - cualquier otro → `log` (fallback seguro)
96
+ *
97
+ * @internal Método privado; no forma parte de la API pública del transport.
98
+ *
99
+ * @param {LogLevel} level - Nivel del registro a traducir.
100
+ * @returns {'log' | 'info' | 'warn' | 'error'} Nombre del método de `console`.
101
+ */
7
102
  private getConsoleMethod;
8
103
  }
9
104
  //# sourceMappingURL=ConsoleTransport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConsoleTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ConsoleTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAY,MAAM,mBAAmB,CAAC;AAEjG,qBAAa,gBAAiB,YAAW,UAAU;IAGnC,OAAO,CAAC,OAAO,CAAC;IAF5B,QAAQ,CAAC,IAAI,aAAa;gBAEN,OAAO,CAAC,EAAE,gBAAgB,YAAA;IAE9C,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAUpC,OAAO,CAAC,gBAAgB;CAU3B"}
1
+ {"version":3,"file":"ConsoleTransport.d.ts","sourceRoot":"","sources":["../../src/transports/ConsoleTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAY,MAAM,mBAAmB,CAAC;AAEjG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IAkBnC,OAAO,CAAC,OAAO,CAAC;IAjB5B,2FAA2F;IAC3F,QAAQ,CAAC,IAAI,aAAa;IAE1B;;;;;;;;;;;;;OAaG;gBACiB,OAAO,CAAC,EAAE,gBAAgB,YAAA;IAE9C;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IAUpC;;;;;;;;;;;;;;;OAeG;IACH,OAAO,CAAC,gBAAgB;CAU3B"}
@@ -1,53 +1,134 @@
1
1
  import type { TransportRecord, TransportOptions, IBufferedTransport, HookLogEntry } from '../types/index.js';
2
2
  /**
3
- * Options for {@link FileTransport}. Uses `destination` as the file path in
4
- * Node and as a `localStorage` key in the browser (the path component is
5
- * sanitised to `[a-zA-Z0-9_-]`).
3
+ * Opciones para {@link FileTransport}. El campo `destination` se interpreta
4
+ * como ruta de fichero en Node y como clave de `localStorage` en el browser
5
+ * (componente saneado a `[a-zA-Z0-9_-]`).
6
6
  *
7
+ * Hereda los defaults de {@link TransportOptions}: `batchSize=100`,
8
+ * `maxBufferSize=10000`.
9
+ *
10
+ * @example
11
+ * const transport = new FileTransport({
12
+ * destination: 'logs/app.log',
13
+ * batchSize: 200,
14
+ * flushInterval: 2000,
15
+ * maxBufferSize: 5000,
16
+ * onError: (entry) => captureFailure(entry)
17
+ * });
7
18
  */
8
19
  export interface FileTransportOptions extends TransportOptions {
9
20
  /**
10
- * Where to write. In Node this is a file path (resolved relative to
11
- * `process.cwd()` and sanitised against path traversal). In the browser
12
- * this is a localStorage key (sanitised to alphanumeric + `-_`).
21
+ * Destino de escritura. En Node es una ruta de fichero (resuelta relativa
22
+ * a `process.cwd()` y saneada contra path traversal). En el browser es una
23
+ * clave de `localStorage` (saneada a alfanumérico + `-_`).
13
24
  * @default 'app.log' (Node) | 'better-logger:default' (browser)
14
25
  */
15
26
  destination?: string;
16
27
  /**
17
- * Optional hook fired when the transport cannot write (FS error,
18
- * quota exceeded, browser tab in private mode, ...). Receives a
19
- * synthetic {@link HookLogEntry}.
28
+ * Hook opcional que se dispara cuando el transport no puede escribir
29
+ * (error de FS, quota agotada, tab del browser en modo privado, ...).
30
+ * Recibe un {@link HookLogEntry} sintético.
20
31
  */
21
32
  onError?: (entry: HookLogEntry) => void | Promise<void>;
22
33
  }
23
34
  /**
24
- * File-based transport.
35
+ * Transport que escribe registros a fichero (Node) o `localStorage` (browser).
36
+ *
37
+ * En Node, hace `appendFile` asíncrono vía `fs.promises` cargado con dynamic
38
+ * import (no bloquea el event loop, no envía código Node-only al bundle del
39
+ * browser). En el browser, acumula en `localStorage` con prefijo `better-logger:`
40
+ * y degrada a no-op silencioso si el storage no está disponible (modo privado,
41
+ * sandbox de iframes, quota agotada).
42
+ *
43
+ * El buffer es bounded: al llegar a `maxBufferSize` suelta el registro más
44
+ * viejo (drop-oldest) e invoca `onError` con el payload descartado, de modo
45
+ * que un pico de tráfico sostenido no agota memoria.
46
+ *
47
+ * El `destination` se sanea antes de usarse:
48
+ * - Node: se rechazan rutas con segmentos `..`, `~` o absolutas (path traversal).
49
+ * - Browser: se colapsa a `[a-zA-Z0-9_-]` recortado a 64 caracteres.
25
50
  *
26
- * - In Node, writes batches via `fs.promises.appendFile` (non-blocking).
27
- * - In the browser, writes batches into `localStorage` (fallback no-op if
28
- * `localStorage` is unavailable — e.g. private mode, sandboxed iframes).
51
+ * @implements {IBufferedTransport}
29
52
  *
30
- * Fixed in 5.1.0:
31
- * - BUG-N3: uses async `fs.promises.appendFile` instead of sync `appendFileSync`.
32
- * - BUG-N4: destination is sanitised to reject path traversal (`..`, `~`, abs paths).
33
- * - BUG-N5: dynamic `import('node:fs/promises')` instead of CJS `require('fs')`.
34
- * - BUG-N6: browser case uses `localStorage` with try/catch (was silent no-op).
53
+ * @example
54
+ * // Node: append a fichero con flush cada segundo
55
+ * logger.addTransport({
56
+ * target: new FileTransport({
57
+ * destination: 'logs/app.log',
58
+ * batchSize: 100,
59
+ * flushInterval: 1000,
60
+ * onError: (entry) => captureFailure(entry)
61
+ * })
62
+ * });
35
63
  *
64
+ * @example
65
+ * // Browser: persiste en localStorage bajo 'better-logger:audit'
66
+ * logger.addTransport({
67
+ * target: new FileTransport({ destination: 'audit' })
68
+ * });
69
+ *
70
+ * @see {@link FileTransportOptions}
71
+ * @see {@link IBufferedTransport}
36
72
  */
37
73
  export declare class FileTransport implements IBufferedTransport {
74
+ /** Identificador del transport dentro del pipeline (`'file'`). */
38
75
  readonly name = "file";
39
76
  private buffer;
40
77
  private flushTimer?;
41
78
  private options;
42
79
  private closed;
80
+ /**
81
+ * Construye el transport. Si se pasa `flushInterval`, arranca un timer
82
+ * periódico que vacía el buffer al vencimiento; si no, el flush se
83
+ * dispara solo cuando el buffer alcanza `batchSize`.
84
+ *
85
+ * @param {FileTransportOptions} [options] - Configuración. Defaults: `batchSize=100`, `maxBufferSize=10000`.
86
+ *
87
+ * @example
88
+ * const t = new FileTransport({ destination: 'app.log', flushInterval: 1000 });
89
+ */
43
90
  constructor(options?: FileTransportOptions);
91
+ /** Registros pendientes en el buffer (aún sin flush). */
44
92
  get bufferSize(): number;
93
+ /** Capacidad máxima del buffer; al superarla se aplica drop-oldest. */
45
94
  get maxBufferSize(): number;
95
+ /**
96
+ * Indica si el transport acepta escrituras. Devuelve `false` después de
97
+ * {@link FileTransport.close} — cualquier `write` posterior se descarta.
98
+ *
99
+ * @returns {boolean} `true` mientras el transport no esté cerrado.
100
+ */
46
101
  isReady(): boolean;
102
+ /**
103
+ * Encola un registro serializado (JSON + `\n`). Si el buffer está a tope,
104
+ * suelta el registro más viejo (drop-oldest) y emite un evento `onError`
105
+ * con el payload descartado para que la pérdida sea observable. Si al
106
+ * encolar se alcanza `batchSize`, dispara un flush asíncrono.
107
+ *
108
+ * No-op silencioso si el transport está cerrado.
109
+ *
110
+ * @param {TransportRecord} record - Registro a escribir.
111
+ */
47
112
  write(record: TransportRecord): void;
113
+ /**
114
+ * Vuelca el buffer al destino. En Node concatena el contenido y hace
115
+ * un único `appendFile`; en browser hace un único `setItem` sobre
116
+ * `localStorage`. El buffer se vacía antes del I/O para que los registros
117
+ * entrantes no esperen al disco. Los errores de escritura se reportan
118
+ * vía `onError` (nunca lanzan al caller).
119
+ *
120
+ * @returns {Promise<void>} Resuelve cuando el I/O terminó o falló.
121
+ */
48
122
  flush(): Promise<void>;
49
123
  private flushNode;
50
124
  private flushBrowser;
125
+ /**
126
+ * Cierra el transport: detiene el timer de flush y dispara un flush
127
+ * final para no perder registros pendientes. Tras cerrar, `write` y
128
+ * `flush` se vuelven no-op.
129
+ *
130
+ * @returns {Promise<void>} Resuelve cuando el flush final termina.
131
+ */
51
132
  close(): Promise<void>;
52
133
  private resolveNodeDestination;
53
134
  private resolveBrowserKey;
@@ -1 +1 @@
1
- {"version":3,"file":"FileTransport.d.ts","sourceRoot":"","sources":["../../src/transports/FileTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAEhB,kBAAkB,EAClB,YAAY,EAEf,MAAM,mBAAmB,CAAC;AAO3B;;;;;GAKG;AACH,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC1D;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,aAAc,YAAW,kBAAkB;IACpD,QAAQ,CAAC,IAAI,UAAU;IAEvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAiC;IACpD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAS;gBAEX,OAAO,CAAC,EAAE,oBAAoB;IAc1C,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,OAAO,IAAI,OAAO;IAIlB,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IA+B9B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAad,SAAS;YAaT,YAAY;IAcpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,SAAS;CAYpB"}
1
+ {"version":3,"file":"FileTransport.d.ts","sourceRoot":"","sources":["../../src/transports/FileTransport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,eAAe,EACf,gBAAgB,EAEhB,kBAAkB,EAClB,YAAY,EAEf,MAAM,mBAAmB,CAAC;AAO3B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,oBAAqB,SAAQ,gBAAgB;IAC1D;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,qBAAa,aAAc,YAAW,kBAAkB;IACpD,kEAAkE;IAClE,QAAQ,CAAC,IAAI,UAAU;IAEvB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,UAAU,CAAC,CAAiC;IACpD,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,MAAM,CAAS;IAEvB;;;;;;;;;OASG;gBACS,OAAO,CAAC,EAAE,oBAAoB;IAc1C,yDAAyD;IACzD,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,uEAAuE;IACvE,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI;IA6BpC;;;;;;;;OAQG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAad,SAAS;YAaT,YAAY;IAc1B;;;;;;OAMG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAS5B,OAAO,CAAC,sBAAsB;IAU9B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,SAAS;CAYpB"}
@@ -1,67 +1,180 @@
1
1
  import type { TransportRecord, TransportOptions, IBufferedTransport, HookLogEntry } from '../types/index.js';
2
2
  /**
3
- * Configuration for {@link HttpTransport}. Extends {@link TransportOptions}
4
- * with HTTP-specific knobs.
3
+ * Configuración para {@link HttpTransport}. Extiende {@link TransportOptions}
4
+ * con parámetros HTTP: URL destino, headers custom, buffer acotado,
5
+ * retry con backoff para fallos transitorios, timeout de fetch por intento, y
6
+ * un hook `onError` que reporta drops (overflow / 4xx / retry exhausto)
7
+ * sin escalar excepciones al caller.
5
8
  *
9
+ * @example
10
+ * // Mínimo: solo URL
11
+ * new HttpTransport({ url: 'https://logs.example.com/ingest' });
12
+ *
13
+ * @example
14
+ * // Con retry/backoff ajustado y hook de errores
15
+ * new HttpTransport({
16
+ * url: 'https://logs.example.com/ingest',
17
+ * headers: { Authorization: 'Bearer <REDACTED>' },
18
+ * maxRetries: 5,
19
+ * initialBackoffMs: 500,
20
+ * maxBackoffMs: 30_000,
21
+ * fetchTimeoutMs: 5_000,
22
+ * onError: (entry) => metrics.increment('log_drop', { reason: entry.message })
23
+ * });
6
24
  */
7
25
  export interface HttpTransportOptions extends TransportOptions {
8
- /** Target URL. POST is used with a JSON-encoded body. */
26
+ /** URL destino. Se usa POST con body JSON. */
9
27
  url?: string;
10
- /** Extra request headers (e.g. `Authorization: Bearer ...`). */
28
+ /** Headers extra de la request (ej. `Authorization: Bearer ...`). */
11
29
  headers?: Record<string, string>;
12
- /** Hard cap on buffered records. Older entries dropped on overflow. */
30
+ /** Tope máximo de records en buffer. En overflow se dropea el más viejo. */
13
31
  maxBufferSize?: number;
14
- /** Max consecutive retry attempts per batch before the entries are dropped. */
32
+ /** Reintentos consecutivos por batch antes de dropear los records. */
15
33
  maxRetries?: number;
16
- /** Initial backoff in ms. Doubles per attempt up to `maxBackoffMs`. */
34
+ /** Backoff inicial en ms. Duplica por intento hasta `maxBackoffMs`. */
17
35
  initialBackoffMs?: number;
18
- /** Backoff ceiling in ms. */
36
+ /** Techo de backoff en ms. */
19
37
  maxBackoffMs?: number;
20
- /** Fetch timeout in ms (per attempt). Default 10_000. */
38
+ /** Timeout del fetch en ms (por intento). Default 10_000. */
21
39
  fetchTimeoutMs?: number;
22
40
  /**
23
- * Optional hook fired when the buffer overflows or a batch is dropped
24
- * after `maxRetries`. The hook receives a synthetic {@link HookLogEntry}.
41
+ * Hook opcional que se dispara cuando el buffer hace overflow o un batch
42
+ * se dropea tras `maxRetries`. Recibe una entrada {@link HookLogEntry}
43
+ * sintética.
25
44
  */
26
45
  onError?: (entry: HookLogEntry) => void | Promise<void>;
27
46
  }
28
47
  /**
29
- * HTTP-based transport. Buffers records, batches them on size or interval,
30
- * POSTs the batch as JSON, and surfaces failures via retry, bounded buffer,
31
- * and an `onError` hook — never a silent `.catch(() => {})`.
48
+ * Transport basado en HTTP. Bufferea records, los batcha por tamaño o
49
+ * intervalo, POSTea el batch como JSON, y reporta fallos vía retry, buffer
50
+ * acotado y un hook `onError` — nunca un `.catch(() => {})` silencioso.
51
+ *
52
+ * Lifecycle de cada batch (driveado internamente por `sendWithRetry`):
53
+ * 1. `fetch(url, { method: 'POST', body, signal })` con un `AbortController`
54
+ * que aborta tras `fetchTimeoutMs`.
55
+ * 2. Si `response.ok` → batch considerado entregado.
56
+ * 3. Si `4xx` → dropeado sin reintento: el cliente nunca se recupera de un
57
+ * error de URL/auth/payload mal formado. Se dispara `onError`.
58
+ * 4. Si `5xx` o `fetch` lanza (red caída / abort por timeout) → reintento con
59
+ * backoff exponencial: arranca en `initialBackoffMs`, duplica por intento,
60
+ * techo `maxBackoffMs`, hasta `maxRetries` intentos. Tras el agotamiento
61
+ * el batch se re-bufferiza (o se trimea contra `maxBufferSize`) y se
62
+ * dispara `onError` con `droppedCount`.
63
+ *
64
+ * El body por defecto es el envelope JSON `{ logs: TransportRecord[] }`.
65
+ * Para cambiar el wire format, sobrescribe los hooks `protected`
66
+ * {@link HttpTransport.serializeBody} y {@link HttpTransport.buildHeaders}
67
+ * (referencia: {@link OtlpTransport}).
68
+ *
69
+ * Extender esta clase es la vía recomendada para shippear un transport
70
+ * nuevo orientado a HTTP.
32
71
  *
33
- * Extending this class is the recommended way to ship a new transport:
34
- * see {@link OtlpTransport}.
72
+ * @example
73
+ * // Registro en un logger
74
+ * import logger from '@mks2508/better-logger';
75
+ * import { HttpTransport } from '@mks2508/better-logger/transports';
35
76
  *
77
+ * logger.addTransport({
78
+ * target: new HttpTransport({
79
+ * url: 'https://logs.example.com/ingest',
80
+ * flushInterval: 5_000,
81
+ * batchSize: 100,
82
+ * onError: (entry) => console.error('[log-drop]', entry.message)
83
+ * })
84
+ * });
85
+ *
86
+ * @see {@link HttpTransportOptions}
87
+ * @see {@link OtlpTransport}
36
88
  */
37
89
  export declare class HttpTransport implements IBufferedTransport {
90
+ /** Identificador del transport. Los loggers lo usan para lookup, dedup y logs de diagnóstico. */
38
91
  readonly name: string;
39
92
  private buffer;
40
93
  private flushTimer?;
41
94
  private closed;
42
- /** Options bag — `protected` so subclasses (e.g. {@link OtlpTransport}) can read or extend it. */
95
+ /** Bag de options — `protected` para que subclasses (ej. {@link OtlpTransport}) puedan leerlo o extenderlo. */
43
96
  protected options: HttpTransportOptions;
97
+ /**
98
+ * Crea una instancia de {@link HttpTransport}.
99
+ *
100
+ * Los campos omitidos en `options` se rellenan con defaults sensatos
101
+ * (`batchSize=50`, `maxBufferSize=10_000`, `maxRetries=3`,
102
+ * `initialBackoffMs=250`, `maxBackoffMs=5_000`, `fetchTimeoutMs=10_000`).
103
+ * Si se pasa `flushInterval`, arranca un `setInterval` que flushea cada
104
+ * N ms; si se omite, el flush solo dispara por llenado de `batchSize`.
105
+ *
106
+ * @param {HttpTransportOptions} [options] - Configuración opcional. Si se omite por completo, el transport queda inactivo hasta que se setee `options.url` por otra vía (subclasses).
107
+ *
108
+ * @example
109
+ * const t = new HttpTransport({
110
+ * url: 'https://logs.example.com/ingest',
111
+ * flushInterval: 5_000
112
+ * });
113
+ */
44
114
  constructor(options?: HttpTransportOptions);
115
+ /** Records actualmente encolados esperando el próximo flush. */
45
116
  get bufferSize(): number;
117
+ /** Capacidad máxima del buffer. Al superarla, el registro más viejo se dropea y se notifica vía `onError`. */
46
118
  get maxBufferSize(): number;
119
+ /**
120
+ * Indica si el transport está listo para aceptar y entregar records.
121
+ * Devuelve `false` tras {@link close} o si no se configuró `url`.
122
+ *
123
+ * @returns {boolean} `true` si el transport puede enviar.
124
+ */
47
125
  isReady(): boolean;
126
+ /**
127
+ * Encola un record en el buffer. Si el buffer está lleno, aplica la
128
+ * política de overflow (dropea el más viejo + dispara `onError`). Si tras
129
+ * el push se alcanza `batchSize`, dispara un flush asíncrono (sin await).
130
+ *
131
+ * No-op si el transport ya fue cerrado ({@link close}).
132
+ *
133
+ * @param {TransportRecord} record - Registro a encolar.
134
+ */
48
135
  write(record: TransportRecord): void;
49
136
  /**
50
- * Serialises a batch into the request body. Subclasses override to
51
- * switch encodings (e.g. {@link OtlpTransport} produces OTLP/HTTP JSON
52
- * instead of the default `{ logs: [...] }` envelope).
137
+ * Serializa un batch al body de la request. Las subclasses sobrescriben
138
+ * para cambiar la codificación (ej. {@link OtlpTransport} produce OTLP/HTTP
139
+ * JSON en vez del envelope default `{ logs: [...] }`).
53
140
  *
54
141
  */
55
142
  protected serializeBody(records: TransportRecord[]): string;
56
143
  /**
57
- * Builds the request headers. Subclasses may prepend transport-specific
58
- * headers (e.g. `signoz-ingestion-key`).
144
+ * Construye los headers de la request. Las subclasses pueden prependear
145
+ * headers transport-specific (ej. `signoz-ingestion-key`).
59
146
  *
60
147
  */
61
148
  protected buildHeaders(): Record<string, string>;
62
149
  private applyOverflowPolicy;
150
+ /**
151
+ * Flushea el buffer actual: toma un snapshot de los records pendientes,
152
+ * los envía con retry/backoff vía `sendWithRetry`, y ante fallo los
153
+ * re-bufferiza preservando el orden. Si la re-bufferización excede
154
+ * `maxBufferSize`, trimea los más viejos y dispara `onError` con
155
+ * `droppedCount`.
156
+ *
157
+ * No-op si el transport está cerrado, el buffer está vacío o no hay
158
+ * `url` configurada.
159
+ *
160
+ * @returns {Promise<void>} Resuelve cuando el intento de entrega del batch actual terminó (success, drop definitivo o no-op).
161
+ *
162
+ * @see {@link HttpTransportOptions.onError}
163
+ */
63
164
  flush(): Promise<void>;
64
165
  private sendWithRetry;
166
+ /**
167
+ * Cierra el transport: marca el flag `closed`, detiene el timer de
168
+ * `flushInterval` si estaba corriendo, y ejecuta un flush final para
169
+ * entregar lo pendiente.
170
+ *
171
+ * Tras `close()`, todo {@link write} posterior es no-op y
172
+ * {@link isReady} devuelve `false`.
173
+ *
174
+ * @returns {Promise<void>} Resuelve cuando el flush final termina.
175
+ *
176
+ * @see {@link flush}
177
+ */
65
178
  close(): Promise<void>;
66
179
  }
67
180
  //# sourceMappingURL=HttpTransport.d.ts.map