@mks2508/better-logger 0.18.2-alpha.1 → 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 +38 -336
- package/dist/Logger.d.ts +243 -154
- package/dist/Logger.d.ts.map +1 -1
- package/dist/ScopedLogger.d.ts +511 -8
- 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-L7HzynFw.cjs → LogContext-BaMXleWj.cjs} +19 -4
- package/dist/chunks/LogContext-BaMXleWj.cjs.map +1 -0
- package/dist/chunks/{LogContext-Cwn-1Zzb.js → LogContext-DjlITOzZ.js} +19 -4
- 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-CIpd6wbO.cjs → StyleManager-DQ6UNRB-.cjs} +37 -11
- 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-PoT7RrTK.js → core-Blfi2klP.js} +1 -4
- package/dist/chunks/core-Blfi2klP.js.map +1 -0
- package/dist/chunks/{core-Dzz7agGa.cjs → core-CqS_UBzJ.cjs} +1 -4
- package/dist/chunks/core-CqS_UBzJ.cjs.map +1 -0
- package/dist/chunks/{environment-detector-CI3TrWK_.js → environment-detector-7NvnYUfr.js} +11 -11
- package/dist/chunks/environment-detector-7NvnYUfr.js.map +1 -0
- package/dist/chunks/{environment-detector-Cnn6wr6O.cjs → environment-detector-D-tHkKWA.cjs} +11 -11
- 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-DNvxbM9a.cjs → spinner-BHyYEXsM.cjs} +319 -37
- package/dist/chunks/spinner-BHyYEXsM.cjs.map +1 -0
- package/dist/chunks/{spinner-D3FsF78o.js → spinner-BtkwpzYv.js} +319 -37
- 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-BqlFYocD.cjs → utils-W_cxqriN.cjs} +44 -37
- package/dist/chunks/utils-W_cxqriN.cjs.map +1 -0
- package/dist/chunks/{utils-VETbVpkR.js → utils-tKfBAWUM.js} +44 -37
- 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 +49 -3
- 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 +29 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli.cjs +2 -2
- package/dist/cli.js +2 -2
- package/dist/context/LogContext.d.ts +165 -66
- package/dist/context/LogContext.d.ts.map +1 -1
- package/dist/context.cjs +1 -1
- package/dist/context.js +1 -1
- package/dist/core.cjs +52 -29
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.ts +50 -27
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +52 -29
- package/dist/core.js.map +1 -1
- package/dist/hooks/HookBridge.d.ts +15 -9
- package/dist/hooks/HookBridge.d.ts.map +1 -1
- package/dist/hooks/HookManager.d.ts +295 -2
- package/dist/hooks/HookManager.d.ts.map +1 -1
- package/dist/hooks.cjs +1 -1
- package/dist/hooks.js +1 -1
- package/dist/index.cjs +1092 -212
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +1092 -212
- package/dist/index.js.map +1 -1
- package/dist/playground/TerminalBridge.d.ts +23 -16
- package/dist/playground/TerminalBridge.d.ts.map +1 -1
- package/dist/playground/box.d.ts +36 -5
- package/dist/playground/box.d.ts.map +1 -1
- package/dist/playground/cli-table.d.ts +41 -5
- package/dist/playground/cli-table.d.ts.map +1 -1
- package/dist/playground/divider.d.ts +22 -3
- package/dist/playground/divider.d.ts.map +1 -1
- package/dist/playground/header.d.ts +21 -4
- package/dist/playground/header.d.ts.map +1 -1
- package/dist/playground/server-fallback.d.ts +96 -9
- package/dist/playground/server-fallback.d.ts.map +1 -1
- package/dist/playground/spinner.d.ts +159 -10
- package/dist/playground/spinner.d.ts.map +1 -1
- package/dist/playground/step.d.ts +25 -6
- package/dist/playground/step.d.ts.map +1 -1
- package/dist/playground.cjs +1 -1
- package/dist/playground.js +1 -1
- package/dist/serializers/SerializerBridge.d.ts +13 -6
- package/dist/serializers/SerializerBridge.d.ts.map +1 -1
- package/dist/serializers/SerializerRegistry.d.ts +236 -0
- package/dist/serializers/SerializerRegistry.d.ts.map +1 -1
- package/dist/serializers.cjs +1 -1
- package/dist/serializers.js +1 -1
- package/dist/styles/StyleManager.d.ts +138 -31
- package/dist/styles/StyleManager.d.ts.map +1 -1
- package/dist/styles.cjs +2 -2
- package/dist/styles.js +2 -2
- 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 +83 -7
- package/dist/styling/banners.d.ts.map +1 -1
- package/dist/styling/themes.d.ts +41 -2
- package/dist/styling/themes.d.ts.map +1 -1
- package/dist/transports/ConsoleTransport.d.ts +95 -0
- package/dist/transports/ConsoleTransport.d.ts.map +1 -1
- package/dist/transports/FileTransport.d.ts +99 -18
- package/dist/transports/FileTransport.d.ts.map +1 -1
- package/dist/transports/HttpTransport.d.ts +135 -22
- package/dist/transports/HttpTransport.d.ts.map +1 -1
- package/dist/transports/OtlpTransport.d.ts +53 -36
- package/dist/transports/OtlpTransport.d.ts.map +1 -1
- package/dist/transports/TransportBridge.d.ts +19 -13
- package/dist/transports/TransportBridge.d.ts.map +1 -1
- package/dist/transports/TransportManager.d.ts +223 -8
- package/dist/transports/TransportManager.d.ts.map +1 -1
- package/dist/transports.cjs +1 -1
- package/dist/transports.js +1 -1
- package/dist/types/core.d.ts +155 -59
- package/dist/types/core.d.ts.map +1 -1
- package/dist/types/hooks.d.ts +92 -14
- package/dist/types/hooks.d.ts.map +1 -1
- package/dist/types/serializers.d.ts +72 -0
- package/dist/types/serializers.d.ts.map +1 -1
- package/dist/types/transports.d.ts +42 -37
- package/dist/types/transports.d.ts.map +1 -1
- package/dist/utils/ansi-colors.d.ts +15 -15
- package/dist/utils/environment-detector.d.ts +11 -11
- package/dist/utils/formatting.d.ts +8 -8
- package/dist/utils/output.d.ts +9 -9
- package/dist/utils/output.d.ts.map +1 -1
- package/dist/utils/stackTrace.d.ts +2 -2
- package/package.json +24 -25
- package/dist/chunks/HookBridge-CiRfR67f.cjs +0 -190
- package/dist/chunks/HookBridge-CiRfR67f.cjs.map +0 -1
- package/dist/chunks/HookBridge-SgMmbXZB.js +0 -173
- package/dist/chunks/HookBridge-SgMmbXZB.js.map +0 -1
- package/dist/chunks/LogContext-Cwn-1Zzb.js.map +0 -1
- package/dist/chunks/LogContext-L7HzynFw.cjs.map +0 -1
- package/dist/chunks/SerializerBridge-BaOQOb8q.cjs +0 -166
- package/dist/chunks/SerializerBridge-BaOQOb8q.cjs.map +0 -1
- package/dist/chunks/SerializerBridge-BkpQu5c9.js +0 -149
- package/dist/chunks/SerializerBridge-BkpQu5c9.js.map +0 -1
- package/dist/chunks/StyleManager-CIpd6wbO.cjs.map +0 -1
- package/dist/chunks/StyleManager-LCvVlVdx.js +0 -87
- package/dist/chunks/StyleManager-LCvVlVdx.js.map +0 -1
- package/dist/chunks/core-Dzz7agGa.cjs.map +0 -1
- package/dist/chunks/core-PoT7RrTK.js.map +0 -1
- package/dist/chunks/environment-detector-CI3TrWK_.js.map +0 -1
- package/dist/chunks/environment-detector-Cnn6wr6O.cjs.map +0 -1
- package/dist/chunks/server-fallback-BUKjdLS7.cjs +0 -42
- package/dist/chunks/server-fallback-BUKjdLS7.cjs.map +0 -1
- package/dist/chunks/server-fallback-BsuWH1Dk.js +0 -37
- package/dist/chunks/server-fallback-BsuWH1Dk.js.map +0 -1
- package/dist/chunks/spinner-D3FsF78o.js.map +0 -1
- package/dist/chunks/spinner-DNvxbM9a.cjs.map +0 -1
- package/dist/chunks/styling-84N8T97t.js +0 -941
- package/dist/chunks/styling-84N8T97t.js.map +0 -1
- package/dist/chunks/styling-Cg5saQ46.cjs +0 -994
- package/dist/chunks/styling-Cg5saQ46.cjs.map +0 -1
- package/dist/chunks/transports-BiDk345e.js +0 -715
- package/dist/chunks/transports-BiDk345e.js.map +0 -1
- package/dist/chunks/transports-COPWmlF1.cjs +0 -756
- package/dist/chunks/transports-COPWmlF1.cjs.map +0 -1
- package/dist/chunks/utils-BqlFYocD.cjs.map +0 -1
- package/dist/chunks/utils-VETbVpkR.js.map +0 -1
- package/dist/example.d.ts +0 -18
- package/dist/example.d.ts.map +0 -1
- package/dist/main.d.ts +0 -2
- package/dist/main.d.ts.map +0 -1
package/dist/core.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.cjs","names":["DEFAULT_CONFIG","isBrowser","LOG_LEVELS","parseStackTrace","getConsoleMethod","createStyledOutput","LEVEL_STYLES","createPlainOutput","createLogEntry","formatTablePlain","isNode"],"sources":["../src/core.ts"],"sourcesContent":["/**\n * @fileoverview Core Logger Module - Minimal logging without advanced features\n * \n * This module provides the essential logging functionality without visual enhancements,\n * SVG support, or advanced styling. Perfect for lightweight applications or server-side usage.\n */\n\n// Core types\nimport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata,\n TimerEntry\n} from './types/index.js';\n\n// Core utilities\nimport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n// Universal formatting and environment detection\nimport {\n createPlainOutput,\n getConsoleMethod,\n createLogEntry,\n formatTablePlain,\n safeSerialize,\n type OutputFormat\n} from './utils/formatting.js';\n\nimport {\n isBrowser,\n isNode\n} from './utils/environment-detector.js';\n\nimport { createStyledOutput } from './utils/output.js';\n\n// Constants\nimport { DEFAULT_CONFIG, LEVEL_STYLES } from './constants.js';\nimport { LOG_LEVELS } from './types/core.js';\n\n/**\n * Minimal Logger class with core functionality only\n * \n * @example\n * ```typescript\n * import { CoreLogger } from '@mks2508/better-logger/core';\n * \n * const logger = new CoreLogger();\n * logger.info('Hello world');\n * logger.error('Something went wrong', error);\n * ```\n */\nexport class CoreLogger {\n private config: LoggerConfig;\n private scopedPrefix?: string;\n private handlers: ILogHandler[] = [];\n private timers: Map<string, TimerEntry> = new Map();\n private groupDepth: number = 0;\n\n /**\n * Creates a new CoreLogger instance\n * @param config - Optional configuration\n */\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n // Auto-configure based on environment\n enableColors: config.enableColors ?? (isBrowser ? true : false),\n enableTimestamps: config.enableTimestamps ?? true,\n enableStackTrace: config.enableStackTrace ?? false,\n autoDetectTheme: config.autoDetectTheme ?? true,\n outputFormat: config.outputFormat ?? 'auto'\n };\n }\n\n // ===== CONFIGURATION METHODS =====\n\n /**\n * Get current configuration\n */\n getConfig(): LoggerConfig {\n return { ...this.config };\n }\n\n /**\n * Sets the global prefix for all log messages\n */\n setGlobalPrefix(prefix: string): void {\n this.config.globalPrefix = prefix;\n }\n\n /**\n * Sets the verbosity level for filtering log output\n */\n setVerbosity(level: Verbosity): void {\n this.config.verbosity = level;\n }\n\n /**\n * Creates a scoped logger with a specific prefix\n */\n scope(prefix: string): CoreLogger {\n const scopedLogger = new CoreLogger(this.config);\n scopedLogger.scopedPrefix = prefix;\n scopedLogger.handlers = [...this.handlers];\n return scopedLogger;\n }\n\n /**\n * Adds a custom log handler for extensibility\n */\n addHandler(handler: ILogHandler): void {\n this.handlers.push(handler);\n }\n\n // ===== CORE LOGGING METHODS =====\n\n /**\n * Checks if a log level should be output based on current verbosity\n */\n private shouldLog(level: LogLevel): boolean {\n if (this.config.verbosity === 'silent') return false;\n const verbosity = this.config.verbosity as LogLevel;\n return LOG_LEVELS[level] >= LOG_LEVELS[verbosity];\n }\n\n /**\n * Gets the effective prefix (global + scoped)\n */\n private getEffectivePrefix(): string | undefined {\n const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);\n return parts.length > 0 ? parts.join(':') : undefined;\n }\n\n /**\n * Core logging method with universal formatting\n */\n private log(level: LogLevel, ...args: unknown[]): void {\n if (!this.shouldLog(level)) return;\n\n const prefix = this.getEffectivePrefix();\n const message = String(args[0] || '');\n const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;\n const consoleMethod = getConsoleMethod(level);\n\n // Choose formatting based on environment and configuration\n if (isBrowser && this.config.enableColors) {\n // Browser with CSS styling\n try {\n const [format, ...styles] = createStyledOutput(\n level,\n LEVEL_STYLES,\n prefix,\n message,\n stackInfo,\n this.config.autoDetectTheme\n );\n console[consoleMethod](format, ...styles, ...args.slice(1));\n } catch (error) {\n // Fallback to plain formatting if CSS fails\n const output = createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n } else {\n // Node.js or browser without colors - use plain formatting\n const groupIndent = ' '.repeat(this.groupDepth);\n const output = groupIndent + createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n\n // Call custom handlers with structured metadata\n const logEntry = createLogEntry(level, message, args, prefix, stackInfo);\n const metadata: LogMetadata = {\n timestamp: logEntry.timestamp,\n level,\n prefix,\n stackInfo: logEntry.location,\n };\n\n this.handlers.forEach(handler => {\n try {\n handler.handle(level, message, args, metadata);\n } catch (error) {\n console.error('Log handler failed:', error);\n }\n });\n }\n\n /**\n * Logs debug information (lowest priority)\n */\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n /**\n * Logs informational messages\n */\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n /**\n * Logs warning messages\n */\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n /**\n * Logs error messages\n */\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n /**\n * Logs critical errors (highest priority)\n */\n critical(...args: unknown[]): void {\n this.log('critical', ...args);\n }\n\n /**\n * Logs trace information (detailed debugging)\n */\n trace(...args: unknown[]): void {\n this.log('debug', ...args);\n if (this.shouldLog('debug')) {\n console.trace(...args);\n }\n }\n\n // ===== BASIC ADVANCED FEATURES =====\n\n /**\n * Displays data in a table format\n */\n table(data: any, columns?: string[]): void {\n if (!this.shouldLog('info')) return;\n\n const prefix = this.getEffectivePrefix();\n const tableHeader = `[TABLE]${prefix ? ` [${prefix}]` : ''}:`;\n \n if (isBrowser && typeof console.table === 'function') {\n // Browser has native table support\n console.log(tableHeader);\n if (columns) {\n console.table(data, columns);\n } else {\n console.table(data);\n }\n } else {\n // Node.js or fallback - use plain text formatting\n console.log(tableHeader);\n const tableText = formatTablePlain(data, columns);\n console.log(tableText);\n }\n }\n\n /**\n * Starts a collapsible group in the console\n */\n group(label: string, collapsed: boolean = false): void {\n const prefix = this.getEffectivePrefix();\n const fullLabel = `${prefix ? `[${prefix}] ` : ''}${label}`;\n \n if (isBrowser && console.group && console.groupCollapsed) {\n // Browser supports native grouping\n if (collapsed) {\n console.groupCollapsed(fullLabel);\n } else {\n console.group(fullLabel);\n }\n } else {\n // Node.js fallback - just log the group label\n const groupStart = '┌─ ' + fullLabel;\n console.log(groupStart);\n }\n \n this.groupDepth++;\n }\n\n /**\n * Ends the current console group\n */\n groupEnd(): void {\n if (this.groupDepth > 0) {\n if (isBrowser && console.groupEnd) {\n console.groupEnd();\n } else {\n // Node.js fallback - log group end\n const groupEnd = '└─ (end group)';\n console.log(groupEnd);\n }\n this.groupDepth--;\n }\n }\n\n /**\n * Starts a timer with the given label\n */\n time(label: string): void {\n const startTime = this.getPerformanceNow();\n const timer: TimerEntry = {\n label,\n startTime,\n };\n this.timers.set(label, timer);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer started: ${label}`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Ends a timer and logs the elapsed time\n */\n timeEnd(label: string): void {\n const timer = this.timers.get(label);\n if (!timer) {\n this.warn(`Timer '${label}' does not exist`);\n return;\n }\n\n const elapsed = this.getPerformanceNow() - timer.startTime;\n this.timers.delete(label);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer ended: ${label} - ${elapsed.toFixed(2)}ms`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Gets performance.now() or fallback for older environments\n */\n private getPerformanceNow(): number {\n if (typeof performance !== 'undefined' && performance.now) {\n return performance.now();\n }\n \n if (isNode && process.hrtime) {\n // Node.js high-resolution time\n const [seconds, nanoseconds] = process.hrtime();\n return seconds * 1000 + nanoseconds / 1000000;\n }\n \n // Fallback to Date.now()\n return Date.now();\n }\n}\n\n// Create and export singleton instance for convenience\nconst coreLogger = new CoreLogger();\n\n/**\n * Export individual methods for convenience (with proper binding)\n */\nexport const debug = (...args: any[]) => coreLogger.debug(...args);\nexport const info = (...args: any[]) => coreLogger.info(...args);\nexport const warn = (...args: any[]) => coreLogger.warn(...args);\nexport const error = (...args: any[]) => coreLogger.error(...args);\nexport const critical = (...args: any[]) => coreLogger.critical(...args);\nexport const trace = (...args: any[]) => coreLogger.trace(...args);\nexport const table = (data: any, columns?: string[]) => coreLogger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => coreLogger.group(label, collapsed);\nexport const groupEnd = () => coreLogger.groupEnd();\nexport const time = (label: string) => coreLogger.time(label);\nexport const timeEnd = (label: string) => coreLogger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => coreLogger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => coreLogger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => coreLogger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => coreLogger.addHandler(handler);\n\n// Export the singleton as default\nexport default coreLogger;\n\n// Re-export core types\nexport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata\n} from './types/index.js';"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwDA,IAAa,aAAb,MAAa,WAAW;CACpB;CACA;CACA,WAAkC,CAAC;CACnC,yBAA0C,IAAI,IAAI;CAClD,aAA6B;;;;;CAM7B,YAAY,SAAgC,CAAC,GAAG;EAC5C,KAAK,SAAS;GACV,GAAGA,cAAAA;GACH,GAAG;GAEH,cAAc,OAAO,iBAAiBC,6BAAAA,YAAY,OAAO;GACzD,kBAAkB,OAAO,oBAAoB;GAC7C,kBAAkB,OAAO,oBAAoB;GAC7C,iBAAiB,OAAO,mBAAmB;GAC3C,cAAc,OAAO,gBAAgB;EACzC;CACJ;;;;CAOA,YAA0B;EACtB,OAAO,EAAE,GAAG,KAAK,OAAO;CAC5B;;;;CAKA,gBAAgB,QAAsB;EAClC,KAAK,OAAO,eAAe;CAC/B;;;;CAKA,aAAa,OAAwB;EACjC,KAAK,OAAO,YAAY;CAC5B;;;;CAKA,MAAM,QAA4B;EAC9B,MAAM,eAAe,IAAI,WAAW,KAAK,MAAM;EAC/C,aAAa,eAAe;EAC5B,aAAa,WAAW,CAAC,GAAG,KAAK,QAAQ;EACzC,OAAO;CACX;;;;CAKA,WAAW,SAA4B;EACnC,KAAK,SAAS,KAAK,OAAO;CAC9B;;;;CAOA,UAAkB,OAA0B;EACxC,IAAI,KAAK,OAAO,cAAc,UAAU,OAAO;EAC/C,MAAM,YAAY,KAAK,OAAO;EAC9B,OAAOC,aAAAA,WAAW,UAAUA,aAAAA,WAAW;CAC3C;;;;CAKA,qBAAiD;EAC7C,MAAM,QAAQ,CAAC,KAAK,OAAO,cAAc,KAAK,YAAY,CAAC,CAAC,OAAO,OAAO;EAC1E,OAAO,MAAM,SAAS,IAAI,MAAM,KAAK,GAAG,IAAI,KAAA;CAChD;;;;CAKA,IAAY,OAAiB,GAAG,MAAuB;EACnD,IAAI,CAAC,KAAK,UAAU,KAAK,GAAG;EAE5B,MAAM,SAAS,KAAK,mBAAmB;EACvC,MAAM,UAAU,OAAO,KAAK,MAAM,EAAE;EACpC,MAAM,YAAY,KAAK,OAAO,mBAAmBC,cAAAA,gBAAgB,IAAI;EACrE,MAAM,gBAAgBC,cAAAA,iBAAiB,KAAK;EAG5C,IAAIH,6BAAAA,aAAa,KAAK,OAAO,cAEzB,IAAI;GACA,MAAM,CAAC,QAAQ,GAAG,UAAUI,cAAAA,mBACxB,OACAC,cAAAA,cACA,QACA,SACA,WACA,KAAK,OAAO,eAChB;GACA,QAAQ,cAAc,CAAC,QAAQ,GAAG,QAAQ,GAAG,KAAK,MAAM,CAAC,CAAC;EAC9D,SAAS,OAAO;GAEZ,MAAM,SAASC,cAAAA,kBAAkB,OAAO,SAAS,QAAQ,SAAS;GAClE,QAAQ,cAAc,CAAC,QAAQ,GAAG,KAAK,MAAM,CAAC,CAAC;EACnD;OACG;GAGH,MAAM,SADc,KAAK,OAAO,KAAK,UACZ,IAAIA,cAAAA,kBAAkB,OAAO,SAAS,QAAQ,SAAS;GAChF,QAAQ,cAAc,CAAC,QAAQ,GAAG,KAAK,MAAM,CAAC,CAAC;EACnD;EAGA,MAAM,WAAWC,cAAAA,eAAe,OAAO,SAAS,MAAM,QAAQ,SAAS;EACvE,MAAM,WAAwB;GAC1B,WAAW,SAAS;GACpB;GACA;GACA,WAAW,SAAS;EACxB;EAEA,KAAK,SAAS,SAAQ,YAAW;GAC7B,IAAI;IACA,QAAQ,OAAO,OAAO,SAAS,MAAM,QAAQ;GACjD,SAAS,OAAO;IACZ,QAAQ,MAAM,uBAAuB,KAAK;GAC9C;EACJ,CAAC;CACL;;;;CAKA,MAAM,GAAG,MAAuB;EAC5B,KAAK,IAAI,SAAS,GAAG,IAAI;CAC7B;;;;CAKA,KAAK,GAAG,MAAuB;EAC3B,KAAK,IAAI,QAAQ,GAAG,IAAI;CAC5B;;;;CAKA,KAAK,GAAG,MAAuB;EAC3B,KAAK,IAAI,QAAQ,GAAG,IAAI;CAC5B;;;;CAKA,MAAM,GAAG,MAAuB;EAC5B,KAAK,IAAI,SAAS,GAAG,IAAI;CAC7B;;;;CAKA,SAAS,GAAG,MAAuB;EAC/B,KAAK,IAAI,YAAY,GAAG,IAAI;CAChC;;;;CAKA,MAAM,GAAG,MAAuB;EAC5B,KAAK,IAAI,SAAS,GAAG,IAAI;EACzB,IAAI,KAAK,UAAU,OAAO,GACtB,QAAQ,MAAM,GAAG,IAAI;CAE7B;;;;CAOA,MAAM,MAAW,SAA0B;EACvC,IAAI,CAAC,KAAK,UAAU,MAAM,GAAG;EAE7B,MAAM,SAAS,KAAK,mBAAmB;EACvC,MAAM,cAAc,UAAU,SAAS,KAAK,OAAO,KAAK,GAAG;EAE3D,IAAIP,6BAAAA,aAAa,OAAO,QAAQ,UAAU,YAAY;GAElD,QAAQ,IAAI,WAAW;GACvB,IAAI,SACA,QAAQ,MAAM,MAAM,OAAO;QAE3B,QAAQ,MAAM,IAAI;EAE1B,OAAO;GAEH,QAAQ,IAAI,WAAW;GACvB,MAAM,YAAYQ,cAAAA,iBAAiB,MAAM,OAAO;GAChD,QAAQ,IAAI,SAAS;EACzB;CACJ;;;;CAKA,MAAM,OAAe,YAAqB,OAAa;EACnD,MAAM,SAAS,KAAK,mBAAmB;EACvC,MAAM,YAAY,GAAG,SAAS,IAAI,OAAO,MAAM,KAAK;EAEpD,IAAIR,6BAAAA,aAAa,QAAQ,SAAS,QAAQ,gBAEtC,IAAI,WACA,QAAQ,eAAe,SAAS;OAEhC,QAAQ,MAAM,SAAS;OAExB;GAEH,MAAM,aAAa,QAAQ;GAC3B,QAAQ,IAAI,UAAU;EAC1B;EAEA,KAAK;CACT;;;;CAKA,WAAiB;EACb,IAAI,KAAK,aAAa,GAAG;GACrB,IAAIA,6BAAAA,aAAa,QAAQ,UACrB,QAAQ,SAAS;QAIjB,QAAQ,IAAI,gBAAQ;GAExB,KAAK;EACT;CACJ;;;;CAKA,KAAK,OAAqB;EAEtB,MAAM,QAAoB;GACtB;GACA,WAHc,KAAK,kBAGX;EACZ;EACA,KAAK,OAAO,IAAI,OAAO,KAAK;EAE5B,MAAM,SAAS,KAAK,mBAAmB;EAEvC,MAAM,SAASM,cAAAA,kBAAkB,QAAQ,kBADP,SACgB,MAAM;EACxD,QAAQ,IAAI,MAAM;CACtB;;;;CAKA,QAAQ,OAAqB;EACzB,MAAM,QAAQ,KAAK,OAAO,IAAI,KAAK;EACnC,IAAI,CAAC,OAAO;GACR,KAAK,KAAK,UAAU,MAAM,iBAAiB;GAC3C;EACJ;EAEA,MAAM,UAAU,KAAK,kBAAkB,IAAI,MAAM;EACjD,KAAK,OAAO,OAAO,KAAK;EAExB,MAAM,SAAS,KAAK,mBAAmB;EAEvC,MAAM,SAASA,cAAAA,kBAAkB,QAAQ,gBADT,MAAM,KAAK,QAAQ,QAAQ,CAAC,EAAE,KACZ,MAAM;EACxD,QAAQ,IAAI,MAAM;CACtB;;;;CAKA,oBAAoC;EAChC,IAAI,OAAO,gBAAgB,eAAe,YAAY,KAClD,OAAO,YAAY,IAAI;EAG3B,IAAIG,6BAAAA,UAAU,QAAQ,QAAQ;GAE1B,MAAM,CAAC,SAAS,eAAe,QAAQ,OAAO;GAC9C,OAAO,UAAU,MAAO,cAAc;EAC1C;EAGA,OAAO,KAAK,IAAI;CACpB;AACJ;AAGA,MAAM,aAAa,IAAI,WAAW;;;;AAKlC,MAAa,SAAS,GAAG,SAAgB,WAAW,MAAM,GAAG,IAAI;AACjE,MAAa,QAAQ,GAAG,SAAgB,WAAW,KAAK,GAAG,IAAI;AAC/D,MAAa,QAAQ,GAAG,SAAgB,WAAW,KAAK,GAAG,IAAI;AAC/D,MAAa,SAAS,GAAG,SAAgB,WAAW,MAAM,GAAG,IAAI;AACjE,MAAa,YAAY,GAAG,SAAgB,WAAW,SAAS,GAAG,IAAI;AACvE,MAAa,SAAS,GAAG,SAAgB,WAAW,MAAM,GAAG,IAAI;AACjE,MAAa,SAAS,MAAW,YAAuB,WAAW,MAAM,MAAM,OAAO;AACtF,MAAa,SAAS,OAAe,cAAwB,WAAW,MAAM,OAAO,SAAS;AAC9F,MAAa,iBAAiB,WAAW,SAAS;AAClD,MAAa,QAAQ,UAAkB,WAAW,KAAK,KAAK;AAC5D,MAAa,WAAW,UAAkB,WAAW,QAAQ,KAAK;AAClE,MAAa,mBAAmB,WAAmB,WAAW,gBAAgB,MAAM;AACpF,MAAa,SAAS,WAAmB,WAAW,MAAM,MAAM;AAChE,MAAa,gBAAgB,UAAqB,WAAW,aAAa,KAAK;AAC/E,MAAa,cAAc,YAAyB,WAAW,WAAW,OAAO"}
|
|
1
|
+
{"version":3,"file":"core.cjs","names":["DEFAULT_CONFIG","isBrowser","LOG_LEVELS","parseStackTrace","getConsoleMethod","createStyledOutput","LEVEL_STYLES","createPlainOutput","createLogEntry","formatTablePlain","isNode"],"sources":["../src/core.ts"],"sourcesContent":["/**\n * @fileoverview Módulo Core Logger — logging minimal sin features avanzadas\n *\n * Provee la funcionalidad esencial de logging sin mejoras visuales,\n * soporte SVG ni styling avanzado. Adecuado para apps ligeras o uso server-side.\n */\n\n// Tipos core\nimport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata,\n TimerEntry\n} from './types/index.js';\n\n// Utilidades core\nimport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n// Formato universal y detección de entorno\nimport {\n createPlainOutput,\n getConsoleMethod,\n createLogEntry,\n formatTablePlain,\n safeSerialize,\n type OutputFormat\n} from './utils/formatting.js';\n\nimport {\n isBrowser,\n isNode\n} from './utils/environment-detector.js';\n\nimport { createStyledOutput } from './utils/output.js';\n\n// Constantes\nimport { DEFAULT_CONFIG, LEVEL_STYLES } from './constants.js';\nimport { LOG_LEVELS } from './types/core.js';\n\n/**\n * Logger minimal con solo la funcionalidad core.\n *\n * @example\n * ```typescript\n * import { CoreLogger } from '@mks2508/better-logger/core';\n *\n * const logger = new CoreLogger();\n * logger.info('Hello world');\n * logger.error('Something went wrong', error);\n * ```\n */\nexport class CoreLogger {\n private config: LoggerConfig;\n private scopedPrefix?: string;\n private handlers: ILogHandler[] = [];\n private timers: Map<string, TimerEntry> = new Map();\n private groupDepth: number = 0;\n\n /**\n * Crea una nueva instancia de CoreLogger.\n * @param config - Configuración opcional.\n */\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n // Auto-configurar según entorno\n enableColors: config.enableColors ?? (isBrowser ? true : false),\n enableTimestamps: config.enableTimestamps ?? true,\n enableStackTrace: config.enableStackTrace ?? false,\n autoDetectTheme: config.autoDetectTheme ?? true,\n outputFormat: config.outputFormat ?? 'auto'\n };\n }\n\n // ===== MÉTODOS DE CONFIGURACIÓN =====\n\n /**\n * Obtiene la configuración actual.\n */\n getConfig(): LoggerConfig {\n return { ...this.config };\n }\n\n /**\n * Define el prefijo global para todos los mensajes de log.\n * @param prefix - Prefijo a aplicar a todos los mensajes.\n */\n setGlobalPrefix(prefix: string): void {\n this.config.globalPrefix = prefix;\n }\n\n /**\n * Define el nivel de verbosity para filtrar la salida de log.\n * @param level - Nivel de verbosity.\n */\n setVerbosity(level: Verbosity): void {\n this.config.verbosity = level;\n }\n\n /**\n * Crea un logger con scope y un prefijo específico.\n * @param prefix - Prefijo del scope.\n * @returns Nueva instancia de CoreLogger con el prefijo asignado.\n */\n scope(prefix: string): CoreLogger {\n const scopedLogger = new CoreLogger(this.config);\n scopedLogger.scopedPrefix = prefix;\n scopedLogger.handlers = [...this.handlers];\n return scopedLogger;\n }\n\n /**\n * Añade un handler personalizado para extensibilidad.\n * @param handler - Handler que implementa la interfaz ILogHandler.\n */\n addHandler(handler: ILogHandler): void {\n this.handlers.push(handler);\n }\n\n // ===== MÉTODOS CORE DE LOGGING =====\n\n /**\n * Comprueba si un nivel debe emitirse según el verbosity actual.\n * @param level - Nivel a evaluar.\n * @returns `true` si el nivel debe emitirse.\n */\n private shouldLog(level: LogLevel): boolean {\n if (this.config.verbosity === 'silent') return false;\n const verbosity = this.config.verbosity as LogLevel;\n return LOG_LEVELS[level] >= LOG_LEVELS[verbosity];\n }\n\n /**\n * Obtiene el prefijo efectivo (global + scope).\n * @returns Prefijo combinado o `undefined` si no hay ninguno.\n */\n private getEffectivePrefix(): string | undefined {\n const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);\n return parts.length > 0 ? parts.join(':') : undefined;\n }\n\n /**\n * Método principal de log con formato universal.\n * @param level - Nivel del mensaje.\n * @param args - Argumentos del mensaje.\n */\n private log(level: LogLevel, ...args: unknown[]): void {\n if (!this.shouldLog(level)) return;\n\n const prefix = this.getEffectivePrefix();\n const message = String(args[0] || '');\n const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;\n const consoleMethod = getConsoleMethod(level);\n\n // Elegir formato según entorno y configuración\n if (isBrowser && this.config.enableColors) {\n // Browser con styling CSS\n try {\n const [format, ...styles] = createStyledOutput(\n level,\n LEVEL_STYLES,\n prefix,\n message,\n stackInfo,\n this.config.autoDetectTheme\n );\n console[consoleMethod](format, ...styles, ...args.slice(1));\n } catch (error) {\n // Fallback a formato plano si falla el CSS\n const output = createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n } else {\n // Node.js o browser sin colores: formato plano\n const groupIndent = ' '.repeat(this.groupDepth);\n const output = groupIndent + createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n\n // Llama a los handlers con metadata estructurada\n const logEntry = createLogEntry(level, message, args, prefix, stackInfo);\n const metadata: LogMetadata = {\n timestamp: logEntry.timestamp,\n level,\n prefix,\n stackInfo: logEntry.location,\n };\n\n this.handlers.forEach(handler => {\n try {\n handler.handle(level, message, args, metadata);\n } catch (error) {\n console.error('Log handler failed:', error);\n }\n });\n }\n\n /**\n * Emite mensajes de debug (prioridad más baja).\n * @param args - Argumentos del mensaje.\n */\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n /**\n * Emite mensajes informativos.\n * @param args - Argumentos del mensaje.\n */\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n /**\n * Emite mensajes de advertencia.\n * @param args - Argumentos del mensaje.\n */\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n /**\n * Emite mensajes de error.\n * @param args - Argumentos del mensaje.\n */\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n /**\n * Emite errores críticos (prioridad más alta).\n * @param args - Argumentos del mensaje.\n */\n critical(...args: unknown[]): void {\n this.log('critical', ...args);\n }\n\n /**\n * Emite información de trace (debugging detallado).\n * @param args - Argumentos del mensaje.\n */\n trace(...args: unknown[]): void {\n this.log('debug', ...args);\n if (this.shouldLog('debug')) {\n console.trace(...args);\n }\n }\n\n // ===== FEATURES AVANZADAS BÁSICAS =====\n\n /**\n * Muestra datos en formato tabla.\n * @param data - Datos a mostrar.\n * @param columns - Columnas opcionales a incluir.\n */\n table(data: any, columns?: string[]): void {\n if (!this.shouldLog('info')) return;\n\n const prefix = this.getEffectivePrefix();\n const tableHeader = `[TABLE]${prefix ? ` [${prefix}]` : ''}:`;\n \n if (isBrowser && typeof console.table === 'function') {\n // Browser con soporte nativo de table\n console.log(tableHeader);\n if (columns) {\n console.table(data, columns);\n } else {\n console.table(data);\n }\n } else {\n // Node.js o fallback: formato de texto plano\n console.log(tableHeader);\n const tableText = formatTablePlain(data, columns);\n console.log(tableText);\n }\n }\n\n /**\n * Inicia un grupo colapsable en la console.\n * @param label - Etiqueta del grupo.\n * @param collapsed - Si el grupo inicia colapsado.\n */\n group(label: string, collapsed: boolean = false): void {\n const prefix = this.getEffectivePrefix();\n const fullLabel = `${prefix ? `[${prefix}] ` : ''}${label}`;\n \n if (isBrowser && console.group && console.groupCollapsed) {\n // Browser soporta grouping nativo\n if (collapsed) {\n console.groupCollapsed(fullLabel);\n } else {\n console.group(fullLabel);\n }\n } else {\n // Fallback Node.js: solo emite el label del grupo\n const groupStart = '┌─ ' + fullLabel;\n console.log(groupStart);\n }\n \n this.groupDepth++;\n }\n\n /**\n * Cierra el grupo actual de la console.\n */\n groupEnd(): void {\n if (this.groupDepth > 0) {\n if (isBrowser && console.groupEnd) {\n console.groupEnd();\n } else {\n // Fallback Node.js: emite el cierre del grupo\n const groupEnd = '└─ (end group)';\n console.log(groupEnd);\n }\n this.groupDepth--;\n }\n }\n\n /**\n * Inicia un timer con el label indicado.\n * @param label - Identificador del timer.\n */\n time(label: string): void {\n const startTime = this.getPerformanceNow();\n const timer: TimerEntry = {\n label,\n startTime,\n };\n this.timers.set(label, timer);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer started: ${label}`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Detiene un timer y emite el tiempo transcurrido.\n * @param label - Identificador del timer previamente iniciado.\n */\n timeEnd(label: string): void {\n const timer = this.timers.get(label);\n if (!timer) {\n this.warn(`Timer '${label}' does not exist`);\n return;\n }\n\n const elapsed = this.getPerformanceNow() - timer.startTime;\n this.timers.delete(label);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer ended: ${label} - ${elapsed.toFixed(2)}ms`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Obtiene `performance.now()` o un fallback para entornos antiguos.\n * @returns Timestamp en milisegundos.\n */\n private getPerformanceNow(): number {\n if (typeof performance !== 'undefined' && performance.now) {\n return performance.now();\n }\n \n if (isNode && process.hrtime) {\n // Node.js high-resolution time\n const [seconds, nanoseconds] = process.hrtime();\n return seconds * 1000 + nanoseconds / 1000000;\n }\n \n // Fallback a Date.now()\n return Date.now();\n }\n}\n\n// Crea y exporta una instancia singleton por conveniencia\nconst coreLogger = new CoreLogger();\n\n/**\n * Exporta métodos individuales por conveniencia (con binding correcto).\n */\nexport const debug = (...args: any[]) => coreLogger.debug(...args);\nexport const info = (...args: any[]) => coreLogger.info(...args);\nexport const warn = (...args: any[]) => coreLogger.warn(...args);\nexport const error = (...args: any[]) => coreLogger.error(...args);\nexport const critical = (...args: any[]) => coreLogger.critical(...args);\nexport const trace = (...args: any[]) => coreLogger.trace(...args);\nexport const table = (data: any, columns?: string[]) => coreLogger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => coreLogger.group(label, collapsed);\nexport const groupEnd = () => coreLogger.groupEnd();\nexport const time = (label: string) => coreLogger.time(label);\nexport const timeEnd = (label: string) => coreLogger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => coreLogger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => coreLogger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => coreLogger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => coreLogger.addHandler(handler);\n\n// Exporta el singleton como default\nexport default coreLogger;\n\n// Re-exporta tipos core\nexport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata\n} from './types/index.js';"],"mappings":"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"}
|
package/dist/core.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview Core Logger
|
|
2
|
+
* @fileoverview Módulo Core Logger — logging minimal sin features avanzadas
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* SVG
|
|
4
|
+
* Provee la funcionalidad esencial de logging sin mejoras visuales,
|
|
5
|
+
* soporte SVG ni styling avanzado. Adecuado para apps ligeras o uso server-side.
|
|
6
6
|
*/
|
|
7
7
|
import type { Verbosity, LoggerConfig, ILogHandler } from './types/index.js';
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* Logger minimal con solo la funcionalidad core.
|
|
10
10
|
*
|
|
11
11
|
* @example
|
|
12
12
|
* ```typescript
|
|
@@ -24,94 +24,117 @@ export declare class CoreLogger {
|
|
|
24
24
|
private timers;
|
|
25
25
|
private groupDepth;
|
|
26
26
|
/**
|
|
27
|
-
*
|
|
28
|
-
* @param config -
|
|
27
|
+
* Crea una nueva instancia de CoreLogger.
|
|
28
|
+
* @param config - Configuración opcional.
|
|
29
29
|
*/
|
|
30
30
|
constructor(config?: Partial<LoggerConfig>);
|
|
31
31
|
/**
|
|
32
|
-
*
|
|
32
|
+
* Obtiene la configuración actual.
|
|
33
33
|
*/
|
|
34
34
|
getConfig(): LoggerConfig;
|
|
35
35
|
/**
|
|
36
|
-
*
|
|
36
|
+
* Define el prefijo global para todos los mensajes de log.
|
|
37
|
+
* @param prefix - Prefijo a aplicar a todos los mensajes.
|
|
37
38
|
*/
|
|
38
39
|
setGlobalPrefix(prefix: string): void;
|
|
39
40
|
/**
|
|
40
|
-
*
|
|
41
|
+
* Define el nivel de verbosity para filtrar la salida de log.
|
|
42
|
+
* @param level - Nivel de verbosity.
|
|
41
43
|
*/
|
|
42
44
|
setVerbosity(level: Verbosity): void;
|
|
43
45
|
/**
|
|
44
|
-
*
|
|
46
|
+
* Crea un logger con scope y un prefijo específico.
|
|
47
|
+
* @param prefix - Prefijo del scope.
|
|
48
|
+
* @returns Nueva instancia de CoreLogger con el prefijo asignado.
|
|
45
49
|
*/
|
|
46
50
|
scope(prefix: string): CoreLogger;
|
|
47
51
|
/**
|
|
48
|
-
*
|
|
52
|
+
* Añade un handler personalizado para extensibilidad.
|
|
53
|
+
* @param handler - Handler que implementa la interfaz ILogHandler.
|
|
49
54
|
*/
|
|
50
55
|
addHandler(handler: ILogHandler): void;
|
|
51
56
|
/**
|
|
52
|
-
*
|
|
57
|
+
* Comprueba si un nivel debe emitirse según el verbosity actual.
|
|
58
|
+
* @param level - Nivel a evaluar.
|
|
59
|
+
* @returns `true` si el nivel debe emitirse.
|
|
53
60
|
*/
|
|
54
61
|
private shouldLog;
|
|
55
62
|
/**
|
|
56
|
-
*
|
|
63
|
+
* Obtiene el prefijo efectivo (global + scope).
|
|
64
|
+
* @returns Prefijo combinado o `undefined` si no hay ninguno.
|
|
57
65
|
*/
|
|
58
66
|
private getEffectivePrefix;
|
|
59
67
|
/**
|
|
60
|
-
*
|
|
68
|
+
* Método principal de log con formato universal.
|
|
69
|
+
* @param level - Nivel del mensaje.
|
|
70
|
+
* @param args - Argumentos del mensaje.
|
|
61
71
|
*/
|
|
62
72
|
private log;
|
|
63
73
|
/**
|
|
64
|
-
*
|
|
74
|
+
* Emite mensajes de debug (prioridad más baja).
|
|
75
|
+
* @param args - Argumentos del mensaje.
|
|
65
76
|
*/
|
|
66
77
|
debug(...args: unknown[]): void;
|
|
67
78
|
/**
|
|
68
|
-
*
|
|
79
|
+
* Emite mensajes informativos.
|
|
80
|
+
* @param args - Argumentos del mensaje.
|
|
69
81
|
*/
|
|
70
82
|
info(...args: unknown[]): void;
|
|
71
83
|
/**
|
|
72
|
-
*
|
|
84
|
+
* Emite mensajes de advertencia.
|
|
85
|
+
* @param args - Argumentos del mensaje.
|
|
73
86
|
*/
|
|
74
87
|
warn(...args: unknown[]): void;
|
|
75
88
|
/**
|
|
76
|
-
*
|
|
89
|
+
* Emite mensajes de error.
|
|
90
|
+
* @param args - Argumentos del mensaje.
|
|
77
91
|
*/
|
|
78
92
|
error(...args: unknown[]): void;
|
|
79
93
|
/**
|
|
80
|
-
*
|
|
94
|
+
* Emite errores críticos (prioridad más alta).
|
|
95
|
+
* @param args - Argumentos del mensaje.
|
|
81
96
|
*/
|
|
82
97
|
critical(...args: unknown[]): void;
|
|
83
98
|
/**
|
|
84
|
-
*
|
|
99
|
+
* Emite información de trace (debugging detallado).
|
|
100
|
+
* @param args - Argumentos del mensaje.
|
|
85
101
|
*/
|
|
86
102
|
trace(...args: unknown[]): void;
|
|
87
103
|
/**
|
|
88
|
-
*
|
|
104
|
+
* Muestra datos en formato tabla.
|
|
105
|
+
* @param data - Datos a mostrar.
|
|
106
|
+
* @param columns - Columnas opcionales a incluir.
|
|
89
107
|
*/
|
|
90
108
|
table(data: any, columns?: string[]): void;
|
|
91
109
|
/**
|
|
92
|
-
*
|
|
110
|
+
* Inicia un grupo colapsable en la console.
|
|
111
|
+
* @param label - Etiqueta del grupo.
|
|
112
|
+
* @param collapsed - Si el grupo inicia colapsado.
|
|
93
113
|
*/
|
|
94
114
|
group(label: string, collapsed?: boolean): void;
|
|
95
115
|
/**
|
|
96
|
-
*
|
|
116
|
+
* Cierra el grupo actual de la console.
|
|
97
117
|
*/
|
|
98
118
|
groupEnd(): void;
|
|
99
119
|
/**
|
|
100
|
-
*
|
|
120
|
+
* Inicia un timer con el label indicado.
|
|
121
|
+
* @param label - Identificador del timer.
|
|
101
122
|
*/
|
|
102
123
|
time(label: string): void;
|
|
103
124
|
/**
|
|
104
|
-
*
|
|
125
|
+
* Detiene un timer y emite el tiempo transcurrido.
|
|
126
|
+
* @param label - Identificador del timer previamente iniciado.
|
|
105
127
|
*/
|
|
106
128
|
timeEnd(label: string): void;
|
|
107
129
|
/**
|
|
108
|
-
*
|
|
130
|
+
* Obtiene `performance.now()` o un fallback para entornos antiguos.
|
|
131
|
+
* @returns Timestamp en milisegundos.
|
|
109
132
|
*/
|
|
110
133
|
private getPerformanceNow;
|
|
111
134
|
}
|
|
112
135
|
declare const coreLogger: CoreLogger;
|
|
113
136
|
/**
|
|
114
|
-
*
|
|
137
|
+
* Exporta métodos individuales por conveniencia (con binding correcto).
|
|
115
138
|
*/
|
|
116
139
|
export declare const debug: (...args: any[]) => void;
|
|
117
140
|
export declare const info: (...args: any[]) => void;
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAER,SAAS,EACT,YAAY,EACZ,WAAW,EAGd,MAAM,kBAAkB,CAAC;AA6B1B;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,UAAU,CAAa;IAE/B;;;OAGG;gBACS,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAe9C;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAER,SAAS,EACT,YAAY,EACZ,WAAW,EAGd,MAAM,kBAAkB,CAAC;AA6B1B;;;;;;;;;;;GAWG;AACH,qBAAa,UAAU;IACnB,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,YAAY,CAAC,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,UAAU,CAAa;IAE/B;;;OAGG;gBACS,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IAe9C;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;;OAGG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIrC;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAIpC;;;;OAIG;IACH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU;IAOjC;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAMtC;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAMjB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;;;OAIG;IACH,OAAO,CAAC,GAAG;IAmDX;;;OAGG;IACH,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B;;;OAGG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B;;;OAGG;IACH,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI9B;;;OAGG;IACH,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/B;;;OAGG;IACH,QAAQ,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIlC;;;OAGG;IACH,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAS/B;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI;IAsB1C;;;;OAIG;IACH,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,GAAE,OAAe,GAAG,IAAI;IAoBtD;;OAEG;IACH,QAAQ,IAAI,IAAI;IAahB;;;OAGG;IACH,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAczB;;;OAGG;IACH,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAgB5B;;;OAGG;IACH,OAAO,CAAC,iBAAiB;CAc5B;AAGD,QAAA,MAAM,UAAU,YAAmB,CAAC;AAEpC;;GAEG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,GAAG,EAAE,SAA8B,CAAC;AACnE,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,GAAG,EAAE,SAA6B,CAAC;AACjE,eAAO,MAAM,IAAI,GAAI,GAAG,MAAM,GAAG,EAAE,SAA6B,CAAC;AACjE,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,GAAG,EAAE,SAA8B,CAAC;AACnE,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,GAAG,EAAE,SAAiC,CAAC;AACzE,eAAO,MAAM,KAAK,GAAI,GAAG,MAAM,GAAG,EAAE,SAA8B,CAAC;AACnE,eAAO,MAAM,KAAK,GAAI,MAAM,GAAG,EAAE,UAAU,MAAM,EAAE,SAAoC,CAAC;AACxF,eAAO,MAAM,KAAK,GAAI,OAAO,MAAM,EAAE,YAAY,OAAO,SAAuC,CAAC;AAChG,eAAO,MAAM,QAAQ,YAA8B,CAAC;AACpD,eAAO,MAAM,IAAI,GAAI,OAAO,MAAM,SAA2B,CAAC;AAC9D,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,SAA8B,CAAC;AACpE,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,SAAuC,CAAC;AACtF,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,eAA6B,CAAC;AAClE,eAAO,MAAM,YAAY,GAAI,OAAO,SAAS,SAAmC,CAAC;AACjF,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,SAAmC,CAAC;AAGnF,eAAe,UAAU,CAAC;AAG1B,YAAY,EACR,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,WAAW,EACd,MAAM,kBAAkB,CAAC"}
|
package/dist/core.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { t as LOG_LEVELS } from "./chunks/core-
|
|
2
|
-
import { _ as DEFAULT_CONFIG, b as parseStackTrace, i as getConsoleMethod, n as createPlainOutput, o as createStyledOutput, r as formatTablePlain, t as createLogEntry, v as LEVEL_STYLES } from "./chunks/utils-
|
|
3
|
-
import { o as isBrowser, s as isNode } from "./chunks/environment-detector-
|
|
1
|
+
import { t as LOG_LEVELS } from "./chunks/core-Blfi2klP.js";
|
|
2
|
+
import { _ as DEFAULT_CONFIG, b as parseStackTrace, i as getConsoleMethod, n as createPlainOutput, o as createStyledOutput, r as formatTablePlain, t as createLogEntry, v as LEVEL_STYLES } from "./chunks/utils-tKfBAWUM.js";
|
|
3
|
+
import { o as isBrowser, s as isNode } from "./chunks/environment-detector-7NvnYUfr.js";
|
|
4
4
|
//#region src/core.ts
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
6
|
+
* Logger minimal con solo la funcionalidad core.
|
|
7
|
+
*
|
|
8
8
|
* @example
|
|
9
9
|
* ```typescript
|
|
10
10
|
* import { CoreLogger } from '@mks2508/better-logger/core';
|
|
11
|
-
*
|
|
11
|
+
*
|
|
12
12
|
* const logger = new CoreLogger();
|
|
13
13
|
* logger.info('Hello world');
|
|
14
14
|
* logger.error('Something went wrong', error);
|
|
@@ -21,8 +21,8 @@ var CoreLogger = class CoreLogger {
|
|
|
21
21
|
timers = /* @__PURE__ */ new Map();
|
|
22
22
|
groupDepth = 0;
|
|
23
23
|
/**
|
|
24
|
-
*
|
|
25
|
-
* @param config -
|
|
24
|
+
* Crea una nueva instancia de CoreLogger.
|
|
25
|
+
* @param config - Configuración opcional.
|
|
26
26
|
*/
|
|
27
27
|
constructor(config = {}) {
|
|
28
28
|
this.config = {
|
|
@@ -36,25 +36,29 @@ var CoreLogger = class CoreLogger {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
*
|
|
39
|
+
* Obtiene la configuración actual.
|
|
40
40
|
*/
|
|
41
41
|
getConfig() {
|
|
42
42
|
return { ...this.config };
|
|
43
43
|
}
|
|
44
44
|
/**
|
|
45
|
-
*
|
|
45
|
+
* Define el prefijo global para todos los mensajes de log.
|
|
46
|
+
* @param prefix - Prefijo a aplicar a todos los mensajes.
|
|
46
47
|
*/
|
|
47
48
|
setGlobalPrefix(prefix) {
|
|
48
49
|
this.config.globalPrefix = prefix;
|
|
49
50
|
}
|
|
50
51
|
/**
|
|
51
|
-
*
|
|
52
|
+
* Define el nivel de verbosity para filtrar la salida de log.
|
|
53
|
+
* @param level - Nivel de verbosity.
|
|
52
54
|
*/
|
|
53
55
|
setVerbosity(level) {
|
|
54
56
|
this.config.verbosity = level;
|
|
55
57
|
}
|
|
56
58
|
/**
|
|
57
|
-
*
|
|
59
|
+
* Crea un logger con scope y un prefijo específico.
|
|
60
|
+
* @param prefix - Prefijo del scope.
|
|
61
|
+
* @returns Nueva instancia de CoreLogger con el prefijo asignado.
|
|
58
62
|
*/
|
|
59
63
|
scope(prefix) {
|
|
60
64
|
const scopedLogger = new CoreLogger(this.config);
|
|
@@ -63,13 +67,16 @@ var CoreLogger = class CoreLogger {
|
|
|
63
67
|
return scopedLogger;
|
|
64
68
|
}
|
|
65
69
|
/**
|
|
66
|
-
*
|
|
70
|
+
* Añade un handler personalizado para extensibilidad.
|
|
71
|
+
* @param handler - Handler que implementa la interfaz ILogHandler.
|
|
67
72
|
*/
|
|
68
73
|
addHandler(handler) {
|
|
69
74
|
this.handlers.push(handler);
|
|
70
75
|
}
|
|
71
76
|
/**
|
|
72
|
-
*
|
|
77
|
+
* Comprueba si un nivel debe emitirse según el verbosity actual.
|
|
78
|
+
* @param level - Nivel a evaluar.
|
|
79
|
+
* @returns `true` si el nivel debe emitirse.
|
|
73
80
|
*/
|
|
74
81
|
shouldLog(level) {
|
|
75
82
|
if (this.config.verbosity === "silent") return false;
|
|
@@ -77,14 +84,17 @@ var CoreLogger = class CoreLogger {
|
|
|
77
84
|
return LOG_LEVELS[level] >= LOG_LEVELS[verbosity];
|
|
78
85
|
}
|
|
79
86
|
/**
|
|
80
|
-
*
|
|
87
|
+
* Obtiene el prefijo efectivo (global + scope).
|
|
88
|
+
* @returns Prefijo combinado o `undefined` si no hay ninguno.
|
|
81
89
|
*/
|
|
82
90
|
getEffectivePrefix() {
|
|
83
91
|
const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);
|
|
84
92
|
return parts.length > 0 ? parts.join(":") : void 0;
|
|
85
93
|
}
|
|
86
94
|
/**
|
|
87
|
-
*
|
|
95
|
+
* Método principal de log con formato universal.
|
|
96
|
+
* @param level - Nivel del mensaje.
|
|
97
|
+
* @param args - Argumentos del mensaje.
|
|
88
98
|
*/
|
|
89
99
|
log(level, ...args) {
|
|
90
100
|
if (!this.shouldLog(level)) return;
|
|
@@ -119,44 +129,52 @@ var CoreLogger = class CoreLogger {
|
|
|
119
129
|
});
|
|
120
130
|
}
|
|
121
131
|
/**
|
|
122
|
-
*
|
|
132
|
+
* Emite mensajes de debug (prioridad más baja).
|
|
133
|
+
* @param args - Argumentos del mensaje.
|
|
123
134
|
*/
|
|
124
135
|
debug(...args) {
|
|
125
136
|
this.log("debug", ...args);
|
|
126
137
|
}
|
|
127
138
|
/**
|
|
128
|
-
*
|
|
139
|
+
* Emite mensajes informativos.
|
|
140
|
+
* @param args - Argumentos del mensaje.
|
|
129
141
|
*/
|
|
130
142
|
info(...args) {
|
|
131
143
|
this.log("info", ...args);
|
|
132
144
|
}
|
|
133
145
|
/**
|
|
134
|
-
*
|
|
146
|
+
* Emite mensajes de advertencia.
|
|
147
|
+
* @param args - Argumentos del mensaje.
|
|
135
148
|
*/
|
|
136
149
|
warn(...args) {
|
|
137
150
|
this.log("warn", ...args);
|
|
138
151
|
}
|
|
139
152
|
/**
|
|
140
|
-
*
|
|
153
|
+
* Emite mensajes de error.
|
|
154
|
+
* @param args - Argumentos del mensaje.
|
|
141
155
|
*/
|
|
142
156
|
error(...args) {
|
|
143
157
|
this.log("error", ...args);
|
|
144
158
|
}
|
|
145
159
|
/**
|
|
146
|
-
*
|
|
160
|
+
* Emite errores críticos (prioridad más alta).
|
|
161
|
+
* @param args - Argumentos del mensaje.
|
|
147
162
|
*/
|
|
148
163
|
critical(...args) {
|
|
149
164
|
this.log("critical", ...args);
|
|
150
165
|
}
|
|
151
166
|
/**
|
|
152
|
-
*
|
|
167
|
+
* Emite información de trace (debugging detallado).
|
|
168
|
+
* @param args - Argumentos del mensaje.
|
|
153
169
|
*/
|
|
154
170
|
trace(...args) {
|
|
155
171
|
this.log("debug", ...args);
|
|
156
172
|
if (this.shouldLog("debug")) console.trace(...args);
|
|
157
173
|
}
|
|
158
174
|
/**
|
|
159
|
-
*
|
|
175
|
+
* Muestra datos en formato tabla.
|
|
176
|
+
* @param data - Datos a mostrar.
|
|
177
|
+
* @param columns - Columnas opcionales a incluir.
|
|
160
178
|
*/
|
|
161
179
|
table(data, columns) {
|
|
162
180
|
if (!this.shouldLog("info")) return;
|
|
@@ -173,7 +191,9 @@ var CoreLogger = class CoreLogger {
|
|
|
173
191
|
}
|
|
174
192
|
}
|
|
175
193
|
/**
|
|
176
|
-
*
|
|
194
|
+
* Inicia un grupo colapsable en la console.
|
|
195
|
+
* @param label - Etiqueta del grupo.
|
|
196
|
+
* @param collapsed - Si el grupo inicia colapsado.
|
|
177
197
|
*/
|
|
178
198
|
group(label, collapsed = false) {
|
|
179
199
|
const prefix = this.getEffectivePrefix();
|
|
@@ -187,7 +207,7 @@ var CoreLogger = class CoreLogger {
|
|
|
187
207
|
this.groupDepth++;
|
|
188
208
|
}
|
|
189
209
|
/**
|
|
190
|
-
*
|
|
210
|
+
* Cierra el grupo actual de la console.
|
|
191
211
|
*/
|
|
192
212
|
groupEnd() {
|
|
193
213
|
if (this.groupDepth > 0) {
|
|
@@ -197,7 +217,8 @@ var CoreLogger = class CoreLogger {
|
|
|
197
217
|
}
|
|
198
218
|
}
|
|
199
219
|
/**
|
|
200
|
-
*
|
|
220
|
+
* Inicia un timer con el label indicado.
|
|
221
|
+
* @param label - Identificador del timer.
|
|
201
222
|
*/
|
|
202
223
|
time(label) {
|
|
203
224
|
const timer = {
|
|
@@ -210,7 +231,8 @@ var CoreLogger = class CoreLogger {
|
|
|
210
231
|
console.log(output);
|
|
211
232
|
}
|
|
212
233
|
/**
|
|
213
|
-
*
|
|
234
|
+
* Detiene un timer y emite el tiempo transcurrido.
|
|
235
|
+
* @param label - Identificador del timer previamente iniciado.
|
|
214
236
|
*/
|
|
215
237
|
timeEnd(label) {
|
|
216
238
|
const timer = this.timers.get(label);
|
|
@@ -225,7 +247,8 @@ var CoreLogger = class CoreLogger {
|
|
|
225
247
|
console.log(output);
|
|
226
248
|
}
|
|
227
249
|
/**
|
|
228
|
-
*
|
|
250
|
+
* Obtiene `performance.now()` o un fallback para entornos antiguos.
|
|
251
|
+
* @returns Timestamp en milisegundos.
|
|
229
252
|
*/
|
|
230
253
|
getPerformanceNow() {
|
|
231
254
|
if (typeof performance !== "undefined" && performance.now) return performance.now();
|
|
@@ -238,7 +261,7 @@ var CoreLogger = class CoreLogger {
|
|
|
238
261
|
};
|
|
239
262
|
const coreLogger = new CoreLogger();
|
|
240
263
|
/**
|
|
241
|
-
*
|
|
264
|
+
* Exporta métodos individuales por conveniencia (con binding correcto).
|
|
242
265
|
*/
|
|
243
266
|
const debug = (...args) => coreLogger.debug(...args);
|
|
244
267
|
const info = (...args) => coreLogger.info(...args);
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["/**\n * @fileoverview Core Logger Module - Minimal logging without advanced features\n * \n * This module provides the essential logging functionality without visual enhancements,\n * SVG support, or advanced styling. Perfect for lightweight applications or server-side usage.\n */\n\n// Core types\nimport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata,\n TimerEntry\n} from './types/index.js';\n\n// Core utilities\nimport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n// Universal formatting and environment detection\nimport {\n createPlainOutput,\n getConsoleMethod,\n createLogEntry,\n formatTablePlain,\n safeSerialize,\n type OutputFormat\n} from './utils/formatting.js';\n\nimport {\n isBrowser,\n isNode\n} from './utils/environment-detector.js';\n\nimport { createStyledOutput } from './utils/output.js';\n\n// Constants\nimport { DEFAULT_CONFIG, LEVEL_STYLES } from './constants.js';\nimport { LOG_LEVELS } from './types/core.js';\n\n/**\n * Minimal Logger class with core functionality only\n * \n * @example\n * ```typescript\n * import { CoreLogger } from '@mks2508/better-logger/core';\n * \n * const logger = new CoreLogger();\n * logger.info('Hello world');\n * logger.error('Something went wrong', error);\n * ```\n */\nexport class CoreLogger {\n private config: LoggerConfig;\n private scopedPrefix?: string;\n private handlers: ILogHandler[] = [];\n private timers: Map<string, TimerEntry> = new Map();\n private groupDepth: number = 0;\n\n /**\n * Creates a new CoreLogger instance\n * @param config - Optional configuration\n */\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n // Auto-configure based on environment\n enableColors: config.enableColors ?? (isBrowser ? true : false),\n enableTimestamps: config.enableTimestamps ?? true,\n enableStackTrace: config.enableStackTrace ?? false,\n autoDetectTheme: config.autoDetectTheme ?? true,\n outputFormat: config.outputFormat ?? 'auto'\n };\n }\n\n // ===== CONFIGURATION METHODS =====\n\n /**\n * Get current configuration\n */\n getConfig(): LoggerConfig {\n return { ...this.config };\n }\n\n /**\n * Sets the global prefix for all log messages\n */\n setGlobalPrefix(prefix: string): void {\n this.config.globalPrefix = prefix;\n }\n\n /**\n * Sets the verbosity level for filtering log output\n */\n setVerbosity(level: Verbosity): void {\n this.config.verbosity = level;\n }\n\n /**\n * Creates a scoped logger with a specific prefix\n */\n scope(prefix: string): CoreLogger {\n const scopedLogger = new CoreLogger(this.config);\n scopedLogger.scopedPrefix = prefix;\n scopedLogger.handlers = [...this.handlers];\n return scopedLogger;\n }\n\n /**\n * Adds a custom log handler for extensibility\n */\n addHandler(handler: ILogHandler): void {\n this.handlers.push(handler);\n }\n\n // ===== CORE LOGGING METHODS =====\n\n /**\n * Checks if a log level should be output based on current verbosity\n */\n private shouldLog(level: LogLevel): boolean {\n if (this.config.verbosity === 'silent') return false;\n const verbosity = this.config.verbosity as LogLevel;\n return LOG_LEVELS[level] >= LOG_LEVELS[verbosity];\n }\n\n /**\n * Gets the effective prefix (global + scoped)\n */\n private getEffectivePrefix(): string | undefined {\n const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);\n return parts.length > 0 ? parts.join(':') : undefined;\n }\n\n /**\n * Core logging method with universal formatting\n */\n private log(level: LogLevel, ...args: unknown[]): void {\n if (!this.shouldLog(level)) return;\n\n const prefix = this.getEffectivePrefix();\n const message = String(args[0] || '');\n const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;\n const consoleMethod = getConsoleMethod(level);\n\n // Choose formatting based on environment and configuration\n if (isBrowser && this.config.enableColors) {\n // Browser with CSS styling\n try {\n const [format, ...styles] = createStyledOutput(\n level,\n LEVEL_STYLES,\n prefix,\n message,\n stackInfo,\n this.config.autoDetectTheme\n );\n console[consoleMethod](format, ...styles, ...args.slice(1));\n } catch (error) {\n // Fallback to plain formatting if CSS fails\n const output = createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n } else {\n // Node.js or browser without colors - use plain formatting\n const groupIndent = ' '.repeat(this.groupDepth);\n const output = groupIndent + createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n\n // Call custom handlers with structured metadata\n const logEntry = createLogEntry(level, message, args, prefix, stackInfo);\n const metadata: LogMetadata = {\n timestamp: logEntry.timestamp,\n level,\n prefix,\n stackInfo: logEntry.location,\n };\n\n this.handlers.forEach(handler => {\n try {\n handler.handle(level, message, args, metadata);\n } catch (error) {\n console.error('Log handler failed:', error);\n }\n });\n }\n\n /**\n * Logs debug information (lowest priority)\n */\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n /**\n * Logs informational messages\n */\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n /**\n * Logs warning messages\n */\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n /**\n * Logs error messages\n */\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n /**\n * Logs critical errors (highest priority)\n */\n critical(...args: unknown[]): void {\n this.log('critical', ...args);\n }\n\n /**\n * Logs trace information (detailed debugging)\n */\n trace(...args: unknown[]): void {\n this.log('debug', ...args);\n if (this.shouldLog('debug')) {\n console.trace(...args);\n }\n }\n\n // ===== BASIC ADVANCED FEATURES =====\n\n /**\n * Displays data in a table format\n */\n table(data: any, columns?: string[]): void {\n if (!this.shouldLog('info')) return;\n\n const prefix = this.getEffectivePrefix();\n const tableHeader = `[TABLE]${prefix ? ` [${prefix}]` : ''}:`;\n \n if (isBrowser && typeof console.table === 'function') {\n // Browser has native table support\n console.log(tableHeader);\n if (columns) {\n console.table(data, columns);\n } else {\n console.table(data);\n }\n } else {\n // Node.js or fallback - use plain text formatting\n console.log(tableHeader);\n const tableText = formatTablePlain(data, columns);\n console.log(tableText);\n }\n }\n\n /**\n * Starts a collapsible group in the console\n */\n group(label: string, collapsed: boolean = false): void {\n const prefix = this.getEffectivePrefix();\n const fullLabel = `${prefix ? `[${prefix}] ` : ''}${label}`;\n \n if (isBrowser && console.group && console.groupCollapsed) {\n // Browser supports native grouping\n if (collapsed) {\n console.groupCollapsed(fullLabel);\n } else {\n console.group(fullLabel);\n }\n } else {\n // Node.js fallback - just log the group label\n const groupStart = '┌─ ' + fullLabel;\n console.log(groupStart);\n }\n \n this.groupDepth++;\n }\n\n /**\n * Ends the current console group\n */\n groupEnd(): void {\n if (this.groupDepth > 0) {\n if (isBrowser && console.groupEnd) {\n console.groupEnd();\n } else {\n // Node.js fallback - log group end\n const groupEnd = '└─ (end group)';\n console.log(groupEnd);\n }\n this.groupDepth--;\n }\n }\n\n /**\n * Starts a timer with the given label\n */\n time(label: string): void {\n const startTime = this.getPerformanceNow();\n const timer: TimerEntry = {\n label,\n startTime,\n };\n this.timers.set(label, timer);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer started: ${label}`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Ends a timer and logs the elapsed time\n */\n timeEnd(label: string): void {\n const timer = this.timers.get(label);\n if (!timer) {\n this.warn(`Timer '${label}' does not exist`);\n return;\n }\n\n const elapsed = this.getPerformanceNow() - timer.startTime;\n this.timers.delete(label);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer ended: ${label} - ${elapsed.toFixed(2)}ms`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Gets performance.now() or fallback for older environments\n */\n private getPerformanceNow(): number {\n if (typeof performance !== 'undefined' && performance.now) {\n return performance.now();\n }\n \n if (isNode && process.hrtime) {\n // Node.js high-resolution time\n const [seconds, nanoseconds] = process.hrtime();\n return seconds * 1000 + nanoseconds / 1000000;\n }\n \n // Fallback to Date.now()\n return Date.now();\n }\n}\n\n// Create and export singleton instance for convenience\nconst coreLogger = new CoreLogger();\n\n/**\n * Export individual methods for convenience (with proper binding)\n */\nexport const debug = (...args: any[]) => coreLogger.debug(...args);\nexport const info = (...args: any[]) => coreLogger.info(...args);\nexport const warn = (...args: any[]) => coreLogger.warn(...args);\nexport const error = (...args: any[]) => coreLogger.error(...args);\nexport const critical = (...args: any[]) => coreLogger.critical(...args);\nexport const trace = (...args: any[]) => coreLogger.trace(...args);\nexport const table = (data: any, columns?: string[]) => coreLogger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => coreLogger.group(label, collapsed);\nexport const groupEnd = () => coreLogger.groupEnd();\nexport const time = (label: string) => coreLogger.time(label);\nexport const timeEnd = (label: string) => coreLogger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => coreLogger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => coreLogger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => coreLogger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => coreLogger.addHandler(handler);\n\n// Export the singleton as default\nexport default coreLogger;\n\n// Re-export core types\nexport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata\n} from './types/index.js';"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.js","names":[],"sources":["../src/core.ts"],"sourcesContent":["/**\n * @fileoverview Módulo Core Logger — logging minimal sin features avanzadas\n *\n * Provee la funcionalidad esencial de logging sin mejoras visuales,\n * soporte SVG ni styling avanzado. Adecuado para apps ligeras o uso server-side.\n */\n\n// Tipos core\nimport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata,\n TimerEntry\n} from './types/index.js';\n\n// Utilidades core\nimport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n// Formato universal y detección de entorno\nimport {\n createPlainOutput,\n getConsoleMethod,\n createLogEntry,\n formatTablePlain,\n safeSerialize,\n type OutputFormat\n} from './utils/formatting.js';\n\nimport {\n isBrowser,\n isNode\n} from './utils/environment-detector.js';\n\nimport { createStyledOutput } from './utils/output.js';\n\n// Constantes\nimport { DEFAULT_CONFIG, LEVEL_STYLES } from './constants.js';\nimport { LOG_LEVELS } from './types/core.js';\n\n/**\n * Logger minimal con solo la funcionalidad core.\n *\n * @example\n * ```typescript\n * import { CoreLogger } from '@mks2508/better-logger/core';\n *\n * const logger = new CoreLogger();\n * logger.info('Hello world');\n * logger.error('Something went wrong', error);\n * ```\n */\nexport class CoreLogger {\n private config: LoggerConfig;\n private scopedPrefix?: string;\n private handlers: ILogHandler[] = [];\n private timers: Map<string, TimerEntry> = new Map();\n private groupDepth: number = 0;\n\n /**\n * Crea una nueva instancia de CoreLogger.\n * @param config - Configuración opcional.\n */\n constructor(config: Partial<LoggerConfig> = {}) {\n this.config = {\n ...DEFAULT_CONFIG,\n ...config,\n // Auto-configurar según entorno\n enableColors: config.enableColors ?? (isBrowser ? true : false),\n enableTimestamps: config.enableTimestamps ?? true,\n enableStackTrace: config.enableStackTrace ?? false,\n autoDetectTheme: config.autoDetectTheme ?? true,\n outputFormat: config.outputFormat ?? 'auto'\n };\n }\n\n // ===== MÉTODOS DE CONFIGURACIÓN =====\n\n /**\n * Obtiene la configuración actual.\n */\n getConfig(): LoggerConfig {\n return { ...this.config };\n }\n\n /**\n * Define el prefijo global para todos los mensajes de log.\n * @param prefix - Prefijo a aplicar a todos los mensajes.\n */\n setGlobalPrefix(prefix: string): void {\n this.config.globalPrefix = prefix;\n }\n\n /**\n * Define el nivel de verbosity para filtrar la salida de log.\n * @param level - Nivel de verbosity.\n */\n setVerbosity(level: Verbosity): void {\n this.config.verbosity = level;\n }\n\n /**\n * Crea un logger con scope y un prefijo específico.\n * @param prefix - Prefijo del scope.\n * @returns Nueva instancia de CoreLogger con el prefijo asignado.\n */\n scope(prefix: string): CoreLogger {\n const scopedLogger = new CoreLogger(this.config);\n scopedLogger.scopedPrefix = prefix;\n scopedLogger.handlers = [...this.handlers];\n return scopedLogger;\n }\n\n /**\n * Añade un handler personalizado para extensibilidad.\n * @param handler - Handler que implementa la interfaz ILogHandler.\n */\n addHandler(handler: ILogHandler): void {\n this.handlers.push(handler);\n }\n\n // ===== MÉTODOS CORE DE LOGGING =====\n\n /**\n * Comprueba si un nivel debe emitirse según el verbosity actual.\n * @param level - Nivel a evaluar.\n * @returns `true` si el nivel debe emitirse.\n */\n private shouldLog(level: LogLevel): boolean {\n if (this.config.verbosity === 'silent') return false;\n const verbosity = this.config.verbosity as LogLevel;\n return LOG_LEVELS[level] >= LOG_LEVELS[verbosity];\n }\n\n /**\n * Obtiene el prefijo efectivo (global + scope).\n * @returns Prefijo combinado o `undefined` si no hay ninguno.\n */\n private getEffectivePrefix(): string | undefined {\n const parts = [this.config.globalPrefix, this.scopedPrefix].filter(Boolean);\n return parts.length > 0 ? parts.join(':') : undefined;\n }\n\n /**\n * Método principal de log con formato universal.\n * @param level - Nivel del mensaje.\n * @param args - Argumentos del mensaje.\n */\n private log(level: LogLevel, ...args: unknown[]): void {\n if (!this.shouldLog(level)) return;\n\n const prefix = this.getEffectivePrefix();\n const message = String(args[0] || '');\n const stackInfo = this.config.enableStackTrace ? parseStackTrace() : null;\n const consoleMethod = getConsoleMethod(level);\n\n // Elegir formato según entorno y configuración\n if (isBrowser && this.config.enableColors) {\n // Browser con styling CSS\n try {\n const [format, ...styles] = createStyledOutput(\n level,\n LEVEL_STYLES,\n prefix,\n message,\n stackInfo,\n this.config.autoDetectTheme\n );\n console[consoleMethod](format, ...styles, ...args.slice(1));\n } catch (error) {\n // Fallback a formato plano si falla el CSS\n const output = createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n } else {\n // Node.js o browser sin colores: formato plano\n const groupIndent = ' '.repeat(this.groupDepth);\n const output = groupIndent + createPlainOutput(level, message, prefix, stackInfo);\n console[consoleMethod](output, ...args.slice(1));\n }\n\n // Llama a los handlers con metadata estructurada\n const logEntry = createLogEntry(level, message, args, prefix, stackInfo);\n const metadata: LogMetadata = {\n timestamp: logEntry.timestamp,\n level,\n prefix,\n stackInfo: logEntry.location,\n };\n\n this.handlers.forEach(handler => {\n try {\n handler.handle(level, message, args, metadata);\n } catch (error) {\n console.error('Log handler failed:', error);\n }\n });\n }\n\n /**\n * Emite mensajes de debug (prioridad más baja).\n * @param args - Argumentos del mensaje.\n */\n debug(...args: unknown[]): void {\n this.log('debug', ...args);\n }\n\n /**\n * Emite mensajes informativos.\n * @param args - Argumentos del mensaje.\n */\n info(...args: unknown[]): void {\n this.log('info', ...args);\n }\n\n /**\n * Emite mensajes de advertencia.\n * @param args - Argumentos del mensaje.\n */\n warn(...args: unknown[]): void {\n this.log('warn', ...args);\n }\n\n /**\n * Emite mensajes de error.\n * @param args - Argumentos del mensaje.\n */\n error(...args: unknown[]): void {\n this.log('error', ...args);\n }\n\n /**\n * Emite errores críticos (prioridad más alta).\n * @param args - Argumentos del mensaje.\n */\n critical(...args: unknown[]): void {\n this.log('critical', ...args);\n }\n\n /**\n * Emite información de trace (debugging detallado).\n * @param args - Argumentos del mensaje.\n */\n trace(...args: unknown[]): void {\n this.log('debug', ...args);\n if (this.shouldLog('debug')) {\n console.trace(...args);\n }\n }\n\n // ===== FEATURES AVANZADAS BÁSICAS =====\n\n /**\n * Muestra datos en formato tabla.\n * @param data - Datos a mostrar.\n * @param columns - Columnas opcionales a incluir.\n */\n table(data: any, columns?: string[]): void {\n if (!this.shouldLog('info')) return;\n\n const prefix = this.getEffectivePrefix();\n const tableHeader = `[TABLE]${prefix ? ` [${prefix}]` : ''}:`;\n \n if (isBrowser && typeof console.table === 'function') {\n // Browser con soporte nativo de table\n console.log(tableHeader);\n if (columns) {\n console.table(data, columns);\n } else {\n console.table(data);\n }\n } else {\n // Node.js o fallback: formato de texto plano\n console.log(tableHeader);\n const tableText = formatTablePlain(data, columns);\n console.log(tableText);\n }\n }\n\n /**\n * Inicia un grupo colapsable en la console.\n * @param label - Etiqueta del grupo.\n * @param collapsed - Si el grupo inicia colapsado.\n */\n group(label: string, collapsed: boolean = false): void {\n const prefix = this.getEffectivePrefix();\n const fullLabel = `${prefix ? `[${prefix}] ` : ''}${label}`;\n \n if (isBrowser && console.group && console.groupCollapsed) {\n // Browser soporta grouping nativo\n if (collapsed) {\n console.groupCollapsed(fullLabel);\n } else {\n console.group(fullLabel);\n }\n } else {\n // Fallback Node.js: solo emite el label del grupo\n const groupStart = '┌─ ' + fullLabel;\n console.log(groupStart);\n }\n \n this.groupDepth++;\n }\n\n /**\n * Cierra el grupo actual de la console.\n */\n groupEnd(): void {\n if (this.groupDepth > 0) {\n if (isBrowser && console.groupEnd) {\n console.groupEnd();\n } else {\n // Fallback Node.js: emite el cierre del grupo\n const groupEnd = '└─ (end group)';\n console.log(groupEnd);\n }\n this.groupDepth--;\n }\n }\n\n /**\n * Inicia un timer con el label indicado.\n * @param label - Identificador del timer.\n */\n time(label: string): void {\n const startTime = this.getPerformanceNow();\n const timer: TimerEntry = {\n label,\n startTime,\n };\n this.timers.set(label, timer);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer started: ${label}`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Detiene un timer y emite el tiempo transcurrido.\n * @param label - Identificador del timer previamente iniciado.\n */\n timeEnd(label: string): void {\n const timer = this.timers.get(label);\n if (!timer) {\n this.warn(`Timer '${label}' does not exist`);\n return;\n }\n\n const elapsed = this.getPerformanceNow() - timer.startTime;\n this.timers.delete(label);\n \n const prefix = this.getEffectivePrefix();\n const message = `Timer ended: ${label} - ${elapsed.toFixed(2)}ms`;\n const output = createPlainOutput('info', message, prefix);\n console.log(output);\n }\n\n /**\n * Obtiene `performance.now()` o un fallback para entornos antiguos.\n * @returns Timestamp en milisegundos.\n */\n private getPerformanceNow(): number {\n if (typeof performance !== 'undefined' && performance.now) {\n return performance.now();\n }\n \n if (isNode && process.hrtime) {\n // Node.js high-resolution time\n const [seconds, nanoseconds] = process.hrtime();\n return seconds * 1000 + nanoseconds / 1000000;\n }\n \n // Fallback a Date.now()\n return Date.now();\n }\n}\n\n// Crea y exporta una instancia singleton por conveniencia\nconst coreLogger = new CoreLogger();\n\n/**\n * Exporta métodos individuales por conveniencia (con binding correcto).\n */\nexport const debug = (...args: any[]) => coreLogger.debug(...args);\nexport const info = (...args: any[]) => coreLogger.info(...args);\nexport const warn = (...args: any[]) => coreLogger.warn(...args);\nexport const error = (...args: any[]) => coreLogger.error(...args);\nexport const critical = (...args: any[]) => coreLogger.critical(...args);\nexport const trace = (...args: any[]) => coreLogger.trace(...args);\nexport const table = (data: any, columns?: string[]) => coreLogger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => coreLogger.group(label, collapsed);\nexport const groupEnd = () => coreLogger.groupEnd();\nexport const time = (label: string) => coreLogger.time(label);\nexport const timeEnd = (label: string) => coreLogger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => coreLogger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => coreLogger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => coreLogger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => coreLogger.addHandler(handler);\n\n// Exporta el singleton como default\nexport default coreLogger;\n\n// Re-exporta tipos core\nexport type {\n LogLevel,\n Verbosity,\n LoggerConfig,\n ILogHandler,\n LogMetadata\n} from './types/index.js';"],"mappings":"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"}
|
|
@@ -1,26 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @fileoverview HookBridge — HookManager
|
|
3
|
-
*
|
|
2
|
+
* @fileoverview HookBridge — facade de HookManager.
|
|
3
|
+
* Encapsula registro de hooks, middleware pipeline y emisión de eventos.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
4
6
|
*/
|
|
5
7
|
import type { HookEvent, HookCallback, MiddlewareFn } from '../types/index.js';
|
|
6
8
|
import { HookManager } from './index.js';
|
|
7
9
|
/**
|
|
8
|
-
* Bridge
|
|
10
|
+
* Bridge para la gestión de hooks y middleware.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
9
13
|
*/
|
|
10
14
|
export interface HookBridge {
|
|
11
|
-
/**
|
|
15
|
+
/** Registra un hook para un evento. Devuelve función de unsubscribe. */
|
|
12
16
|
on(event: HookEvent, callback: HookCallback, priority?: number): () => void;
|
|
13
|
-
/**
|
|
17
|
+
/** Registra un hook one-time. Devuelve función de unsubscribe. */
|
|
14
18
|
once(event: HookEvent, callback: HookCallback, priority?: number): () => void;
|
|
15
|
-
/**
|
|
19
|
+
/** Elimina un hook registrado. Devuelve `true` si se eliminó. */
|
|
16
20
|
off(event: HookEvent, callback: HookCallback): boolean;
|
|
17
|
-
/**
|
|
21
|
+
/** Añade middleware al pipeline. Devuelve función de unsubscribe. */
|
|
18
22
|
use(middleware: MiddlewareFn, priority?: number): () => void;
|
|
19
|
-
/**
|
|
23
|
+
/** Devuelve el HookManager subyacente. */
|
|
20
24
|
getHookManager(): HookManager;
|
|
21
25
|
}
|
|
22
26
|
/**
|
|
23
|
-
*
|
|
27
|
+
* Crea una instancia de {@link HookBridge}.
|
|
28
|
+
*
|
|
29
|
+
* @internal
|
|
24
30
|
*/
|
|
25
31
|
export declare function createHookBridge(): HookBridge;
|
|
26
32
|
//# sourceMappingURL=HookBridge.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HookBridge.d.ts","sourceRoot":"","sources":["../../src/hooks/HookBridge.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"HookBridge.d.ts","sourceRoot":"","sources":["../../src/hooks/HookBridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACvB,wEAAwE;IACxE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC5E,kEAAkE;IAClE,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC9E,iEAAiE;IACjE,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC;IACvD,qEAAqE;IACrE,GAAG,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;IAC7D,0CAA0C;IAC1C,cAAc,IAAI,WAAW,CAAC;CACjC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,UAAU,CAwB7C"}
|