@mks2508/better-logger 0.0.2-alpha.2 → 0.3.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.
- package/.claude/settings.local.json +18 -2
- package/.github/workflows/ci-quality.yml +357 -0
- package/.github/workflows/docs-demo.yml +119 -0
- package/.github/workflows/releases-core.yml +512 -0
- package/.github/workflows/releases-full.yml +582 -0
- package/.github/{workflows → workflows-backup}/ci.yml +12 -110
- package/.github/workflows-backup/nightly.yml +196 -0
- package/.github/workflows-backup/release-optimized.yml +373 -0
- package/.release-notes-0.2.0.md +129 -0
- package/.yamllint +28 -0
- package/CHANGELOG.json +783 -0
- package/CLAUDE.md +92 -1
- package/README.md +198 -490
- package/bun.lock +323 -0
- package/demo.html +9 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/Logger.d.ts +272 -0
- package/dist/Logger.d.ts.map +1 -0
- package/dist/Logger.js +680 -0
- package/dist/ScopedLogger.d.ts +126 -0
- package/dist/ScopedLogger.d.ts.map +1 -0
- package/dist/ScopedLogger.js +234 -0
- package/dist/chunks/Logger-BpeuYIxR.js +2 -0
- package/dist/chunks/Logger-BpeuYIxR.js.map +1 -0
- package/dist/chunks/Logger-Didxtr23.js +3275 -0
- package/dist/chunks/Logger-Didxtr23.js.map +1 -0
- package/dist/chunks/RemoteLogHandler-CjWpWZGl.js +33 -0
- package/dist/chunks/RemoteLogHandler-CjWpWZGl.js.map +1 -0
- package/dist/chunks/RemoteLogHandler-ymkQ97xl.js +2 -0
- package/dist/chunks/RemoteLogHandler-ymkQ97xl.js.map +1 -0
- package/dist/chunks/environment-Bxbnw4pd.js +544 -0
- package/dist/chunks/environment-Bxbnw4pd.js.map +1 -0
- package/dist/chunks/environment-Dm66zOML.js +4 -0
- package/dist/chunks/environment-Dm66zOML.js.map +1 -0
- package/dist/chunks/formatting-C0riPC5_.js +95 -0
- package/dist/chunks/formatting-C0riPC5_.js.map +1 -0
- package/dist/chunks/formatting-DNCAV66-.js +2 -0
- package/dist/chunks/formatting-DNCAV66-.js.map +1 -0
- package/dist/cli/CommandProcessor.d.ts +103 -0
- package/dist/cli/CommandProcessor.d.ts.map +1 -0
- package/dist/cli/CommandProcessor.js +184 -0
- package/dist/cli/commands/ConfigCommand.d.ts +17 -0
- package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
- package/dist/cli/commands/ConfigCommand.js +88 -0
- package/dist/cli/commands/ExportCommand.d.ts +51 -0
- package/dist/cli/commands/ExportCommand.d.ts.map +1 -0
- package/dist/cli/commands/ExportCommand.js +243 -0
- package/dist/cli/commands/HistoryCommand.d.ts +50 -0
- package/dist/cli/commands/HistoryCommand.d.ts.map +1 -0
- package/dist/cli/commands/HistoryCommand.js +96 -0
- package/dist/cli/commands/StatusCommand.d.ts +33 -0
- package/dist/cli/commands/StatusCommand.d.ts.map +1 -0
- package/dist/cli/commands/StatusCommand.js +93 -0
- package/dist/cli/commands/ThemeCommand.d.ts +33 -0
- package/dist/cli/commands/ThemeCommand.d.ts.map +1 -0
- package/dist/cli/commands/ThemeCommand.js +79 -0
- package/dist/cli/help.d.ts +15 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +118 -0
- package/dist/cli/index.d.ts +15 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +46 -0
- package/dist/constants.d.ts +122 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +159 -0
- package/dist/core.cjs +1 -1
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +134 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +315 -242
- package/dist/core.js.map +1 -1
- package/dist/example.d.ts +18 -0
- package/dist/example.d.ts.map +1 -0
- package/dist/example.js +154 -0
- package/dist/exports-module.d.ts +203 -0
- package/dist/exports-module.d.ts.map +1 -0
- package/dist/exports-module.js +260 -0
- package/dist/exports.cjs +1 -1
- package/dist/exports.cjs.map +1 -1
- package/dist/exports.js +5 -4
- package/dist/exports.js.map +1 -1
- package/dist/handlers/AnalyticsLogHandler.d.ts +11 -0
- package/dist/handlers/AnalyticsLogHandler.d.ts.map +1 -0
- package/dist/handlers/AnalyticsLogHandler.js +19 -0
- package/dist/handlers/ExportLogHandler.d.ts +103 -0
- package/dist/handlers/ExportLogHandler.d.ts.map +1 -0
- package/dist/handlers/ExportLogHandler.js +516 -0
- package/dist/handlers/FileLogHandler.d.ts +36 -0
- package/dist/handlers/FileLogHandler.d.ts.map +1 -0
- package/dist/handlers/FileLogHandler.js +156 -0
- package/dist/handlers/RemoteLogHandler.d.ts +14 -0
- package/dist/handlers/RemoteLogHandler.d.ts.map +1 -0
- package/dist/handlers/RemoteLogHandler.js +37 -0
- package/dist/handlers/index.d.ts +8 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +7 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +86 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +89 -103
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +139 -0
- package/dist/styling/LogStyleBuilder.d.ts +149 -0
- package/dist/styling/LogStyleBuilder.d.ts.map +1 -0
- package/dist/styling/LogStyleBuilder.js +289 -0
- package/dist/styling/SemanticStyles.d.ts +181 -0
- package/dist/styling/SemanticStyles.d.ts.map +1 -0
- package/dist/styling/SemanticStyles.js +339 -0
- package/dist/styling/SmartPresets.d.ts +25 -0
- package/dist/styling/SmartPresets.d.ts.map +1 -0
- package/dist/styling/SmartPresets.js +276 -0
- package/dist/styling/StyleBuilder.d.ts +140 -0
- package/dist/styling/StyleBuilder.d.ts.map +1 -0
- package/dist/styling/StyleBuilder.js +280 -0
- package/dist/styling/banners.d.ts +45 -0
- package/dist/styling/banners.d.ts.map +1 -0
- package/dist/styling/banners.js +155 -0
- package/dist/styling/index.d.ts +10 -0
- package/dist/styling/index.d.ts.map +1 -0
- package/dist/styling/index.js +9 -0
- package/dist/styling/themes.d.ts +10 -0
- package/dist/styling/themes.d.ts.map +1 -0
- package/dist/styling/themes.js +231 -0
- package/dist/styling-module.d.ts +185 -0
- package/dist/styling-module.d.ts.map +1 -0
- package/dist/styling-module.js +199 -0
- package/dist/styling.cjs +1 -1
- package/dist/styling.cjs.map +1 -1
- package/dist/styling.js +6 -6
- package/dist/styling.js.map +1 -1
- package/dist/types/Logger.d.ts +268 -0
- package/dist/types/Logger.d.ts.map +1 -0
- package/dist/types/ScopedLogger.d.ts +123 -0
- package/dist/types/ScopedLogger.d.ts.map +1 -0
- package/dist/types/cli/CommandProcessor.d.ts +100 -0
- package/dist/types/cli/CommandProcessor.d.ts.map +1 -0
- package/dist/types/cli/commands/ConfigCommand.d.ts +14 -0
- package/dist/types/cli/commands/ConfigCommand.d.ts.map +1 -0
- package/dist/types/cli/commands/ExportCommand.d.ts +48 -0
- package/dist/types/cli/commands/ExportCommand.d.ts.map +1 -0
- package/dist/types/cli/commands/HistoryCommand.d.ts +47 -0
- package/dist/types/cli/commands/HistoryCommand.d.ts.map +1 -0
- package/dist/types/cli/commands/StatusCommand.d.ts +30 -0
- package/dist/types/cli/commands/StatusCommand.d.ts.map +1 -0
- package/dist/types/cli/commands/ThemeCommand.d.ts +30 -0
- package/dist/types/cli/commands/ThemeCommand.d.ts.map +1 -0
- package/dist/types/cli/help.d.ts +12 -0
- package/dist/types/cli/help.d.ts.map +1 -0
- package/dist/types/cli/index.d.ts +15 -0
- package/dist/types/cli/index.d.ts.map +1 -0
- package/dist/types/constants.d.ts +119 -0
- package/dist/types/constants.d.ts.map +1 -0
- package/dist/types/core.d.ts +125 -211
- package/dist/types/core.d.ts.map +1 -0
- package/dist/types/core.js +13 -0
- package/dist/types/example.d.ts +18 -0
- package/dist/types/example.d.ts.map +1 -0
- package/dist/types/exports-module.d.ts +196 -0
- package/dist/types/exports-module.d.ts.map +1 -0
- package/dist/types/handlers/AnalyticsLogHandler.d.ts +8 -0
- package/dist/types/handlers/AnalyticsLogHandler.d.ts.map +1 -0
- package/dist/types/handlers/ExportLogHandler.d.ts +100 -0
- package/dist/types/handlers/ExportLogHandler.d.ts.map +1 -0
- package/dist/types/handlers/FileLogHandler.d.ts +33 -0
- package/dist/types/handlers/FileLogHandler.d.ts.map +1 -0
- package/dist/types/handlers/RemoteLogHandler.d.ts +11 -0
- package/dist/types/handlers/RemoteLogHandler.d.ts.map +1 -0
- package/dist/types/handlers/index.d.ts +8 -0
- package/dist/types/handlers/index.d.ts.map +1 -0
- package/dist/types/handlers.d.ts +88 -0
- package/dist/types/handlers.d.ts.map +1 -0
- package/dist/types/handlers.js +4 -0
- package/dist/types/index.d.ts +7 -675
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/dist/types/main.d.ts +2 -0
- package/dist/types/main.d.ts.map +1 -0
- package/dist/types/styling/LogStyleBuilder.d.ts +146 -0
- package/dist/types/styling/LogStyleBuilder.d.ts.map +1 -0
- package/dist/types/styling/SemanticStyles.d.ts +178 -0
- package/dist/types/styling/SemanticStyles.d.ts.map +1 -0
- package/dist/types/styling/SmartPresets.d.ts +22 -0
- package/dist/types/styling/SmartPresets.d.ts.map +1 -0
- package/dist/types/styling/StyleBuilder.d.ts +140 -0
- package/dist/types/styling/StyleBuilder.d.ts.map +1 -0
- package/dist/types/styling/banners.d.ts +42 -0
- package/dist/types/styling/banners.d.ts.map +1 -0
- package/dist/types/styling/index.d.ts +10 -0
- package/dist/types/styling/index.d.ts.map +1 -0
- package/dist/types/styling/themes.d.ts +7 -0
- package/dist/types/styling/themes.d.ts.map +1 -0
- package/dist/types/styling-module.d.ts +178 -0
- package/dist/types/styling-module.d.ts.map +1 -0
- package/dist/types/types/core.d.ts +125 -0
- package/dist/types/types/core.d.ts.map +1 -0
- package/dist/types/types/handlers.d.ts +85 -0
- package/dist/types/types/handlers.d.ts.map +1 -0
- package/dist/types/types/index.d.ts +7 -0
- package/dist/types/types/index.d.ts.map +1 -0
- package/dist/types/utils/environment.d.ts +47 -0
- package/dist/types/utils/environment.d.ts.map +1 -0
- package/dist/types/utils/formatting.d.ts +37 -0
- package/dist/types/utils/formatting.d.ts.map +1 -0
- package/dist/types/utils/index.d.ts +7 -0
- package/dist/types/utils/index.d.ts.map +1 -0
- package/dist/types/utils/opentui-detection.d.ts +34 -0
- package/dist/types/utils/opentui-detection.d.ts.map +1 -0
- package/dist/types/utils/output.d.ts +41 -0
- package/dist/types/utils/output.d.ts.map +1 -0
- package/dist/types/utils/stackTrace.d.ts +6 -0
- package/dist/types/utils/stackTrace.d.ts.map +1 -0
- package/dist/types/utils/timestamps.d.ts +20 -0
- package/dist/types/utils/timestamps.d.ts.map +1 -0
- package/dist/utils/environment.d.ts +47 -0
- package/dist/utils/environment.d.ts.map +1 -0
- package/dist/utils/environment.js +85 -0
- package/dist/utils/formatting.d.ts +40 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +117 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/opentui-detection.d.ts +34 -0
- package/dist/utils/opentui-detection.d.ts.map +1 -0
- package/dist/utils/opentui-detection.js +116 -0
- package/dist/utils/output.d.ts +44 -0
- package/dist/utils/output.d.ts.map +1 -0
- package/dist/utils/output.js +150 -0
- package/dist/utils/stackTrace.d.ts +9 -0
- package/dist/utils/stackTrace.d.ts.map +1 -0
- package/dist/utils/stackTrace.js +81 -0
- package/dist/utils/timestamps.d.ts +20 -0
- package/dist/utils/timestamps.d.ts.map +1 -0
- package/dist/utils/timestamps.js +71 -0
- package/docs/API.md +691 -0
- package/docs/CORE.md +10 -10
- package/docs/DEVELOPMENT.md +731 -0
- package/docs/PACKAGES.md +244 -0
- package/docs/_config.yml +36 -0
- package/docs/index.md +179 -0
- package/examples/README.md +208 -0
- package/examples/basic-logging.js +75 -0
- package/examples/data-export.js +234 -0
- package/examples/package.json +16 -0
- package/examples/performance-timing.js +170 -0
- package/examples/simplified-api.js +124 -0
- package/examples/styling-themes.js +207 -0
- package/package.json +37 -21
- package/packages/core/package.json +57 -0
- package/packages/exports/package.json +41 -0
- package/packages/nodejs-opentui/README.md +232 -0
- package/packages/nodejs-opentui/package.json +72 -0
- package/packages/nodejs-opentui/src/LogRenderer.ts +171 -0
- package/packages/nodejs-opentui/src/OpenTUILogHandler.ts +178 -0
- package/packages/nodejs-opentui/src/components/LogBadge.tsx +131 -0
- package/packages/nodejs-opentui/src/index.ts +133 -0
- package/packages/nodejs-opentui/src/types.ts +158 -0
- package/packages/nodejs-opentui/tsconfig.json +20 -0
- package/packages/styling/package.json +41 -0
- package/project-utils/README.md +172 -0
- package/project-utils/auto-release-gemini.ts +1193 -0
- package/project-utils/auto-release-ui.ts +1329 -0
- package/project-utils/commit-generator.ts +1385 -0
- package/project-utils/commit-ui.ts +264 -0
- package/project-utils/git-utils.ts +199 -0
- package/project-utils/github-release-manager.ts +466 -0
- package/project-utils/project-config.ts +260 -0
- package/project-utils/prompt-templates.js +345 -0
- package/project-utils/prompt-templates.ts +422 -0
- package/project-utils/version-manager.ts +1078 -0
- package/src/Logger.ts +251 -16
- package/src/ScopedLogger.ts +262 -0
- package/src/cli/CommandProcessor.ts +173 -2
- package/src/cli/commands/HistoryCommand.ts +117 -0
- package/src/cli/index.ts +12 -0
- package/src/constants.ts +84 -2
- package/src/core.ts +119 -46
- package/src/example.ts +4 -4
- package/src/exports-module.ts +1 -1
- package/src/handlers/ExportLogHandler.ts +141 -0
- package/src/handlers/FileLogHandler.ts +144 -5
- package/src/index.ts +1 -1
- package/src/main.ts +3 -3
- package/src/styling/LogStyleBuilder.ts +355 -0
- package/src/styling/SemanticStyles.ts +380 -0
- package/src/styling/SmartPresets.ts +288 -0
- package/src/styling/StyleBuilder.ts +14 -0
- package/src/styling/index.ts +16 -1
- package/src/styling-module.ts +1 -1
- package/src/types/core.ts +60 -0
- package/src/types/index.ts +6 -0
- package/src/utils/environment.ts +94 -0
- package/src/utils/formatting.ts +142 -0
- package/src/utils/index.ts +3 -0
- package/src/utils/opentui-detection.ts +138 -0
- package/src/utils/output.ts +66 -8
- package/test-core-browser.html +237 -0
- package/test-core-node.js +63 -0
- package/tests/test-conflict-resolution.ts +391 -0
- package/tests/validate-workflows.sh +131 -0
- package/tests/yaml-autofix.sh +146 -0
- package/vite.config.ts +189 -50
- package/.npmrc.bak +0 -1
- package/dist/chunks/Logger-BQhMKy_T.js +0 -2
- package/dist/chunks/Logger-BQhMKy_T.js.map +0 -1
- package/dist/chunks/Logger-BrFKFZcD.js +0 -978
- package/dist/chunks/Logger-BrFKFZcD.js.map +0 -1
- package/dist/chunks/core-2opW4Pi3.js +0 -194
- package/dist/chunks/core-2opW4Pi3.js.map +0 -1
- package/dist/chunks/core-DyugwSYZ.js +0 -4
- package/dist/chunks/core-DyugwSYZ.js.map +0 -1
- package/dist/chunks/exports-BNP3R7dp.js +0 -421
- package/dist/chunks/exports-BNP3R7dp.js.map +0 -1
- package/dist/chunks/exports-U1xLBXrY.js +0 -2
- package/dist/chunks/exports-U1xLBXrY.js.map +0 -1
- package/dist/chunks/styling-DhUDzwlE.js +0 -654
- package/dist/chunks/styling-DhUDzwlE.js.map +0 -1
- package/dist/chunks/styling-tmRDI28D.js +0 -2
- package/dist/chunks/styling-tmRDI28D.js.map +0 -1
- package/dist/types/exports.d.ts +0 -600
- package/dist/types/styling.d.ts +0 -751
- package/src/Logger.ts.backup +0 -1684
- /package/.github/{workflows → workflows-backup}/release.yml +0 -0
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview File-based log handler for Advanced Logger
|
|
3
|
+
*/
|
|
4
|
+
import { isNode, isBrowser } from '../utils/environment.js';
|
|
5
|
+
import { safeSerialize } from '../utils/formatting.js';
|
|
6
|
+
/**
|
|
7
|
+
* Universal file-based log handler for persistent logging
|
|
8
|
+
* Works in both Node.js (real files) and browser (localStorage)
|
|
9
|
+
*/
|
|
10
|
+
export class FileLogHandler {
|
|
11
|
+
filename;
|
|
12
|
+
maxSize;
|
|
13
|
+
fs; // Node.js fs module
|
|
14
|
+
constructor(filename = 'app.log', maxSize) {
|
|
15
|
+
this.filename = filename;
|
|
16
|
+
this.maxSize = maxSize;
|
|
17
|
+
// Load Node.js fs module if in Node environment
|
|
18
|
+
if (isNode) {
|
|
19
|
+
try {
|
|
20
|
+
this.fs = require('fs');
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.warn('FileLogHandler: Unable to load fs module:', error);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
handle(level, message, args, metadata) {
|
|
28
|
+
const logEntry = {
|
|
29
|
+
timestamp: metadata.timestamp,
|
|
30
|
+
level: level.toUpperCase(),
|
|
31
|
+
prefix: metadata.prefix,
|
|
32
|
+
message,
|
|
33
|
+
args: args.slice(1).map(arg => safeSerialize(arg)),
|
|
34
|
+
location: metadata.stackInfo,
|
|
35
|
+
};
|
|
36
|
+
const logLine = this.formatLogLine(logEntry);
|
|
37
|
+
if (isNode && this.fs) {
|
|
38
|
+
this.writeToFileNode(logLine);
|
|
39
|
+
}
|
|
40
|
+
else if (isBrowser) {
|
|
41
|
+
this.writeToFileLocal(logLine);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Fallback - just console output
|
|
45
|
+
console.log(`[FILE-LOG] ${logLine}`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Format log entry as a single line for file storage
|
|
50
|
+
*/
|
|
51
|
+
formatLogLine(entry) {
|
|
52
|
+
const parts = [
|
|
53
|
+
entry.timestamp,
|
|
54
|
+
`[${entry.level}]`,
|
|
55
|
+
entry.prefix ? `[${entry.prefix}]` : '',
|
|
56
|
+
entry.message
|
|
57
|
+
].filter(Boolean);
|
|
58
|
+
let line = parts.join(' ');
|
|
59
|
+
if (entry.args && entry.args.length > 0) {
|
|
60
|
+
line += ' ' + entry.args.map((arg) => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' ');
|
|
61
|
+
}
|
|
62
|
+
if (entry.location) {
|
|
63
|
+
line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;
|
|
64
|
+
}
|
|
65
|
+
return line;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Write to actual file in Node.js environment
|
|
69
|
+
*/
|
|
70
|
+
writeToFileNode(logLine) {
|
|
71
|
+
if (!this.fs)
|
|
72
|
+
return;
|
|
73
|
+
try {
|
|
74
|
+
// Check file size if maxSize is set
|
|
75
|
+
if (this.maxSize) {
|
|
76
|
+
try {
|
|
77
|
+
const stats = this.fs.statSync(this.filename);
|
|
78
|
+
if (stats.size > this.maxSize) {
|
|
79
|
+
// Simple rotation: backup current file and start fresh
|
|
80
|
+
const backupName = `${this.filename}.bak`;
|
|
81
|
+
this.fs.renameSync(this.filename, backupName);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
// File doesn't exist yet, that's fine
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Append to file
|
|
89
|
+
this.fs.appendFileSync(this.filename, logLine + '\n', 'utf8');
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error('FileLogHandler: Failed to write to file:', error);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Write to localStorage in browser environment
|
|
97
|
+
*/
|
|
98
|
+
writeToFileLocal(logLine) {
|
|
99
|
+
try {
|
|
100
|
+
const storageKey = `logger_${this.filename}`;
|
|
101
|
+
const existingLogs = localStorage.getItem(storageKey) || '';
|
|
102
|
+
let newLogs = existingLogs;
|
|
103
|
+
if (existingLogs.length > 0) {
|
|
104
|
+
newLogs += '\n';
|
|
105
|
+
}
|
|
106
|
+
newLogs += logLine;
|
|
107
|
+
// Simple size management - keep last 1000 lines max
|
|
108
|
+
if (this.maxSize || newLogs.split('\n').length > 1000) {
|
|
109
|
+
const lines = newLogs.split('\n');
|
|
110
|
+
const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;
|
|
111
|
+
if (lines.length > maxLines) {
|
|
112
|
+
newLogs = lines.slice(-maxLines).join('\n');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
localStorage.setItem(storageKey, newLogs);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
console.error('FileLogHandler: Failed to write to localStorage:', error);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get stored logs (useful for debugging)
|
|
123
|
+
*/
|
|
124
|
+
getLogs() {
|
|
125
|
+
if (isNode && this.fs) {
|
|
126
|
+
try {
|
|
127
|
+
return this.fs.readFileSync(this.filename, 'utf8');
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
else if (isBrowser) {
|
|
134
|
+
const storageKey = `logger_${this.filename}`;
|
|
135
|
+
return localStorage.getItem(storageKey);
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Clear stored logs
|
|
141
|
+
*/
|
|
142
|
+
clearLogs() {
|
|
143
|
+
if (isNode && this.fs) {
|
|
144
|
+
try {
|
|
145
|
+
this.fs.writeFileSync(this.filename, '', 'utf8');
|
|
146
|
+
}
|
|
147
|
+
catch (error) {
|
|
148
|
+
console.error('FileLogHandler: Failed to clear file:', error);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
else if (isBrowser) {
|
|
152
|
+
const storageKey = `logger_${this.filename}`;
|
|
153
|
+
localStorage.removeItem(storageKey);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Remote log handler for Advanced Logger
|
|
3
|
+
*/
|
|
4
|
+
import type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Remote log handler for sending logs to external services
|
|
7
|
+
*/
|
|
8
|
+
export declare class RemoteLogHandler implements ILogHandler {
|
|
9
|
+
private endpoint;
|
|
10
|
+
private apiKey?;
|
|
11
|
+
constructor(endpoint: string, apiKey?: string);
|
|
12
|
+
handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=RemoteLogHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RemoteLogHandler.d.ts","sourceRoot":"","sources":["../../src/handlers/RemoteLogHandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5E;;GAEG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAChD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAAS;gBAEZ,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;IAKvC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;CAuBpG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Remote log handler for Advanced Logger
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Remote log handler for sending logs to external services
|
|
6
|
+
*/
|
|
7
|
+
export class RemoteLogHandler {
|
|
8
|
+
endpoint;
|
|
9
|
+
apiKey;
|
|
10
|
+
constructor(endpoint, apiKey) {
|
|
11
|
+
this.endpoint = endpoint;
|
|
12
|
+
this.apiKey = apiKey;
|
|
13
|
+
}
|
|
14
|
+
async handle(level, message, args, metadata) {
|
|
15
|
+
try {
|
|
16
|
+
const payload = {
|
|
17
|
+
timestamp: metadata.timestamp,
|
|
18
|
+
level,
|
|
19
|
+
message,
|
|
20
|
+
prefix: metadata.prefix,
|
|
21
|
+
location: metadata.stackInfo,
|
|
22
|
+
additional: args.slice(1),
|
|
23
|
+
};
|
|
24
|
+
await fetch(this.endpoint, {
|
|
25
|
+
method: 'POST',
|
|
26
|
+
headers: {
|
|
27
|
+
'Content-Type': 'application/json',
|
|
28
|
+
...(this.apiKey && { 'Authorization': `Bearer ${this.apiKey}` }),
|
|
29
|
+
},
|
|
30
|
+
body: JSON.stringify(payload),
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
// Silently fail to avoid infinite logging loops
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Log handlers exports for Advanced Logger
|
|
3
|
+
*/
|
|
4
|
+
export { FileLogHandler } from './FileLogHandler.js';
|
|
5
|
+
export { RemoteLogHandler } from './RemoteLogHandler.js';
|
|
6
|
+
export { AnalyticsLogHandler } from './AnalyticsLogHandler.js';
|
|
7
|
+
export { ExportLogHandler } from './ExportLogHandler.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Log handlers exports for Advanced Logger
|
|
3
|
+
*/
|
|
4
|
+
export { FileLogHandler } from './FileLogHandler.js';
|
|
5
|
+
export { RemoteLogHandler } from './RemoteLogHandler.js';
|
|
6
|
+
export { AnalyticsLogHandler } from './AnalyticsLogHandler.js';
|
|
7
|
+
export { ExportLogHandler } from './ExportLogHandler.js';
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-BpeuYIxR.js"),t=require("./chunks/environment-Dm66zOML.js"),s=require("./chunks/formatting-DNCAV66-.js"),r=require("./chunks/RemoteLogHandler-ymkQ97xl.js"),o=new e.Logger,i={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()};exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.Logger=e.Logger,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.DEFAULT_CONFIG=t.DEFAULT_CONFIG,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.formatTimestamp=t.formatTimestamp,exports.parseStackTrace=t.parseStackTrace,exports.RemoteLogHandler=r.RemoteLogHandler,exports.AnalyticsLogHandler=class{handle(e,t,s,r){"error"!==e&&"critical"!==e||r.timestamp}},exports.FileLogHandler=class{filename;maxSize;fs;constructor(e="app.log",s){if(this.filename=e,this.maxSize=s,t.isNode)try{this.fs=require("fs")}catch(r){console.warn("FileLogHandler: Unable to load fs module:",r)}}handle(e,r,o,i){const l={timestamp:i.timestamp,level:e.toUpperCase(),prefix:i.prefix,message:r,args:o.slice(1).map(e=>s.safeSerialize(e)),location:i.stackInfo},a=this.formatLogLine(l);t.isNode&&this.fs?this.writeToFileNode(a):t.isBrowser?this.writeToFileLocal(a):console.log(`[FILE-LOG] ${a}`)}formatLogLine(e){let t=[e.timestamp,`[${e.level}]`,e.prefix?`[${e.prefix}]`:"",e.message].filter(Boolean).join(" ");return e.args&&e.args.length>0&&(t+=" "+e.args.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" ")),e.location&&(t+=` (${e.location.file}:${e.location.line}:${e.location.column})`),t}writeToFileNode(e){if(this.fs)try{if(this.maxSize)try{if(this.fs.statSync(this.filename).size>this.maxSize){const e=`${this.filename}.bak`;this.fs.renameSync(this.filename,e)}}catch(t){}this.fs.appendFileSync(this.filename,e+"\n","utf8")}catch(t){console.error("FileLogHandler: Failed to write to file:",t)}}writeToFileLocal(e){try{const t=`logger_${this.filename}`,s=localStorage.getItem(t)||"";let r=s;if(s.length>0&&(r+="\n"),r+=e,this.maxSize||r.split("\n").length>1e3){const e=r.split("\n"),t=this.maxSize?Math.floor(this.maxSize/100):1e3;e.length>t&&(r=e.slice(-t).join("\n"))}localStorage.setItem(t,r)}catch(t){console.error("FileLogHandler: Failed to write to localStorage:",t)}}getLogs(){if(t.isNode&&this.fs)try{return this.fs.readFileSync(this.filename,"utf8")}catch(e){return null}else if(t.isBrowser){const e=`logger_${this.filename}`;return localStorage.getItem(e)}return null}clearLogs(){if(t.isNode&&this.fs)try{this.fs.writeFileSync(this.filename,"","utf8")}catch(e){console.error("FileLogHandler: Failed to clear file:",e)}else if(t.isBrowser){const e=`logger_${this.filename}`;localStorage.removeItem(e)}}},exports.addHandler=e=>o.addHandler(e),exports.cli=e=>o.cli(e),exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>o.critical(...e),exports.debug=(...e)=>o.debug(...e),exports.default=o,exports.error=(...e)=>o.error(...e),exports.group=(e,t)=>o.group(e,t),exports.groupEnd=()=>o.groupEnd(),exports.info=(...e)=>o.info(...e),exports.logAnimated=(e,t)=>o.logAnimated(e,t),exports.logWithSVG=(e,t,s)=>o.logWithSVG(e,t,s),exports.scope=e=>o.scope(e),exports.setBannerType=e=>o.setBannerType(e),exports.setGlobalPrefix=e=>o.setGlobalPrefix(e),exports.setTheme=e=>o.setTheme(e),exports.setVerbosity=e=>o.setVerbosity(e),exports.showBanner=e=>o.showBanner(e),exports.stylePresets=i,exports.success=(...e)=>o.success(...e),exports.table=(e,t)=>o.table(e,t),exports.time=e=>o.time(e),exports.timeEnd=e=>o.timeEnd(e),exports.trace=(...e)=>o.trace(...e),exports.warn=(...e)=>o.warn(...e);
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/index.ts","../src/handlers/AnalyticsLogHandler.ts","../src/handlers/FileLogHandler.ts"],"sourcesContent":["/**\n * @fileoverview Better Logger - Complete library with all features\n * @version 0.0.1\n * \n * This is the main entry point that provides the complete Better Logger experience\n * with all advanced features including styling, SVG support, animations, export \n * capabilities, and remote logging.\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Create singleton instance with all features enabled\nconst logger = new Logger();\n\n/**\n * Main Logger class with complete feature set\n * \n * @example\n * ```typescript\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.setTheme('neon');\n * logger.info('Hello world!');\n * logger.logWithSVG('Custom SVG', svgContent);\n * ```\n */\nexport { Logger };\n\n// Export the singleton as default\nexport default logger;\n\n// Individual logging methods (bound to singleton)\nexport const debug = (...args: any[]) => logger.debug(...args);\nexport const info = (...args: any[]) => logger.info(...args);\nexport const warn = (...args: any[]) => logger.warn(...args);\nexport const error = (...args: any[]) => logger.error(...args);\nexport const success = (...args: any[]) => logger.success(...args);\nexport const critical = (...args: any[]) => logger.critical(...args);\nexport const trace = (...args: any[]) => logger.trace(...args);\nexport const table = (data: any, columns?: string[]) => logger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => logger.group(label, collapsed);\nexport const groupEnd = () => logger.groupEnd();\nexport const time = (label: string) => logger.time(label);\nexport const timeEnd = (label: string) => logger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => logger.setGlobalPrefix(prefix);\nexport const createScopedLogger = (prefix: string) => logger.createScopedLogger(prefix);\nexport const setVerbosity = (level: Verbosity) => logger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => logger.addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => logger.setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => logger.setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => logger.showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n logger.logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n logger.logAnimated(message, duration);\nexport const cli = (command: string) => logger.cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n/**\n * Styling utilities for creating custom console styles\n * \n * @example\n * ```typescript\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const customStyle = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .build();\n * \n * console.log('%cStyled message', customStyle);\n * console.log('%cSuccess!', stylePresets.success);\n * ```\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Creates a new StyleBuilder instance for custom console styling\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Pre-built style presets for common use cases\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * File-based log handler for persistent logging\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n\n constructor(filename: string = 'app.log') {\n this.filename = filename;\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n filename: this.filename,\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1),\n location: metadata.stackInfo,\n };\n\n console.debug('File log entry:', logEntry);\n }\n}"],"names":["logger","Logger","stylePresets","success","StylePresets","build","error","warning","info","accent","handle","level","message","_args","metadata","timestamp","filename","constructor","this","args","toUpperCase","prefix","slice","stackInfo","handler","addHandler","command","cli","createScopedLogger","StyleBuilder","critical","debug","label","collapsed","group","groupEnd","duration","logAnimated","svgContent","options","logWithSVG","bannerType","setBannerType","setGlobalPrefix","theme","setTheme","setVerbosity","showBanner","data","columns","table","time","timeEnd","trace","warn"],"mappings":"sRAqBMA,EAAS,IAAIC,EAAAA,OAgHNC,EAAe,CACxBC,QAASC,EAAAA,aAAaD,UAAUE,QAChCC,MAAOF,EAAAA,aAAaE,QAAQD,QAC5BE,QAASH,EAAAA,aAAaG,UAAUF,QAChCG,KAAMJ,EAAAA,aAAaI,OAAOH,QAC1BI,OAAQL,EAAAA,aAAaK,SAASJ,maCjI3B,MACH,MAAAK,CAAOC,EAAiBC,EAAiBC,EAAcC,GAErC,UAAVH,GAA+B,aAAVA,GAKNG,EAASC,SAGhC,0BCXG,MACKC,SAER,WAAAC,CAAYD,EAAmB,WAC3BE,KAAKF,SAAWA,CACpB,CAEA,MAAAN,CAAOC,EAAiBC,EAAiBO,EAAaL,GAEpCI,KAAKF,SACJF,EAASC,UACbJ,EAAMS,cACLN,EAASO,OAEXF,EAAKG,MAAM,GACPR,EAASS,SAI3B,sBF6BuBC,GAAyBxB,EAAOyB,WAAWD,eAQlDE,GAAoB1B,EAAO2B,IAAID,8BAVhBL,GAAmBrB,EAAO4B,mBAAmBP,uBAyErD,IAAM,IAAIQ,EAAAA,8BAjFb,IAAIV,IAAgBnB,EAAO8B,YAAYX,iBAL1C,IAAIA,IAAgBnB,EAAO+B,SAASZ,mCAGpC,IAAIA,IAAgBnB,EAAOM,SAASa,iBAKpC,CAACa,EAAeC,IAAwBjC,EAAOkC,MAAMF,EAAOC,oBACzD,IAAMjC,EAAOmC,wBARjB,IAAIhB,IAAgBnB,EAAOQ,QAAQW,uBAoB5B,CAACP,EAAiBwB,IACzCpC,EAAOqC,YAAYzB,EAASwB,sBAHN,CAACxB,EAAiB0B,EAAqBC,IAC7DvC,EAAOwC,WAAW5B,EAAS0B,EAAYC,yBAHbE,GAA2BzC,EAAO0C,cAAcD,2BAL9CpB,GAAmBrB,EAAO2C,gBAAgBtB,oBAIjDuB,GAAwB5C,EAAO6C,SAASD,wBAFpCjC,GAAqBX,EAAO8C,aAAanC,sBAI3C8B,GAA4BzC,EAAO+C,WAAWN,0CAdlD,IAAItB,IAAgBnB,EAAOG,WAAWgB,iBAGxC,CAAC6B,EAAWC,IAAuBjD,EAAOkD,MAAMF,EAAMC,gBAGtDjB,GAAkBhC,EAAOmD,KAAKnB,mBAC3BA,GAAkBhC,EAAOoD,QAAQpB,iBALpC,IAAIb,IAAgBnB,EAAOqD,SAASlC,gBAJrC,IAAIA,IAAgBnB,EAAOsD,QAAQnC"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/index.ts","../src/handlers/AnalyticsLogHandler.ts","../src/handlers/FileLogHandler.ts"],"sourcesContent":["/**\n * @fileoverview Better Logger - Complete library with all features\n * @version 0.0.1\n * \n * This is the main entry point that provides the complete Better Logger experience\n * with all advanced features including styling, SVG support, animations, export \n * capabilities, and remote logging.\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Create singleton instance with all features enabled\nconst logger = new Logger();\n\n/**\n * Main Logger class with complete feature set\n * \n * @example\n * ```typescript\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.setTheme('neon');\n * logger.info('Hello world!');\n * logger.logWithSVG('Custom SVG', svgContent);\n * ```\n */\nexport { Logger };\n\n// Export the singleton as default\nexport default logger;\n\n// Individual logging methods (bound to singleton)\nexport const debug = (...args: any[]) => logger.debug(...args);\nexport const info = (...args: any[]) => logger.info(...args);\nexport const warn = (...args: any[]) => logger.warn(...args);\nexport const error = (...args: any[]) => logger.error(...args);\nexport const success = (...args: any[]) => logger.success(...args);\nexport const critical = (...args: any[]) => logger.critical(...args);\nexport const trace = (...args: any[]) => logger.trace(...args);\nexport const table = (data: any, columns?: string[]) => logger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => logger.group(label, collapsed);\nexport const groupEnd = () => logger.groupEnd();\nexport const time = (label: string) => logger.time(label);\nexport const timeEnd = (label: string) => logger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => logger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => logger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => logger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => logger.addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => logger.setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => logger.setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => logger.showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n logger.logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n logger.logAnimated(message, duration);\nexport const cli = (command: string) => logger.cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n/**\n * Styling utilities for creating custom console styles\n * \n * @example\n * ```typescript\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const customStyle = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .build();\n * \n * console.log('%cStyled message', customStyle);\n * console.log('%cSuccess!', stylePresets.success);\n * ```\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Creates a new StyleBuilder instance for custom console styling\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Pre-built style presets for common use cases\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}"],"names":["logger","Logger","stylePresets","success","StylePresets","build","error","warning","info","accent","handle","level","message","_args","metadata","timestamp","filename","maxSize","fs","constructor","this","isNode","require","console","warn","args","logEntry","toUpperCase","prefix","slice","map","arg","safeSerialize","location","stackInfo","logLine","formatLogLine","writeToFileNode","isBrowser","writeToFileLocal","log","entry","line","filter","Boolean","join","length","JSON","stringify","String","file","column","statSync","size","backupName","renameSync","appendFileSync","storageKey","existingLogs","localStorage","getItem","newLogs","split","lines","maxLines","Math","floor","setItem","getLogs","readFileSync","clearLogs","writeFileSync","removeItem","handler","addHandler","command","cli","StyleBuilder","critical","debug","label","collapsed","group","groupEnd","duration","logAnimated","svgContent","options","logWithSVG","scope","bannerType","setBannerType","setGlobalPrefix","theme","setTheme","setVerbosity","showBanner","data","columns","table","time","timeEnd","trace"],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Better Logger - Complete library with all features
|
|
3
|
+
* @version 0.0.1
|
|
4
|
+
*
|
|
5
|
+
* This is the main entry point that provides the complete Better Logger experience
|
|
6
|
+
* with all advanced features including styling, SVG support, animations, export
|
|
7
|
+
* capabilities, and remote logging.
|
|
8
|
+
*/
|
|
9
|
+
import { Logger } from './Logger.js';
|
|
10
|
+
import type { Verbosity, ThemeVariant, BannerType, StyleOptions, ILogHandler } from './types/index.js';
|
|
11
|
+
declare const logger: Logger;
|
|
12
|
+
/**
|
|
13
|
+
* Main Logger class with complete feature set
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { Logger } from '@mks2508/better-logger';
|
|
18
|
+
*
|
|
19
|
+
* const logger = new Logger();
|
|
20
|
+
* logger.setTheme('neon');
|
|
21
|
+
* logger.info('Hello world!');
|
|
22
|
+
* logger.logWithSVG('Custom SVG', svgContent);
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export { Logger };
|
|
26
|
+
export default logger;
|
|
27
|
+
export declare const debug: (...args: any[]) => void;
|
|
28
|
+
export declare const info: (...args: any[]) => void;
|
|
29
|
+
export declare const warn: (...args: any[]) => void;
|
|
30
|
+
export declare const error: (...args: any[]) => void;
|
|
31
|
+
export declare const success: (...args: any[]) => void;
|
|
32
|
+
export declare const critical: (...args: any[]) => void;
|
|
33
|
+
export declare const trace: (...args: any[]) => void;
|
|
34
|
+
export declare const table: (data: any, columns?: string[]) => void;
|
|
35
|
+
export declare const group: (label: string, collapsed?: boolean) => void;
|
|
36
|
+
export declare const groupEnd: () => void;
|
|
37
|
+
export declare const time: (label: string) => void;
|
|
38
|
+
export declare const timeEnd: (label: string) => void;
|
|
39
|
+
export declare const setGlobalPrefix: (prefix: string) => void;
|
|
40
|
+
export declare const scope: (prefix: string) => import("./ScopedLogger.js").ScopedLogger;
|
|
41
|
+
export declare const setVerbosity: (level: Verbosity) => void;
|
|
42
|
+
export declare const addHandler: (handler: ILogHandler) => void;
|
|
43
|
+
export declare const setTheme: (theme: ThemeVariant) => void;
|
|
44
|
+
export declare const setBannerType: (bannerType: BannerType) => void;
|
|
45
|
+
export declare const showBanner: (bannerType?: BannerType) => void;
|
|
46
|
+
export declare const logWithSVG: (message: string, svgContent?: string, options?: StyleOptions) => void;
|
|
47
|
+
export declare const logAnimated: (message: string, duration?: number) => void;
|
|
48
|
+
export declare const cli: (command: string) => Promise<void>;
|
|
49
|
+
export type { LogLevel, Verbosity, ThemeVariant, BannerType, StyleOptions, ILogHandler, LoggerConfig, LogMetadata, StackInfo, TimerEntry } from './types/index.js';
|
|
50
|
+
export { StyleBuilder, StylePresets, THEME_PRESETS, THEME_BANNERS, BANNER_VARIANTS } from './styling/index.js';
|
|
51
|
+
export { FileLogHandler, RemoteLogHandler, AnalyticsLogHandler } from './handlers/index.js';
|
|
52
|
+
export { DEFAULT_CONFIG } from './constants.js';
|
|
53
|
+
export { parseStackTrace, formatTimestamp } from './utils/index.js';
|
|
54
|
+
/**
|
|
55
|
+
* Styling utilities for creating custom console styles
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* import { createStyle, stylePresets } from '@mks2508/better-logger';
|
|
60
|
+
*
|
|
61
|
+
* const customStyle = createStyle()
|
|
62
|
+
* .bg('linear-gradient(45deg, #ff6b6b, #feca57)')
|
|
63
|
+
* .color('white')
|
|
64
|
+
* .padding('10px')
|
|
65
|
+
* .build();
|
|
66
|
+
*
|
|
67
|
+
* console.log('%cStyled message', customStyle);
|
|
68
|
+
* console.log('%cSuccess!', stylePresets.success);
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
import { StyleBuilder } from './styling/index.js';
|
|
72
|
+
/**
|
|
73
|
+
* Creates a new StyleBuilder instance for custom console styling
|
|
74
|
+
*/
|
|
75
|
+
export declare const createStyle: () => StyleBuilder;
|
|
76
|
+
/**
|
|
77
|
+
* Pre-built style presets for common use cases
|
|
78
|
+
*/
|
|
79
|
+
export declare const stylePresets: {
|
|
80
|
+
success: string;
|
|
81
|
+
error: string;
|
|
82
|
+
warning: string;
|
|
83
|
+
info: string;
|
|
84
|
+
accent: string;
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAER,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACd,MAAM,kBAAkB,CAAC;AAG1B,QAAA,MAAM,MAAM,QAAe,CAAC;AAE5B;;;;;;;;;;;;GAYG;AACH,OAAO,EAAE,MAAM,EAAE,CAAC;AAGlB,eAAe,MAAM,CAAC;AAGtB,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,GAAG,EAAE,SAA0B,CAAC;AAC/D,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,GAAG,EAAE,SAAyB,CAAC;AAC7D,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,GAAG,EAAE,SAAyB,CAAC;AAC7D,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,GAAG,EAAE,SAA0B,CAAC;AAC/D,eAAO,MAAM,OAAO,GAAI,GAAG,MAAM,GAAG,EAAE,SAA4B,CAAC;AACnE,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,GAAG,EAAE,SAA6B,CAAC;AACrE,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,GAAG,EAAE,SAA0B,CAAC;AAC/D,eAAO,MAAM,KAAK,GAAI,MAAM,GAAG,EAAE,UAAU,MAAM,EAAE,SAAgC,CAAC;AACpF,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,YAAY,OAAO,SAAmC,CAAC;AAC5F,eAAO,MAAM,QAAQ,YAA0B,CAAC;AAChD,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,SAAuB,CAAC;AAC1D,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,SAA0B,CAAC;AAChE,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,SAAmC,CAAC;AAClF,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,6CAAyB,CAAC;AAC9D,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,SAA+B,CAAC;AAC7E,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,SAA+B,CAAC;AAC/E,eAAO,MAAM,QAAQ,GAAI,OAAO,YAAY,SAA2B,CAAC;AACxE,eAAO,MAAM,aAAa,GAAI,YAAY,UAAU,SAAqC,CAAC;AAC1F,eAAO,MAAM,UAAU,GAAI,aAAa,UAAU,SAAkC,CAAC;AACrF,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,aAAa,MAAM,EAAE,UAAU,YAAY,SACpC,CAAC;AACpD,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,WAAW,MAAM,SACrB,CAAC;AAC1C,eAAO,MAAM,GAAG,GAAI,SAAS,MAAM,kBAAwB,CAAC;AAG5D,YAAY,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,SAAS,EACT,UAAU,EACb,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EACH,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,aAAa,EACb,eAAe,EAClB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACH,cAAc,EACd,gBAAgB,EAChB,mBAAmB,EACtB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGhD,OAAO,EACH,eAAe,EACf,eAAe,EAClB,MAAM,kBAAkB,CAAC;AAE1B;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,YAAY,EAAgB,MAAM,oBAAoB,CAAC;AAEhE;;GAEG;AACH,eAAO,MAAM,WAAW,oBAA2B,CAAC;AAEpD;;GAEG;AACH,eAAO,MAAM,YAAY;;;;;;CAMxB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,105 +1,91 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
const logEntry = {
|
|
13
|
-
filename: this.filename,
|
|
14
|
-
timestamp: metadata.timestamp,
|
|
15
|
-
level: level.toUpperCase(),
|
|
16
|
-
prefix: metadata.prefix,
|
|
17
|
-
message,
|
|
18
|
-
args: args.slice(1),
|
|
19
|
-
location: metadata.stackInfo
|
|
20
|
-
};
|
|
21
|
-
console.debug("File log entry:", logEntry);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
class AnalyticsLogHandler {
|
|
25
|
-
handle(level, message, _args, metadata) {
|
|
26
|
-
if (level === "error" || level === "critical") {
|
|
27
|
-
console.debug("Analytics: Error tracked", {
|
|
28
|
-
level,
|
|
29
|
-
message,
|
|
30
|
-
timestamp: metadata.timestamp
|
|
31
|
-
});
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Better Logger - Complete library with all features
|
|
3
|
+
* @version 0.0.1
|
|
4
|
+
*
|
|
5
|
+
* This is the main entry point that provides the complete Better Logger experience
|
|
6
|
+
* with all advanced features including styling, SVG support, animations, export
|
|
7
|
+
* capabilities, and remote logging.
|
|
8
|
+
*/
|
|
9
|
+
// Main Logger class with all features
|
|
10
|
+
import { Logger } from './Logger.js';
|
|
11
|
+
// Create singleton instance with all features enabled
|
|
35
12
|
const logger = new Logger();
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
const
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Main Logger class with complete feature set
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { Logger } from '@mks2508/better-logger';
|
|
19
|
+
*
|
|
20
|
+
* const logger = new Logger();
|
|
21
|
+
* logger.setTheme('neon');
|
|
22
|
+
* logger.info('Hello world!');
|
|
23
|
+
* logger.logWithSVG('Custom SVG', svgContent);
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export { Logger };
|
|
27
|
+
// Export the singleton as default
|
|
28
|
+
export default logger;
|
|
29
|
+
// Individual logging methods (bound to singleton)
|
|
30
|
+
export const debug = (...args) => logger.debug(...args);
|
|
31
|
+
export const info = (...args) => logger.info(...args);
|
|
32
|
+
export const warn = (...args) => logger.warn(...args);
|
|
33
|
+
export const error = (...args) => logger.error(...args);
|
|
34
|
+
export const success = (...args) => logger.success(...args);
|
|
35
|
+
export const critical = (...args) => logger.critical(...args);
|
|
36
|
+
export const trace = (...args) => logger.trace(...args);
|
|
37
|
+
export const table = (data, columns) => logger.table(data, columns);
|
|
38
|
+
export const group = (label, collapsed) => logger.group(label, collapsed);
|
|
39
|
+
export const groupEnd = () => logger.groupEnd();
|
|
40
|
+
export const time = (label) => logger.time(label);
|
|
41
|
+
export const timeEnd = (label) => logger.timeEnd(label);
|
|
42
|
+
export const setGlobalPrefix = (prefix) => logger.setGlobalPrefix(prefix);
|
|
43
|
+
export const scope = (prefix) => logger.scope(prefix);
|
|
44
|
+
export const setVerbosity = (level) => logger.setVerbosity(level);
|
|
45
|
+
export const addHandler = (handler) => logger.addHandler(handler);
|
|
46
|
+
export const setTheme = (theme) => logger.setTheme(theme);
|
|
47
|
+
export const setBannerType = (bannerType) => logger.setBannerType(bannerType);
|
|
48
|
+
export const showBanner = (bannerType) => logger.showBanner(bannerType);
|
|
49
|
+
export const logWithSVG = (message, svgContent, options) => logger.logWithSVG(message, svgContent, options);
|
|
50
|
+
export const logAnimated = (message, duration) => logger.logAnimated(message, duration);
|
|
51
|
+
export const cli = (command) => logger.cli(command);
|
|
52
|
+
// Styling utilities
|
|
53
|
+
export { StyleBuilder, StylePresets, THEME_PRESETS, THEME_BANNERS, BANNER_VARIANTS } from './styling/index.js';
|
|
54
|
+
// Handler exports
|
|
55
|
+
export { FileLogHandler, RemoteLogHandler, AnalyticsLogHandler } from './handlers/index.js';
|
|
56
|
+
// Constants
|
|
57
|
+
export { DEFAULT_CONFIG } from './constants.js';
|
|
58
|
+
// Utility exports
|
|
59
|
+
export { parseStackTrace, formatTimestamp } from './utils/index.js';
|
|
60
|
+
/**
|
|
61
|
+
* Styling utilities for creating custom console styles
|
|
62
|
+
*
|
|
63
|
+
* @example
|
|
64
|
+
* ```typescript
|
|
65
|
+
* import { createStyle, stylePresets } from '@mks2508/better-logger';
|
|
66
|
+
*
|
|
67
|
+
* const customStyle = createStyle()
|
|
68
|
+
* .bg('linear-gradient(45deg, #ff6b6b, #feca57)')
|
|
69
|
+
* .color('white')
|
|
70
|
+
* .padding('10px')
|
|
71
|
+
* .build();
|
|
72
|
+
*
|
|
73
|
+
* console.log('%cStyled message', customStyle);
|
|
74
|
+
* console.log('%cSuccess!', stylePresets.success);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
import { StyleBuilder, StylePresets } from './styling/index.js';
|
|
78
|
+
/**
|
|
79
|
+
* Creates a new StyleBuilder instance for custom console styling
|
|
80
|
+
*/
|
|
81
|
+
export const createStyle = () => new StyleBuilder();
|
|
82
|
+
/**
|
|
83
|
+
* Pre-built style presets for common use cases
|
|
84
|
+
*/
|
|
85
|
+
export const stylePresets = {
|
|
86
|
+
success: StylePresets.success().build(),
|
|
87
|
+
error: StylePresets.error().build(),
|
|
88
|
+
warning: StylePresets.warning().build(),
|
|
89
|
+
info: StylePresets.info().build(),
|
|
90
|
+
accent: StylePresets.accent().build(),
|
|
65
91
|
};
|
|
66
|
-
export {
|
|
67
|
-
AnalyticsLogHandler,
|
|
68
|
-
B as BANNER_VARIANTS,
|
|
69
|
-
D as DEFAULT_CONFIG,
|
|
70
|
-
FileLogHandler,
|
|
71
|
-
Logger,
|
|
72
|
-
R as RemoteLogHandler,
|
|
73
|
-
StyleBuilder,
|
|
74
|
-
StylePresets,
|
|
75
|
-
b as THEME_BANNERS,
|
|
76
|
-
T as THEME_PRESETS,
|
|
77
|
-
addHandler,
|
|
78
|
-
cli,
|
|
79
|
-
createScopedLogger,
|
|
80
|
-
createStyle,
|
|
81
|
-
critical,
|
|
82
|
-
debug,
|
|
83
|
-
logger as default,
|
|
84
|
-
error,
|
|
85
|
-
b2 as formatTimestamp,
|
|
86
|
-
group,
|
|
87
|
-
groupEnd,
|
|
88
|
-
info,
|
|
89
|
-
logAnimated,
|
|
90
|
-
logWithSVG,
|
|
91
|
-
a as parseStackTrace,
|
|
92
|
-
setBannerType,
|
|
93
|
-
setGlobalPrefix,
|
|
94
|
-
setTheme,
|
|
95
|
-
setVerbosity,
|
|
96
|
-
showBanner,
|
|
97
|
-
stylePresets,
|
|
98
|
-
success,
|
|
99
|
-
table,
|
|
100
|
-
time,
|
|
101
|
-
timeEnd,
|
|
102
|
-
trace,
|
|
103
|
-
warn
|
|
104
|
-
};
|
|
105
|
-
//# sourceMappingURL=index.js.map
|