@mks2508/better-logger 0.14.0-alpha.2 → 1.1.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 (205) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/dist/Logger.d.ts +12 -16
  3. package/dist/Logger.d.ts.map +1 -1
  4. package/dist/ScopedLogger.d.ts +1 -9
  5. package/dist/chunks/{Logger-D_p3xnbq.js → Logger-C9zTFYBh.js} +2 -2
  6. package/dist/chunks/Logger-C9zTFYBh.js.map +1 -0
  7. package/dist/chunks/{Logger-Crw1woqR.js → Logger-Th9SfADL.js} +50 -17
  8. package/dist/chunks/Logger-Th9SfADL.js.map +1 -0
  9. package/dist/chunks/ScopedLogger-HgV_J-ug.js +2 -0
  10. package/dist/chunks/ScopedLogger-HgV_J-ug.js.map +1 -0
  11. package/dist/chunks/ScopedLogger-uAAeJkfA.js +361 -0
  12. package/dist/chunks/ScopedLogger-uAAeJkfA.js.map +1 -0
  13. package/dist/chunks/environment-5I5unY89.js +4 -0
  14. package/dist/chunks/environment-5I5unY89.js.map +1 -0
  15. package/dist/chunks/{environment-Bxbnw4pd.js → environment-wXLQvk5g.js} +103 -11
  16. package/dist/chunks/environment-wXLQvk5g.js.map +1 -0
  17. package/dist/chunks/formatting-CiFnwe1I.js +2 -0
  18. package/dist/chunks/formatting-CiFnwe1I.js.map +1 -0
  19. package/dist/chunks/formatting-DIhpRCCk.js +380 -0
  20. package/dist/chunks/formatting-DIhpRCCk.js.map +1 -0
  21. package/dist/cli/CommandProcessor.d.ts +1 -4
  22. package/dist/cli/commands/ConfigCommand.d.ts +2 -5
  23. package/dist/cli/commands/ExportCommand.d.ts +2 -5
  24. package/dist/cli/commands/HistoryCommand.d.ts +2 -5
  25. package/dist/cli/commands/StatusCommand.d.ts +2 -5
  26. package/dist/cli/commands/ThemeCommand.d.ts +2 -5
  27. package/dist/cli/help.d.ts +2 -5
  28. package/dist/cli/index.d.ts +1 -1
  29. package/dist/constants.d.ts +110 -5
  30. package/dist/constants.d.ts.map +1 -1
  31. package/dist/core.cjs +1 -1
  32. package/dist/core.cjs.map +1 -1
  33. package/dist/core.d.ts +1 -8
  34. package/dist/core.d.ts.map +1 -1
  35. package/dist/core.js +281 -307
  36. package/dist/core.js.map +1 -1
  37. package/dist/exports-module.d.ts +1 -8
  38. package/dist/exports.cjs +1 -1
  39. package/dist/exports.js +2 -2
  40. package/dist/handlers/AnalyticsLogHandler.d.ts +1 -4
  41. package/dist/handlers/ExportLogHandler.d.ts +1 -4
  42. package/dist/handlers/ExportLogHandler.d.ts.map +1 -1
  43. package/dist/handlers/FileLogHandler.d.ts +1 -4
  44. package/dist/handlers/RemoteLogHandler.d.ts +1 -4
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.ts +8 -41
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +246 -159
  50. package/dist/index.js.map +1 -1
  51. package/dist/styling/LogStyleBuilder.d.ts +2 -5
  52. package/dist/styling/SemanticStyles.d.ts +0 -3
  53. package/dist/styling/SmartPresets.d.ts +1 -4
  54. package/dist/styling/banners.d.ts +1 -4
  55. package/dist/styling/themes.d.ts +2 -5
  56. package/dist/styling-module.d.ts +1 -8
  57. package/dist/styling.cjs +1 -1
  58. package/dist/styling.js +3 -3
  59. package/dist/types/core.d.ts +13 -0
  60. package/dist/types/core.d.ts.map +1 -1
  61. package/dist/types/handlers.d.ts +1 -4
  62. package/dist/types/index.d.ts +1 -1
  63. package/dist/types/index.d.ts.map +1 -1
  64. package/dist/utils/ansi-colors.d.ts +156 -0
  65. package/dist/utils/ansi-colors.d.ts.map +1 -0
  66. package/dist/utils/formatting.d.ts +20 -2
  67. package/dist/utils/formatting.d.ts.map +1 -1
  68. package/dist/utils/index.d.ts +1 -0
  69. package/dist/utils/index.d.ts.map +1 -1
  70. package/dist/utils/output.d.ts +1 -4
  71. package/dist/utils/stackTrace.d.ts +1 -4
  72. package/package.json +2 -1
  73. package/src/Logger.ts +102 -64
  74. package/src/constants.ts +131 -1
  75. package/src/core.ts +11 -7
  76. package/src/handlers/ExportLogHandler.ts +2 -1
  77. package/src/index.ts +62 -27
  78. package/src/styling/SemanticStyles.ts +1 -1
  79. package/src/types/core.ts +15 -1
  80. package/src/types/index.ts +1 -0
  81. package/src/utils/ansi-colors.ts +333 -0
  82. package/src/utils/formatting.ts +196 -6
  83. package/src/utils/index.ts +23 -11
  84. package/vite.config.ts +1 -1
  85. package/dist/.tsbuildinfo +0 -1
  86. package/dist/Logger.js +0 -1124
  87. package/dist/ScopedLogger.js +0 -426
  88. package/dist/chunks/Logger-Crw1woqR.js.map +0 -1
  89. package/dist/chunks/Logger-D_p3xnbq.js.map +0 -1
  90. package/dist/chunks/environment-Bxbnw4pd.js.map +0 -1
  91. package/dist/chunks/environment-Dm66zOML.js +0 -4
  92. package/dist/chunks/environment-Dm66zOML.js.map +0 -1
  93. package/dist/chunks/formatting-C0riPC5_.js +0 -95
  94. package/dist/chunks/formatting-C0riPC5_.js.map +0 -1
  95. package/dist/chunks/formatting-DNCAV66-.js +0 -2
  96. package/dist/chunks/formatting-DNCAV66-.js.map +0 -1
  97. package/dist/cli/CommandProcessor.js +0 -184
  98. package/dist/cli/commands/ConfigCommand.js +0 -88
  99. package/dist/cli/commands/ExportCommand.js +0 -243
  100. package/dist/cli/commands/HistoryCommand.js +0 -96
  101. package/dist/cli/commands/StatusCommand.js +0 -93
  102. package/dist/cli/commands/ThemeCommand.js +0 -79
  103. package/dist/cli/help.js +0 -118
  104. package/dist/cli/index.js +0 -46
  105. package/dist/constants.js +0 -159
  106. package/dist/example.js +0 -154
  107. package/dist/exports-module.js +0 -260
  108. package/dist/handlers/AnalyticsLogHandler.js +0 -19
  109. package/dist/handlers/ExportLogHandler.js +0 -516
  110. package/dist/handlers/FileLogHandler.js +0 -156
  111. package/dist/handlers/RemoteLogHandler.js +0 -37
  112. package/dist/handlers/index.js +0 -7
  113. package/dist/main.js +0 -139
  114. package/dist/styling/LogStyleBuilder.js +0 -289
  115. package/dist/styling/SemanticStyles.js +0 -339
  116. package/dist/styling/SmartPresets.js +0 -276
  117. package/dist/styling/StyleBuilder.js +0 -280
  118. package/dist/styling/banners.js +0 -155
  119. package/dist/styling/index.js +0 -9
  120. package/dist/styling/themes.js +0 -231
  121. package/dist/styling-module.js +0 -199
  122. package/dist/types/Logger.d.ts +0 -700
  123. package/dist/types/Logger.d.ts.map +0 -1
  124. package/dist/types/ScopedLogger.d.ts +0 -310
  125. package/dist/types/ScopedLogger.d.ts.map +0 -1
  126. package/dist/types/cli/CommandProcessor.d.ts +0 -100
  127. package/dist/types/cli/CommandProcessor.d.ts.map +0 -1
  128. package/dist/types/cli/commands/ConfigCommand.d.ts +0 -14
  129. package/dist/types/cli/commands/ConfigCommand.d.ts.map +0 -1
  130. package/dist/types/cli/commands/ExportCommand.d.ts +0 -48
  131. package/dist/types/cli/commands/ExportCommand.d.ts.map +0 -1
  132. package/dist/types/cli/commands/HistoryCommand.d.ts +0 -47
  133. package/dist/types/cli/commands/HistoryCommand.d.ts.map +0 -1
  134. package/dist/types/cli/commands/StatusCommand.d.ts +0 -30
  135. package/dist/types/cli/commands/StatusCommand.d.ts.map +0 -1
  136. package/dist/types/cli/commands/ThemeCommand.d.ts +0 -30
  137. package/dist/types/cli/commands/ThemeCommand.d.ts.map +0 -1
  138. package/dist/types/cli/help.d.ts +0 -12
  139. package/dist/types/cli/help.d.ts.map +0 -1
  140. package/dist/types/cli/index.d.ts +0 -15
  141. package/dist/types/cli/index.d.ts.map +0 -1
  142. package/dist/types/constants.d.ts +0 -119
  143. package/dist/types/constants.d.ts.map +0 -1
  144. package/dist/types/core.js +0 -28
  145. package/dist/types/example.d.ts +0 -18
  146. package/dist/types/example.d.ts.map +0 -1
  147. package/dist/types/exports-module.d.ts +0 -196
  148. package/dist/types/exports-module.d.ts.map +0 -1
  149. package/dist/types/handlers/AnalyticsLogHandler.d.ts +0 -8
  150. package/dist/types/handlers/AnalyticsLogHandler.d.ts.map +0 -1
  151. package/dist/types/handlers/ExportLogHandler.d.ts +0 -100
  152. package/dist/types/handlers/ExportLogHandler.d.ts.map +0 -1
  153. package/dist/types/handlers/FileLogHandler.d.ts +0 -33
  154. package/dist/types/handlers/FileLogHandler.d.ts.map +0 -1
  155. package/dist/types/handlers/RemoteLogHandler.d.ts +0 -11
  156. package/dist/types/handlers/RemoteLogHandler.d.ts.map +0 -1
  157. package/dist/types/handlers/index.d.ts +0 -8
  158. package/dist/types/handlers/index.d.ts.map +0 -1
  159. package/dist/types/handlers.js +0 -4
  160. package/dist/types/index.js +0 -4
  161. package/dist/types/main.d.ts +0 -2
  162. package/dist/types/main.d.ts.map +0 -1
  163. package/dist/types/styling/LogStyleBuilder.d.ts +0 -146
  164. package/dist/types/styling/LogStyleBuilder.d.ts.map +0 -1
  165. package/dist/types/styling/SemanticStyles.d.ts +0 -178
  166. package/dist/types/styling/SemanticStyles.d.ts.map +0 -1
  167. package/dist/types/styling/SmartPresets.d.ts +0 -22
  168. package/dist/types/styling/SmartPresets.d.ts.map +0 -1
  169. package/dist/types/styling/StyleBuilder.d.ts +0 -140
  170. package/dist/types/styling/StyleBuilder.d.ts.map +0 -1
  171. package/dist/types/styling/banners.d.ts +0 -42
  172. package/dist/types/styling/banners.d.ts.map +0 -1
  173. package/dist/types/styling/index.d.ts +0 -10
  174. package/dist/types/styling/index.d.ts.map +0 -1
  175. package/dist/types/styling/themes.d.ts +0 -7
  176. package/dist/types/styling/themes.d.ts.map +0 -1
  177. package/dist/types/styling-module.d.ts +0 -178
  178. package/dist/types/styling-module.d.ts.map +0 -1
  179. package/dist/types/types/core.d.ts +0 -221
  180. package/dist/types/types/core.d.ts.map +0 -1
  181. package/dist/types/types/handlers.d.ts +0 -85
  182. package/dist/types/types/handlers.d.ts.map +0 -1
  183. package/dist/types/types/index.d.ts +0 -7
  184. package/dist/types/types/index.d.ts.map +0 -1
  185. package/dist/types/utils/environment.d.ts +0 -47
  186. package/dist/types/utils/environment.d.ts.map +0 -1
  187. package/dist/types/utils/formatting.d.ts +0 -37
  188. package/dist/types/utils/formatting.d.ts.map +0 -1
  189. package/dist/types/utils/index.d.ts +0 -7
  190. package/dist/types/utils/index.d.ts.map +0 -1
  191. package/dist/types/utils/opentui-detection.d.ts +0 -34
  192. package/dist/types/utils/opentui-detection.d.ts.map +0 -1
  193. package/dist/types/utils/output.d.ts +0 -41
  194. package/dist/types/utils/output.d.ts.map +0 -1
  195. package/dist/types/utils/stackTrace.d.ts +0 -6
  196. package/dist/types/utils/stackTrace.d.ts.map +0 -1
  197. package/dist/types/utils/timestamps.d.ts +0 -20
  198. package/dist/types/utils/timestamps.d.ts.map +0 -1
  199. package/dist/utils/environment.js +0 -85
  200. package/dist/utils/formatting.js +0 -117
  201. package/dist/utils/index.js +0 -6
  202. package/dist/utils/opentui-detection.js +0 -116
  203. package/dist/utils/output.js +0 -150
  204. package/dist/utils/stackTrace.js +0 -81
  205. package/dist/utils/timestamps.js +0 -71
package/dist/core.js CHANGED
@@ -1,317 +1,291 @@
1
- /**
2
- * @fileoverview Core Logger Module - Minimal logging without advanced features
3
- * @version 0.0.1
4
- *
5
- * This module provides the essential logging functionality without visual enhancements,
6
- * SVG support, or advanced styling. Perfect for lightweight applications or server-side usage.
7
- */
8
- // Core utilities
9
- import { parseStackTrace } from './utils/index.js';
10
- // Universal formatting and environment detection
11
- import { createPlainOutput, getConsoleMethod, createLogEntry, formatTablePlain } from './utils/formatting.js';
12
- import { isBrowser, isNode, supportsCSSColors } from './utils/environment.js';
13
- import { createStyledOutput } from './utils/output.js';
14
- // Constants
15
- import { DEFAULT_CONFIG, LEVEL_STYLES } from './constants.js';
16
- /**
17
- * Minimal Logger class with core functionality only
18
- *
19
- * @example
20
- * ```typescript
21
- * import { CoreLogger } from '@mks2508/better-logger/core';
22
- *
23
- * const logger = new CoreLogger();
24
- * logger.info('Hello world');
25
- * logger.error('Something went wrong', error);
26
- * ```
27
- */
28
- export class CoreLogger {
29
- config;
30
- scopedPrefix;
31
- handlers = [];
32
- timers = new Map();
33
- groupDepth = 0;
34
- /**
35
- * Creates a new CoreLogger instance
36
- * @param config - Optional configuration
37
- */
38
- constructor(config = {}) {
39
- this.config = {
40
- ...DEFAULT_CONFIG,
41
- ...config,
42
- // Auto-configure based on environment
43
- enableColors: config.enableColors ?? (isBrowser ? true : false),
44
- enableTimestamps: config.enableTimestamps ?? true,
45
- enableStackTrace: config.enableStackTrace ?? false,
46
- autoDetectTheme: config.autoDetectTheme ?? true
47
- };
1
+ import { D as DEFAULT_CONFIG, a as isBrowser, p as parseStackTrace, s as supportsCSSColors, c as createStyledOutput, L as LEVEL_STYLES, i as isNode } from "./chunks/environment-wXLQvk5g.js";
2
+ import { o as getConsoleMethod, c as createOutput, p as createLogEntry, q as formatTablePlain, r as createPlainOutput } from "./chunks/formatting-DIhpRCCk.js";
3
+ class CoreLogger {
4
+ config;
5
+ scopedPrefix;
6
+ handlers = [];
7
+ timers = /* @__PURE__ */ new Map();
8
+ groupDepth = 0;
9
+ /**
10
+ * Creates a new CoreLogger instance
11
+ * @param config - Optional configuration
12
+ */
13
+ constructor(config = {}) {
14
+ this.config = {
15
+ ...DEFAULT_CONFIG,
16
+ ...config,
17
+ // Auto-configure based on environment
18
+ enableColors: config.enableColors ?? (isBrowser ? true : false),
19
+ enableTimestamps: config.enableTimestamps ?? true,
20
+ enableStackTrace: config.enableStackTrace ?? false,
21
+ autoDetectTheme: config.autoDetectTheme ?? true,
22
+ outputFormat: config.outputFormat ?? "auto"
23
+ };
24
+ }
25
+ // ===== CONFIGURATION METHODS =====
26
+ /**
27
+ * Get current configuration
28
+ */
29
+ getConfig() {
30
+ return { ...this.config };
31
+ }
32
+ /**
33
+ * Sets the global prefix for all log messages
34
+ */
35
+ setGlobalPrefix(prefix) {
36
+ this.config.globalPrefix = prefix;
37
+ }
38
+ /**
39
+ * Sets the verbosity level for filtering log output
40
+ */
41
+ setVerbosity(level) {
42
+ this.config.verbosity = level;
43
+ }
44
+ /**
45
+ * Creates a scoped logger with a specific prefix
46
+ */
47
+ scope(prefix) {
48
+ const scopedLogger = new CoreLogger(this.config);
49
+ scopedLogger.scopedPrefix = prefix;
50
+ scopedLogger.handlers = [...this.handlers];
51
+ return scopedLogger;
52
+ }
53
+ /**
54
+ * Adds a custom log handler for extensibility
55
+ */
56
+ addHandler(handler) {
57
+ this.handlers.push(handler);
58
+ }
59
+ // ===== CORE LOGGING METHODS =====
60
+ /**
61
+ * Checks if a log level should be output based on current verbosity
62
+ */
63
+ shouldLog(level) {
64
+ if (this.config.verbosity === "silent") return false;
65
+ const levels = { debug: 0, info: 1, warn: 2, error: 3, critical: 4 };
66
+ return levels[level] >= levels[this.config.verbosity];
67
+ }
68
+ /**
69
+ * Gets the effective prefix (global + scoped)
70
+ */
71
+ getEffectivePrefix() {
72
+ const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);
73
+ return parts.length > 0 ? parts.join(":") : void 0;
74
+ }
75
+ /**
76
+ * Core logging method with universal formatting
77
+ */
78
+ log(level, ...args) {
79
+ if (!this.shouldLog(level)) return;
80
+ const prefix = this.getEffectivePrefix();
81
+ const message = String(args[0] || "");
82
+ const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;
83
+ const consoleMethod = getConsoleMethod(level);
84
+ if (isBrowser && this.config.enableColors && supportsCSSColors()) {
85
+ try {
86
+ const [format, ...styles] = createStyledOutput(
87
+ level,
88
+ LEVEL_STYLES,
89
+ prefix,
90
+ message,
91
+ stackInfo,
92
+ this.config.autoDetectTheme
93
+ );
94
+ console[consoleMethod](format, ...styles, ...args.slice(1));
95
+ } catch (error2) {
96
+ const output = createOutput(level, message, prefix, stackInfo, this.config.outputFormat);
97
+ console[consoleMethod](output, ...args.slice(1));
98
+ }
99
+ } else {
100
+ const groupIndent = " ".repeat(this.groupDepth);
101
+ const output = groupIndent + createOutput(level, message, prefix, stackInfo, this.config.outputFormat);
102
+ console[consoleMethod](output, ...args.slice(1));
48
103
  }
49
- // ===== CONFIGURATION METHODS =====
50
- /**
51
- * Get current configuration
52
- */
53
- getConfig() {
54
- return { ...this.config };
104
+ const logEntry = createLogEntry(level, message, args, prefix, stackInfo);
105
+ const metadata = {
106
+ timestamp: logEntry.timestamp,
107
+ level,
108
+ prefix,
109
+ stackInfo: logEntry.location
110
+ };
111
+ this.handlers.forEach((handler) => {
112
+ try {
113
+ handler.handle(level, message, args, metadata);
114
+ } catch (error2) {
115
+ console.error("Log handler failed:", error2);
116
+ }
117
+ });
118
+ }
119
+ /**
120
+ * Logs debug information (lowest priority)
121
+ */
122
+ debug(...args) {
123
+ this.log("debug", ...args);
124
+ }
125
+ /**
126
+ * Logs informational messages
127
+ */
128
+ info(...args) {
129
+ this.log("info", ...args);
130
+ }
131
+ /**
132
+ * Logs warning messages
133
+ */
134
+ warn(...args) {
135
+ this.log("warn", ...args);
136
+ }
137
+ /**
138
+ * Logs error messages
139
+ */
140
+ error(...args) {
141
+ this.log("error", ...args);
142
+ }
143
+ /**
144
+ * Logs critical errors (highest priority)
145
+ */
146
+ critical(...args) {
147
+ this.log("critical", ...args);
148
+ }
149
+ /**
150
+ * Logs trace information (detailed debugging)
151
+ */
152
+ trace(...args) {
153
+ this.log("debug", ...args);
154
+ if (this.shouldLog("debug")) {
155
+ console.trace(...args);
55
156
  }
56
- /**
57
- * Sets the global prefix for all log messages
58
- */
59
- setGlobalPrefix(prefix) {
60
- this.config.globalPrefix = prefix;
157
+ }
158
+ // ===== BASIC ADVANCED FEATURES =====
159
+ /**
160
+ * Displays data in a table format
161
+ */
162
+ table(data, columns) {
163
+ if (!this.shouldLog("info")) return;
164
+ const prefix = this.getEffectivePrefix();
165
+ const tableHeader = `[TABLE]${prefix ? ` [${prefix}]` : ""}:`;
166
+ if (isBrowser && typeof console.table === "function") {
167
+ console.log(tableHeader);
168
+ if (columns) {
169
+ console.table(data, columns);
170
+ } else {
171
+ console.table(data);
172
+ }
173
+ } else {
174
+ console.log(tableHeader);
175
+ const tableText = formatTablePlain(data, columns);
176
+ console.log(tableText);
61
177
  }
62
- /**
63
- * Sets the verbosity level for filtering log output
64
- */
65
- setVerbosity(level) {
66
- this.config.verbosity = level;
178
+ }
179
+ /**
180
+ * Starts a collapsible group in the console
181
+ */
182
+ group(label, collapsed = false) {
183
+ const prefix = this.getEffectivePrefix();
184
+ const fullLabel = `${prefix ? `[${prefix}] ` : ""}${label}`;
185
+ if (isBrowser && console.group && console.groupCollapsed) {
186
+ if (collapsed) {
187
+ console.groupCollapsed(fullLabel);
188
+ } else {
189
+ console.group(fullLabel);
190
+ }
191
+ } else {
192
+ const groupStart = "┌─ " + fullLabel;
193
+ console.log(groupStart);
67
194
  }
68
- /**
69
- * Creates a scoped logger with a specific prefix
70
- */
71
- scope(prefix) {
72
- const scopedLogger = new CoreLogger(this.config);
73
- scopedLogger.scopedPrefix = prefix;
74
- scopedLogger.handlers = [...this.handlers];
75
- return scopedLogger;
195
+ this.groupDepth++;
196
+ }
197
+ /**
198
+ * Ends the current console group
199
+ */
200
+ groupEnd() {
201
+ if (this.groupDepth > 0) {
202
+ if (isBrowser && console.groupEnd) {
203
+ console.groupEnd();
204
+ } else {
205
+ const groupEnd2 = "└─ (end group)";
206
+ console.log(groupEnd2);
207
+ }
208
+ this.groupDepth--;
76
209
  }
77
- /**
78
- * Adds a custom log handler for extensibility
79
- */
80
- addHandler(handler) {
81
- this.handlers.push(handler);
210
+ }
211
+ /**
212
+ * Starts a timer with the given label
213
+ */
214
+ time(label) {
215
+ const startTime = this.getPerformanceNow();
216
+ const timer = {
217
+ label,
218
+ startTime
219
+ };
220
+ this.timers.set(label, timer);
221
+ const prefix = this.getEffectivePrefix();
222
+ const message = `Timer started: ${label}`;
223
+ const output = createPlainOutput("info", message, prefix);
224
+ console.log(output);
225
+ }
226
+ /**
227
+ * Ends a timer and logs the elapsed time
228
+ */
229
+ timeEnd(label) {
230
+ const timer = this.timers.get(label);
231
+ if (!timer) {
232
+ this.warn(`Timer '${label}' does not exist`);
233
+ return;
82
234
  }
83
- // ===== CORE LOGGING METHODS =====
84
- /**
85
- * Checks if a log level should be output based on current verbosity
86
- */
87
- shouldLog(level) {
88
- if (this.config.verbosity === 'silent')
89
- return false;
90
- const levels = { debug: 0, info: 1, warn: 2, error: 3, critical: 4 };
91
- return levels[level] >= levels[this.config.verbosity];
235
+ const elapsed = this.getPerformanceNow() - timer.startTime;
236
+ this.timers.delete(label);
237
+ const prefix = this.getEffectivePrefix();
238
+ const message = `Timer ended: ${label} - ${elapsed.toFixed(2)}ms`;
239
+ const output = createPlainOutput("info", message, prefix);
240
+ console.log(output);
241
+ }
242
+ /**
243
+ * Gets performance.now() or fallback for older environments
244
+ */
245
+ getPerformanceNow() {
246
+ if (typeof performance !== "undefined" && performance.now) {
247
+ return performance.now();
92
248
  }
93
- /**
94
- * Gets the effective prefix (global + scoped)
95
- */
96
- getEffectivePrefix() {
97
- const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);
98
- return parts.length > 0 ? parts.join(':') : undefined;
99
- }
100
- /**
101
- * Core logging method with universal formatting
102
- */
103
- log(level, ...args) {
104
- if (!this.shouldLog(level))
105
- return;
106
- const prefix = this.getEffectivePrefix();
107
- const message = String(args[0] || '');
108
- const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;
109
- const consoleMethod = getConsoleMethod(level);
110
- // Choose formatting based on environment and configuration
111
- if (isBrowser && this.config.enableColors && supportsCSSColors()) {
112
- // Browser with CSS styling
113
- try {
114
- const [format, ...styles] = createStyledOutput(level, LEVEL_STYLES, prefix, message, stackInfo, this.config.autoDetectTheme);
115
- console[consoleMethod](format, ...styles, ...args.slice(1));
116
- }
117
- catch (error) {
118
- // Fallback to plain text if CSS fails
119
- const output = createPlainOutput(level, message, prefix, stackInfo);
120
- console[consoleMethod](output, ...args.slice(1));
121
- }
122
- }
123
- else {
124
- // Node.js or browser without colors - use plain text
125
- const groupIndent = ' '.repeat(this.groupDepth);
126
- const output = groupIndent + createPlainOutput(level, message, prefix, stackInfo);
127
- console[consoleMethod](output, ...args.slice(1));
128
- }
129
- // Call custom handlers with structured metadata
130
- const logEntry = createLogEntry(level, message, args, prefix, stackInfo);
131
- const metadata = {
132
- timestamp: logEntry.timestamp,
133
- level,
134
- prefix,
135
- stackInfo: logEntry.location,
136
- };
137
- this.handlers.forEach(handler => {
138
- try {
139
- handler.handle(level, message, args, metadata);
140
- }
141
- catch (error) {
142
- console.error('Log handler failed:', error);
143
- }
144
- });
145
- }
146
- /**
147
- * Logs debug information (lowest priority)
148
- */
149
- debug(...args) {
150
- this.log('debug', ...args);
151
- }
152
- /**
153
- * Logs informational messages
154
- */
155
- info(...args) {
156
- this.log('info', ...args);
157
- }
158
- /**
159
- * Logs warning messages
160
- */
161
- warn(...args) {
162
- this.log('warn', ...args);
163
- }
164
- /**
165
- * Logs error messages
166
- */
167
- error(...args) {
168
- this.log('error', ...args);
169
- }
170
- /**
171
- * Logs critical errors (highest priority)
172
- */
173
- critical(...args) {
174
- this.log('critical', ...args);
175
- }
176
- /**
177
- * Logs trace information (detailed debugging)
178
- */
179
- trace(...args) {
180
- this.log('debug', ...args);
181
- if (this.shouldLog('debug')) {
182
- console.trace(...args);
183
- }
184
- }
185
- // ===== BASIC ADVANCED FEATURES =====
186
- /**
187
- * Displays data in a table format
188
- */
189
- table(data, columns) {
190
- if (!this.shouldLog('info'))
191
- return;
192
- const prefix = this.getEffectivePrefix();
193
- const tableHeader = `[TABLE]${prefix ? ` [${prefix}]` : ''}:`;
194
- if (isBrowser && typeof console.table === 'function') {
195
- // Browser has native table support
196
- console.log(tableHeader);
197
- if (columns) {
198
- console.table(data, columns);
199
- }
200
- else {
201
- console.table(data);
202
- }
203
- }
204
- else {
205
- // Node.js or fallback - use plain text formatting
206
- console.log(tableHeader);
207
- const tableText = formatTablePlain(data, columns);
208
- console.log(tableText);
209
- }
210
- }
211
- /**
212
- * Starts a collapsible group in the console
213
- */
214
- group(label, collapsed = false) {
215
- const prefix = this.getEffectivePrefix();
216
- const fullLabel = `${prefix ? `[${prefix}] ` : ''}${label}`;
217
- if (isBrowser && console.group && console.groupCollapsed) {
218
- // Browser supports native grouping
219
- if (collapsed) {
220
- console.groupCollapsed(fullLabel);
221
- }
222
- else {
223
- console.group(fullLabel);
224
- }
225
- }
226
- else {
227
- // Node.js fallback - just log the group label
228
- const groupStart = '┌─ ' + fullLabel;
229
- console.log(groupStart);
230
- }
231
- this.groupDepth++;
232
- }
233
- /**
234
- * Ends the current console group
235
- */
236
- groupEnd() {
237
- if (this.groupDepth > 0) {
238
- if (isBrowser && console.groupEnd) {
239
- console.groupEnd();
240
- }
241
- else {
242
- // Node.js fallback - log group end
243
- const groupEnd = '└─ (end group)';
244
- console.log(groupEnd);
245
- }
246
- this.groupDepth--;
247
- }
248
- }
249
- /**
250
- * Starts a timer with the given label
251
- */
252
- time(label) {
253
- const startTime = this.getPerformanceNow();
254
- const timer = {
255
- label,
256
- startTime,
257
- };
258
- this.timers.set(label, timer);
259
- const prefix = this.getEffectivePrefix();
260
- const message = `Timer started: ${label}`;
261
- const output = createPlainOutput('info', message, prefix);
262
- console.log(output);
263
- }
264
- /**
265
- * Ends a timer and logs the elapsed time
266
- */
267
- timeEnd(label) {
268
- const timer = this.timers.get(label);
269
- if (!timer) {
270
- this.warn(`Timer '${label}' does not exist`);
271
- return;
272
- }
273
- const elapsed = this.getPerformanceNow() - timer.startTime;
274
- this.timers.delete(label);
275
- const prefix = this.getEffectivePrefix();
276
- const message = `Timer ended: ${label} - ${elapsed.toFixed(2)}ms`;
277
- const output = createPlainOutput('info', message, prefix);
278
- console.log(output);
279
- }
280
- /**
281
- * Gets performance.now() or fallback for older environments
282
- */
283
- getPerformanceNow() {
284
- if (typeof performance !== 'undefined' && performance.now) {
285
- return performance.now();
286
- }
287
- if (isNode && process.hrtime) {
288
- // Node.js high-resolution time
289
- const [seconds, nanoseconds] = process.hrtime();
290
- return seconds * 1000 + nanoseconds / 1000000;
291
- }
292
- // Fallback to Date.now()
293
- return Date.now();
249
+ if (isNode && process.hrtime) {
250
+ const [seconds, nanoseconds] = process.hrtime();
251
+ return seconds * 1e3 + nanoseconds / 1e6;
294
252
  }
253
+ return Date.now();
254
+ }
295
255
  }
296
- // Create and export singleton instance for convenience
297
256
  const coreLogger = new CoreLogger();
298
- /**
299
- * Export individual methods for convenience (with proper binding)
300
- */
301
- export const debug = (...args) => coreLogger.debug(...args);
302
- export const info = (...args) => coreLogger.info(...args);
303
- export const warn = (...args) => coreLogger.warn(...args);
304
- export const error = (...args) => coreLogger.error(...args);
305
- export const critical = (...args) => coreLogger.critical(...args);
306
- export const trace = (...args) => coreLogger.trace(...args);
307
- export const table = (data, columns) => coreLogger.table(data, columns);
308
- export const group = (label, collapsed) => coreLogger.group(label, collapsed);
309
- export const groupEnd = () => coreLogger.groupEnd();
310
- export const time = (label) => coreLogger.time(label);
311
- export const timeEnd = (label) => coreLogger.timeEnd(label);
312
- export const setGlobalPrefix = (prefix) => coreLogger.setGlobalPrefix(prefix);
313
- export const scope = (prefix) => coreLogger.scope(prefix);
314
- export const setVerbosity = (level) => coreLogger.setVerbosity(level);
315
- export const addHandler = (handler) => coreLogger.addHandler(handler);
316
- // Export the singleton as default
317
- export default coreLogger;
257
+ const debug = (...args) => coreLogger.debug(...args);
258
+ const info = (...args) => coreLogger.info(...args);
259
+ const warn = (...args) => coreLogger.warn(...args);
260
+ const error = (...args) => coreLogger.error(...args);
261
+ const critical = (...args) => coreLogger.critical(...args);
262
+ const trace = (...args) => coreLogger.trace(...args);
263
+ const table = (data, columns) => coreLogger.table(data, columns);
264
+ const group = (label, collapsed) => coreLogger.group(label, collapsed);
265
+ const groupEnd = () => coreLogger.groupEnd();
266
+ const time = (label) => coreLogger.time(label);
267
+ const timeEnd = (label) => coreLogger.timeEnd(label);
268
+ const setGlobalPrefix = (prefix) => coreLogger.setGlobalPrefix(prefix);
269
+ const scope = (prefix) => coreLogger.scope(prefix);
270
+ const setVerbosity = (level) => coreLogger.setVerbosity(level);
271
+ const addHandler = (handler) => coreLogger.addHandler(handler);
272
+ export {
273
+ CoreLogger,
274
+ addHandler,
275
+ critical,
276
+ debug,
277
+ coreLogger as default,
278
+ error,
279
+ group,
280
+ groupEnd,
281
+ info,
282
+ scope,
283
+ setGlobalPrefix,
284
+ setVerbosity,
285
+ table,
286
+ time,
287
+ timeEnd,
288
+ trace,
289
+ warn
290
+ };
291
+ //# sourceMappingURL=core.js.map