@mks2508/better-logger 2.0.1 → 3.0.0

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 (172) hide show
  1. package/.claude/settings.local.json +6 -1
  2. package/CHANGELOG.json +93 -1
  3. package/CHANGELOG.md +127 -0
  4. package/CLAUDE.md +14 -1
  5. package/README.md +111 -20
  6. package/bun.lock +333 -0
  7. package/dist/Logger.d.ts +851 -0
  8. package/dist/Logger.d.ts.map +1 -0
  9. package/dist/ScopedLogger.d.ts +57 -0
  10. package/dist/ScopedLogger.d.ts.map +1 -0
  11. package/dist/chunks/Logger-BCfx_yCK.js +2 -0
  12. package/dist/chunks/Logger-BCfx_yCK.js.map +1 -0
  13. package/dist/chunks/Logger-C126NTrD.js +4269 -0
  14. package/dist/chunks/Logger-C126NTrD.js.map +1 -0
  15. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js +33 -0
  16. package/dist/chunks/RemoteLogHandler-CjWpWZGl.js.map +1 -0
  17. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js +2 -0
  18. package/dist/chunks/RemoteLogHandler-ymkQ97xl.js.map +1 -0
  19. package/dist/chunks/environment-Ba5kShbx.js +4 -0
  20. package/dist/chunks/environment-Ba5kShbx.js.map +1 -0
  21. package/dist/chunks/environment-TI2ByCPT.js +1209 -0
  22. package/dist/chunks/environment-TI2ByCPT.js.map +1 -0
  23. package/dist/chunks/formatting-Blwy-f0W.js +2 -0
  24. package/dist/chunks/formatting-Blwy-f0W.js.map +1 -0
  25. package/dist/chunks/formatting-CuNUqGks.js +380 -0
  26. package/dist/chunks/formatting-CuNUqGks.js.map +1 -0
  27. package/dist/cli/CommandProcessor.d.ts +100 -0
  28. package/dist/cli/CommandProcessor.d.ts.map +1 -0
  29. package/dist/cli/commands/ConfigCommand.d.ts +14 -0
  30. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
  31. package/dist/cli/commands/ExportCommand.d.ts +48 -0
  32. package/dist/cli/commands/ExportCommand.d.ts.map +1 -0
  33. package/dist/cli/commands/HistoryCommand.d.ts +47 -0
  34. package/dist/cli/commands/HistoryCommand.d.ts.map +1 -0
  35. package/dist/cli/commands/StatusCommand.d.ts +30 -0
  36. package/dist/cli/commands/StatusCommand.d.ts.map +1 -0
  37. package/dist/cli/commands/ThemeCommand.d.ts +30 -0
  38. package/dist/cli/commands/ThemeCommand.d.ts.map +1 -0
  39. package/dist/cli/help.d.ts +12 -0
  40. package/dist/cli/help.d.ts.map +1 -0
  41. package/dist/cli/index.d.ts +15 -0
  42. package/dist/cli/index.d.ts.map +1 -0
  43. package/dist/constants.d.ts +227 -0
  44. package/dist/constants.d.ts.map +1 -0
  45. package/dist/core.cjs +2 -0
  46. package/dist/core.cjs.map +1 -0
  47. package/dist/core.d.ts +127 -0
  48. package/dist/core.d.ts.map +1 -0
  49. package/dist/core.js +291 -0
  50. package/dist/core.js.map +1 -0
  51. package/dist/example.d.ts +18 -0
  52. package/dist/example.d.ts.map +1 -0
  53. package/dist/exports-module.d.ts +196 -0
  54. package/dist/exports-module.d.ts.map +1 -0
  55. package/dist/exports.cjs +2 -0
  56. package/dist/exports.cjs.map +1 -0
  57. package/dist/exports.js +238 -0
  58. package/dist/exports.js.map +1 -0
  59. package/dist/handlers/AnalyticsLogHandler.d.ts +8 -0
  60. package/dist/handlers/AnalyticsLogHandler.d.ts.map +1 -0
  61. package/dist/handlers/ExportLogHandler.d.ts +100 -0
  62. package/dist/handlers/ExportLogHandler.d.ts.map +1 -0
  63. package/dist/handlers/FileLogHandler.d.ts +33 -0
  64. package/dist/handlers/FileLogHandler.d.ts.map +1 -0
  65. package/dist/handlers/RemoteLogHandler.d.ts +11 -0
  66. package/dist/handlers/RemoteLogHandler.d.ts.map +1 -0
  67. package/dist/handlers/index.d.ts +8 -0
  68. package/dist/handlers/index.d.ts.map +1 -0
  69. package/dist/hooks/HookManager.d.ts +21 -0
  70. package/dist/hooks/HookManager.d.ts.map +1 -0
  71. package/dist/hooks/index.d.ts +2 -0
  72. package/dist/hooks/index.d.ts.map +1 -0
  73. package/dist/index.cjs +2 -0
  74. package/dist/index.cjs.map +1 -0
  75. package/dist/index.d.ts +144 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +478 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/main.d.ts +2 -0
  80. package/dist/main.d.ts.map +1 -0
  81. package/dist/serializers/SerializerRegistry.d.ts +16 -0
  82. package/dist/serializers/SerializerRegistry.d.ts.map +1 -0
  83. package/dist/serializers/index.d.ts +2 -0
  84. package/dist/serializers/index.d.ts.map +1 -0
  85. package/dist/styling/LogStyleBuilder.d.ts +146 -0
  86. package/dist/styling/LogStyleBuilder.d.ts.map +1 -0
  87. package/dist/styling/SemanticStyles.d.ts +178 -0
  88. package/dist/styling/SemanticStyles.d.ts.map +1 -0
  89. package/dist/styling/SmartPresets.d.ts +22 -0
  90. package/dist/styling/SmartPresets.d.ts.map +1 -0
  91. package/dist/styling/StyleBuilder.d.ts +140 -0
  92. package/dist/styling/StyleBuilder.d.ts.map +1 -0
  93. package/dist/styling/StyleCache.d.ts +42 -0
  94. package/dist/styling/StyleCache.d.ts.map +1 -0
  95. package/dist/styling/banners.d.ts +42 -0
  96. package/dist/styling/banners.d.ts.map +1 -0
  97. package/dist/styling/index.d.ts +10 -0
  98. package/dist/styling/index.d.ts.map +1 -0
  99. package/dist/styling/themes.d.ts +7 -0
  100. package/dist/styling/themes.d.ts.map +1 -0
  101. package/dist/styling-module.d.ts +178 -0
  102. package/dist/styling-module.d.ts.map +1 -0
  103. package/dist/styling.cjs +2 -0
  104. package/dist/styling.cjs.map +1 -0
  105. package/dist/styling.js +146 -0
  106. package/dist/styling.js.map +1 -0
  107. package/dist/terminal/terminal-renderer.d.ts +63 -0
  108. package/dist/terminal/terminal-renderer.d.ts.map +1 -0
  109. package/dist/transports/ConsoleTransport.d.ts +9 -0
  110. package/dist/transports/ConsoleTransport.d.ts.map +1 -0
  111. package/dist/transports/FileTransport.d.ts +15 -0
  112. package/dist/transports/FileTransport.d.ts.map +1 -0
  113. package/dist/transports/HttpTransport.d.ts +16 -0
  114. package/dist/transports/HttpTransport.d.ts.map +1 -0
  115. package/dist/transports/TransportManager.d.ts +14 -0
  116. package/dist/transports/TransportManager.d.ts.map +1 -0
  117. package/dist/transports/index.d.ts +5 -0
  118. package/dist/transports/index.d.ts.map +1 -0
  119. package/dist/types/core.d.ts +272 -0
  120. package/dist/types/core.d.ts.map +1 -0
  121. package/dist/types/handlers.d.ts +85 -0
  122. package/dist/types/handlers.d.ts.map +1 -0
  123. package/dist/types/hooks.d.ts +36 -0
  124. package/dist/types/hooks.d.ts.map +1 -0
  125. package/dist/types/index.d.ts +11 -0
  126. package/dist/types/index.d.ts.map +1 -0
  127. package/dist/types/serializers.d.ts +25 -0
  128. package/dist/types/serializers.d.ts.map +1 -0
  129. package/dist/types/transports.d.ts +47 -0
  130. package/dist/types/transports.d.ts.map +1 -0
  131. package/dist/utils/adapter.d.ts +48 -0
  132. package/dist/utils/adapter.d.ts.map +1 -0
  133. package/dist/utils/ansi-colors.d.ts +156 -0
  134. package/dist/utils/ansi-colors.d.ts.map +1 -0
  135. package/dist/utils/environment-detector.d.ts +35 -0
  136. package/dist/utils/environment-detector.d.ts.map +1 -0
  137. package/dist/utils/environment.d.ts +47 -0
  138. package/dist/utils/environment.d.ts.map +1 -0
  139. package/dist/utils/formatting.d.ts +58 -0
  140. package/dist/utils/formatting.d.ts.map +1 -0
  141. package/dist/utils/index.d.ts +8 -0
  142. package/dist/utils/index.d.ts.map +1 -0
  143. package/dist/utils/opentui-detection.d.ts +34 -0
  144. package/dist/utils/opentui-detection.d.ts.map +1 -0
  145. package/dist/utils/output.d.ts +46 -0
  146. package/dist/utils/output.d.ts.map +1 -0
  147. package/dist/utils/stackTrace.d.ts +6 -0
  148. package/dist/utils/stackTrace.d.ts.map +1 -0
  149. package/dist/utils/timestamps.d.ts +20 -0
  150. package/dist/utils/timestamps.d.ts.map +1 -0
  151. package/dist/vite.svg +1 -0
  152. package/docs/API.md +227 -0
  153. package/package.json +1 -1
  154. package/packages/core/package.json +1 -1
  155. package/src/Logger.ts +391 -102
  156. package/src/ScopedLogger.ts +78 -318
  157. package/src/hooks/HookManager.ts +177 -0
  158. package/src/hooks/index.ts +1 -0
  159. package/src/index.ts +77 -2
  160. package/src/serializers/SerializerRegistry.ts +173 -0
  161. package/src/serializers/index.ts +1 -0
  162. package/src/styling/StyleCache.ts +131 -0
  163. package/src/transports/ConsoleTransport.ts +28 -0
  164. package/src/transports/FileTransport.ts +53 -0
  165. package/src/transports/HttpTransport.ts +56 -0
  166. package/src/transports/TransportManager.ts +130 -0
  167. package/src/transports/index.ts +4 -0
  168. package/src/types/core.ts +46 -0
  169. package/src/types/hooks.ts +45 -0
  170. package/src/types/index.ts +39 -1
  171. package/src/types/serializers.ts +30 -0
  172. package/src/types/transports.ts +52 -0
@@ -0,0 +1,33 @@
1
+ class RemoteLogHandler {
2
+ endpoint;
3
+ apiKey;
4
+ constructor(endpoint, apiKey) {
5
+ this.endpoint = endpoint;
6
+ this.apiKey = apiKey;
7
+ }
8
+ async handle(level, message, args, metadata) {
9
+ try {
10
+ const payload = {
11
+ timestamp: metadata.timestamp,
12
+ level,
13
+ message,
14
+ prefix: metadata.prefix,
15
+ location: metadata.stackInfo,
16
+ additional: args.slice(1)
17
+ };
18
+ await fetch(this.endpoint, {
19
+ method: "POST",
20
+ headers: {
21
+ "Content-Type": "application/json",
22
+ ...this.apiKey && { "Authorization": `Bearer ${this.apiKey}` }
23
+ },
24
+ body: JSON.stringify(payload)
25
+ });
26
+ } catch (error) {
27
+ }
28
+ }
29
+ }
30
+ export {
31
+ RemoteLogHandler as R
32
+ };
33
+ //# sourceMappingURL=RemoteLogHandler-CjWpWZGl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteLogHandler-CjWpWZGl.js","sources":["../../src/handlers/RemoteLogHandler.ts"],"sourcesContent":["/**\n * @fileoverview Remote log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Remote log handler for sending logs to external services\n */\nexport class RemoteLogHandler implements ILogHandler {\n private endpoint: string;\n private apiKey?: string;\n\n constructor(endpoint: string, apiKey?: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n async handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): Promise<void> {\n try {\n const payload = {\n timestamp: metadata.timestamp,\n level,\n message,\n prefix: metadata.prefix,\n location: metadata.stackInfo,\n additional: args.slice(1),\n };\n\n await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(this.apiKey && { 'Authorization': `Bearer ${this.apiKey}` }),\n },\n body: JSON.stringify(payload),\n });\n } catch (error) {\n // Silently fail to avoid infinite logging loops\n }\n }\n}"],"names":[],"mappings":"AASO,MAAM,iBAAwC;AAAA,EACzC;AAAA,EACA;AAAA,EAER,YAAY,UAAkB,QAAiB;AAC3C,SAAK,WAAW;AAChB,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,MAAM,OAAO,OAAiB,SAAiB,MAAa,UAAsC;AAC9F,QAAI;AACA,YAAM,UAAU;AAAA,QACZ,WAAW,SAAS;AAAA,QACpB;AAAA,QACA;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,UAAU,SAAS;AAAA,QACnB,YAAY,KAAK,MAAM,CAAC;AAAA,MAAA;AAG5B,YAAM,MAAM,KAAK,UAAU;AAAA,QACvB,QAAQ;AAAA,QACR,SAAS;AAAA,UACL,gBAAgB;AAAA,UAChB,GAAI,KAAK,UAAU,EAAE,iBAAiB,UAAU,KAAK,MAAM,GAAA;AAAA,QAAG;AAAA,QAElE,MAAM,KAAK,UAAU,OAAO;AAAA,MAAA,CAC/B;AAAA,IACL,SAAS,OAAO;AAAA,IAEhB;AAAA,EACJ;AACJ;"}
@@ -0,0 +1,2 @@
1
+ "use strict";exports.RemoteLogHandler=class{endpoint;apiKey;constructor(t,e){this.endpoint=t,this.apiKey=e}async handle(t,e,i,a){try{const s={timestamp:a.timestamp,level:t,message:e,prefix:a.prefix,location:a.stackInfo,additional:i.slice(1)};await fetch(this.endpoint,{method:"POST",headers:{"Content-Type":"application/json",...this.apiKey&&{Authorization:`Bearer ${this.apiKey}`}},body:JSON.stringify(s)})}catch(s){}}};
2
+ //# sourceMappingURL=RemoteLogHandler-ymkQ97xl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoteLogHandler-ymkQ97xl.js","sources":["../../src/handlers/RemoteLogHandler.ts"],"sourcesContent":["/**\n * @fileoverview Remote log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Remote log handler for sending logs to external services\n */\nexport class RemoteLogHandler implements ILogHandler {\n private endpoint: string;\n private apiKey?: string;\n\n constructor(endpoint: string, apiKey?: string) {\n this.endpoint = endpoint;\n this.apiKey = apiKey;\n }\n\n async handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): Promise<void> {\n try {\n const payload = {\n timestamp: metadata.timestamp,\n level,\n message,\n prefix: metadata.prefix,\n location: metadata.stackInfo,\n additional: args.slice(1),\n };\n\n await fetch(this.endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...(this.apiKey && { 'Authorization': `Bearer ${this.apiKey}` }),\n },\n body: JSON.stringify(payload),\n });\n } catch (error) {\n // Silently fail to avoid infinite logging loops\n }\n }\n}"],"names":["endpoint","apiKey","constructor","this","handle","level","message","args","metadata","payload","timestamp","prefix","location","stackInfo","additional","slice","fetch","method","headers","Authorization","body","JSON","stringify","error"],"mappings":"sCASO,MACKA,SACAC,OAER,WAAAC,CAAYF,EAAkBC,GAC1BE,KAAKH,SAAWA,EAChBG,KAAKF,OAASA,CAClB,CAEA,YAAMG,CAAOC,EAAiBC,EAAiBC,EAAaC,GACxD,IACI,MAAMC,EAAU,CACZC,UAAWF,EAASE,UACpBL,QACAC,UACAK,OAAQH,EAASG,OACjBC,SAAUJ,EAASK,UACnBC,WAAYP,EAAKQ,MAAM,UAGrBC,MAAMb,KAAKH,SAAU,CACvBiB,OAAQ,OACRC,QAAS,CACL,eAAgB,sBACZf,KAAKF,QAAU,CAAEkB,cAAiB,UAAUhB,KAAKF,WAEzDmB,KAAMC,KAAKC,UAAUb,IAE7B,OAASc,GAET,CACJ"}
@@ -0,0 +1,4 @@
1
+ "use strict";function isMinifiedFile(e){return[/\.min\.js$/,/\.bundle\.js$/,/\.chunk\.js$/,/-[\w\d]{8,}\.js$/,/Logger-[A-Za-z0-9]+\.js$/,/node_modules/,/dist\//,/build\//,/\.mjs$/].some(t=>t.test(e))}function extractCleanFilename(e){return(e.split(/[/\\]/).pop()||e).replace(/\.min\.js$/,".js").replace(/\.bundle\.js$/,".js").replace(/\.chunk\.js$/,".js").replace(/-[\w\d]{8,}\.js$/,".js").replace(/Logger-[A-Za-z0-9]+\.js$/,"logger.ts")}const e={verbosity:"info",enableColors:!0,enableTimestamps:!0,enableStackTrace:!0,theme:"default",bannerType:"simple",bufferSize:1e3,autoDetectTheme:!0,outputFormat:"auto"},t={ms:1,s:1e3,m:6e4,h:36e5,d:864e5},r={timestamp:{light:"#666666",dark:"#a0a0a0"},messageText:{light:"#2d3748",dark:"#f7fafc"},prefix:{light:"#2d3748",dark:"#e2e8f0"},prefixBackground:{light:"#2d3748",dark:"#4a5568"},location:{light:"#718096",dark:"#a0aec0"}},s={nextjs:{verbosity:"info",enableColors:!0,enableTimestamps:!1,enableStackTrace:!1,autoDetectTheme:!1,outputFormat:"build"},webpack:{verbosity:"info",enableColors:!0,enableTimestamps:!0,enableStackTrace:!1,autoDetectTheme:!1,outputFormat:"build"},ci:{verbosity:"info",enableColors:!1,enableTimestamps:!0,enableStackTrace:!0,autoDetectTheme:!1,outputFormat:"ci"},terminal:{verbosity:"debug",enableColors:!0,enableTimestamps:!0,enableStackTrace:!0,autoDetectTheme:!1,outputFormat:"ansi"}},n={isNextJS:"undefined"!=typeof process&&(process.env.NEXT_RUNTIME||process.env.NEXT_PUBLIC_VERCEL_ENV||process.argv&&process.argv.some(e=>e.includes("next"))),isWebpack:"undefined"!=typeof process&&(process.env.WEBPACK_ENV||process.env.WEBPACK_BUILD||process.argv&&process.argv.some(e=>e.includes("webpack"))),isCI:"undefined"!=typeof process&&(process.env.CI||process.env.GITHUB_ACTIONS||process.env.JENKINS_URL||process.env.GITLAB_CI||process.env.TRAVIS||process.env.CIRCLECI),isBuild:"undefined"!=typeof process&&!0,isTerminal:"undefined"!=typeof process&&!0===process.stdout?.isTTY&&"dumb"!==process.env.TERM};function detectEnvironmentPreset(){return n.isCI?"ci":n.isNextJS?"nextjs":n.isWebpack?"webpack":"terminal"}function formatTimestamp(){try{/* @__PURE__ */
2
+ return(new Date).toISOString()}catch{/* @__PURE__ */
3
+ return(new Date).toISOString()}}class StyleBuilder{styles=[];constructor(e=""){e&&this.styles.push(e)}bg(e){return this.styles.push(`background: ${e}`),this}color(e){return this.styles.push(`color: ${e}`),this}border(e){return this.styles.push(`border: ${e}`),this}shadow(e){return this.styles.push(`box-shadow: ${e}`),this}padding(e){return this.styles.push(`padding: ${e}`),this}margin(e){return this.styles.push(`margin: ${e}`),this}rounded(e="4px"){return this.styles.push(`border-radius: ${e}`),this}bold(){return this.styles.push("font-weight: bold"),this}font(e){return this.styles.push(`font-family: ${e}`),this}mono(){return this.font('Monaco, Consolas, "Courier New", monospace')}system(){return this.font('system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif')}size(e){return this.styles.push(`font-size: ${e}`),this}lineHeight(e){return this.styles.push(`line-height: ${e}`),this}underline(){return this.styles.push("text-decoration: underline"),this}uppercase(){return this.styles.push("text-transform: uppercase"),this}opacity(e){return this.styles.push(`opacity: ${e}`),this}display(e){return this.styles.push(`display: ${e}`),this}position(e){return this.styles.push(`position: ${e}`),this}transform(e){return this.styles.push(`transform: ${e}`),this}animation(e){return this.styles.push(`animation: ${e}`),this}transition(e){return this.styles.push(`transition: ${e}`),this}cursor(e){return this.styles.push(`cursor: ${e}`),this}custom(e,t){return this.styles.push(`${e}: ${t}`),this}css(e,t){return this.custom(e,t)}build(){return this.styles.join("; ")}clear(){return this.styles=[],this}clone(){const e=new StyleBuilder;return e.styles=[...this.styles],e}merge(e){return this.styles.push(...e.styles),this}}!function(){const e=new StyleBuilder;new Proxy(e,{get(e,t){if(t in e){const r=e[t];return"function"==typeof r?r.bind(e):r}}})}();const o={success:()=>(new StyleBuilder).bg("linear-gradient(135deg, #00b894 0%, #00a085 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),error:()=>(new StyleBuilder).bg("linear-gradient(135deg, #e84393 0%, #d63031 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),warning:()=>(new StyleBuilder).bg("linear-gradient(135deg, #fdcb6e 0%, #e17055 100%)").color("#2d3436").padding("4px 8px").rounded("4px").bold(),info:()=>(new StyleBuilder).bg("linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),debug:()=>(new StyleBuilder).bg("linear-gradient(135deg, #667eea 0%, #764ba2 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),muted:()=>(new StyleBuilder).color("#6c757d").font("Monaco, Consolas, monospace").size("12px"),accent:()=>(new StyleBuilder).bg("#f8f9fa").color("#495057").padding("2px 6px").rounded("3px").border("1px solid #dee2e6"),neon:()=>(new StyleBuilder).bg("linear-gradient(135deg, #0f3460 0%, #e94560 100%)").color("#00ffff").padding("4px 8px").rounded("4px").bold().shadow("0 0 10px rgba(0, 255, 255, 0.5)")};function getEnvironment(){return"undefined"!=typeof globalThis&&globalThis.Deno?"deno":"undefined"==typeof window&&"undefined"!=typeof self&&"function"==typeof self.importScripts?"webworker":"undefined"!=typeof process&&process.versions&&process.versions.node?function(){if("undefined"==typeof process)return!1;const e=process.stdout&&process.stdout.isTTY,t=process.env&&(process.env.TERM||process.env.TERM_PROGRAM||process.env.SSH_TTY||process.env.TERM_SESSION_ID),r=t&&["vscode","hyper","iterm","terminal","alacritty","kitty","gnome-terminal","konsole","xterm","tmux","screen"].some(e=>process.env.TERM_PROGRAM?.toLowerCase().includes(e)||process.env.TERM?.toLowerCase().includes(e));return Boolean(e||t||r)}()?"terminal":"server":"undefined"!=typeof window&&"undefined"!=typeof document?"browser":"unknown"}function supportsANSI(){const e=getEnvironment();return"browser"!==e&&("terminal"===e||"server"===e&&function(){if("undefined"==typeof process)return!1;const e=process.env&&(process.env.COLORTERM||process.env.FORCE_COLOR||process.env.TERM&&"dumb"!==process.env.TERM||process.env.TERM_PROGRAM);return Boolean(e)}())}class TerminalRenderer{colorCapability;constructor(e="full"){this.colorCapability=e}getColorCode(e,t=!1){return`[${({black:{normal:"30",bright:"90"},red:{normal:"31",bright:"91"},green:{normal:"32",bright:"92"},yellow:{normal:"33",bright:"93"},blue:{normal:"34",bright:"94"},magenta:{normal:"35",bright:"95"},cyan:{normal:"36",bright:"96"},white:{normal:"37",bright:"97"},gray:{normal:"90",bright:"37"},grey:{normal:"90",bright:"37"}}[e.toLowerCase()]||{normal:"37"}).normal}m`}getStyleCode(e){const t={bold:"1",dim:"2",italic:"3",underline:"4",reset:"0"},r=e.map(e=>t[e]||"0").join(";");return r?`[${r}m`:""}renderTerminal(e,t,r,s,n,o){const i="",l={text:"",reset:i};o?(l.timestamp=this.styleTimestamp(r,o.timestamp),l.level=this.styleLevel(e,o.level),l.prefix=this.stylePrefix(s,o.prefix),l.message=this.styleMessage(t,o.message),l.location=this.styleLocation(n,o.location)):(l.timestamp=this.styleTimestamp(r),l.level=this.styleLevel(e),l.prefix=this.stylePrefix(s),l.message=this.styleMessage(t),l.location=this.styleLocation(n));const a=[];return l.timestamp&&a.push(l.timestamp),l.level&&a.push(l.level),l.prefix&&a.push(l.prefix),l.message&&a.push(l.message),l.location&&a.push(l.location),l.text=a.join(" ")+i,l}styleTimestamp(e,t){return e&&t?.show?"none"===this.colorCapability?e:`${this.getStyleCode(["dim"])}${e}`:""}styleLevel(e,t){if(!t?.show)return"";const r=this.getLevelText(e);if("none"===this.colorCapability)return`[${r}]`;const s={debug:"magenta",info:"blue",warn:"yellow",error:"red",critical:"red"}[e]||"white",n=this.getColorCode(s),o=this.getStyleCode(["bold"]);return"compact"===t?.style?`${n}[${r}]`:`${n}${o}[${r}]`}stylePrefix(e,t){return e&&t?.show?"none"===this.colorCapability?`[${e}]`:`${this.getColorCode("cyan")}[${e.toUpperCase()}]`:""}styleMessage(e,t){return e}styleLocation(e,t){if(!e||!t?.show)return"";if("none"===this.colorCapability)return`(${e})`;const r=this.getStyleCode(["dim"]);return"clickable"===t?.style?`${this.getStyleCode(["dim","underline"])}(${e})`:`${r}(${e})`}getLevelText(e){return{debug:"DEBUG",info:"INFO",warn:"WARN",error:"ERROR",critical:"CRITICAL"}[e]||String(e).toUpperCase()}renderCyberpunk(e,t,r,s,n){const o="",i=[];r&&i.push(`${r}${o}`);const l={debug:"",info:"",warn:"",error:"",critical:""}[e]||"";if(i.push(`${l} ${this.getLevelText(e)} ${o}`),s){const e="";i.push(`${e}[${s.toUpperCase()}]${o}`)}return i.push(t),n&&i.push(`(${n})${o}`),{text:i.join(" "),reset:o}}renderMinimal(e,t,r,s){const n="",o=[];r&&o.push(`${r}${n}`);const i={debug:"",info:"",warn:"",error:"",critical:""}[e]||"";return o.push(`${i}${this.getLevelText(e)}:${n}`),s&&o.push(`[${s.toUpperCase()}]${n}`),o.push(t),{text:o.join(" "),reset:n}}getChalkForLevel(e){const t={debug:"magenta",info:"blue",warn:"yellow",error:"red",critical:"red"};return{color:r=>{const s=t[e]||"white";return`${this.getColorCode(s)}${r}`},bold:e=>`${this.getStyleCode(["bold"])}${e}`,dim:e=>`${this.getStyleCode(["dim"])}${e}`,bgGray:e=>`${e}`,bgBlue:e=>`${e}`,reset:e=>e,cyan:{bold:e=>`${this.getColorCode("cyan")}${this.getStyleCode(["bold"])}${e}`,dim:e=>`${this.getColorCode("cyan")}${this.getStyleCode(["dim"])}${e}`,bg:e=>`${this.getColorCode("cyan")}[${e.toUpperCase()}]`}}}}const i=new class{renderer;constructor(){const e=function(){if("browser"===getEnvironment())return"full";if(!supportsANSI())return"none";if("undefined"!=typeof process&&process.env){const e="truecolor"===process.env.COLORTERM||"24bit"===process.env.COLORTERM,t=process.env.TERM&&process.env.TERM.includes("256");if(e||t)return"full"}return"basic"}();this.renderer=new TerminalRenderer(e)}adaptStyles(e,t,r,s,n,o,i){if(i)switch(i){case"cyberpunk":return this.renderer.renderCyberpunk(e,t,r,s,n);case"minimal":return this.renderer.renderMinimal(e,t,r,s);case"production":return this.adaptProductionStyles(e,t,r,s,n,o);case"debug":return this.adaptDebugStyles(e,t,r,s,n,o);case"glassmorphism":return this.adaptGlassmorphismStyles(e,t,r,s,n,o)}return this.renderer.renderTerminal(e,t,r,s,n,o)}adaptProductionStyles(e,t,r,s,n,o){const i="",l=this.renderer.getChalkForLevel(e),a=[];return r&&o?.timestamp?.show&&a.push(l.dim(r)),o?.level?.show&&a.push(l.color(`[${this.renderer.getLevelText(e)}]`)),s&&o?.prefix?.show&&a.push(l.dim(`[${s}]`)),t&&o?.message?.show&&a.push(l.reset(t)),n&&o?.location?.show&&a.push(l.dim(`(${n})`)),{text:a.join(" ")+i,reset:i}}adaptDebugStyles(e,t,r,s,n,o){const i="",l=this.renderer.getChalkForLevel(e),a=[];return r&&o?.timestamp?.show&&a.push(l.dim(r)),o?.level?.show&&("compact"===o?.level?.style?a.push(l.color(`[${this.renderer.getLevelText(e)}]`)):a.push(l.bold(`[${this.renderer.getLevelText(e)}]`))),s&&o?.prefix?.show&&("compact"===o?.prefix?.style?a.push(l.cyan.dim(`[${s}]`)):a.push(l.cyan.bold(`[${s}]`))),t&&o?.message?.show&&a.push(l.reset(t)),n&&o?.location?.show&&("clickable"===o?.location?.style?a.push(l.dim(`${n} (clickable)`)):a.push(l.dim(`(${n})`))),{text:a.join(" ")+i,reset:i}}adaptGlassmorphismStyles(e,t,r,s,n,o){const i="",l=this.renderer.getChalkForLevel(e),a=[];return r&&o?.timestamp?.show&&a.push(l.dim(r)),o?.level?.show&&a.push(l.bgGray(` ${this.renderer.getLevelText(e)} `)),s&&o?.prefix?.show&&a.push(l.bgBlue(`[${s}]`)),t&&o?.message?.show&&a.push(l.reset(t)),n&&o?.location?.show&&a.push(l.dim(`(${n})`)),{text:a.join(" ")+i,reset:i}}adaptColor(e){return e.startsWith("#")||e.startsWith("rgb(")?e:e.includes("gradient")?this.extractColorFromGradient(e):this.cssNameToANSI(e)}extractColorFromGradient(e){const t=e.match(/#[0-9a-fA-F]{6}|rgb\([^)]+\)/);return t?t[0]:"#ffffff"}cssNameToANSI(e){return{black:"black",white:"white",red:"red",green:"green",blue:"blue",yellow:"yellow",cyan:"cyan",magenta:"magenta",gray:"gray",grey:"gray",orange:"yellow",purple:"magenta",pink:"red",brown:"yellow",lightblue:"cyan",lightgreen:"green",lightgray:"gray",lightgrey:"gray"}[e.toLowerCase()]||"white"}shouldRenderStyle(e,t){if(!t)return!0;const r=t[e];return!1!==r?.show}getRenderer(){return this.renderer}};function detectDevToolsTheme(){try{return"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}catch(e){return console.warn("Failed to detect DevTools theme:",e),"light"}}function getAdaptiveColor(e,t){return e[t??detectDevToolsTheme()]}const l="undefined"!=typeof process&&process.versions&&process.versions.node,a="undefined"!=typeof window&&"undefined"!=typeof document;exports.ADAPTIVE_COLORS=r,exports.BUFFER_LIMITS={MIN_SIZE:50,DEFAULT_SIZE:1e3,MAX_SIZE:1e4},exports.BUILD_PRESETS=s,exports.DEFAULT_CONFIG=e,exports.ENVIRONMENT_DETECTION=n,exports.EXPORT_FORMATS={json:{extension:".json",mimeType:"application/json"},csv:{extension:".csv",mimeType:"text/csv"},markdown:{extension:".md",mimeType:"text/markdown"},plain:{extension:".txt",mimeType:"text/plain"},html:{extension:".html",mimeType:"text/html"}},exports.LEVEL_STYLES={debug:{emoji:"🔍",label:"DEBUG",background:"linear-gradient(90deg, #6c757d, #495057)",color:"#ffffff",border:"1px solid #6c757d",shadow:"0 2px 4px rgba(108, 117, 125, 0.3)"},info:{emoji:"ℹ️",label:"INFO",background:"linear-gradient(90deg, #007bff, #0056b3)",color:"#ffffff",border:"1px solid #007bff",shadow:"0 2px 4px rgba(0, 123, 255, 0.3)"},warn:{emoji:"⚠️",label:"WARN",background:"linear-gradient(90deg, #ffc107, #e0a800)",color:"#000000",border:"1px solid #ffc107",shadow:"0 2px 4px rgba(255, 193, 7, 0.3)"},error:{emoji:"❌",label:"ERROR",background:"linear-gradient(90deg, #dc3545, #c82333)",color:"#ffffff",border:"1px solid #dc3545",shadow:"0 2px 4px rgba(220, 53, 69, 0.3)"},critical:{emoji:"🚨",label:"CRITICAL",background:"linear-gradient(90deg, #8B0000, #FF0000)",color:"#ffffff",border:"2px solid #FF0000",shadow:"0 4px 8px rgba(255, 0, 0, 0.4)"},success:{emoji:"✅",label:"SUCCESS",background:"linear-gradient(90deg, #28a745, #1e7e34)",color:"#ffffff",border:"1px solid #28a745",shadow:"0 2px 4px rgba(40, 167, 69, 0.3)"}},exports.StyleBuilder=StyleBuilder,exports.StylePresets=o,exports.createStyledOutput=function(e,t,s,n,o,l=!0,a,c){const d=t[e],u=formatTimestamp();if("browser"!==getEnvironment()&&supportsANSI())return function(e,t,r,s,n,o,l){const a=function(e,t,r,s,n,o,l){return i.adaptStyles(e,t,r,s,n,o,l)}(e,t,r,s,n?`${n.file}:${n.line}:${n.column}`:void 0,o,l);return[a.text]}(e,n,u,s,o,a,c);const p=l?detectDevToolsTheme():"light",m=(new StyleBuilder).color(getAdaptiveColor(r.timestamp,p)).size("11px").font("Monaco, Consolas, monospace").build(),h=(new StyleBuilder).bg(d.background).color(d.color).border(d.border).shadow(d.shadow).padding("2px 8px").rounded("4px").bold().font("Monaco, Consolas, monospace").size("12px").build(),f=(new StyleBuilder).bg(getAdaptiveColor(r.prefixBackground,p)).color(getAdaptiveColor(r.prefix,p)).padding("2px 6px").rounded("3px").bold().font("Monaco, Consolas, monospace").size("11px").build(),g=(new StyleBuilder).color(getAdaptiveColor(r.messageText,p)).font("system-ui, -apple-system, sans-serif").size("14px").build(),y=(new StyleBuilder).color(getAdaptiveColor(r.location,p)).size("11px").font("Monaco, Consolas, monospace").build();let b=`%c${u.slice(11,23)} %c${d.emoji} ${d.label}`;const x=[m,h];return s&&(b+=` %c${s}`,x.push(f)),b+=` %c${n}`,x.push(g),o&&(b+=` %c(${o.file}:${o.line}:${o.column})`,x.push(y)),[b,...x]},exports.detectEnvironmentPreset=detectEnvironmentPreset,exports.escapeHtml=function(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML},exports.formatDisplayTime=function(e,t="short"){switch(t){case"time-only":return e.toTimeString().slice(0,8);case"full":return e.toISOString();default:return e.toISOString().slice(11,23)}},exports.formatTimestamp=formatTimestamp,exports.generateLogId=function(){return`${Date.now()}-${Math.random().toString(36).substr(2,9)}`},exports.getAdaptiveColor=getAdaptiveColor,exports.getEnvironment=getEnvironment,exports.getOptimalConfig=function(){const t=detectEnvironmentPreset();return{...e,...s[t]}},exports.isBrowser=a,exports.isNode=l,exports.parseStackTrace=function(){try{const e=(new Error).stack;if(!e)return null;const t=e.split("\n").filter(e=>e.trim());for(let r=1;r<t.length;r++){const e=t[r];if(!e)continue;if(e.includes("parseStackTrace")||e.includes("Logger.")||e.includes(".log(")||e.includes("createStyledOutput"))continue;let s;const n=e.match(/at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?$/);if(n){const e=n[2];if(e&&isMinifiedFile(e))continue;s=n}else{const t=e.match(/(.+?)@(.+?):(\d+):(\d+)$/);if(t){const e=t[2];if(e&&isMinifiedFile(e))continue;s=t}else{const t=e.match(/(\S+)?@(.+?):(\d+):(\d+)$/);if(t){const e=t[2];if(e&&isMinifiedFile(e))continue;s=t}}}if(!s)continue;const[,o,i,l,a]=s;if(!i)continue;const c=extractCleanFilename(i).split("?")[0];if(!c)continue;const d=l?parseInt(l,10):0;return{file:c||"unknown",line:d,column:a?parseInt(a,10):0,function:o&&o.trim()?o.trim():void 0}}return null}catch{return null}},exports.parseTimeInput=function(e){if(e instanceof Date)return e;if("number"==typeof e)return new Date(Date.now()-e*t.h);if("string"==typeof e){const r=new Date(e);if(!isNaN(r.getTime()))return r;try{const r=function(e){const r=e.match(/^(\d+)(ms|s|m|h|d)$/);if(!r)throw new Error(`Invalid time format: ${e}. Use format like "2h", "30m", "1d"`);const[,s,n]=r,o=t[n];return parseInt(s||"0",10)*o}(e);return new Date(Date.now()-r)}catch{throw new Error(`Invalid time format: ${e}`)}}throw new Error("Unsupported time input type: "+typeof e)},exports.safeStringify=function(e,t=3){try{return JSON.stringify(e,(e,t)=>"function"==typeof t?"[Function]":t instanceof Error?`[Error: ${t.message}]`:t instanceof Date?t.toISOString():void 0===t?"[undefined]":t,2)}catch(r){return String(e)}},exports.setupThemeChangeListener=function(e){try{if("undefined"==typeof window||!window.matchMedia)return null;const t=window.matchMedia("(prefers-color-scheme: dark)"),handler=t=>{e(t.matches?"dark":"light")};return t.addEventListener?(t.addEventListener("change",handler),()=>t.removeEventListener("change",handler)):t.addListener?(t.addListener(handler),()=>t.removeListener?.(handler)):null}catch(t){return console.warn("Failed to set up theme change listener:",t),null}},exports.supportsANSIColors=function(){return!!l&&(!0===process.stdout?.isTTY||"1"===process.env.FORCE_COLOR||"true"===process.env.FORCE_COLOR)},exports.supportsCSSColors=function(){return a};
4
+ //# sourceMappingURL=environment-Ba5kShbx.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-Ba5kShbx.js","sources":["../../src/utils/stackTrace.ts","../../src/constants.ts","../../src/utils/timestamps.ts","../../src/styling/StyleBuilder.ts","../../src/utils/environment-detector.ts","../../src/terminal/terminal-renderer.ts","../../src/utils/adapter.ts","../../src/utils/output.ts","../../src/utils/environment.ts"],"sourcesContent":["/**\n * @fileoverview Stack trace parsing utilities for Advanced Logger\n */\n\nimport type { StackInfo } from '../types/index.js';\n\n/**\n * Check if a filename represents a minified/bundle file\n */\nfunction isMinifiedFile(filename: string): boolean {\n // Skip if filename contains minified patterns\n const minifiedPatterns = [\n /\\.min\\.js$/,\n /\\.bundle\\.js$/,\n /\\.chunk\\.js$/,\n /-[\\w\\d]{8,}\\.js$/, // Hash-based filenames\n /Logger-[A-Za-z0-9]+\\.js$/, // Logger bundle files\n /node_modules/,\n /dist\\//,\n /build\\//,\n /\\.mjs$/\n ];\n\n return minifiedPatterns.some(pattern => pattern.test(filename));\n}\n\n/**\n * Extract clean filename from full path\n */\nfunction extractCleanFilename(fullPath: string): string {\n // Extract just the filename from the full path\n const filename = fullPath.split(/[/\\\\]/).pop() || fullPath;\n\n // Remove common build/minified suffixes\n return filename\n .replace(/\\.min\\.js$/, '.js')\n .replace(/\\.bundle\\.js$/, '.js')\n .replace(/\\.chunk\\.js$/, '.js')\n .replace(/-[\\w\\d]{8,}\\.js$/, '.js')\n .replace(/Logger-[A-Za-z0-9]+\\.js$/, 'logger.ts');\n}\n\n/**\n * Parses the current stack trace to extract caller information\n */\nexport function parseStackTrace(): StackInfo | null {\n try {\n const stack = new Error().stack;\n if (!stack) {\n return null;\n }\n\n const lines = stack.split('\\n').filter(line => line.trim());\n \n // Find the first caller that's not from Logger methods\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n \n if (!line) {\n continue;\n }\n \n // Skip if line contains Logger methods or parseStackTrace\n if (line.includes('parseStackTrace') || \n line.includes('Logger.') || \n line.includes('.log(') ||\n line.includes('createStyledOutput')) {\n continue;\n }\n\n // Parse different stack trace formats\n let match;\n \n // Chrome format: \"at functionName (file:line:column)\" or \"at file:line:column\"\n const chromeMatch = line.match(/at\\s+(?:(.+?)\\s+\\()?(.+?):(\\d+):(\\d+)\\)?$/);\n if (chromeMatch) {\n const filename = chromeMatch[2];\n // Skip minified/bundle files\n if (filename && isMinifiedFile(filename)) {\n continue;\n }\n match = chromeMatch;\n } else {\n // Firefox format: \"functionName@file:line:column\"\n const firefoxMatch = line.match(/(.+?)@(.+?):(\\d+):(\\d+)$/);\n if (firefoxMatch) {\n const filename = firefoxMatch[2];\n // Skip minified/bundle files\n if (filename && isMinifiedFile(filename)) {\n continue;\n }\n match = firefoxMatch;\n } else {\n // Safari/other formats\n const safariMatch = line.match(/(\\S+)?@(.+?):(\\d+):(\\d+)$/);\n if (safariMatch) {\n const filename = safariMatch[2];\n // Skip minified/bundle files\n if (filename && isMinifiedFile(filename)) {\n continue;\n }\n match = safariMatch;\n }\n }\n }\n\n if (!match) {\n continue;\n }\n\n const [, functionName, file, lineStr, columnStr] = match;\n \n if (!file) {\n continue;\n }\n \n // Use clean filename extraction to avoid minified files\n const cleanFileName = extractCleanFilename(file).split('?')[0];\n if (!cleanFileName) {\n continue;\n }\n \n // Parse line and column numbers\n const lineNum = lineStr ? parseInt(lineStr, 10) : 0;\n const columnNum = columnStr ? parseInt(columnStr, 10) : 0;\n \n // Clean function name\n const cleanFunction = functionName && functionName.trim() \n ? functionName.trim() \n : undefined;\n \n return {\n file: cleanFileName ? cleanFileName : 'unknown',\n line: lineNum,\n column: columnNum,\n function: cleanFunction\n };\n }\n \n return null;\n } catch {\n return null;\n }\n}","/**\n * @fileoverview Global constants for Advanced Logger\n */\n\nimport type { LogLevel, AdaptiveColors } from './types/index.js';\nimport type { LevelStyleConfig } from './utils/index.js';\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG = {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: true,\n theme: 'default' as const,\n bannerType: 'simple' as const,\n bufferSize: 1000,\n autoDetectTheme: true,\n outputFormat: 'auto' as const,\n} as const;\n\n/**\n * Basic level styles for core module (minimal CSS styling)\n */\nexport const LEVEL_STYLES: Record<LogLevel | 'success', LevelStyleConfig> = {\n debug: {\n emoji: '🔍',\n label: 'DEBUG',\n background: 'linear-gradient(90deg, #6c757d, #495057)',\n color: '#ffffff',\n border: '1px solid #6c757d',\n shadow: '0 2px 4px rgba(108, 117, 125, 0.3)'\n },\n info: {\n emoji: 'ℹ️',\n label: 'INFO',\n background: 'linear-gradient(90deg, #007bff, #0056b3)',\n color: '#ffffff',\n border: '1px solid #007bff',\n shadow: '0 2px 4px rgba(0, 123, 255, 0.3)'\n },\n warn: {\n emoji: '⚠️',\n label: 'WARN',\n background: 'linear-gradient(90deg, #ffc107, #e0a800)',\n color: '#000000',\n border: '1px solid #ffc107',\n shadow: '0 2px 4px rgba(255, 193, 7, 0.3)'\n },\n error: {\n emoji: '❌',\n label: 'ERROR',\n background: 'linear-gradient(90deg, #dc3545, #c82333)',\n color: '#ffffff',\n border: '1px solid #dc3545',\n shadow: '0 2px 4px rgba(220, 53, 69, 0.3)'\n },\n critical: {\n emoji: '🚨',\n label: 'CRITICAL',\n background: 'linear-gradient(90deg, #8B0000, #FF0000)',\n color: '#ffffff',\n border: '2px solid #FF0000',\n shadow: '0 4px 8px rgba(255, 0, 0, 0.4)'\n },\n success: {\n emoji: '✅',\n label: 'SUCCESS',\n background: 'linear-gradient(90deg, #28a745, #1e7e34)',\n color: '#ffffff',\n border: '1px solid #28a745',\n shadow: '0 2px 4px rgba(40, 167, 69, 0.3)'\n }\n} as const;\n\n/**\n * Maximum allowed buffer sizes for performance\n */\nexport const BUFFER_LIMITS = {\n MIN_SIZE: 50,\n DEFAULT_SIZE: 1000,\n MAX_SIZE: 10000,\n} as const;\n\n/**\n * Export format definitions with extensions\n */\nexport const EXPORT_FORMATS = {\n json: { extension: '.json', mimeType: 'application/json' },\n csv: { extension: '.csv', mimeType: 'text/csv' },\n markdown: { extension: '.md', mimeType: 'text/markdown' },\n plain: { extension: '.txt', mimeType: 'text/plain' },\n html: { extension: '.html', mimeType: 'text/html' },\n} as const;\n\n/**\n * CLI command definitions\n */\nexport const CLI_COMMANDS = {\n config: 'config',\n help: 'help',\n themes: 'themes',\n banners: 'banners',\n banner: 'banner',\n status: 'status',\n reset: 'reset',\n demo: 'demo',\n export: 'export',\n copy: 'copy',\n 'buffer-size': 'buffer-size',\n 'clear-buffer': 'clear-buffer',\n 'buffer-info': 'buffer-info',\n} as const;\n\n/**\n * Time parsing constants for relative time filters\n */\nexport const TIME_UNITS = {\n ms: 1,\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n} as const;\n\n/**\n * Default styling values\n */\nexport const STYLE_DEFAULTS = {\n FONT_FAMILY: 'Monaco, Consolas, monospace',\n FONT_SIZE: '12px',\n BORDER_RADIUS: '4px',\n PADDING: '4px 8px',\n} as const;\n\n/**\n * Level priority mapping for filtering\n */\nexport const LEVEL_PRIORITIES: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n critical: 4,\n} as const;\n\n/**\n * Adaptive color configurations for DevTools theme compatibility\n */\nexport const ADAPTIVE_COLORS = {\n timestamp: {\n light: '#666666',\n dark: '#a0a0a0',\n },\n messageText: {\n light: '#2d3748',\n dark: '#f7fafc',\n },\n prefix: {\n light: '#2d3748',\n dark: '#e2e8f0',\n },\n prefixBackground: {\n light: '#2d3748',\n dark: '#4a5568',\n },\n location: {\n light: '#718096',\n dark: '#a0aec0',\n },\n} as const satisfies Record<string, AdaptiveColors>;\n\n/**\n * Presets específicos para diferentes entornos de build\n */\nexport const BUILD_PRESETS = {\n /**\n * Configuración optimizada para Next.js builds\n */\n nextjs: {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: false,\n enableStackTrace: false,\n autoDetectTheme: false,\n outputFormat: 'build' as const,\n },\n\n /**\n * Configuración para Webpack builds\n */\n webpack: {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: false,\n autoDetectTheme: false,\n outputFormat: 'build' as const,\n },\n\n /**\n * Configuración para CI/CD environments\n */\n ci: {\n verbosity: 'info' as const,\n enableColors: false,\n enableTimestamps: true,\n enableStackTrace: true,\n autoDetectTheme: false,\n outputFormat: 'ci' as const,\n },\n\n /**\n * Configuración para desarrollo terminal\n */\n terminal: {\n verbosity: 'debug' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: true,\n autoDetectTheme: false,\n outputFormat: 'ansi' as const,\n }\n} as const;\n\n/**\n * Mapeo de variables de entorno a presets\n */\nexport const ENVIRONMENT_DETECTION = {\n // Next.js detection\n isNextJS: typeof process !== 'undefined' && (\n process.env.NEXT_RUNTIME ||\n process.env.NEXT_PUBLIC_VERCEL_ENV ||\n (process.argv && process.argv.some(arg => arg.includes('next')))\n ),\n\n // Webpack detection\n isWebpack: typeof process !== 'undefined' && (\n process.env.WEBPACK_ENV ||\n process.env.WEBPACK_BUILD ||\n (process.argv && process.argv.some(arg => arg.includes('webpack')))\n ),\n\n // CI/CD detection\n isCI: typeof process !== 'undefined' && (\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.JENKINS_URL ||\n process.env.GITLAB_CI ||\n process.env.TRAVIS ||\n process.env.CIRCLECI\n ),\n\n // Build detection\n isBuild: typeof process !== 'undefined' && (\n process.env.NODE_ENV === 'production' ||\n process.env.BUILD_MODE === 'production' ||\n (process.argv && process.argv.some(arg => arg.includes('build')))\n ),\n\n // Terminal with ANSI support\n isTerminal: typeof process !== 'undefined' && (\n process.stdout?.isTTY === true &&\n process.env.TERM !== 'dumb'\n )\n} as const;\n\n/**\n * Auto-detects the best preset based on current environment\n */\nexport function detectEnvironmentPreset(): keyof typeof BUILD_PRESETS {\n if (ENVIRONMENT_DETECTION.isCI) {\n return 'ci';\n }\n\n if (ENVIRONMENT_DETECTION.isNextJS) {\n return 'nextjs';\n }\n\n if (ENVIRONMENT_DETECTION.isWebpack) {\n return 'webpack';\n }\n\n if (ENVIRONMENT_DETECTION.isTerminal) {\n return 'terminal';\n }\n\n return 'terminal'; // Default fallback\n}\n\n/**\n * Gets the optimal configuration for current environment\n */\nexport function getOptimalConfig() {\n const preset = detectEnvironmentPreset();\n return {\n ...DEFAULT_CONFIG,\n ...BUILD_PRESETS[preset]\n };\n}","/**\n * @fileoverview Timestamp utilities for Advanced Logger\n */\n\nimport { TIME_UNITS } from '../constants.js';\n\n/**\n * Formats the timestamp using modern Date API\n */\nexport function formatTimestamp(): string {\n try {\n // Use modern Temporal API if available, fallback to Date\n const now = new Date();\n return now.toISOString();\n } catch {\n return new Date().toISOString();\n }\n}\n\n/**\n * Parse relative time strings like \"2h\", \"30m\", \"1d\" into milliseconds\n */\nexport function parseRelativeTime(timeStr: string): number {\n const match = timeStr.match(/^(\\d+)(ms|s|m|h|d)$/);\n if (!match) {\n throw new Error(`Invalid time format: ${timeStr}. Use format like \"2h\", \"30m\", \"1d\"`);\n }\n\n const [, amount, unit] = match;\n const multiplier = TIME_UNITS[unit as keyof typeof TIME_UNITS];\n \n return parseInt(amount || '0', 10) * multiplier;\n}\n\n/**\n * Parse time input which can be Date, ISO string, or relative time\n */\nexport function parseTimeInput(input: Date | string | number): Date {\n if (input instanceof Date) {\n return input;\n }\n\n if (typeof input === 'number') {\n // Assume hours ago\n return new Date(Date.now() - input * TIME_UNITS.h);\n }\n\n if (typeof input === 'string') {\n // Try parsing as ISO date first\n const isoDate = new Date(input);\n if (!isNaN(isoDate.getTime())) {\n return isoDate;\n }\n\n // Try parsing as relative time\n try {\n const ms = parseRelativeTime(input);\n return new Date(Date.now() - ms);\n } catch {\n throw new Error(`Invalid time format: ${input}`);\n }\n }\n\n throw new Error(`Unsupported time input type: ${typeof input}`);\n}\n\n/**\n * Format timestamp for display in different contexts\n */\nexport function formatDisplayTime(date: Date, format: 'short' | 'full' | 'time-only' = 'short'): string {\n switch (format) {\n case 'time-only':\n return date.toTimeString().slice(0, 8); // HH:MM:SS\n case 'full':\n return date.toISOString();\n case 'short':\n default:\n return date.toISOString().slice(11, 23); // HH:MM:SS.mmm\n }\n}","/**\n * @fileoverview StyleBuilder class for Advanced Logger\n */\n\n/**\n * Utility class for creating dynamic console styles with method chaining\n */\nexport class StyleBuilder {\n private styles: string[] = [];\n\n constructor(baseStyle = '') {\n if (baseStyle) this.styles.push(baseStyle);\n }\n\n /**\n * Add background color or gradient\n */\n bg(background: string): StyleBuilder {\n this.styles.push(`background: ${background}`);\n return this;\n }\n\n /**\n * Add text color\n */\n color(color: string): StyleBuilder {\n this.styles.push(`color: ${color}`);\n return this;\n }\n\n /**\n * Add border styling\n */\n border(border: string): StyleBuilder {\n this.styles.push(`border: ${border}`);\n return this;\n }\n\n /**\n * Add box shadow\n */\n shadow(shadow: string): StyleBuilder {\n this.styles.push(`box-shadow: ${shadow}`);\n return this;\n }\n\n /**\n * Add padding\n */\n padding(padding: string): StyleBuilder {\n this.styles.push(`padding: ${padding}`);\n return this;\n }\n\n /**\n * Add margin\n */\n margin(margin: string): StyleBuilder {\n this.styles.push(`margin: ${margin}`);\n return this;\n }\n\n /**\n * Add border radius\n */\n rounded(radius: string = '4px'): StyleBuilder {\n this.styles.push(`border-radius: ${radius}`);\n return this;\n }\n\n /**\n * Add font weight\n */\n bold(): StyleBuilder {\n this.styles.push('font-weight: bold');\n return this;\n }\n\n /**\n * Add font styling\n */\n font(font: string): StyleBuilder {\n this.styles.push(`font-family: ${font}`);\n return this;\n }\n\n /**\n * Set monospace font family (alias for common monospace fonts)\n */\n mono(): StyleBuilder {\n return this.font('Monaco, Consolas, \"Courier New\", monospace');\n }\n\n /**\n * Set system font family (alias for system fonts)\n */\n system(): StyleBuilder {\n return this.font('system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif');\n }\n\n /**\n * Add font size\n */\n size(size: string): StyleBuilder {\n this.styles.push(`font-size: ${size}`);\n return this;\n }\n\n /**\n * Add line height\n */\n lineHeight(height: string): StyleBuilder {\n this.styles.push(`line-height: ${height}`);\n return this;\n }\n\n /**\n * Add text decoration\n */\n underline(): StyleBuilder {\n this.styles.push('text-decoration: underline');\n return this;\n }\n\n /**\n * Add text transform\n */\n uppercase(): StyleBuilder {\n this.styles.push('text-transform: uppercase');\n return this;\n }\n\n /**\n * Add opacity\n */\n opacity(value: number): StyleBuilder {\n this.styles.push(`opacity: ${value}`);\n return this;\n }\n\n /**\n * Add display property\n */\n display(value: string): StyleBuilder {\n this.styles.push(`display: ${value}`);\n return this;\n }\n\n /**\n * Add position property\n */\n position(value: string): StyleBuilder {\n this.styles.push(`position: ${value}`);\n return this;\n }\n\n /**\n * Add transform property\n */\n transform(value: string): StyleBuilder {\n this.styles.push(`transform: ${value}`);\n return this;\n }\n\n /**\n * Add animation property\n */\n animation(value: string): StyleBuilder {\n this.styles.push(`animation: ${value}`);\n return this;\n }\n\n /**\n * Add transition property\n */\n transition(value: string): StyleBuilder {\n this.styles.push(`transition: ${value}`);\n return this;\n }\n\n /**\n * Add cursor property\n */\n cursor(value: string): StyleBuilder {\n this.styles.push(`cursor: ${value}`);\n return this;\n }\n\n /**\n * Add any custom CSS property\n */\n custom(property: string, value: string): StyleBuilder {\n this.styles.push(`${property}: ${value}`);\n return this;\n }\n\n /**\n * Add any CSS property (alias for custom)\n */\n css(property: string, value: string): StyleBuilder {\n return this.custom(property, value);\n }\n\n /**\n * Build the final CSS string\n */\n build(): string {\n return this.styles.join('; ');\n }\n\n /**\n * Clear all styles and start fresh\n */\n clear(): StyleBuilder {\n this.styles = [];\n return this;\n }\n\n /**\n * Clone this StyleBuilder with the same styles\n */\n clone(): StyleBuilder {\n const cloned = new StyleBuilder();\n cloned.styles = [...this.styles];\n return cloned;\n }\n\n /**\n * Merge another StyleBuilder's styles into this one\n */\n merge(other: StyleBuilder): StyleBuilder {\n this.styles.push(...other.styles);\n return this;\n }\n}\n\n/**\n * Proxy-based dynamic styler for chainable console styling\n */\nfunction createStyler(): any {\n const builder = new StyleBuilder();\n return new Proxy(builder, {\n get(target: StyleBuilder, prop: string) {\n if (prop in target) {\n const method = (target as any)[prop];\n if (typeof method === 'function') {\n return method.bind(target);\n }\n return method;\n }\n return undefined;\n }\n });\n}\n\n/**\n * Dynamic styler instance for external use\n */\nexport const $ = createStyler();\n\n/**\n * Pre-defined style presets for common use cases\n */\nexport const StylePresets = {\n success: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #00b894 0%, #00a085 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n error: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #e84393 0%, #d63031 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n warning: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #fdcb6e 0%, #e17055 100%)')\n .color('#2d3436')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n info: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n debug: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #667eea 0%, #764ba2 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n muted: () => new StyleBuilder()\n .color('#6c757d')\n .font('Monaco, Consolas, monospace')\n .size('12px'),\n\n accent: () => new StyleBuilder()\n .bg('#f8f9fa')\n .color('#495057')\n .padding('2px 6px')\n .rounded('3px')\n .border('1px solid #dee2e6'),\n\n neon: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #0f3460 0%, #e94560 100%)')\n .color('#00ffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold()\n .shadow('0 0 10px rgba(0, 255, 255, 0.5)'),\n};","/**\n * Environment Detector - Robust environment detection for logger\n * Detects browser, terminal, server, and other runtime environments\n */\n\nexport type Environment = 'browser' | 'terminal' | 'server' | 'webworker' | 'deno' | 'unknown';\n\n/**\n * Main environment detection function\n */\nexport function getEnvironment(): Environment {\n // Check for Deno first\n if (typeof globalThis !== 'undefined' && (globalThis as any).Deno) {\n return 'deno';\n }\n\n // Check for WebWorker\n if (typeof window === 'undefined' && typeof self !== 'undefined' && typeof (self as any).importScripts === 'function') {\n return 'webworker';\n }\n\n // Check for Node.js (server environment)\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\n // Determine if it's running in a terminal or as a server\n if (isRunningInTerminal()) {\n return 'terminal';\n }\n return 'server';\n }\n\n // Check for browser\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n return 'browser';\n }\n\n return 'unknown';\n}\n\n/**\n * Check if running in an interactive terminal\n */\nexport function isRunningInTerminal(): boolean {\n // Check for common terminal indicators\n if (typeof process === 'undefined') return false;\n\n const isTTY = process.stdout && process.stdout.isTTY;\n const hasTerminalEnv = process.env && (\n process.env.TERM ||\n process.env.TERM_PROGRAM ||\n process.env.SSH_TTY ||\n process.env.TERM_SESSION_ID\n );\n\n // Check if we're running in common terminal programs\n const terminalPrograms = [\n 'vscode',\n 'hyper',\n 'iterm',\n 'terminal',\n 'alacritty',\n 'kitty',\n 'gnome-terminal',\n 'konsole',\n 'xterm',\n 'tmux',\n 'screen'\n ];\n\n const isTerminalProgram = hasTerminalEnv && terminalPrograms.some(program =>\n process.env.TERM_PROGRAM?.toLowerCase().includes(program) ||\n process.env.TERM?.toLowerCase().includes(program)\n );\n\n return Boolean(isTTY || hasTerminalEnv || isTerminalProgram);\n}\n\n/**\n * Check if environment supports ANSI colors\n */\nexport function supportsANSI(): boolean {\n const env = getEnvironment();\n\n if (env === 'browser') return false;\n if (env === 'terminal') return true;\n if (env === 'server') return checkServerANSISupport();\n\n return false;\n}\n\n/**\n * Check if server environment supports ANSI colors\n */\nfunction checkServerANSISupport(): boolean {\n if (typeof process === 'undefined') return false;\n\n // Check common environment variables that indicate ANSI support\n const supportsANSI = process.env && (\n process.env.COLORTERM ||\n process.env.FORCE_COLOR ||\n (process.env.TERM && process.env.TERM !== 'dumb') ||\n process.env.TERM_PROGRAM\n );\n\n return Boolean(supportsANSI);\n}\n\n/**\n * Get environment-specific color capability\n */\nexport function getColorCapability(): 'full' | 'basic' | 'none' {\n const env = getEnvironment();\n\n if (env === 'browser') {\n return 'full'; // CSS colors\n }\n\n if (!supportsANSI()) {\n return 'none';\n }\n\n // Check for 256-color or truecolor support\n if (typeof process !== 'undefined' && process.env) {\n const hasTrueColor = process.env.COLORTERM === 'truecolor' || process.env.COLORTERM === '24bit';\n const has256Colors = process.env.TERM && process.env.TERM.includes('256');\n\n if (hasTrueColor || has256Colors) {\n return 'full';\n }\n }\n\n return 'basic'; // Basic 16 colors\n}\n\n/**\n * Environment information for debugging\n */\nexport function getEnvironmentInfo() {\n return {\n environment: getEnvironment(),\n supportsANSI: supportsANSI(),\n colorCapability: getColorCapability(),\n isTTY: typeof process !== 'undefined' ? Boolean(process.stdout?.isTTY) : false,\n platform: typeof process !== 'undefined' ? process.platform : 'unknown',\n nodeVersion: typeof process !== 'undefined' ? process.versions?.node : null,\n term: typeof process !== 'undefined' ? process.env?.TERM : null,\n colorTerm: typeof process !== 'undefined' ? process.env?.COLORTERM : null\n };\n}","/**\n * Terminal Renderer - ANSI color rendering for terminal environments\n * Converts CSS-based styling to ANSI escape sequences for terminal output\n */\n\nimport type { LogLevel } from '../types/index.js';\nimport type { LogStyles } from '../types/index.js';\n\nexport type ANSIStyle = {\n text: string;\n timestamp?: string;\n level?: string;\n prefix?: string;\n message?: string;\n location?: string;\n reset: string;\n};\n\nexport class TerminalRenderer {\n private colorCapability: 'full' | 'basic' | 'none';\n\n constructor(colorCapability: 'full' | 'basic' | 'none' = 'full') {\n this.colorCapability = colorCapability;\n }\n\n /**\n * Get ANSI color codes for basic colors\n */\n private getColorCode(color: string, background: boolean = false): string {\n const colorCodes: Record<string, { normal: string; bright: string }> = {\n 'black': { normal: '30', bright: '90' },\n 'red': { normal: '31', bright: '91' },\n 'green': { normal: '32', bright: '92' },\n 'yellow': { normal: '33', bright: '93' },\n 'blue': { normal: '34', bright: '94' },\n 'magenta': { normal: '35', bright: '95' },\n 'cyan': { normal: '36', bright: '96' },\n 'white': { normal: '37', bright: '97' },\n 'gray': { normal: '90', bright: '37' },\n 'grey': { normal: '90', bright: '37' }\n };\n\n const codes = colorCodes[color.toLowerCase()] || { normal: '37', bright: '97' };\n const prefix = background ? '4' : '3';\n return `\\x1b[${codes.normal}m`;\n }\n\n /**\n * Get ANSI style codes\n */\n private getStyleCode(styles: string[]): string {\n const styleCodes: Record<string, string> = {\n 'bold': '1',\n 'dim': '2',\n 'italic': '3',\n 'underline': '4',\n 'reset': '0'\n };\n\n const codes = styles.map(style => styleCodes[style] || '0').join(';');\n return codes ? `\\x1b[${codes}m` : '';\n }\n\n /**\n * Convert log styles to ANSI formatting\n */\n renderTerminal(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n location?: string,\n styles?: LogStyles\n ): ANSIStyle {\n const reset = '\\x1b[0m';\n const result: ANSIStyle = { text: '', reset };\n\n // Apply preset styles if provided\n if (styles) {\n result.timestamp = this.styleTimestamp(timestamp, styles.timestamp);\n result.level = this.styleLevel(level, styles.level);\n result.prefix = this.stylePrefix(prefix, styles.prefix);\n result.message = this.styleMessage(message, styles.message);\n result.location = this.styleLocation(location, styles.location);\n } else {\n // Default styling based on level\n result.timestamp = this.styleTimestamp(timestamp);\n result.level = this.styleLevel(level);\n result.prefix = this.stylePrefix(prefix);\n result.message = this.styleMessage(message);\n result.location = this.styleLocation(location);\n }\n\n // Build complete text\n const parts: string[] = [];\n if (result.timestamp) parts.push(result.timestamp);\n if (result.level) parts.push(result.level);\n if (result.prefix) parts.push(result.prefix);\n if (result.message) parts.push(result.message);\n if (result.location) parts.push(result.location);\n\n result.text = parts.join(' ') + reset;\n return result;\n }\n\n /**\n * Style timestamp based on preset or defaults\n */\n private styleTimestamp(timestamp?: string, style?: LogStyles['timestamp']): string {\n if (!timestamp || !style?.show) return '';\n\n if (this.colorCapability === 'none') {\n return timestamp;\n }\n\n const dimStyle = this.getStyleCode(['dim']);\n return `${dimStyle}${timestamp}${'\\x1b[0m'}`;\n }\n\n /**\n * Style level with appropriate colors and formatting\n */\n private styleLevel(level: LogLevel, style?: LogStyles['level']): string {\n if (!style?.show) return '';\n\n const levelText = this.getLevelText(level);\n const levelColors: Record<LogLevel, string> = {\n 'debug': 'magenta',\n 'info': 'blue',\n 'warn': 'yellow',\n 'error': 'red',\n 'critical': 'red'\n };\n\n if (this.colorCapability === 'none') {\n return `[${levelText}]`;\n }\n\n const color = levelColors[level] || 'white';\n const colorCode = this.getColorCode(color);\n const boldStyle = this.getStyleCode(['bold']);\n\n if (style?.style === 'compact') {\n return `${colorCode}[${levelText}]${'\\x1b[0m'}`;\n } else {\n return `${colorCode}${boldStyle}[${levelText}]${'\\x1b[0m'}`;\n }\n }\n\n /**\n * Style prefix based on preset - now as a badge\n */\n private stylePrefix(prefix?: string, style?: LogStyles['prefix']): string {\n if (!prefix || !style?.show) return '';\n\n if (this.colorCapability === 'none') {\n return `[${prefix}]`;\n }\n\n // Create badge styling similar to level badges\n const colorCode = this.getColorCode('cyan');\n const bgBlack = '\\x1b[40m';\n return `${bgBlack}${colorCode}[${prefix.toUpperCase()}]${'\\x1b[0m'}`;\n }\n\n /**\n * Style message based on preset\n */\n private styleMessage(message: string, style?: LogStyles['message']): string {\n if (!style?.show) return message;\n\n return message; // Messages usually don't need styling\n }\n\n /**\n * Style location (file:line) information\n */\n private styleLocation(location?: string, style?: LogStyles['location']): string {\n if (!location || !style?.show) return '';\n\n if (this.colorCapability === 'none') {\n return `(${location})`;\n }\n\n const dimStyle = this.getStyleCode(['dim']);\n if (style?.style === 'clickable') {\n const underlineStyle = this.getStyleCode(['dim', 'underline']);\n return `${underlineStyle}(${location})${'\\x1b[0m'}`;\n }\n\n return `${dimStyle}(${location})${'\\x1b[0m'}`;\n }\n\n /**\n * Get text representation of log level\n */\n public getLevelText(level: LogLevel): string {\n const levelMap: Record<LogLevel, string> = {\n 'debug': 'DEBUG',\n 'info': 'INFO',\n 'warn': 'WARN',\n 'error': 'ERROR',\n 'critical': 'CRITICAL'\n };\n\n return levelMap[level] || String(level).toUpperCase();\n }\n\n /**\n * Create cyberpunk-style ANSI rendering\n */\n renderCyberpunk(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n location?: string\n ): ANSIStyle {\n const reset = '\\x1b[0m';\n const levelColors: Record<LogLevel, string> = {\n 'debug': '\\x1b[95m', // Bright magenta\n 'info': '\\x1b[94m', // Bright blue\n 'warn': '\\x1b[93m', // Bright yellow\n 'error': '\\x1b[91m', // Bright red\n 'critical': '\\x1b[91m\\x1b[1m' // Bright red + bold\n };\n\n const parts: string[] = [];\n\n if (timestamp) {\n parts.push(`\\x1b[90m${timestamp}${reset}`);\n }\n\n // Cyberpunk level styling\n const levelColor = levelColors[level] || '\\x1b[97m';\n const bgBlack = '\\x1b[40m';\n parts.push(`${bgBlack}${levelColor} ${this.getLevelText(level)} ${reset}`);\n\n if (prefix) {\n const bgBlack = '\\x1b[40m';\n parts.push(`${bgBlack}\\x1b[96m[${prefix.toUpperCase()}]${reset}`);\n }\n\n parts.push(message);\n\n if (location) {\n parts.push(`\\x1b[90m(${location})${reset}`);\n }\n\n return {\n text: parts.join(' '),\n reset\n };\n }\n\n /**\n * Create minimal ANSI rendering\n */\n renderMinimal(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string\n ): ANSIStyle {\n const reset = '\\x1b[0m';\n const levelColors: Record<LogLevel, string> = {\n 'debug': '\\x1b[95m', // Magenta\n 'info': '\\x1b[94m', // Blue\n 'warn': '\\x1b[93m', // Yellow\n 'error': '\\x1b[91m', // Red\n 'critical': '\\x1b[91m\\x1b[1m' // Red + bold\n };\n\n const parts: string[] = [];\n\n if (timestamp) {\n parts.push(`\\x1b[90m${timestamp}${reset}`);\n }\n\n const levelColor = levelColors[level] || '\\x1b[97m';\n parts.push(`${levelColor}${this.getLevelText(level)}:${reset}`);\n\n if (prefix) {\n parts.push(`\\x1b[96m[${prefix.toUpperCase()}]${reset}`);\n }\n\n parts.push(message);\n\n return {\n text: parts.join(' '),\n reset\n };\n }\n\n /**\n * Get chalk instance for log level (for compatibility with adapter)\n */\n public getChalkForLevel(level: LogLevel): any {\n const levelColors: Record<LogLevel, string> = {\n 'debug': 'magenta',\n 'info': 'blue',\n 'warn': 'yellow',\n 'error': 'red',\n 'critical': 'red'\n };\n\n return {\n color: (text: string) => {\n const color = levelColors[level] || 'white';\n const colorCode = this.getColorCode(color);\n return `${colorCode}${text}${'\\x1b[0m'}`;\n },\n bold: (text: string) => {\n const boldStyle = this.getStyleCode(['bold']);\n return `${boldStyle}${text}${'\\x1b[0m'}`;\n },\n dim: (text: string) => {\n const dimStyle = this.getStyleCode(['dim']);\n return `${dimStyle}${text}${'\\x1b[0m'}`;\n },\n bgGray: (text: string) => {\n return `\\x1b[100m${text}${'\\x1b[0m'}`;\n },\n bgBlue: (text: string) => {\n return `\\x1b[104m${text}${'\\x1b[0m'}`;\n },\n reset: (text: string) => text,\n cyan: {\n bold: (text: string) => {\n const cyan = this.getColorCode('cyan');\n const bold = this.getStyleCode(['bold']);\n return `${cyan}${bold}${text}${'\\x1b[0m'}`;\n },\n dim: (text: string) => {\n const cyan = this.getColorCode('cyan');\n const dim = this.getStyleCode(['dim']);\n return `${cyan}${dim}${text}${'\\x1b[0m'}`;\n },\n bg: (text: string) => {\n const bgBlack = '\\x1b[40m';\n const cyan = this.getColorCode('cyan');\n return `${bgBlack}${cyan}[${text.toUpperCase()}]${'\\x1b[0m'}`;\n }\n }\n };\n }\n}","/**\n * CSS to ANSI Adapter - Converts CSS-based styles to ANSI terminal styles\n * Bridges the gap between browser styling and terminal rendering\n */\n\nimport type { LogStyles } from '../types/index.js';\nimport type { ANSIStyle } from '../terminal/terminal-renderer.js';\nimport { TerminalRenderer } from '../terminal/terminal-renderer.js';\nimport type { LogLevel } from '../types/index.js';\nimport { getColorCapability } from './environment-detector.js';\n\nexport class CSS2ANSIAdapter {\n private renderer: TerminalRenderer;\n\n constructor() {\n const colorCapability = getColorCapability();\n this.renderer = new TerminalRenderer(colorCapability);\n }\n\n /**\n * Convert LogStyles to ANSIStyle for terminal rendering\n */\n adaptStyles(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n location?: string,\n styles?: LogStyles,\n presetName?: string\n ): ANSIStyle {\n // Special handling for specific presets that need unique terminal representations\n if (presetName) {\n switch (presetName) {\n case 'cyberpunk':\n return this.renderer.renderCyberpunk(level, message, timestamp, prefix, location);\n case 'minimal':\n return this.renderer.renderMinimal(level, message, timestamp, prefix);\n case 'production':\n return this.adaptProductionStyles(level, message, timestamp, prefix, location, styles);\n case 'debug':\n return this.adaptDebugStyles(level, message, timestamp, prefix, location, styles);\n case 'glassmorphism':\n return this.adaptGlassmorphismStyles(level, message, timestamp, prefix, location, styles);\n }\n }\n\n // Default adaptation using the renderer\n return this.renderer.renderTerminal(level, message, timestamp, prefix, location, styles);\n }\n\n /**\n * Adapt production preset for terminal\n */\n private adaptProductionStyles(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n location?: string,\n styles?: LogStyles\n ): ANSIStyle {\n const reset = '\\x1b[0m';\n const levelChalk = this.renderer.getChalkForLevel(level);\n\n const parts: string[] = [];\n\n // Production: clean, essential info only\n if (timestamp && styles?.timestamp?.show) {\n parts.push(levelChalk.dim(timestamp));\n }\n\n if (styles?.level?.show) {\n parts.push(levelChalk.color(`[${this.renderer['getLevelText'](level)}]`));\n }\n\n // Skip prefix in production (as per preset config)\n if (prefix && styles?.prefix?.show) {\n parts.push(levelChalk.dim(`[${prefix}]`));\n }\n\n if (message && styles?.message?.show) {\n parts.push(levelChalk.reset(message));\n }\n\n // Skip location in production (as per preset config)\n if (location && styles?.location?.show) {\n parts.push(levelChalk.dim(`(${location})`));\n }\n\n return {\n text: parts.join(' ') + reset,\n reset\n };\n }\n\n /**\n * Adapt debug preset for terminal\n */\n private adaptDebugStyles(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n location?: string,\n styles?: LogStyles\n ): ANSIStyle {\n const reset = '\\x1b[0m';\n const levelChalk = this.renderer.getChalkForLevel(level);\n\n const parts: string[] = [];\n\n // Debug: monospace fonts, detailed info, compact layout\n if (timestamp && styles?.timestamp?.show) {\n parts.push(levelChalk.dim(timestamp));\n }\n\n if (styles?.level?.show) {\n if (styles?.level?.style === 'compact') {\n parts.push(levelChalk.color(`[${this.renderer['getLevelText'](level)}]`));\n } else {\n parts.push(levelChalk.bold(`[${this.renderer['getLevelText'](level)}]`));\n }\n }\n\n if (prefix && styles?.prefix?.show) {\n if (styles?.prefix?.style === 'compact') {\n parts.push(levelChalk.cyan.dim(`[${prefix}]`));\n } else {\n parts.push(levelChalk.cyan.bold(`[${prefix}]`));\n }\n }\n\n if (message && styles?.message?.show) {\n parts.push(levelChalk.reset(message));\n }\n\n // Debug usually shows location\n if (location && styles?.location?.show) {\n if (styles?.location?.style === 'clickable') {\n parts.push(levelChalk.dim(`${location} (clickable)`));\n } else {\n parts.push(levelChalk.dim(`(${location})`));\n }\n }\n\n return {\n text: parts.join(' ') + reset,\n reset\n };\n }\n\n /**\n * Adapt glassmorphism preset for terminal\n */\n private adaptGlassmorphismStyles(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n location?: string,\n styles?: LogStyles\n ): ANSIStyle {\n const reset = '\\x1b[0m';\n const levelChalk = this.renderer.getChalkForLevel(level);\n\n const parts: string[] = [];\n\n // Glassmorphism: subtle, transparent effects\n if (timestamp && styles?.timestamp?.show) {\n parts.push(levelChalk.dim(timestamp));\n }\n\n if (styles?.level?.show) {\n // Subtle level styling with dim background effect\n parts.push(levelChalk.bgGray(` ${this.renderer['getLevelText'](level)} `));\n }\n\n if (prefix && styles?.prefix?.show) {\n parts.push(levelChalk.bgBlue(`[${prefix}]`));\n }\n\n if (message && styles?.message?.show) {\n parts.push(levelChalk.reset(message));\n }\n\n if (location && styles?.location?.show) {\n parts.push(levelChalk.dim(`(${location})`));\n }\n\n return {\n text: parts.join(' ') + reset,\n reset\n };\n }\n\n /**\n * Convert CSS color values to ANSI-friendly colors\n */\n adaptColor(cssColor: string): string {\n // Handle hex colors\n if (cssColor.startsWith('#')) {\n return cssColor; // TerminalRenderer will handle this\n }\n\n // Handle RGB colors\n if (cssColor.startsWith('rgb(')) {\n return cssColor; // TerminalRenderer will handle this\n }\n\n // Handle CSS gradients - extract primary color\n if (cssColor.includes('gradient')) {\n return this.extractColorFromGradient(cssColor);\n }\n\n // Handle CSS color names\n return this.cssNameToANSI(cssColor);\n }\n\n /**\n * Extract primary color from CSS gradient\n */\n private extractColorFromGradient(gradient: string): string {\n // Extract first color from linear-gradient\n const match = gradient.match(/#[0-9a-fA-F]{6}|rgb\\([^)]+\\)/);\n return match ? match[0] : '#ffffff';\n }\n\n /**\n * Convert CSS color names to ANSI-compatible names\n */\n private cssNameToANSI(cssColor: string): string {\n const colorMap: Record<string, string> = {\n 'black': 'black',\n 'white': 'white',\n 'red': 'red',\n 'green': 'green',\n 'blue': 'blue',\n 'yellow': 'yellow',\n 'cyan': 'cyan',\n 'magenta': 'magenta',\n 'gray': 'gray',\n 'grey': 'gray',\n 'orange': 'yellow',\n 'purple': 'magenta',\n 'pink': 'red',\n 'brown': 'yellow',\n 'lightblue': 'cyan',\n 'lightgreen': 'green',\n 'lightgray': 'gray',\n 'lightgrey': 'gray'\n };\n\n return colorMap[cssColor.toLowerCase()] || 'white';\n }\n\n /**\n * Check if a style should be rendered in terminal\n */\n shouldRenderStyle(styleType: string, styles?: LogStyles): boolean {\n if (!styles) return true;\n\n const styleConfig = (styles as any)[styleType];\n return styleConfig?.show !== false;\n }\n\n /**\n * Get renderer instance for advanced usage\n */\n getRenderer(): TerminalRenderer {\n return this.renderer;\n }\n}\n\n// Singleton instance for consistent styling\nexport const css2ansiAdapter = new CSS2ANSIAdapter();\n\n/**\n * Convenience function for quick style adaptation\n */\nexport function adaptToTerminal(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n location?: string,\n styles?: LogStyles,\n presetName?: string\n): ANSIStyle {\n return css2ansiAdapter.adaptStyles(level, message, timestamp, prefix, location, styles, presetName);\n}","/**\n * @fileoverview Styled output creation utilities for Advanced Logger\n */\n\nimport type { LogLevel, StackInfo, DevToolsTheme, AdaptiveColors } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\nimport { StyleBuilder } from '../styling/index.js';\nimport { ADAPTIVE_COLORS } from '../constants.js';\nimport { getEnvironment, supportsANSI } from './environment-detector.js';\nimport { adaptToTerminal } from './adapter.js';\nimport type { LogStyles } from '../types/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 * Detects the current DevTools theme preference\n */\nexport function detectDevToolsTheme(): DevToolsTheme {\n try {\n if (typeof window === 'undefined' || !window.matchMedia) {\n return 'light'; // Safe fallback for SSR or older browsers\n }\n \n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n return mediaQuery.matches ? 'dark' : 'light';\n } catch (error) {\n console.warn('Failed to detect DevTools theme:', error);\n return 'light'; // Fallback to light theme\n }\n}\n\n/**\n * Gets adaptive color based on current DevTools theme\n */\nexport function getAdaptiveColor(colors: AdaptiveColors, theme?: DevToolsTheme): string {\n const currentTheme = theme ?? detectDevToolsTheme();\n return colors[currentTheme];\n}\n\n/**\n * Sets up theme change listener for dynamic updates\n */\nexport function setupThemeChangeListener(callback: (theme: DevToolsTheme) => void): (() => void) | null {\n try {\n if (typeof window === 'undefined' || !window.matchMedia) {\n return null;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => {\n callback(e.matches ? 'dark' : 'light');\n };\n\n // Use newer addEventListener if available, fallback to addListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n } else if (mediaQuery.addListener) {\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener?.(handler);\n }\n\n return null;\n } catch (error) {\n console.warn('Failed to set up theme change listener:', error);\n return null;\n }\n}\n\n\n/**\n * Creates styled console output with multiple %c formatters\n * Automatically adapts to browser or terminal environment\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 autoDetectTheme: boolean = true,\n presetStyles?: LogStyles,\n presetName?: string\n): [string, ...string[]] {\n const levelConfig = levelStyles[level];\n const timestamp = formatTimestamp();\n const environment = getEnvironment();\n\n // Check if we should use terminal rendering\n if (environment !== 'browser' && supportsANSI()) {\n return createTerminalOutput(level, message, timestamp, prefix, stackInfo, presetStyles, presetName);\n }\n\n // Browser rendering (existing logic)\n const currentTheme = autoDetectTheme ? detectDevToolsTheme() : 'light';\n\n // Base styles with adaptive colors\n const timestampStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.timestamp, currentTheme))\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(getAdaptiveColor(ADAPTIVE_COLORS.prefixBackground, currentTheme))\n .color(getAdaptiveColor(ADAPTIVE_COLORS.prefix, currentTheme))\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(getAdaptiveColor(ADAPTIVE_COLORS.messageText, currentTheme))\n .font('system-ui, -apple-system, sans-serif')\n .size('14px')\n .build();\n\n const locationStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.location, currentTheme))\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\n/**\n * Create terminal output with ANSI colors and formatting\n */\nexport function createTerminalOutput(\n level: LogLevel,\n message: string,\n timestamp?: string,\n prefix?: string,\n stackInfo?: StackInfo | null,\n presetStyles?: LogStyles,\n presetName?: string\n): [string, ...string[]] {\n const location = stackInfo ? `${stackInfo.file}:${stackInfo.line}:${stackInfo.column}` : undefined;\n\n // Use the adapter to convert styles to ANSI\n const ansiStyle = adaptToTerminal(\n level,\n message,\n timestamp,\n prefix,\n location,\n presetStyles,\n presetName\n );\n\n return [ansiStyle.text];\n}","/**\n * @fileoverview Environment detection utilities for Universal Logger\n */\n\n/**\n * Checks if running in Node.js environment\n */\nexport const isNode = typeof process !== 'undefined' && \n process.versions && \n process.versions.node;\n\n/**\n * Checks if running in browser environment\n */\nexport const isBrowser = typeof window !== 'undefined' && \n typeof document !== 'undefined';\n\n/**\n * Checks if running in web worker environment\n */\nexport const isWebWorker = typeof self !== 'undefined' && \n typeof (self as any).importScripts === 'function';\n\n/**\n * Checks if running in Deno environment\n */\nexport const isDeno = typeof globalThis !== 'undefined' && \n 'Deno' in globalThis;\n\n/**\n * Gets the current runtime environment\n */\nexport function getRuntimeEnvironment(): 'node' | 'browser' | 'webworker' | 'deno' | 'unknown' {\n if (isNode) return 'node';\n if (isBrowser) return 'browser';\n if (isWebWorker) return 'webworker';\n if (isDeno) return 'deno';\n return 'unknown';\n}\n\n/**\n * Checks if colors/styling should be supported in current environment\n */\nexport function supportsColors(): boolean {\n if (isBrowser) {\n // Browser always supports CSS colors\n return true;\n }\n \n if (isNode) {\n // Check if Node.js supports colors\n return process.stdout?.isTTY === true || \n process.env.FORCE_COLOR === '1' ||\n process.env.FORCE_COLOR === 'true';\n }\n \n return false;\n}\n\n/**\n * Checks if CSS styling is supported (browser-only feature)\n */\nexport function supportsCSSColors(): boolean {\n return isBrowser;\n}\n\n/**\n * Checks if ANSI colors are supported (terminal environments)\n */\nexport function supportsANSIColors(): boolean {\n if (isNode) {\n return process.stdout?.isTTY === true || \n process.env.FORCE_COLOR === '1' ||\n process.env.FORCE_COLOR === 'true';\n }\n \n return false;\n}\n\n/**\n * Gets environment-specific information\n */\nexport function getEnvironmentInfo() {\n const env = getRuntimeEnvironment();\n \n return {\n runtime: env,\n supportsColors: supportsColors(),\n supportsCSSColors: supportsCSSColors(),\n supportsANSIColors: supportsANSIColors(),\n isProduction: isNode ? process.env.NODE_ENV === 'production' : false,\n version: isNode ? process.versions.node : (isBrowser ? navigator.userAgent : 'unknown')\n };\n}"],"names":["isMinifiedFile","filename","some","pattern","test","extractCleanFilename","fullPath","split","pop","replace","DEFAULT_CONFIG","verbosity","enableColors","enableTimestamps","enableStackTrace","theme","bannerType","bufferSize","autoDetectTheme","outputFormat","TIME_UNITS","ms","s","m","h","d","ADAPTIVE_COLORS","timestamp","light","dark","messageText","prefix","prefixBackground","location","BUILD_PRESETS","nextjs","webpack","ci","terminal","ENVIRONMENT_DETECTION","isNextJS","process","env","NEXT_RUNTIME","NEXT_PUBLIC_VERCEL_ENV","argv","arg","includes","isWebpack","WEBPACK_ENV","WEBPACK_BUILD","isCI","CI","GITHUB_ACTIONS","JENKINS_URL","GITLAB_CI","TRAVIS","CIRCLECI","isBuild","isTerminal","stdout","isTTY","TERM","detectEnvironmentPreset","formatTimestamp","Date","toISOString","StyleBuilder","styles","constructor","baseStyle","this","push","bg","background","color","border","shadow","padding","margin","rounded","radius","bold","font","mono","system","size","lineHeight","height","underline","uppercase","opacity","value","display","position","transform","animation","transition","cursor","custom","property","css","build","join","clear","clone","cloned","merge","other","builder","Proxy","get","target","prop","method","bind","createStyler","StylePresets","success","error","warning","info","debug","muted","accent","neon","getEnvironment","globalThis","Deno","window","self","importScripts","versions","node","hasTerminalEnv","TERM_PROGRAM","SSH_TTY","TERM_SESSION_ID","isTerminalProgram","program","toLowerCase","Boolean","isRunningInTerminal","document","supportsANSI","COLORTERM","FORCE_COLOR","checkServerANSISupport","TerminalRenderer","colorCapability","getColorCode","black","normal","bright","red","green","yellow","blue","magenta","cyan","white","gray","grey","getStyleCode","styleCodes","dim","italic","reset","codes","map","style","renderTerminal","level","message","result","text","styleTimestamp","styleLevel","stylePrefix","styleMessage","styleLocation","parts","show","levelText","getLevelText","warn","critical","colorCode","boldStyle","toUpperCase","dimStyle","String","renderCyberpunk","levelColor","bgBlack","renderMinimal","getChalkForLevel","levelColors","bgGray","bgBlue","css2ansiAdapter","renderer","hasTrueColor","has256Colors","getColorCapability","adaptStyles","presetName","adaptProductionStyles","adaptDebugStyles","adaptGlassmorphismStyles","levelChalk","adaptColor","cssColor","startsWith","extractColorFromGradient","cssNameToANSI","gradient","match","orange","purple","pink","brown","lightblue","lightgreen","lightgray","lightgrey","shouldRenderStyle","styleType","styleConfig","getRenderer","detectDevToolsTheme","matchMedia","matches","console","getAdaptiveColor","colors","isNode","isBrowser","MIN_SIZE","DEFAULT_SIZE","MAX_SIZE","json","extension","mimeType","csv","markdown","plain","html","emoji","label","levelStyles","stackInfo","presetStyles","levelConfig","ansiStyle","adaptToTerminal","file","line","column","createTerminalOutput","currentTheme","timestampStyle","levelStyle","prefixStyle","messageStyle","locationStyle","format","slice","div","createElement","textContent","innerHTML","date","toTimeString","now","Math","random","toString","substr","preset","stack","Error","lines","filter","trim","i","length","chromeMatch","firefoxMatch","safariMatch","functionName","lineStr","columnStr","cleanFileName","lineNum","parseInt","function","input","isoDate","isNaN","getTime","timeStr","amount","unit","multiplier","parseRelativeTime","obj","_maxDepth","JSON","stringify","_key","callback","mediaQuery","handler","e","addEventListener","removeEventListener","addListener","removeListener"],"mappings":"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"}