@mks2508/better-logger 0.14.0-alpha.2 → 0.18.2-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -244
- package/dist/Logger.d.ts +662 -202
- package/dist/Logger.d.ts.map +1 -1
- package/dist/ScopedLogger.d.ts +434 -175
- package/dist/ScopedLogger.d.ts.map +1 -1
- package/dist/chunks/HookBridge-C-AvXmPD.cjs +504 -0
- package/dist/chunks/HookBridge-C-AvXmPD.cjs.map +1 -0
- package/dist/chunks/HookBridge-CI2PH79S.js +487 -0
- package/dist/chunks/HookBridge-CI2PH79S.js.map +1 -0
- package/dist/chunks/LogContext-BaMXleWj.cjs +105 -0
- package/dist/chunks/LogContext-BaMXleWj.cjs.map +1 -0
- package/dist/chunks/LogContext-DjlITOzZ.js +100 -0
- package/dist/chunks/LogContext-DjlITOzZ.js.map +1 -0
- package/dist/chunks/SerializerBridge-Ba43Mk7j.js +393 -0
- package/dist/chunks/SerializerBridge-Ba43Mk7j.js.map +1 -0
- package/dist/chunks/SerializerBridge-C4a9Z37F.cjs +410 -0
- package/dist/chunks/SerializerBridge-C4a9Z37F.cjs.map +1 -0
- package/dist/chunks/StyleManager-DQ6UNRB-.cjs +118 -0
- package/dist/chunks/StyleManager-DQ6UNRB-.cjs.map +1 -0
- package/dist/chunks/StyleManager-DjwAYbxE.js +113 -0
- package/dist/chunks/StyleManager-DjwAYbxE.js.map +1 -0
- package/dist/chunks/core-Blfi2klP.js +31 -0
- package/dist/chunks/core-Blfi2klP.js.map +1 -0
- package/dist/chunks/core-CqS_UBzJ.cjs +36 -0
- package/dist/chunks/core-CqS_UBzJ.cjs.map +1 -0
- package/dist/chunks/environment-detector-7NvnYUfr.js +110 -0
- package/dist/chunks/environment-detector-7NvnYUfr.js.map +1 -0
- package/dist/chunks/environment-detector-D-tHkKWA.cjs +163 -0
- package/dist/chunks/environment-detector-D-tHkKWA.cjs.map +1 -0
- package/dist/chunks/server-fallback-CaCPjWby.cjs +119 -0
- package/dist/chunks/server-fallback-CaCPjWby.cjs.map +1 -0
- package/dist/chunks/server-fallback-jj0T6XaK.js +114 -0
- package/dist/chunks/server-fallback-jj0T6XaK.js.map +1 -0
- package/dist/chunks/spinner-BHyYEXsM.cjs +1029 -0
- package/dist/chunks/spinner-BHyYEXsM.cjs.map +1 -0
- package/dist/chunks/spinner-BtkwpzYv.js +982 -0
- package/dist/chunks/spinner-BtkwpzYv.js.map +1 -0
- package/dist/chunks/styling-CRw3KQW4.js +1592 -0
- package/dist/chunks/styling-CRw3KQW4.js.map +1 -0
- package/dist/chunks/styling-Cel2wPRy.cjs +1645 -0
- package/dist/chunks/styling-Cel2wPRy.cjs.map +1 -0
- package/dist/chunks/transports-BGfwwakw.js +1237 -0
- package/dist/chunks/transports-BGfwwakw.js.map +1 -0
- package/dist/chunks/transports-yK6CL0Ml.cjs +1278 -0
- package/dist/chunks/transports-yK6CL0Ml.cjs.map +1 -0
- package/dist/chunks/utils-W_cxqriN.cjs +705 -0
- package/dist/chunks/utils-W_cxqriN.cjs.map +1 -0
- package/dist/chunks/utils-tKfBAWUM.js +586 -0
- package/dist/chunks/utils-tKfBAWUM.js.map +1 -0
- package/dist/cli/CommandProcessor.d.ts +166 -19
- package/dist/cli/CommandProcessor.d.ts.map +1 -1
- package/dist/cli/commands/ConfigCommand.d.ts +36 -1
- package/dist/cli/commands/ConfigCommand.d.ts.map +1 -1
- package/dist/cli/commands/ExportCommand.d.ts +54 -26
- package/dist/cli/commands/ExportCommand.d.ts.map +1 -1
- package/dist/cli/commands/ThemeCommand.d.ts +62 -3
- package/dist/cli/commands/ThemeCommand.d.ts.map +1 -1
- package/dist/cli/help.d.ts +30 -2
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/index.d.ts +30 -4
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli-module.d.ts +13 -0
- package/dist/cli-module.d.ts.map +1 -0
- package/dist/cli.cjs +11 -0
- package/dist/cli.js +3 -0
- package/dist/constants.d.ts +16 -47
- package/dist/constants.d.ts.map +1 -1
- package/dist/context/LogContext.d.ts +245 -0
- package/dist/context/LogContext.d.ts.map +1 -0
- package/dist/context/index.d.ts +6 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context-module.d.ts +6 -0
- package/dist/context-module.d.ts.map +1 -0
- package/dist/context.cjs +3 -0
- package/dist/context.js +2 -0
- package/dist/core.cjs +304 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +56 -34
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +281 -314
- package/dist/core.js.map +1 -1
- package/dist/hooks/HookBridge.d.ts +32 -0
- package/dist/hooks/HookBridge.d.ts.map +1 -0
- package/dist/hooks/HookManager.d.ts +319 -0
- package/dist/hooks/HookManager.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks-module.d.ts +7 -0
- package/dist/hooks-module.d.ts.map +1 -0
- package/dist/hooks.cjs +5 -0
- package/dist/hooks.js +2 -0
- package/dist/index.cjs +3402 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +42 -130
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3327 -158
- package/dist/index.js.map +1 -1
- package/dist/node-module.d.ts +10 -0
- package/dist/node-module.d.ts.map +1 -0
- package/dist/node.cjs +13 -0
- package/dist/node.cjs.map +1 -0
- package/dist/node.js +12 -0
- package/dist/node.js.map +1 -0
- package/dist/playground/TerminalBridge.d.ts +53 -0
- package/dist/playground/TerminalBridge.d.ts.map +1 -0
- package/dist/playground/box.d.ts +45 -0
- package/dist/playground/box.d.ts.map +1 -0
- package/dist/playground/cli-table.d.ts +50 -0
- package/dist/playground/cli-table.d.ts.map +1 -0
- package/dist/playground/divider.d.ts +29 -0
- package/dist/playground/divider.d.ts.map +1 -0
- package/dist/playground/header.d.ts +28 -0
- package/dist/playground/header.d.ts.map +1 -0
- package/dist/playground/index.d.ts +11 -0
- package/dist/playground/index.d.ts.map +1 -0
- package/dist/playground/server-fallback.d.ts +114 -0
- package/dist/playground/server-fallback.d.ts.map +1 -0
- package/dist/playground/spinner.d.ts +197 -0
- package/dist/playground/spinner.d.ts.map +1 -0
- package/dist/playground/step.d.ts +33 -0
- package/dist/playground/step.d.ts.map +1 -0
- package/dist/playground-module.d.ts +11 -0
- package/dist/playground-module.d.ts.map +1 -0
- package/dist/playground.cjs +9 -0
- package/dist/playground.js +2 -0
- package/dist/serializers/SerializerBridge.d.ts +28 -0
- package/dist/serializers/SerializerBridge.d.ts.map +1 -0
- package/dist/serializers/SerializerRegistry.d.ts +252 -0
- package/dist/serializers/SerializerRegistry.d.ts.map +1 -0
- package/dist/serializers/index.d.ts +7 -0
- package/dist/serializers/index.d.ts.map +1 -0
- package/dist/serializers-module.d.ts +7 -0
- package/dist/serializers-module.d.ts.map +1 -0
- package/dist/serializers.cjs +5 -0
- package/dist/serializers.js +2 -0
- package/dist/styles/StyleManager.d.ts +190 -0
- package/dist/styles/StyleManager.d.ts.map +1 -0
- package/dist/styles/index.d.ts +7 -0
- package/dist/styles/index.d.ts.map +1 -0
- package/dist/styles-module.d.ts +7 -0
- package/dist/styles-module.d.ts.map +1 -0
- package/dist/styles.cjs +7 -0
- package/dist/styles.js +3 -0
- package/dist/styling/SmartPresets.d.ts +100 -6
- package/dist/styling/SmartPresets.d.ts.map +1 -1
- package/dist/styling/StyleBuilder.d.ts +453 -32
- package/dist/styling/StyleBuilder.d.ts.map +1 -1
- package/dist/styling/banners.d.ts +85 -5
- package/dist/styling/banners.d.ts.map +1 -1
- package/dist/styling/index.d.ts +8 -3
- package/dist/styling/index.d.ts.map +1 -1
- package/dist/styling/themes.d.ts +41 -2
- package/dist/styling/themes.d.ts.map +1 -1
- package/dist/terminal/color-converter.d.ts +73 -0
- package/dist/terminal/color-converter.d.ts.map +1 -0
- package/dist/terminal/formatter.d.ts +23 -0
- package/dist/terminal/formatter.d.ts.map +1 -0
- package/dist/transports/ConsoleTransport.d.ts +104 -0
- package/dist/transports/ConsoleTransport.d.ts.map +1 -0
- package/dist/transports/FileTransport.d.ts +137 -0
- package/dist/transports/FileTransport.d.ts.map +1 -0
- package/dist/transports/HttpTransport.d.ts +180 -0
- package/dist/transports/HttpTransport.d.ts.map +1 -0
- package/dist/transports/OtlpTransport.d.ts +165 -0
- package/dist/transports/OtlpTransport.d.ts.map +1 -0
- package/dist/transports/TransportBridge.d.ts +43 -0
- package/dist/transports/TransportBridge.d.ts.map +1 -0
- package/dist/transports/TransportManager.d.ts +251 -0
- package/dist/transports/TransportManager.d.ts.map +1 -0
- package/dist/transports/index.d.ts +6 -0
- package/dist/transports/index.d.ts.map +1 -0
- package/dist/transports-module.d.ts +10 -0
- package/dist/transports-module.d.ts.map +1 -0
- package/dist/transports.cjs +7 -0
- package/dist/transports.js +2 -0
- package/dist/types/core.d.ts +295 -17
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/handlers.d.ts +0 -67
- package/dist/types/handlers.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +138 -0
- package/dist/types/hooks.d.ts.map +1 -0
- package/dist/types/index.d.ts +7 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/serializers.d.ts +97 -0
- package/dist/types/serializers.d.ts.map +1 -0
- package/dist/types/transports.d.ts +132 -0
- package/dist/types/transports.d.ts.map +1 -0
- package/dist/utils/ansi-colors.d.ts +115 -0
- package/dist/utils/ansi-colors.d.ts.map +1 -0
- package/dist/utils/environment-detector.d.ts +53 -0
- package/dist/utils/environment-detector.d.ts.map +1 -0
- package/dist/utils/formatting.d.ts +9 -8
- package/dist/utils/formatting.d.ts.map +1 -1
- package/dist/utils/index.d.ts +3 -2
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/output.d.ts +14 -17
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/stackTrace.d.ts +2 -2
- package/dist/utils/stackTrace.d.ts.map +1 -1
- package/dist/utils/timestamps.d.ts +0 -12
- package/dist/utils/timestamps.d.ts.map +1 -1
- package/package.json +95 -21
- package/.claude/settings.local.json +0 -39
- package/.github/workflows/ci-quality.yml +0 -357
- package/.github/workflows/docs-demo.yml +0 -119
- package/.github/workflows/releases-core.yml +0 -512
- package/.github/workflows/releases-full.yml +0 -582
- package/.github/workflows-backup/ci.yml +0 -221
- package/.github/workflows-backup/nightly.yml +0 -196
- package/.github/workflows-backup/release-optimized.yml +0 -373
- package/.github/workflows-backup/release.yml +0 -269
- package/.release-notes-0.2.0.md +0 -129
- package/.yamllint +0 -28
- package/CHANGELOG.json +0 -865
- package/CLAUDE.md +0 -204
- package/bun.lock +0 -323
- package/demo.html +0 -847
- package/dist/.tsbuildinfo +0 -1
- package/dist/Logger.js +0 -1124
- package/dist/ScopedLogger.js +0 -426
- package/dist/chunks/Logger-Crw1woqR.js +0 -3464
- package/dist/chunks/Logger-Crw1woqR.js.map +0 -1
- package/dist/chunks/Logger-D_p3xnbq.js +0 -2
- package/dist/chunks/Logger-D_p3xnbq.js.map +0 -1
- package/dist/chunks/RemoteLogHandler-CjWpWZGl.js +0 -33
- package/dist/chunks/RemoteLogHandler-CjWpWZGl.js.map +0 -1
- package/dist/chunks/RemoteLogHandler-ymkQ97xl.js +0 -2
- package/dist/chunks/RemoteLogHandler-ymkQ97xl.js.map +0 -1
- package/dist/chunks/environment-Bxbnw4pd.js +0 -544
- package/dist/chunks/environment-Bxbnw4pd.js.map +0 -1
- package/dist/chunks/environment-Dm66zOML.js +0 -4
- package/dist/chunks/environment-Dm66zOML.js.map +0 -1
- package/dist/chunks/formatting-C0riPC5_.js +0 -95
- package/dist/chunks/formatting-C0riPC5_.js.map +0 -1
- package/dist/chunks/formatting-DNCAV66-.js +0 -2
- package/dist/chunks/formatting-DNCAV66-.js.map +0 -1
- package/dist/cli/CommandProcessor.js +0 -184
- package/dist/cli/commands/ConfigCommand.js +0 -88
- package/dist/cli/commands/ExportCommand.js +0 -243
- package/dist/cli/commands/HistoryCommand.d.ts +0 -50
- package/dist/cli/commands/HistoryCommand.d.ts.map +0 -1
- package/dist/cli/commands/HistoryCommand.js +0 -96
- package/dist/cli/commands/StatusCommand.d.ts +0 -33
- package/dist/cli/commands/StatusCommand.d.ts.map +0 -1
- package/dist/cli/commands/StatusCommand.js +0 -93
- package/dist/cli/commands/ThemeCommand.js +0 -79
- package/dist/cli/help.js +0 -118
- package/dist/cli/index.js +0 -46
- package/dist/constants.js +0 -159
- package/dist/example.d.ts +0 -18
- package/dist/example.d.ts.map +0 -1
- package/dist/example.js +0 -154
- package/dist/exports-module.d.ts +0 -203
- package/dist/exports-module.d.ts.map +0 -1
- package/dist/exports-module.js +0 -260
- package/dist/exports.cjs +0 -2
- package/dist/exports.cjs.map +0 -1
- package/dist/exports.js +0 -238
- package/dist/exports.js.map +0 -1
- package/dist/handlers/AnalyticsLogHandler.d.ts +0 -11
- package/dist/handlers/AnalyticsLogHandler.d.ts.map +0 -1
- package/dist/handlers/AnalyticsLogHandler.js +0 -19
- package/dist/handlers/ExportLogHandler.d.ts +0 -103
- package/dist/handlers/ExportLogHandler.d.ts.map +0 -1
- package/dist/handlers/ExportLogHandler.js +0 -516
- package/dist/handlers/FileLogHandler.d.ts +0 -36
- package/dist/handlers/FileLogHandler.d.ts.map +0 -1
- package/dist/handlers/FileLogHandler.js +0 -156
- package/dist/handlers/RemoteLogHandler.d.ts +0 -14
- package/dist/handlers/RemoteLogHandler.d.ts.map +0 -1
- package/dist/handlers/RemoteLogHandler.js +0 -37
- package/dist/handlers/index.d.ts +0 -8
- package/dist/handlers/index.d.ts.map +0 -1
- package/dist/handlers/index.js +0 -7
- package/dist/main.d.ts +0 -2
- package/dist/main.d.ts.map +0 -1
- package/dist/main.js +0 -139
- package/dist/styling/LogStyleBuilder.d.ts +0 -149
- package/dist/styling/LogStyleBuilder.d.ts.map +0 -1
- package/dist/styling/LogStyleBuilder.js +0 -289
- package/dist/styling/SemanticStyles.d.ts +0 -181
- package/dist/styling/SemanticStyles.d.ts.map +0 -1
- package/dist/styling/SemanticStyles.js +0 -339
- package/dist/styling/SmartPresets.js +0 -276
- package/dist/styling/StyleBuilder.js +0 -280
- package/dist/styling/banners.js +0 -155
- package/dist/styling/index.js +0 -9
- package/dist/styling/themes.js +0 -231
- package/dist/styling-module.d.ts +0 -185
- package/dist/styling-module.d.ts.map +0 -1
- package/dist/styling-module.js +0 -199
- package/dist/styling.cjs +0 -2
- package/dist/styling.cjs.map +0 -1
- package/dist/styling.js +0 -146
- package/dist/styling.js.map +0 -1
- package/dist/types/Logger.d.ts +0 -700
- package/dist/types/Logger.d.ts.map +0 -1
- package/dist/types/ScopedLogger.d.ts +0 -310
- package/dist/types/ScopedLogger.d.ts.map +0 -1
- package/dist/types/cli/CommandProcessor.d.ts +0 -100
- package/dist/types/cli/CommandProcessor.d.ts.map +0 -1
- package/dist/types/cli/commands/ConfigCommand.d.ts +0 -14
- package/dist/types/cli/commands/ConfigCommand.d.ts.map +0 -1
- package/dist/types/cli/commands/ExportCommand.d.ts +0 -48
- package/dist/types/cli/commands/ExportCommand.d.ts.map +0 -1
- package/dist/types/cli/commands/HistoryCommand.d.ts +0 -47
- package/dist/types/cli/commands/HistoryCommand.d.ts.map +0 -1
- package/dist/types/cli/commands/StatusCommand.d.ts +0 -30
- package/dist/types/cli/commands/StatusCommand.d.ts.map +0 -1
- package/dist/types/cli/commands/ThemeCommand.d.ts +0 -30
- package/dist/types/cli/commands/ThemeCommand.d.ts.map +0 -1
- package/dist/types/cli/help.d.ts +0 -12
- package/dist/types/cli/help.d.ts.map +0 -1
- package/dist/types/cli/index.d.ts +0 -15
- package/dist/types/cli/index.d.ts.map +0 -1
- package/dist/types/constants.d.ts +0 -119
- package/dist/types/constants.d.ts.map +0 -1
- package/dist/types/core.js +0 -28
- package/dist/types/example.d.ts +0 -18
- package/dist/types/example.d.ts.map +0 -1
- package/dist/types/exports-module.d.ts +0 -196
- package/dist/types/exports-module.d.ts.map +0 -1
- package/dist/types/handlers/AnalyticsLogHandler.d.ts +0 -8
- package/dist/types/handlers/AnalyticsLogHandler.d.ts.map +0 -1
- package/dist/types/handlers/ExportLogHandler.d.ts +0 -100
- package/dist/types/handlers/ExportLogHandler.d.ts.map +0 -1
- package/dist/types/handlers/FileLogHandler.d.ts +0 -33
- package/dist/types/handlers/FileLogHandler.d.ts.map +0 -1
- package/dist/types/handlers/RemoteLogHandler.d.ts +0 -11
- package/dist/types/handlers/RemoteLogHandler.d.ts.map +0 -1
- package/dist/types/handlers/index.d.ts +0 -8
- package/dist/types/handlers/index.d.ts.map +0 -1
- package/dist/types/handlers.js +0 -4
- package/dist/types/index.js +0 -4
- package/dist/types/main.d.ts +0 -2
- package/dist/types/main.d.ts.map +0 -1
- package/dist/types/styling/LogStyleBuilder.d.ts +0 -146
- package/dist/types/styling/LogStyleBuilder.d.ts.map +0 -1
- package/dist/types/styling/SemanticStyles.d.ts +0 -178
- package/dist/types/styling/SemanticStyles.d.ts.map +0 -1
- package/dist/types/styling/SmartPresets.d.ts +0 -22
- package/dist/types/styling/SmartPresets.d.ts.map +0 -1
- package/dist/types/styling/StyleBuilder.d.ts +0 -140
- package/dist/types/styling/StyleBuilder.d.ts.map +0 -1
- package/dist/types/styling/banners.d.ts +0 -42
- package/dist/types/styling/banners.d.ts.map +0 -1
- package/dist/types/styling/index.d.ts +0 -10
- package/dist/types/styling/index.d.ts.map +0 -1
- package/dist/types/styling/themes.d.ts +0 -7
- package/dist/types/styling/themes.d.ts.map +0 -1
- package/dist/types/styling-module.d.ts +0 -178
- package/dist/types/styling-module.d.ts.map +0 -1
- package/dist/types/types/core.d.ts +0 -221
- package/dist/types/types/core.d.ts.map +0 -1
- package/dist/types/types/handlers.d.ts +0 -85
- package/dist/types/types/handlers.d.ts.map +0 -1
- package/dist/types/types/index.d.ts +0 -7
- package/dist/types/types/index.d.ts.map +0 -1
- package/dist/types/utils/environment.d.ts +0 -47
- package/dist/types/utils/environment.d.ts.map +0 -1
- package/dist/types/utils/formatting.d.ts +0 -37
- package/dist/types/utils/formatting.d.ts.map +0 -1
- package/dist/types/utils/index.d.ts +0 -7
- package/dist/types/utils/index.d.ts.map +0 -1
- package/dist/types/utils/opentui-detection.d.ts +0 -34
- package/dist/types/utils/opentui-detection.d.ts.map +0 -1
- package/dist/types/utils/output.d.ts +0 -41
- package/dist/types/utils/output.d.ts.map +0 -1
- package/dist/types/utils/stackTrace.d.ts +0 -6
- package/dist/types/utils/stackTrace.d.ts.map +0 -1
- package/dist/types/utils/timestamps.d.ts +0 -20
- package/dist/types/utils/timestamps.d.ts.map +0 -1
- package/dist/utils/environment.d.ts +0 -47
- package/dist/utils/environment.d.ts.map +0 -1
- package/dist/utils/environment.js +0 -85
- package/dist/utils/formatting.js +0 -117
- package/dist/utils/index.js +0 -6
- package/dist/utils/opentui-detection.d.ts +0 -34
- package/dist/utils/opentui-detection.d.ts.map +0 -1
- package/dist/utils/opentui-detection.js +0 -116
- package/dist/utils/output.js +0 -150
- package/dist/utils/stackTrace.js +0 -81
- package/dist/utils/timestamps.js +0 -71
- package/dist/vite.svg +0 -1
- package/docs/API.md +0 -691
- package/docs/CORE.md +0 -264
- package/docs/DEVELOPMENT.md +0 -731
- package/docs/EXPORTS.md +0 -467
- package/docs/PACKAGES.md +0 -244
- package/docs/STYLING.md +0 -405
- package/docs/_config.yml +0 -36
- package/docs/index.md +0 -179
- package/examples/README.md +0 -208
- package/examples/basic-logging.js +0 -75
- package/examples/data-export.js +0 -234
- package/examples/package.json +0 -16
- package/examples/performance-timing.js +0 -170
- package/examples/simplified-api.js +0 -124
- package/examples/styling-themes.js +0 -207
- package/index.html +0 -358
- package/packages/core/package.json +0 -57
- package/packages/exports/package.json +0 -41
- package/packages/nodejs-opentui/README.md +0 -232
- package/packages/nodejs-opentui/package.json +0 -72
- package/packages/nodejs-opentui/src/LogRenderer.ts +0 -171
- package/packages/nodejs-opentui/src/OpenTUILogHandler.ts +0 -178
- package/packages/nodejs-opentui/src/components/LogBadge.tsx +0 -131
- package/packages/nodejs-opentui/src/index.ts +0 -133
- package/packages/nodejs-opentui/src/types.ts +0 -158
- package/packages/nodejs-opentui/tsconfig.json +0 -20
- package/packages/styling/package.json +0 -41
- package/project-utils/README.md +0 -172
- package/project-utils/auto-release-gemini.ts +0 -1193
- package/project-utils/auto-release-ui.ts +0 -1329
- package/project-utils/commit-generator.ts +0 -1385
- package/project-utils/commit-ui.ts +0 -264
- package/project-utils/git-utils.ts +0 -199
- package/project-utils/github-release-manager.ts +0 -466
- package/project-utils/project-config.ts +0 -260
- package/project-utils/prompt-templates.js +0 -345
- package/project-utils/prompt-templates.ts +0 -422
- package/project-utils/version-manager.ts +0 -1078
- package/public/vite.svg +0 -1
- package/src/Logger.ts +0 -1276
- package/src/ScopedLogger.ts +0 -454
- package/src/cli/CommandProcessor.ts +0 -248
- package/src/cli/commands/ConfigCommand.ts +0 -93
- package/src/cli/commands/ExportCommand.ts +0 -276
- package/src/cli/commands/HistoryCommand.ts +0 -117
- package/src/cli/commands/StatusCommand.ts +0 -112
- package/src/cli/commands/ThemeCommand.ts +0 -88
- package/src/cli/help.ts +0 -127
- package/src/cli/index.ts +0 -71
- package/src/constants.ts +0 -171
- package/src/core.ts +0 -393
- package/src/example.ts +0 -210
- package/src/exports-module.ts +0 -311
- package/src/handlers/AnalyticsLogHandler.ts +0 -22
- package/src/handlers/ExportLogHandler.ts +0 -609
- package/src/handlers/FileLogHandler.ts +0 -169
- package/src/handlers/RemoteLogHandler.ts +0 -42
- package/src/handlers/index.ts +0 -8
- package/src/index.ts +0 -209
- package/src/main.ts +0 -196
- package/src/style.css +0 -96
- package/src/styling/LogStyleBuilder.ts +0 -355
- package/src/styling/SemanticStyles.ts +0 -380
- package/src/styling/SmartPresets.ts +0 -288
- package/src/styling/StyleBuilder.ts +0 -319
- package/src/styling/banners.ts +0 -168
- package/src/styling/index.ts +0 -27
- package/src/styling/themes.ts +0 -235
- package/src/styling-module.ts +0 -244
- package/src/types/core.ts +0 -236
- package/src/types/handlers.ts +0 -95
- package/src/types/index.ts +0 -35
- package/src/typescript.svg +0 -1
- package/src/utils/environment.ts +0 -94
- package/src/utils/formatting.ts +0 -142
- package/src/utils/index.ts +0 -21
- package/src/utils/opentui-detection.ts +0 -138
- package/src/utils/output.ts +0 -185
- package/src/utils/stackTrace.ts +0 -95
- package/src/utils/timestamps.ts +0 -80
- package/src/vite-env.d.ts +0 -1
- package/test-core-browser.html +0 -237
- package/test-core-node.js +0 -63
- package/tests/test-conflict-resolution.ts +0 -391
- package/tests/validate-workflows.sh +0 -131
- package/tests/yaml-autofix.sh +0 -146
- package/tsconfig.json +0 -50
- package/vite.config.ts +0 -223
package/dist/Logger.js
DELETED
|
@@ -1,1124 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview Logger avanzado con arquitectura modular y API simplificada
|
|
3
|
-
* @version 0.3.0
|
|
4
|
-
* @since 2024
|
|
5
|
-
*
|
|
6
|
-
* Sistema de logging profesional con estilos CSS avanzados, temas adaptativos,
|
|
7
|
-
* badges automáticos, contextos temporales y exportación de datos.
|
|
8
|
-
*/
|
|
9
|
-
// Utility imports
|
|
10
|
-
import { parseStackTrace, formatTimestamp, createStyledOutput, setupThemeChangeListener } from './utils/index.js';
|
|
11
|
-
// Styling imports
|
|
12
|
-
import { THEME_PRESETS, THEME_BANNERS, displayInitBanner, StylePresets, StyleBuilder } from './styling/index.js';
|
|
13
|
-
// Smart presets and dynamic scoped loggers
|
|
14
|
-
import { getSmartPreset, getAvailablePresets, hasPreset } from './styling/SmartPresets.js';
|
|
15
|
-
import { createLogStyleBuilder } from './styling/LogStyleBuilder.js';
|
|
16
|
-
// Handler imports
|
|
17
|
-
import { ExportLogHandler } from './handlers/index.js';
|
|
18
|
-
// CLI imports
|
|
19
|
-
import { createDefaultCLI } from './cli/index.js';
|
|
20
|
-
// Constants
|
|
21
|
-
import { DEFAULT_CONFIG } from './constants.js';
|
|
22
|
-
/**
|
|
23
|
-
* Estilos del tema activo actual
|
|
24
|
-
* @private
|
|
25
|
-
*/
|
|
26
|
-
let LEVEL_STYLES = THEME_PRESETS.default;
|
|
27
|
-
/**
|
|
28
|
-
* Clase principal Logger con capacidades avanzadas de logging
|
|
29
|
-
*
|
|
30
|
-
* @class Logger
|
|
31
|
-
* @description Sistema completo de logging con temas, badges, contextos y exportación.
|
|
32
|
-
* Detecta automáticamente el tema claro/oscuro del navegador.
|
|
33
|
-
*
|
|
34
|
-
* @example
|
|
35
|
-
* // Uso básico sin configuración
|
|
36
|
-
* import logger from '@mks2508/better-logger';
|
|
37
|
-
* logger.info('Aplicación iniciada');
|
|
38
|
-
* logger.success('Conexión establecida');
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* // Aplicar un preset temático
|
|
42
|
-
* logger.preset('cyberpunk');
|
|
43
|
-
* logger.warn('Advertencia con estilo neón');
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* // Logger con scope para componentes
|
|
47
|
-
* const auth = logger.component('Autenticación');
|
|
48
|
-
* auth.info('Usuario intentando login');
|
|
49
|
-
* auth.success('Login exitoso');
|
|
50
|
-
*
|
|
51
|
-
* @since 0.3.0
|
|
52
|
-
*/
|
|
53
|
-
export class Logger {
|
|
54
|
-
config;
|
|
55
|
-
scopedPrefix;
|
|
56
|
-
handlers = [];
|
|
57
|
-
timers = new Map();
|
|
58
|
-
groupDepth = 0;
|
|
59
|
-
exportHandler;
|
|
60
|
-
cliProcessor;
|
|
61
|
-
themeChangeListener;
|
|
62
|
-
displaySettings = {
|
|
63
|
-
showTimestamp: true,
|
|
64
|
-
showLocation: true,
|
|
65
|
-
showBadges: true
|
|
66
|
-
};
|
|
67
|
-
/**
|
|
68
|
-
* Crea una nueva instancia del Logger
|
|
69
|
-
*
|
|
70
|
-
* @param {Partial<LoggerConfig>} config - Configuración opcional del logger
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* // Logger con configuración personalizada
|
|
74
|
-
* const logger = new Logger({
|
|
75
|
-
* theme: 'neon',
|
|
76
|
-
* globalPrefix: 'MiApp',
|
|
77
|
-
* verbosity: 'debug',
|
|
78
|
-
* bufferSize: 1000
|
|
79
|
-
* });
|
|
80
|
-
*/
|
|
81
|
-
constructor(config = {}) {
|
|
82
|
-
this.config = {
|
|
83
|
-
...DEFAULT_CONFIG,
|
|
84
|
-
...config,
|
|
85
|
-
};
|
|
86
|
-
// Initialize export handler if buffer size is specified
|
|
87
|
-
if (this.config.bufferSize) {
|
|
88
|
-
this.exportHandler = new ExportLogHandler(this.config.bufferSize);
|
|
89
|
-
this.handlers.push(this.exportHandler);
|
|
90
|
-
}
|
|
91
|
-
// Initialize CLI processor
|
|
92
|
-
this.cliProcessor = createDefaultCLI();
|
|
93
|
-
// Set up theme change listener if auto-detection is enabled
|
|
94
|
-
if (this.config.autoDetectTheme) {
|
|
95
|
-
this.setupAutoThemeDetection();
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// ===== PRIVATE HELPER METHODS =====
|
|
99
|
-
/**
|
|
100
|
-
* Configura la detección automática de tema con listener de cambios
|
|
101
|
-
* @private
|
|
102
|
-
* @description Detecta automáticamente si el navegador está en modo claro u oscuro
|
|
103
|
-
*/
|
|
104
|
-
setupAutoThemeDetection() {
|
|
105
|
-
// Clean up existing listener if any
|
|
106
|
-
if (this.themeChangeListener) {
|
|
107
|
-
this.themeChangeListener();
|
|
108
|
-
this.themeChangeListener = null;
|
|
109
|
-
}
|
|
110
|
-
// Set up new listener
|
|
111
|
-
this.themeChangeListener = setupThemeChangeListener((theme) => {
|
|
112
|
-
// Theme changed - logs will automatically use new colors on next call
|
|
113
|
-
// No need to update anything as colors are resolved dynamically
|
|
114
|
-
this.debug(`DevTools theme changed to: ${theme}`);
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
// ===== CONFIGURATION METHODS =====
|
|
118
|
-
/**
|
|
119
|
-
* Obtiene la configuración actual del logger
|
|
120
|
-
*
|
|
121
|
-
* @returns {LoggerConfig} Configuración completa actual
|
|
122
|
-
*
|
|
123
|
-
* @example
|
|
124
|
-
* const config = logger.getConfig();
|
|
125
|
-
* console.log('Verbosidad actual:', config.verbosity);
|
|
126
|
-
* console.log('Tema actual:', config.theme);
|
|
127
|
-
*
|
|
128
|
-
* @since 0.3.0
|
|
129
|
-
*/
|
|
130
|
-
getConfig() {
|
|
131
|
-
return { ...this.config };
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Actualiza la configuración del logger
|
|
135
|
-
*
|
|
136
|
-
* @param {Partial<LoggerConfig>} updates - Propiedades a actualizar
|
|
137
|
-
*
|
|
138
|
-
* @example
|
|
139
|
-
* logger.updateConfig({
|
|
140
|
-
* verbosity: 'debug',
|
|
141
|
-
* enableTimestamps: false,
|
|
142
|
-
* theme: 'cyberpunk'
|
|
143
|
-
* });
|
|
144
|
-
*
|
|
145
|
-
* @since 0.3.0
|
|
146
|
-
*/
|
|
147
|
-
updateConfig(updates) {
|
|
148
|
-
const previousAutoDetect = this.config.autoDetectTheme;
|
|
149
|
-
this.config = { ...this.config, ...updates };
|
|
150
|
-
// Handle auto-detection changes
|
|
151
|
-
if (updates.autoDetectTheme !== undefined && updates.autoDetectTheme !== previousAutoDetect) {
|
|
152
|
-
if (updates.autoDetectTheme) {
|
|
153
|
-
this.setupAutoThemeDetection();
|
|
154
|
-
}
|
|
155
|
-
else if (this.themeChangeListener) {
|
|
156
|
-
this.themeChangeListener();
|
|
157
|
-
this.themeChangeListener = null;
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Establece el prefijo global para todos los mensajes de log
|
|
163
|
-
*
|
|
164
|
-
* @param {string} prefix - Prefijo a usar
|
|
165
|
-
*
|
|
166
|
-
* @example
|
|
167
|
-
* logger.setGlobalPrefix('MiApp');
|
|
168
|
-
* logger.info('Iniciado'); // [MiApp] Iniciado
|
|
169
|
-
*
|
|
170
|
-
* @since 0.3.0
|
|
171
|
-
*/
|
|
172
|
-
setGlobalPrefix(prefix) {
|
|
173
|
-
this.config.globalPrefix = prefix;
|
|
174
|
-
}
|
|
175
|
-
/**
|
|
176
|
-
* Establece el nivel de verbosidad para filtrar la salida de logs
|
|
177
|
-
*
|
|
178
|
-
* @param {Verbosity} level - Nivel mínimo a mostrar ('debug' | 'info' | 'warn' | 'error' | 'critical' | 'silent')
|
|
179
|
-
*
|
|
180
|
-
* @example
|
|
181
|
-
* logger.setVerbosity('warn'); // Solo muestra warn, error y critical
|
|
182
|
-
* logger.setVerbosity('debug'); // Muestra todos los niveles
|
|
183
|
-
* logger.setVerbosity('silent'); // No muestra nada
|
|
184
|
-
*
|
|
185
|
-
* @since 0.3.0
|
|
186
|
-
*/
|
|
187
|
-
setVerbosity(level) {
|
|
188
|
-
this.config.verbosity = level;
|
|
189
|
-
}
|
|
190
|
-
/**
|
|
191
|
-
* Establece el tema del logger
|
|
192
|
-
*
|
|
193
|
-
* @param {ThemeVariant} theme - Tema a aplicar ('default' | 'dark' | 'light' | 'neon' | 'minimal' | 'cyberpunk')
|
|
194
|
-
*
|
|
195
|
-
* @example
|
|
196
|
-
* logger.setTheme('neon'); // Tema con colores neón
|
|
197
|
-
* logger.setTheme('minimal'); // Tema minimalista
|
|
198
|
-
* logger.setTheme('cyberpunk'); // Tema cyberpunk con efectos
|
|
199
|
-
*
|
|
200
|
-
* @since 0.3.0
|
|
201
|
-
*/
|
|
202
|
-
setTheme(theme) {
|
|
203
|
-
// First check if it's a smart preset
|
|
204
|
-
if (hasPreset(theme)) {
|
|
205
|
-
this.preset(theme);
|
|
206
|
-
return;
|
|
207
|
-
}
|
|
208
|
-
// Fallback to old theme system
|
|
209
|
-
if (theme in THEME_PRESETS) {
|
|
210
|
-
LEVEL_STYLES = THEME_PRESETS[theme];
|
|
211
|
-
this.config.theme = theme;
|
|
212
|
-
// Show theme-specific banner
|
|
213
|
-
if (theme in THEME_BANNERS) {
|
|
214
|
-
const themeBanner = THEME_BANNERS[theme];
|
|
215
|
-
console.log(`%c${themeBanner.simple}`, themeBanner.style);
|
|
216
|
-
}
|
|
217
|
-
this.success(`Theme changed to: ${theme}`);
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
this.error(`Invalid theme: ${theme}. Available:`, [...getAvailablePresets(), ...Object.keys(THEME_PRESETS)]);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
/**
|
|
224
|
-
* Establece el tipo de banner para mostrar en la inicialización
|
|
225
|
-
*
|
|
226
|
-
* @param {BannerType} bannerType - Tipo de banner ('simple' | 'ascii' | 'unicode' | 'svg' | 'animated')
|
|
227
|
-
*
|
|
228
|
-
* @example
|
|
229
|
-
* logger.setBannerType('ascii'); // Banner con arte ASCII
|
|
230
|
-
* logger.setBannerType('unicode'); // Banner con caracteres Unicode
|
|
231
|
-
* logger.setBannerType('animated'); // Banner con animación
|
|
232
|
-
*
|
|
233
|
-
* @since 0.3.0
|
|
234
|
-
*/
|
|
235
|
-
setBannerType(bannerType) {
|
|
236
|
-
this.config.bannerType = bannerType;
|
|
237
|
-
this.success(`Banner type changed to: ${bannerType}`);
|
|
238
|
-
}
|
|
239
|
-
/**
|
|
240
|
-
* Reinicia el logger a la configuración por defecto
|
|
241
|
-
*
|
|
242
|
-
* @example
|
|
243
|
-
* logger.resetConfig();
|
|
244
|
-
* // Todo vuelve a la configuración inicial
|
|
245
|
-
*
|
|
246
|
-
* @since 0.3.0
|
|
247
|
-
*/
|
|
248
|
-
resetConfig() {
|
|
249
|
-
// Clean up theme listener
|
|
250
|
-
if (this.themeChangeListener) {
|
|
251
|
-
this.themeChangeListener();
|
|
252
|
-
this.themeChangeListener = null;
|
|
253
|
-
}
|
|
254
|
-
this.config = { ...DEFAULT_CONFIG };
|
|
255
|
-
LEVEL_STYLES = THEME_PRESETS.default;
|
|
256
|
-
// Re-setup auto theme detection if enabled in default config
|
|
257
|
-
if (this.config.autoDetectTheme) {
|
|
258
|
-
this.setupAutoThemeDetection();
|
|
259
|
-
}
|
|
260
|
-
this.success('Logger configuration reset to defaults');
|
|
261
|
-
}
|
|
262
|
-
/**
|
|
263
|
-
* Método de limpieza para eliminar listeners y liberar recursos
|
|
264
|
-
*
|
|
265
|
-
* @example
|
|
266
|
-
* // Antes de cerrar la aplicación
|
|
267
|
-
* logger.cleanup();
|
|
268
|
-
*
|
|
269
|
-
* @since 0.3.0
|
|
270
|
-
*/
|
|
271
|
-
cleanup() {
|
|
272
|
-
if (this.themeChangeListener) {
|
|
273
|
-
this.themeChangeListener();
|
|
274
|
-
this.themeChangeListener = null;
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
// ===== SIMPLIFIED API =====
|
|
278
|
-
/**
|
|
279
|
-
* Aplica un preset inteligente - funciona perfectamente sin configuración
|
|
280
|
-
*
|
|
281
|
-
* @param {string} name - Nombre del preset a aplicar
|
|
282
|
-
*
|
|
283
|
-
* @example
|
|
284
|
-
* // Presets disponibles
|
|
285
|
-
* logger.preset('default'); // Limpio y adaptativo
|
|
286
|
-
* logger.preset('cyberpunk'); // Colores neón, efectos brillantes
|
|
287
|
-
* logger.preset('glassmorphism'); // Efectos de blur modernos
|
|
288
|
-
* logger.preset('minimal'); // Minimalista y elegante
|
|
289
|
-
* logger.preset('debug'); // Modo desarrollo detallado
|
|
290
|
-
* logger.preset('production'); // Optimizado para producción
|
|
291
|
-
*
|
|
292
|
-
* @since 0.3.0
|
|
293
|
-
*/
|
|
294
|
-
preset(name) {
|
|
295
|
-
if (!hasPreset(name)) {
|
|
296
|
-
this.error(`Unknown preset: ${name}. Available presets:`, getAvailablePresets());
|
|
297
|
-
return;
|
|
298
|
-
}
|
|
299
|
-
const presetConfig = getSmartPreset(name);
|
|
300
|
-
if (presetConfig) {
|
|
301
|
-
// Apply the smart preset configuration
|
|
302
|
-
this.displaySettings.showTimestamp = presetConfig.timestamp?.show ?? true;
|
|
303
|
-
this.displaySettings.showLocation = presetConfig.location?.show ?? true;
|
|
304
|
-
// Store the preset config for use in createStyledOutput
|
|
305
|
-
this._activePreset = presetConfig;
|
|
306
|
-
this._activePresetName = name;
|
|
307
|
-
this.success(`Applied preset: ${name}`);
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Lista todos los presets disponibles
|
|
312
|
-
*
|
|
313
|
-
* @returns {string[]} Array con nombres de presets disponibles
|
|
314
|
-
*
|
|
315
|
-
* @example
|
|
316
|
-
* const disponibles = logger.presets();
|
|
317
|
-
* console.log(disponibles); // ['default', 'cyberpunk', 'glassmorphism', ...]
|
|
318
|
-
*
|
|
319
|
-
* @since 0.3.0
|
|
320
|
-
*/
|
|
321
|
-
presets() {
|
|
322
|
-
return getAvailablePresets();
|
|
323
|
-
}
|
|
324
|
-
// ===== TOGGLE METHODS =====
|
|
325
|
-
/**
|
|
326
|
-
* Oculta el timestamp en los logs
|
|
327
|
-
*
|
|
328
|
-
* @example
|
|
329
|
-
* logger.hideTimestamp();
|
|
330
|
-
* logger.info('Sin marca de tiempo'); // Sin timestamp visible
|
|
331
|
-
*
|
|
332
|
-
* @since 0.3.0
|
|
333
|
-
*/
|
|
334
|
-
hideTimestamp() {
|
|
335
|
-
this.displaySettings.showTimestamp = false;
|
|
336
|
-
this.success('Timestamp hidden');
|
|
337
|
-
}
|
|
338
|
-
/**
|
|
339
|
-
* Muestra el timestamp en los logs
|
|
340
|
-
*
|
|
341
|
-
* @example
|
|
342
|
-
* logger.showTimestamp();
|
|
343
|
-
* logger.info('Con marca de tiempo'); // [2024-01-15 10:30:45] Con marca de tiempo
|
|
344
|
-
*
|
|
345
|
-
* @since 0.3.0
|
|
346
|
-
*/
|
|
347
|
-
showTimestamp() {
|
|
348
|
-
this.displaySettings.showTimestamp = true;
|
|
349
|
-
this.success('Timestamp shown');
|
|
350
|
-
}
|
|
351
|
-
/**
|
|
352
|
-
* Oculta la información de ubicación (archivo:línea) en los logs
|
|
353
|
-
*
|
|
354
|
-
* @example
|
|
355
|
-
* logger.hideLocation();
|
|
356
|
-
* logger.debug('Sin ubicación'); // Sin mostrar archivo:línea
|
|
357
|
-
*
|
|
358
|
-
* @since 0.3.0
|
|
359
|
-
*/
|
|
360
|
-
hideLocation() {
|
|
361
|
-
this.displaySettings.showLocation = false;
|
|
362
|
-
this.success('Location info hidden');
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Muestra la información de ubicación (archivo:línea) en los logs
|
|
366
|
-
*
|
|
367
|
-
* @example
|
|
368
|
-
* logger.showLocation();
|
|
369
|
-
* logger.debug('Con ubicación'); // app.js:42 Con ubicación
|
|
370
|
-
*
|
|
371
|
-
* @since 0.3.0
|
|
372
|
-
*/
|
|
373
|
-
showLocation() {
|
|
374
|
-
this.displaySettings.showLocation = true;
|
|
375
|
-
this.success('Location info shown');
|
|
376
|
-
}
|
|
377
|
-
/**
|
|
378
|
-
* Oculta los badges en los logs
|
|
379
|
-
*
|
|
380
|
-
* @example
|
|
381
|
-
* logger.hideBadges();
|
|
382
|
-
* const api = logger.api('REST');
|
|
383
|
-
* api.info('Sin badges'); // Sin mostrar [API] [REST]
|
|
384
|
-
*
|
|
385
|
-
* @since 0.3.0
|
|
386
|
-
*/
|
|
387
|
-
hideBadges() {
|
|
388
|
-
this.displaySettings.showBadges = false;
|
|
389
|
-
this.success('Badges hidden');
|
|
390
|
-
}
|
|
391
|
-
/**
|
|
392
|
-
* Muestra los badges en los logs
|
|
393
|
-
*
|
|
394
|
-
* @example
|
|
395
|
-
* logger.showBadges();
|
|
396
|
-
* const api = logger.api('GraphQL');
|
|
397
|
-
* api.info('Con badges'); // [API] [GraphQL] Con badges
|
|
398
|
-
*
|
|
399
|
-
* @since 0.3.0
|
|
400
|
-
*/
|
|
401
|
-
showBadges() {
|
|
402
|
-
this.displaySettings.showBadges = true;
|
|
403
|
-
this.success('Badges shown');
|
|
404
|
-
}
|
|
405
|
-
// ===== SCOPED LOGGERS =====
|
|
406
|
-
/**
|
|
407
|
-
* Crea un logger para componentes con estilo automático
|
|
408
|
-
*
|
|
409
|
-
* @param {string} name - Nombre del componente
|
|
410
|
-
* @returns {ComponentLogger} Logger con scope de componente
|
|
411
|
-
*
|
|
412
|
-
* @example
|
|
413
|
-
* const authLogger = logger.component('Autenticación');
|
|
414
|
-
* authLogger.info('Validando credenciales');
|
|
415
|
-
* // [COMPONENT] [Autenticación] Validando credenciales
|
|
416
|
-
*
|
|
417
|
-
* authLogger.success('Usuario autenticado');
|
|
418
|
-
* // [COMPONENT] [Autenticación] ✓ Usuario autenticado
|
|
419
|
-
*
|
|
420
|
-
* @since 0.3.0
|
|
421
|
-
*/
|
|
422
|
-
component(name) {
|
|
423
|
-
// Dynamic import to avoid circular dependency
|
|
424
|
-
const { ComponentLogger } = require('./ScopedLogger.js');
|
|
425
|
-
return new ComponentLogger(this, name);
|
|
426
|
-
}
|
|
427
|
-
/**
|
|
428
|
-
* Crea un logger para APIs con badges automáticos
|
|
429
|
-
*
|
|
430
|
-
* @param {string} name - Nombre de la API o endpoint
|
|
431
|
-
* @returns {APILogger} Logger con scope de API
|
|
432
|
-
*
|
|
433
|
-
* @example
|
|
434
|
-
* const api = logger.api('REST');
|
|
435
|
-
* api.info('GET /users');
|
|
436
|
-
* // [API] [REST] GET /users
|
|
437
|
-
*
|
|
438
|
-
* // Con badges adicionales
|
|
439
|
-
* api.badges(['v2', 'cached']).info('Respuesta desde caché');
|
|
440
|
-
* // [API] [v2] [cached] [REST] Respuesta desde caché
|
|
441
|
-
*
|
|
442
|
-
* @since 0.3.0
|
|
443
|
-
*/
|
|
444
|
-
api(name) {
|
|
445
|
-
// Dynamic import to avoid circular dependency
|
|
446
|
-
const { APILogger } = require('./ScopedLogger.js');
|
|
447
|
-
return new APILogger(this, name);
|
|
448
|
-
}
|
|
449
|
-
/**
|
|
450
|
-
* Crea un logger con scope general y soporte de badges
|
|
451
|
-
*
|
|
452
|
-
* @param {string} name - Nombre del scope
|
|
453
|
-
* @returns {ScopedLogger} Logger con scope personalizado
|
|
454
|
-
*
|
|
455
|
-
* @example
|
|
456
|
-
* const dbLogger = logger.scope('Database');
|
|
457
|
-
* dbLogger.info('Conectando a MongoDB');
|
|
458
|
-
* // [Database] Conectando a MongoDB
|
|
459
|
-
*
|
|
460
|
-
* // Con badges personalizados
|
|
461
|
-
* dbLogger.badge('SLOW').warn('Query tardó 5s');
|
|
462
|
-
* // [SLOW] [Database] Query tardó 5s
|
|
463
|
-
*
|
|
464
|
-
* @since 0.3.0
|
|
465
|
-
*/
|
|
466
|
-
scope(name) {
|
|
467
|
-
// Dynamic import to avoid circular dependency
|
|
468
|
-
const { ScopedLogger } = require('./ScopedLogger.js');
|
|
469
|
-
return new ScopedLogger(this, name);
|
|
470
|
-
}
|
|
471
|
-
// ===== SIMPLE CUSTOMIZATION =====
|
|
472
|
-
/**
|
|
473
|
-
* Personalización simple con configuración mínima
|
|
474
|
-
*
|
|
475
|
-
* @param {Object} overrides - Opciones de personalización
|
|
476
|
-
* @param {Object} overrides.message - Configuración del mensaje
|
|
477
|
-
* @param {Object} overrides.timestamp - Configuración del timestamp
|
|
478
|
-
* @param {Object} overrides.location - Configuración de ubicación
|
|
479
|
-
* @param {Object} overrides.level - Configuración del nivel
|
|
480
|
-
* @param {Object} overrides.prefix - Configuración del prefijo
|
|
481
|
-
* @param {string} overrides.spacing - Espaciado: 'compact' | 'normal' | 'spacious'
|
|
482
|
-
*
|
|
483
|
-
* @example
|
|
484
|
-
* logger.customize({
|
|
485
|
-
* message: { color: '#00ff00', size: '16px' },
|
|
486
|
-
* timestamp: { show: false },
|
|
487
|
-
* spacing: 'compact'
|
|
488
|
-
* });
|
|
489
|
-
*
|
|
490
|
-
* @since 0.3.0
|
|
491
|
-
*/
|
|
492
|
-
customize(overrides) {
|
|
493
|
-
// Apply simple overrides
|
|
494
|
-
if (overrides.timestamp?.show !== undefined) {
|
|
495
|
-
this.displaySettings.showTimestamp = overrides.timestamp.show;
|
|
496
|
-
}
|
|
497
|
-
if (overrides.location?.show !== undefined) {
|
|
498
|
-
this.displaySettings.showLocation = overrides.location.show;
|
|
499
|
-
}
|
|
500
|
-
if (overrides.prefix?.show !== undefined) {
|
|
501
|
-
// Will be handled when we integrate with preset system
|
|
502
|
-
}
|
|
503
|
-
// Store customization for use in createStyledOutput
|
|
504
|
-
this._customization = overrides;
|
|
505
|
-
this.success('Customization applied');
|
|
506
|
-
}
|
|
507
|
-
/**
|
|
508
|
-
* Access advanced styling API (for power users)
|
|
509
|
-
*/
|
|
510
|
-
styles() {
|
|
511
|
-
return createLogStyleBuilder(this);
|
|
512
|
-
}
|
|
513
|
-
// ===== HANDLER MANAGEMENT =====
|
|
514
|
-
/**
|
|
515
|
-
* Añade un handler personalizado para extender funcionalidad
|
|
516
|
-
*
|
|
517
|
-
* @param {ILogHandler} handler - Handler que implementa ILogHandler
|
|
518
|
-
*
|
|
519
|
-
* @example
|
|
520
|
-
* // Handler personalizado para enviar logs a servidor
|
|
521
|
-
* const remoteHandler = new RemoteLogHandler('https://api.ejemplo.com/logs');
|
|
522
|
-
* logger.addHandler(remoteHandler);
|
|
523
|
-
*
|
|
524
|
-
* @example
|
|
525
|
-
* // Handler para guardar en archivo
|
|
526
|
-
* const fileHandler = new FileLogHandler('./app.log');
|
|
527
|
-
* logger.addHandler(fileHandler);
|
|
528
|
-
*
|
|
529
|
-
* @since 0.3.0
|
|
530
|
-
*/
|
|
531
|
-
addHandler(handler) {
|
|
532
|
-
this.handlers.push(handler);
|
|
533
|
-
}
|
|
534
|
-
/**
|
|
535
|
-
* Obtiene todos los handlers registrados
|
|
536
|
-
*
|
|
537
|
-
* @returns {ILogHandler[]} Array de handlers activos
|
|
538
|
-
* @since 0.3.0
|
|
539
|
-
*/
|
|
540
|
-
getHandlers() {
|
|
541
|
-
return [...this.handlers];
|
|
542
|
-
}
|
|
543
|
-
/**
|
|
544
|
-
* Obtiene el handler de exportación si está disponible
|
|
545
|
-
*
|
|
546
|
-
* @returns {ExportLogHandler | undefined} Handler de exportación o undefined
|
|
547
|
-
* @since 0.3.0
|
|
548
|
-
*/
|
|
549
|
-
getExportHandler() {
|
|
550
|
-
return this.exportHandler;
|
|
551
|
-
}
|
|
552
|
-
// ===== CORE LOGGING METHODS =====
|
|
553
|
-
/**
|
|
554
|
-
* Verifica si un nivel de log debe mostrarse según la verbosidad actual
|
|
555
|
-
* @private
|
|
556
|
-
* @param {LogLevel} level - Nivel de log a verificar
|
|
557
|
-
* @returns {boolean} True si debe mostrarse, false si no
|
|
558
|
-
*/
|
|
559
|
-
shouldLog(level) {
|
|
560
|
-
if (this.config.verbosity === 'silent')
|
|
561
|
-
return false;
|
|
562
|
-
const levels = { debug: 0, info: 1, warn: 2, error: 3, critical: 4 };
|
|
563
|
-
return levels[level] >= levels[this.config.verbosity];
|
|
564
|
-
}
|
|
565
|
-
/**
|
|
566
|
-
* Obtiene el prefijo efectivo (global + scope)
|
|
567
|
-
* @private
|
|
568
|
-
* @returns {string | undefined} Prefijo combinado o undefined
|
|
569
|
-
*/
|
|
570
|
-
getEffectivePrefix() {
|
|
571
|
-
const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);
|
|
572
|
-
return parts.length > 0 ? parts.join(':') : undefined;
|
|
573
|
-
}
|
|
574
|
-
/**
|
|
575
|
-
* Método central de logging que maneja estilos y formato
|
|
576
|
-
* @protected
|
|
577
|
-
* @param {LogLevel} level - Nivel del log
|
|
578
|
-
* @param {...any} args - Argumentos a loggear
|
|
579
|
-
*/
|
|
580
|
-
log(level, ...args) {
|
|
581
|
-
if (!this.shouldLog(level))
|
|
582
|
-
return;
|
|
583
|
-
const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;
|
|
584
|
-
const prefix = this.getEffectivePrefix();
|
|
585
|
-
const message = args.length > 0 ? String(args[0]) : '';
|
|
586
|
-
const additionalArgs = args.slice(1);
|
|
587
|
-
// Create styled output with theme detection and display settings
|
|
588
|
-
const [format, ...styles] = createStyledOutput(level, LEVEL_STYLES, prefix, message, this.displaySettings.showLocation ? stackInfo : null, this.config.autoDetectTheme);
|
|
589
|
-
// Add group indentation
|
|
590
|
-
const groupIndent = ' '.repeat(this.groupDepth);
|
|
591
|
-
const finalFormat = groupIndent + format;
|
|
592
|
-
// Output to console
|
|
593
|
-
if (additionalArgs.length > 0) {
|
|
594
|
-
console.log(finalFormat, ...styles, ...additionalArgs);
|
|
595
|
-
}
|
|
596
|
-
else {
|
|
597
|
-
console.log(finalFormat, ...styles);
|
|
598
|
-
}
|
|
599
|
-
// Update export handler group info
|
|
600
|
-
if (this.exportHandler) {
|
|
601
|
-
this.exportHandler.setGroupInfo(this.groupDepth);
|
|
602
|
-
}
|
|
603
|
-
// Call custom handlers
|
|
604
|
-
const metadata = {
|
|
605
|
-
timestamp: formatTimestamp(),
|
|
606
|
-
level,
|
|
607
|
-
prefix,
|
|
608
|
-
stackInfo: stackInfo ? stackInfo : undefined,
|
|
609
|
-
};
|
|
610
|
-
this.handlers.forEach(handler => {
|
|
611
|
-
try {
|
|
612
|
-
handler.handle(level, message, args, metadata);
|
|
613
|
-
}
|
|
614
|
-
catch (error) {
|
|
615
|
-
console.error('Log handler failed:', error);
|
|
616
|
-
}
|
|
617
|
-
});
|
|
618
|
-
}
|
|
619
|
-
/**
|
|
620
|
-
* Registra información de debug (prioridad más baja)
|
|
621
|
-
*
|
|
622
|
-
* @param {...any} args - Mensajes y datos a loggear
|
|
623
|
-
*
|
|
624
|
-
* @example
|
|
625
|
-
* logger.debug('Variable estado:', { usuario: 'Juan', activo: true });
|
|
626
|
-
* logger.debug('Iniciando proceso de validación');
|
|
627
|
-
*
|
|
628
|
-
* @since 0.3.0
|
|
629
|
-
*/
|
|
630
|
-
debug(...args) {
|
|
631
|
-
this.log('debug', ...args);
|
|
632
|
-
}
|
|
633
|
-
/**
|
|
634
|
-
* Registra mensajes informativos
|
|
635
|
-
*
|
|
636
|
-
* @param {...any} args - Mensajes y datos informativos
|
|
637
|
-
*
|
|
638
|
-
* @example
|
|
639
|
-
* logger.info('Servidor iniciado en puerto 3000');
|
|
640
|
-
* logger.info('Usuario conectado:', userId);
|
|
641
|
-
* logger.info('Procesando', totalItems, 'elementos');
|
|
642
|
-
*
|
|
643
|
-
* @since 0.3.0
|
|
644
|
-
*/
|
|
645
|
-
info(...args) {
|
|
646
|
-
this.log('info', ...args);
|
|
647
|
-
}
|
|
648
|
-
/**
|
|
649
|
-
* Registra mensajes de advertencia
|
|
650
|
-
*
|
|
651
|
-
* @param {...any} args - Mensajes de advertencia
|
|
652
|
-
*
|
|
653
|
-
* @example
|
|
654
|
-
* logger.warn('Memoria al 85% de capacidad');
|
|
655
|
-
* logger.warn('API deprecada, usar v2');
|
|
656
|
-
* logger.warn('Reintentos agotados:', maxRetries);
|
|
657
|
-
*
|
|
658
|
-
* @since 0.3.0
|
|
659
|
-
*/
|
|
660
|
-
warn(...args) {
|
|
661
|
-
this.log('warn', ...args);
|
|
662
|
-
}
|
|
663
|
-
/**
|
|
664
|
-
* Registra mensajes de error
|
|
665
|
-
*
|
|
666
|
-
* @param {...any} args - Mensajes de error y stack traces
|
|
667
|
-
*
|
|
668
|
-
* @example
|
|
669
|
-
* logger.error('Fallo en conexión a base de datos');
|
|
670
|
-
* logger.error('Error al procesar:', error.message, error.stack);
|
|
671
|
-
* logger.error('Código de error:', errorCode);
|
|
672
|
-
*
|
|
673
|
-
* @since 0.3.0
|
|
674
|
-
*/
|
|
675
|
-
error(...args) {
|
|
676
|
-
this.log('error', ...args);
|
|
677
|
-
}
|
|
678
|
-
/**
|
|
679
|
-
* Registra mensajes de éxito (nivel info especial)
|
|
680
|
-
*
|
|
681
|
-
* @param {...any} args - Mensajes de operaciones exitosas
|
|
682
|
-
*
|
|
683
|
-
* @example
|
|
684
|
-
* logger.success('Base de datos conectada');
|
|
685
|
-
* logger.success('Usuario creado con ID:', userId);
|
|
686
|
-
* logger.success('✓ Tests pasados: 42/42');
|
|
687
|
-
*
|
|
688
|
-
* @since 0.3.0
|
|
689
|
-
*/
|
|
690
|
-
success(...args) {
|
|
691
|
-
if (!this.shouldLog('info'))
|
|
692
|
-
return;
|
|
693
|
-
const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;
|
|
694
|
-
const prefix = this.getEffectivePrefix();
|
|
695
|
-
const message = args.length > 0 ? String(args[0]) : '';
|
|
696
|
-
const additionalArgs = args.slice(1);
|
|
697
|
-
// Handle success as special case - use info level with success styling
|
|
698
|
-
const [format, ...styles] = createStyledOutput('info', LEVEL_STYLES, prefix, message, this.displaySettings.showLocation ? stackInfo : null, this.config.autoDetectTheme);
|
|
699
|
-
// Override with success styling
|
|
700
|
-
const successStyle = LEVEL_STYLES.success;
|
|
701
|
-
let emoji = '✅';
|
|
702
|
-
let label = 'SUCCESS';
|
|
703
|
-
if (successStyle) {
|
|
704
|
-
if (successStyle.emoji) {
|
|
705
|
-
emoji = successStyle.emoji;
|
|
706
|
-
}
|
|
707
|
-
if (successStyle.label) {
|
|
708
|
-
label = successStyle.label;
|
|
709
|
-
}
|
|
710
|
-
}
|
|
711
|
-
const successFormat = format.replace(/ℹ️ INFO/, `${emoji} ${label}`);
|
|
712
|
-
const groupIndent = ' '.repeat(this.groupDepth);
|
|
713
|
-
const finalFormat = groupIndent + successFormat;
|
|
714
|
-
if (additionalArgs.length > 0) {
|
|
715
|
-
console.log(finalFormat, ...styles, ...additionalArgs);
|
|
716
|
-
}
|
|
717
|
-
else {
|
|
718
|
-
console.log(finalFormat, ...styles);
|
|
719
|
-
}
|
|
720
|
-
// Call handlers
|
|
721
|
-
const metadata = {
|
|
722
|
-
timestamp: formatTimestamp(),
|
|
723
|
-
level: 'info',
|
|
724
|
-
prefix,
|
|
725
|
-
stackInfo: stackInfo ? stackInfo : undefined,
|
|
726
|
-
};
|
|
727
|
-
this.handlers.forEach(handler => {
|
|
728
|
-
try {
|
|
729
|
-
handler.handle('info', message, args, metadata);
|
|
730
|
-
}
|
|
731
|
-
catch (error) {
|
|
732
|
-
console.error('Log handler failed:', error);
|
|
733
|
-
}
|
|
734
|
-
});
|
|
735
|
-
}
|
|
736
|
-
/**
|
|
737
|
-
* Registra información de trace (debugging detallado)
|
|
738
|
-
*
|
|
739
|
-
* @param {...any} args - Datos detallados para debugging
|
|
740
|
-
*
|
|
741
|
-
* @example
|
|
742
|
-
* logger.trace('Entrando en función processData');
|
|
743
|
-
* logger.trace('Stack completo:', new Error().stack);
|
|
744
|
-
*
|
|
745
|
-
* @since 0.3.0
|
|
746
|
-
*/
|
|
747
|
-
trace(...args) {
|
|
748
|
-
this.log('debug', ...args);
|
|
749
|
-
if (this.shouldLog('debug')) {
|
|
750
|
-
console.trace(...args);
|
|
751
|
-
}
|
|
752
|
-
}
|
|
753
|
-
/**
|
|
754
|
-
* Registra errores críticos (prioridad más alta)
|
|
755
|
-
*
|
|
756
|
-
* @param {...any} args - Errores críticos del sistema
|
|
757
|
-
*
|
|
758
|
-
* @example
|
|
759
|
-
* logger.critical('Sistema caído - reinicio inmediato requerido');
|
|
760
|
-
* logger.critical('Pérdida de datos detectada');
|
|
761
|
-
* logger.critical('Brecha de seguridad:', securityError);
|
|
762
|
-
*
|
|
763
|
-
* @since 0.3.0
|
|
764
|
-
*/
|
|
765
|
-
critical(...args) {
|
|
766
|
-
this.log('critical', ...args);
|
|
767
|
-
}
|
|
768
|
-
// ===== ADVANCED LOGGING FEATURES =====
|
|
769
|
-
/**
|
|
770
|
-
* Muestra datos en formato de tabla
|
|
771
|
-
*
|
|
772
|
-
* @param {any} data - Datos a mostrar (array de objetos o matriz)
|
|
773
|
-
* @param {string[]} columns - Columnas específicas a mostrar (opcional)
|
|
774
|
-
*
|
|
775
|
-
* @example
|
|
776
|
-
* const usuarios = [
|
|
777
|
-
* { id: 1, nombre: 'Juan', edad: 30 },
|
|
778
|
-
* { id: 2, nombre: 'María', edad: 25 }
|
|
779
|
-
* ];
|
|
780
|
-
* logger.table(usuarios);
|
|
781
|
-
* logger.table(usuarios, ['nombre', 'edad']); // Solo estas columnas
|
|
782
|
-
*
|
|
783
|
-
* @since 0.3.0
|
|
784
|
-
*/
|
|
785
|
-
table(data, columns) {
|
|
786
|
-
if (!this.shouldLog('info'))
|
|
787
|
-
return;
|
|
788
|
-
const prefix = this.getEffectivePrefix();
|
|
789
|
-
const tableStyle = StylePresets.accent().build();
|
|
790
|
-
const format = `%c📊 TABLE${prefix ? ` [${prefix}]` : ''}`;
|
|
791
|
-
console.log(format, tableStyle);
|
|
792
|
-
if (columns) {
|
|
793
|
-
console.table(data, columns);
|
|
794
|
-
}
|
|
795
|
-
else {
|
|
796
|
-
console.table(data);
|
|
797
|
-
}
|
|
798
|
-
}
|
|
799
|
-
/**
|
|
800
|
-
* Inicia un grupo colapsable en la consola
|
|
801
|
-
*
|
|
802
|
-
* @param {string} label - Etiqueta del grupo
|
|
803
|
-
* @param {boolean} collapsed - Si el grupo inicia colapsado (default: false)
|
|
804
|
-
*
|
|
805
|
-
* @example
|
|
806
|
-
* logger.group('Procesando usuarios');
|
|
807
|
-
* logger.info('Usuario 1 procesado');
|
|
808
|
-
* logger.info('Usuario 2 procesado');
|
|
809
|
-
* logger.groupEnd();
|
|
810
|
-
*
|
|
811
|
-
* @example
|
|
812
|
-
* // Grupo colapsado por defecto
|
|
813
|
-
* logger.group('Detalles adicionales', true);
|
|
814
|
-
* logger.debug('Información detallada aquí');
|
|
815
|
-
* logger.groupEnd();
|
|
816
|
-
*
|
|
817
|
-
* @since 0.3.0
|
|
818
|
-
*/
|
|
819
|
-
group(label, collapsed = false) {
|
|
820
|
-
const groupStyle = new StyleBuilder()
|
|
821
|
-
.bg('linear-gradient(135deg, #e3f2fd 0%, #bbdefb 100%)')
|
|
822
|
-
.color('#1565c0')
|
|
823
|
-
.border('1px solid #90caf9')
|
|
824
|
-
.padding('4px 12px')
|
|
825
|
-
.rounded('6px')
|
|
826
|
-
.bold()
|
|
827
|
-
.build();
|
|
828
|
-
const format = `%c📁 ${label}`;
|
|
829
|
-
if (collapsed) {
|
|
830
|
-
console.groupCollapsed(format, groupStyle);
|
|
831
|
-
}
|
|
832
|
-
else {
|
|
833
|
-
console.group(format, groupStyle);
|
|
834
|
-
}
|
|
835
|
-
this.groupDepth++;
|
|
836
|
-
}
|
|
837
|
-
/**
|
|
838
|
-
* Finaliza el grupo actual de la consola
|
|
839
|
-
*
|
|
840
|
-
* @example
|
|
841
|
-
* logger.group('Operaciones');
|
|
842
|
-
* logger.info('Operación 1');
|
|
843
|
-
* logger.info('Operación 2');
|
|
844
|
-
* logger.groupEnd(); // Cierra el grupo
|
|
845
|
-
*
|
|
846
|
-
* @since 0.3.0
|
|
847
|
-
*/
|
|
848
|
-
groupEnd() {
|
|
849
|
-
if (this.groupDepth > 0) {
|
|
850
|
-
console.groupEnd();
|
|
851
|
-
this.groupDepth--;
|
|
852
|
-
}
|
|
853
|
-
}
|
|
854
|
-
// ===== PERFORMANCE TIMING =====
|
|
855
|
-
/**
|
|
856
|
-
* Inicia un temporizador con la etiqueta dada
|
|
857
|
-
*
|
|
858
|
-
* @param {string} label - Etiqueta identificadora del temporizador
|
|
859
|
-
*
|
|
860
|
-
* @example
|
|
861
|
-
* logger.time('proceso-datos');
|
|
862
|
-
* // ... operación costosa ...
|
|
863
|
-
* logger.timeEnd('proceso-datos'); // ⏱️ Timer ended: proceso-datos - 1523.45ms
|
|
864
|
-
*
|
|
865
|
-
* @since 0.3.0
|
|
866
|
-
*/
|
|
867
|
-
time(label) {
|
|
868
|
-
const timer = {
|
|
869
|
-
label,
|
|
870
|
-
startTime: performance.now(),
|
|
871
|
-
};
|
|
872
|
-
this.timers.set(label, timer);
|
|
873
|
-
const timerStyle = StylePresets.warning().build();
|
|
874
|
-
console.log(`%c⏱️ Timer started: ${label}`, timerStyle);
|
|
875
|
-
}
|
|
876
|
-
/**
|
|
877
|
-
* Finaliza un temporizador y muestra el tiempo transcurrido
|
|
878
|
-
*
|
|
879
|
-
* @param {string} label - Etiqueta del temporizador a finalizar
|
|
880
|
-
*
|
|
881
|
-
* @example
|
|
882
|
-
* logger.time('consulta-db');
|
|
883
|
-
* await consultarBaseDatos();
|
|
884
|
-
* logger.timeEnd('consulta-db'); // ⏱️ Timer ended: consulta-db - 234.56ms
|
|
885
|
-
*
|
|
886
|
-
* @since 0.3.0
|
|
887
|
-
*/
|
|
888
|
-
timeEnd(label) {
|
|
889
|
-
const timer = this.timers.get(label);
|
|
890
|
-
if (!timer) {
|
|
891
|
-
this.warn(`Timer '${label}' does not exist`);
|
|
892
|
-
return;
|
|
893
|
-
}
|
|
894
|
-
const elapsed = performance.now() - timer.startTime;
|
|
895
|
-
this.timers.delete(label);
|
|
896
|
-
const timerStyle = StylePresets.success().build();
|
|
897
|
-
console.log(`%c⏱️ Timer ended: ${label} - ${elapsed.toFixed(2)}ms`, timerStyle);
|
|
898
|
-
}
|
|
899
|
-
// ===== ADVANCED VISUAL FEATURES =====
|
|
900
|
-
/**
|
|
901
|
-
* Muestra un banner con el tipo especificado o configurado
|
|
902
|
-
*
|
|
903
|
-
* @param {BannerType} bannerType - Tipo de banner (opcional)
|
|
904
|
-
*
|
|
905
|
-
* @example
|
|
906
|
-
* logger.showBanner('ascii'); // Banner ASCII art
|
|
907
|
-
* logger.showBanner('unicode'); // Banner con caracteres Unicode
|
|
908
|
-
* logger.showBanner('svg'); // Banner con gráfico SVG
|
|
909
|
-
* logger.showBanner(); // Usa el tipo configurado
|
|
910
|
-
*
|
|
911
|
-
* @since 0.3.0
|
|
912
|
-
*/
|
|
913
|
-
showBanner(bannerType) {
|
|
914
|
-
const effectiveBannerType = bannerType ? bannerType : this.config.bannerType;
|
|
915
|
-
displayInitBanner(effectiveBannerType);
|
|
916
|
-
}
|
|
917
|
-
/**
|
|
918
|
-
* Registra mensaje con imagen SVG de fondo
|
|
919
|
-
*
|
|
920
|
-
* @param {string} message - Mensaje a mostrar
|
|
921
|
-
* @param {string} svgContent - Contenido SVG personalizado (opcional)
|
|
922
|
-
* @param {StyleOptions} options - Opciones de estilo (ancho, alto, padding)
|
|
923
|
-
*
|
|
924
|
-
* @example
|
|
925
|
-
* // SVG automático con gradiente
|
|
926
|
-
* logger.logWithSVG('🎆 Bienvenido a Better Logger');
|
|
927
|
-
*
|
|
928
|
-
* @example
|
|
929
|
-
* // SVG personalizado
|
|
930
|
-
* const customSVG = '<svg>...</svg>';
|
|
931
|
-
* logger.logWithSVG('Logo', customSVG, { width: 400, height: 100 });
|
|
932
|
-
*
|
|
933
|
-
* @since 0.3.0
|
|
934
|
-
*/
|
|
935
|
-
logWithSVG(message, svgContent, options = {}) {
|
|
936
|
-
const { width = 300, height = 60, padding = '30px 150px' } = options;
|
|
937
|
-
let svgDataUri = '';
|
|
938
|
-
if (svgContent) {
|
|
939
|
-
const encodedSVG = encodeURIComponent(svgContent);
|
|
940
|
-
svgDataUri = `data:image/svg+xml,${encodedSVG}`;
|
|
941
|
-
}
|
|
942
|
-
else {
|
|
943
|
-
const defaultSVG = `<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 ${width} ${height}'><defs><linearGradient id='grad' x1='0%' y1='0%' x2='100%' y2='0%'><stop offset='0%' style='stop-color:%23667eea'/><stop offset='100%' style='stop-color:%23764ba2'/></linearGradient></defs><rect width='100%' height='100%' fill='url(%23grad)' rx='4'/><text x='${width / 2}' y='${height / 2 + 5}' text-anchor='middle' fill='white' font-family='monospace' font-size='14' font-weight='bold'>${message}</text></svg>`;
|
|
944
|
-
svgDataUri = `data:image/svg+xml,${encodeURIComponent(defaultSVG)}`;
|
|
945
|
-
}
|
|
946
|
-
const svgStyle = new StyleBuilder()
|
|
947
|
-
.bg(`url("${svgDataUri}") no-repeat center center`)
|
|
948
|
-
.padding(padding)
|
|
949
|
-
.color('transparent')
|
|
950
|
-
.rounded('4px')
|
|
951
|
-
.build();
|
|
952
|
-
console.log(`%c${message}`, svgStyle);
|
|
953
|
-
}
|
|
954
|
-
/**
|
|
955
|
-
* Registra mensaje con gradiente animado de fondo
|
|
956
|
-
*
|
|
957
|
-
* @param {string} message - Mensaje a animar
|
|
958
|
-
* @param {number} duration - Duración de la animación en segundos (default: 3)
|
|
959
|
-
*
|
|
960
|
-
* @example
|
|
961
|
-
* logger.logAnimated('🌈 Animación en progreso');
|
|
962
|
-
* logger.logAnimated('Cargando...', 5); // Animación de 5 segundos
|
|
963
|
-
*
|
|
964
|
-
* @since 0.3.0
|
|
965
|
-
*/
|
|
966
|
-
logAnimated(message, duration = 3) {
|
|
967
|
-
// Inject CSS animation if not already present
|
|
968
|
-
if (!document.getElementById('logger-animations')) {
|
|
969
|
-
const style = document.createElement('style');
|
|
970
|
-
style.id = 'logger-animations';
|
|
971
|
-
style.textContent = `
|
|
972
|
-
@keyframes loggerGradient {
|
|
973
|
-
0% { background-position: 0% 50%; }
|
|
974
|
-
50% { background-position: 100% 50%; }
|
|
975
|
-
100% { background-position: 0% 50%; }
|
|
976
|
-
}
|
|
977
|
-
`;
|
|
978
|
-
document.head.appendChild(style);
|
|
979
|
-
}
|
|
980
|
-
const animatedStyle = new StyleBuilder()
|
|
981
|
-
.bg('linear-gradient(-45deg, #667eea, #764ba2, #667eea, #764ba2)')
|
|
982
|
-
.css('background-size', '400% 400%')
|
|
983
|
-
.color('#ffffff')
|
|
984
|
-
.padding('12px 20px')
|
|
985
|
-
.rounded('8px')
|
|
986
|
-
.bold()
|
|
987
|
-
.font('Monaco, Consolas, monospace')
|
|
988
|
-
.animation(`loggerGradient ${duration}s ease infinite`)
|
|
989
|
-
.display('inline-block')
|
|
990
|
-
.build();
|
|
991
|
-
console.log(`%c${message}`, animatedStyle);
|
|
992
|
-
}
|
|
993
|
-
/**
|
|
994
|
-
* Agrupa logs por una propiedad específica usando Object.groupBy (cuando esté disponible)
|
|
995
|
-
*
|
|
996
|
-
* @param {T[]} items - Array de elementos a agrupar
|
|
997
|
-
* @param {Function} groupBy - Función que retorna la clave de agrupación
|
|
998
|
-
*
|
|
999
|
-
* @example
|
|
1000
|
-
* const ventas = [
|
|
1001
|
-
* { producto: 'Laptop', categoria: 'Electrónica', precio: 1200 },
|
|
1002
|
-
* { producto: 'Mouse', categoria: 'Electrónica', precio: 25 },
|
|
1003
|
-
* { producto: 'Libro', categoria: 'Literatura', precio: 15 }
|
|
1004
|
-
* ];
|
|
1005
|
-
* logger.logGrouped(ventas, item => item.categoria);
|
|
1006
|
-
*
|
|
1007
|
-
* @since 0.3.0
|
|
1008
|
-
*/
|
|
1009
|
-
logGrouped(items, groupBy) {
|
|
1010
|
-
try {
|
|
1011
|
-
// Use Object.groupBy if available (ES2024), otherwise fallback to reduce
|
|
1012
|
-
let grouped;
|
|
1013
|
-
if (Object.groupBy) {
|
|
1014
|
-
grouped = Object.groupBy(items, groupBy);
|
|
1015
|
-
}
|
|
1016
|
-
else {
|
|
1017
|
-
grouped = items.reduce((acc, item) => {
|
|
1018
|
-
const key = groupBy(item);
|
|
1019
|
-
if (!acc[key]) {
|
|
1020
|
-
acc[key] = [];
|
|
1021
|
-
}
|
|
1022
|
-
acc[key].push(item);
|
|
1023
|
-
return acc;
|
|
1024
|
-
}, {});
|
|
1025
|
-
}
|
|
1026
|
-
Object.entries(grouped).forEach(([group, groupItems]) => {
|
|
1027
|
-
this.group(`Group: ${group}`);
|
|
1028
|
-
this.table(groupItems);
|
|
1029
|
-
this.groupEnd();
|
|
1030
|
-
});
|
|
1031
|
-
}
|
|
1032
|
-
catch {
|
|
1033
|
-
this.info('Grouped data:', items);
|
|
1034
|
-
}
|
|
1035
|
-
}
|
|
1036
|
-
// ===== CLI SYSTEM =====
|
|
1037
|
-
/**
|
|
1038
|
-
* Procesador de comandos CLI para configuración y exportación del logger
|
|
1039
|
-
*
|
|
1040
|
-
* @param {string} command - Comando CLI a ejecutar
|
|
1041
|
-
* @returns {Promise<void>}
|
|
1042
|
-
*
|
|
1043
|
-
* @example
|
|
1044
|
-
* // Comandos disponibles
|
|
1045
|
-
* await logger.cli('export json'); // Exporta logs en JSON
|
|
1046
|
-
* await logger.cli('export csv'); // Exporta logs en CSV
|
|
1047
|
-
* await logger.cli('theme list'); // Lista temas disponibles
|
|
1048
|
-
* await logger.cli('theme set neon'); // Cambia al tema neon
|
|
1049
|
-
* await logger.cli('config show'); // Muestra configuración actual
|
|
1050
|
-
* await logger.cli('history clear'); // Limpia historial de logs
|
|
1051
|
-
* await logger.cli('status'); // Muestra estado del logger
|
|
1052
|
-
* await logger.cli('help'); // Muestra ayuda de comandos
|
|
1053
|
-
*
|
|
1054
|
-
* @since 0.3.0
|
|
1055
|
-
*/
|
|
1056
|
-
async cli(command) {
|
|
1057
|
-
if (!this.cliProcessor) {
|
|
1058
|
-
this.error('CLI processor not initialized');
|
|
1059
|
-
return;
|
|
1060
|
-
}
|
|
1061
|
-
await this.cliProcessor.processCommand(command, this);
|
|
1062
|
-
}
|
|
1063
|
-
}
|
|
1064
|
-
/**
|
|
1065
|
-
* Instancia singleton del logger con configuración por defecto
|
|
1066
|
-
* @constant {Logger}
|
|
1067
|
-
*/
|
|
1068
|
-
const defaultLogger = new Logger({
|
|
1069
|
-
verbosity: 'info',
|
|
1070
|
-
enableColors: true,
|
|
1071
|
-
enableTimestamps: true,
|
|
1072
|
-
enableStackTrace: true,
|
|
1073
|
-
bufferSize: 1000, // Enable export functionality by default
|
|
1074
|
-
});
|
|
1075
|
-
// Display initialization banner
|
|
1076
|
-
displayInitBanner();
|
|
1077
|
-
// Export the singleton instance as default
|
|
1078
|
-
export default defaultLogger;
|
|
1079
|
-
/**
|
|
1080
|
-
* Métodos individuales exportados para conveniencia
|
|
1081
|
-
* @description Todos los métodos están correctamente enlazados al singleton
|
|
1082
|
-
* @since 0.3.0
|
|
1083
|
-
*/
|
|
1084
|
-
export const debug = (...args) => defaultLogger.debug(...args);
|
|
1085
|
-
export const info = (...args) => defaultLogger.info(...args);
|
|
1086
|
-
export const warn = (...args) => defaultLogger.warn(...args);
|
|
1087
|
-
export const error = (...args) => defaultLogger.error(...args);
|
|
1088
|
-
export const success = (...args) => defaultLogger.success(...args);
|
|
1089
|
-
export const trace = (...args) => defaultLogger.trace(...args);
|
|
1090
|
-
export const critical = (...args) => defaultLogger.critical(...args);
|
|
1091
|
-
export const table = (data, columns) => defaultLogger.table(data, columns);
|
|
1092
|
-
export const group = (label, collapsed) => defaultLogger.group(label, collapsed);
|
|
1093
|
-
export const groupEnd = () => defaultLogger.groupEnd();
|
|
1094
|
-
export const time = (label) => defaultLogger.time(label);
|
|
1095
|
-
export const timeEnd = (label) => defaultLogger.timeEnd(label);
|
|
1096
|
-
export const setGlobalPrefix = (prefix) => defaultLogger.setGlobalPrefix(prefix);
|
|
1097
|
-
export const setVerbosity = (level) => defaultLogger.setVerbosity(level);
|
|
1098
|
-
export const addHandler = (handler) => defaultLogger.addHandler(handler);
|
|
1099
|
-
export const setTheme = (theme) => defaultLogger.setTheme(theme);
|
|
1100
|
-
export const setBannerType = (bannerType) => defaultLogger.setBannerType(bannerType);
|
|
1101
|
-
export const showBanner = (bannerType) => defaultLogger.showBanner(bannerType);
|
|
1102
|
-
export const logWithSVG = (message, svgContent, options) => defaultLogger.logWithSVG(message, svgContent, options);
|
|
1103
|
-
export const logAnimated = (message, duration) => defaultLogger.logAnimated(message, duration);
|
|
1104
|
-
export const cli = (command) => defaultLogger.cli(command);
|
|
1105
|
-
export const cleanup = () => defaultLogger.cleanup();
|
|
1106
|
-
// Simplified API exports
|
|
1107
|
-
export const preset = (name) => defaultLogger.preset(name);
|
|
1108
|
-
export const presets = () => defaultLogger.presets();
|
|
1109
|
-
export const hideTimestamp = () => defaultLogger.hideTimestamp();
|
|
1110
|
-
export const showTimestamp = () => defaultLogger.showTimestamp();
|
|
1111
|
-
export const hideLocation = () => defaultLogger.hideLocation();
|
|
1112
|
-
export const showLocation = () => defaultLogger.showLocation();
|
|
1113
|
-
export const hideBadges = () => defaultLogger.hideBadges();
|
|
1114
|
-
export const showBadges = () => defaultLogger.showBadges();
|
|
1115
|
-
export const component = (name) => defaultLogger.component(name);
|
|
1116
|
-
export const api = (name) => defaultLogger.api(name);
|
|
1117
|
-
export const scope = (name) => defaultLogger.scope(name);
|
|
1118
|
-
export const customize = (overrides) => defaultLogger.customize(overrides);
|
|
1119
|
-
export const styles = () => defaultLogger.styles();
|
|
1120
|
-
// Re-export handlers and utilities for backward compatibility
|
|
1121
|
-
export { FileLogHandler, RemoteLogHandler, AnalyticsLogHandler, ExportLogHandler } from './handlers/index.js';
|
|
1122
|
-
export { StyleBuilder, StylePresets as Styles } from './styling/index.js';
|
|
1123
|
-
// Commented out to avoid circular dependency - import these directly from ScopedLogger.js if needed
|
|
1124
|
-
// export { ScopedLogger, APILogger, ComponentLogger } from './ScopedLogger.js';
|