@mks2508/better-logger 5.0.1 → 5.0.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 (310) hide show
  1. package/dist/Logger.d.ts +976 -0
  2. package/dist/Logger.d.ts.map +1 -0
  3. package/dist/ScopedLogger.d.ts +74 -0
  4. package/dist/ScopedLogger.d.ts.map +1 -0
  5. package/dist/chunks/Logger-CKqzXDh3.js +2 -0
  6. package/dist/chunks/Logger-CKqzXDh3.js.map +1 -0
  7. package/dist/chunks/Logger-D_vuKP4l.js +4511 -0
  8. package/dist/chunks/Logger-D_vuKP4l.js.map +1 -0
  9. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js +33 -0
  10. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js.map +1 -0
  11. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js +2 -0
  12. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js.map +1 -0
  13. package/dist/chunks/cli-module-B-njrTWb.js +2 -0
  14. package/dist/chunks/cli-module-B-njrTWb.js.map +1 -0
  15. package/dist/chunks/cli-module-Cx7qotPY.js +390 -0
  16. package/dist/chunks/cli-module-Cx7qotPY.js.map +1 -0
  17. package/dist/chunks/color-converter-CCSQRztd.js +2 -0
  18. package/dist/chunks/color-converter-CCSQRztd.js.map +1 -0
  19. package/dist/chunks/color-converter-_Xdmsy7E.js +462 -0
  20. package/dist/chunks/color-converter-_Xdmsy7E.js.map +1 -0
  21. package/dist/chunks/environment-C1xxvc8l.js +1127 -0
  22. package/dist/chunks/environment-C1xxvc8l.js.map +1 -0
  23. package/dist/chunks/environment-Cprkw3g9.js +4 -0
  24. package/dist/chunks/environment-Cprkw3g9.js.map +1 -0
  25. package/dist/chunks/formatting-DMJxYq9o.js +380 -0
  26. package/dist/chunks/formatting-DMJxYq9o.js.map +1 -0
  27. package/dist/chunks/formatting-DpKxCsXq.js +2 -0
  28. package/dist/chunks/formatting-DpKxCsXq.js.map +1 -0
  29. package/dist/cli/CommandProcessor.d.ts +100 -0
  30. package/dist/cli/CommandProcessor.d.ts.map +1 -0
  31. package/dist/cli/commands/ConfigCommand.d.ts +14 -0
  32. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
  33. package/dist/cli/commands/ExportCommand.d.ts +48 -0
  34. package/dist/cli/commands/ExportCommand.d.ts.map +1 -0
  35. package/dist/cli/commands/HistoryCommand.d.ts +47 -0
  36. package/dist/cli/commands/HistoryCommand.d.ts.map +1 -0
  37. package/dist/cli/commands/StatusCommand.d.ts +30 -0
  38. package/dist/cli/commands/StatusCommand.d.ts.map +1 -0
  39. package/dist/cli/commands/ThemeCommand.d.ts +30 -0
  40. package/dist/cli/commands/ThemeCommand.d.ts.map +1 -0
  41. package/dist/cli/help.d.ts +12 -0
  42. package/dist/cli/help.d.ts.map +1 -0
  43. package/dist/cli/index.d.ts +15 -0
  44. package/dist/cli/index.d.ts.map +1 -0
  45. package/{src/cli-module.ts → dist/cli-module.d.ts} +2 -8
  46. package/dist/cli-module.d.ts.map +1 -0
  47. package/dist/cli-primitives/box.d.ts +11 -0
  48. package/dist/cli-primitives/box.d.ts.map +1 -0
  49. package/dist/cli-primitives/cli-table.d.ts +11 -0
  50. package/dist/cli-primitives/cli-table.d.ts.map +1 -0
  51. package/dist/cli-primitives/divider.d.ts +11 -0
  52. package/dist/cli-primitives/divider.d.ts.map +1 -0
  53. package/dist/cli-primitives/header.d.ts +12 -0
  54. package/dist/cli-primitives/header.d.ts.map +1 -0
  55. package/{src/cli-primitives/index.ts → dist/cli-primitives/index.d.ts} +1 -1
  56. package/dist/cli-primitives/index.d.ts.map +1 -0
  57. package/dist/cli-primitives/server-fallback.d.ts +25 -0
  58. package/dist/cli-primitives/server-fallback.d.ts.map +1 -0
  59. package/dist/cli-primitives/spinner.d.ts +47 -0
  60. package/dist/cli-primitives/spinner.d.ts.map +1 -0
  61. package/dist/cli-primitives/step.d.ts +11 -0
  62. package/dist/cli-primitives/step.d.ts.map +1 -0
  63. package/dist/cli.cjs +2 -0
  64. package/dist/cli.cjs.map +1 -0
  65. package/dist/cli.js +12 -0
  66. package/dist/cli.js.map +1 -0
  67. package/dist/constants.d.ts +235 -0
  68. package/dist/constants.d.ts.map +1 -0
  69. package/dist/core.cjs +2 -0
  70. package/dist/core.cjs.map +1 -0
  71. package/dist/core.d.ts +127 -0
  72. package/dist/core.d.ts.map +1 -0
  73. package/dist/core.js +291 -0
  74. package/dist/core.js.map +1 -0
  75. package/dist/example.d.ts +18 -0
  76. package/dist/example.d.ts.map +1 -0
  77. package/dist/exports-module.d.ts +196 -0
  78. package/dist/exports-module.d.ts.map +1 -0
  79. package/dist/exports.cjs +2 -0
  80. package/dist/exports.cjs.map +1 -0
  81. package/dist/exports.js +238 -0
  82. package/dist/exports.js.map +1 -0
  83. package/dist/handlers/AnalyticsLogHandler.d.ts +8 -0
  84. package/dist/handlers/AnalyticsLogHandler.d.ts.map +1 -0
  85. package/dist/handlers/ExportLogHandler.d.ts +100 -0
  86. package/dist/handlers/ExportLogHandler.d.ts.map +1 -0
  87. package/dist/handlers/FileLogHandler.d.ts +33 -0
  88. package/dist/handlers/FileLogHandler.d.ts.map +1 -0
  89. package/dist/handlers/RemoteLogHandler.d.ts +11 -0
  90. package/dist/handlers/RemoteLogHandler.d.ts.map +1 -0
  91. package/{src/handlers/index.ts → dist/handlers/index.d.ts} +2 -2
  92. package/dist/handlers/index.d.ts.map +1 -0
  93. package/dist/hooks/HookManager.d.ts +21 -0
  94. package/dist/hooks/HookManager.d.ts.map +1 -0
  95. package/{src/hooks/index.ts → dist/hooks/index.d.ts} +1 -0
  96. package/dist/hooks/index.d.ts.map +1 -0
  97. package/dist/index.cjs +2 -0
  98. package/dist/index.cjs.map +1 -0
  99. package/dist/index.d.ts +161 -0
  100. package/dist/index.d.ts.map +1 -0
  101. package/dist/index.js +627 -0
  102. package/dist/index.js.map +1 -0
  103. package/dist/main.d.ts +2 -0
  104. package/dist/main.d.ts.map +1 -0
  105. package/dist/serializers/SerializerRegistry.d.ts +16 -0
  106. package/dist/serializers/SerializerRegistry.d.ts.map +1 -0
  107. package/{src/serializers/index.ts → dist/serializers/index.d.ts} +1 -0
  108. package/dist/serializers/index.d.ts.map +1 -0
  109. package/dist/styling/LogStyleBuilder.d.ts +146 -0
  110. package/dist/styling/LogStyleBuilder.d.ts.map +1 -0
  111. package/dist/styling/SemanticStyles.d.ts +178 -0
  112. package/dist/styling/SemanticStyles.d.ts.map +1 -0
  113. package/dist/styling/SmartPresets.d.ts +22 -0
  114. package/dist/styling/SmartPresets.d.ts.map +1 -0
  115. package/dist/styling/StyleBuilder.d.ts +140 -0
  116. package/dist/styling/StyleBuilder.d.ts.map +1 -0
  117. package/dist/styling/StyleCache.d.ts +42 -0
  118. package/dist/styling/StyleCache.d.ts.map +1 -0
  119. package/dist/styling/banners.d.ts +42 -0
  120. package/dist/styling/banners.d.ts.map +1 -0
  121. package/dist/styling/index.d.ts +10 -0
  122. package/dist/styling/index.d.ts.map +1 -0
  123. package/dist/styling/themes.d.ts +7 -0
  124. package/dist/styling/themes.d.ts.map +1 -0
  125. package/dist/styling-module.d.ts +178 -0
  126. package/dist/styling-module.d.ts.map +1 -0
  127. package/dist/styling.cjs +2 -0
  128. package/dist/styling.cjs.map +1 -0
  129. package/dist/styling.js +146 -0
  130. package/dist/styling.js.map +1 -0
  131. package/dist/terminal/color-converter.d.ts +73 -0
  132. package/dist/terminal/color-converter.d.ts.map +1 -0
  133. package/dist/terminal/formatter.d.ts +20 -0
  134. package/dist/terminal/formatter.d.ts.map +1 -0
  135. package/dist/terminal/terminal-renderer.d.ts +77 -0
  136. package/dist/terminal/terminal-renderer.d.ts.map +1 -0
  137. package/dist/transports/ConsoleTransport.d.ts +9 -0
  138. package/dist/transports/ConsoleTransport.d.ts.map +1 -0
  139. package/dist/transports/FileTransport.d.ts +15 -0
  140. package/dist/transports/FileTransport.d.ts.map +1 -0
  141. package/dist/transports/HttpTransport.d.ts +16 -0
  142. package/dist/transports/HttpTransport.d.ts.map +1 -0
  143. package/dist/transports/TransportManager.d.ts +14 -0
  144. package/dist/transports/TransportManager.d.ts.map +1 -0
  145. package/{src/transports/index.ts → dist/transports/index.d.ts} +1 -0
  146. package/dist/transports/index.d.ts.map +1 -0
  147. package/{src/types/core.ts → dist/types/core.d.ts} +25 -62
  148. package/dist/types/core.d.ts.map +1 -0
  149. package/{src/types/handlers.ts → dist/types/handlers.d.ts} +5 -15
  150. package/dist/types/handlers.d.ts.map +1 -0
  151. package/{src/types/hooks.ts → dist/types/hooks.d.ts} +3 -12
  152. package/dist/types/hooks.d.ts.map +1 -0
  153. package/dist/types/index.d.ts +11 -0
  154. package/dist/types/index.d.ts.map +1 -0
  155. package/{src/types/serializers.ts → dist/types/serializers.d.ts} +1 -6
  156. package/dist/types/serializers.d.ts.map +1 -0
  157. package/{src/types/transports.ts → dist/types/transports.d.ts} +2 -7
  158. package/dist/types/transports.d.ts.map +1 -0
  159. package/dist/utils/adapter.d.ts +48 -0
  160. package/dist/utils/adapter.d.ts.map +1 -0
  161. package/dist/utils/ansi-colors.d.ts +156 -0
  162. package/dist/utils/ansi-colors.d.ts.map +1 -0
  163. package/dist/utils/environment-detector.d.ts +45 -0
  164. package/dist/utils/environment-detector.d.ts.map +1 -0
  165. package/dist/utils/environment.d.ts +47 -0
  166. package/dist/utils/environment.d.ts.map +1 -0
  167. package/dist/utils/formatting.d.ts +58 -0
  168. package/dist/utils/formatting.d.ts.map +1 -0
  169. package/dist/utils/index.d.ts +8 -0
  170. package/dist/utils/index.d.ts.map +1 -0
  171. package/dist/utils/opentui-detection.d.ts +34 -0
  172. package/dist/utils/opentui-detection.d.ts.map +1 -0
  173. package/dist/utils/output.d.ts +46 -0
  174. package/dist/utils/output.d.ts.map +1 -0
  175. package/dist/utils/stackTrace.d.ts +6 -0
  176. package/dist/utils/stackTrace.d.ts.map +1 -0
  177. package/dist/utils/timestamps.d.ts +20 -0
  178. package/dist/utils/timestamps.d.ts.map +1 -0
  179. package/{src/writers/BufferWriter.ts → dist/writers/BufferWriter.d.ts} +16 -77
  180. package/dist/writers/BufferWriter.d.ts.map +1 -0
  181. package/{src/writers/index.ts → dist/writers/index.d.ts} +1 -1
  182. package/dist/writers/index.d.ts.map +1 -0
  183. package/package.json +5 -1
  184. package/.claude/settings.local.json +0 -48
  185. package/.github/workflows/ci-quality.yml +0 -357
  186. package/.github/workflows/docs-demo.yml +0 -119
  187. package/.github/workflows/releases-core.yml +0 -512
  188. package/.github/workflows/releases-full.yml +0 -582
  189. package/.github/workflows-backup/ci.yml +0 -221
  190. package/.github/workflows-backup/nightly.yml +0 -196
  191. package/.github/workflows-backup/release-optimized.yml +0 -373
  192. package/.github/workflows-backup/release.yml +0 -269
  193. package/.release-notes-0.2.0.md +0 -129
  194. package/.yamllint +0 -28
  195. package/CHANGELOG.json +0 -1120
  196. package/CHANGELOG.md +0 -209
  197. package/CLAUDE.md +0 -217
  198. package/demo.html +0 -847
  199. package/docs/API.md +0 -918
  200. package/docs/CORE.md +0 -264
  201. package/docs/DEVELOPMENT.md +0 -731
  202. package/docs/EXPORTS.md +0 -467
  203. package/docs/PACKAGES.md +0 -244
  204. package/docs/STYLING.md +0 -405
  205. package/docs/_config.yml +0 -36
  206. package/docs/index.md +0 -179
  207. package/examples/README.md +0 -208
  208. package/examples/basic-logging.js +0 -75
  209. package/examples/data-export.js +0 -234
  210. package/examples/package.json +0 -16
  211. package/examples/performance-timing.js +0 -170
  212. package/examples/simplified-api.js +0 -124
  213. package/examples/styling-themes.js +0 -207
  214. package/index.html +0 -358
  215. package/packages/core/package.json +0 -57
  216. package/packages/exports/package.json +0 -41
  217. package/packages/nodejs-opentui/README.md +0 -232
  218. package/packages/nodejs-opentui/package.json +0 -72
  219. package/packages/nodejs-opentui/src/LogRenderer.ts +0 -171
  220. package/packages/nodejs-opentui/src/OpenTUILogHandler.ts +0 -178
  221. package/packages/nodejs-opentui/src/components/LogBadge.tsx +0 -131
  222. package/packages/nodejs-opentui/src/index.ts +0 -133
  223. package/packages/nodejs-opentui/src/types.ts +0 -158
  224. package/packages/nodejs-opentui/tsconfig.json +0 -20
  225. package/packages/styling/package.json +0 -41
  226. package/playground/demo-all.ts +0 -95
  227. package/playground/demo-box.ts +0 -85
  228. package/playground/demo-levels.ts +0 -56
  229. package/playground/demo-real-world.ts +0 -98
  230. package/playground/demo-spinner.ts +0 -77
  231. package/playground/demo-steps.ts +0 -72
  232. package/playground/demo-table.ts +0 -83
  233. package/project-utils/README.md +0 -172
  234. package/project-utils/auto-release-gemini.ts +0 -1193
  235. package/project-utils/auto-release-ui.ts +0 -1329
  236. package/project-utils/commit-generator.ts +0 -1385
  237. package/project-utils/commit-ui.ts +0 -264
  238. package/project-utils/git-utils.ts +0 -199
  239. package/project-utils/github-release-manager.ts +0 -466
  240. package/project-utils/project-config.ts +0 -260
  241. package/project-utils/prompt-templates.js +0 -345
  242. package/project-utils/prompt-templates.ts +0 -422
  243. package/project-utils/version-manager.ts +0 -1078
  244. package/src/Logger.ts +0 -1858
  245. package/src/ScopedLogger.ts +0 -256
  246. package/src/cli/CommandProcessor.ts +0 -248
  247. package/src/cli/commands/ConfigCommand.ts +0 -93
  248. package/src/cli/commands/ExportCommand.ts +0 -276
  249. package/src/cli/commands/HistoryCommand.ts +0 -117
  250. package/src/cli/commands/StatusCommand.ts +0 -112
  251. package/src/cli/commands/ThemeCommand.ts +0 -88
  252. package/src/cli/help.ts +0 -127
  253. package/src/cli/index.ts +0 -71
  254. package/src/cli-primitives/box.ts +0 -86
  255. package/src/cli-primitives/cli-table.ts +0 -62
  256. package/src/cli-primitives/divider.ts +0 -17
  257. package/src/cli-primitives/header.ts +0 -18
  258. package/src/cli-primitives/server-fallback.ts +0 -54
  259. package/src/cli-primitives/spinner.ts +0 -133
  260. package/src/cli-primitives/step.ts +0 -22
  261. package/src/constants.ts +0 -313
  262. package/src/core.ts +0 -397
  263. package/src/example.ts +0 -210
  264. package/src/exports-module.ts +0 -311
  265. package/src/handlers/AnalyticsLogHandler.ts +0 -22
  266. package/src/handlers/ExportLogHandler.ts +0 -610
  267. package/src/handlers/FileLogHandler.ts +0 -169
  268. package/src/handlers/RemoteLogHandler.ts +0 -42
  269. package/src/hooks/HookManager.ts +0 -177
  270. package/src/index.ts +0 -395
  271. package/src/main.ts +0 -196
  272. package/src/serializers/SerializerRegistry.ts +0 -173
  273. package/src/style.css +0 -96
  274. package/src/styling/LogStyleBuilder.ts +0 -355
  275. package/src/styling/SemanticStyles.ts +0 -380
  276. package/src/styling/SmartPresets.ts +0 -288
  277. package/src/styling/StyleBuilder.ts +0 -319
  278. package/src/styling/StyleCache.ts +0 -131
  279. package/src/styling/banners.ts +0 -168
  280. package/src/styling/index.ts +0 -27
  281. package/src/styling/themes.ts +0 -235
  282. package/src/styling-module.ts +0 -244
  283. package/src/terminal/color-converter.ts +0 -315
  284. package/src/terminal/formatter.ts +0 -242
  285. package/src/terminal/terminal-renderer.ts +0 -342
  286. package/src/transports/ConsoleTransport.ts +0 -28
  287. package/src/transports/FileTransport.ts +0 -53
  288. package/src/transports/HttpTransport.ts +0 -56
  289. package/src/transports/TransportManager.ts +0 -130
  290. package/src/types/index.ts +0 -83
  291. package/src/typescript.svg +0 -1
  292. package/src/utils/adapter.ts +0 -291
  293. package/src/utils/ansi-colors.ts +0 -333
  294. package/src/utils/environment-detector.ts +0 -170
  295. package/src/utils/environment.ts +0 -94
  296. package/src/utils/formatting.ts +0 -332
  297. package/src/utils/index.ts +0 -33
  298. package/src/utils/opentui-detection.ts +0 -138
  299. package/src/utils/output.ts +0 -227
  300. package/src/utils/stackTrace.ts +0 -144
  301. package/src/utils/timestamps.ts +0 -80
  302. package/src/vite-env.d.ts +0 -1
  303. package/test-core-browser.html +0 -237
  304. package/test-core-node.js +0 -63
  305. package/tests/test-conflict-resolution.ts +0 -391
  306. package/tests/validate-workflows.sh +0 -131
  307. package/tests/yaml-autofix.sh +0 -146
  308. package/tsconfig.json +0 -50
  309. package/vite.config.ts +0 -256
  310. /package/{public → dist}/vite.svg +0 -0
@@ -0,0 +1,238 @@
1
+ import { L as Logger, E as ExportLogHandler } from "./chunks/Logger-D_vuKP4l.js";
2
+ import "./chunks/environment-C1xxvc8l.js";
3
+ import { R as RemoteLogHandler } from "./chunks/RemoteLogHandler-CjWpWZGl.js";
4
+ class ExportLogger extends Logger {
5
+ exportLogHandler;
6
+ remoteHandlers = [];
7
+ constructor(config = {}) {
8
+ super(config);
9
+ if (config.bufferSize) {
10
+ this.exportLogHandler = new ExportLogHandler(config.bufferSize);
11
+ this.addHandler(this.exportLogHandler);
12
+ }
13
+ }
14
+ /**
15
+ * Export logs in specified format
16
+ *
17
+ * @param format - Export format (csv, json, xml)
18
+ * @param options - Export options
19
+ * @returns Promise resolving to exported data
20
+ *
21
+ * @example
22
+ * ```typescript
23
+ * const csvData = await logger.exportLogs('csv');
24
+ * const jsonData = await logger.exportLogs('json', {
25
+ * filter: { level: 'error' },
26
+ * limit: 100
27
+ * });
28
+ * ```
29
+ */
30
+ async exportLogs(format, options) {
31
+ if (!this.exportLogHandler) {
32
+ throw new Error("Export handler not initialized. Set bufferSize in constructor.");
33
+ }
34
+ return JSON.stringify([]);
35
+ }
36
+ /**
37
+ * Get current log buffer
38
+ *
39
+ * @returns Array of log entries
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * const logs = logger.getLogs();
44
+ * console.log(`Buffered ${logs.length} log entries`);
45
+ * ```
46
+ */
47
+ getLogs() {
48
+ if (!this.exportLogHandler) {
49
+ return [];
50
+ }
51
+ return [];
52
+ }
53
+ /**
54
+ * Clear the log buffer
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * logger.clearLogs();
59
+ * ```
60
+ */
61
+ clearLogs() {
62
+ if (this.exportLogHandler) ;
63
+ }
64
+ /**
65
+ * Get log statistics
66
+ *
67
+ * @returns Statistics object with counts by level
68
+ *
69
+ * @example
70
+ * ```typescript
71
+ * const stats = logger.getLogStats();
72
+ * console.log(`Errors: ${stats.error}, Warnings: ${stats.warn}`);
73
+ * ```
74
+ */
75
+ getLogStats() {
76
+ if (!this.exportLogHandler) {
77
+ return {};
78
+ }
79
+ return {};
80
+ }
81
+ /**
82
+ * Add remote logging handler
83
+ *
84
+ * @param endpoint - Remote endpoint URL
85
+ * @param apiKey - Optional API key for authentication
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * logger.addRemoteHandler('https://logs.myservice.com/api', 'secret-key');
90
+ * ```
91
+ */
92
+ addRemoteHandler(endpoint, apiKey) {
93
+ const remoteHandler = new RemoteLogHandler(endpoint, apiKey);
94
+ this.remoteHandlers.push(remoteHandler);
95
+ this.addHandler(remoteHandler);
96
+ }
97
+ /**
98
+ * Remove all remote handlers
99
+ *
100
+ * @example
101
+ * ```typescript
102
+ * logger.clearRemoteHandlers();
103
+ * ```
104
+ */
105
+ clearRemoteHandlers() {
106
+ const allHandlers = this.getHandlers();
107
+ this.remoteHandlers.forEach((remoteHandler) => {
108
+ const index = allHandlers.indexOf(remoteHandler);
109
+ if (index > -1) {
110
+ allHandlers.splice(index, 1);
111
+ }
112
+ });
113
+ this.remoteHandlers = [];
114
+ }
115
+ /**
116
+ * Flush all remote handlers (force send pending logs)
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * await logger.flushRemoteHandlers();
121
+ * ```
122
+ */
123
+ async flushRemoteHandlers() {
124
+ const flushPromises = this.remoteHandlers.map(
125
+ (handler) => Promise.resolve()
126
+ // RemoteLogHandler needs flush method
127
+ );
128
+ await Promise.all(flushPromises);
129
+ }
130
+ }
131
+ const exportLogger = new ExportLogger({ bufferSize: 1e3 });
132
+ const exportUtils = {
133
+ /**
134
+ * Export current logs as CSV
135
+ */
136
+ async exportCSV(options) {
137
+ return await exportLogger.exportLogs("csv", options);
138
+ },
139
+ /**
140
+ * Export current logs as JSON
141
+ */
142
+ async exportJSON(options) {
143
+ return await exportLogger.exportLogs("json", options);
144
+ },
145
+ /**
146
+ * Export current logs as XML
147
+ */
148
+ async exportXML(options) {
149
+ return await exportLogger.exportLogs("xml", options);
150
+ },
151
+ /**
152
+ * Get log statistics
153
+ */
154
+ getStats() {
155
+ return exportLogger.getLogStats();
156
+ },
157
+ /**
158
+ * Clear all logs
159
+ */
160
+ clear() {
161
+ exportLogger.clearLogs();
162
+ }
163
+ };
164
+ const remoteUtils = {
165
+ /**
166
+ * Add remote logging endpoint
167
+ */
168
+ addEndpoint(url, apiKey) {
169
+ exportLogger.addRemoteHandler(url, apiKey);
170
+ },
171
+ /**
172
+ * Clear all remote endpoints
173
+ */
174
+ clearEndpoints() {
175
+ exportLogger.clearRemoteHandlers();
176
+ },
177
+ /**
178
+ * Flush all remote logs
179
+ */
180
+ async flush() {
181
+ await exportLogger.flushRemoteHandlers();
182
+ }
183
+ };
184
+ const debug = (...args) => exportLogger.debug(...args);
185
+ const info = (...args) => exportLogger.info(...args);
186
+ const warn = (...args) => exportLogger.warn(...args);
187
+ const error = (...args) => exportLogger.error(...args);
188
+ const success = (...args) => exportLogger.success(...args);
189
+ const critical = (...args) => exportLogger.critical(...args);
190
+ const trace = (...args) => exportLogger.trace(...args);
191
+ const table = (data, columns) => exportLogger.table(data, columns);
192
+ const group = (label, collapsed) => exportLogger.group(label, collapsed);
193
+ const groupEnd = () => exportLogger.groupEnd();
194
+ const time = (label) => exportLogger.time(label);
195
+ const timeEnd = (label) => exportLogger.timeEnd(label);
196
+ const setGlobalPrefix = (prefix) => exportLogger.setGlobalPrefix(prefix);
197
+ const scope = (prefix) => exportLogger.scope(prefix);
198
+ const setVerbosity = (level) => exportLogger.setVerbosity(level);
199
+ const addHandler = (handler) => exportLogger.addHandler(handler);
200
+ const exportLogs = async (format, options) => await exportLogger.exportLogs(format, options);
201
+ const getLogs = () => exportLogger.getLogs();
202
+ const clearLogs = () => exportLogger.clearLogs();
203
+ const getLogStats = () => exportLogger.getLogStats();
204
+ const addRemoteHandler = (endpoint, apiKey) => exportLogger.addRemoteHandler(endpoint, apiKey);
205
+ const clearRemoteHandlers = () => exportLogger.clearRemoteHandlers();
206
+ const flushRemoteHandlers = async () => await exportLogger.flushRemoteHandlers();
207
+ export {
208
+ ExportLogHandler,
209
+ ExportLogger,
210
+ RemoteLogHandler,
211
+ addHandler,
212
+ addRemoteHandler,
213
+ clearLogs,
214
+ clearRemoteHandlers,
215
+ critical,
216
+ debug,
217
+ exportLogger as default,
218
+ error,
219
+ exportLogs,
220
+ exportUtils,
221
+ flushRemoteHandlers,
222
+ getLogStats,
223
+ getLogs,
224
+ group,
225
+ groupEnd,
226
+ info,
227
+ remoteUtils,
228
+ scope,
229
+ setGlobalPrefix,
230
+ setVerbosity,
231
+ success,
232
+ table,
233
+ time,
234
+ timeEnd,
235
+ trace,
236
+ warn
237
+ };
238
+ //# sourceMappingURL=exports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exports.js","sources":["../src/exports-module.ts"],"sourcesContent":["/**\n * @fileoverview Exports Module - Export and remote logging capabilities\n * @version 0.0.1\n * \n * This module provides export functionality for logs including CSV, JSON, XML formats\n * and remote logging capabilities for sending logs to external services.\n */\n\n// Core logger and types\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ILogHandler\n} from './types/index.js';\n\n// Export handlers\nimport {\n ExportLogHandler,\n RemoteLogHandler\n} from './handlers/index.js';\n\n/**\n * Logger with export and remote capabilities\n * \n * @example\n * ```typescript\n * import { ExportLogger } from '@mks2508/better-logger/exports';\n * \n * const logger = new ExportLogger({ bufferSize: 1000 });\n * \n * // Log some data\n * logger.info('User logged in', { userId: 123 });\n * logger.error('Failed to process', { error: 'timeout' });\n * \n * // Export logs\n * const csvData = await logger.exportLogs('csv');\n * const jsonData = await logger.exportLogs('json');\n * \n * // Setup remote logging\n * logger.addRemoteHandler('https://api.myapp.com/logs', 'api-key');\n * ```\n */\nexport class ExportLogger extends Logger {\n private exportLogHandler?: ExportLogHandler;\n private remoteHandlers: RemoteLogHandler[] = [];\n\n constructor(config: { bufferSize?: number } & any = {}) {\n super(config);\n \n // Initialize export handler if buffer size specified\n if (config.bufferSize) {\n this.exportLogHandler = new ExportLogHandler(config.bufferSize);\n this.addHandler(this.exportLogHandler);\n }\n }\n\n /**\n * Export logs in specified format\n * \n * @param format - Export format (csv, json, xml)\n * @param options - Export options\n * @returns Promise resolving to exported data\n * \n * @example\n * ```typescript\n * const csvData = await logger.exportLogs('csv');\n * const jsonData = await logger.exportLogs('json', { \n * filter: { level: 'error' },\n * limit: 100 \n * });\n * ```\n */\n async exportLogs(\n format: 'csv' | 'json' | 'xml', \n options?: {\n filter?: { level?: LogLevel; from?: Date; to?: Date };\n limit?: number;\n }\n ): Promise<string> {\n if (!this.exportLogHandler) {\n throw new Error('Export handler not initialized. Set bufferSize in constructor.');\n }\n\n // Temporary implementation - ExportLogHandler needs these methods\n return JSON.stringify([]);\n }\n\n /**\n * Get current log buffer\n * \n * @returns Array of log entries\n * \n * @example\n * ```typescript\n * const logs = logger.getLogs();\n * console.log(`Buffered ${logs.length} log entries`);\n * ```\n */\n getLogs(): any[] {\n if (!this.exportLogHandler) {\n return [];\n }\n \n // Temporary implementation - ExportLogHandler needs these methods\n return [];\n }\n\n /**\n * Clear the log buffer\n * \n * @example\n * ```typescript\n * logger.clearLogs();\n * ```\n */\n clearLogs(): void {\n if (this.exportLogHandler) {\n // Temporary implementation - ExportLogHandler needs these methods\n }\n }\n\n /**\n * Get log statistics\n * \n * @returns Statistics object with counts by level\n * \n * @example\n * ```typescript\n * const stats = logger.getLogStats();\n * console.log(`Errors: ${stats.error}, Warnings: ${stats.warn}`);\n * ```\n */\n getLogStats(): Record<string, number> {\n if (!this.exportLogHandler) {\n return {};\n }\n\n // Temporary implementation - ExportLogHandler needs these methods\n return {};\n }\n\n /**\n * Add remote logging handler\n * \n * @param endpoint - Remote endpoint URL\n * @param apiKey - Optional API key for authentication\n * \n * @example\n * ```typescript\n * logger.addRemoteHandler('https://logs.myservice.com/api', 'secret-key');\n * ```\n */\n addRemoteHandler(endpoint: string, apiKey?: string): void {\n const remoteHandler = new RemoteLogHandler(endpoint, apiKey);\n this.remoteHandlers.push(remoteHandler);\n this.addHandler(remoteHandler);\n }\n\n /**\n * Remove all remote handlers\n * \n * @example\n * ```typescript\n * logger.clearRemoteHandlers();\n * ```\n */\n clearRemoteHandlers(): void {\n // Remove from handlers array\n const allHandlers = this.getHandlers();\n this.remoteHandlers.forEach(remoteHandler => {\n const index = allHandlers.indexOf(remoteHandler);\n if (index > -1) {\n allHandlers.splice(index, 1);\n }\n });\n \n this.remoteHandlers = [];\n }\n\n /**\n * Flush all remote handlers (force send pending logs)\n * \n * @example\n * ```typescript\n * await logger.flushRemoteHandlers();\n * ```\n */\n async flushRemoteHandlers(): Promise<void> {\n const flushPromises = this.remoteHandlers.map(handler => \n Promise.resolve() // RemoteLogHandler needs flush method\n );\n \n await Promise.all(flushPromises);\n }\n}\n\n// Create singleton instance with export capabilities\nconst exportLogger = new ExportLogger({ bufferSize: 1000 });\n\n/**\n * Export management utilities\n */\nexport const exportUtils = {\n /**\n * Export current logs as CSV\n */\n async exportCSV(options?: any): Promise<string> {\n return await exportLogger.exportLogs('csv', options);\n },\n\n /**\n * Export current logs as JSON\n */\n async exportJSON(options?: any): Promise<string> {\n return await exportLogger.exportLogs('json', options);\n },\n\n /**\n * Export current logs as XML\n */\n async exportXML(options?: any): Promise<string> {\n return await exportLogger.exportLogs('xml', options);\n },\n\n /**\n * Get log statistics\n */\n getStats(): Record<string, number> {\n return exportLogger.getLogStats();\n },\n\n /**\n * Clear all logs\n */\n clear(): void {\n exportLogger.clearLogs();\n }\n};\n\n/**\n * Remote logging utilities\n */\nexport const remoteUtils = {\n /**\n * Add remote logging endpoint\n */\n addEndpoint(url: string, apiKey?: string): void {\n exportLogger.addRemoteHandler(url, apiKey);\n },\n\n /**\n * Clear all remote endpoints\n */\n clearEndpoints(): void {\n exportLogger.clearRemoteHandlers();\n },\n\n /**\n * Flush all remote logs\n */\n async flush(): Promise<void> {\n await exportLogger.flushRemoteHandlers();\n }\n};\n\n/**\n * Export individual logging methods with export capabilities\n */\nexport const debug = (...args: any[]) => exportLogger.debug(...args);\nexport const info = (...args: any[]) => exportLogger.info(...args);\nexport const warn = (...args: any[]) => exportLogger.warn(...args);\nexport const error = (...args: any[]) => exportLogger.error(...args);\nexport const success = (...args: any[]) => exportLogger.success(...args);\nexport const critical = (...args: any[]) => exportLogger.critical(...args);\nexport const trace = (...args: any[]) => exportLogger.trace(...args);\nexport const table = (data: any, columns?: string[]) => exportLogger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => exportLogger.group(label, collapsed);\nexport const groupEnd = () => exportLogger.groupEnd();\nexport const time = (label: string) => exportLogger.time(label);\nexport const timeEnd = (label: string) => exportLogger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => exportLogger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => exportLogger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => exportLogger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => exportLogger.addHandler(handler);\n\n/**\n * Export functionality\n */\nexport const exportLogs = async (format: 'csv' | 'json' | 'xml', options?: any) => \n await exportLogger.exportLogs(format, options);\nexport const getLogs = () => exportLogger.getLogs();\nexport const clearLogs = () => exportLogger.clearLogs();\nexport const getLogStats = () => exportLogger.getLogStats();\n\n/**\n * Remote logging functionality\n */\nexport const addRemoteHandler = (endpoint: string, apiKey?: string) => \n exportLogger.addRemoteHandler(endpoint, apiKey);\nexport const clearRemoteHandlers = () => exportLogger.clearRemoteHandlers();\nexport const flushRemoteHandlers = async () => await exportLogger.flushRemoteHandlers();\n\n// Export the singleton as default\nexport default exportLogger;\n\n// Re-export handlers\nexport { ExportLogHandler, RemoteLogHandler } from './handlers/index.js';\n\n// Re-export types\nexport type { ILogHandler } from './types/index.js';"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';
2
+ /**
3
+ * Example custom handler for analytics demonstration
4
+ */
5
+ export declare class AnalyticsLogHandler implements ILogHandler {
6
+ handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void;
7
+ }
8
+ //# sourceMappingURL=AnalyticsLogHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AnalyticsLogHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/AnalyticsLogHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5E;;GAEG;AACH,qBAAa,mBAAoB,YAAW,WAAW;IACnD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;CAWtF"}
@@ -0,0 +1,100 @@
1
+ import { ILogHandler, LogLevel, LogMetadata, LogEntry, ExportFilters, ExportOptions, ExportResult, BufferStats, ExportFormat } from '../types/index.js';
2
+ /**
3
+ * Export log handler with circular buffer and multiple export formats
4
+ */
5
+ export declare class ExportLogHandler implements ILogHandler {
6
+ private buffer;
7
+ private maxSize;
8
+ private groupDepth;
9
+ private currentGroup?;
10
+ constructor(maxSize?: number);
11
+ /**
12
+ * Handle incoming log and store in buffer
13
+ */
14
+ handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void;
15
+ /**
16
+ * Set group tracking for nested logs
17
+ */
18
+ setGroupInfo(depth: number, groupName?: string): void;
19
+ /**
20
+ * Get buffer statistics
21
+ */
22
+ getBufferStats(): BufferStats;
23
+ /**
24
+ * Clear the buffer
25
+ */
26
+ clearBuffer(): void;
27
+ /**
28
+ * Set buffer size (with limits)
29
+ */
30
+ setBufferSize(size: number): void;
31
+ /**
32
+ * Filter logs based on criteria
33
+ */
34
+ private filterLogs;
35
+ /**
36
+ * Export logs in JSON format
37
+ */
38
+ private exportJSON;
39
+ /**
40
+ * Export logs in CSV format
41
+ */
42
+ private exportCSV;
43
+ /**
44
+ * Export logs in Markdown format
45
+ */
46
+ private exportMarkdown;
47
+ /**
48
+ * Export logs in plain text format
49
+ */
50
+ private exportPlain;
51
+ /**
52
+ * Export logs in HTML format
53
+ */
54
+ private exportHTML;
55
+ /**
56
+ * Get emoji for log level
57
+ */
58
+ private getLevelEmoji;
59
+ /**
60
+ * Main export function
61
+ */
62
+ export(format: ExportFormat, filters?: ExportFilters, options?: ExportOptions): ExportResult;
63
+ /**
64
+ * Copy to clipboard with fallback
65
+ */
66
+ copyToClipboard(format: ExportFormat, filters?: ExportFilters, options?: ExportOptions): Promise<boolean>;
67
+ /**
68
+ * Get all logs (for debugging)
69
+ */
70
+ getAllLogs(): LogEntry[];
71
+ /**
72
+ * Save export to file with download prompt
73
+ */
74
+ saveToFile(format: ExportFormat, filters?: ExportFilters, options?: ExportOptions): Promise<boolean>;
75
+ /**
76
+ * Get MIME type for format
77
+ */
78
+ private getMimeType;
79
+ /**
80
+ * Generate filename with timestamp
81
+ */
82
+ private generateFilename;
83
+ /**
84
+ * Stream logs to external endpoint
85
+ */
86
+ streamToEndpoint(endpoint: string, filters?: ExportFilters, options?: {
87
+ apiKey?: string;
88
+ batchSize?: number;
89
+ format?: ExportFormat;
90
+ }): Promise<boolean>;
91
+ /**
92
+ * Create export with metadata enrichment
93
+ */
94
+ exportWithMetadata(format: ExportFormat, filters?: ExportFilters, options?: ExportOptions): ExportResult;
95
+ /**
96
+ * Estimate memory usage of buffer
97
+ */
98
+ private estimateMemoryUsage;
99
+ }
100
+ //# sourceMappingURL=ExportLogHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExportLogHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/ExportLogHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACR,WAAW,EACX,QAAQ,EACR,WAAW,EACX,QAAQ,EACR,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACf,MAAM,mBAAmB,CAAC;AAK3B;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAChD,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,YAAY,CAAC,CAAS;gBAElB,OAAO,GAAE,MAAmC;IAIxD;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAsBlF;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAKrD;;OAEG;IACH,cAAc,IAAI,WAAW;IAuC7B;;OAEG;IACH,WAAW,IAAI,IAAI;IAInB;;OAEG;IACH,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IASjC;;OAEG;IACH,OAAO,CAAC,UAAU;IAkElB;;OAEG;IACH,OAAO,CAAC,UAAU;IAkBlB;;OAEG;IACH,OAAO,CAAC,SAAS;IA2BjB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsDtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,UAAU;IA2DlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY;IAqCpG;;OAEG;IACG,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BvH;;OAEG;IACH,UAAU,IAAI,QAAQ,EAAE;IAIxB;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IA0BlH;;OAEG;IACH,OAAO,CAAC,WAAW;IAWnB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACG,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,EAAE,OAAO,GAAE;QAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,MAAM,CAAC,EAAE,YAAY,CAAA;KACnB,GAAG,OAAO,CAAC,OAAO,CAAC;IA4CzB;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,YAAY,EAAE,OAAO,GAAE,aAAkB,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY;IAsBhH;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAQ9B"}
@@ -0,0 +1,33 @@
1
+ import { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';
2
+ /**
3
+ * Universal file-based log handler for persistent logging
4
+ * Works in both Node.js (real files) and browser (localStorage)
5
+ */
6
+ export declare class FileLogHandler implements ILogHandler {
7
+ private filename;
8
+ private maxSize?;
9
+ private fs?;
10
+ constructor(filename?: string, maxSize?: number);
11
+ handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void;
12
+ /**
13
+ * Format log entry as a single line for file storage
14
+ */
15
+ private formatLogLine;
16
+ /**
17
+ * Write to actual file in Node.js environment
18
+ */
19
+ private writeToFileNode;
20
+ /**
21
+ * Write to localStorage in browser environment
22
+ */
23
+ private writeToFileLocal;
24
+ /**
25
+ * Get stored logs (useful for debugging)
26
+ */
27
+ getLogs(): string | null;
28
+ /**
29
+ * Clear stored logs
30
+ */
31
+ clearLogs(): void;
32
+ }
33
+ //# sourceMappingURL=FileLogHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileLogHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/FileLogHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAI5E;;;GAGG;AACH,qBAAa,cAAe,YAAW,WAAW;IAC9C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,EAAE,CAAC,CAAM;gBAEL,QAAQ,GAAE,MAAkB,EAAE,OAAO,CAAC,EAAE,MAAM;IAc1D,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI;IAsBlF;;OAEG;IACH,OAAO,CAAC,aAAa;IAuBrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAyBvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA0BxB;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAcxB;;OAEG;IACH,SAAS,IAAI,IAAI;CAYpB"}
@@ -0,0 +1,11 @@
1
+ import { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';
2
+ /**
3
+ * Remote log handler for sending logs to external services
4
+ */
5
+ export declare class RemoteLogHandler implements ILogHandler {
6
+ private endpoint;
7
+ private apiKey?;
8
+ constructor(endpoint: string, apiKey?: string);
9
+ handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): Promise<void>;
10
+ }
11
+ //# sourceMappingURL=RemoteLogHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteLogHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/RemoteLogHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5E;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAKvC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBpG"}
@@ -1,8 +1,8 @@
1
1
  /**
2
2
  * @fileoverview Log handlers exports for Advanced Logger
3
3
  */
4
-
5
4
  export { FileLogHandler } from './FileLogHandler.js';
6
5
  export { RemoteLogHandler } from './RemoteLogHandler.js';
7
6
  export { AnalyticsLogHandler } from './AnalyticsLogHandler.js';
8
- export { ExportLogHandler } from './ExportLogHandler.js';
7
+ export { ExportLogHandler } from './ExportLogHandler.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { HookLogEntry, HookEvent, HookCallback, MiddlewareFn, IHookManager } from '../types/index.js';
2
+ export declare class HookManager implements IHookManager {
3
+ private hooks;
4
+ private middlewares;
5
+ constructor();
6
+ on(event: HookEvent, callback: HookCallback, priority?: number): () => void;
7
+ once(event: HookEvent, callback: HookCallback, priority?: number): () => void;
8
+ off(event: HookEvent, callback: HookCallback): boolean;
9
+ private removeHook;
10
+ use(middleware: MiddlewareFn, priority?: number): () => void;
11
+ emit(event: HookEvent, entry: HookLogEntry): Promise<HookLogEntry>;
12
+ process(entry: HookLogEntry): Promise<HookLogEntry>;
13
+ afterProcess(entry: HookLogEntry): Promise<void>;
14
+ clear(): void;
15
+ getStats(): {
16
+ hooks: Record<HookEvent, number>;
17
+ middlewares: number;
18
+ };
19
+ }
20
+ export declare function getDefaultHookManager(): HookManager;
21
+ //# sourceMappingURL=HookManager.d.ts.map
@@ -0,0 +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;AAM3B,qBAAa,WAAY,YAAW,YAAY;IAC5C,OAAO,CAAC,KAAK,CAAiD;IAC9D,OAAO,CAAC,WAAW,CAAgC;;IAQnD,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;IA6BlE,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 +1,2 @@
1
1
  export { HookManager, getDefaultHookManager } from './HookManager.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.cjs ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-CKqzXDh3.js"),t=require("./chunks/environment-Cprkw3g9.js"),r=require("./chunks/color-converter-CCSQRztd.js"),s=require("./chunks/formatting-DpKxCsXq.js"),o=require("./chunks/RemoteLogHandler-ymkQ97xl.js"),i=require("./chunks/cli-module-B-njrTWb.js"),n={maxEntries:100,ttl:3e5,enabled:!0};class StyleCache{cache=/* @__PURE__ */new Map;config;hitCount=0;missCount=0;constructor(e={}){this.config={...n,...e}}generateKey(e){return`${e.level}:${e.theme}:${e.presetName||"default"}:${e.hasPrefix}:${e.hasLocation}`}get(e){if(!this.config.enabled)return null;const t=this.generateKey(e),r=this.cache.get(t);return r?Date.now()-r.createdAt>this.config.ttl?(this.cache.delete(t),this.missCount++,null):(r.hits++,this.cache.delete(t),this.cache.set(t,r),this.hitCount++,r):(this.missCount++,null)}set(e,t,r){if(!this.config.enabled)return;const s=this.generateKey(e);if(this.cache.size>=this.config.maxEntries){const e=this.cache.keys().next().value;e&&this.cache.delete(e)}this.cache.set(s,{format:t,styles:[...r],createdAt:Date.now(),hits:0})}clear(){this.cache.clear(),this.hitCount=0,this.missCount=0}getStats(){const e=this.hitCount+this.missCount;return{size:this.cache.size,maxSize:this.config.maxEntries,hitRate:e>0?this.hitCount/e:0,hits:this.hitCount,misses:this.missCount}}setEnabled(e){this.config.enabled=e,e||this.clear()}isEnabled(){return this.config.enabled}}let a=null,l=null;function getLogger(){return l||(l=new e.Logger),l}const g=getLogger(),p={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()};exports.APILogger=e.APILogger,exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.ComponentLogger=e.ComponentLogger,exports.ContextLogger=e.ContextLogger,exports.HookManager=e.HookManager,exports.Logger=e.Logger,exports.ScopedLogger=e.ScopedLogger,exports.SerializerRegistry=e.SerializerRegistry,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.TransportManager=e.TransportManager,exports.BUILD_PRESETS=t.BUILD_PRESETS,exports.DEFAULT_CONFIG=t.DEFAULT_CONFIG,exports.ENVIRONMENT_DETECTION=t.ENVIRONMENT_DETECTION,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.TerminalRenderer=t.TerminalRenderer,exports.detectEnvironmentPreset=t.detectEnvironmentPreset,exports.formatTimestamp=t.formatTimestamp,exports.getOptimalConfig=t.getOptimalConfig,exports.parseStackTrace=t.parseStackTrace,exports.ANSI=r.ANSI,exports.colorToHex=r.colorToHex,exports.cssColorToANSI=r.cssColorToANSI,exports.getANSI256Background=r.getANSI256Background,exports.getANSI256Foreground=r.getANSI256Foreground,exports.getANSIBackground=r.getANSIBackground,exports.getANSIForeground=r.getANSIForeground,exports.getColorCapability=r.getColorCapability,exports.getEnvironment=r.getEnvironment,exports.getEnvironmentInfo=r.getEnvironmentInfo,exports.getTerminalHeight=r.getTerminalHeight,exports.getTerminalWidth=r.getTerminalWidth,exports.hexTo256=r.hexTo256,exports.hexToRgb=r.hexToRgb,exports.isRunningInTerminal=r.isRunningInTerminal,exports.rgbToHex=r.rgbToHex,exports.supportsANSI=r.supportsANSI,exports.BUILD_FORMATTERS=s.BUILD_FORMATTERS,exports.ansiBackground=s.ansiBackground,exports.ansiBold=s.ansiBold,exports.ansiColor=s.ansiColor,exports.ansiDim=s.ansiDim,exports.ansiStyle=s.ansiStyle,exports.ansiUnderline=s.ansiUnderline,exports.createANSIOutput=s.createANSIOutput,exports.createBuildOutput=s.createBuildOutput,exports.createCIOutput=s.createCIOutput,exports.createOutput=s.createOutput,exports.detectOptimalFormat=s.detectOptimalFormat,exports.formatLogLevelANSI=s.formatLogLevelANSI,exports.formatSuccessANSI=s.formatSuccessANSI,exports.sanitizeEmojis=s.sanitizeEmojis,exports.RemoteLogHandler=o.RemoteLogHandler,exports.applyLogOptions=i.applyLogOptions,exports.formatBadge=i.formatBadge,exports.formatColumns=i.formatColumns,exports.formatElapsedTime=i.formatElapsedTime,exports.formatKeyValue=i.formatKeyValue,exports.formatRelativeTime=i.formatRelativeTime,exports.formatTimestampExt=i.formatTimestamp,exports.formatWithRightAlign=i.formatWithRightAlign,exports.getVisibleLength=i.getVisibleLength,exports.isKeyValueObject=i.isKeyValueObject,exports.padToWidth=i.padToWidth,exports.resetStartTime=i.resetStartTime,exports.stripAnsi=i.stripAnsi,exports.AnalyticsLogHandler=class{handle(e,t,r,s){"error"!==e&&"critical"!==e||s.timestamp}},exports.BufferWriter=class{buffer=[];maxSize;constructor(e=1e3){this.maxSize=e}write(e,t,r){this.buffer.length>=this.maxSize&&this.buffer.shift(),this.buffer.push({message:e,level:t,styles:r,timestamp:Date.now()})}getBuffer(){return[...this.buffer]}getByLevel(...e){return this.buffer.filter(t=>e.includes(t.level))}get size(){return this.buffer.length}get isEmpty(){return 0===this.buffer.length}clear(){this.buffer=[]}flush(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)}),this.clear()}replay(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)})}toArray(){return this.buffer.map(e=>e.message)}toString(e="\n"){return this.toArray().join(e)}},exports.ConsoleTransport=class{constructor(e){this.options=e}name="console";write(e){const t=this.getConsoleMethod(e.level),r=e.prefix?`[${e.prefix}] `:"",s=e.location?` (${e.location.file}:${e.location.line})`:"";console[t](`[${e.level.toUpperCase()}]${r} ${e.msg}${s}`)}getConsoleMethod(e){switch(e){case"debug":default:return"log";case"info":return"info";case"warn":return"warn";case"error":case"critical":return"error"}}},exports.FileLogHandler=class{filename;maxSize;fs;constructor(e="app.log",r){if(this.filename=e,this.maxSize=r,t.isNode)try{this.fs=require("fs")}catch(s){console.warn("FileLogHandler: Unable to load fs module:",s)}}handle(e,r,o,i){const n={timestamp:i.timestamp,level:e.toUpperCase(),prefix:i.prefix,message:r,args:o.slice(1).map(e=>s.safeSerialize(e)),location:i.stackInfo},a=this.formatLogLine(n);t.isNode&&this.fs?this.writeToFileNode(a):t.isBrowser?this.writeToFileLocal(a):console.log(`[FILE-LOG] ${a}`)}formatLogLine(e){let t=[e.timestamp,`[${e.level}]`,e.prefix?`[${e.prefix}]`:"",e.message].filter(Boolean).join(" ");return e.args&&e.args.length>0&&(t+=" "+e.args.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" ")),e.location&&(t+=` (${e.location.file}:${e.location.line}:${e.location.column})`),t}writeToFileNode(e){if(this.fs)try{if(this.maxSize)try{if(this.fs.statSync(this.filename).size>this.maxSize){const e=`${this.filename}.bak`;this.fs.renameSync(this.filename,e)}}catch(t){}this.fs.appendFileSync(this.filename,e+"\n","utf8")}catch(t){console.error("FileLogHandler: Failed to write to file:",t)}}writeToFileLocal(e){try{const t=`logger_${this.filename}`,r=localStorage.getItem(t)||"";let s=r;if(r.length>0&&(s+="\n"),s+=e,this.maxSize||s.split("\n").length>1e3){const e=s.split("\n"),t=this.maxSize?Math.floor(this.maxSize/100):1e3;e.length>t&&(s=e.slice(-t).join("\n"))}localStorage.setItem(t,s)}catch(t){console.error("FileLogHandler: Failed to write to localStorage:",t)}}getLogs(){if(t.isNode&&this.fs)try{return this.fs.readFileSync(this.filename,"utf8")}catch(e){return null}else if(t.isBrowser){const e=`logger_${this.filename}`;return localStorage.getItem(e)}return null}clearLogs(){if(t.isNode&&this.fs)try{this.fs.writeFileSync(this.filename,"","utf8")}catch(e){console.error("FileLogHandler: Failed to clear file:",e)}else if(t.isBrowser){const e=`logger_${this.filename}`;localStorage.removeItem(e)}}},exports.FileTransport=class{name="file";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){const t=JSON.stringify(e)+"\n";this.buffer.push(t),this.buffer.length>=(this.options.batchSize||100)&&this.flush()}async flush(){if(0===this.buffer.length)return;const e=this.buffer.join("");if(this.buffer=[],void 0!==globalThis.process&&"function"==typeof require)try{const t=require("fs"),r=this.options.destination||"app.log";t.appendFileSync(r,e)}catch{}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.HttpTransport=class{name="http";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){this.buffer.push(e),this.buffer.length>=(this.options.batchSize||50)&&this.flush()}async flush(){if(0===this.buffer.length||!this.options.url)return;const e=[...this.buffer];this.buffer=[];try{await fetch(this.options.url,{method:"POST",headers:{"Content-Type":"application/json",...this.options.headers},body:JSON.stringify({logs:e})})}catch{this.buffer.unshift(...e)}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.StyleCache=StyleCache,exports.addHandler=e=>getLogger().addHandler(e),exports.addSerializer=(e,t,r)=>getLogger().addSerializer(e,t,r),exports.addTransport=e=>getLogger().addTransport(e),exports.api=e=>getLogger().api(e),exports.badge=e=>getLogger().badge(e),exports.badges=e=>getLogger().badges(e),exports.blank=()=>getLogger().blank(),exports.box=(e,t)=>getLogger().box(e,t),exports.clearBadges=()=>getLogger().clearBadges(),exports.cli=e=>getLogger().cli(e),exports.cliTable=(e,t)=>getLogger().cliTable(e,t),exports.closeTransports=()=>getLogger().closeTransports(),exports.component=e=>getLogger().component(e),exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>getLogger().critical(...e),exports.debug=(...e)=>getLogger().debug(...e),exports.default=g,exports.divider=()=>getLogger().divider(),exports.error=(...e)=>getLogger().error(...e),exports.flushTransports=()=>getLogger().flushTransports(),exports.getStyleCache=function(){return a||(a=new StyleCache),a},exports.group=(e,t)=>getLogger().group(e,t),exports.groupEnd=()=>getLogger().groupEnd(),exports.header=(e,t)=>getLogger().header(e,t),exports.info=(...e)=>getLogger().info(...e),exports.logAnimated=(e,t)=>getLogger().logAnimated(e,t),exports.logWithSVG=(e,t,r)=>getLogger().logWithSVG(e,t,r),exports.off=(e,t)=>getLogger().off(e,t),exports.on=(e,t,r)=>getLogger().on(e,t,r),exports.once=(e,t,r)=>getLogger().once(e,t,r),exports.removeSerializer=e=>getLogger().removeSerializer(e),exports.removeTransport=e=>getLogger().removeTransport(e),exports.scope=e=>getLogger().scope(e),exports.setBannerType=e=>getLogger().setBannerType(e),exports.setCLILevel=e=>getLogger().setCLILevel(e),exports.setGlobalPrefix=e=>getLogger().setGlobalPrefix(e),exports.setTheme=e=>getLogger().setTheme(e),exports.setVerbosity=e=>getLogger().setVerbosity(e),exports.showBanner=e=>getLogger().showBanner(e),exports.spinner=e=>getLogger().spinner(e),exports.step=(e,t,r)=>getLogger().step(e,t,r),exports.stylePresets=p,exports.success=(...e)=>getLogger().success(...e),exports.table=(e,t)=>getLogger().table(e,t),exports.time=e=>getLogger().time(e),exports.timeEnd=e=>getLogger().timeEnd(e),exports.trace=(...e)=>getLogger().trace(...e),exports.use=(e,t)=>getLogger().use(e,t),exports.warn=(...e)=>getLogger().warn(...e);
2
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":["../src/styling/StyleCache.ts","../src/index.ts","../src/handlers/AnalyticsLogHandler.ts","../src/writers/BufferWriter.ts","../src/transports/ConsoleTransport.ts","../src/handlers/FileLogHandler.ts","../src/transports/FileTransport.ts","../src/transports/HttpTransport.ts"],"sourcesContent":["import type { LogLevel, DevToolsTheme } from '../types/core.js';\n\ninterface CacheKey {\n level: LogLevel | 'success';\n theme: DevToolsTheme;\n presetName?: string;\n hasPrefix: boolean;\n hasLocation: boolean;\n}\n\ninterface CacheEntry {\n styles: string[];\n format: string;\n createdAt: number;\n hits: number;\n}\n\nexport interface StyleCacheConfig {\n maxEntries?: number;\n ttl?: number;\n enabled?: boolean;\n}\n\nconst DEFAULT_CONFIG: Required<StyleCacheConfig> = {\n maxEntries: 100,\n ttl: 5 * 60 * 1000,\n enabled: true\n};\n\nexport class StyleCache {\n private cache: Map<string, CacheEntry> = new Map();\n private config: Required<StyleCacheConfig>;\n private hitCount = 0;\n private missCount = 0;\n\n constructor(config: StyleCacheConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n private generateKey(key: CacheKey): string {\n return `${key.level}:${key.theme}:${key.presetName || 'default'}:${key.hasPrefix}:${key.hasLocation}`;\n }\n\n get(key: CacheKey): CacheEntry | null {\n if (!this.config.enabled) return null;\n\n const cacheKey = this.generateKey(key);\n const entry = this.cache.get(cacheKey);\n\n if (!entry) {\n this.missCount++;\n return null;\n }\n\n if (Date.now() - entry.createdAt > this.config.ttl) {\n this.cache.delete(cacheKey);\n this.missCount++;\n return null;\n }\n\n entry.hits++;\n this.cache.delete(cacheKey);\n this.cache.set(cacheKey, entry);\n this.hitCount++;\n\n return entry;\n }\n\n set(key: CacheKey, format: string, styles: string[]): void {\n if (!this.config.enabled) return;\n\n const cacheKey = this.generateKey(key);\n\n if (this.cache.size >= this.config.maxEntries) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n\n this.cache.set(cacheKey, {\n format,\n styles: [...styles],\n createdAt: Date.now(),\n hits: 0\n });\n }\n\n clear(): void {\n this.cache.clear();\n this.hitCount = 0;\n this.missCount = 0;\n }\n\n getStats(): {\n size: number;\n maxSize: number;\n hitRate: number;\n hits: number;\n misses: number;\n } {\n const total = this.hitCount + this.missCount;\n return {\n size: this.cache.size,\n maxSize: this.config.maxEntries,\n hitRate: total > 0 ? this.hitCount / total : 0,\n hits: this.hitCount,\n misses: this.missCount\n };\n }\n\n setEnabled(enabled: boolean): void {\n this.config.enabled = enabled;\n if (!enabled) {\n this.clear();\n }\n }\n\n isEnabled(): boolean {\n return this.config.enabled;\n }\n}\n\nlet _styleCache: StyleCache | null = null;\n\nexport function getStyleCache(): StyleCache {\n if (!_styleCache) {\n _styleCache = new StyleCache();\n }\n return _styleCache;\n}\n","/**\n * @fileoverview Better Logger - Librería completa con todas las características\n * @version 0.3.0\n * @since 2024\n * \n * Punto de entrada principal que proporciona la experiencia completa de Better Logger\n * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,\n * capacidades de exportación y logging remoto.\n * \n * @module @mks2508/better-logger\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n CLILogLevel,\n IBoxOptions,\n ITableOptions,\n} from './types/index.js';\n\n// Lazy singleton - se inicializa solo cuando se necesita\nlet _logger: Logger | null = null;\n\nfunction getLogger(): Logger {\n if (!_logger) {\n _logger = new Logger();\n }\n return _logger;\n}\n\n/**\n * Clase principal Logger con conjunto completo de características\n * \n * @example\n * // Importación y uso básico\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.preset('cyberpunk'); // Aplicar preset completo\n * logger.info('¡Hola mundo!');\n * \n * @example\n * // Logger con scope para componentes\n * const auth = logger.component('Auth');\n * auth.info('Usuario autenticando...');\n * auth.success('Login exitoso');\n * \n * @example\n * // Logger para APIs con badges\n * const api = logger.api('GraphQL');\n * api.badges(['v2', 'cached']).info('Query ejecutada');\n * \n * @since 0.3.0\n */\nexport { Logger };\n\n/**\n * Instancia singleton del logger lista para usar\n * @default\n * \n * @example\n * // Uso directo sin crear instancia\n * import logger from '@mks2508/better-logger';\n * \n * logger.info('Aplicación iniciada');\n * logger.success('Conexión establecida');\n * logger.warn('Memoria al 80%');\n * logger.error('Fallo en conexión');\n */\nexport default getLogger();\n\n/**\n * Métodos de logging individuales (enlazados al singleton)\n * \n * @example\n * // Importar solo los métodos necesarios\n * import { info, error, success } from '@mks2508/better-logger';\n * \n * info('Proceso iniciado');\n * success('✓ Completado exitosamente');\n * error('Error:', errorDetails);\n * \n * @since 0.3.0\n */\nexport const debug = (...args: any[]) => getLogger().debug(...args);\nexport const info = (...args: any[]) => getLogger().info(...args);\nexport const warn = (...args: any[]) => getLogger().warn(...args);\nexport const error = (...args: any[]) => getLogger().error(...args);\nexport const success = (...args: any[]) => getLogger().success(...args);\nexport const critical = (...args: any[]) => getLogger().critical(...args);\nexport const trace = (...args: any[]) => getLogger().trace(...args);\nexport const table = (data: any, columns?: string[]) => getLogger().table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => getLogger().group(label, collapsed);\nexport const groupEnd = () => getLogger().groupEnd();\nexport const time = (label: string) => getLogger().time(label);\nexport const timeEnd = (label: string) => getLogger().timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => getLogger().setGlobalPrefix(prefix);\nexport const scope = (name: string) => getLogger().scope(name);\nexport const component = (name: string) => getLogger().component(name);\nexport const api = (name: string) => getLogger().api(name);\nexport const badges = (badgeList: string[]) => getLogger().badges(badgeList);\nexport const badge = (badgeName: string) => getLogger().badge(badgeName);\nexport const clearBadges = () => getLogger().clearBadges();\nexport const setVerbosity = (level: Verbosity) => getLogger().setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => getLogger().addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => getLogger().setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => getLogger().setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => getLogger().showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n getLogger().logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n getLogger().logAnimated(message, duration);\nexport const cli = (command: string) => getLogger().cli(command);\n\n// CLI Primitives (v5.0)\nexport const step = (current: number, total: number, message: string) => getLogger().step(current, total, message);\nexport const spinner = (message: string) => getLogger().spinner(message);\nexport const box = (content: string, options?: IBoxOptions) => getLogger().box(content, options);\nexport const cliTable = (rows: Record<string, unknown>[], options?: ITableOptions) => getLogger().cliTable(rows, options);\nexport const header = (title: string, subtitle?: string) => getLogger().header(title, subtitle);\nexport const divider = () => getLogger().divider();\nexport const blank = () => getLogger().blank();\nexport const setCLILevel = (level: CLILogLevel) => getLogger().setCLILevel(level);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry,\n TimerResult,\n OutputFormat,\n IScopedLogger,\n IAPILogger,\n IComponentLogger,\n Bindings,\n SerializerFn,\n SerializerContext,\n SerializerConfig,\n ISerializerRegistry,\n HookLogEntry,\n HookEvent,\n HookCallback,\n MiddlewareFn,\n IHookManager,\n TransportRecord,\n TransportOptions,\n TransportTarget,\n ITransport,\n StyleCacheConfig,\n BadgeStyle,\n TimestampFormat,\n ColumnAlign,\n ColumnConfig,\n LogOptions,\n CLILogLevel,\n ISpinnerHandle,\n IBoxOptions,\n ITableOptions,\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Serializers\nexport { SerializerRegistry } from './serializers/index.js';\n\n// Hooks & Middleware\nexport { HookManager } from './hooks/index.js';\n\n// Transports\nexport {\n TransportManager,\n ConsoleTransport,\n FileTransport,\n HttpTransport\n} from './transports/index.js';\n\n// Style Cache\nexport { StyleCache, getStyleCache } from './styling/StyleCache.js';\n\n// Enterprise feature function exports\nimport type { SerializerFn, HookEvent, HookCallback, MiddlewareFn, TransportTarget } from './types/index.js';\nexport const addSerializer = <T>(\n type: new (...args: any[]) => T,\n serializer: SerializerFn<T>,\n priority?: number\n) => getLogger().addSerializer(type, serializer, priority);\nexport const removeSerializer = <T>(type: new (...args: any[]) => T) =>\n getLogger().removeSerializer(type);\nexport const on = (event: HookEvent, callback: HookCallback, priority?: number) =>\n getLogger().on(event, callback, priority);\nexport const once = (event: HookEvent, callback: HookCallback, priority?: number) =>\n getLogger().once(event, callback, priority);\nexport const off = (event: HookEvent, callback: HookCallback) =>\n getLogger().off(event, callback);\nexport const use = (middleware: MiddlewareFn, priority?: number) =>\n getLogger().use(middleware, priority);\nexport const addTransport = (target: TransportTarget) =>\n getLogger().addTransport(target);\nexport const removeTransport = (id: string) =>\n getLogger().removeTransport(id);\nexport const flushTransports = () =>\n getLogger().flushTransports();\nexport const closeTransports = () =>\n getLogger().closeTransports();\n\n// Scoped loggers\nexport {\n ScopedLogger,\n APILogger,\n ComponentLogger,\n ContextLogger\n} from './ScopedLogger.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp,\n detectOptimalFormat,\n createOutput,\n createANSIOutput,\n createBuildOutput,\n createCIOutput\n} from './utils/index.js';\n\n// ANSI color utilities\nexport {\n ansiStyle,\n ansiColor,\n ansiBackground,\n ansiBold,\n ansiDim,\n ansiUnderline,\n formatLogLevelANSI,\n formatSuccessANSI,\n BUILD_FORMATTERS,\n sanitizeEmojis\n} from './utils/ansi-colors.js';\n\n// Environment detection and presets\nexport {\n BUILD_PRESETS,\n ENVIRONMENT_DETECTION,\n detectEnvironmentPreset,\n getOptimalConfig\n} from './constants.js';\n\n/**\n * Utilidades de estilo para crear estilos personalizados de consola\n * \n * @example\n * // Crear estilo personalizado\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const miEstilo = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .rounded('8px')\n * .bold()\n * .build();\n * \n * console.log('%cMensaje estilizado', miEstilo);\n * \n * @example\n * // Usar presets predefinidos\n * console.log('%cÉxito!', stylePresets.success);\n * console.log('%cError!', stylePresets.error);\n * \n * @since 0.3.0\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola\n * \n * @returns {StyleBuilder} Constructor de estilos encadenable\n * \n * @example\n * const estilo = createStyle()\n * .gradient('#667eea', '#764ba2')\n * .color('white')\n * .padding('8px 16px')\n * .rounded('4px')\n * .shadow('0 2px 4px rgba(0,0,0,0.2)')\n * .build();\n * \n * @since 0.3.0\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Presets de estilo predefinidos para casos de uso comunes\n * \n * @constant {Object} stylePresets\n * \n * @example\n * console.log('%cOperación exitosa', stylePresets.success);\n * console.log('%cAdvertencia', stylePresets.warning);\n * console.log('%cError crítico', stylePresets.error);\n * console.log('%cInformación', stylePresets.info);\n * console.log('%cDestacado', stylePresets.accent);\n * \n * @since 0.3.0\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};\n\n// Terminal formatting utilities\nexport {\n formatWithRightAlign,\n formatColumns,\n formatKeyValue,\n formatBadge,\n formatTimestamp as formatTimestampExt,\n formatRelativeTime,\n formatElapsedTime,\n resetStartTime,\n isKeyValueObject,\n stripAnsi,\n getVisibleLength,\n padToWidth,\n applyLogOptions,\n} from './terminal/formatter.js';\n\n// Color converter utilities\nexport {\n hexToRgb,\n rgbToHex,\n hexTo256,\n colorToHex,\n getANSIForeground,\n getANSIBackground,\n getANSI256Foreground,\n getANSI256Background,\n cssColorToANSI,\n ANSI,\n} from './terminal/color-converter.js';\n\nexport type { RGB, ColorCapability } from './terminal/color-converter.js';\n\n// Terminal renderer\nexport { TerminalRenderer } from './terminal/terminal-renderer.js';\nexport type { ANSIStyle, ChalkLikeInterface } from './terminal/terminal-renderer.js';\n\n// Environment detection\nexport {\n getEnvironment,\n isRunningInTerminal,\n supportsANSI,\n getColorCapability,\n getTerminalWidth,\n getTerminalHeight,\n getEnvironmentInfo,\n} from './utils/environment-detector.js';\n\nexport type { Environment } from './utils/environment-detector.js';\n\n// Output writers for custom log destinations\nexport { BufferWriter, type BufferEntry } from './writers/index.js';\nexport type { OutputWriter, OutputMode } from './types/core.js';","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview BufferWriter - Collects log output in memory for later use\n * @version 4.0.0\n */\n\nimport type { LogLevel, OutputWriter } from '../types/core.js';\n\n/**\n * Entry in the log buffer\n */\nexport interface BufferEntry {\n message: string;\n level: LogLevel;\n styles: string[];\n timestamp: number;\n}\n\n/**\n * BufferWriter collects log messages in memory instead of outputting to console.\n * Useful for:\n * - CLI operations with spinners (buffer logs during spinner, show after)\n * - Testing (capture logs for assertions)\n * - Batch processing (collect logs, process together)\n *\n * @implements {OutputWriter}\n * @since 4.0.0\n *\n * @example\n * import logger, { BufferWriter } from '@mks2508/better-logger';\n *\n * const buffer = new BufferWriter();\n * logger.updateConfig({\n * outputMode: 'custom',\n * outputWriter: buffer\n * });\n *\n * // Logs go to buffer, not console\n * spinner.start('Loading...');\n * logger.info('Connecting...');\n * logger.info('Processing...');\n * spinner.stop();\n *\n * // Show buffered logs\n * logger.updateConfig({ outputMode: 'console' });\n * buffer.flush(); // Outputs all buffered logs to console\n */\nexport class BufferWriter implements OutputWriter {\n private buffer: BufferEntry[] = [];\n private maxSize: number;\n\n /**\n * Creates a new BufferWriter\n * @param maxSize - Maximum number of entries to buffer (default: 1000)\n */\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n /**\n * Writes a log entry to the buffer\n * @param message - Formatted log message\n * @param level - Log level\n * @param styles - CSS styles (for browser console)\n */\n write(message: string, level: LogLevel, styles: string[]): void {\n if (this.buffer.length >= this.maxSize) {\n this.buffer.shift(); // Remove oldest entry\n }\n\n this.buffer.push({\n message,\n level,\n styles,\n timestamp: Date.now()\n });\n }\n\n /**\n * Returns all buffered entries\n * @returns Copy of the buffer array\n */\n getBuffer(): BufferEntry[] {\n return [...this.buffer];\n }\n\n /**\n * Returns buffered entries filtered by log level\n * @param levels - Log levels to include\n * @returns Filtered buffer entries\n */\n getByLevel(...levels: LogLevel[]): BufferEntry[] {\n return this.buffer.filter(entry => levels.includes(entry.level));\n }\n\n /**\n * Returns the number of buffered entries\n */\n get size(): number {\n return this.buffer.length;\n }\n\n /**\n * Checks if buffer is empty\n */\n get isEmpty(): boolean {\n return this.buffer.length === 0;\n }\n\n /**\n * Clears all buffered entries\n */\n clear(): void {\n this.buffer = [];\n }\n\n /**\n * Outputs all buffered entries to console and clears the buffer\n */\n flush(): void {\n this.buffer.forEach(entry => {\n if (entry.styles.length > 0) {\n console.log(entry.message, ...entry.styles);\n } else {\n console.log(entry.message);\n }\n });\n this.clear();\n }\n\n /**\n * Outputs buffered entries to console without clearing\n */\n replay(): void {\n this.buffer.forEach(entry => {\n if (entry.styles.length > 0) {\n console.log(entry.message, ...entry.styles);\n } else {\n console.log(entry.message);\n }\n });\n }\n\n /**\n * Returns all messages as an array of strings\n */\n toArray(): string[] {\n return this.buffer.map(entry => entry.message);\n }\n\n /**\n * Returns all messages joined as a single string\n * @param separator - String to join messages with (default: newline)\n */\n toString(separator: string = '\\n'): string {\n return this.toArray().join(separator);\n }\n}\n","import type { TransportRecord, TransportOptions, ITransport, LogLevel } from '../types/index.js';\n\nexport class ConsoleTransport implements ITransport {\n readonly name = 'console';\n\n constructor(private options?: TransportOptions) {}\n\n write(record: TransportRecord): void {\n const method = this.getConsoleMethod(record.level);\n const prefix = record.prefix ? `[${record.prefix}] ` : '';\n const location = record.location\n ? ` (${record.location.file}:${record.location.line})`\n : '';\n\n console[method](`[${record.level.toUpperCase()}]${prefix} ${record.msg}${location}`);\n }\n\n private getConsoleMethod(level: LogLevel): 'log' | 'info' | 'warn' | 'error' {\n switch (level) {\n case 'debug': return 'log';\n case 'info': return 'info';\n case 'warn': return 'warn';\n case 'error':\n case 'critical': return 'error';\n default: return 'log';\n }\n }\n}\n","/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}","import type { TransportRecord, TransportOptions, ITransport } from '../types/index.js';\n\nexport interface FileTransportOptions extends TransportOptions {\n destination?: string;\n}\n\nexport class FileTransport implements ITransport {\n readonly name = 'file';\n private buffer: string[] = [];\n private flushTimer?: ReturnType<typeof setInterval>;\n private options: FileTransportOptions;\n\n constructor(options?: FileTransportOptions) {\n this.options = options || {};\n\n if (this.options.flushInterval) {\n this.flushTimer = setInterval(() => this.flush(), this.options.flushInterval);\n }\n }\n\n write(record: TransportRecord): void {\n const line = JSON.stringify(record) + '\\n';\n this.buffer.push(line);\n\n if (this.buffer.length >= (this.options.batchSize || 100)) {\n this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0) return;\n\n const lines = this.buffer.join('');\n this.buffer = [];\n\n if (typeof globalThis.process !== 'undefined' && typeof require === 'function') {\n try {\n const fs = require('fs');\n const dest = this.options.destination || 'app.log';\n fs.appendFileSync(dest, lines);\n } catch {\n // Silent fail in browser or if fs not available\n }\n }\n }\n\n close(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n this.flush();\n }\n}\n","import type { TransportRecord, TransportOptions, ITransport } from '../types/index.js';\n\nexport interface HttpTransportOptions extends TransportOptions {\n url?: string;\n headers?: Record<string, string>;\n}\n\nexport class HttpTransport implements ITransport {\n readonly name = 'http';\n private buffer: TransportRecord[] = [];\n private flushTimer?: ReturnType<typeof setInterval>;\n private options: HttpTransportOptions;\n\n constructor(options?: HttpTransportOptions) {\n this.options = options || {};\n\n if (this.options.flushInterval) {\n this.flushTimer = setInterval(() => this.flush(), this.options.flushInterval);\n }\n }\n\n write(record: TransportRecord): void {\n this.buffer.push(record);\n\n if (this.buffer.length >= (this.options.batchSize || 50)) {\n this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0 || !this.options.url) return;\n\n const records = [...this.buffer];\n this.buffer = [];\n\n try {\n await fetch(this.options.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.options.headers\n },\n body: JSON.stringify({ logs: records })\n });\n } catch {\n this.buffer.unshift(...records);\n }\n }\n\n close(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n this.flush();\n }\n}\n"],"names":["DEFAULT_CONFIG","maxEntries","ttl","enabled","StyleCache","cache","Map","config","hitCount","missCount","constructor","this","generateKey","key","level","theme","presetName","hasPrefix","hasLocation","get","cacheKey","entry","Date","now","createdAt","delete","hits","set","format","styles","size","firstKey","keys","next","value","clear","getStats","total","maxSize","hitRate","misses","setEnabled","isEnabled","_styleCache","_logger","getLogger","Logger","index","stylePresets","success","StylePresets","build","error","warning","info","accent","handle","message","_args","metadata","timestamp","buffer","write","length","shift","push","getBuffer","getByLevel","levels","filter","includes","isEmpty","flush","forEach","console","log","replay","toArray","map","toString","separator","join","options","name","record","method","getConsoleMethod","prefix","location","file","line","toUpperCase","msg","filename","fs","isNode","require","warn","args","logEntry","slice","arg","safeSerialize","stackInfo","logLine","formatLogLine","writeToFileNode","isBrowser","writeToFileLocal","Boolean","JSON","stringify","String","column","statSync","backupName","renameSync","appendFileSync","storageKey","existingLogs","localStorage","getItem","newLogs","split","lines","maxLines","Math","floor","setItem","getLogs","readFileSync","clearLogs","writeFileSync","removeItem","flushTimer","flushInterval","setInterval","batchSize","globalThis","process","dest","destination","close","clearInterval","url","records","fetch","headers","body","logs","unshift","handler","addHandler","type","serializer","priority","addSerializer","target","addTransport","api","badgeName","badge","badgeList","badges","blank","content","box","clearBadges","command","cli","rows","cliTable","closeTransports","component","StyleBuilder","critical","debug","divider","flushTransports","label","collapsed","group","groupEnd","title","subtitle","header","duration","logAnimated","svgContent","logWithSVG","event","callback","off","on","once","removeSerializer","id","removeTransport","scope","bannerType","setBannerType","setCLILevel","setGlobalPrefix","setTheme","setVerbosity","showBanner","spinner","current","step","data","columns","table","time","timeEnd","trace","middleware","use"],"mappings":"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"}