@mks2508/better-logger 0.0.2-alpha.2 → 0.8.1-alpha.1

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 (231) hide show
  1. package/.github/workflows/ci-quality.yml +356 -0
  2. package/.github/workflows/docs-demo.yml +123 -0
  3. package/.github/workflows/releases-core.yml +448 -0
  4. package/.github/workflows/releases-full.yml +404 -0
  5. package/.github/{workflows → workflows-backup}/ci.yml +12 -110
  6. package/.github/workflows-backup/nightly.yml +196 -0
  7. package/.github/workflows-backup/release-optimized.yml +373 -0
  8. package/.release-notes-0.2.0.md +129 -0
  9. package/CHANGELOG.json +658 -0
  10. package/README.md +110 -512
  11. package/demo.html +9 -2
  12. package/dist/Logger.d.ts +176 -0
  13. package/dist/Logger.d.ts.map +1 -0
  14. package/dist/Logger.js +498 -0
  15. package/dist/chunks/{Logger-BrFKFZcD.js → Logger-CbCUS5pQ.js} +987 -5
  16. package/dist/chunks/Logger-CbCUS5pQ.js.map +1 -0
  17. package/dist/chunks/Logger-PCfgYKTP.js +2 -0
  18. package/dist/chunks/Logger-PCfgYKTP.js.map +1 -0
  19. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js +33 -0
  20. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js.map +1 -0
  21. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js +2 -0
  22. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js.map +1 -0
  23. package/dist/chunks/StyleBuilder-BoJTmskd.js +361 -0
  24. package/dist/chunks/StyleBuilder-BoJTmskd.js.map +1 -0
  25. package/dist/chunks/StyleBuilder-LPLzsoHY.js +4 -0
  26. package/dist/chunks/StyleBuilder-LPLzsoHY.js.map +1 -0
  27. package/dist/cli/CommandProcessor.d.ts +40 -0
  28. package/dist/cli/CommandProcessor.d.ts.map +1 -0
  29. package/dist/cli/CommandProcessor.js +57 -0
  30. package/dist/cli/commands/ConfigCommand.d.ts +17 -0
  31. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
  32. package/dist/cli/commands/ConfigCommand.js +88 -0
  33. package/dist/cli/commands/ExportCommand.d.ts +51 -0
  34. package/dist/cli/commands/ExportCommand.d.ts.map +1 -0
  35. package/dist/cli/commands/ExportCommand.js +243 -0
  36. package/dist/cli/commands/StatusCommand.d.ts +33 -0
  37. package/dist/cli/commands/StatusCommand.d.ts.map +1 -0
  38. package/dist/cli/commands/StatusCommand.js +93 -0
  39. package/dist/cli/commands/ThemeCommand.d.ts +33 -0
  40. package/dist/cli/commands/ThemeCommand.d.ts.map +1 -0
  41. package/dist/cli/commands/ThemeCommand.js +79 -0
  42. package/dist/cli/help.d.ts +15 -0
  43. package/dist/cli/help.d.ts.map +1 -0
  44. package/dist/cli/help.js +118 -0
  45. package/dist/cli/index.d.ts +15 -0
  46. package/dist/cli/index.d.ts.map +1 -0
  47. package/dist/cli/index.js +40 -0
  48. package/dist/constants.d.ts +91 -0
  49. package/dist/constants.d.ts.map +1 -0
  50. package/dist/constants.js +80 -0
  51. package/dist/core.cjs +1 -1
  52. package/dist/core.cjs.map +1 -1
  53. package/dist/core.d.ts +130 -0
  54. package/dist/core.d.ts.map +1 -0
  55. package/dist/core.js +258 -242
  56. package/dist/core.js.map +1 -1
  57. package/dist/example.d.ts +18 -0
  58. package/dist/example.d.ts.map +1 -0
  59. package/dist/example.js +154 -0
  60. package/dist/exports-module.d.ts +203 -0
  61. package/dist/exports-module.d.ts.map +1 -0
  62. package/dist/exports-module.js +260 -0
  63. package/dist/exports.cjs +1 -1
  64. package/dist/exports.cjs.map +1 -1
  65. package/dist/exports.js +2 -2
  66. package/dist/handlers/AnalyticsLogHandler.d.ts +11 -0
  67. package/dist/handlers/AnalyticsLogHandler.d.ts.map +1 -0
  68. package/dist/handlers/AnalyticsLogHandler.js +19 -0
  69. package/dist/handlers/ExportLogHandler.d.ts +103 -0
  70. package/dist/handlers/ExportLogHandler.d.ts.map +1 -0
  71. package/dist/handlers/ExportLogHandler.js +516 -0
  72. package/dist/handlers/FileLogHandler.d.ts +13 -0
  73. package/dist/handlers/FileLogHandler.d.ts.map +1 -0
  74. package/dist/handlers/FileLogHandler.js +24 -0
  75. package/dist/handlers/RemoteLogHandler.d.ts +14 -0
  76. package/dist/handlers/RemoteLogHandler.d.ts.map +1 -0
  77. package/dist/handlers/RemoteLogHandler.js +37 -0
  78. package/dist/handlers/index.d.ts +8 -0
  79. package/dist/handlers/index.d.ts.map +1 -0
  80. package/dist/handlers/index.js +7 -0
  81. package/dist/index.cjs +1 -1
  82. package/dist/index.cjs.map +1 -1
  83. package/dist/index.d.ts +86 -0
  84. package/dist/index.d.ts.map +1 -0
  85. package/dist/index.js +89 -103
  86. package/dist/main.d.ts +2 -0
  87. package/dist/main.d.ts.map +1 -0
  88. package/dist/main.js +139 -0
  89. package/dist/styling/StyleBuilder.d.ts +132 -0
  90. package/dist/styling/StyleBuilder.d.ts.map +1 -0
  91. package/dist/styling/StyleBuilder.js +268 -0
  92. package/dist/styling/banners.d.ts +45 -0
  93. package/dist/styling/banners.d.ts.map +1 -0
  94. package/dist/styling/banners.js +155 -0
  95. package/dist/styling/index.d.ts +7 -0
  96. package/dist/styling/index.d.ts.map +1 -0
  97. package/dist/styling/index.js +6 -0
  98. package/dist/styling/themes.d.ts +10 -0
  99. package/dist/styling/themes.d.ts.map +1 -0
  100. package/dist/styling/themes.js +231 -0
  101. package/dist/styling-module.d.ts +185 -0
  102. package/dist/styling-module.d.ts.map +1 -0
  103. package/dist/styling-module.js +199 -0
  104. package/dist/styling.cjs +1 -1
  105. package/dist/styling.cjs.map +1 -1
  106. package/dist/styling.js +4 -4
  107. package/dist/types/Logger.d.ts +172 -0
  108. package/dist/types/Logger.d.ts.map +1 -0
  109. package/dist/types/cli/CommandProcessor.d.ts +37 -0
  110. package/dist/types/cli/CommandProcessor.d.ts.map +1 -0
  111. package/dist/types/cli/commands/ConfigCommand.d.ts +14 -0
  112. package/dist/types/cli/commands/ConfigCommand.d.ts.map +1 -0
  113. package/dist/types/cli/commands/ExportCommand.d.ts +48 -0
  114. package/dist/types/cli/commands/ExportCommand.d.ts.map +1 -0
  115. package/dist/types/cli/commands/StatusCommand.d.ts +30 -0
  116. package/dist/types/cli/commands/StatusCommand.d.ts.map +1 -0
  117. package/dist/types/cli/commands/ThemeCommand.d.ts +30 -0
  118. package/dist/types/cli/commands/ThemeCommand.d.ts.map +1 -0
  119. package/dist/types/cli/help.d.ts +12 -0
  120. package/dist/types/cli/help.d.ts.map +1 -0
  121. package/dist/types/cli/index.d.ts +15 -0
  122. package/dist/types/cli/index.d.ts.map +1 -0
  123. package/dist/types/constants.d.ts +88 -0
  124. package/dist/types/constants.d.ts.map +1 -0
  125. package/dist/types/core.d.ts +71 -211
  126. package/dist/types/core.d.ts.map +1 -0
  127. package/dist/types/core.js +13 -0
  128. package/dist/types/example.d.ts +18 -0
  129. package/dist/types/example.d.ts.map +1 -0
  130. package/dist/types/exports-module.d.ts +196 -0
  131. package/dist/types/exports-module.d.ts.map +1 -0
  132. package/dist/types/handlers/AnalyticsLogHandler.d.ts +8 -0
  133. package/dist/types/handlers/AnalyticsLogHandler.d.ts.map +1 -0
  134. package/dist/types/handlers/ExportLogHandler.d.ts +100 -0
  135. package/dist/types/handlers/ExportLogHandler.d.ts.map +1 -0
  136. package/dist/types/handlers/FileLogHandler.d.ts +10 -0
  137. package/dist/types/handlers/FileLogHandler.d.ts.map +1 -0
  138. package/dist/types/handlers/RemoteLogHandler.d.ts +11 -0
  139. package/dist/types/handlers/RemoteLogHandler.d.ts.map +1 -0
  140. package/dist/types/handlers/index.d.ts +8 -0
  141. package/dist/types/handlers/index.d.ts.map +1 -0
  142. package/dist/types/handlers.d.ts +88 -0
  143. package/dist/types/handlers.d.ts.map +1 -0
  144. package/dist/types/handlers.js +4 -0
  145. package/dist/types/index.d.ts +7 -675
  146. package/dist/types/index.d.ts.map +1 -0
  147. package/dist/types/index.js +4 -0
  148. package/dist/types/main.d.ts +2 -0
  149. package/dist/types/main.d.ts.map +1 -0
  150. package/dist/types/styling/StyleBuilder.d.ts +132 -0
  151. package/dist/types/styling/StyleBuilder.d.ts.map +1 -0
  152. package/dist/types/styling/banners.d.ts +42 -0
  153. package/dist/types/styling/banners.d.ts.map +1 -0
  154. package/dist/types/styling/index.d.ts +7 -0
  155. package/dist/types/styling/index.d.ts.map +1 -0
  156. package/dist/types/styling/themes.d.ts +7 -0
  157. package/dist/types/styling/themes.d.ts.map +1 -0
  158. package/dist/types/styling-module.d.ts +178 -0
  159. package/dist/types/styling-module.d.ts.map +1 -0
  160. package/dist/types/types/core.d.ts +71 -0
  161. package/dist/types/types/core.d.ts.map +1 -0
  162. package/dist/types/types/handlers.d.ts +85 -0
  163. package/dist/types/types/handlers.d.ts.map +1 -0
  164. package/dist/types/types/index.d.ts +7 -0
  165. package/dist/types/types/index.d.ts.map +1 -0
  166. package/dist/types/utils/index.d.ts +7 -0
  167. package/dist/types/utils/index.d.ts.map +1 -0
  168. package/dist/types/utils/output.d.ts +29 -0
  169. package/dist/types/utils/output.d.ts.map +1 -0
  170. package/dist/types/utils/stackTrace.d.ts +6 -0
  171. package/dist/types/utils/stackTrace.d.ts.map +1 -0
  172. package/dist/types/utils/timestamps.d.ts +20 -0
  173. package/dist/types/utils/timestamps.d.ts.map +1 -0
  174. package/dist/utils/index.d.ts +7 -0
  175. package/dist/utils/index.d.ts.map +1 -0
  176. package/dist/utils/index.js +6 -0
  177. package/dist/utils/output.d.ts +32 -0
  178. package/dist/utils/output.d.ts.map +1 -0
  179. package/dist/utils/output.js +97 -0
  180. package/dist/utils/stackTrace.d.ts +9 -0
  181. package/dist/utils/stackTrace.d.ts.map +1 -0
  182. package/dist/utils/stackTrace.js +81 -0
  183. package/dist/utils/timestamps.d.ts +20 -0
  184. package/dist/utils/timestamps.d.ts.map +1 -0
  185. package/dist/utils/timestamps.js +71 -0
  186. package/docs/API.md +607 -0
  187. package/docs/DEVELOPMENT.md +731 -0
  188. package/docs/_config.yml +36 -0
  189. package/docs/index.md +179 -0
  190. package/examples/README.md +208 -0
  191. package/examples/basic-logging.js +75 -0
  192. package/examples/data-export.js +234 -0
  193. package/examples/package.json +16 -0
  194. package/examples/performance-timing.js +170 -0
  195. package/examples/styling-themes.js +207 -0
  196. package/package.json +24 -21
  197. package/packages/core/package.json +35 -0
  198. package/packages/exports/package.json +41 -0
  199. package/packages/styling/package.json +41 -0
  200. package/project-utils/README.md +172 -0
  201. package/project-utils/auto-release-gemini.ts +1193 -0
  202. package/project-utils/commit-generator.ts +1000 -0
  203. package/project-utils/commit-ui.ts +246 -0
  204. package/project-utils/git-utils.ts +199 -0
  205. package/project-utils/github-release-manager.ts +466 -0
  206. package/project-utils/prompt-templates.js +345 -0
  207. package/project-utils/prompt-templates.ts +422 -0
  208. package/project-utils/version-manager.ts +1078 -0
  209. package/src/Logger.ts +2 -1
  210. package/src/handlers/ExportLogHandler.ts +141 -0
  211. package/vite.config.ts +152 -50
  212. package/.claude/settings.local.json +0 -22
  213. package/.npmrc.bak +0 -1
  214. package/dist/chunks/Logger-BQhMKy_T.js +0 -2
  215. package/dist/chunks/Logger-BQhMKy_T.js.map +0 -1
  216. package/dist/chunks/Logger-BrFKFZcD.js.map +0 -1
  217. package/dist/chunks/core-2opW4Pi3.js +0 -194
  218. package/dist/chunks/core-2opW4Pi3.js.map +0 -1
  219. package/dist/chunks/core-DyugwSYZ.js +0 -4
  220. package/dist/chunks/core-DyugwSYZ.js.map +0 -1
  221. package/dist/chunks/exports-BNP3R7dp.js +0 -421
  222. package/dist/chunks/exports-BNP3R7dp.js.map +0 -1
  223. package/dist/chunks/exports-U1xLBXrY.js +0 -2
  224. package/dist/chunks/exports-U1xLBXrY.js.map +0 -1
  225. package/dist/chunks/styling-DhUDzwlE.js +0 -654
  226. package/dist/chunks/styling-DhUDzwlE.js.map +0 -1
  227. package/dist/chunks/styling-tmRDI28D.js +0 -2
  228. package/dist/chunks/styling-tmRDI28D.js.map +0 -1
  229. package/dist/types/exports.d.ts +0 -600
  230. package/dist/types/styling.d.ts +0 -751
  231. /package/.github/{workflows → workflows-backup}/release.yml +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger-CbCUS5pQ.js","sources":["../../src/styling/themes.ts","../../src/styling/banners.ts","../../src/utils/output.ts","../../src/handlers/ExportLogHandler.ts","../../src/cli/CommandProcessor.ts","../../src/cli/commands/ConfigCommand.ts","../../src/cli/commands/ThemeCommand.ts","../../src/cli/commands/StatusCommand.ts","../../src/cli/commands/ExportCommand.ts","../../src/cli/help.ts","../../src/cli/index.ts","../../src/Logger.ts"],"sourcesContent":["/**\n * @fileoverview Theme presets for Advanced Logger\n */\n\nimport type { ThemeVariant } from '../types/index.js';\nimport type { LevelStyleConfig } from '../utils/index.js';\n\n/**\n * Theme configurations for different visual styles\n */\nexport const THEME_PRESETS: Record<ThemeVariant, Record<string, LevelStyleConfig>> = {\n default: {\n debug: {\n emoji: '🐞', label: 'DEBUG',\n background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',\n color: '#ffffff', border: '1px solid #667eea',\n shadow: '0 2px 4px rgba(102, 126, 234, 0.3)',\n },\n info: {\n emoji: 'ℹ️', label: 'INFO',\n background: 'linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)',\n color: '#ffffff', border: '1px solid #74b9ff',\n shadow: '0 2px 4px rgba(116, 185, 255, 0.3)',\n },\n warn: {\n emoji: '⚠️', label: 'WARN',\n background: 'linear-gradient(135deg, #fdcb6e 0%, #e17055 100%)',\n color: '#2d3436', border: '1px solid #fdcb6e',\n shadow: '0 2px 4px rgba(253, 203, 110, 0.3)',\n },\n error: {\n emoji: '❌', label: 'ERROR',\n background: 'linear-gradient(135deg, #e84393 0%, #d63031 100%)',\n color: '#ffffff', border: '1px solid #e84393',\n shadow: '0 2px 4px rgba(232, 67, 147, 0.3)',\n },\n success: {\n emoji: '✅', label: 'SUCCESS',\n background: 'linear-gradient(135deg, #00b894 0%, #00a085 100%)',\n color: '#ffffff', border: '1px solid #00b894',\n shadow: '0 2px 4px rgba(0, 184, 148, 0.3)',\n },\n critical: {\n emoji: '🔥', label: 'CRITICAL',\n background: 'linear-gradient(135deg, #ff3838 0%, #ff1744 100%)',\n color: '#ffffff', border: '2px solid #ff3838',\n shadow: '0 4px 8px rgba(255, 56, 56, 0.5)',\n },\n },\n dark: {\n debug: {\n emoji: '🌙', label: 'DEBUG',\n background: 'linear-gradient(135deg, #2d3748 0%, #4a5568 100%)',\n color: '#e2e8f0', border: '1px solid #4a5568',\n shadow: '0 2px 4px rgba(45, 55, 72, 0.8)',\n },\n info: {\n emoji: '💡', label: 'INFO',\n background: 'linear-gradient(135deg, #1a202c 0%, #2d3748 100%)',\n color: '#90cdf4', border: '1px solid #3182ce',\n shadow: '0 2px 4px rgba(26, 32, 44, 0.8)',\n },\n warn: {\n emoji: '⚡', label: 'WARN',\n background: 'linear-gradient(135deg, #744210 0%, #975a16 100%)',\n color: '#faf089', border: '1px solid #d69e2e',\n shadow: '0 2px 4px rgba(116, 66, 16, 0.8)',\n },\n error: {\n emoji: '💀', label: 'ERROR',\n background: 'linear-gradient(135deg, #742a2a 0%, #9b2c2c 100%)',\n color: '#feb2b2', border: '1px solid #e53e3e',\n shadow: '0 2px 4px rgba(116, 42, 42, 0.8)',\n },\n success: {\n emoji: '🎯', label: 'SUCCESS',\n background: 'linear-gradient(135deg, #276749 0%, #2f855a 100%)',\n color: '#9ae6b4', border: '1px solid #38a169',\n shadow: '0 2px 4px rgba(39, 103, 73, 0.8)',\n },\n critical: {\n emoji: '💥', label: 'CRITICAL',\n background: 'linear-gradient(135deg, #1a1a1a 0%, #ff0000 100%)',\n color: '#ffffff', border: '2px solid #ff0000',\n shadow: '0 4px 8px rgba(255, 0, 0, 0.9)',\n },\n },\n neon: {\n debug: {\n emoji: '⚡', label: 'DEBUG',\n background: 'linear-gradient(135deg, #0f3460 0%, #e94560 100%)',\n color: '#00ffff', border: '1px solid #00ffff',\n shadow: '0 0 10px rgba(0, 255, 255, 0.5)',\n },\n info: {\n emoji: '🔮', label: 'INFO',\n background: 'linear-gradient(135deg, #16213e 0%, #0f3460 100%)',\n color: '#00ff41', border: '1px solid #00ff41',\n shadow: '0 0 10px rgba(0, 255, 65, 0.5)',\n },\n warn: {\n emoji: '⚠️', label: 'WARN',\n background: 'linear-gradient(135deg, #533a03 0%, #e94560 100%)',\n color: '#ffff00', border: '1px solid #ffff00',\n shadow: '0 0 10px rgba(255, 255, 0, 0.5)',\n },\n error: {\n emoji: '💥', label: 'ERROR',\n background: 'linear-gradient(135deg, #5c0a0a 0%, #ff073a 100%)',\n color: '#ff073a', border: '1px solid #ff073a',\n shadow: '0 0 10px rgba(255, 7, 58, 0.8)',\n },\n success: {\n emoji: '✨', label: 'SUCCESS',\n background: 'linear-gradient(135deg, #0a5c0a 0%, #39ff14 100%)',\n color: '#39ff14', border: '1px solid #39ff14',\n shadow: '0 0 10px rgba(57, 255, 20, 0.8)',\n },\n critical: {\n emoji: '🌟', label: 'CRITICAL',\n background: 'linear-gradient(135deg, #000000 0%, #ff0080 100%)',\n color: '#ff0080', border: '2px solid #ff0080',\n shadow: '0 0 20px rgba(255, 0, 128, 1)',\n },\n },\n minimal: {\n debug: {\n emoji: '', label: 'DEBUG',\n background: '#f7fafc', color: '#4a5568',\n border: '1px solid #e2e8f0', shadow: 'none',\n },\n info: {\n emoji: '', label: 'INFO',\n background: '#ebf8ff', color: '#2b6cb0',\n border: '1px solid #bee3f8', shadow: 'none',\n },\n warn: {\n emoji: '', label: 'WARN',\n background: '#fffbf0', color: '#c05621',\n border: '1px solid #fed7aa', shadow: 'none',\n },\n error: {\n emoji: '', label: 'ERROR',\n background: '#fef5f5', color: '#c53030',\n border: '1px solid #fca5a5', shadow: 'none',\n },\n success: {\n emoji: '', label: 'SUCCESS',\n background: '#f0fff4', color: '#2f855a',\n border: '1px solid #9ae6b4', shadow: 'none',\n },\n critical: {\n emoji: '', label: 'CRITICAL',\n background: '#fef5f5', color: '#e53e3e',\n border: '2px solid #f56565', shadow: 'none',\n },\n },\n // Additional theme variants can be added here\n light: {\n debug: {\n emoji: '🔍', label: 'DEBUG',\n background: 'linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%)',\n color: '#1565c0', border: '1px solid #90caf9',\n shadow: '0 1px 3px rgba(33, 150, 243, 0.2)',\n },\n info: {\n emoji: 'ℹ️', label: 'INFO',\n background: 'linear-gradient(135deg, #f3e5f5 0%, #e1bee7 100%)',\n color: '#7b1fa2', border: '1px solid #ce93d8',\n shadow: '0 1px 3px rgba(156, 39, 176, 0.2)',\n },\n warn: {\n emoji: '⚠️', label: 'WARN',\n background: 'linear-gradient(135deg, #fff8e1 0%, #ffecb3 100%)',\n color: '#f57c00', border: '1px solid #ffcc02',\n shadow: '0 1px 3px rgba(255, 152, 0, 0.2)',\n },\n error: {\n emoji: '❌', label: 'ERROR',\n background: 'linear-gradient(135deg, #ffebee 0%, #ffcdd2 100%)',\n color: '#d32f2f', border: '1px solid #f44336',\n shadow: '0 1px 3px rgba(244, 67, 54, 0.2)',\n },\n success: {\n emoji: '✅', label: 'SUCCESS',\n background: 'linear-gradient(135deg, #e8f5e8 0%, #c8e6c9 100%)',\n color: '#388e3c', border: '1px solid #4caf50',\n shadow: '0 1px 3px rgba(76, 175, 80, 0.2)',\n },\n critical: {\n emoji: '🚨', label: 'CRITICAL',\n background: 'linear-gradient(135deg, #fce4ec 0%, #f8bbd9 100%)',\n color: '#c2185b', border: '2px solid #e91e63',\n shadow: '0 2px 6px rgba(233, 30, 99, 0.3)',\n },\n },\n cyberpunk: {\n debug: {\n emoji: '🤖', label: 'DEBUG',\n background: 'linear-gradient(135deg, #0d1b2a 0%, #415a77 100%)',\n color: '#00d4aa', border: '1px solid #00d4aa',\n shadow: '0 0 15px rgba(0, 212, 170, 0.4)',\n },\n info: {\n emoji: '🔗', label: 'INFO',\n background: 'linear-gradient(135deg, #1b263b 0%, #0d1b2a 100%)',\n color: '#00b4d8', border: '1px solid #00b4d8',\n shadow: '0 0 15px rgba(0, 180, 216, 0.4)',\n },\n warn: {\n emoji: '⚡', label: 'WARN',\n background: 'linear-gradient(135deg, #f72585 0%, #b5179e 100%)',\n color: '#ffff3f', border: '1px solid #ffff3f',\n shadow: '0 0 15px rgba(255, 255, 63, 0.4)',\n },\n error: {\n emoji: '💀', label: 'ERROR',\n background: 'linear-gradient(135deg, #7209b7 0%, #480ca8 100%)',\n color: '#ff006e', border: '1px solid #ff006e',\n shadow: '0 0 15px rgba(255, 0, 110, 0.6)',\n },\n success: {\n emoji: '⚡', label: 'SUCCESS',\n background: 'linear-gradient(135deg, #003566 0%, #001d3d 100%)',\n color: '#00f5ff', border: '1px solid #00f5ff',\n shadow: '0 0 15px rgba(0, 245, 255, 0.4)',\n },\n critical: {\n emoji: '💥', label: 'CRITICAL',\n background: 'linear-gradient(135deg, #000000 0%, #ff0040 100%)',\n color: '#ff0040', border: '2px solid #ff0040',\n shadow: '0 0 25px rgba(255, 0, 64, 0.8)',\n },\n },\n};","/**\n * @fileoverview Banner configurations for Advanced Logger\n */\n\nimport type { BannerType, ThemeVariant } from '../types/index.js';\n\n/**\n * Banner variants for different display capabilities\n */\nexport const BANNER_VARIANTS = {\n simple: {\n text: '🚀 ADVANCED LOGGER v2.0.0 - State-of-the-art Console Styling 🚀',\n style: 'background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 12px 20px; border-radius: 8px; font-weight: bold; font-size: 14px;'\n },\n ascii: {\n text: `\n ___ ____ _ __ ___ _ __ _____ _____ ____ __ ___ _____ _____ _____ ____ \n / _ \\\\ / __ \\\\| | / / / _ \\\\ | \\\\ | |/ ____| ____| _ \\\\ | | / _ \\\\ / ____| ___| _ | _ \\\\ \n / /_\\\\ \\\\ / / _\\` | |/ / / /_\\\\ \\\\ | \\\\| | | | |__ | | | | | | / / \\\\ \\\\| | __| |_ | |_| | |_) |\n | _ || | (_| | < | _ | | . \\` | | | __| | | | | | | | | | | | |_ | _| | /| _ < \n | | | |\\\\ \\\\__,_|_|\\\\_\\\\ | | | | | |\\\\ | |___| |____| |_| | | |__\\\\ \\\\_/ /| |__| | |___| |\\\\ \\\\| |_) |\n \\\\_| |_/ \\\\____/ \\\\_| |_/ |_| \\\\_|\\\\_____|______|____/ |_____/\\\\___/ \\\\_____|_____|_| \\\\_|____/\n\n Advanced Logger v2.0.0 - Console Excellence`,\n style: 'font-family: \"Courier New\", Consolas, Monaco, monospace; color: #667eea; font-size: 11px; line-height: 1.2;'\n },\n unicode: {\n text: `\n╔══════════════════════════════════════════════════════════════════════════╗\n║ 🚀 ADVANCED LOGGER v2.0.0 ║\n║ State-of-the-art Console Styling ║ \n╚══════════════════════════════════════════════════════════════════════════╝`,\n style: 'font-family: \"Courier New\", Consolas, Monaco, monospace; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px; border-radius: 8px; font-size: 12px; line-height: 1.3;'\n },\n svg: {\n text: ' ',\n style: `\n background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 80'><defs><linearGradient id='grad' x1='0%' y1='0%' x2='100%' y2='0%'><stop offset='0%' style='stop-color:%23667eea'/><stop offset='100%' style='stop-color:%23764ba2'/></linearGradient></defs><rect width='100%' height='100%' fill='url(%23grad)' rx='8'/><text x='200' y='30' text-anchor='middle' fill='white' font-family='monospace' font-size='14' font-weight='bold'>🚀 ADVANCED LOGGER</text><text x='200' y='50' text-anchor='middle' fill='white' font-family='monospace' font-size='12'>State-of-the-art Console Styling</text><text x='200' y='65' text-anchor='middle' fill='white' font-family='monospace' font-size='10'>v2.0.0</text></svg>\");\n background-repeat: no-repeat;\n background-size: 400px 80px;\n padding: 40px 200px;\n color: transparent;\n display: inline-block;\n border-radius: 8px;\n `\n },\n animated: {\n text: ' 🚀 ADVANCED LOGGER v2.0.0 ',\n style: `\n background: linear-gradient(-45deg, #667eea, #764ba2, #667eea, #764ba2);\n background-size: 400% 400%;\n color: white;\n padding: 15px 25px;\n border-radius: 10px;\n font-weight: bold;\n font-size: 14px;\n font-family: monospace;\n animation: gradientShift 3s ease infinite;\n display: inline-block;\n `\n }\n};\n\n/**\n * Theme-specific banners for enhanced visual theming\n */\nexport const THEME_BANNERS: Record<ThemeVariant, { simple: string; style: string }> = {\n default: {\n simple: '🚀 ADVANCED LOGGER v2.0.0 - State-of-the-art Console Styling 🚀',\n style: 'background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 12px 20px; border-radius: 8px; font-weight: bold;'\n },\n dark: {\n simple: '🌙 ADVANCED LOGGER v2.0.0 - Dark Mode Console Excellence 🌙',\n style: 'background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%); color: #e2e8f0; padding: 12px 20px; border-radius: 8px; font-weight: bold; border: 1px solid #4a5568;'\n },\n neon: {\n simple: '⚡ ADVANCED LOGGER v2.0.0 - Cyberpunk Console Experience ⚡',\n style: 'background: linear-gradient(135deg, #0f3460 0%, #e94560 100%); color: #00ffff; padding: 12px 20px; border-radius: 8px; font-weight: bold; text-shadow: 0 0 10px #00ffff;'\n },\n minimal: {\n simple: 'ADVANCED LOGGER v2.0.0 - Clean Console Styling',\n style: 'background: #f7fafc; color: #2d3748; padding: 8px 16px; border: 1px solid #e2e8f0; border-radius: 4px; font-weight: 500;'\n },\n light: {\n simple: '☀️ ADVANCED LOGGER v2.0.0 - Bright Console Styling ☀️',\n style: 'background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); color: #495057; padding: 12px 20px; border-radius: 8px; font-weight: bold; border: 1px solid #dee2e6;'\n },\n cyberpunk: {\n simple: '🤖 ADVANCED LOGGER v2.0.0 - Neural Console Interface 🤖',\n style: 'background: linear-gradient(135deg, #0d1b2a 0%, #415a77 100%); color: #00d4aa; padding: 12px 20px; border-radius: 8px; font-weight: bold; text-shadow: 0 0 10px #00d4aa; border: 1px solid #00d4aa;'\n }\n};\n\n/**\n * Feature detection for banner capabilities\n */\nexport function detectBannerCapabilities(): BannerType {\n // Try to detect browser capabilities\n const userAgent = navigator.userAgent;\n const isChrome = /Chrome/.test(userAgent);\n const isFirefox = /Firefox/.test(userAgent);\n const isSafari = /Safari/.test(userAgent) && !/Chrome/.test(userAgent);\n \n // Check for SVG support (most modern browsers)\n const supportsSVG = !!document.createElementNS && \n !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect;\n \n // Check for CSS animation support\n const supportsAnimations = typeof document !== 'undefined' && \n 'animationName' in document.createElement('div').style;\n \n // Progressive enhancement\n if (supportsAnimations && isChrome) {\n return 'animated';\n } else if (supportsSVG && (isChrome || isFirefox)) {\n return 'svg';\n } else if (isChrome || isFirefox) {\n return 'unicode';\n } else if (isSafari) {\n return 'ascii';\n }\n \n return 'simple';\n}\n\n/**\n * Display initialization banner with advanced styling\n */\nexport function displayInitBanner(bannerType?: BannerType): void {\n const selectedType = bannerType || detectBannerCapabilities();\n const banner = BANNER_VARIANTS[selectedType];\n \n // Add CSS animation keyframes if needed\n if (selectedType === 'animated') {\n const style = document.createElement('style');\n style.textContent = `\n @keyframes gradientShift {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n `;\n document.head.appendChild(style);\n }\n \n console.log(`%c${banner.text}`, banner.style);\n\n // Show feature highlights\n const features = [\n '🎨 Advanced CSS Console Styling',\n '📍 Automatic Stack Trace Parsing',\n '🔧 Scoped Loggers & Prefixes',\n '⚡ Performance Timers',\n '🎯 Verbosity Filtering',\n '🔌 Extensible Handlers',\n '📱 Modern TypeScript Patterns',\n '📤 Export & Clipboard Support'\n ];\n\n console.group(`%c✨ Features`, 'background: #f8f9fa; color: #495057; padding: 4px 8px; border-radius: 4px; font-weight: bold;');\n\n features.forEach(feature => {\n console.log(`%c${feature}`, 'color: #6c757d; font-size: 13px;');\n });\n\n console.groupEnd();\n console.log(''); // Add spacing\n}","/**\n * @fileoverview Styled output creation utilities for Advanced Logger\n */\n\nimport type { LogLevel, StackInfo } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\nimport { StyleBuilder } from '../styling/index.js';\n\n/**\n * Style configuration for each log level\n */\nexport interface LevelStyleConfig {\n emoji: string;\n label: string;\n background: string;\n color: string;\n border: string;\n shadow: string;\n}\n\n\n/**\n * Creates styled console output with multiple %c formatters\n */\nexport function createStyledOutput(\n level: LogLevel,\n levelStyles: Record<LogLevel | 'success', LevelStyleConfig>,\n prefix: string | undefined,\n message: string,\n stackInfo: StackInfo | null\n): [string, ...string[]] {\n const levelConfig = levelStyles[level];\n const timestamp = formatTimestamp();\n\n // Base styles\n const timestampStyle = new StyleBuilder()\n .color('#666')\n .size('11px')\n .font('Monaco, Consolas, monospace')\n .build();\n\n const levelStyle = new StyleBuilder()\n .bg(levelConfig.background)\n .color(levelConfig.color)\n .border(levelConfig.border)\n .shadow(levelConfig.shadow)\n .padding('2px 8px')\n .rounded('4px')\n .bold()\n .font('Monaco, Consolas, monospace')\n .size('12px')\n .build();\n\n const prefixStyle = new StyleBuilder()\n .bg('#2d3748')\n .color('#e2e8f0')\n .padding('2px 6px')\n .rounded('3px')\n .bold()\n .font('Monaco, Consolas, monospace')\n .size('11px')\n .build();\n\n const messageStyle = new StyleBuilder()\n .color('#2d3748')\n .font('system-ui, -apple-system, sans-serif')\n .size('14px')\n .build();\n\n const locationStyle = new StyleBuilder()\n .color('#718096')\n .size('11px')\n .font('Monaco, Consolas, monospace')\n .build();\n\n // Build format string and styles\n let format = `%c${timestamp.slice(11, 23)} %c${levelConfig.emoji} ${levelConfig.label}`;\n const styles = [timestampStyle, levelStyle];\n\n if (prefix) {\n format += ` %c${prefix}`;\n styles.push(prefixStyle);\n }\n\n format += ` %c${message}`;\n styles.push(messageStyle);\n\n if (stackInfo) {\n format += ` %c(${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n styles.push(locationStyle);\n }\n\n return [format, ...styles];\n}\n\n/**\n * Create a unique ID for log entries\n */\nexport function generateLogId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Escape HTML entities for safe HTML output\n */\nexport function escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n}\n\n/**\n * Convert objects to safe string representation for logging\n */\nexport function safeStringify(obj: any, _maxDepth = 3): string {\n try {\n return JSON.stringify(obj, (_key, value) => {\n if (typeof value === 'function') return '[Function]';\n if (value instanceof Error) return `[Error: ${value.message}]`;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'undefined') return '[undefined]';\n return value;\n }, 2);\n } catch (error) {\n return String(obj);\n }\n}","/**\n * @fileoverview Export and clipboard log handler for Advanced Logger\n */\n\nimport type { \n ILogHandler, \n LogLevel, \n LogMetadata, \n LogEntry, \n ExportFilters, \n ExportOptions, \n ExportResult, \n BufferStats,\n ExportFormat\n} from '../types/index.js';\nimport { parseTimeInput, formatDisplayTime, safeStringify, escapeHtml, generateLogId } from '../utils/index.js';\nimport { BUFFER_LIMITS } from '../constants.js';\n\n/**\n * Export log handler with circular buffer and multiple export formats\n */\nexport class ExportLogHandler implements ILogHandler {\n private buffer: LogEntry[] = [];\n private maxSize: number;\n private groupDepth: number = 0;\n private currentGroup?: string;\n\n constructor(maxSize: number = BUFFER_LIMITS.DEFAULT_SIZE) {\n this.maxSize = Math.min(Math.max(maxSize, BUFFER_LIMITS.MIN_SIZE), BUFFER_LIMITS.MAX_SIZE);\n }\n\n /**\n * Handle incoming log and store in buffer\n */\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const entry: LogEntry = {\n id: generateLogId(),\n timestamp: metadata.timestamp,\n level,\n prefix: metadata.prefix,\n message,\n args,\n location: metadata.stackInfo,\n groupInfo: this.groupDepth > 0 ? {\n depth: this.groupDepth,\n groupName: this.currentGroup\n } : undefined\n };\n\n // Add to circular buffer\n this.buffer.push(entry);\n if (this.buffer.length > this.maxSize) {\n this.buffer.shift(); // Remove oldest entry\n }\n }\n\n /**\n * Set group tracking for nested logs\n */\n setGroupInfo(depth: number, groupName?: string): void {\n this.groupDepth = depth;\n this.currentGroup = groupName;\n }\n\n /**\n * Get buffer statistics\n */\n getBufferStats(): BufferStats {\n const levelCounts = this.buffer.reduce((acc, entry) => {\n const currentCount = acc[entry.level] ? acc[entry.level] : 0;\n acc[entry.level] = currentCount + 1;\n return acc;\n }, {} as Record<LogLevel, number>);\n\n let oldestLog: Date | undefined;\n let newestLog: Date | undefined;\n \n if (this.buffer.length > 0) {\n const firstEntry = this.buffer[0];\n const lastEntry = this.buffer[this.buffer.length - 1];\n \n if (firstEntry && firstEntry.timestamp) {\n oldestLog = new Date(firstEntry.timestamp);\n }\n \n if (lastEntry && lastEntry.timestamp) {\n newestLog = new Date(lastEntry.timestamp);\n }\n }\n\n return {\n size: this.buffer.length,\n maxSize: this.maxSize,\n usage: (this.buffer.length / this.maxSize) * 100,\n oldestLog,\n newestLog,\n levelCounts: {\n debug: levelCounts.debug ? levelCounts.debug : 0,\n info: levelCounts.info ? levelCounts.info : 0,\n warn: levelCounts.warn ? levelCounts.warn : 0,\n error: levelCounts.error ? levelCounts.error : 0,\n critical: levelCounts.critical ? levelCounts.critical : 0\n }\n };\n }\n\n /**\n * Clear the buffer\n */\n clearBuffer(): void {\n this.buffer = [];\n }\n\n /**\n * Set buffer size (with limits)\n */\n setBufferSize(size: number): void {\n this.maxSize = Math.min(Math.max(size, BUFFER_LIMITS.MIN_SIZE), BUFFER_LIMITS.MAX_SIZE);\n \n // Trim buffer if new size is smaller\n if (this.buffer.length > this.maxSize) {\n this.buffer = this.buffer.slice(-this.maxSize);\n }\n }\n\n /**\n * Filter logs based on criteria\n */\n private filterLogs(filters: ExportFilters = {}): LogEntry[] {\n let filtered = [...this.buffer];\n\n // Filter by levels\n if (filters.levels?.length) {\n filtered = filtered.filter(entry => filters.levels!.includes(entry.level));\n }\n\n // Filter by prefixes\n if (filters.prefixes?.length) {\n filtered = filtered.filter(entry => \n entry.prefix && filters.prefixes!.includes(entry.prefix)\n );\n }\n\n // Exclude prefixes\n if (filters.excludePrefixes?.length) {\n filtered = filtered.filter(entry => \n !entry.prefix || !filters.excludePrefixes!.includes(entry.prefix)\n );\n }\n\n // Filter by time range\n if (filters.since) {\n const sinceDate = parseTimeInput(filters.since);\n filtered = filtered.filter(entry => new Date(entry.timestamp) >= sinceDate);\n }\n\n if (filters.until) {\n const untilDate = parseTimeInput(filters.until);\n filtered = filtered.filter(entry => new Date(entry.timestamp) <= untilDate);\n }\n\n // Filter by stack trace presence\n if (filters.withStackTrace) {\n filtered = filtered.filter(entry => entry.location);\n }\n\n // Filter errors only\n if (filters.errorsOnly) {\n filtered = filtered.filter(entry => entry.level === 'error' || entry.level === 'critical');\n }\n\n // Search in messages\n if (filters.search) {\n const searchTerm = filters.search.toLowerCase();\n filtered = filtered.filter(entry => \n entry.message.toLowerCase().includes(searchTerm) ||\n entry.args.some(arg => \n String(arg).toLowerCase().includes(searchTerm)\n )\n );\n }\n\n // Limit results\n if (filters.last) {\n filtered = filtered.slice(-filters.last);\n }\n\n if (filters.first) {\n filtered = filtered.slice(0, filters.first);\n }\n\n return filtered;\n }\n\n /**\n * Export logs in JSON format\n */\n private exportJSON(logs: LogEntry[], options: ExportOptions): string {\n const data = logs.map(entry => ({\n timestamp: entry.timestamp,\n level: entry.level,\n prefix: entry.prefix,\n message: entry.message,\n ...(options.minimal ? {} : {\n args: entry.args.slice(1),\n location: entry.location,\n groupInfo: entry.groupInfo\n })\n }));\n\n return options.compact \n ? JSON.stringify(data)\n : JSON.stringify(data, null, 2);\n }\n\n /**\n * Export logs in CSV format\n */\n private exportCSV(logs: LogEntry[], options: ExportOptions): string {\n const headers = options.minimal \n ? ['Timestamp', 'Level', 'Prefix', 'Message']\n : ['Timestamp', 'Level', 'Prefix', 'Message', 'File', 'Line', 'Args'];\n\n const rows = logs.map(entry => {\n const baseRow = [\n formatDisplayTime(new Date(entry.timestamp), 'full'),\n entry.level.toUpperCase(),\n entry.prefix || '',\n `\"${entry.message.replace(/\"/g, '\"\"')}\"`\n ];\n\n if (!options.minimal) {\n baseRow.push(\n entry.location?.file || '',\n entry.location?.line?.toString() || '',\n `\"${safeStringify(entry.args.slice(1)).replace(/\"/g, '\"\"')}\"`\n );\n }\n\n return baseRow;\n });\n\n return [headers.join(','), ...rows.map(row => row.join(','))].join('\\n');\n }\n\n /**\n * Export logs in Markdown format\n */\n private exportMarkdown(logs: LogEntry[], options: ExportOptions): string {\n const now = new Date();\n let content = `# Log Export - ${formatDisplayTime(now, 'full')}\\n\\n`;\n\n // Add summary if not minimal\n if (!options.minimal) {\n const summary = this.getBufferStats();\n content += `## Summary\\n`;\n content += `- **Total logs**: ${logs.length}\\n`;\n content += `- **Errors**: ${summary.levelCounts.error + summary.levelCounts.critical}\\n`;\n content += `- **Warnings**: ${summary.levelCounts.warn}\\n\\n`;\n }\n\n // Group by level if specified\n if (options.groupBy === 'level') {\n const grouped = logs.reduce((acc, entry) => {\n const level = entry.level;\n if (!acc[level]) {\n acc[level] = [];\n }\n // We just ensured the array exists above\n const levelArray = acc[level];\n if (levelArray) {\n levelArray.push(entry);\n }\n return acc;\n }, {} as Record<string, LogEntry[]>);\n\n Object.entries(grouped).forEach(([level, entries]) => {\n const emoji = this.getLevelEmoji(level as LogLevel);\n content += `## ${emoji} ${level.toUpperCase()} (${entries.length})\\n\\n`;\n \n entries.forEach(entry => {\n const time = formatDisplayTime(new Date(entry.timestamp), 'time-only');\n const location = entry.location ? ` (${entry.location.file}:${entry.location.line})` : '';\n const prefix = entry.prefix ? ` **${entry.prefix}**:` : '';\n content += `- \\`${time}\\`${prefix} ${entry.message}${location}\\n`;\n });\n content += '\\n';\n });\n } else {\n content += '## Logs\\n\\n';\n logs.forEach(entry => {\n const time = formatDisplayTime(new Date(entry.timestamp), 'time-only');\n const emoji = this.getLevelEmoji(entry.level);\n const location = entry.location ? ` (${entry.location.file}:${entry.location.line})` : '';\n const prefix = entry.prefix ? ` **${entry.prefix}**:` : '';\n content += `- \\`${time}\\` ${emoji}${prefix} ${entry.message}${location}\\n`;\n });\n }\n\n return content;\n }\n\n /**\n * Export logs in plain text format\n */\n private exportPlain(logs: LogEntry[], options: ExportOptions): string {\n return logs.map(entry => {\n const time = formatDisplayTime(new Date(entry.timestamp), options.minimal ? 'time-only' : 'short');\n const level = entry.level.toUpperCase().padEnd(8);\n const prefix = entry.prefix ? `[${entry.prefix}] ` : '';\n const location = (!options.minimal && entry.location) ? ` (${entry.location.file}:${entry.location.line})` : '';\n \n return `${time} ${level} ${prefix}${entry.message}${location}`;\n }).join('\\n');\n }\n\n /**\n * Export logs in HTML format\n */\n private exportHTML(logs: LogEntry[], _options: ExportOptions): string {\n const title = `Log Export - ${formatDisplayTime(new Date(), 'full')}`;\n \n let html = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>${title}</title>\n <style>\n body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 20px; line-height: 1.6; }\n .header { border-bottom: 2px solid #ddd; padding-bottom: 20px; margin-bottom: 20px; }\n .log-entry { margin: 5px 0; padding: 8px; border-radius: 4px; font-family: 'Monaco', 'Consolas', monospace; }\n .timestamp { color: #666; font-size: 0.9em; }\n .level { font-weight: bold; padding: 2px 6px; border-radius: 3px; margin: 0 8px; }\n .prefix { background: #2d3748; color: #e2e8f0; padding: 2px 6px; border-radius: 3px; margin: 0 8px; }\n .location { color: #718096; font-size: 0.9em; }\n .debug { background: #f0f4ff; }\n .info { background: #f0f9ff; }\n .warn { background: #fffbeb; }\n .error { background: #fef2f2; }\n .critical { background: #fef2f2; border-left: 4px solid #dc2626; }\n .level.debug { background: #667eea; color: white; }\n .level.info { background: #74b9ff; color: white; }\n .level.warn { background: #fdcb6e; color: #2d3436; }\n .level.error { background: #e84393; color: white; }\n .level.critical { background: #ff3838; color: white; }\n </style>\n</head>\n<body>\n <div class=\"header\">\n <h1>${title}</h1>\n <p>Generated by Advanced Logger v2.0.0</p>\n </div>\n <div class=\"logs\">`;\n\n logs.forEach(entry => {\n const time = formatDisplayTime(new Date(entry.timestamp), 'full');\n const location = entry.location ? ` <span class=\"location\">(${escapeHtml(entry.location.file)}:${entry.location.line})</span>` : '';\n const prefix = entry.prefix ? ` <span class=\"prefix\">${escapeHtml(entry.prefix)}</span>` : '';\n \n html += `\n <div class=\"log-entry ${entry.level}\">\n <span class=\"timestamp\">${time}</span>\n <span class=\"level ${entry.level}\">${entry.level.toUpperCase()}</span>\n ${prefix}\n <span class=\"message\">${escapeHtml(entry.message)}</span>\n ${location}\n </div>`;\n });\n\n html += `\n </div>\n</body>\n</html>`;\n\n return html;\n }\n\n /**\n * Get emoji for log level\n */\n private getLevelEmoji(level: LogLevel): string {\n const emojis = {\n debug: '🐞',\n info: 'ℹ️',\n warn: '⚠️',\n error: '❌',\n critical: '🔥'\n };\n return emojis[level] || '';\n }\n\n /**\n * Main export function\n */\n export(format: ExportFormat, filters: ExportFilters = {}, options: ExportOptions = {}): ExportResult {\n const filteredLogs = this.filterLogs(filters);\n \n let data: string;\n switch (format) {\n case 'json':\n data = this.exportJSON(filteredLogs, options);\n break;\n case 'csv':\n data = this.exportCSV(filteredLogs, options);\n break;\n case 'markdown':\n data = this.exportMarkdown(filteredLogs, options);\n break;\n case 'plain':\n data = this.exportPlain(filteredLogs, options);\n break;\n case 'html':\n data = this.exportHTML(filteredLogs, options);\n break;\n default:\n throw new Error(`Unsupported export format: ${format}`);\n }\n\n return {\n format,\n data,\n metadata: {\n totalLogs: this.buffer.length,\n filteredLogs: filteredLogs.length,\n exportedAt: new Date().toISOString(),\n filters,\n options\n }\n };\n }\n\n /**\n * Copy to clipboard with fallback\n */\n async copyToClipboard(format: ExportFormat, filters: ExportFilters = {}, options: ExportOptions = {}): Promise<boolean> {\n const result = this.export(format, filters, options);\n \n try {\n if (navigator.clipboard && window.isSecureContext) {\n await navigator.clipboard.writeText(result.data);\n return true;\n } else {\n // Fallback for non-secure contexts\n const textArea = document.createElement('textarea');\n textArea.value = result.data;\n textArea.style.position = 'fixed';\n textArea.style.opacity = '0';\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n const success = document.execCommand('copy');\n document.body.removeChild(textArea);\n return success;\n }\n } catch (error) {\n console.error('Failed to copy to clipboard:', error);\n return false;\n }\n }\n\n /**\n * Get all logs (for debugging)\n */\n getAllLogs(): LogEntry[] {\n return [...this.buffer];\n }\n\n /**\n * Save export to file with download prompt\n */\n async saveToFile(format: ExportFormat, filters: ExportFilters = {}, options: ExportOptions = {}): Promise<boolean> {\n try {\n const result = this.export(format, filters, options);\n const blob = new Blob([result.data], { \n type: this.getMimeType(format) \n });\n \n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n const filename = this.generateFilename(format, filters);\n \n a.href = url;\n a.download = filename;\n a.style.display = 'none';\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(url);\n \n return true;\n } catch (error) {\n console.error('Failed to save file:', error);\n return false;\n }\n }\n\n /**\n * Get MIME type for format\n */\n private getMimeType(format: ExportFormat): string {\n const mimeTypes = {\n json: 'application/json',\n csv: 'text/csv',\n markdown: 'text/markdown',\n plain: 'text/plain',\n html: 'text/html'\n };\n return mimeTypes[format] || 'text/plain';\n }\n\n /**\n * Generate filename with timestamp\n */\n private generateFilename(format: ExportFormat, filters: ExportFilters): string {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5);\n const prefix = filters.prefixes?.length === 1 ? `_${filters.prefixes[0]}` : '';\n const extension = format === 'markdown' ? 'md' : format;\n return `logs${prefix}_${timestamp}.${extension}`;\n }\n\n /**\n * Stream logs to external endpoint\n */\n async streamToEndpoint(endpoint: string, filters: ExportFilters = {}, options: { \n apiKey?: string; \n batchSize?: number; \n format?: ExportFormat \n } = {}): Promise<boolean> {\n try {\n const logs = this.filterLogs(filters);\n const batchSize = options.batchSize || 100;\n const format = options.format || 'json';\n \n // Send in batches\n for (let i = 0; i < logs.length; i += batchSize) {\n const batch = logs.slice(i, i + batchSize);\n const result = this.export(format, {}, { compact: true });\n \n const headers: Record<string, string> = {\n 'Content-Type': 'application/json'\n };\n \n if (options.apiKey) {\n headers['Authorization'] = `Bearer ${options.apiKey}`;\n }\n \n const response = await fetch(endpoint, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n logs: batch,\n metadata: {\n batchIndex: Math.floor(i / batchSize),\n totalBatches: Math.ceil(logs.length / batchSize),\n timestamp: new Date().toISOString()\n }\n })\n });\n \n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n }\n \n return true;\n } catch (error) {\n console.error('Failed to stream logs:', error);\n return false;\n }\n }\n\n /**\n * Create export with metadata enrichment\n */\n exportWithMetadata(format: ExportFormat, filters: ExportFilters = {}, options: ExportOptions = {}): ExportResult {\n const baseResult = this.export(format, filters, options);\n const bufferStats = this.getBufferStats();\n \n return {\n ...baseResult,\n metadata: {\n ...baseResult.metadata,\n bufferStats: bufferStats,\n performance: {\n memoryUsage: this.estimateMemoryUsage(),\n processingTime: Date.now()\n },\n system: {\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : 'Node.js',\n timestamp: new Date().toISOString(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone\n }\n } as any\n };\n }\n\n /**\n * Estimate memory usage of buffer\n */\n private estimateMemoryUsage(): number {\n const sampleEntry = this.buffer[0];\n if (!sampleEntry) return 0;\n \n // Rough estimation: JSON.stringify size * buffer length\n const sampleSize = JSON.stringify(sampleEntry).length;\n return sampleSize * this.buffer.length;\n }\n}","/**\n * @fileoverview CLI Command processor for Advanced Logger\n */\n\nimport type { Logger } from '../Logger.js';\n\n/**\n * Base interface for CLI commands\n */\nexport interface ICommand {\n name: string;\n description: string;\n usage: string;\n execute(args: string, logger: Logger): void | Promise<void>;\n}\n\n/**\n * CLI command processor\n */\nexport class CommandProcessor {\n private commands: Map<string, ICommand> = new Map();\n\n /**\n * Register a command\n */\n registerCommand(command: ICommand): void {\n this.commands.set(command.name, command);\n }\n\n /**\n * Get all registered commands\n */\n getCommands(): ICommand[] {\n return Array.from(this.commands.values());\n }\n\n /**\n * Get a specific command\n */\n getCommand(name: string): ICommand | undefined {\n return this.commands.get(name);\n }\n\n /**\n * Process a CLI command\n */\n async processCommand(commandString: string, logger: Logger): Promise<void> {\n if (!commandString.startsWith('/')) {\n logger.error('Invalid command. Commands must start with /');\n return;\n }\n\n const parts = commandString.slice(1).split(' ');\n const commandName = parts[0] || '';\n const args = parts.slice(1).join(' ');\n\n const command = this.commands.get(commandName);\n if (!command) {\n logger.error(`Unknown command: ${commandName}. Type /help for available commands.`);\n return;\n }\n\n try {\n await command.execute(args || '', logger);\n } catch (error) {\n logger.error(`Command '${commandName}' failed:`, error);\n }\n }\n\n /**\n * Get command suggestions for partial matches\n */\n getSuggestions(partial: string): string[] {\n const commandNames = Array.from(this.commands.keys());\n return commandNames.filter(name => name.startsWith(partial));\n }\n}","/**\n * @fileoverview Configuration commands for Advanced Logger CLI\n */\n\nimport type { ICommand } from '../CommandProcessor.js';\nimport type { Logger } from '../../Logger.js';\nimport type { ThemeVariant, BannerType, Verbosity } from '../../types/index.js';\n\n/**\n * Configuration command handler\n */\nexport class ConfigCommand implements ICommand {\n name = 'config';\n description = 'Show or update logger configuration';\n usage = '/config [json|key=value,...]';\n\n execute(args: string, logger: Logger): void {\n if (!args) {\n this.showStatus(logger);\n return;\n }\n\n try {\n // Try to parse as JSON first\n if (args.startsWith('{')) {\n const config = JSON.parse(args);\n this.applyConfig(config, logger);\n } else {\n // Parse key=value pairs\n const pairs = args.split(',').map(pair => pair.trim().split('='));\n const config: any = {};\n pairs.forEach(([key, value]) => {\n if (key && value) {\n config[key.trim()] = value.trim().replace(/[\"']/g, '');\n }\n });\n this.applyConfig(config, logger);\n }\n } catch (error) {\n logger.error('Invalid config format. Use JSON or key=value pairs:', error);\n logger.info('Examples: /config {\"theme\":\"dark\"} or /config theme=neon,verbosity=debug');\n }\n }\n\n private showStatus(logger: Logger): void {\n const statusData = {\n theme: logger.getConfig().theme || 'default',\n verbosity: logger.getConfig().verbosity,\n colors: logger.getConfig().enableColors,\n timestamps: logger.getConfig().enableTimestamps,\n stackTrace: logger.getConfig().enableStackTrace,\n globalPrefix: logger.getConfig().globalPrefix || 'none',\n bannerType: logger.getConfig().bannerType || 'simple',\n handlers: logger.getHandlers().length\n };\n\n logger.group('⚙️ Logger Configuration');\n logger.table(statusData);\n logger.groupEnd();\n }\n\n private applyConfig(config: any, logger: Logger): void {\n const validKeys = ['theme', 'verbosity', 'enableColors', 'enableTimestamps', 'enableStackTrace', 'globalPrefix', 'bannerType'];\n const applied: string[] = [];\n\n Object.entries(config).forEach(([key, value]) => {\n if (validKeys.includes(key)) {\n if (key === 'theme' && typeof value === 'string') {\n logger.setTheme(value as ThemeVariant);\n applied.push(`${key}=${value}`);\n } else if (key === 'bannerType' && typeof value === 'string') {\n logger.setBannerType(value as BannerType);\n applied.push(`${key}=${value}`);\n } else if (key === 'verbosity') {\n logger.setVerbosity(value as Verbosity);\n applied.push(`${key}=${value}`);\n } else if (key === 'globalPrefix') {\n logger.setGlobalPrefix(value as string);\n applied.push(`${key}=${value}`);\n } else {\n logger.updateConfig({ [key]: value });\n applied.push(`${key}=${value}`);\n }\n } else {\n logger.warn(`Invalid config key: ${key}`);\n }\n });\n\n if (applied.length > 0) {\n logger.success(`Configuration updated: ${applied.join(', ')}`);\n }\n }\n}","/**\n * @fileoverview Theme and banner commands for Advanced Logger CLI\n */\n\nimport type { ICommand } from '../CommandProcessor.js';\nimport type { Logger } from '../../Logger.js';\nimport type { BannerType } from '../../types/index.js';\nimport { THEME_PRESETS, BANNER_VARIANTS } from '../../styling/index.js';\nimport { StyleBuilder } from '../../styling/index.js';\n\n/**\n * Themes command - show available themes\n */\nexport class ThemesCommand implements ICommand {\n name = 'themes';\n description = 'Show available theme presets';\n usage = '/themes';\n\n execute(_args: string, logger: Logger): void {\n logger.group('🎨 Available Themes');\n Object.keys(THEME_PRESETS).forEach(themeName => {\n const preview = (THEME_PRESETS as any)[themeName];\n const previewStyle = new StyleBuilder()\n .bg(preview.info.background)\n .color(preview.info.color)\n .padding('4px 8px')\n .rounded('4px')\n .border(preview.info.border)\n .build();\n \n console.log(`%c${themeName}`, previewStyle, `- ${themeName} theme preview`);\n });\n logger.groupEnd();\n }\n}\n\n/**\n * Banners command - show available banner types\n */\nexport class BannersCommand implements ICommand {\n name = 'banners';\n description = 'Show available banner types';\n usage = '/banners';\n\n execute(_args: string, logger: Logger): void {\n logger.group('🖼️ Available Banner Types');\n Object.keys(BANNER_VARIANTS).forEach(bannerName => {\n const banner = (BANNER_VARIANTS as any)[bannerName];\n console.log(`%c${bannerName}`, 'font-weight: bold; color: #667eea;');\n console.log(`%cPreview:`, 'color: #666; font-size: 12px;');\n \n // Show a mini preview\n if (bannerName === 'simple') {\n console.log(`%c${banner.text}`, banner.style);\n } else if (bannerName === 'ascii') {\n console.log(`%c${banner.text.split('\\n').slice(1, 4).join('\\n')}...`, 'font-family: monospace; color: #667eea; font-size: 10px;');\n } else if (bannerName === 'unicode') {\n console.log(`%c${banner.text}`, banner.style);\n } else {\n console.log(`%c${bannerName} banner`, 'color: #666; font-style: italic;');\n }\n });\n logger.groupEnd();\n }\n}\n\n/**\n * Banner command - change/show banner type\n */\nexport class BannerCommand implements ICommand {\n name = 'banner';\n description = 'Change or show current banner type';\n usage = '/banner [type]';\n\n execute(args: string, logger: Logger): void {\n if (!args) {\n logger.showBanner();\n return;\n }\n\n if (args in BANNER_VARIANTS) {\n logger.setBannerType(args as BannerType);\n logger.showBanner();\n } else {\n logger.error(`Invalid banner type: ${args}. Available: ${Object.keys(BANNER_VARIANTS).join(', ')}`);\n }\n }\n}","/**\n * @fileoverview Status and demo commands for Advanced Logger CLI\n */\n\nimport type { ICommand } from '../CommandProcessor.js';\nimport type { Logger } from '../../Logger.js';\n\n/**\n * Status command - show logger configuration and statistics\n */\nexport class StatusCommand implements ICommand {\n name = 'status';\n description = 'Show current logger status and configuration';\n usage = '/status';\n\n execute(_args: string, logger: Logger): void {\n const config = logger.getConfig();\n const statusData = {\n theme: config.theme ? config.theme : 'default',\n verbosity: config.verbosity,\n colors: config.enableColors,\n timestamps: config.enableTimestamps,\n stackTrace: config.enableStackTrace,\n globalPrefix: config.globalPrefix ? config.globalPrefix : 'none',\n bannerType: config.bannerType ? config.bannerType : 'simple',\n handlers: logger.getHandlers().length,\n bufferSize: config.bufferSize ? config.bufferSize : 1000\n };\n\n logger.group('⚙️ Logger Configuration');\n logger.table(statusData);\n logger.groupEnd();\n\n // Show buffer stats if ExportLogHandler is present\n const exportHandler = logger.getExportHandler();\n if (exportHandler) {\n const bufferStats = exportHandler.getBufferStats();\n logger.group('📊 Buffer Statistics');\n logger.table({\n size: `${bufferStats.size}/${bufferStats.maxSize}`,\n usage: `${bufferStats.usage.toFixed(1)}%`,\n oldestLog: bufferStats.oldestLog ? bufferStats.oldestLog.toISOString() : 'None',\n newestLog: bufferStats.newestLog ? bufferStats.newestLog.toISOString() : 'None',\n errorCount: bufferStats.levelCounts.error + bufferStats.levelCounts.critical,\n warningCount: bufferStats.levelCounts.warn\n });\n logger.groupEnd();\n }\n }\n}\n\n/**\n * Reset command - reset logger to defaults\n */\nexport class ResetCommand implements ICommand {\n name = 'reset';\n description = 'Reset logger configuration to defaults';\n usage = '/reset';\n\n execute(_args: string, logger: Logger): void {\n logger.resetConfig();\n }\n}\n\n/**\n * Demo command - show logger feature demonstration\n */\nexport class DemoCommand implements ICommand {\n name = 'demo';\n description = 'Show comprehensive feature demonstration';\n usage = '/demo';\n\n execute(_args: string, logger: Logger): void {\n logger.group('🎪 Advanced Logger Demo');\n \n // Basic logging demo\n logger.debug('Debug message with detailed information');\n logger.info('Informational message about system state'); \n logger.warn('Warning about deprecated feature');\n logger.error('Error processing user request');\n logger.success('Operation completed successfully');\n logger.critical('Critical system failure detected');\n \n // Advanced features demo\n logger.group('📊 Advanced Features Demo');\n \n // Table demo\n logger.table([\n { feature: 'Styled Console', status: '✅ Active', performance: 'Excellent' },\n { feature: 'Theme System', status: '✅ Active', performance: 'Great' },\n { feature: 'CLI Interface', status: '✅ Active', performance: 'Good' },\n { feature: 'Export System', status: '✅ Active', performance: 'Excellent' }\n ]);\n \n // Timer demo\n logger.time('demo-operation');\n setTimeout(() => {\n logger.timeEnd('demo-operation');\n }, 100);\n \n // SVG demo\n logger.logWithSVG('SVG Demo');\n \n // Animated demo\n logger.logAnimated('🌟 Animated Logger Demo 🌟', 2);\n \n logger.groupEnd();\n logger.groupEnd();\n\n logger.info('Demo completed! Check the console for styled output.');\n }\n}","/**\n * @fileoverview Export and clipboard commands for Advanced Logger CLI\n */\n\nimport type { ICommand } from '../CommandProcessor.js';\nimport type { Logger } from '../../Logger.js';\nimport type { ExportFormat, ExportFilters, ExportOptions, LogLevel } from '../../types/index.js';\nimport { EXPORT_FORMATS } from '../../constants.js';\n\n/**\n * Parse command line arguments into filters and options\n */\nfunction parseArguments(args: string): { filters: ExportFilters; options: ExportOptions; format?: ExportFormat } {\n const filters: ExportFilters = {};\n const options: ExportOptions = {};\n let format: ExportFormat | undefined;\n\n if (!args.trim()) return { filters, options };\n\n // Split args by spaces, but keep quoted strings together\n const argParts = args.match(/(?:[^\\s\"]+|\"[^\"]*\")+/g) || [];\n \n for (let i = 0; i < argParts.length; i++) {\n const arg = argParts[i];\n\n // Skip if arg is null/undefined\n if (!arg) {\n continue;\n }\n\n // Format (first argument without --)\n if (i === 0 && !arg.startsWith('--') && arg in EXPORT_FORMATS) {\n format = arg as ExportFormat;\n continue;\n }\n\n // Parse --flags\n if (arg.startsWith('--')) {\n const [flag, value] = arg.slice(2).split('=');\n \n switch (flag) {\n case 'level':\n case 'levels':\n if (value) {\n filters.levels = value.split(',').map(l => l.trim()) as LogLevel[];\n }\n break;\n case 'since':\n if (value) filters.since = value;\n break;\n case 'until':\n if (value) filters.until = value;\n break;\n case 'prefix':\n case 'prefixes':\n if (value) {\n filters.prefixes = value.split(',').map(p => p.trim());\n }\n break;\n case 'exclude-prefix':\n case 'exclude-prefixes':\n if (value) {\n filters.excludePrefixes = value.split(',').map(p => p.trim());\n }\n break;\n case 'last':\n if (value) filters.last = parseInt(value, 10);\n break;\n case 'first':\n if (value) filters.first = parseInt(value, 10);\n break;\n case 'search':\n if (value) filters.search = value.replace(/['\"]/g, '');\n break;\n case 'with-stack':\n filters.withStackTrace = true;\n break;\n case 'errors-only':\n filters.errorsOnly = true;\n break;\n case 'group-by':\n if (value) {\n filters.groupBy = value as ExportFilters['groupBy'];\n options.groupBy = value as ExportOptions['groupBy'];\n }\n break;\n case 'minimal':\n options.minimal = true;\n break;\n case 'compact':\n options.compact = true;\n break;\n case 'styled':\n options.styled = true;\n break;\n }\n }\n }\n\n return { filters, options, format };\n}\n\n/**\n * Export command - export logs in various formats\n */\nexport class ExportCommand implements ICommand {\n name = 'export';\n description = 'Export logs to various formats';\n usage = '/export <format> [--filter=value] [--option]';\n\n execute(args: string, logger: Logger): void {\n const exportHandler = logger.getExportHandler();\n if (!exportHandler) {\n logger.error('Export handler not available. Make sure ExportLogHandler is registered.');\n return;\n }\n\n const { filters, options, format } = parseArguments(args);\n\n if (!format) {\n logger.error('Format required. Available formats: ' + Object.keys(EXPORT_FORMATS).join(', '));\n logger.info('Usage: /export <format> [--filter=value]');\n logger.info('Example: /export json --level=error,warn --last=50');\n return;\n }\n\n try {\n const result = exportHandler.export(format, filters, options);\n \n // Log success with metadata\n logger.success(`✅ Export completed: ${result.metadata.filteredLogs} logs exported in ${format} format`);\n \n // Show preview for small exports\n if (result.data.length < 1000) {\n logger.group(`📄 Preview (${format.toUpperCase()})`);\n console.log(result.data);\n logger.groupEnd();\n } else {\n logger.info(`📄 Export size: ${(result.data.length / 1024).toFixed(2)}KB`);\n }\n\n // Show metadata\n logger.table({\n format: result.format,\n totalLogs: result.metadata.totalLogs,\n filtered: result.metadata.filteredLogs,\n exported: result.metadata.exportedAt\n });\n\n } catch (error) {\n logger.error('Export failed:', error);\n }\n }\n}\n\n/**\n * Copy command - copy logs to clipboard\n */\nexport class CopyCommand implements ICommand {\n name = 'copy';\n description = 'Copy logs to clipboard';\n usage = '/copy <format> [--filter=value] [--option]';\n\n async execute(args: string, logger: Logger): Promise<void> {\n const exportHandler = logger.getExportHandler();\n if (!exportHandler) {\n logger.error('Export handler not available. Make sure ExportLogHandler is registered.');\n return;\n }\n\n const { filters, options, format } = parseArguments(args);\n\n if (!format) {\n logger.error('Format required. Available formats: ' + Object.keys(EXPORT_FORMATS).join(', '));\n logger.info('Usage: /copy <format> [--filter=value]');\n logger.info('Example: /copy plain --level=error --last=25');\n return;\n }\n\n try {\n const success = await exportHandler.copyToClipboard(format, filters, options);\n \n if (success) {\n const result = exportHandler.export(format, filters, options);\n logger.success(`📋 Copied ${result.metadata.filteredLogs} logs to clipboard (${format} format)`);\n } else {\n logger.error('Failed to copy to clipboard. Browser may not support clipboard API.');\n }\n\n } catch (error) {\n logger.error('Copy failed:', error);\n }\n }\n}\n\n/**\n * Buffer-size command - configure buffer size\n */\nexport class BufferSizeCommand implements ICommand {\n name = 'buffer-size';\n description = 'Set log buffer size';\n usage = '/buffer-size <size>';\n\n execute(args: string, logger: Logger): void {\n const exportHandler = logger.getExportHandler();\n if (!exportHandler) {\n logger.error('Export handler not available.');\n return;\n }\n\n const size = parseInt(args.trim(), 10);\n if (isNaN(size) || size <= 0) {\n logger.error('Invalid buffer size. Must be a positive number.');\n logger.info('Example: /buffer-size 2000');\n return;\n }\n\n exportHandler.setBufferSize(size);\n logger.success(`Buffer size set to ${size}`);\n }\n}\n\n/**\n * Clear-buffer command - clear log buffer\n */\nexport class ClearBufferCommand implements ICommand {\n name = 'clear-buffer';\n description = 'Clear the log buffer';\n usage = '/clear-buffer';\n\n execute(_args: string, logger: Logger): void {\n const exportHandler = logger.getExportHandler();\n if (!exportHandler) {\n logger.error('Export handler not available.');\n return;\n }\n\n const stats = exportHandler.getBufferStats();\n exportHandler.clearBuffer();\n \n logger.success(`✅ Buffer cleared. Removed ${stats.size} log entries.`);\n }\n}\n\n/**\n * Buffer-info command - show buffer information\n */\nexport class BufferInfoCommand implements ICommand {\n name = 'buffer-info';\n description = 'Show buffer statistics and information';\n usage = '/buffer-info';\n\n execute(_args: string, logger: Logger): void {\n const exportHandler = logger.getExportHandler();\n if (!exportHandler) {\n logger.error('Export handler not available.');\n return;\n }\n\n const stats = exportHandler.getBufferStats();\n \n logger.group('📊 Buffer Information');\n logger.table({\n size: `${stats.size}/${stats.maxSize}`,\n usage: `${stats.usage.toFixed(1)}%`,\n oldestLog: stats.oldestLog?.toLocaleString() || 'None',\n newestLog: stats.newestLog?.toLocaleString() || 'None'\n });\n \n logger.group('📈 Log Level Counts');\n logger.table(stats.levelCounts);\n logger.groupEnd();\n \n logger.groupEnd();\n }\n}","/**\n * @fileoverview Help system for Advanced Logger CLI\n */\n\nimport type { ICommand } from './CommandProcessor.js';\nimport type { Logger } from '../Logger.js';\nimport { StyleBuilder } from '../styling/index.js';\n\n/**\n * Help command - show comprehensive CLI help\n */\nexport class HelpCommand implements ICommand {\n name = 'help';\n description = 'Show CLI help and available commands';\n usage = '/help [command]';\n\n execute(_args: string, logger: Logger): void {\n const helpStyle = new StyleBuilder()\n .bg('linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%)')\n .color('#495057')\n .padding('15px 20px')\n .rounded('8px')\n .border('1px solid #dee2e6')\n .font('Monaco, Consolas, monospace')\n .size('13px')\n .build();\n\n const helpText = `\n╭─────────────── ADVANCED LOGGER CLI COMMANDS ─────────────────╮\n│ │\n│ CONFIGURATION │\n│ /config Show current configuration │\n│ /config {json} Apply JSON configuration │\n│ /config key=val Apply key-value configuration │\n│ /themes Show available themes │\n│ /banners Show available banner types │\n│ /banner [type] Change/show banner type │\n│ /status Show logger status & buffer stats │\n│ /demo Show feature demonstration │\n│ /reset Reset to default configuration │\n│ │\n│ EXPORT & CLIPBOARD │\n│ /export <format> Export logs (json|csv|md|plain|html) │\n│ /copy <format> Copy logs to clipboard │\n│ /buffer-size N Set log buffer size │\n│ /buffer-info Show buffer statistics │\n│ /clear-buffer Clear stored logs │\n│ │\n│ EXPORT FILTERS (for export/copy commands) │\n│ --level error,warn Filter by log levels │\n│ --since 2h Logs from last 2 hours │\n│ --until 1h Logs until 1 hour ago │\n│ --prefix API,DB Filter by prefixes │\n│ --exclude-prefix INT Exclude prefixes │\n│ --last 50 Last 50 logs only │\n│ --first 25 First 25 logs only │\n│ --search \"error\" Search in log messages │\n│ --with-stack Only logs with stack traces │\n│ --errors-only Only error + critical logs │\n│ --group-by level Group by level/prefix/hour │\n│ │\n│ EXPORT OPTIONS │\n│ --minimal Minimal output format │\n│ --compact Remove extra whitespace │\n│ --styled Include styling (HTML format) │\n│ │\n├──────────────────── CONFIGURATION OPTIONS ─────────────────┤\n│ │\n│ theme: default | dark | light | neon | minimal | cyberpunk│\n│ bannerType: simple | ascii | unicode | svg | animated │\n│ verbosity: debug | info | warn | error | critical | silent│\n│ enableColors: true | false │\n│ enableTimestamps: true | false │\n│ enableStackTrace: true | false │\n│ globalPrefix: \"string\" │\n│ bufferSize: number (50-10000) │\n│ │\n├──────────────────────── EXAMPLES ──────────────────────────┤\n│ │\n│ Basic Configuration: │\n│ /config {\"theme\":\"dark\",\"verbosity\":\"debug\"} │\n│ /config theme=neon,bufferSize=2000 │\n│ /banner animated Change to animated banner │\n│ │\n│ Export Examples: │\n│ /export json --level=error,warn --last=25 │\n│ /export csv --since=2h --prefix=API │\n│ /export markdown --group-by=level --errors-only │\n│ /export html --styled --since=1h │\n│ │\n│ Clipboard Examples: │\n│ /copy plain --minimal --last=10 │\n│ /copy json --search=\"authentication\" --compact │\n│ /copy csv --since=30m --exclude-prefix=DEBUG │\n│ │\n│ Buffer Management: │\n│ /buffer-size 5000 Increase buffer to 5000 logs │\n│ /buffer-info Show detailed buffer statistics │\n│ /clear-buffer Clear all stored logs │\n│ │\n│ Time Formats: │\n│ --since=2h 2 hours ago │\n│ --since=30m 30 minutes ago │\n│ --since=1d 1 day ago │\n│ --since=\"2024-01-01T10:00:00Z\" Specific ISO date │\n│ │\n╰─────────────────────────────────────────────────────────────╯`;\n\n console.log(`%c${helpText}`, helpStyle);\n\n // Show quick tips\n logger.group('💡 Quick Tips');\n const tips = [\n 'Use /demo to see all logger features in action',\n 'Logs are automatically stored in a circular buffer for export',\n 'Export formats: JSON (structured), CSV (Excel), Markdown (readable), Plain (simple), HTML (styled)',\n 'Time filters support relative (2h, 30m) and absolute (ISO) formats',\n 'Combine multiple filters: /export json --level=error --since=1h --search=\"auth\"',\n 'Use /copy for quick clipboard access instead of /export'\n ];\n \n tips.forEach(tip => {\n logger.info(`• ${tip}`);\n });\n logger.groupEnd();\n }\n}","/**\n * @fileoverview CLI system exports for Advanced Logger\n */\n\n// Core CLI system\nexport { CommandProcessor, type ICommand } from './CommandProcessor.js';\nimport { CommandProcessor } from './CommandProcessor.js';\n\n// Commands\nexport { ConfigCommand } from './commands/ConfigCommand.js';\nexport { ThemesCommand, BannersCommand, BannerCommand } from './commands/ThemeCommand.js';\nexport { StatusCommand, ResetCommand, DemoCommand } from './commands/StatusCommand.js';\nexport { \n ExportCommand, \n CopyCommand, \n BufferSizeCommand, \n ClearBufferCommand, \n BufferInfoCommand \n} from './commands/ExportCommand.js';\n\n// Help system\nexport { HelpCommand } from './help.js';\n\n// Import all commands\nimport { HelpCommand } from './help.js';\nimport { ConfigCommand } from './commands/ConfigCommand.js';\nimport { ThemesCommand, BannersCommand, BannerCommand } from './commands/ThemeCommand.js';\nimport { StatusCommand, ResetCommand, DemoCommand } from './commands/StatusCommand.js';\nimport { \n ExportCommand, \n CopyCommand, \n BufferSizeCommand, \n ClearBufferCommand, \n BufferInfoCommand \n} from './commands/ExportCommand.js';\n\n/**\n * Create and configure default CLI processor\n */\nexport function createDefaultCLI(): CommandProcessor {\n const processor = new CommandProcessor();\n \n // Register all default commands\n processor.registerCommand(new HelpCommand());\n processor.registerCommand(new ConfigCommand());\n processor.registerCommand(new ThemesCommand());\n processor.registerCommand(new BannersCommand());\n processor.registerCommand(new BannerCommand());\n processor.registerCommand(new StatusCommand());\n processor.registerCommand(new ResetCommand());\n processor.registerCommand(new DemoCommand());\n processor.registerCommand(new ExportCommand());\n processor.registerCommand(new CopyCommand());\n processor.registerCommand(new BufferSizeCommand());\n processor.registerCommand(new ClearBufferCommand());\n processor.registerCommand(new BufferInfoCommand());\n \n return processor;\n}","/**\n * @fileoverview Refactored Advanced Logger with modular architecture\n * @version 2.0.0\n */\n\n// Type imports\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n LoggerConfig,\n TimerEntry,\n ILogHandler,\n LogMetadata,\n StyleOptions\n} from './types/index.js';\n\n// Utility imports\nimport {\n parseStackTrace,\n formatTimestamp,\n createStyledOutput\n} from './utils/index.js';\n\n// Styling imports\nimport {\n THEME_PRESETS,\n THEME_BANNERS,\n displayInitBanner,\n StylePresets,\n StyleBuilder\n} from './styling/index.js';\n\n// Handler imports\nimport { ExportLogHandler } from './handlers/index.js';\n\n// CLI imports\nimport { createDefaultCLI, type CommandProcessor } from './cli/index.js';\n\n// Constants\nimport { DEFAULT_CONFIG } from './constants.js';\n\n/**\n * Current active theme styles\n */\nlet LEVEL_STYLES = THEME_PRESETS.default;\n\n/**\n * Main Logger class implementing state-of-the-art logging capabilities\n */\nexport class Logger {\n private config: LoggerConfig;\n private scopedPrefix?: string;\n private handlers: ILogHandler[] = [];\n private timers: Map<string, TimerEntry> = new Map();\n private groupDepth: number = 0;\n private exportHandler?: ExportLogHandler;\n private cliProcessor?: CommandProcessor;\n\n /**\n * Creates a new Logger instance\n */\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n };\n\n // Initialize export handler if buffer size is specified\n if (this.config.bufferSize) {\n this.exportHandler = new ExportLogHandler(this.config.bufferSize);\n this.handlers.push(this.exportHandler);\n }\n\n // Initialize CLI processor\n this.cliProcessor = createDefaultCLI();\n }\n\n // ===== CONFIGURATION METHODS =====\n\n /**\n * Get current configuration\n */\n getConfig(): LoggerConfig {\n return { ...this.config };\n }\n\n /**\n * Update configuration\n */\n updateConfig(updates: Partial<LoggerConfig>): void {\n this.config = { ...this.config, ...updates };\n }\n\n /**\n * Sets the global prefix for all log messages\n */\n setGlobalPrefix(prefix: string): void {\n this.config.globalPrefix = prefix;\n }\n\n /**\n * Sets the verbosity level for filtering log output\n */\n setVerbosity(level: Verbosity): void {\n this.config.verbosity = level;\n }\n\n /**\n * Sets the logger theme\n */\n setTheme(theme: ThemeVariant): void {\n if (theme in THEME_PRESETS) {\n LEVEL_STYLES = (THEME_PRESETS as any)[theme];\n this.config.theme = theme;\n \n // Show theme-specific banner\n if (theme in THEME_BANNERS) {\n const themeBanner = (THEME_BANNERS as any)[theme];\n console.log(`%c${themeBanner.simple}`, themeBanner.style);\n }\n \n this.success(`Theme changed to: ${theme}`);\n } else {\n this.error(`Invalid theme: ${theme}. Available themes:`, Object.keys(THEME_PRESETS));\n }\n }\n\n /**\n * Set banner type for initialization display\n */\n setBannerType(bannerType: BannerType): void {\n this.config.bannerType = bannerType;\n this.success(`Banner type changed to: ${bannerType}`);\n }\n\n /**\n * Reset logger to default configuration\n */\n resetConfig(): void {\n this.config = { ...DEFAULT_CONFIG };\n LEVEL_STYLES = THEME_PRESETS.default;\n this.success('Logger configuration reset to defaults');\n }\n\n // ===== SCOPED LOGGER =====\n\n /**\n * Creates a scoped logger with a specific prefix\n */\n createScopedLogger(prefix: string): Logger {\n const scopedLogger = new Logger(this.config);\n scopedLogger.scopedPrefix = prefix;\n scopedLogger.handlers = [...this.handlers];\n scopedLogger.exportHandler = this.exportHandler;\n return scopedLogger;\n }\n\n // ===== HANDLER MANAGEMENT =====\n\n /**\n * Adds a custom log handler for extensibility\n */\n addHandler(handler: ILogHandler): void {\n this.handlers.push(handler);\n }\n\n /**\n * Get all registered handlers\n */\n getHandlers(): ILogHandler[] {\n return [...this.handlers];\n }\n\n /**\n * Get export handler if available\n */\n getExportHandler(): ExportLogHandler | undefined {\n return this.exportHandler;\n }\n\n // ===== CORE LOGGING METHODS =====\n\n /**\n * Checks if a log level should be output based on current verbosity\n */\n private shouldLog(level: LogLevel): boolean {\n if (this.config.verbosity === 'silent') return false;\n const levels = { debug: 0, info: 1, warn: 2, error: 3, critical: 4 };\n return levels[level] >= levels[this.config.verbosity];\n }\n\n /**\n * Gets the effective prefix (global + scoped)\n */\n private getEffectivePrefix(): string | undefined {\n const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);\n return parts.length > 0 ? parts.join(':') : undefined;\n }\n\n /**\n * Core logging method that handles styling and formatting\n */\n private log(level: LogLevel, ...args: any[]): void {\n if (!this.shouldLog(level)) return;\n\n const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;\n const prefix = this.getEffectivePrefix();\n const message = args.length > 0 ? String(args[0]) : '';\n const additionalArgs = args.slice(1);\n\n // Create styled output\n const [format, ...styles] = createStyledOutput(level, LEVEL_STYLES, prefix, message, stackInfo);\n\n // Add group indentation\n const groupIndent = ' '.repeat(this.groupDepth);\n const finalFormat = groupIndent + format;\n\n // Output to console\n if (additionalArgs.length > 0) {\n console.log(finalFormat, ...styles, ...additionalArgs);\n } else {\n console.log(finalFormat, ...styles);\n }\n\n // Update export handler group info\n if (this.exportHandler) {\n this.exportHandler.setGroupInfo(this.groupDepth);\n }\n\n // Call custom handlers\n const metadata: LogMetadata = {\n timestamp: formatTimestamp(),\n level,\n prefix,\n stackInfo: stackInfo ? stackInfo : undefined,\n };\n\n this.handlers.forEach(handler => {\n try {\n handler.handle(level, message, args, metadata);\n } catch (error) {\n console.error('Log handler failed:', error);\n }\n });\n }\n\n /**\n * Logs debug information (lowest priority)\n */\n debug(...args: any[]): void {\n this.log('debug', ...args);\n }\n\n /**\n * Logs informational messages\n */\n info(...args: any[]): void {\n this.log('info', ...args);\n }\n\n /**\n * Logs warning messages\n */\n warn(...args: any[]): void {\n this.log('warn', ...args);\n }\n\n /**\n * Logs error messages\n */\n error(...args: any[]): void {\n this.log('error', ...args);\n }\n\n /**\n * Logs success messages (special info level)\n */\n success(...args: any[]): void {\n if (!this.shouldLog('info')) return;\n\n const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;\n const prefix = this.getEffectivePrefix();\n const message = args.length > 0 ? String(args[0]) : '';\n const additionalArgs = args.slice(1);\n\n // Handle success as special case - use info level with success styling\n const [format, ...styles] = createStyledOutput('info', LEVEL_STYLES, prefix, message, stackInfo);\n \n // Override with success styling\n const successStyle = LEVEL_STYLES.success;\n let emoji = '✅';\n let label = 'SUCCESS';\n \n if (successStyle) {\n if (successStyle.emoji) {\n emoji = successStyle.emoji;\n }\n if (successStyle.label) {\n label = successStyle.label;\n }\n }\n \n const successFormat = format.replace(/ℹ️ INFO/, `${emoji} ${label}`);\n\n const groupIndent = ' '.repeat(this.groupDepth);\n const finalFormat = groupIndent + successFormat;\n\n if (additionalArgs.length > 0) {\n console.log(finalFormat, ...styles, ...additionalArgs);\n } else {\n console.log(finalFormat, ...styles);\n }\n\n // Call handlers\n const metadata: LogMetadata = {\n timestamp: formatTimestamp(),\n level: 'info',\n prefix,\n stackInfo: stackInfo ? stackInfo : undefined,\n };\n\n this.handlers.forEach(handler => {\n try {\n handler.handle('info', message, args, metadata);\n } catch (error) {\n console.error('Log handler failed:', error);\n }\n });\n }\n\n /**\n * Logs trace information (detailed debugging)\n */\n trace(...args: any[]): void {\n this.log('debug', ...args);\n if (this.shouldLog('debug')) {\n console.trace(...args);\n }\n }\n\n /**\n * Logs critical errors (highest priority)\n */\n critical(...args: any[]): void {\n this.log('critical', ...args);\n }\n\n // ===== ADVANCED LOGGING FEATURES =====\n\n /**\n * Displays data in a table format\n */\n table(data: any, columns?: string[]): void {\n if (!this.shouldLog('info')) return;\n\n const prefix = this.getEffectivePrefix();\n const tableStyle = StylePresets.accent().build();\n\n const format = `%c📊 TABLE${prefix ? ` [${prefix}]` : ''}`;\n console.log(format, tableStyle);\n\n if (columns) {\n console.table(data, columns);\n } else {\n console.table(data);\n }\n }\n\n /**\n * Starts a collapsible group in the console\n */\n group(label: string, collapsed: boolean = false): void {\n const groupStyle = new StyleBuilder()\n .bg('linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%)')\n .color('#1565c0')\n .border('1px solid #90caf9')\n .padding('4px 12px')\n .rounded('6px')\n .bold()\n .build();\n\n const format = `%c📁 ${label}`;\n\n if (collapsed) {\n console.groupCollapsed(format, groupStyle);\n } else {\n console.group(format, groupStyle);\n }\n\n this.groupDepth++;\n }\n\n /**\n * Ends the current console group\n */\n groupEnd(): void {\n if (this.groupDepth > 0) {\n console.groupEnd();\n this.groupDepth--;\n }\n }\n\n // ===== PERFORMANCE TIMING =====\n\n /**\n * Starts a timer with the given label\n */\n time(label: string): void {\n const timer: TimerEntry = {\n label,\n startTime: performance.now(),\n };\n this.timers.set(label, timer);\n\n const timerStyle = StylePresets.warning().build();\n console.log(`%c⏱️ Timer started: ${label}`, timerStyle);\n }\n\n /**\n * Ends a timer and logs the elapsed time\n */\n timeEnd(label: string): void {\n const timer = this.timers.get(label);\n if (!timer) {\n this.warn(`Timer '${label}' does not exist`);\n return;\n }\n\n const elapsed = performance.now() - timer.startTime;\n this.timers.delete(label);\n\n const timerStyle = StylePresets.success().build();\n console.log(`%c⏱️ Timer ended: ${label} - ${elapsed.toFixed(2)}ms`, timerStyle);\n }\n\n // ===== ADVANCED VISUAL FEATURES =====\n\n /**\n * Display banner with specified or configured type\n */\n showBanner(bannerType?: BannerType): void {\n const effectiveBannerType = bannerType ? bannerType : this.config.bannerType;\n displayInitBanner(effectiveBannerType);\n }\n\n /**\n * Log with SVG background image\n */\n logWithSVG(message: string, svgContent?: string, options: StyleOptions = {}): void {\n const { width = 300, height = 60, padding = '30px 150px' } = options;\n \n let svgDataUri = '';\n if (svgContent) {\n const encodedSVG = encodeURIComponent(svgContent);\n svgDataUri = `data:image/svg+xml,${encodedSVG}`;\n } else {\n const defaultSVG = `<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${width} ${height}'><defs><linearGradient id='grad' x1='0%' y1='0%' x2='100%' y2='0%'><stop offset='0%' style='stop-color:%23667eea'/><stop offset='100%' style='stop-color:%23764ba2'/></linearGradient></defs><rect width='100%' height='100%' fill='url(%23grad)' rx='4'/><text x='${width/2}' y='${height/2 + 5}' text-anchor='middle' fill='white' font-family='monospace' font-size='14' font-weight='bold'>${message}</text></svg>`;\n svgDataUri = `data:image/svg+xml,${encodeURIComponent(defaultSVG)}`;\n }\n\n const svgStyle = new StyleBuilder()\n .bg(`url(\"${svgDataUri}\") no-repeat center center`)\n .padding(padding)\n .color('transparent')\n .rounded('4px')\n .build();\n\n console.log(`%c${message}`, svgStyle);\n }\n\n /**\n * Log with animated background gradient\n */\n logAnimated(message: string, duration: number = 3): void {\n // Inject CSS animation if not already present\n if (!document.getElementById('logger-animations')) {\n const style = document.createElement('style');\n style.id = 'logger-animations';\n style.textContent = `\n @keyframes loggerGradient {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n `;\n document.head.appendChild(style);\n }\n\n const animatedStyle = new StyleBuilder()\n .bg('linear-gradient(-45deg, #667eea, #764ba2, #667eea, #764ba2)')\n .css('background-size', '400% 400%')\n .color('#ffffff')\n .padding('12px 20px')\n .rounded('8px')\n .bold()\n .font('Monaco, Consolas, monospace')\n .animation(`loggerGradient ${duration}s ease infinite`)\n .display('inline-block')\n .build();\n\n console.log(`%c${message}`, animatedStyle);\n }\n\n /**\n * Groups logs by a specific property using modern Object.groupBy (when available)\n */\n logGrouped<T>(items: T[], groupBy: (item: T) => string): void {\n try {\n // Use Object.groupBy if available (ES2024), otherwise fallback to reduce\n let grouped: Record<string, T[]>;\n \n if ((Object as any).groupBy) {\n grouped = (Object as any).groupBy(items, groupBy);\n } else {\n grouped = items.reduce((acc, item) => {\n const key = groupBy(item);\n if (!acc[key]) {\n acc[key] = [];\n }\n acc[key].push(item);\n return acc;\n }, {} as Record<string, T[]>);\n }\n\n Object.entries(grouped).forEach(([group, groupItems]) => {\n this.group(`Group: ${group}`);\n this.table(groupItems);\n this.groupEnd();\n });\n } catch {\n this.info('Grouped data:', items);\n }\n }\n\n // ===== CLI SYSTEM =====\n\n /**\n * CLI command processor for logger configuration and export\n */\n async cli(command: string): Promise<void> {\n if (!this.cliProcessor) {\n this.error('CLI processor not initialized');\n return;\n }\n\n await this.cliProcessor.processCommand(command, this);\n }\n}\n\n// Create and export the singleton instance\nconst defaultLogger = new Logger({\n verbosity: 'info',\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: true,\n bufferSize: 1000, // Enable export functionality by default\n});\n\n// Display initialization banner\ndisplayInitBanner();\n\n// Export the singleton instance as default\nexport default defaultLogger;\n\n/**\n * Export individual methods for convenience (with proper binding)\n */\nexport const debug = (...args: any[]) => defaultLogger.debug(...args);\nexport const info = (...args: any[]) => defaultLogger.info(...args);\nexport const warn = (...args: any[]) => defaultLogger.warn(...args);\nexport const error = (...args: any[]) => defaultLogger.error(...args);\nexport const success = (...args: any[]) => defaultLogger.success(...args);\nexport const trace = (...args: any[]) => defaultLogger.trace(...args);\nexport const critical = (...args: any[]) => defaultLogger.critical(...args);\nexport const table = (data: any, columns?: string[]) => defaultLogger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => defaultLogger.group(label, collapsed);\nexport const groupEnd = () => defaultLogger.groupEnd();\nexport const time = (label: string) => defaultLogger.time(label);\nexport const timeEnd = (label: string) => defaultLogger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => defaultLogger.setGlobalPrefix(prefix);\nexport const createScopedLogger = (prefix: string) => defaultLogger.createScopedLogger(prefix);\nexport const setVerbosity = (level: Verbosity) => defaultLogger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => defaultLogger.addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => defaultLogger.setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => defaultLogger.setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => defaultLogger.showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n defaultLogger.logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n defaultLogger.logAnimated(message, duration);\nexport const cli = (command: string) => defaultLogger.cli(command);\n\n// Re-export handlers and utilities for backward compatibility\nexport { FileLogHandler, RemoteLogHandler, AnalyticsLogHandler, ExportLogHandler } from './handlers/index.js';\nexport { StyleBuilder, StylePresets as Styles } from './styling/index.js';// Test change to trigger workflow\n// Test permissions fix\n"],"names":["CommandProcessor","HelpCommand","ConfigCommand","ThemesCommand","BannersCommand","BannerCommand","StatusCommand","ResetCommand","DemoCommand","ExportCommand","CopyCommand","BufferSizeCommand","ClearBufferCommand","BufferInfoCommand","error","group"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./StyleBuilder-LPLzsoHY.js"),o={default:{debug:{emoji:"🐞",label:"DEBUG",background:"linear-gradient(135deg, #667eea 0%, #764ba2 100%)",color:"#ffffff",border:"1px solid #667eea",shadow:"0 2px 4px rgba(102, 126, 234, 0.3)"},info:{emoji:"ℹ️",label:"INFO",background:"linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)",color:"#ffffff",border:"1px solid #74b9ff",shadow:"0 2px 4px rgba(116, 185, 255, 0.3)"},warn:{emoji:"⚠️",label:"WARN",background:"linear-gradient(135deg, #fdcb6e 0%, #e17055 100%)",color:"#2d3436",border:"1px solid #fdcb6e",shadow:"0 2px 4px rgba(253, 203, 110, 0.3)"},error:{emoji:"❌",label:"ERROR",background:"linear-gradient(135deg, #e84393 0%, #d63031 100%)",color:"#ffffff",border:"1px solid #e84393",shadow:"0 2px 4px rgba(232, 67, 147, 0.3)"},success:{emoji:"✅",label:"SUCCESS",background:"linear-gradient(135deg, #00b894 0%, #00a085 100%)",color:"#ffffff",border:"1px solid #00b894",shadow:"0 2px 4px rgba(0, 184, 148, 0.3)"},critical:{emoji:"🔥",label:"CRITICAL",background:"linear-gradient(135deg, #ff3838 0%, #ff1744 100%)",color:"#ffffff",border:"2px solid #ff3838",shadow:"0 4px 8px rgba(255, 56, 56, 0.5)"}},dark:{debug:{emoji:"🌙",label:"DEBUG",background:"linear-gradient(135deg, #2d3748 0%, #4a5568 100%)",color:"#e2e8f0",border:"1px solid #4a5568",shadow:"0 2px 4px rgba(45, 55, 72, 0.8)"},info:{emoji:"💡",label:"INFO",background:"linear-gradient(135deg, #1a202c 0%, #2d3748 100%)",color:"#90cdf4",border:"1px solid #3182ce",shadow:"0 2px 4px rgba(26, 32, 44, 0.8)"},warn:{emoji:"⚡",label:"WARN",background:"linear-gradient(135deg, #744210 0%, #975a16 100%)",color:"#faf089",border:"1px solid #d69e2e",shadow:"0 2px 4px rgba(116, 66, 16, 0.8)"},error:{emoji:"💀",label:"ERROR",background:"linear-gradient(135deg, #742a2a 0%, #9b2c2c 100%)",color:"#feb2b2",border:"1px solid #e53e3e",shadow:"0 2px 4px rgba(116, 42, 42, 0.8)"},success:{emoji:"🎯",label:"SUCCESS",background:"linear-gradient(135deg, #276749 0%, #2f855a 100%)",color:"#9ae6b4",border:"1px solid #38a169",shadow:"0 2px 4px rgba(39, 103, 73, 0.8)"},critical:{emoji:"💥",label:"CRITICAL",background:"linear-gradient(135deg, #1a1a1a 0%, #ff0000 100%)",color:"#ffffff",border:"2px solid #ff0000",shadow:"0 4px 8px rgba(255, 0, 0, 0.9)"}},neon:{debug:{emoji:"⚡",label:"DEBUG",background:"linear-gradient(135deg, #0f3460 0%, #e94560 100%)",color:"#00ffff",border:"1px solid #00ffff",shadow:"0 0 10px rgba(0, 255, 255, 0.5)"},info:{emoji:"🔮",label:"INFO",background:"linear-gradient(135deg, #16213e 0%, #0f3460 100%)",color:"#00ff41",border:"1px solid #00ff41",shadow:"0 0 10px rgba(0, 255, 65, 0.5)"},warn:{emoji:"⚠️",label:"WARN",background:"linear-gradient(135deg, #533a03 0%, #e94560 100%)",color:"#ffff00",border:"1px solid #ffff00",shadow:"0 0 10px rgba(255, 255, 0, 0.5)"},error:{emoji:"💥",label:"ERROR",background:"linear-gradient(135deg, #5c0a0a 0%, #ff073a 100%)",color:"#ff073a",border:"1px solid #ff073a",shadow:"0 0 10px rgba(255, 7, 58, 0.8)"},success:{emoji:"✨",label:"SUCCESS",background:"linear-gradient(135deg, #0a5c0a 0%, #39ff14 100%)",color:"#39ff14",border:"1px solid #39ff14",shadow:"0 0 10px rgba(57, 255, 20, 0.8)"},critical:{emoji:"🌟",label:"CRITICAL",background:"linear-gradient(135deg, #000000 0%, #ff0080 100%)",color:"#ff0080",border:"2px solid #ff0080",shadow:"0 0 20px rgba(255, 0, 128, 1)"}},minimal:{debug:{emoji:"",label:"DEBUG",background:"#f7fafc",color:"#4a5568",border:"1px solid #e2e8f0",shadow:"none"},info:{emoji:"",label:"INFO",background:"#ebf8ff",color:"#2b6cb0",border:"1px solid #bee3f8",shadow:"none"},warn:{emoji:"",label:"WARN",background:"#fffbf0",color:"#c05621",border:"1px solid #fed7aa",shadow:"none"},error:{emoji:"",label:"ERROR",background:"#fef5f5",color:"#c53030",border:"1px solid #fca5a5",shadow:"none"},success:{emoji:"",label:"SUCCESS",background:"#f0fff4",color:"#2f855a",border:"1px solid #9ae6b4",shadow:"none"},critical:{emoji:"",label:"CRITICAL",background:"#fef5f5",color:"#e53e3e",border:"2px solid #f56565",shadow:"none"}},light:{debug:{emoji:"🔍",label:"DEBUG",background:"linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%)",color:"#1565c0",border:"1px solid #90caf9",shadow:"0 1px 3px rgba(33, 150, 243, 0.2)"},info:{emoji:"ℹ️",label:"INFO",background:"linear-gradient(135deg, #f3e5f5 0%, #e1bee7 100%)",color:"#7b1fa2",border:"1px solid #ce93d8",shadow:"0 1px 3px rgba(156, 39, 176, 0.2)"},warn:{emoji:"⚠️",label:"WARN",background:"linear-gradient(135deg, #fff8e1 0%, #ffecb3 100%)",color:"#f57c00",border:"1px solid #ffcc02",shadow:"0 1px 3px rgba(255, 152, 0, 0.2)"},error:{emoji:"❌",label:"ERROR",background:"linear-gradient(135deg, #ffebee 0%, #ffcdd2 100%)",color:"#d32f2f",border:"1px solid #f44336",shadow:"0 1px 3px rgba(244, 67, 54, 0.2)"},success:{emoji:"✅",label:"SUCCESS",background:"linear-gradient(135deg, #e8f5e8 0%, #c8e6c9 100%)",color:"#388e3c",border:"1px solid #4caf50",shadow:"0 1px 3px rgba(76, 175, 80, 0.2)"},critical:{emoji:"🚨",label:"CRITICAL",background:"linear-gradient(135deg, #fce4ec 0%, #f8bbd9 100%)",color:"#c2185b",border:"2px solid #e91e63",shadow:"0 2px 6px rgba(233, 30, 99, 0.3)"}},cyberpunk:{debug:{emoji:"🤖",label:"DEBUG",background:"linear-gradient(135deg, #0d1b2a 0%, #415a77 100%)",color:"#00d4aa",border:"1px solid #00d4aa",shadow:"0 0 15px rgba(0, 212, 170, 0.4)"},info:{emoji:"🔗",label:"INFO",background:"linear-gradient(135deg, #1b263b 0%, #0d1b2a 100%)",color:"#00b4d8",border:"1px solid #00b4d8",shadow:"0 0 15px rgba(0, 180, 216, 0.4)"},warn:{emoji:"⚡",label:"WARN",background:"linear-gradient(135deg, #f72585 0%, #b5179e 100%)",color:"#ffff3f",border:"1px solid #ffff3f",shadow:"0 0 15px rgba(255, 255, 63, 0.4)"},error:{emoji:"💀",label:"ERROR",background:"linear-gradient(135deg, #7209b7 0%, #480ca8 100%)",color:"#ff006e",border:"1px solid #ff006e",shadow:"0 0 15px rgba(255, 0, 110, 0.6)"},success:{emoji:"⚡",label:"SUCCESS",background:"linear-gradient(135deg, #003566 0%, #001d3d 100%)",color:"#00f5ff",border:"1px solid #00f5ff",shadow:"0 0 15px rgba(0, 245, 255, 0.4)"},critical:{emoji:"💥",label:"CRITICAL",background:"linear-gradient(135deg, #000000 0%, #ff0040 100%)",color:"#ff0040",border:"2px solid #ff0040",shadow:"0 0 25px rgba(255, 0, 64, 0.8)"}}},t={simple:{text:"🚀 ADVANCED LOGGER v2.0.0 - State-of-the-art Console Styling 🚀",style:"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 12px 20px; border-radius: 8px; font-weight: bold; font-size: 14px;"},ascii:{text:"\n ___ ____ _ __ ___ _ __ _____ _____ ____ __ ___ _____ _____ _____ ____ \n / _ \\ / __ \\| | / / / _ \\ | \\ | |/ ____| ____| _ \\ | | / _ \\ / ____| ___| _ | _ \\ \n / /_\\ \\ / / _` | |/ / / /_\\ \\ | \\| | | | |__ | | | | | | / / \\ \\| | __| |_ | |_| | |_) |\n | _ || | (_| | < | _ | | . ` | | | __| | | | | | | | | | | | |_ | _| | /| _ < \n | | | |\\ \\__,_|_|\\_\\ | | | | | |\\ | |___| |____| |_| | | |__\\ \\_/ /| |__| | |___| |\\ \\| |_) |\n \\_| |_/ \\____/ \\_| |_/ |_| \\_|\\_____|______|____/ |_____/\\___/ \\_____|_____|_| \\_|____/\n\n Advanced Logger v2.0.0 - Console Excellence",style:'font-family: "Courier New", Consolas, Monaco, monospace; color: #667eea; font-size: 11px; line-height: 1.2;'},unicode:{text:"\n╔══════════════════════════════════════════════════════════════════════════╗\n║ 🚀 ADVANCED LOGGER v2.0.0 ║\n║ State-of-the-art Console Styling ║ \n╚══════════════════════════════════════════════════════════════════════════╝",style:'font-family: "Courier New", Consolas, Monaco, monospace; background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 15px; border-radius: 8px; font-size: 12px; line-height: 1.3;'},svg:{text:" ",style:"\n background-image: url(\"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 400 80'><defs><linearGradient id='grad' x1='0%' y1='0%' x2='100%' y2='0%'><stop offset='0%' style='stop-color:%23667eea'/><stop offset='100%' style='stop-color:%23764ba2'/></linearGradient></defs><rect width='100%' height='100%' fill='url(%23grad)' rx='8'/><text x='200' y='30' text-anchor='middle' fill='white' font-family='monospace' font-size='14' font-weight='bold'>🚀 ADVANCED LOGGER</text><text x='200' y='50' text-anchor='middle' fill='white' font-family='monospace' font-size='12'>State-of-the-art Console Styling</text><text x='200' y='65' text-anchor='middle' fill='white' font-family='monospace' font-size='10'>v2.0.0</text></svg>\");\n background-repeat: no-repeat;\n background-size: 400px 80px;\n padding: 40px 200px;\n color: transparent;\n display: inline-block;\n border-radius: 8px;\n "},animated:{text:" 🚀 ADVANCED LOGGER v2.0.0 ",style:"\n background: linear-gradient(-45deg, #667eea, #764ba2, #667eea, #764ba2);\n background-size: 400% 400%;\n color: white;\n padding: 15px 25px;\n border-radius: 10px;\n font-weight: bold;\n font-size: 14px;\n font-family: monospace;\n animation: gradientShift 3s ease infinite;\n display: inline-block;\n "}},r={default:{simple:"🚀 ADVANCED LOGGER v2.0.0 - State-of-the-art Console Styling 🚀",style:"background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; padding: 12px 20px; border-radius: 8px; font-weight: bold;"},dark:{simple:"🌙 ADVANCED LOGGER v2.0.0 - Dark Mode Console Excellence 🌙",style:"background: linear-gradient(135deg, #1a202c 0%, #2d3748 100%); color: #e2e8f0; padding: 12px 20px; border-radius: 8px; font-weight: bold; border: 1px solid #4a5568;"},neon:{simple:"⚡ ADVANCED LOGGER v2.0.0 - Cyberpunk Console Experience ⚡",style:"background: linear-gradient(135deg, #0f3460 0%, #e94560 100%); color: #00ffff; padding: 12px 20px; border-radius: 8px; font-weight: bold; text-shadow: 0 0 10px #00ffff;"},minimal:{simple:"ADVANCED LOGGER v2.0.0 - Clean Console Styling",style:"background: #f7fafc; color: #2d3748; padding: 8px 16px; border: 1px solid #e2e8f0; border-radius: 4px; font-weight: 500;"},light:{simple:"☀️ ADVANCED LOGGER v2.0.0 - Bright Console Styling ☀️",style:"background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); color: #495057; padding: 12px 20px; border-radius: 8px; font-weight: bold; border: 1px solid #dee2e6;"},cyberpunk:{simple:"🤖 ADVANCED LOGGER v2.0.0 - Neural Console Interface 🤖",style:"background: linear-gradient(135deg, #0d1b2a 0%, #415a77 100%); color: #00d4aa; padding: 12px 20px; border-radius: 8px; font-weight: bold; text-shadow: 0 0 10px #00d4aa; border: 1px solid #00d4aa;"}};function displayInitBanner(e){const o=e||function(){const e=navigator.userAgent,o=/Chrome/.test(e),t=/Firefox/.test(e),r=/Safari/.test(e)&&!/Chrome/.test(e),n=!!document.createElementNS&&!!document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect;return"undefined"!=typeof document&&"animationName"in document.createElement("div").style&&o?"animated":n&&(o||t)?"svg":o||t?"unicode":r?"ascii":"simple"}(),r=t[o];if("animated"===o){const e=document.createElement("style");e.textContent="\n @keyframes gradientShift {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n ",document.head.appendChild(e)}console.log(`%c${r.text}`,r.style),console.group("%c✨ Features","background: #f8f9fa; color: #495057; padding: 4px 8px; border-radius: 4px; font-weight: bold;"),["🎨 Advanced CSS Console Styling","📍 Automatic Stack Trace Parsing","🔧 Scoped Loggers & Prefixes","⚡ Performance Timers","🎯 Verbosity Filtering","🔌 Extensible Handlers","📱 Modern TypeScript Patterns","📤 Export & Clipboard Support"].forEach(e=>{console.log(`%c${e}`,"color: #6c757d; font-size: 13px;")}),console.groupEnd(),console.log("")}function createStyledOutput(o,t,r,n,a){const i=t[o],s=e.formatTimestamp(),l=(new e.StyleBuilder).color("#666").size("11px").font("Monaco, Consolas, monospace").build(),c=(new e.StyleBuilder).bg(i.background).color(i.color).border(i.border).shadow(i.shadow).padding("2px 8px").rounded("4px").bold().font("Monaco, Consolas, monospace").size("12px").build(),d=(new e.StyleBuilder).bg("#2d3748").color("#e2e8f0").padding("2px 6px").rounded("3px").bold().font("Monaco, Consolas, monospace").size("11px").build(),f=(new e.StyleBuilder).color("#2d3748").font("system-ui, -apple-system, sans-serif").size("14px").build(),p=(new e.StyleBuilder).color("#718096").size("11px").font("Monaco, Consolas, monospace").build();let g=`%c${s.slice(11,23)} %c${i.emoji} ${i.label}`;const m=[l,c];return r&&(g+=` %c${r}`,m.push(d)),g+=` %c${n}`,m.push(f),a&&(g+=` %c(${a.file}:${a.line}:${a.column})`,m.push(p)),[g,...m]}function escapeHtml(e){const o=document.createElement("div");return o.textContent=e,o.innerHTML}class ExportLogHandler{buffer=[];maxSize;groupDepth=0;currentGroup;constructor(o=e.BUFFER_LIMITS.DEFAULT_SIZE){this.maxSize=Math.min(Math.max(o,e.BUFFER_LIMITS.MIN_SIZE),e.BUFFER_LIMITS.MAX_SIZE)}handle(e,o,t,r){const n={id:`${Date.now()}-${Math.random().toString(36).substr(2,9)}`,timestamp:r.timestamp,level:e,prefix:r.prefix,message:o,args:t,location:r.stackInfo,groupInfo:this.groupDepth>0?{depth:this.groupDepth,groupName:this.currentGroup}:void 0};this.buffer.push(n),this.buffer.length>this.maxSize&&this.buffer.shift()}setGroupInfo(e,o){this.groupDepth=e,this.currentGroup=o}getBufferStats(){const e=this.buffer.reduce((e,o)=>{const t=e[o.level]?e[o.level]:0;return e[o.level]=t+1,e},{});let o,t;if(this.buffer.length>0){const e=this.buffer[0],r=this.buffer[this.buffer.length-1];e&&e.timestamp&&(o=new Date(e.timestamp)),r&&r.timestamp&&(t=new Date(r.timestamp))}return{size:this.buffer.length,maxSize:this.maxSize,usage:this.buffer.length/this.maxSize*100,oldestLog:o,newestLog:t,levelCounts:{debug:e.debug?e.debug:0,info:e.info?e.info:0,warn:e.warn?e.warn:0,error:e.error?e.error:0,critical:e.critical?e.critical:0}}}clearBuffer(){this.buffer=[]}setBufferSize(o){this.maxSize=Math.min(Math.max(o,e.BUFFER_LIMITS.MIN_SIZE),e.BUFFER_LIMITS.MAX_SIZE),this.buffer.length>this.maxSize&&(this.buffer=this.buffer.slice(-this.maxSize))}filterLogs(o={}){let t=[...this.buffer];if(o.levels?.length&&(t=t.filter(e=>o.levels.includes(e.level))),o.prefixes?.length&&(t=t.filter(e=>e.prefix&&o.prefixes.includes(e.prefix))),o.excludePrefixes?.length&&(t=t.filter(e=>!e.prefix||!o.excludePrefixes.includes(e.prefix))),o.since){const r=e.parseTimeInput(o.since);t=t.filter(e=>new Date(e.timestamp)>=r)}if(o.until){const r=e.parseTimeInput(o.until);t=t.filter(e=>new Date(e.timestamp)<=r)}if(o.withStackTrace&&(t=t.filter(e=>e.location)),o.errorsOnly&&(t=t.filter(e=>"error"===e.level||"critical"===e.level)),o.search){const e=o.search.toLowerCase();t=t.filter(o=>o.message.toLowerCase().includes(e)||o.args.some(o=>String(o).toLowerCase().includes(e)))}return o.last&&(t=t.slice(-o.last)),o.first&&(t=t.slice(0,o.first)),t}exportJSON(e,o){const t=e.map(e=>({timestamp:e.timestamp,level:e.level,prefix:e.prefix,message:e.message,...o.minimal?{}:{args:e.args.slice(1),location:e.location,groupInfo:e.groupInfo}}));return o.compact?JSON.stringify(t):JSON.stringify(t,null,2)}exportCSV(o,t){const r=t.minimal?["Timestamp","Level","Prefix","Message"]:["Timestamp","Level","Prefix","Message","File","Line","Args"],n=o.map(o=>{const r=[e.formatDisplayTime(new Date(o.timestamp),"full"),o.level.toUpperCase(),o.prefix||"",`"${o.message.replace(/"/g,'""')}"`];return t.minimal||r.push(o.location?.file||"",o.location?.line?.toString()||"",`"${function(e){try{return JSON.stringify(e,(e,o)=>"function"==typeof o?"[Function]":o instanceof Error?`[Error: ${o.message}]`:o instanceof Date?o.toISOString():void 0===o?"[undefined]":o,2)}catch(o){return String(e)}}(o.args.slice(1)).replace(/"/g,'""')}"`),r});return[r.join(","),...n.map(e=>e.join(","))].join("\n")}exportMarkdown(o,t){const r=/* @__PURE__ */new Date;let n=`# Log Export - ${e.formatDisplayTime(r,"full")}\n\n`;if(!t.minimal){const e=this.getBufferStats();n+="## Summary\n",n+=`- **Total logs**: ${o.length}\n`,n+=`- **Errors**: ${e.levelCounts.error+e.levelCounts.critical}\n`,n+=`- **Warnings**: ${e.levelCounts.warn}\n\n`}if("level"===t.groupBy){const t=o.reduce((e,o)=>{const t=o.level;e[t]||(e[t]=[]);const r=e[t];return r&&r.push(o),e},{});Object.entries(t).forEach(([o,t])=>{const r=this.getLevelEmoji(o);n+=`## ${r} ${o.toUpperCase()} (${t.length})\n\n`,t.forEach(o=>{const t=e.formatDisplayTime(new Date(o.timestamp),"time-only"),r=o.location?` (${o.location.file}:${o.location.line})`:"",a=o.prefix?` **${o.prefix}**:`:"";n+=`- \`${t}\`${a} ${o.message}${r}\n`}),n+="\n"})}else n+="## Logs\n\n",o.forEach(o=>{const t=e.formatDisplayTime(new Date(o.timestamp),"time-only"),r=this.getLevelEmoji(o.level),a=o.location?` (${o.location.file}:${o.location.line})`:"",i=o.prefix?` **${o.prefix}**:`:"";n+=`- \`${t}\` ${r}${i} ${o.message}${a}\n`});return n}exportPlain(o,t){return o.map(o=>{const r=e.formatDisplayTime(new Date(o.timestamp),t.minimal?"time-only":"short"),n=o.level.toUpperCase().padEnd(8),a=o.prefix?`[${o.prefix}] `:"",i=!t.minimal&&o.location?` (${o.location.file}:${o.location.line})`:"";return`${r} ${n} ${a}${o.message}${i}`}).join("\n")}exportHTML(o,t){const r=`Log Export - ${e.formatDisplayTime(/* @__PURE__ */new Date,"full")}`;let n=`<!DOCTYPE html>\n<html lang="en">\n<head>\n <meta charset="UTF-8">\n <meta name="viewport" content="width=device-width, initial-scale=1.0">\n <title>${r}</title>\n <style>\n body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; margin: 20px; line-height: 1.6; }\n .header { border-bottom: 2px solid #ddd; padding-bottom: 20px; margin-bottom: 20px; }\n .log-entry { margin: 5px 0; padding: 8px; border-radius: 4px; font-family: 'Monaco', 'Consolas', monospace; }\n .timestamp { color: #666; font-size: 0.9em; }\n .level { font-weight: bold; padding: 2px 6px; border-radius: 3px; margin: 0 8px; }\n .prefix { background: #2d3748; color: #e2e8f0; padding: 2px 6px; border-radius: 3px; margin: 0 8px; }\n .location { color: #718096; font-size: 0.9em; }\n .debug { background: #f0f4ff; }\n .info { background: #f0f9ff; }\n .warn { background: #fffbeb; }\n .error { background: #fef2f2; }\n .critical { background: #fef2f2; border-left: 4px solid #dc2626; }\n .level.debug { background: #667eea; color: white; }\n .level.info { background: #74b9ff; color: white; }\n .level.warn { background: #fdcb6e; color: #2d3436; }\n .level.error { background: #e84393; color: white; }\n .level.critical { background: #ff3838; color: white; }\n </style>\n</head>\n<body>\n <div class="header">\n <h1>${r}</h1>\n <p>Generated by Advanced Logger v2.0.0</p>\n </div>\n <div class="logs">`;return o.forEach(o=>{const t=e.formatDisplayTime(new Date(o.timestamp),"full"),r=o.location?` <span class="location">(${escapeHtml(o.location.file)}:${o.location.line})</span>`:"",a=o.prefix?` <span class="prefix">${escapeHtml(o.prefix)}</span>`:"";n+=`\n <div class="log-entry ${o.level}">\n <span class="timestamp">${t}</span>\n <span class="level ${o.level}">${o.level.toUpperCase()}</span>\n ${a}\n <span class="message">${escapeHtml(o.message)}</span>\n ${r}\n </div>`}),n+="\n </div>\n</body>\n</html>",n}getLevelEmoji(e){return{debug:"🐞",info:"ℹ️",warn:"⚠️",error:"❌",critical:"🔥"}[e]||""}export(e,o={},t={}){const r=this.filterLogs(o);let n;switch(e){case"json":n=this.exportJSON(r,t);break;case"csv":n=this.exportCSV(r,t);break;case"markdown":n=this.exportMarkdown(r,t);break;case"plain":n=this.exportPlain(r,t);break;case"html":n=this.exportHTML(r,t);break;default:throw new Error(`Unsupported export format: ${e}`)}return{format:e,data:n,metadata:{totalLogs:this.buffer.length,filteredLogs:r.length,exportedAt:/* @__PURE__ */(new Date).toISOString(),filters:o,options:t}}}async copyToClipboard(e,o={},t={}){const r=this.export(e,o,t);try{if(navigator.clipboard&&window.isSecureContext)return await navigator.clipboard.writeText(r.data),!0;{const e=document.createElement("textarea");e.value=r.data,e.style.position="fixed",e.style.opacity="0",document.body.appendChild(e),e.focus(),e.select();const o=document.execCommand("copy");return document.body.removeChild(e),o}}catch(n){return console.error("Failed to copy to clipboard:",n),!1}}getAllLogs(){return[...this.buffer]}async saveToFile(e,o={},t={}){try{const r=this.export(e,o,t),n=new Blob([r.data],{type:this.getMimeType(e)}),a=URL.createObjectURL(n),i=document.createElement("a"),s=this.generateFilename(e,o);return i.href=a,i.download=s,i.style.display="none",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(a),!0}catch(r){return console.error("Failed to save file:",r),!1}}getMimeType(e){return{json:"application/json",csv:"text/csv",markdown:"text/markdown",plain:"text/plain",html:"text/html"}[e]||"text/plain"}generateFilename(e,o){const t=/* @__PURE__ */(new Date).toISOString().replace(/[:.]/g,"-").slice(0,-5);return`logs${1===o.prefixes?.length?`_${o.prefixes[0]}`:""}_${t}.${"markdown"===e?"md":e}`}async streamToEndpoint(e,o={},t={}){try{const r=this.filterLogs(o),n=t.batchSize||100,a=t.format||"json";for(let o=0;o<r.length;o+=n){const i=r.slice(o,o+n),s=(this.export(a,{},{compact:!0}),{"Content-Type":"application/json"});t.apiKey&&(s.Authorization=`Bearer ${t.apiKey}`);const l=await fetch(e,{method:"POST",headers:s,body:JSON.stringify({logs:i,metadata:{batchIndex:Math.floor(o/n),totalBatches:Math.ceil(r.length/n),timestamp:/* @__PURE__ */(new Date).toISOString()}})});if(!l.ok)throw new Error(`HTTP ${l.status}: ${l.statusText}`)}return!0}catch(r){return console.error("Failed to stream logs:",r),!1}}exportWithMetadata(e,o={},t={}){const r=this.export(e,o,t),n=this.getBufferStats();return{...r,metadata:{...r.metadata,bufferStats:n,performance:{memoryUsage:this.estimateMemoryUsage(),processingTime:Date.now()},system:{userAgent:"undefined"!=typeof navigator?navigator.userAgent:"Node.js",timestamp:/* @__PURE__ */(new Date).toISOString(),timezone:Intl.DateTimeFormat().resolvedOptions().timeZone}}}}estimateMemoryUsage(){const e=this.buffer[0];return e?JSON.stringify(e).length*this.buffer.length:0}}class CommandProcessor{commands=/* @__PURE__ */new Map;registerCommand(e){this.commands.set(e.name,e)}getCommands(){return Array.from(this.commands.values())}getCommand(e){return this.commands.get(e)}async processCommand(e,o){if(!e.startsWith("/"))return void o.error("Invalid command. Commands must start with /");const t=e.slice(1).split(" "),r=t[0]||"",n=t.slice(1).join(" "),a=this.commands.get(r);if(a)try{await a.execute(n||"",o)}catch(i){o.error(`Command '${r}' failed:`,i)}else o.error(`Unknown command: ${r}. Type /help for available commands.`)}getSuggestions(e){return Array.from(this.commands.keys()).filter(o=>o.startsWith(e))}}class ConfigCommand{name="config";description="Show or update logger configuration";usage="/config [json|key=value,...]";execute(e,o){if(e)try{if(e.startsWith("{")){const t=JSON.parse(e);this.applyConfig(t,o)}else{const t=e.split(",").map(e=>e.trim().split("=")),r={};t.forEach(([e,o])=>{e&&o&&(r[e.trim()]=o.trim().replace(/["']/g,""))}),this.applyConfig(r,o)}}catch(t){o.error("Invalid config format. Use JSON or key=value pairs:",t),o.info('Examples: /config {"theme":"dark"} or /config theme=neon,verbosity=debug')}else this.showStatus(o)}showStatus(e){const o={theme:e.getConfig().theme||"default",verbosity:e.getConfig().verbosity,colors:e.getConfig().enableColors,timestamps:e.getConfig().enableTimestamps,stackTrace:e.getConfig().enableStackTrace,globalPrefix:e.getConfig().globalPrefix||"none",bannerType:e.getConfig().bannerType||"simple",handlers:e.getHandlers().length};e.group("⚙️ Logger Configuration"),e.table(o),e.groupEnd()}applyConfig(e,o){const t=["theme","verbosity","enableColors","enableTimestamps","enableStackTrace","globalPrefix","bannerType"],r=[];Object.entries(e).forEach(([e,n])=>{t.includes(e)?"theme"===e&&"string"==typeof n?(o.setTheme(n),r.push(`${e}=${n}`)):"bannerType"===e&&"string"==typeof n?(o.setBannerType(n),r.push(`${e}=${n}`)):"verbosity"===e?(o.setVerbosity(n),r.push(`${e}=${n}`)):"globalPrefix"===e?(o.setGlobalPrefix(n),r.push(`${e}=${n}`)):(o.updateConfig({[e]:n}),r.push(`${e}=${n}`)):o.warn(`Invalid config key: ${e}`)}),r.length>0&&o.success(`Configuration updated: ${r.join(", ")}`)}}class ThemesCommand{name="themes";description="Show available theme presets";usage="/themes";execute(t,r){r.group("🎨 Available Themes"),Object.keys(o).forEach(t=>{const r=o[t],n=(new e.StyleBuilder).bg(r.info.background).color(r.info.color).padding("4px 8px").rounded("4px").border(r.info.border).build();console.log(`%c${t}`,n,`- ${t} theme preview`)}),r.groupEnd()}}class BannersCommand{name="banners";description="Show available banner types";usage="/banners";execute(e,o){o.group("🖼️ Available Banner Types"),Object.keys(t).forEach(e=>{const o=t[e];console.log(`%c${e}`,"font-weight: bold; color: #667eea;"),console.log("%cPreview:","color: #666; font-size: 12px;"),"simple"===e?console.log(`%c${o.text}`,o.style):"ascii"===e?console.log(`%c${o.text.split("\n").slice(1,4).join("\n")}...`,"font-family: monospace; color: #667eea; font-size: 10px;"):"unicode"===e?console.log(`%c${o.text}`,o.style):console.log(`%c${e} banner`,"color: #666; font-style: italic;")}),o.groupEnd()}}class BannerCommand{name="banner";description="Change or show current banner type";usage="/banner [type]";execute(e,o){e?e in t?(o.setBannerType(e),o.showBanner()):o.error(`Invalid banner type: ${e}. Available: ${Object.keys(t).join(", ")}`):o.showBanner()}}class StatusCommand{name="status";description="Show current logger status and configuration";usage="/status";execute(e,o){const t=o.getConfig(),r={theme:t.theme?t.theme:"default",verbosity:t.verbosity,colors:t.enableColors,timestamps:t.enableTimestamps,stackTrace:t.enableStackTrace,globalPrefix:t.globalPrefix?t.globalPrefix:"none",bannerType:t.bannerType?t.bannerType:"simple",handlers:o.getHandlers().length,bufferSize:t.bufferSize?t.bufferSize:1e3};o.group("⚙️ Logger Configuration"),o.table(r),o.groupEnd();const n=o.getExportHandler();if(n){const e=n.getBufferStats();o.group("📊 Buffer Statistics"),o.table({size:`${e.size}/${e.maxSize}`,usage:`${e.usage.toFixed(1)}%`,oldestLog:e.oldestLog?e.oldestLog.toISOString():"None",newestLog:e.newestLog?e.newestLog.toISOString():"None",errorCount:e.levelCounts.error+e.levelCounts.critical,warningCount:e.levelCounts.warn}),o.groupEnd()}}}class ResetCommand{name="reset";description="Reset logger configuration to defaults";usage="/reset";execute(e,o){o.resetConfig()}}class DemoCommand{name="demo";description="Show comprehensive feature demonstration";usage="/demo";execute(e,o){o.group("🎪 Advanced Logger Demo"),o.debug("Debug message with detailed information"),o.info("Informational message about system state"),o.warn("Warning about deprecated feature"),o.error("Error processing user request"),o.success("Operation completed successfully"),o.critical("Critical system failure detected"),o.group("📊 Advanced Features Demo"),o.table([{feature:"Styled Console",status:"✅ Active",performance:"Excellent"},{feature:"Theme System",status:"✅ Active",performance:"Great"},{feature:"CLI Interface",status:"✅ Active",performance:"Good"},{feature:"Export System",status:"✅ Active",performance:"Excellent"}]),o.time("demo-operation"),setTimeout(()=>{o.timeEnd("demo-operation")},100),o.logWithSVG("SVG Demo"),o.logAnimated("🌟 Animated Logger Demo 🌟",2),o.groupEnd(),o.groupEnd(),o.info("Demo completed! Check the console for styled output.")}}function parseArguments(o){const t={},r={};let n;if(!o.trim())return{filters:t,options:r};const a=o.match(/(?:[^\s"]+|"[^"]*")+/g)||[];for(let i=0;i<a.length;i++){const o=a[i];if(o)if(0!==i||o.startsWith("--")||!(o in e.EXPORT_FORMATS)){if(o.startsWith("--")){const[e,n]=o.slice(2).split("=");switch(e){case"level":case"levels":n&&(t.levels=n.split(",").map(e=>e.trim()));break;case"since":n&&(t.since=n);break;case"until":n&&(t.until=n);break;case"prefix":case"prefixes":n&&(t.prefixes=n.split(",").map(e=>e.trim()));break;case"exclude-prefix":case"exclude-prefixes":n&&(t.excludePrefixes=n.split(",").map(e=>e.trim()));break;case"last":n&&(t.last=parseInt(n,10));break;case"first":n&&(t.first=parseInt(n,10));break;case"search":n&&(t.search=n.replace(/['"]/g,""));break;case"with-stack":t.withStackTrace=!0;break;case"errors-only":t.errorsOnly=!0;break;case"group-by":n&&(t.groupBy=n,r.groupBy=n);break;case"minimal":r.minimal=!0;break;case"compact":r.compact=!0;break;case"styled":r.styled=!0}}}else n=o}return{filters:t,options:r,format:n}}class ExportCommand{name="export";description="Export logs to various formats";usage="/export <format> [--filter=value] [--option]";execute(o,t){const r=t.getExportHandler();if(!r)return void t.error("Export handler not available. Make sure ExportLogHandler is registered.");const{filters:n,options:a,format:i}=parseArguments(o);if(!i)return t.error("Format required. Available formats: "+Object.keys(e.EXPORT_FORMATS).join(", ")),t.info("Usage: /export <format> [--filter=value]"),void t.info("Example: /export json --level=error,warn --last=50");try{const e=r.export(i,n,a);t.success(`✅ Export completed: ${e.metadata.filteredLogs} logs exported in ${i} format`),e.data.length<1e3?(t.group(`📄 Preview (${i.toUpperCase()})`),console.log(e.data),t.groupEnd()):t.info(`📄 Export size: ${(e.data.length/1024).toFixed(2)}KB`),t.table({format:e.format,totalLogs:e.metadata.totalLogs,filtered:e.metadata.filteredLogs,exported:e.metadata.exportedAt})}catch(s){t.error("Export failed:",s)}}}class CopyCommand{name="copy";description="Copy logs to clipboard";usage="/copy <format> [--filter=value] [--option]";async execute(o,t){const r=t.getExportHandler();if(!r)return void t.error("Export handler not available. Make sure ExportLogHandler is registered.");const{filters:n,options:a,format:i}=parseArguments(o);if(!i)return t.error("Format required. Available formats: "+Object.keys(e.EXPORT_FORMATS).join(", ")),t.info("Usage: /copy <format> [--filter=value]"),void t.info("Example: /copy plain --level=error --last=25");try{if(await r.copyToClipboard(i,n,a)){const e=r.export(i,n,a);t.success(`📋 Copied ${e.metadata.filteredLogs} logs to clipboard (${i} format)`)}else t.error("Failed to copy to clipboard. Browser may not support clipboard API.")}catch(s){t.error("Copy failed:",s)}}}class BufferSizeCommand{name="buffer-size";description="Set log buffer size";usage="/buffer-size <size>";execute(e,o){const t=o.getExportHandler();if(!t)return void o.error("Export handler not available.");const r=parseInt(e.trim(),10);if(isNaN(r)||r<=0)return o.error("Invalid buffer size. Must be a positive number."),void o.info("Example: /buffer-size 2000");t.setBufferSize(r),o.success(`Buffer size set to ${r}`)}}class ClearBufferCommand{name="clear-buffer";description="Clear the log buffer";usage="/clear-buffer";execute(e,o){const t=o.getExportHandler();if(!t)return void o.error("Export handler not available.");const r=t.getBufferStats();t.clearBuffer(),o.success(`✅ Buffer cleared. Removed ${r.size} log entries.`)}}class BufferInfoCommand{name="buffer-info";description="Show buffer statistics and information";usage="/buffer-info";execute(e,o){const t=o.getExportHandler();if(!t)return void o.error("Export handler not available.");const r=t.getBufferStats();o.group("📊 Buffer Information"),o.table({size:`${r.size}/${r.maxSize}`,usage:`${r.usage.toFixed(1)}%`,oldestLog:r.oldestLog?.toLocaleString()||"None",newestLog:r.newestLog?.toLocaleString()||"None"}),o.group("📈 Log Level Counts"),o.table(r.levelCounts),o.groupEnd(),o.groupEnd()}}class HelpCommand{name="help";description="Show CLI help and available commands";usage="/help [command]";execute(o,t){const r=(new e.StyleBuilder).bg("linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%)").color("#495057").padding("15px 20px").rounded("8px").border("1px solid #dee2e6").font("Monaco, Consolas, monospace").size("13px").build();console.log('%c\n╭─────────────── ADVANCED LOGGER CLI COMMANDS ─────────────────╮\n│ │\n│ CONFIGURATION │\n│ /config Show current configuration │\n│ /config {json} Apply JSON configuration │\n│ /config key=val Apply key-value configuration │\n│ /themes Show available themes │\n│ /banners Show available banner types │\n│ /banner [type] Change/show banner type │\n│ /status Show logger status & buffer stats │\n│ /demo Show feature demonstration │\n│ /reset Reset to default configuration │\n│ │\n│ EXPORT & CLIPBOARD │\n│ /export <format> Export logs (json|csv|md|plain|html) │\n│ /copy <format> Copy logs to clipboard │\n│ /buffer-size N Set log buffer size │\n│ /buffer-info Show buffer statistics │\n│ /clear-buffer Clear stored logs │\n│ │\n│ EXPORT FILTERS (for export/copy commands) │\n│ --level error,warn Filter by log levels │\n│ --since 2h Logs from last 2 hours │\n│ --until 1h Logs until 1 hour ago │\n│ --prefix API,DB Filter by prefixes │\n│ --exclude-prefix INT Exclude prefixes │\n│ --last 50 Last 50 logs only │\n│ --first 25 First 25 logs only │\n│ --search "error" Search in log messages │\n│ --with-stack Only logs with stack traces │\n│ --errors-only Only error + critical logs │\n│ --group-by level Group by level/prefix/hour │\n│ │\n│ EXPORT OPTIONS │\n│ --minimal Minimal output format │\n│ --compact Remove extra whitespace │\n│ --styled Include styling (HTML format) │\n│ │\n├──────────────────── CONFIGURATION OPTIONS ─────────────────┤\n│ │\n│ theme: default | dark | light | neon | minimal | cyberpunk│\n│ bannerType: simple | ascii | unicode | svg | animated │\n│ verbosity: debug | info | warn | error | critical | silent│\n│ enableColors: true | false │\n│ enableTimestamps: true | false │\n│ enableStackTrace: true | false │\n│ globalPrefix: "string" │\n│ bufferSize: number (50-10000) │\n│ │\n├──────────────────────── EXAMPLES ──────────────────────────┤\n│ │\n│ Basic Configuration: │\n│ /config {"theme":"dark","verbosity":"debug"} │\n│ /config theme=neon,bufferSize=2000 │\n│ /banner animated Change to animated banner │\n│ │\n│ Export Examples: │\n│ /export json --level=error,warn --last=25 │\n│ /export csv --since=2h --prefix=API │\n│ /export markdown --group-by=level --errors-only │\n│ /export html --styled --since=1h │\n│ │\n│ Clipboard Examples: │\n│ /copy plain --minimal --last=10 │\n│ /copy json --search="authentication" --compact │\n│ /copy csv --since=30m --exclude-prefix=DEBUG │\n│ │\n│ Buffer Management: │\n│ /buffer-size 5000 Increase buffer to 5000 logs │\n│ /buffer-info Show detailed buffer statistics │\n│ /clear-buffer Clear all stored logs │\n│ │\n│ Time Formats: │\n│ --since=2h 2 hours ago │\n│ --since=30m 30 minutes ago │\n│ --since=1d 1 day ago │\n│ --since="2024-01-01T10:00:00Z" Specific ISO date │\n│ │\n╰─────────────────────────────────────────────────────────────╯',r),t.group("💡 Quick Tips"),["Use /demo to see all logger features in action","Logs are automatically stored in a circular buffer for export","Export formats: JSON (structured), CSV (Excel), Markdown (readable), Plain (simple), HTML (styled)","Time filters support relative (2h, 30m) and absolute (ISO) formats",'Combine multiple filters: /export json --level=error --since=1h --search="auth"',"Use /copy for quick clipboard access instead of /export"].forEach(e=>{t.info(`• ${e}`)}),t.groupEnd()}}let n=o.default;class Logger{config;scopedPrefix;handlers=[];timers=/* @__PURE__ */new Map;groupDepth=0;exportHandler;cliProcessor;constructor(o={}){this.config={...e.DEFAULT_CONFIG,...o},this.config.bufferSize&&(this.exportHandler=new ExportLogHandler(this.config.bufferSize),this.handlers.push(this.exportHandler)),this.cliProcessor=function(){const e=new CommandProcessor;return e.registerCommand(new HelpCommand),e.registerCommand(new ConfigCommand),e.registerCommand(new ThemesCommand),e.registerCommand(new BannersCommand),e.registerCommand(new BannerCommand),e.registerCommand(new StatusCommand),e.registerCommand(new ResetCommand),e.registerCommand(new DemoCommand),e.registerCommand(new ExportCommand),e.registerCommand(new CopyCommand),e.registerCommand(new BufferSizeCommand),e.registerCommand(new ClearBufferCommand),e.registerCommand(new BufferInfoCommand),e}()}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setGlobalPrefix(e){this.config.globalPrefix=e}setVerbosity(e){this.config.verbosity=e}setTheme(e){if(e in o){if(n=o[e],this.config.theme=e,e in r){const o=r[e];console.log(`%c${o.simple}`,o.style)}this.success(`Theme changed to: ${e}`)}else this.error(`Invalid theme: ${e}. Available themes:`,Object.keys(o))}setBannerType(e){this.config.bannerType=e,this.success(`Banner type changed to: ${e}`)}resetConfig(){this.config={...e.DEFAULT_CONFIG},n=o.default,this.success("Logger configuration reset to defaults")}createScopedLogger(e){const o=new Logger(this.config);return o.scopedPrefix=e,o.handlers=[...this.handlers],o.exportHandler=this.exportHandler,o}addHandler(e){this.handlers.push(e)}getHandlers(){return[...this.handlers]}getExportHandler(){return this.exportHandler}shouldLog(e){if("silent"===this.config.verbosity)return!1;const o={debug:0,info:1,warn:2,error:3,critical:4};return o[e]>=o[this.config.verbosity]}getEffectivePrefix(){const e=[this.config.globalPrefix,this.scopedPrefix].filter(Boolean);return e.length>0?e.join(":"):void 0}log(o,...t){if(!this.shouldLog(o))return;const r=this.config.enableStackTrace?e.parseStackTrace():null,a=this.getEffectivePrefix(),i=t.length>0?String(t[0]):"",s=t.slice(1),[l,...c]=createStyledOutput(o,n,a,i,r),d=" ".repeat(this.groupDepth)+l;s.length>0?console.log(d,...c,...s):console.log(d,...c),this.exportHandler&&this.exportHandler.setGroupInfo(this.groupDepth);const f={timestamp:e.formatTimestamp(),level:o,prefix:a,stackInfo:r||void 0};this.handlers.forEach(e=>{try{e.handle(o,i,t,f)}catch(r){console.error("Log handler failed:",r)}})}debug(...e){this.log("debug",...e)}info(...e){this.log("info",...e)}warn(...e){this.log("warn",...e)}error(...e){this.log("error",...e)}success(...o){if(!this.shouldLog("info"))return;const t=this.config.enableStackTrace?e.parseStackTrace():null,r=this.getEffectivePrefix(),a=o.length>0?String(o[0]):"",i=o.slice(1),[s,...l]=createStyledOutput("info",n,r,a,t),c=n.success;let d="✅",f="SUCCESS";c&&(c.emoji&&(d=c.emoji),c.label&&(f=c.label));const p=s.replace(/ℹ️ INFO/,`${d} ${f}`),g=" ".repeat(this.groupDepth)+p;i.length>0?console.log(g,...l,...i):console.log(g,...l);const m={timestamp:e.formatTimestamp(),level:"info",prefix:r,stackInfo:t||void 0};this.handlers.forEach(e=>{try{e.handle("info",a,o,m)}catch(t){console.error("Log handler failed:",t)}})}trace(...e){this.log("debug",...e),this.shouldLog("debug")&&console.trace(...e)}critical(...e){this.log("critical",...e)}table(o,t){if(!this.shouldLog("info"))return;const r=this.getEffectivePrefix(),n=e.StylePresets.accent().build(),a="%c📊 TABLE"+(r?` [${r}]`:"");console.log(a,n),t?console.table(o,t):console.table(o)}group(o,t=!1){const r=(new e.StyleBuilder).bg("linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%)").color("#1565c0").border("1px solid #90caf9").padding("4px 12px").rounded("6px").bold().build(),n=`%c📁 ${o}`;t?console.groupCollapsed(n,r):console.group(n,r),this.groupDepth++}groupEnd(){this.groupDepth>0&&(console.groupEnd(),this.groupDepth--)}time(o){const t={label:o,startTime:performance.now()};this.timers.set(o,t);const r=e.StylePresets.warning().build();console.log(`%c⏱️ Timer started: ${o}`,r)}timeEnd(o){const t=this.timers.get(o);if(!t)return void this.warn(`Timer '${o}' does not exist`);const r=performance.now()-t.startTime;this.timers.delete(o);const n=e.StylePresets.success().build();console.log(`%c⏱️ Timer ended: ${o} - ${r.toFixed(2)}ms`,n)}showBanner(e){displayInitBanner(e||this.config.bannerType)}logWithSVG(o,t,r={}){const{width:n=300,height:a=60,padding:i="30px 150px"}=r;let s="";s=t?`data:image/svg+xml,${encodeURIComponent(t)}`:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${n} ${a}'><defs><linearGradient id='grad' x1='0%' y1='0%' x2='100%' y2='0%'><stop offset='0%' style='stop-color:%23667eea'/><stop offset='100%' style='stop-color:%23764ba2'/></linearGradient></defs><rect width='100%' height='100%' fill='url(%23grad)' rx='4'/><text x='${n/2}' y='${a/2+5}' text-anchor='middle' fill='white' font-family='monospace' font-size='14' font-weight='bold'>${o}</text></svg>`)}`;const l=(new e.StyleBuilder).bg(`url("${s}") no-repeat center center`).padding(i).color("transparent").rounded("4px").build();console.log(`%c${o}`,l)}logAnimated(o,t=3){if(!document.getElementById("logger-animations")){const e=document.createElement("style");e.id="logger-animations",e.textContent="\n @keyframes loggerGradient {\n 0% { background-position: 0% 50%; }\n 50% { background-position: 100% 50%; }\n 100% { background-position: 0% 50%; }\n }\n ",document.head.appendChild(e)}const r=(new e.StyleBuilder).bg("linear-gradient(-45deg, #667eea, #764ba2, #667eea, #764ba2)").css("background-size","400% 400%").color("#ffffff").padding("12px 20px").rounded("8px").bold().font("Monaco, Consolas, monospace").animation(`loggerGradient ${t}s ease infinite`).display("inline-block").build();console.log(`%c${o}`,r)}logGrouped(e,o){try{let t;t=Object.groupBy?Object.groupBy(e,o):e.reduce((e,t)=>{const r=o(t);return e[r]||(e[r]=[]),e[r].push(t),e},{}),Object.entries(t).forEach(([e,o])=>{this.group(`Group: ${e}`),this.table(o),this.groupEnd()})}catch{this.info("Grouped data:",e)}}async cli(e){this.cliProcessor?await this.cliProcessor.processCommand(e,this):this.error("CLI processor not initialized")}}new Logger({verbosity:"info",enableColors:!0,enableTimestamps:!0,enableStackTrace:!0,bufferSize:1e3}),displayInitBanner(),exports.BANNER_VARIANTS=t,exports.ExportLogHandler=ExportLogHandler,exports.Logger=Logger,exports.THEME_BANNERS=r,exports.THEME_PRESETS=o,exports.displayInitBanner=displayInitBanner;
2
+ //# sourceMappingURL=Logger-PCfgYKTP.js.map