@mks2508/better-logger 0.14.0-alpha.2 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/dist/chunks/{Logger-Crw1woqR.js → Logger-CTAaDeZi.js} +49 -16
  2. package/dist/chunks/{Logger-Crw1woqR.js.map → Logger-CTAaDeZi.js.map} +1 -1
  3. package/dist/chunks/{Logger-D_p3xnbq.js → Logger-D8pK7XXt.js} +2 -2
  4. package/dist/chunks/{Logger-D_p3xnbq.js.map → Logger-D8pK7XXt.js.map} +1 -1
  5. package/dist/chunks/ScopedLogger-D-7q8uVP.js +2 -0
  6. package/dist/chunks/ScopedLogger-D-7q8uVP.js.map +1 -0
  7. package/dist/chunks/ScopedLogger-hS0qSkZD.js +361 -0
  8. package/dist/chunks/ScopedLogger-hS0qSkZD.js.map +1 -0
  9. package/dist/core.js +280 -307
  10. package/dist/exports.cjs +1 -1
  11. package/dist/exports.js +1 -1
  12. package/dist/index.cjs +1 -1
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.js +226 -159
  15. package/dist/index.js.map +1 -1
  16. package/dist/styling.cjs +1 -1
  17. package/dist/styling.js +2 -2
  18. package/dist/types/Logger.d.ts +11 -7
  19. package/dist/types/Logger.d.ts.map +1 -1
  20. package/dist/types/core.d.ts +122 -216
  21. package/dist/types/core.d.ts.map +1 -1
  22. package/dist/types/index.d.ts +119 -4
  23. package/dist/types/index.d.ts.map +1 -1
  24. package/package.json +2 -1
  25. package/src/Logger.ts +99 -58
  26. package/src/index.ts +32 -25
  27. package/dist/.tsbuildinfo +0 -1
  28. package/dist/Logger.d.ts +0 -708
  29. package/dist/Logger.d.ts.map +0 -1
  30. package/dist/Logger.js +0 -1124
  31. package/dist/ScopedLogger.d.ts +0 -318
  32. package/dist/ScopedLogger.d.ts.map +0 -1
  33. package/dist/ScopedLogger.js +0 -426
  34. package/dist/cli/CommandProcessor.d.ts +0 -103
  35. package/dist/cli/CommandProcessor.d.ts.map +0 -1
  36. package/dist/cli/CommandProcessor.js +0 -184
  37. package/dist/cli/commands/ConfigCommand.d.ts +0 -17
  38. package/dist/cli/commands/ConfigCommand.d.ts.map +0 -1
  39. package/dist/cli/commands/ConfigCommand.js +0 -88
  40. package/dist/cli/commands/ExportCommand.d.ts +0 -51
  41. package/dist/cli/commands/ExportCommand.d.ts.map +0 -1
  42. package/dist/cli/commands/ExportCommand.js +0 -243
  43. package/dist/cli/commands/HistoryCommand.d.ts +0 -50
  44. package/dist/cli/commands/HistoryCommand.d.ts.map +0 -1
  45. package/dist/cli/commands/HistoryCommand.js +0 -96
  46. package/dist/cli/commands/StatusCommand.d.ts +0 -33
  47. package/dist/cli/commands/StatusCommand.d.ts.map +0 -1
  48. package/dist/cli/commands/StatusCommand.js +0 -93
  49. package/dist/cli/commands/ThemeCommand.d.ts +0 -33
  50. package/dist/cli/commands/ThemeCommand.d.ts.map +0 -1
  51. package/dist/cli/commands/ThemeCommand.js +0 -79
  52. package/dist/cli/help.d.ts +0 -15
  53. package/dist/cli/help.d.ts.map +0 -1
  54. package/dist/cli/help.js +0 -118
  55. package/dist/cli/index.d.ts +0 -15
  56. package/dist/cli/index.d.ts.map +0 -1
  57. package/dist/cli/index.js +0 -46
  58. package/dist/constants.d.ts +0 -122
  59. package/dist/constants.d.ts.map +0 -1
  60. package/dist/constants.js +0 -159
  61. package/dist/core.d.ts +0 -134
  62. package/dist/core.d.ts.map +0 -1
  63. package/dist/example.d.ts +0 -18
  64. package/dist/example.d.ts.map +0 -1
  65. package/dist/example.js +0 -154
  66. package/dist/exports-module.d.ts +0 -203
  67. package/dist/exports-module.d.ts.map +0 -1
  68. package/dist/exports-module.js +0 -260
  69. package/dist/handlers/AnalyticsLogHandler.d.ts +0 -11
  70. package/dist/handlers/AnalyticsLogHandler.d.ts.map +0 -1
  71. package/dist/handlers/AnalyticsLogHandler.js +0 -19
  72. package/dist/handlers/ExportLogHandler.d.ts +0 -103
  73. package/dist/handlers/ExportLogHandler.d.ts.map +0 -1
  74. package/dist/handlers/ExportLogHandler.js +0 -516
  75. package/dist/handlers/FileLogHandler.d.ts +0 -36
  76. package/dist/handlers/FileLogHandler.d.ts.map +0 -1
  77. package/dist/handlers/FileLogHandler.js +0 -156
  78. package/dist/handlers/RemoteLogHandler.d.ts +0 -14
  79. package/dist/handlers/RemoteLogHandler.d.ts.map +0 -1
  80. package/dist/handlers/RemoteLogHandler.js +0 -37
  81. package/dist/handlers/index.d.ts +0 -8
  82. package/dist/handlers/index.d.ts.map +0 -1
  83. package/dist/handlers/index.js +0 -7
  84. package/dist/index.d.ts +0 -157
  85. package/dist/index.d.ts.map +0 -1
  86. package/dist/main.d.ts +0 -2
  87. package/dist/main.d.ts.map +0 -1
  88. package/dist/main.js +0 -139
  89. package/dist/styling/LogStyleBuilder.d.ts +0 -149
  90. package/dist/styling/LogStyleBuilder.d.ts.map +0 -1
  91. package/dist/styling/LogStyleBuilder.js +0 -289
  92. package/dist/styling/SemanticStyles.d.ts +0 -181
  93. package/dist/styling/SemanticStyles.d.ts.map +0 -1
  94. package/dist/styling/SemanticStyles.js +0 -339
  95. package/dist/styling/SmartPresets.d.ts +0 -25
  96. package/dist/styling/SmartPresets.d.ts.map +0 -1
  97. package/dist/styling/SmartPresets.js +0 -276
  98. package/dist/styling/StyleBuilder.d.ts +0 -140
  99. package/dist/styling/StyleBuilder.d.ts.map +0 -1
  100. package/dist/styling/StyleBuilder.js +0 -280
  101. package/dist/styling/banners.d.ts +0 -45
  102. package/dist/styling/banners.d.ts.map +0 -1
  103. package/dist/styling/banners.js +0 -155
  104. package/dist/styling/index.d.ts +0 -10
  105. package/dist/styling/index.d.ts.map +0 -1
  106. package/dist/styling/index.js +0 -9
  107. package/dist/styling/themes.d.ts +0 -10
  108. package/dist/styling/themes.d.ts.map +0 -1
  109. package/dist/styling/themes.js +0 -231
  110. package/dist/styling-module.d.ts +0 -185
  111. package/dist/styling-module.d.ts.map +0 -1
  112. package/dist/styling-module.js +0 -199
  113. package/dist/types/core.js +0 -28
  114. package/dist/types/handlers.d.ts +0 -88
  115. package/dist/types/handlers.d.ts.map +0 -1
  116. package/dist/types/handlers.js +0 -4
  117. package/dist/types/index.js +0 -4
  118. package/dist/utils/environment.d.ts +0 -47
  119. package/dist/utils/environment.d.ts.map +0 -1
  120. package/dist/utils/environment.js +0 -85
  121. package/dist/utils/formatting.d.ts +0 -40
  122. package/dist/utils/formatting.d.ts.map +0 -1
  123. package/dist/utils/formatting.js +0 -117
  124. package/dist/utils/index.d.ts +0 -7
  125. package/dist/utils/index.d.ts.map +0 -1
  126. package/dist/utils/index.js +0 -6
  127. package/dist/utils/opentui-detection.d.ts +0 -34
  128. package/dist/utils/opentui-detection.d.ts.map +0 -1
  129. package/dist/utils/opentui-detection.js +0 -116
  130. package/dist/utils/output.d.ts +0 -44
  131. package/dist/utils/output.d.ts.map +0 -1
  132. package/dist/utils/output.js +0 -150
  133. package/dist/utils/stackTrace.d.ts +0 -9
  134. package/dist/utils/stackTrace.d.ts.map +0 -1
  135. package/dist/utils/stackTrace.js +0 -81
  136. package/dist/utils/timestamps.d.ts +0 -20
  137. package/dist/utils/timestamps.d.ts.map +0 -1
  138. package/dist/utils/timestamps.js +0 -71
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/index.ts","../src/handlers/AnalyticsLogHandler.ts","../src/handlers/FileLogHandler.ts"],"sourcesContent":["/**\n * @fileoverview Better Logger - Librería completa con todas las características\n * @version 0.3.0\n * @since 2024\n * \n * Punto de entrada principal que proporciona la experiencia completa de Better Logger\n * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,\n * capacidades de exportación y logging remoto.\n * \n * @module @mks2508/better-logger\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Create singleton instance with all features enabled\nconst logger = new Logger();\n\n/**\n * Clase principal Logger con conjunto completo de características\n * \n * @example\n * // Importación y uso básico\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.preset('cyberpunk'); // Aplicar preset completo\n * logger.info('¡Hola mundo!');\n * \n * @example\n * // Logger con scope para componentes\n * const auth = logger.component('Auth');\n * auth.info('Usuario autenticando...');\n * auth.success('Login exitoso');\n * \n * @example\n * // Logger para APIs con badges\n * const api = logger.api('GraphQL');\n * api.badges(['v2', 'cached']).info('Query ejecutada');\n * \n * @since 0.3.0\n */\nexport { Logger };\n\n/**\n * Instancia singleton del logger lista para usar\n * @default\n * \n * @example\n * // Uso directo sin crear instancia\n * import logger from '@mks2508/better-logger';\n * \n * logger.info('Aplicación iniciada');\n * logger.success('Conexión establecida');\n * logger.warn('Memoria al 80%');\n * logger.error('Fallo en conexión');\n */\nexport default logger;\n\n/**\n * Métodos de logging individuales (enlazados al singleton)\n * \n * @example\n * // Importar solo los métodos necesarios\n * import { info, error, success } from '@mks2508/better-logger';\n * \n * info('Proceso iniciado');\n * success('✓ Completado exitosamente');\n * error('Error:', errorDetails);\n * \n * @since 0.3.0\n */\nexport const debug = (...args: any[]) => logger.debug(...args);\nexport const info = (...args: any[]) => logger.info(...args);\nexport const warn = (...args: any[]) => logger.warn(...args);\nexport const error = (...args: any[]) => logger.error(...args);\nexport const success = (...args: any[]) => logger.success(...args);\nexport const critical = (...args: any[]) => logger.critical(...args);\nexport const trace = (...args: any[]) => logger.trace(...args);\nexport const table = (data: any, columns?: string[]) => logger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => logger.group(label, collapsed);\nexport const groupEnd = () => logger.groupEnd();\nexport const time = (label: string) => logger.time(label);\nexport const timeEnd = (label: string) => logger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => logger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => logger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => logger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => logger.addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => logger.setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => logger.setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => logger.showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n logger.logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n logger.logAnimated(message, duration);\nexport const cli = (command: string) => logger.cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n/**\n * Utilidades de estilo para crear estilos personalizados de consola\n * \n * @example\n * // Crear estilo personalizado\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const miEstilo = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .rounded('8px')\n * .bold()\n * .build();\n * \n * console.log('%cMensaje estilizado', miEstilo);\n * \n * @example\n * // Usar presets predefinidos\n * console.log('%cÉxito!', stylePresets.success);\n * console.log('%cError!', stylePresets.error);\n * \n * @since 0.3.0\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola\n * \n * @returns {StyleBuilder} Constructor de estilos encadenable\n * \n * @example\n * const estilo = createStyle()\n * .gradient('#667eea', '#764ba2')\n * .color('white')\n * .padding('8px 16px')\n * .rounded('4px')\n * .shadow('0 2px 4px rgba(0,0,0,0.2)')\n * .build();\n * \n * @since 0.3.0\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Presets de estilo predefinidos para casos de uso comunes\n * \n * @constant {Object} stylePresets\n * \n * @example\n * console.log('%cOperación exitosa', stylePresets.success);\n * console.log('%cAdvertencia', stylePresets.warning);\n * console.log('%cError crítico', stylePresets.error);\n * console.log('%cInformación', stylePresets.info);\n * console.log('%cDestacado', stylePresets.accent);\n * \n * @since 0.3.0\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}"],"names":["logger","Logger","stylePresets","success","StylePresets","build","error","warning","info","accent","handle","level","message","_args","metadata","timestamp","filename","maxSize","fs","constructor","this","isNode","require","console","warn","args","logEntry","toUpperCase","prefix","slice","map","arg","safeSerialize","location","stackInfo","logLine","formatLogLine","writeToFileNode","isBrowser","writeToFileLocal","log","entry","line","filter","Boolean","join","length","JSON","stringify","String","file","column","statSync","size","backupName","renameSync","appendFileSync","storageKey","existingLogs","localStorage","getItem","newLogs","split","lines","maxLines","Math","floor","setItem","getLogs","readFileSync","clearLogs","writeFileSync","removeItem","handler","addHandler","command","cli","StyleBuilder","critical","debug","label","collapsed","group","groupEnd","duration","logAnimated","svgContent","options","logWithSVG","scope","bannerType","setBannerType","setGlobalPrefix","theme","setTheme","setVerbosity","showBanner","data","columns","table","time","timeEnd","trace"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/index.ts","../src/handlers/AnalyticsLogHandler.ts","../src/handlers/FileLogHandler.ts"],"sourcesContent":["/**\n * @fileoverview Better Logger - Librería completa con todas las características\n * @version 0.3.0\n * @since 2024\n * \n * Punto de entrada principal que proporciona la experiencia completa de Better Logger\n * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,\n * capacidades de exportación y logging remoto.\n * \n * @module @mks2508/better-logger\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Lazy singleton - se inicializa solo cuando se necesita\nlet _logger: Logger | null = null;\n\nfunction getLogger(): Logger {\n if (!_logger) {\n _logger = new Logger();\n }\n return _logger;\n}\n\n/**\n * Clase principal Logger con conjunto completo de características\n * \n * @example\n * // Importación y uso básico\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.preset('cyberpunk'); // Aplicar preset completo\n * logger.info('¡Hola mundo!');\n * \n * @example\n * // Logger con scope para componentes\n * const auth = logger.component('Auth');\n * auth.info('Usuario autenticando...');\n * auth.success('Login exitoso');\n * \n * @example\n * // Logger para APIs con badges\n * const api = logger.api('GraphQL');\n * api.badges(['v2', 'cached']).info('Query ejecutada');\n * \n * @since 0.3.0\n */\nexport { Logger };\n\n/**\n * Instancia singleton del logger lista para usar\n * @default\n * \n * @example\n * // Uso directo sin crear instancia\n * import logger from '@mks2508/better-logger';\n * \n * logger.info('Aplicación iniciada');\n * logger.success('Conexión establecida');\n * logger.warn('Memoria al 80%');\n * logger.error('Fallo en conexión');\n */\nexport default getLogger();\n\n/**\n * Métodos de logging individuales (enlazados al singleton)\n * \n * @example\n * // Importar solo los métodos necesarios\n * import { info, error, success } from '@mks2508/better-logger';\n * \n * info('Proceso iniciado');\n * success('✓ Completado exitosamente');\n * error('Error:', errorDetails);\n * \n * @since 0.3.0\n */\nexport const debug = (...args: any[]) => getLogger().debug(...args);\nexport const info = (...args: any[]) => getLogger().info(...args);\nexport const warn = (...args: any[]) => getLogger().warn(...args);\nexport const error = (...args: any[]) => getLogger().error(...args);\nexport const success = (...args: any[]) => getLogger().success(...args);\nexport const critical = (...args: any[]) => getLogger().critical(...args);\nexport const trace = (...args: any[]) => getLogger().trace(...args);\nexport const table = (data: any, columns?: string[]) => getLogger().table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => getLogger().group(label, collapsed);\nexport const groupEnd = () => getLogger().groupEnd();\nexport const time = (label: string) => getLogger().time(label);\nexport const timeEnd = (label: string) => getLogger().timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => getLogger().setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => getLogger().scope(prefix);\nexport const setVerbosity = (level: Verbosity) => getLogger().setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => getLogger().addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => getLogger().setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => getLogger().setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => getLogger().showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n getLogger().logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n getLogger().logAnimated(message, duration);\nexport const cli = (command: string) => getLogger().cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n/**\n * Utilidades de estilo para crear estilos personalizados de consola\n * \n * @example\n * // Crear estilo personalizado\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const miEstilo = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .rounded('8px')\n * .bold()\n * .build();\n * \n * console.log('%cMensaje estilizado', miEstilo);\n * \n * @example\n * // Usar presets predefinidos\n * console.log('%cÉxito!', stylePresets.success);\n * console.log('%cError!', stylePresets.error);\n * \n * @since 0.3.0\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola\n * \n * @returns {StyleBuilder} Constructor de estilos encadenable\n * \n * @example\n * const estilo = createStyle()\n * .gradient('#667eea', '#764ba2')\n * .color('white')\n * .padding('8px 16px')\n * .rounded('4px')\n * .shadow('0 2px 4px rgba(0,0,0,0.2)')\n * .build();\n * \n * @since 0.3.0\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Presets de estilo predefinidos para casos de uso comunes\n * \n * @constant {Object} stylePresets\n * \n * @example\n * console.log('%cOperación exitosa', stylePresets.success);\n * console.log('%cAdvertencia', stylePresets.warning);\n * console.log('%cError crítico', stylePresets.error);\n * console.log('%cInformación', stylePresets.info);\n * console.log('%cDestacado', stylePresets.accent);\n * \n * @since 0.3.0\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}"],"names":["_logger","getLogger","Logger","index","stylePresets","success","StylePresets","build","error","warning","info","accent","handle","level","message","_args","metadata","timestamp","filename","maxSize","fs","constructor","this","isNode","require","console","warn","args","logEntry","toUpperCase","prefix","slice","map","arg","safeSerialize","location","stackInfo","logLine","formatLogLine","writeToFileNode","isBrowser","writeToFileLocal","log","entry","line","filter","Boolean","join","length","JSON","stringify","String","file","column","statSync","size","backupName","renameSync","appendFileSync","storageKey","existingLogs","localStorage","getItem","newLogs","split","lines","maxLines","Math","floor","setItem","getLogs","readFileSync","clearLogs","writeFileSync","removeItem","handler","addHandler","command","cli","StyleBuilder","critical","debug","label","collapsed","group","groupEnd","duration","logAnimated","svgContent","options","logWithSVG","scope","bannerType","setBannerType","setGlobalPrefix","theme","setTheme","setVerbosity","showBanner","data","columns","table","time","timeEnd","trace"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,160 +1,227 @@
1
- /**
2
- * @fileoverview Better Logger - Librería completa con todas las características
3
- * @version 0.3.0
4
- * @since 2024
5
- *
6
- * Punto de entrada principal que proporciona la experiencia completa de Better Logger
7
- * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,
8
- * capacidades de exportación y logging remoto.
9
- *
10
- * @module @mks2508/better-logger
11
- */
12
- // Main Logger class with all features
13
- import { Logger } from './Logger.js';
14
- // Create singleton instance with all features enabled
15
- const logger = new Logger();
16
- /**
17
- * Clase principal Logger con conjunto completo de características
18
- *
19
- * @example
20
- * // Importación y uso básico
21
- * import { Logger } from '@mks2508/better-logger';
22
- *
23
- * const logger = new Logger();
24
- * logger.preset('cyberpunk'); // Aplicar preset completo
25
- * logger.info('¡Hola mundo!');
26
- *
27
- * @example
28
- * // Logger con scope para componentes
29
- * const auth = logger.component('Auth');
30
- * auth.info('Usuario autenticando...');
31
- * auth.success('Login exitoso');
32
- *
33
- * @example
34
- * // Logger para APIs con badges
35
- * const api = logger.api('GraphQL');
36
- * api.badges(['v2', 'cached']).info('Query ejecutada');
37
- *
38
- * @since 0.3.0
39
- */
40
- export { Logger };
41
- /**
42
- * Instancia singleton del logger lista para usar
43
- * @default
44
- *
45
- * @example
46
- * // Uso directo sin crear instancia
47
- * import logger from '@mks2508/better-logger';
48
- *
49
- * logger.info('Aplicación iniciada');
50
- * logger.success('Conexión establecida');
51
- * logger.warn('Memoria al 80%');
52
- * logger.error('Fallo en conexión');
53
- */
54
- export default logger;
55
- /**
56
- * Métodos de logging individuales (enlazados al singleton)
57
- *
58
- * @example
59
- * // Importar solo los métodos necesarios
60
- * import { info, error, success } from '@mks2508/better-logger';
61
- *
62
- * info('Proceso iniciado');
63
- * success('✓ Completado exitosamente');
64
- * error('Error:', errorDetails);
65
- *
66
- * @since 0.3.0
67
- */
68
- export const debug = (...args) => logger.debug(...args);
69
- export const info = (...args) => logger.info(...args);
70
- export const warn = (...args) => logger.warn(...args);
71
- export const error = (...args) => logger.error(...args);
72
- export const success = (...args) => logger.success(...args);
73
- export const critical = (...args) => logger.critical(...args);
74
- export const trace = (...args) => logger.trace(...args);
75
- export const table = (data, columns) => logger.table(data, columns);
76
- export const group = (label, collapsed) => logger.group(label, collapsed);
77
- export const groupEnd = () => logger.groupEnd();
78
- export const time = (label) => logger.time(label);
79
- export const timeEnd = (label) => logger.timeEnd(label);
80
- export const setGlobalPrefix = (prefix) => logger.setGlobalPrefix(prefix);
81
- export const scope = (prefix) => logger.scope(prefix);
82
- export const setVerbosity = (level) => logger.setVerbosity(level);
83
- export const addHandler = (handler) => logger.addHandler(handler);
84
- export const setTheme = (theme) => logger.setTheme(theme);
85
- export const setBannerType = (bannerType) => logger.setBannerType(bannerType);
86
- export const showBanner = (bannerType) => logger.showBanner(bannerType);
87
- export const logWithSVG = (message, svgContent, options) => logger.logWithSVG(message, svgContent, options);
88
- export const logAnimated = (message, duration) => logger.logAnimated(message, duration);
89
- export const cli = (command) => logger.cli(command);
90
- // Styling utilities
91
- export { StyleBuilder, StylePresets, THEME_PRESETS, THEME_BANNERS, BANNER_VARIANTS } from './styling/index.js';
92
- // Handler exports
93
- export { FileLogHandler, RemoteLogHandler, AnalyticsLogHandler } from './handlers/index.js';
94
- // Constants
95
- export { DEFAULT_CONFIG } from './constants.js';
96
- // Utility exports
97
- export { parseStackTrace, formatTimestamp } from './utils/index.js';
98
- /**
99
- * Utilidades de estilo para crear estilos personalizados de consola
100
- *
101
- * @example
102
- * // Crear estilo personalizado
103
- * import { createStyle, stylePresets } from '@mks2508/better-logger';
104
- *
105
- * const miEstilo = createStyle()
106
- * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')
107
- * .color('white')
108
- * .padding('10px')
109
- * .rounded('8px')
110
- * .bold()
111
- * .build();
112
- *
113
- * console.log('%cMensaje estilizado', miEstilo);
114
- *
115
- * @example
116
- * // Usar presets predefinidos
117
- * console.log('%cÉxito!', stylePresets.success);
118
- * console.log('%cError!', stylePresets.error);
119
- *
120
- * @since 0.3.0
121
- */
122
- import { StyleBuilder, StylePresets } from './styling/index.js';
123
- /**
124
- * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola
125
- *
126
- * @returns {StyleBuilder} Constructor de estilos encadenable
127
- *
128
- * @example
129
- * const estilo = createStyle()
130
- * .gradient('#667eea', '#764ba2')
131
- * .color('white')
132
- * .padding('8px 16px')
133
- * .rounded('4px')
134
- * .shadow('0 2px 4px rgba(0,0,0,0.2)')
135
- * .build();
136
- *
137
- * @since 0.3.0
138
- */
139
- export const createStyle = () => new StyleBuilder();
140
- /**
141
- * Presets de estilo predefinidos para casos de uso comunes
142
- *
143
- * @constant {Object} stylePresets
144
- *
145
- * @example
146
- * console.log('%cOperación exitosa', stylePresets.success);
147
- * console.log('%cAdvertencia', stylePresets.warning);
148
- * console.log('%cError crítico', stylePresets.error);
149
- * console.log('%cInformación', stylePresets.info);
150
- * console.log('%cDestacado', stylePresets.accent);
151
- *
152
- * @since 0.3.0
153
- */
154
- export const stylePresets = {
155
- success: StylePresets.success().build(),
156
- error: StylePresets.error().build(),
157
- warning: StylePresets.warning().build(),
158
- info: StylePresets.info().build(),
159
- accent: StylePresets.accent().build(),
1
+ import { L as Logger } from "./chunks/Logger-CTAaDeZi.js";
2
+ import { B, a, T } from "./chunks/Logger-CTAaDeZi.js";
3
+ import { i as isNode, a as isBrowser, S as StylePresets, b as StyleBuilder } from "./chunks/environment-Bxbnw4pd.js";
4
+ import { D, f, p } from "./chunks/environment-Bxbnw4pd.js";
5
+ import { s as safeSerialize } from "./chunks/formatting-C0riPC5_.js";
6
+ import { R } from "./chunks/RemoteLogHandler-CjWpWZGl.js";
7
+ class FileLogHandler {
8
+ filename;
9
+ maxSize;
10
+ fs;
11
+ // Node.js fs module
12
+ constructor(filename = "app.log", maxSize) {
13
+ this.filename = filename;
14
+ this.maxSize = maxSize;
15
+ if (isNode) {
16
+ try {
17
+ this.fs = require("fs");
18
+ } catch (error2) {
19
+ console.warn("FileLogHandler: Unable to load fs module:", error2);
20
+ }
21
+ }
22
+ }
23
+ handle(level, message, args, metadata) {
24
+ const logEntry = {
25
+ timestamp: metadata.timestamp,
26
+ level: level.toUpperCase(),
27
+ prefix: metadata.prefix,
28
+ message,
29
+ args: args.slice(1).map((arg) => safeSerialize(arg)),
30
+ location: metadata.stackInfo
31
+ };
32
+ const logLine = this.formatLogLine(logEntry);
33
+ if (isNode && this.fs) {
34
+ this.writeToFileNode(logLine);
35
+ } else if (isBrowser) {
36
+ this.writeToFileLocal(logLine);
37
+ } else {
38
+ console.log(`[FILE-LOG] ${logLine}`);
39
+ }
40
+ }
41
+ /**
42
+ * Format log entry as a single line for file storage
43
+ */
44
+ formatLogLine(entry) {
45
+ const parts = [
46
+ entry.timestamp,
47
+ `[${entry.level}]`,
48
+ entry.prefix ? `[${entry.prefix}]` : "",
49
+ entry.message
50
+ ].filter(Boolean);
51
+ let line = parts.join(" ");
52
+ if (entry.args && entry.args.length > 0) {
53
+ line += " " + entry.args.map(
54
+ (arg) => typeof arg === "object" ? JSON.stringify(arg) : String(arg)
55
+ ).join(" ");
56
+ }
57
+ if (entry.location) {
58
+ line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;
59
+ }
60
+ return line;
61
+ }
62
+ /**
63
+ * Write to actual file in Node.js environment
64
+ */
65
+ writeToFileNode(logLine) {
66
+ if (!this.fs) return;
67
+ try {
68
+ if (this.maxSize) {
69
+ try {
70
+ const stats = this.fs.statSync(this.filename);
71
+ if (stats.size > this.maxSize) {
72
+ const backupName = `${this.filename}.bak`;
73
+ this.fs.renameSync(this.filename, backupName);
74
+ }
75
+ } catch (error2) {
76
+ }
77
+ }
78
+ this.fs.appendFileSync(this.filename, logLine + "\n", "utf8");
79
+ } catch (error2) {
80
+ console.error("FileLogHandler: Failed to write to file:", error2);
81
+ }
82
+ }
83
+ /**
84
+ * Write to localStorage in browser environment
85
+ */
86
+ writeToFileLocal(logLine) {
87
+ try {
88
+ const storageKey = `logger_${this.filename}`;
89
+ const existingLogs = localStorage.getItem(storageKey) || "";
90
+ let newLogs = existingLogs;
91
+ if (existingLogs.length > 0) {
92
+ newLogs += "\n";
93
+ }
94
+ newLogs += logLine;
95
+ if (this.maxSize || newLogs.split("\n").length > 1e3) {
96
+ const lines = newLogs.split("\n");
97
+ const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1e3;
98
+ if (lines.length > maxLines) {
99
+ newLogs = lines.slice(-maxLines).join("\n");
100
+ }
101
+ }
102
+ localStorage.setItem(storageKey, newLogs);
103
+ } catch (error2) {
104
+ console.error("FileLogHandler: Failed to write to localStorage:", error2);
105
+ }
106
+ }
107
+ /**
108
+ * Get stored logs (useful for debugging)
109
+ */
110
+ getLogs() {
111
+ if (isNode && this.fs) {
112
+ try {
113
+ return this.fs.readFileSync(this.filename, "utf8");
114
+ } catch (error2) {
115
+ return null;
116
+ }
117
+ } else if (isBrowser) {
118
+ const storageKey = `logger_${this.filename}`;
119
+ return localStorage.getItem(storageKey);
120
+ }
121
+ return null;
122
+ }
123
+ /**
124
+ * Clear stored logs
125
+ */
126
+ clearLogs() {
127
+ if (isNode && this.fs) {
128
+ try {
129
+ this.fs.writeFileSync(this.filename, "", "utf8");
130
+ } catch (error2) {
131
+ console.error("FileLogHandler: Failed to clear file:", error2);
132
+ }
133
+ } else if (isBrowser) {
134
+ const storageKey = `logger_${this.filename}`;
135
+ localStorage.removeItem(storageKey);
136
+ }
137
+ }
138
+ }
139
+ class AnalyticsLogHandler {
140
+ handle(level, message, _args, metadata) {
141
+ if (level === "error" || level === "critical") {
142
+ console.debug("Analytics: Error tracked", {
143
+ level,
144
+ message,
145
+ timestamp: metadata.timestamp
146
+ });
147
+ }
148
+ }
149
+ }
150
+ let _logger = null;
151
+ function getLogger() {
152
+ if (!_logger) {
153
+ _logger = new Logger();
154
+ }
155
+ return _logger;
156
+ }
157
+ const index = getLogger();
158
+ const debug = (...args) => getLogger().debug(...args);
159
+ const info = (...args) => getLogger().info(...args);
160
+ const warn = (...args) => getLogger().warn(...args);
161
+ const error = (...args) => getLogger().error(...args);
162
+ const success = (...args) => getLogger().success(...args);
163
+ const critical = (...args) => getLogger().critical(...args);
164
+ const trace = (...args) => getLogger().trace(...args);
165
+ const table = (data, columns) => getLogger().table(data, columns);
166
+ const group = (label, collapsed) => getLogger().group(label, collapsed);
167
+ const groupEnd = () => getLogger().groupEnd();
168
+ const time = (label) => getLogger().time(label);
169
+ const timeEnd = (label) => getLogger().timeEnd(label);
170
+ const setGlobalPrefix = (prefix) => getLogger().setGlobalPrefix(prefix);
171
+ const scope = (prefix) => getLogger().scope(prefix);
172
+ const setVerbosity = (level) => getLogger().setVerbosity(level);
173
+ const addHandler = (handler) => getLogger().addHandler(handler);
174
+ const setTheme = (theme) => getLogger().setTheme(theme);
175
+ const setBannerType = (bannerType) => getLogger().setBannerType(bannerType);
176
+ const showBanner = (bannerType) => getLogger().showBanner(bannerType);
177
+ const logWithSVG = (message, svgContent, options) => getLogger().logWithSVG(message, svgContent, options);
178
+ const logAnimated = (message, duration) => getLogger().logAnimated(message, duration);
179
+ const cli = (command) => getLogger().cli(command);
180
+ const createStyle = () => new StyleBuilder();
181
+ const stylePresets = {
182
+ success: StylePresets.success().build(),
183
+ error: StylePresets.error().build(),
184
+ warning: StylePresets.warning().build(),
185
+ info: StylePresets.info().build(),
186
+ accent: StylePresets.accent().build()
160
187
  };
188
+ export {
189
+ AnalyticsLogHandler,
190
+ B as BANNER_VARIANTS,
191
+ D as DEFAULT_CONFIG,
192
+ FileLogHandler,
193
+ Logger,
194
+ R as RemoteLogHandler,
195
+ StyleBuilder,
196
+ StylePresets,
197
+ a as THEME_BANNERS,
198
+ T as THEME_PRESETS,
199
+ addHandler,
200
+ cli,
201
+ createStyle,
202
+ critical,
203
+ debug,
204
+ index as default,
205
+ error,
206
+ f as formatTimestamp,
207
+ group,
208
+ groupEnd,
209
+ info,
210
+ logAnimated,
211
+ logWithSVG,
212
+ p as parseStackTrace,
213
+ scope,
214
+ setBannerType,
215
+ setGlobalPrefix,
216
+ setTheme,
217
+ setVerbosity,
218
+ showBanner,
219
+ stylePresets,
220
+ success,
221
+ table,
222
+ time,
223
+ timeEnd,
224
+ trace,
225
+ warn
226
+ };
227
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/handlers/FileLogHandler.ts","../src/handlers/AnalyticsLogHandler.ts","../src/index.ts"],"sourcesContent":["/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview Better Logger - Librería completa con todas las características\n * @version 0.3.0\n * @since 2024\n * \n * Punto de entrada principal que proporciona la experiencia completa de Better Logger\n * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,\n * capacidades de exportación y logging remoto.\n * \n * @module @mks2508/better-logger\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Create singleton instance with all features enabled\nconst logger = new Logger();\n\n/**\n * Clase principal Logger con conjunto completo de características\n * \n * @example\n * // Importación y uso básico\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.preset('cyberpunk'); // Aplicar preset completo\n * logger.info('¡Hola mundo!');\n * \n * @example\n * // Logger con scope para componentes\n * const auth = logger.component('Auth');\n * auth.info('Usuario autenticando...');\n * auth.success('Login exitoso');\n * \n * @example\n * // Logger para APIs con badges\n * const api = logger.api('GraphQL');\n * api.badges(['v2', 'cached']).info('Query ejecutada');\n * \n * @since 0.3.0\n */\nexport { Logger };\n\n/**\n * Instancia singleton del logger lista para usar\n * @default\n * \n * @example\n * // Uso directo sin crear instancia\n * import logger from '@mks2508/better-logger';\n * \n * logger.info('Aplicación iniciada');\n * logger.success('Conexión establecida');\n * logger.warn('Memoria al 80%');\n * logger.error('Fallo en conexión');\n */\nexport default logger;\n\n/**\n * Métodos de logging individuales (enlazados al singleton)\n * \n * @example\n * // Importar solo los métodos necesarios\n * import { info, error, success } from '@mks2508/better-logger';\n * \n * info('Proceso iniciado');\n * success('✓ Completado exitosamente');\n * error('Error:', errorDetails);\n * \n * @since 0.3.0\n */\nexport const debug = (...args: any[]) => logger.debug(...args);\nexport const info = (...args: any[]) => logger.info(...args);\nexport const warn = (...args: any[]) => logger.warn(...args);\nexport const error = (...args: any[]) => logger.error(...args);\nexport const success = (...args: any[]) => logger.success(...args);\nexport const critical = (...args: any[]) => logger.critical(...args);\nexport const trace = (...args: any[]) => logger.trace(...args);\nexport const table = (data: any, columns?: string[]) => logger.table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => logger.group(label, collapsed);\nexport const groupEnd = () => logger.groupEnd();\nexport const time = (label: string) => logger.time(label);\nexport const timeEnd = (label: string) => logger.timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => logger.setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => logger.scope(prefix);\nexport const setVerbosity = (level: Verbosity) => logger.setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => logger.addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => logger.setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => logger.setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => logger.showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n logger.logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n logger.logAnimated(message, duration);\nexport const cli = (command: string) => logger.cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n/**\n * Utilidades de estilo para crear estilos personalizados de consola\n * \n * @example\n * // Crear estilo personalizado\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const miEstilo = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .rounded('8px')\n * .bold()\n * .build();\n * \n * console.log('%cMensaje estilizado', miEstilo);\n * \n * @example\n * // Usar presets predefinidos\n * console.log('%cÉxito!', stylePresets.success);\n * console.log('%cError!', stylePresets.error);\n * \n * @since 0.3.0\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola\n * \n * @returns {StyleBuilder} Constructor de estilos encadenable\n * \n * @example\n * const estilo = createStyle()\n * .gradient('#667eea', '#764ba2')\n * .color('white')\n * .padding('8px 16px')\n * .rounded('4px')\n * .shadow('0 2px 4px rgba(0,0,0,0.2)')\n * .build();\n * \n * @since 0.3.0\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Presets de estilo predefinidos para casos de uso comunes\n * \n * @constant {Object} stylePresets\n * \n * @example\n * console.log('%cOperación exitosa', stylePresets.success);\n * console.log('%cAdvertencia', stylePresets.warning);\n * console.log('%cError crítico', stylePresets.error);\n * console.log('%cInformación', stylePresets.info);\n * console.log('%cDestacado', stylePresets.accent);\n * \n * @since 0.3.0\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};"],"names":["error","StyleBuilder","StylePresets"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/handlers/FileLogHandler.ts","../src/handlers/AnalyticsLogHandler.ts","../src/index.ts"],"sourcesContent":["/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview Better Logger - Librería completa con todas las características\n * @version 0.3.0\n * @since 2024\n * \n * Punto de entrada principal que proporciona la experiencia completa de Better Logger\n * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,\n * capacidades de exportación y logging remoto.\n * \n * @module @mks2508/better-logger\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Lazy singleton - se inicializa solo cuando se necesita\nlet _logger: Logger | null = null;\n\nfunction getLogger(): Logger {\n if (!_logger) {\n _logger = new Logger();\n }\n return _logger;\n}\n\n/**\n * Clase principal Logger con conjunto completo de características\n * \n * @example\n * // Importación y uso básico\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.preset('cyberpunk'); // Aplicar preset completo\n * logger.info('¡Hola mundo!');\n * \n * @example\n * // Logger con scope para componentes\n * const auth = logger.component('Auth');\n * auth.info('Usuario autenticando...');\n * auth.success('Login exitoso');\n * \n * @example\n * // Logger para APIs con badges\n * const api = logger.api('GraphQL');\n * api.badges(['v2', 'cached']).info('Query ejecutada');\n * \n * @since 0.3.0\n */\nexport { Logger };\n\n/**\n * Instancia singleton del logger lista para usar\n * @default\n * \n * @example\n * // Uso directo sin crear instancia\n * import logger from '@mks2508/better-logger';\n * \n * logger.info('Aplicación iniciada');\n * logger.success('Conexión establecida');\n * logger.warn('Memoria al 80%');\n * logger.error('Fallo en conexión');\n */\nexport default getLogger();\n\n/**\n * Métodos de logging individuales (enlazados al singleton)\n * \n * @example\n * // Importar solo los métodos necesarios\n * import { info, error, success } from '@mks2508/better-logger';\n * \n * info('Proceso iniciado');\n * success('✓ Completado exitosamente');\n * error('Error:', errorDetails);\n * \n * @since 0.3.0\n */\nexport const debug = (...args: any[]) => getLogger().debug(...args);\nexport const info = (...args: any[]) => getLogger().info(...args);\nexport const warn = (...args: any[]) => getLogger().warn(...args);\nexport const error = (...args: any[]) => getLogger().error(...args);\nexport const success = (...args: any[]) => getLogger().success(...args);\nexport const critical = (...args: any[]) => getLogger().critical(...args);\nexport const trace = (...args: any[]) => getLogger().trace(...args);\nexport const table = (data: any, columns?: string[]) => getLogger().table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => getLogger().group(label, collapsed);\nexport const groupEnd = () => getLogger().groupEnd();\nexport const time = (label: string) => getLogger().time(label);\nexport const timeEnd = (label: string) => getLogger().timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => getLogger().setGlobalPrefix(prefix);\nexport const scope = (prefix: string) => getLogger().scope(prefix);\nexport const setVerbosity = (level: Verbosity) => getLogger().setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => getLogger().addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => getLogger().setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => getLogger().setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => getLogger().showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n getLogger().logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n getLogger().logAnimated(message, duration);\nexport const cli = (command: string) => getLogger().cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp\n} from './utils/index.js';\n\n/**\n * Utilidades de estilo para crear estilos personalizados de consola\n * \n * @example\n * // Crear estilo personalizado\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const miEstilo = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .rounded('8px')\n * .bold()\n * .build();\n * \n * console.log('%cMensaje estilizado', miEstilo);\n * \n * @example\n * // Usar presets predefinidos\n * console.log('%cÉxito!', stylePresets.success);\n * console.log('%cError!', stylePresets.error);\n * \n * @since 0.3.0\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola\n * \n * @returns {StyleBuilder} Constructor de estilos encadenable\n * \n * @example\n * const estilo = createStyle()\n * .gradient('#667eea', '#764ba2')\n * .color('white')\n * .padding('8px 16px')\n * .rounded('4px')\n * .shadow('0 2px 4px rgba(0,0,0,0.2)')\n * .build();\n * \n * @since 0.3.0\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Presets de estilo predefinidos para casos de uso comunes\n * \n * @constant {Object} stylePresets\n * \n * @example\n * console.log('%cOperación exitosa', stylePresets.success);\n * console.log('%cAdvertencia', stylePresets.warning);\n * console.log('%cError crítico', stylePresets.error);\n * console.log('%cInformación', stylePresets.info);\n * console.log('%cDestacado', stylePresets.accent);\n * \n * @since 0.3.0\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};"],"names":["error","StyleBuilder","StylePresets"],"mappings":"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"}
package/dist/styling.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-D_p3xnbq.js"),t=require("./chunks/environment-Dm66zOML.js");class StyledLogger extends e.Logger{logWithSVG(e,t,s={}){super.logWithSVG(e,t,s)}logAnimated(e,t=3){super.logAnimated(e,t)}showBanner(e){super.showBanner(e)}setBannerType(e){super.setBannerType(e)}setTheme(e){super.setTheme(e)}}const s=new StyledLogger,r={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()},o=Object.keys(e.THEME_PRESETS),n=Object.keys(e.BANNER_VARIANTS);exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.StyledLogger=StyledLogger,exports.bannerTypes=n,exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>s.critical(...e),exports.debug=(...e)=>s.debug(...e),exports.default=s,exports.error=(...e)=>s.error(...e),exports.group=(e,t)=>s.group(e,t),exports.groupEnd=()=>s.groupEnd(),exports.info=(...e)=>s.info(...e),exports.logAnimated=(e,t)=>s.logAnimated(e,t),exports.logWithSVG=(e,t,r)=>s.logWithSVG(e,t,r),exports.scope=e=>s.scope(e),exports.setBannerType=e=>s.setBannerType(e),exports.setGlobalPrefix=e=>s.setGlobalPrefix(e),exports.setTheme=e=>s.setTheme(e),exports.setVerbosity=e=>s.setVerbosity(e),exports.showBanner=e=>s.showBanner(e),exports.showInitBanner=t=>{e.displayInitBanner(t)},exports.stylePresets=r,exports.success=(...e)=>s.success(...e),exports.table=(e,t)=>s.table(e,t),exports.themes=o,exports.time=e=>s.time(e),exports.timeEnd=e=>s.timeEnd(e),exports.trace=(...e)=>s.trace(...e),exports.warn=(...e)=>s.warn(...e);
1
+ "use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-D8pK7XXt.js"),t=require("./chunks/environment-Dm66zOML.js");class StyledLogger extends e.Logger{logWithSVG(e,t,s={}){super.logWithSVG(e,t,s)}logAnimated(e,t=3){super.logAnimated(e,t)}showBanner(e){super.showBanner(e)}setBannerType(e){super.setBannerType(e)}setTheme(e){super.setTheme(e)}}const s=new StyledLogger,r={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()},o=Object.keys(e.THEME_PRESETS),n=Object.keys(e.BANNER_VARIANTS);exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.StyledLogger=StyledLogger,exports.bannerTypes=n,exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>s.critical(...e),exports.debug=(...e)=>s.debug(...e),exports.default=s,exports.error=(...e)=>s.error(...e),exports.group=(e,t)=>s.group(e,t),exports.groupEnd=()=>s.groupEnd(),exports.info=(...e)=>s.info(...e),exports.logAnimated=(e,t)=>s.logAnimated(e,t),exports.logWithSVG=(e,t,r)=>s.logWithSVG(e,t,r),exports.scope=e=>s.scope(e),exports.setBannerType=e=>s.setBannerType(e),exports.setGlobalPrefix=e=>s.setGlobalPrefix(e),exports.setTheme=e=>s.setTheme(e),exports.setVerbosity=e=>s.setVerbosity(e),exports.showBanner=e=>s.showBanner(e),exports.showInitBanner=t=>{e.displayInitBanner(t)},exports.stylePresets=r,exports.success=(...e)=>s.success(...e),exports.table=(e,t)=>s.table(e,t),exports.themes=o,exports.time=e=>s.time(e),exports.timeEnd=e=>s.timeEnd(e),exports.trace=(...e)=>s.trace(...e),exports.warn=(...e)=>s.warn(...e);
2
2
  //# sourceMappingURL=styling.cjs.map
package/dist/styling.js CHANGED
@@ -1,5 +1,5 @@
1
- import { L as Logger, T as THEME_PRESETS, B as BANNER_VARIANTS, d as displayInitBanner } from "./chunks/Logger-Crw1woqR.js";
2
- import { a } from "./chunks/Logger-Crw1woqR.js";
1
+ import { L as Logger, T as THEME_PRESETS, B as BANNER_VARIANTS, d as displayInitBanner } from "./chunks/Logger-CTAaDeZi.js";
2
+ import { a } from "./chunks/Logger-CTAaDeZi.js";
3
3
  import { S as StylePresets, b as StyleBuilder } from "./chunks/environment-Bxbnw4pd.js";
4
4
  class StyledLogger extends Logger {
5
5
  /**
@@ -156,6 +156,14 @@ export declare class Logger {
156
156
  * @since 0.3.0
157
157
  */
158
158
  cleanup(): void;
159
+ /**
160
+ * Factory method para crear loggers con scope evitando dependencias circulares
161
+ * @private
162
+ * @param {string} type - Tipo de logger ('scope' | 'api' | 'component')
163
+ * @param {string} name - Nombre del scope
164
+ * @returns {Promise<any>} Logger con scope
165
+ */
166
+ private createScopedLogger;
159
167
  /**
160
168
  * Aplica un preset inteligente - funciona perfectamente sin configuración
161
169
  *
@@ -649,15 +657,11 @@ export declare class Logger {
649
657
  */
650
658
  cli(command: string): Promise<void>;
651
659
  }
652
- /**
653
- * Instancia singleton del logger con configuración por defecto
654
- * @constant {Logger}
655
- */
656
- declare const defaultLogger: Logger;
657
- export default defaultLogger;
660
+ declare const _default: Logger;
661
+ export default _default;
658
662
  /**
659
663
  * Métodos individuales exportados para conveniencia
660
- * @description Todos los métodos están correctamente enlazados al singleton
664
+ * @description Todos los métodos están correctamente enlazados al singleton lazy
661
665
  * @since 0.3.0
662
666
  */
663
667
  export declare const debug: (...args: any[]) => void;