@mks2508/better-logger 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/.claude/settings.local.json +2 -1
  2. package/dist/Logger.d.ts.map +1 -0
  3. package/dist/ScopedLogger.d.ts.map +1 -0
  4. package/dist/chunks/{Logger-D8pK7XXt.js → Logger-C9zTFYBh.js} +2 -2
  5. package/dist/chunks/Logger-C9zTFYBh.js.map +1 -0
  6. package/dist/chunks/{Logger-CTAaDeZi.js → Logger-Th9SfADL.js} +3 -3
  7. package/dist/chunks/Logger-Th9SfADL.js.map +1 -0
  8. package/dist/chunks/{ScopedLogger-D-7q8uVP.js → ScopedLogger-HgV_J-ug.js} +2 -2
  9. package/dist/chunks/{ScopedLogger-D-7q8uVP.js.map → ScopedLogger-HgV_J-ug.js.map} +1 -1
  10. package/dist/chunks/{ScopedLogger-hS0qSkZD.js → ScopedLogger-uAAeJkfA.js} +2 -2
  11. package/dist/chunks/{ScopedLogger-hS0qSkZD.js.map → ScopedLogger-uAAeJkfA.js.map} +1 -1
  12. package/dist/chunks/environment-5I5unY89.js +4 -0
  13. package/dist/chunks/environment-5I5unY89.js.map +1 -0
  14. package/dist/chunks/{environment-Bxbnw4pd.js → environment-wXLQvk5g.js} +103 -11
  15. package/dist/chunks/environment-wXLQvk5g.js.map +1 -0
  16. package/dist/chunks/formatting-CiFnwe1I.js +2 -0
  17. package/dist/chunks/formatting-CiFnwe1I.js.map +1 -0
  18. package/dist/chunks/formatting-DIhpRCCk.js +380 -0
  19. package/dist/chunks/formatting-DIhpRCCk.js.map +1 -0
  20. package/dist/cli/CommandProcessor.d.ts.map +1 -0
  21. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
  22. package/dist/cli/commands/ExportCommand.d.ts.map +1 -0
  23. package/dist/cli/commands/HistoryCommand.d.ts.map +1 -0
  24. package/dist/cli/commands/StatusCommand.d.ts.map +1 -0
  25. package/dist/cli/commands/ThemeCommand.d.ts.map +1 -0
  26. package/dist/cli/help.d.ts.map +1 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/{types/constants.d.ts → constants.d.ts} +108 -0
  29. package/dist/constants.d.ts.map +1 -0
  30. package/dist/core.cjs +1 -1
  31. package/dist/core.cjs.map +1 -1
  32. package/dist/core.d.ts +127 -0
  33. package/dist/core.d.ts.map +1 -0
  34. package/dist/core.js +6 -5
  35. package/dist/core.js.map +1 -1
  36. package/dist/example.d.ts.map +1 -0
  37. package/dist/exports-module.d.ts.map +1 -0
  38. package/dist/exports.cjs +1 -1
  39. package/dist/exports.js +2 -2
  40. package/dist/handlers/AnalyticsLogHandler.d.ts.map +1 -0
  41. package/dist/handlers/ExportLogHandler.d.ts.map +1 -0
  42. package/dist/handlers/FileLogHandler.d.ts.map +1 -0
  43. package/dist/handlers/RemoteLogHandler.d.ts.map +1 -0
  44. package/dist/handlers/index.d.ts.map +1 -0
  45. package/dist/index.cjs +1 -1
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.d.ts +124 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +25 -5
  50. package/dist/index.js.map +1 -1
  51. package/dist/main.d.ts.map +1 -0
  52. package/dist/styling/LogStyleBuilder.d.ts.map +1 -0
  53. package/dist/styling/SemanticStyles.d.ts.map +1 -0
  54. package/dist/styling/SmartPresets.d.ts.map +1 -0
  55. package/dist/styling/StyleBuilder.d.ts.map +1 -0
  56. package/dist/styling/banners.d.ts.map +1 -0
  57. package/dist/styling/index.d.ts.map +1 -0
  58. package/dist/styling/themes.d.ts.map +1 -0
  59. package/dist/styling-module.d.ts.map +1 -0
  60. package/dist/styling.cjs +1 -1
  61. package/dist/styling.js +3 -3
  62. package/dist/types/core.d.ts +229 -122
  63. package/dist/types/core.d.ts.map +1 -1
  64. package/dist/types/handlers.d.ts.map +1 -0
  65. package/dist/types/index.d.ts +4 -119
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/dist/utils/ansi-colors.d.ts +156 -0
  68. package/dist/utils/ansi-colors.d.ts.map +1 -0
  69. package/dist/utils/environment.d.ts.map +1 -0
  70. package/dist/{types/utils → utils}/formatting.d.ts +22 -1
  71. package/dist/utils/formatting.d.ts.map +1 -0
  72. package/dist/{types/utils → utils}/index.d.ts +1 -0
  73. package/dist/utils/index.d.ts.map +1 -0
  74. package/dist/utils/opentui-detection.d.ts.map +1 -0
  75. package/dist/utils/output.d.ts.map +1 -0
  76. package/dist/utils/stackTrace.d.ts.map +1 -0
  77. package/dist/utils/timestamps.d.ts.map +1 -0
  78. package/package.json +1 -1
  79. package/src/Logger.ts +3 -6
  80. package/src/constants.ts +131 -1
  81. package/src/core.ts +11 -7
  82. package/src/handlers/ExportLogHandler.ts +2 -1
  83. package/src/index.ts +30 -2
  84. package/src/styling/SemanticStyles.ts +1 -1
  85. package/src/types/core.ts +15 -1
  86. package/src/types/index.ts +1 -0
  87. package/src/utils/ansi-colors.ts +333 -0
  88. package/src/utils/formatting.ts +196 -6
  89. package/src/utils/index.ts +23 -11
  90. package/vite.config.ts +1 -1
  91. package/dist/chunks/Logger-CTAaDeZi.js.map +0 -1
  92. package/dist/chunks/Logger-D8pK7XXt.js.map +0 -1
  93. package/dist/chunks/environment-Bxbnw4pd.js.map +0 -1
  94. package/dist/chunks/environment-Dm66zOML.js +0 -4
  95. package/dist/chunks/environment-Dm66zOML.js.map +0 -1
  96. package/dist/chunks/formatting-C0riPC5_.js +0 -95
  97. package/dist/chunks/formatting-C0riPC5_.js.map +0 -1
  98. package/dist/chunks/formatting-DNCAV66-.js +0 -2
  99. package/dist/chunks/formatting-DNCAV66-.js.map +0 -1
  100. package/dist/types/Logger.d.ts.map +0 -1
  101. package/dist/types/ScopedLogger.d.ts.map +0 -1
  102. package/dist/types/cli/CommandProcessor.d.ts.map +0 -1
  103. package/dist/types/cli/commands/ConfigCommand.d.ts.map +0 -1
  104. package/dist/types/cli/commands/ExportCommand.d.ts.map +0 -1
  105. package/dist/types/cli/commands/HistoryCommand.d.ts.map +0 -1
  106. package/dist/types/cli/commands/StatusCommand.d.ts.map +0 -1
  107. package/dist/types/cli/commands/ThemeCommand.d.ts.map +0 -1
  108. package/dist/types/cli/help.d.ts.map +0 -1
  109. package/dist/types/cli/index.d.ts.map +0 -1
  110. package/dist/types/constants.d.ts.map +0 -1
  111. package/dist/types/example.d.ts.map +0 -1
  112. package/dist/types/exports-module.d.ts.map +0 -1
  113. package/dist/types/handlers/AnalyticsLogHandler.d.ts.map +0 -1
  114. package/dist/types/handlers/ExportLogHandler.d.ts.map +0 -1
  115. package/dist/types/handlers/FileLogHandler.d.ts.map +0 -1
  116. package/dist/types/handlers/RemoteLogHandler.d.ts.map +0 -1
  117. package/dist/types/handlers/index.d.ts.map +0 -1
  118. package/dist/types/main.d.ts.map +0 -1
  119. package/dist/types/styling/LogStyleBuilder.d.ts.map +0 -1
  120. package/dist/types/styling/SemanticStyles.d.ts.map +0 -1
  121. package/dist/types/styling/SmartPresets.d.ts.map +0 -1
  122. package/dist/types/styling/StyleBuilder.d.ts.map +0 -1
  123. package/dist/types/styling/banners.d.ts.map +0 -1
  124. package/dist/types/styling/index.d.ts.map +0 -1
  125. package/dist/types/styling/themes.d.ts.map +0 -1
  126. package/dist/types/styling-module.d.ts.map +0 -1
  127. package/dist/types/types/core.d.ts +0 -221
  128. package/dist/types/types/core.d.ts.map +0 -1
  129. package/dist/types/types/handlers.d.ts.map +0 -1
  130. package/dist/types/types/index.d.ts +0 -7
  131. package/dist/types/types/index.d.ts.map +0 -1
  132. package/dist/types/utils/environment.d.ts.map +0 -1
  133. package/dist/types/utils/formatting.d.ts.map +0 -1
  134. package/dist/types/utils/index.d.ts.map +0 -1
  135. package/dist/types/utils/opentui-detection.d.ts.map +0 -1
  136. package/dist/types/utils/output.d.ts.map +0 -1
  137. package/dist/types/utils/stackTrace.d.ts.map +0 -1
  138. package/dist/types/utils/timestamps.d.ts.map +0 -1
  139. /package/dist/{types/Logger.d.ts → Logger.d.ts} +0 -0
  140. /package/dist/{types/ScopedLogger.d.ts → ScopedLogger.d.ts} +0 -0
  141. /package/dist/{types/cli → cli}/CommandProcessor.d.ts +0 -0
  142. /package/dist/{types/cli → cli}/commands/ConfigCommand.d.ts +0 -0
  143. /package/dist/{types/cli → cli}/commands/ExportCommand.d.ts +0 -0
  144. /package/dist/{types/cli → cli}/commands/HistoryCommand.d.ts +0 -0
  145. /package/dist/{types/cli → cli}/commands/StatusCommand.d.ts +0 -0
  146. /package/dist/{types/cli → cli}/commands/ThemeCommand.d.ts +0 -0
  147. /package/dist/{types/cli → cli}/help.d.ts +0 -0
  148. /package/dist/{types/cli → cli}/index.d.ts +0 -0
  149. /package/dist/{types/example.d.ts → example.d.ts} +0 -0
  150. /package/dist/{types/exports-module.d.ts → exports-module.d.ts} +0 -0
  151. /package/dist/{types/handlers → handlers}/AnalyticsLogHandler.d.ts +0 -0
  152. /package/dist/{types/handlers → handlers}/ExportLogHandler.d.ts +0 -0
  153. /package/dist/{types/handlers → handlers}/FileLogHandler.d.ts +0 -0
  154. /package/dist/{types/handlers → handlers}/RemoteLogHandler.d.ts +0 -0
  155. /package/dist/{types/handlers → handlers}/index.d.ts +0 -0
  156. /package/dist/{types/main.d.ts → main.d.ts} +0 -0
  157. /package/dist/{types/styling → styling}/LogStyleBuilder.d.ts +0 -0
  158. /package/dist/{types/styling → styling}/SemanticStyles.d.ts +0 -0
  159. /package/dist/{types/styling → styling}/SmartPresets.d.ts +0 -0
  160. /package/dist/{types/styling → styling}/StyleBuilder.d.ts +0 -0
  161. /package/dist/{types/styling → styling}/banners.d.ts +0 -0
  162. /package/dist/{types/styling → styling}/index.d.ts +0 -0
  163. /package/dist/{types/styling → styling}/themes.d.ts +0 -0
  164. /package/dist/{types/styling-module.d.ts → styling-module.d.ts} +0 -0
  165. /package/dist/types/{types/handlers.d.ts → handlers.d.ts} +0 -0
  166. /package/dist/{types/utils → utils}/environment.d.ts +0 -0
  167. /package/dist/{types/utils → utils}/opentui-detection.d.ts +0 -0
  168. /package/dist/{types/utils → utils}/output.d.ts +0 -0
  169. /package/dist/{types/utils → utils}/stackTrace.d.ts +0 -0
  170. /package/dist/{types/utils → utils}/timestamps.d.ts +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ScopedLogger-D-7q8uVP.js","sources":["../../src/ScopedLogger.ts"],"sourcesContent":["/**\n * @fileoverview ScopedLogger con badges y logging contextual\n * @version 0.3.0\n * @since 2024\n * \n * Proporciona loggers especializados con contexto, badges automáticos\n * y características avanzadas para componentes y APIs.\n */\n\nimport { Logger } from './Logger.js';\nimport type { LoggerConfig, LogLevel, Verbosity, BannerType, StyleOptions, ILogHandler } from './types/index.js';\n\n/**\n * Logger con scope mejorado con badges y API simplificada\n * \n * @class ScopedLogger\n * @extends Logger\n * @description Logger contextual que añade prefijos y badges automáticamente\n * \n * @example\n * const dbLogger = logger.scope('Database');\n * dbLogger.info('Conectando...'); // [Database] Conectando...\n * \n * // Con badges personalizados\n * dbLogger.badge('SLOW').warn('Query lenta detectada');\n * // [SLOW] [Database] Query lenta detectada\n * \n * @since 0.3.0\n */\nexport class ScopedLogger extends Logger {\n private parentLogger: Logger;\n private scopeName: string;\n private badgeList: string[] = [];\n private contextStack: string[] = [];\n\n constructor(parentLogger: Logger, scopeName: string, config?: Partial<LoggerConfig>) {\n // Initialize with parent's config plus any overrides\n super({ ...parentLogger.getConfig(), ...config });\n this.parentLogger = parentLogger;\n this.scopeName = scopeName;\n \n // Inherit parent's handlers\n const parentHandlers = parentLogger.getHandlers();\n parentHandlers.forEach(handler => this.addHandler(handler));\n }\n\n /**\n * Añade múltiples badges a este logger con scope\n * \n * @param {string[]} badges - Array de badges a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const api = logger.scope('API');\n * api.badges(['v2', 'beta', 'cached'])\n * .info('Respuesta desde caché');\n * // [v2] [beta] [cached] [API] Respuesta desde caché\n * \n * @since 0.3.0\n */\n badges(badges: string[]): ScopedLogger {\n this.badgeList = [...badges];\n return this;\n }\n\n /**\n * Añade un badge individual\n * \n * @param {string} badge - Badge a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * dbLogger.badge('SLOW').warn('Query tardó 3s');\n * // [SLOW] [Database] Query tardó 3s\n * \n * @since 0.3.0\n */\n badge(badge: string): ScopedLogger {\n if (!this.badgeList.includes(badge)) {\n this.badgeList.push(badge);\n }\n return this;\n }\n\n /**\n * Elimina todos los badges\n * \n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * api.clearBadges().info('Sin badges');\n * // [API] Sin badges\n * \n * @since 0.3.0\n */\n clearBadges(): ScopedLogger {\n this.badgeList = [];\n return this;\n }\n\n /**\n * Establece un preset de estilo para este logger con scope\n * \n * @param {string} presetName - Nombre del preset a aplicar\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const errorLogger = logger.scope('ErrorHandler')\n * .style('cyberpunk');\n * \n * @since 0.3.0\n */\n style(presetName: string): ScopedLogger {\n this.setTheme(presetName as any); // Will be updated when we implement presets\n return this;\n }\n\n /**\n * Crea un contexto temporal que se limpia automáticamente\n * \n * @param {string} contextName - Nombre del contexto\n * @returns {ContextLogger} Logger con contexto temporal\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // Contexto temporal para una operación\n * db.context('Migration').run(() => {\n * db.info('Iniciando migración');\n * db.success('Tablas creadas');\n * });\n * // Contexto automáticamente limpiado\n * \n * @since 0.3.0\n */\n context(contextName: string): ContextLogger {\n return new ContextLogger(this, contextName);\n }\n\n /**\n * Sobrescribe el logging principal para incluir badges\n * @protected\n * @param {LogLevel} level - Nivel del log\n * @param {...any} args - Argumentos del log\n */\n protected log(level: LogLevel, ...args: any[]): void {\n // Build the enhanced message with badges\n const badges = this.getBadgeString();\n const scopePrefix = this.getScopePrefix();\n \n let enhancedMessage = '';\n if (badges) enhancedMessage += badges + ' ';\n if (scopePrefix) enhancedMessage += `[${scopePrefix}] `;\n \n if (args.length > 0) {\n enhancedMessage += String(args[0]);\n // Replace the first argument with our enhanced message\n args[0] = enhancedMessage;\n }\n\n // Call parent's log method\n super.log(level, ...args);\n }\n\n /**\n * Obtiene la cadena de badges formateada\n * @private\n * @returns {string} Badges formateados como [BADGE1][BADGE2]\n */\n private getBadgeString(): string {\n if (this.badgeList.length === 0) return '';\n return this.badgeList.map(badge => `[${badge}]`).join('');\n }\n\n /**\n * Obtiene el prefijo del scope (incluye stack de contexto)\n * @private\n * @returns {string} Prefijo completo con contextos\n */\n private getScopePrefix(): string {\n const parts = [this.scopeName, ...this.contextStack].filter(Boolean);\n return parts.join(':');\n }\n\n /**\n * Método interno para añadir contexto\n * @internal\n */\n _pushContext(context: string): void {\n this.contextStack.push(context);\n }\n\n /**\n * Método interno para eliminar contexto\n * @internal\n */\n _popContext(): void {\n this.contextStack.pop();\n }\n}\n\n/**\n * Logger específico para APIs con badges comunes de API\n * \n * @class APILogger\n * @extends ScopedLogger\n * @description Logger especializado para endpoints y servicios API\n * \n * @example\n * const api = logger.api('REST');\n * api.info('GET /users');\n * // [API] [REST] GET /users\n * \n * api.slow('Query lenta', 3500);\n * // [API] [SLOW] [REST] Query lenta (3500ms)\n * \n * @since 0.3.0\n */\nexport class APILogger extends ScopedLogger {\n constructor(parentLogger: Logger, apiName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, `API:${apiName}`, config);\n this.badge('API');\n }\n\n /**\n * Registra operaciones lentas\n * \n * @param {string} message - Mensaje sobre la operación lenta\n * @param {number} duration - Duración en milisegundos (opcional)\n * \n * @example\n * api.slow('Query compleja', 5000);\n * api.slow('Procesamiento pesado');\n * \n * @since 0.3.0\n */\n slow(message: string, duration?: number): void {\n this.badge('SLOW');\n const msg = duration ? `${message} (${duration}ms)` : message;\n this.warn(msg);\n }\n\n /**\n * Registra límites de tasa alcanzados\n * \n * @param {string} message - Mensaje sobre el límite\n * \n * @example\n * api.rateLimit('Límite excedido: 100 req/min');\n * \n * @since 0.3.0\n */\n rateLimit(message: string): void {\n this.badge('RATE_LIMIT');\n this.warn(message);\n }\n\n /**\n * Registra problemas de autenticación\n * \n * @param {string} message - Mensaje de autenticación\n * \n * @example\n * api.auth('Token inválido o expirado');\n * api.auth('Credenciales incorrectas');\n * \n * @since 0.3.0\n */\n auth(message: string): void {\n this.badge('AUTH');\n this.error(message);\n }\n\n /**\n * Registra advertencias de deprecación\n * \n * @param {string} message - Mensaje de deprecación\n * \n * @example\n * api.deprecated('Este endpoint será eliminado en v2.0');\n * api.deprecated('Usar /v2/users en lugar de /users');\n * \n * @since 0.3.0\n */\n deprecated(message: string): void {\n this.badge('DEPRECATED');\n this.warn(message);\n }\n}\n\n/**\n * Logger específico para componentes de UI\n * \n * @class ComponentLogger\n * @extends ScopedLogger\n * @description Logger especializado para componentes con eventos de ciclo de vida\n * \n * @example\n * const authForm = logger.component('AuthForm');\n * authForm.lifecycle('mounted');\n * authForm.stateChange('idle', 'loading');\n * \n * @since 0.3.0\n */\nexport class ComponentLogger extends ScopedLogger {\n constructor(parentLogger: Logger, componentName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, componentName, config);\n this.badge('COMPONENT');\n }\n\n /**\n * Registra eventos del ciclo de vida del componente\n * \n * @param {string} event - Nombre del evento (mounted, unmounted, updated, etc)\n * @param {string} message - Mensaje adicional (opcional)\n * \n * @example\n * component.lifecycle('mounted', 'Componente listo');\n * component.lifecycle('beforeDestroy');\n * \n * @since 0.3.0\n */\n lifecycle(event: string, message?: string): void {\n this.badge('LIFECYCLE');\n const msg = message ? `${event}: ${message}` : event;\n this.info(msg);\n }\n\n /**\n * Registra cambios de estado\n * \n * @param {string} from - Estado anterior\n * @param {string} to - Estado nuevo\n * @param {any} data - Datos adicionales (opcional)\n * \n * @example\n * component.stateChange('idle', 'loading');\n * component.stateChange('loading', 'error', { code: 404 });\n * \n * @since 0.3.0\n */\n stateChange(from: string, to: string, data?: any): void {\n this.badge('STATE');\n const msg = `${from} → ${to}`;\n if (data) {\n this.info(msg, data);\n } else {\n this.info(msg);\n }\n }\n\n /**\n * Registra cambios en las propiedades\n * \n * @param {Record<string, any>} changes - Objeto con los cambios\n * \n * @example\n * component.propsChange({\n * user: newUser,\n * isActive: true\n * });\n * \n * @since 0.3.0\n */\n propsChange(changes: Record<string, any>): void {\n this.badge('PROPS');\n this.debug('Props changed:', changes);\n }\n}\n\n/**\n * Logger de contexto temporal que se limpia automáticamente\n * \n * @class ContextLogger\n * @description Proporciona un contexto temporal para operaciones agrupadas\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // El contexto se limpia automáticamente al finalizar\n * db.context('Transaction').run(() => {\n * db.info('Iniciando transacción');\n * db.success('Transacción completada');\n * });\n * \n * @since 0.3.0\n */\nexport class ContextLogger {\n private parentLogger: ScopedLogger;\n private contextName: string;\n\n constructor(parentLogger: ScopedLogger, contextName: string) {\n this.parentLogger = parentLogger;\n this.contextName = contextName;\n }\n\n /**\n * Ejecuta una función con este contexto activo\n * \n * @template T - Tipo de retorno de la función\n * @param {Function} fn - Función a ejecutar\n * @returns {T} Resultado de la función\n * \n * @example\n * const result = logger.context('Process').run(() => {\n * logger.info('Procesando...');\n * return processData();\n * });\n * \n * @since 0.3.0\n */\n run<T>(fn: () => T): T {\n this.parentLogger._pushContext(this.contextName);\n try {\n return fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Run an async function with this context active\n */\n async runAsync<T>(fn: () => Promise<T>): Promise<T> {\n this.parentLogger._pushContext(this.contextName);\n try {\n return await fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Start the context (manual mode)\n */\n start(): void {\n this.parentLogger._pushContext(this.contextName);\n }\n\n /**\n * End the context (manual mode)\n */\n end(): void {\n this.parentLogger._popContext();\n }\n\n // Delegate logging methods to parent with context\n debug(...args: any[]): void { this.parentLogger.debug(...args); }\n info(...args: any[]): void { this.parentLogger.info(...args); }\n warn(...args: any[]): void { this.parentLogger.warn(...args); }\n error(...args: any[]): void { this.parentLogger.error(...args); }\n success(...args: any[]): void { this.parentLogger.success(...args); }\n critical(...args: any[]): void { this.parentLogger.critical(...args); }\n}"],"names":["ScopedLogger","Logger","parentLogger","scopeName","badgeList","contextStack","constructor","config","super","getConfig","this","getHandlers","forEach","handler","addHandler","badges","badge","includes","push","clearBadges","style","presetName","setTheme","context","contextName","ContextLogger","log","level","args","getBadgeString","scopePrefix","getScopePrefix","enhancedMessage","length","String","map","join","filter","Boolean","_pushContext","_popContext","pop","run","fn","runAsync","start","end","debug","info","warn","error","success","critical","apiName","slow","message","duration","msg","rateLimit","auth","deprecated","componentName","lifecycle","event","stateChange","from","to","data","propsChange","changes"],"mappings":"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"}
1
+ {"version":3,"file":"ScopedLogger-HgV_J-ug.js","sources":["../../src/ScopedLogger.ts"],"sourcesContent":["/**\n * @fileoverview ScopedLogger con badges y logging contextual\n * @version 0.3.0\n * @since 2024\n * \n * Proporciona loggers especializados con contexto, badges automáticos\n * y características avanzadas para componentes y APIs.\n */\n\nimport { Logger } from './Logger.js';\nimport type { LoggerConfig, LogLevel, Verbosity, BannerType, StyleOptions, ILogHandler } from './types/index.js';\n\n/**\n * Logger con scope mejorado con badges y API simplificada\n * \n * @class ScopedLogger\n * @extends Logger\n * @description Logger contextual que añade prefijos y badges automáticamente\n * \n * @example\n * const dbLogger = logger.scope('Database');\n * dbLogger.info('Conectando...'); // [Database] Conectando...\n * \n * // Con badges personalizados\n * dbLogger.badge('SLOW').warn('Query lenta detectada');\n * // [SLOW] [Database] Query lenta detectada\n * \n * @since 0.3.0\n */\nexport class ScopedLogger extends Logger {\n private parentLogger: Logger;\n private scopeName: string;\n private badgeList: string[] = [];\n private contextStack: string[] = [];\n\n constructor(parentLogger: Logger, scopeName: string, config?: Partial<LoggerConfig>) {\n // Initialize with parent's config plus any overrides\n super({ ...parentLogger.getConfig(), ...config });\n this.parentLogger = parentLogger;\n this.scopeName = scopeName;\n \n // Inherit parent's handlers\n const parentHandlers = parentLogger.getHandlers();\n parentHandlers.forEach(handler => this.addHandler(handler));\n }\n\n /**\n * Añade múltiples badges a este logger con scope\n * \n * @param {string[]} badges - Array de badges a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const api = logger.scope('API');\n * api.badges(['v2', 'beta', 'cached'])\n * .info('Respuesta desde caché');\n * // [v2] [beta] [cached] [API] Respuesta desde caché\n * \n * @since 0.3.0\n */\n badges(badges: string[]): ScopedLogger {\n this.badgeList = [...badges];\n return this;\n }\n\n /**\n * Añade un badge individual\n * \n * @param {string} badge - Badge a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * dbLogger.badge('SLOW').warn('Query tardó 3s');\n * // [SLOW] [Database] Query tardó 3s\n * \n * @since 0.3.0\n */\n badge(badge: string): ScopedLogger {\n if (!this.badgeList.includes(badge)) {\n this.badgeList.push(badge);\n }\n return this;\n }\n\n /**\n * Elimina todos los badges\n * \n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * api.clearBadges().info('Sin badges');\n * // [API] Sin badges\n * \n * @since 0.3.0\n */\n clearBadges(): ScopedLogger {\n this.badgeList = [];\n return this;\n }\n\n /**\n * Establece un preset de estilo para este logger con scope\n * \n * @param {string} presetName - Nombre del preset a aplicar\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const errorLogger = logger.scope('ErrorHandler')\n * .style('cyberpunk');\n * \n * @since 0.3.0\n */\n style(presetName: string): ScopedLogger {\n this.setTheme(presetName as any); // Will be updated when we implement presets\n return this;\n }\n\n /**\n * Crea un contexto temporal que se limpia automáticamente\n * \n * @param {string} contextName - Nombre del contexto\n * @returns {ContextLogger} Logger con contexto temporal\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // Contexto temporal para una operación\n * db.context('Migration').run(() => {\n * db.info('Iniciando migración');\n * db.success('Tablas creadas');\n * });\n * // Contexto automáticamente limpiado\n * \n * @since 0.3.0\n */\n context(contextName: string): ContextLogger {\n return new ContextLogger(this, contextName);\n }\n\n /**\n * Sobrescribe el logging principal para incluir badges\n * @protected\n * @param {LogLevel} level - Nivel del log\n * @param {...any} args - Argumentos del log\n */\n protected log(level: LogLevel, ...args: any[]): void {\n // Build the enhanced message with badges\n const badges = this.getBadgeString();\n const scopePrefix = this.getScopePrefix();\n \n let enhancedMessage = '';\n if (badges) enhancedMessage += badges + ' ';\n if (scopePrefix) enhancedMessage += `[${scopePrefix}] `;\n \n if (args.length > 0) {\n enhancedMessage += String(args[0]);\n // Replace the first argument with our enhanced message\n args[0] = enhancedMessage;\n }\n\n // Call parent's log method\n super.log(level, ...args);\n }\n\n /**\n * Obtiene la cadena de badges formateada\n * @private\n * @returns {string} Badges formateados como [BADGE1][BADGE2]\n */\n private getBadgeString(): string {\n if (this.badgeList.length === 0) return '';\n return this.badgeList.map(badge => `[${badge}]`).join('');\n }\n\n /**\n * Obtiene el prefijo del scope (incluye stack de contexto)\n * @private\n * @returns {string} Prefijo completo con contextos\n */\n private getScopePrefix(): string {\n const parts = [this.scopeName, ...this.contextStack].filter(Boolean);\n return parts.join(':');\n }\n\n /**\n * Método interno para añadir contexto\n * @internal\n */\n _pushContext(context: string): void {\n this.contextStack.push(context);\n }\n\n /**\n * Método interno para eliminar contexto\n * @internal\n */\n _popContext(): void {\n this.contextStack.pop();\n }\n}\n\n/**\n * Logger específico para APIs con badges comunes de API\n * \n * @class APILogger\n * @extends ScopedLogger\n * @description Logger especializado para endpoints y servicios API\n * \n * @example\n * const api = logger.api('REST');\n * api.info('GET /users');\n * // [API] [REST] GET /users\n * \n * api.slow('Query lenta', 3500);\n * // [API] [SLOW] [REST] Query lenta (3500ms)\n * \n * @since 0.3.0\n */\nexport class APILogger extends ScopedLogger {\n constructor(parentLogger: Logger, apiName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, `API:${apiName}`, config);\n this.badge('API');\n }\n\n /**\n * Registra operaciones lentas\n * \n * @param {string} message - Mensaje sobre la operación lenta\n * @param {number} duration - Duración en milisegundos (opcional)\n * \n * @example\n * api.slow('Query compleja', 5000);\n * api.slow('Procesamiento pesado');\n * \n * @since 0.3.0\n */\n slow(message: string, duration?: number): void {\n this.badge('SLOW');\n const msg = duration ? `${message} (${duration}ms)` : message;\n this.warn(msg);\n }\n\n /**\n * Registra límites de tasa alcanzados\n * \n * @param {string} message - Mensaje sobre el límite\n * \n * @example\n * api.rateLimit('Límite excedido: 100 req/min');\n * \n * @since 0.3.0\n */\n rateLimit(message: string): void {\n this.badge('RATE_LIMIT');\n this.warn(message);\n }\n\n /**\n * Registra problemas de autenticación\n * \n * @param {string} message - Mensaje de autenticación\n * \n * @example\n * api.auth('Token inválido o expirado');\n * api.auth('Credenciales incorrectas');\n * \n * @since 0.3.0\n */\n auth(message: string): void {\n this.badge('AUTH');\n this.error(message);\n }\n\n /**\n * Registra advertencias de deprecación\n * \n * @param {string} message - Mensaje de deprecación\n * \n * @example\n * api.deprecated('Este endpoint será eliminado en v2.0');\n * api.deprecated('Usar /v2/users en lugar de /users');\n * \n * @since 0.3.0\n */\n deprecated(message: string): void {\n this.badge('DEPRECATED');\n this.warn(message);\n }\n}\n\n/**\n * Logger específico para componentes de UI\n * \n * @class ComponentLogger\n * @extends ScopedLogger\n * @description Logger especializado para componentes con eventos de ciclo de vida\n * \n * @example\n * const authForm = logger.component('AuthForm');\n * authForm.lifecycle('mounted');\n * authForm.stateChange('idle', 'loading');\n * \n * @since 0.3.0\n */\nexport class ComponentLogger extends ScopedLogger {\n constructor(parentLogger: Logger, componentName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, componentName, config);\n this.badge('COMPONENT');\n }\n\n /**\n * Registra eventos del ciclo de vida del componente\n * \n * @param {string} event - Nombre del evento (mounted, unmounted, updated, etc)\n * @param {string} message - Mensaje adicional (opcional)\n * \n * @example\n * component.lifecycle('mounted', 'Componente listo');\n * component.lifecycle('beforeDestroy');\n * \n * @since 0.3.0\n */\n lifecycle(event: string, message?: string): void {\n this.badge('LIFECYCLE');\n const msg = message ? `${event}: ${message}` : event;\n this.info(msg);\n }\n\n /**\n * Registra cambios de estado\n * \n * @param {string} from - Estado anterior\n * @param {string} to - Estado nuevo\n * @param {any} data - Datos adicionales (opcional)\n * \n * @example\n * component.stateChange('idle', 'loading');\n * component.stateChange('loading', 'error', { code: 404 });\n * \n * @since 0.3.0\n */\n stateChange(from: string, to: string, data?: any): void {\n this.badge('STATE');\n const msg = `${from} → ${to}`;\n if (data) {\n this.info(msg, data);\n } else {\n this.info(msg);\n }\n }\n\n /**\n * Registra cambios en las propiedades\n * \n * @param {Record<string, any>} changes - Objeto con los cambios\n * \n * @example\n * component.propsChange({\n * user: newUser,\n * isActive: true\n * });\n * \n * @since 0.3.0\n */\n propsChange(changes: Record<string, any>): void {\n this.badge('PROPS');\n this.debug('Props changed:', changes);\n }\n}\n\n/**\n * Logger de contexto temporal que se limpia automáticamente\n * \n * @class ContextLogger\n * @description Proporciona un contexto temporal para operaciones agrupadas\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // El contexto se limpia automáticamente al finalizar\n * db.context('Transaction').run(() => {\n * db.info('Iniciando transacción');\n * db.success('Transacción completada');\n * });\n * \n * @since 0.3.0\n */\nexport class ContextLogger {\n private parentLogger: ScopedLogger;\n private contextName: string;\n\n constructor(parentLogger: ScopedLogger, contextName: string) {\n this.parentLogger = parentLogger;\n this.contextName = contextName;\n }\n\n /**\n * Ejecuta una función con este contexto activo\n * \n * @template T - Tipo de retorno de la función\n * @param {Function} fn - Función a ejecutar\n * @returns {T} Resultado de la función\n * \n * @example\n * const result = logger.context('Process').run(() => {\n * logger.info('Procesando...');\n * return processData();\n * });\n * \n * @since 0.3.0\n */\n run<T>(fn: () => T): T {\n this.parentLogger._pushContext(this.contextName);\n try {\n return fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Run an async function with this context active\n */\n async runAsync<T>(fn: () => Promise<T>): Promise<T> {\n this.parentLogger._pushContext(this.contextName);\n try {\n return await fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Start the context (manual mode)\n */\n start(): void {\n this.parentLogger._pushContext(this.contextName);\n }\n\n /**\n * End the context (manual mode)\n */\n end(): void {\n this.parentLogger._popContext();\n }\n\n // Delegate logging methods to parent with context\n debug(...args: any[]): void { this.parentLogger.debug(...args); }\n info(...args: any[]): void { this.parentLogger.info(...args); }\n warn(...args: any[]): void { this.parentLogger.warn(...args); }\n error(...args: any[]): void { this.parentLogger.error(...args); }\n success(...args: any[]): void { this.parentLogger.success(...args); }\n critical(...args: any[]): void { this.parentLogger.critical(...args); }\n}"],"names":["ScopedLogger","Logger","parentLogger","scopeName","badgeList","contextStack","constructor","config","super","getConfig","this","getHandlers","forEach","handler","addHandler","badges","badge","includes","push","clearBadges","style","presetName","setTheme","context","contextName","ContextLogger","log","level","args","getBadgeString","scopePrefix","getScopePrefix","enhancedMessage","length","String","map","join","filter","Boolean","_pushContext","_popContext","pop","run","fn","runAsync","start","end","debug","info","warn","error","success","critical","apiName","slow","message","duration","msg","rateLimit","auth","deprecated","componentName","lifecycle","event","stateChange","from","to","data","propsChange","changes"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { L as Logger } from "./Logger-CTAaDeZi.js";
1
+ import { L as Logger } from "./Logger-Th9SfADL.js";
2
2
  class ScopedLogger extends Logger {
3
3
  parentLogger;
4
4
  scopeName;
@@ -358,4 +358,4 @@ export {
358
358
  ContextLogger,
359
359
  ScopedLogger
360
360
  };
361
- //# sourceMappingURL=ScopedLogger-hS0qSkZD.js.map
361
+ //# sourceMappingURL=ScopedLogger-uAAeJkfA.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ScopedLogger-hS0qSkZD.js","sources":["../../src/ScopedLogger.ts"],"sourcesContent":["/**\n * @fileoverview ScopedLogger con badges y logging contextual\n * @version 0.3.0\n * @since 2024\n * \n * Proporciona loggers especializados con contexto, badges automáticos\n * y características avanzadas para componentes y APIs.\n */\n\nimport { Logger } from './Logger.js';\nimport type { LoggerConfig, LogLevel, Verbosity, BannerType, StyleOptions, ILogHandler } from './types/index.js';\n\n/**\n * Logger con scope mejorado con badges y API simplificada\n * \n * @class ScopedLogger\n * @extends Logger\n * @description Logger contextual que añade prefijos y badges automáticamente\n * \n * @example\n * const dbLogger = logger.scope('Database');\n * dbLogger.info('Conectando...'); // [Database] Conectando...\n * \n * // Con badges personalizados\n * dbLogger.badge('SLOW').warn('Query lenta detectada');\n * // [SLOW] [Database] Query lenta detectada\n * \n * @since 0.3.0\n */\nexport class ScopedLogger extends Logger {\n private parentLogger: Logger;\n private scopeName: string;\n private badgeList: string[] = [];\n private contextStack: string[] = [];\n\n constructor(parentLogger: Logger, scopeName: string, config?: Partial<LoggerConfig>) {\n // Initialize with parent's config plus any overrides\n super({ ...parentLogger.getConfig(), ...config });\n this.parentLogger = parentLogger;\n this.scopeName = scopeName;\n \n // Inherit parent's handlers\n const parentHandlers = parentLogger.getHandlers();\n parentHandlers.forEach(handler => this.addHandler(handler));\n }\n\n /**\n * Añade múltiples badges a este logger con scope\n * \n * @param {string[]} badges - Array de badges a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const api = logger.scope('API');\n * api.badges(['v2', 'beta', 'cached'])\n * .info('Respuesta desde caché');\n * // [v2] [beta] [cached] [API] Respuesta desde caché\n * \n * @since 0.3.0\n */\n badges(badges: string[]): ScopedLogger {\n this.badgeList = [...badges];\n return this;\n }\n\n /**\n * Añade un badge individual\n * \n * @param {string} badge - Badge a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * dbLogger.badge('SLOW').warn('Query tardó 3s');\n * // [SLOW] [Database] Query tardó 3s\n * \n * @since 0.3.0\n */\n badge(badge: string): ScopedLogger {\n if (!this.badgeList.includes(badge)) {\n this.badgeList.push(badge);\n }\n return this;\n }\n\n /**\n * Elimina todos los badges\n * \n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * api.clearBadges().info('Sin badges');\n * // [API] Sin badges\n * \n * @since 0.3.0\n */\n clearBadges(): ScopedLogger {\n this.badgeList = [];\n return this;\n }\n\n /**\n * Establece un preset de estilo para este logger con scope\n * \n * @param {string} presetName - Nombre del preset a aplicar\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const errorLogger = logger.scope('ErrorHandler')\n * .style('cyberpunk');\n * \n * @since 0.3.0\n */\n style(presetName: string): ScopedLogger {\n this.setTheme(presetName as any); // Will be updated when we implement presets\n return this;\n }\n\n /**\n * Crea un contexto temporal que se limpia automáticamente\n * \n * @param {string} contextName - Nombre del contexto\n * @returns {ContextLogger} Logger con contexto temporal\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // Contexto temporal para una operación\n * db.context('Migration').run(() => {\n * db.info('Iniciando migración');\n * db.success('Tablas creadas');\n * });\n * // Contexto automáticamente limpiado\n * \n * @since 0.3.0\n */\n context(contextName: string): ContextLogger {\n return new ContextLogger(this, contextName);\n }\n\n /**\n * Sobrescribe el logging principal para incluir badges\n * @protected\n * @param {LogLevel} level - Nivel del log\n * @param {...any} args - Argumentos del log\n */\n protected log(level: LogLevel, ...args: any[]): void {\n // Build the enhanced message with badges\n const badges = this.getBadgeString();\n const scopePrefix = this.getScopePrefix();\n \n let enhancedMessage = '';\n if (badges) enhancedMessage += badges + ' ';\n if (scopePrefix) enhancedMessage += `[${scopePrefix}] `;\n \n if (args.length > 0) {\n enhancedMessage += String(args[0]);\n // Replace the first argument with our enhanced message\n args[0] = enhancedMessage;\n }\n\n // Call parent's log method\n super.log(level, ...args);\n }\n\n /**\n * Obtiene la cadena de badges formateada\n * @private\n * @returns {string} Badges formateados como [BADGE1][BADGE2]\n */\n private getBadgeString(): string {\n if (this.badgeList.length === 0) return '';\n return this.badgeList.map(badge => `[${badge}]`).join('');\n }\n\n /**\n * Obtiene el prefijo del scope (incluye stack de contexto)\n * @private\n * @returns {string} Prefijo completo con contextos\n */\n private getScopePrefix(): string {\n const parts = [this.scopeName, ...this.contextStack].filter(Boolean);\n return parts.join(':');\n }\n\n /**\n * Método interno para añadir contexto\n * @internal\n */\n _pushContext(context: string): void {\n this.contextStack.push(context);\n }\n\n /**\n * Método interno para eliminar contexto\n * @internal\n */\n _popContext(): void {\n this.contextStack.pop();\n }\n}\n\n/**\n * Logger específico para APIs con badges comunes de API\n * \n * @class APILogger\n * @extends ScopedLogger\n * @description Logger especializado para endpoints y servicios API\n * \n * @example\n * const api = logger.api('REST');\n * api.info('GET /users');\n * // [API] [REST] GET /users\n * \n * api.slow('Query lenta', 3500);\n * // [API] [SLOW] [REST] Query lenta (3500ms)\n * \n * @since 0.3.0\n */\nexport class APILogger extends ScopedLogger {\n constructor(parentLogger: Logger, apiName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, `API:${apiName}`, config);\n this.badge('API');\n }\n\n /**\n * Registra operaciones lentas\n * \n * @param {string} message - Mensaje sobre la operación lenta\n * @param {number} duration - Duración en milisegundos (opcional)\n * \n * @example\n * api.slow('Query compleja', 5000);\n * api.slow('Procesamiento pesado');\n * \n * @since 0.3.0\n */\n slow(message: string, duration?: number): void {\n this.badge('SLOW');\n const msg = duration ? `${message} (${duration}ms)` : message;\n this.warn(msg);\n }\n\n /**\n * Registra límites de tasa alcanzados\n * \n * @param {string} message - Mensaje sobre el límite\n * \n * @example\n * api.rateLimit('Límite excedido: 100 req/min');\n * \n * @since 0.3.0\n */\n rateLimit(message: string): void {\n this.badge('RATE_LIMIT');\n this.warn(message);\n }\n\n /**\n * Registra problemas de autenticación\n * \n * @param {string} message - Mensaje de autenticación\n * \n * @example\n * api.auth('Token inválido o expirado');\n * api.auth('Credenciales incorrectas');\n * \n * @since 0.3.0\n */\n auth(message: string): void {\n this.badge('AUTH');\n this.error(message);\n }\n\n /**\n * Registra advertencias de deprecación\n * \n * @param {string} message - Mensaje de deprecación\n * \n * @example\n * api.deprecated('Este endpoint será eliminado en v2.0');\n * api.deprecated('Usar /v2/users en lugar de /users');\n * \n * @since 0.3.0\n */\n deprecated(message: string): void {\n this.badge('DEPRECATED');\n this.warn(message);\n }\n}\n\n/**\n * Logger específico para componentes de UI\n * \n * @class ComponentLogger\n * @extends ScopedLogger\n * @description Logger especializado para componentes con eventos de ciclo de vida\n * \n * @example\n * const authForm = logger.component('AuthForm');\n * authForm.lifecycle('mounted');\n * authForm.stateChange('idle', 'loading');\n * \n * @since 0.3.0\n */\nexport class ComponentLogger extends ScopedLogger {\n constructor(parentLogger: Logger, componentName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, componentName, config);\n this.badge('COMPONENT');\n }\n\n /**\n * Registra eventos del ciclo de vida del componente\n * \n * @param {string} event - Nombre del evento (mounted, unmounted, updated, etc)\n * @param {string} message - Mensaje adicional (opcional)\n * \n * @example\n * component.lifecycle('mounted', 'Componente listo');\n * component.lifecycle('beforeDestroy');\n * \n * @since 0.3.0\n */\n lifecycle(event: string, message?: string): void {\n this.badge('LIFECYCLE');\n const msg = message ? `${event}: ${message}` : event;\n this.info(msg);\n }\n\n /**\n * Registra cambios de estado\n * \n * @param {string} from - Estado anterior\n * @param {string} to - Estado nuevo\n * @param {any} data - Datos adicionales (opcional)\n * \n * @example\n * component.stateChange('idle', 'loading');\n * component.stateChange('loading', 'error', { code: 404 });\n * \n * @since 0.3.0\n */\n stateChange(from: string, to: string, data?: any): void {\n this.badge('STATE');\n const msg = `${from} → ${to}`;\n if (data) {\n this.info(msg, data);\n } else {\n this.info(msg);\n }\n }\n\n /**\n * Registra cambios en las propiedades\n * \n * @param {Record<string, any>} changes - Objeto con los cambios\n * \n * @example\n * component.propsChange({\n * user: newUser,\n * isActive: true\n * });\n * \n * @since 0.3.0\n */\n propsChange(changes: Record<string, any>): void {\n this.badge('PROPS');\n this.debug('Props changed:', changes);\n }\n}\n\n/**\n * Logger de contexto temporal que se limpia automáticamente\n * \n * @class ContextLogger\n * @description Proporciona un contexto temporal para operaciones agrupadas\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // El contexto se limpia automáticamente al finalizar\n * db.context('Transaction').run(() => {\n * db.info('Iniciando transacción');\n * db.success('Transacción completada');\n * });\n * \n * @since 0.3.0\n */\nexport class ContextLogger {\n private parentLogger: ScopedLogger;\n private contextName: string;\n\n constructor(parentLogger: ScopedLogger, contextName: string) {\n this.parentLogger = parentLogger;\n this.contextName = contextName;\n }\n\n /**\n * Ejecuta una función con este contexto activo\n * \n * @template T - Tipo de retorno de la función\n * @param {Function} fn - Función a ejecutar\n * @returns {T} Resultado de la función\n * \n * @example\n * const result = logger.context('Process').run(() => {\n * logger.info('Procesando...');\n * return processData();\n * });\n * \n * @since 0.3.0\n */\n run<T>(fn: () => T): T {\n this.parentLogger._pushContext(this.contextName);\n try {\n return fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Run an async function with this context active\n */\n async runAsync<T>(fn: () => Promise<T>): Promise<T> {\n this.parentLogger._pushContext(this.contextName);\n try {\n return await fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Start the context (manual mode)\n */\n start(): void {\n this.parentLogger._pushContext(this.contextName);\n }\n\n /**\n * End the context (manual mode)\n */\n end(): void {\n this.parentLogger._popContext();\n }\n\n // Delegate logging methods to parent with context\n debug(...args: any[]): void { this.parentLogger.debug(...args); }\n info(...args: any[]): void { this.parentLogger.info(...args); }\n warn(...args: any[]): void { this.parentLogger.warn(...args); }\n error(...args: any[]): void { this.parentLogger.error(...args); }\n success(...args: any[]): void { this.parentLogger.success(...args); }\n critical(...args: any[]): void { this.parentLogger.critical(...args); }\n}"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ScopedLogger-uAAeJkfA.js","sources":["../../src/ScopedLogger.ts"],"sourcesContent":["/**\n * @fileoverview ScopedLogger con badges y logging contextual\n * @version 0.3.0\n * @since 2024\n * \n * Proporciona loggers especializados con contexto, badges automáticos\n * y características avanzadas para componentes y APIs.\n */\n\nimport { Logger } from './Logger.js';\nimport type { LoggerConfig, LogLevel, Verbosity, BannerType, StyleOptions, ILogHandler } from './types/index.js';\n\n/**\n * Logger con scope mejorado con badges y API simplificada\n * \n * @class ScopedLogger\n * @extends Logger\n * @description Logger contextual que añade prefijos y badges automáticamente\n * \n * @example\n * const dbLogger = logger.scope('Database');\n * dbLogger.info('Conectando...'); // [Database] Conectando...\n * \n * // Con badges personalizados\n * dbLogger.badge('SLOW').warn('Query lenta detectada');\n * // [SLOW] [Database] Query lenta detectada\n * \n * @since 0.3.0\n */\nexport class ScopedLogger extends Logger {\n private parentLogger: Logger;\n private scopeName: string;\n private badgeList: string[] = [];\n private contextStack: string[] = [];\n\n constructor(parentLogger: Logger, scopeName: string, config?: Partial<LoggerConfig>) {\n // Initialize with parent's config plus any overrides\n super({ ...parentLogger.getConfig(), ...config });\n this.parentLogger = parentLogger;\n this.scopeName = scopeName;\n \n // Inherit parent's handlers\n const parentHandlers = parentLogger.getHandlers();\n parentHandlers.forEach(handler => this.addHandler(handler));\n }\n\n /**\n * Añade múltiples badges a este logger con scope\n * \n * @param {string[]} badges - Array de badges a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const api = logger.scope('API');\n * api.badges(['v2', 'beta', 'cached'])\n * .info('Respuesta desde caché');\n * // [v2] [beta] [cached] [API] Respuesta desde caché\n * \n * @since 0.3.0\n */\n badges(badges: string[]): ScopedLogger {\n this.badgeList = [...badges];\n return this;\n }\n\n /**\n * Añade un badge individual\n * \n * @param {string} badge - Badge a añadir\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * dbLogger.badge('SLOW').warn('Query tardó 3s');\n * // [SLOW] [Database] Query tardó 3s\n * \n * @since 0.3.0\n */\n badge(badge: string): ScopedLogger {\n if (!this.badgeList.includes(badge)) {\n this.badgeList.push(badge);\n }\n return this;\n }\n\n /**\n * Elimina todos los badges\n * \n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * api.clearBadges().info('Sin badges');\n * // [API] Sin badges\n * \n * @since 0.3.0\n */\n clearBadges(): ScopedLogger {\n this.badgeList = [];\n return this;\n }\n\n /**\n * Establece un preset de estilo para este logger con scope\n * \n * @param {string} presetName - Nombre del preset a aplicar\n * @returns {ScopedLogger} Esta instancia para encadenamiento\n * \n * @example\n * const errorLogger = logger.scope('ErrorHandler')\n * .style('cyberpunk');\n * \n * @since 0.3.0\n */\n style(presetName: string): ScopedLogger {\n this.setTheme(presetName as any); // Will be updated when we implement presets\n return this;\n }\n\n /**\n * Crea un contexto temporal que se limpia automáticamente\n * \n * @param {string} contextName - Nombre del contexto\n * @returns {ContextLogger} Logger con contexto temporal\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // Contexto temporal para una operación\n * db.context('Migration').run(() => {\n * db.info('Iniciando migración');\n * db.success('Tablas creadas');\n * });\n * // Contexto automáticamente limpiado\n * \n * @since 0.3.0\n */\n context(contextName: string): ContextLogger {\n return new ContextLogger(this, contextName);\n }\n\n /**\n * Sobrescribe el logging principal para incluir badges\n * @protected\n * @param {LogLevel} level - Nivel del log\n * @param {...any} args - Argumentos del log\n */\n protected log(level: LogLevel, ...args: any[]): void {\n // Build the enhanced message with badges\n const badges = this.getBadgeString();\n const scopePrefix = this.getScopePrefix();\n \n let enhancedMessage = '';\n if (badges) enhancedMessage += badges + ' ';\n if (scopePrefix) enhancedMessage += `[${scopePrefix}] `;\n \n if (args.length > 0) {\n enhancedMessage += String(args[0]);\n // Replace the first argument with our enhanced message\n args[0] = enhancedMessage;\n }\n\n // Call parent's log method\n super.log(level, ...args);\n }\n\n /**\n * Obtiene la cadena de badges formateada\n * @private\n * @returns {string} Badges formateados como [BADGE1][BADGE2]\n */\n private getBadgeString(): string {\n if (this.badgeList.length === 0) return '';\n return this.badgeList.map(badge => `[${badge}]`).join('');\n }\n\n /**\n * Obtiene el prefijo del scope (incluye stack de contexto)\n * @private\n * @returns {string} Prefijo completo con contextos\n */\n private getScopePrefix(): string {\n const parts = [this.scopeName, ...this.contextStack].filter(Boolean);\n return parts.join(':');\n }\n\n /**\n * Método interno para añadir contexto\n * @internal\n */\n _pushContext(context: string): void {\n this.contextStack.push(context);\n }\n\n /**\n * Método interno para eliminar contexto\n * @internal\n */\n _popContext(): void {\n this.contextStack.pop();\n }\n}\n\n/**\n * Logger específico para APIs con badges comunes de API\n * \n * @class APILogger\n * @extends ScopedLogger\n * @description Logger especializado para endpoints y servicios API\n * \n * @example\n * const api = logger.api('REST');\n * api.info('GET /users');\n * // [API] [REST] GET /users\n * \n * api.slow('Query lenta', 3500);\n * // [API] [SLOW] [REST] Query lenta (3500ms)\n * \n * @since 0.3.0\n */\nexport class APILogger extends ScopedLogger {\n constructor(parentLogger: Logger, apiName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, `API:${apiName}`, config);\n this.badge('API');\n }\n\n /**\n * Registra operaciones lentas\n * \n * @param {string} message - Mensaje sobre la operación lenta\n * @param {number} duration - Duración en milisegundos (opcional)\n * \n * @example\n * api.slow('Query compleja', 5000);\n * api.slow('Procesamiento pesado');\n * \n * @since 0.3.0\n */\n slow(message: string, duration?: number): void {\n this.badge('SLOW');\n const msg = duration ? `${message} (${duration}ms)` : message;\n this.warn(msg);\n }\n\n /**\n * Registra límites de tasa alcanzados\n * \n * @param {string} message - Mensaje sobre el límite\n * \n * @example\n * api.rateLimit('Límite excedido: 100 req/min');\n * \n * @since 0.3.0\n */\n rateLimit(message: string): void {\n this.badge('RATE_LIMIT');\n this.warn(message);\n }\n\n /**\n * Registra problemas de autenticación\n * \n * @param {string} message - Mensaje de autenticación\n * \n * @example\n * api.auth('Token inválido o expirado');\n * api.auth('Credenciales incorrectas');\n * \n * @since 0.3.0\n */\n auth(message: string): void {\n this.badge('AUTH');\n this.error(message);\n }\n\n /**\n * Registra advertencias de deprecación\n * \n * @param {string} message - Mensaje de deprecación\n * \n * @example\n * api.deprecated('Este endpoint será eliminado en v2.0');\n * api.deprecated('Usar /v2/users en lugar de /users');\n * \n * @since 0.3.0\n */\n deprecated(message: string): void {\n this.badge('DEPRECATED');\n this.warn(message);\n }\n}\n\n/**\n * Logger específico para componentes de UI\n * \n * @class ComponentLogger\n * @extends ScopedLogger\n * @description Logger especializado para componentes con eventos de ciclo de vida\n * \n * @example\n * const authForm = logger.component('AuthForm');\n * authForm.lifecycle('mounted');\n * authForm.stateChange('idle', 'loading');\n * \n * @since 0.3.0\n */\nexport class ComponentLogger extends ScopedLogger {\n constructor(parentLogger: Logger, componentName: string, config?: Partial<LoggerConfig>) {\n super(parentLogger, componentName, config);\n this.badge('COMPONENT');\n }\n\n /**\n * Registra eventos del ciclo de vida del componente\n * \n * @param {string} event - Nombre del evento (mounted, unmounted, updated, etc)\n * @param {string} message - Mensaje adicional (opcional)\n * \n * @example\n * component.lifecycle('mounted', 'Componente listo');\n * component.lifecycle('beforeDestroy');\n * \n * @since 0.3.0\n */\n lifecycle(event: string, message?: string): void {\n this.badge('LIFECYCLE');\n const msg = message ? `${event}: ${message}` : event;\n this.info(msg);\n }\n\n /**\n * Registra cambios de estado\n * \n * @param {string} from - Estado anterior\n * @param {string} to - Estado nuevo\n * @param {any} data - Datos adicionales (opcional)\n * \n * @example\n * component.stateChange('idle', 'loading');\n * component.stateChange('loading', 'error', { code: 404 });\n * \n * @since 0.3.0\n */\n stateChange(from: string, to: string, data?: any): void {\n this.badge('STATE');\n const msg = `${from} → ${to}`;\n if (data) {\n this.info(msg, data);\n } else {\n this.info(msg);\n }\n }\n\n /**\n * Registra cambios en las propiedades\n * \n * @param {Record<string, any>} changes - Objeto con los cambios\n * \n * @example\n * component.propsChange({\n * user: newUser,\n * isActive: true\n * });\n * \n * @since 0.3.0\n */\n propsChange(changes: Record<string, any>): void {\n this.badge('PROPS');\n this.debug('Props changed:', changes);\n }\n}\n\n/**\n * Logger de contexto temporal que se limpia automáticamente\n * \n * @class ContextLogger\n * @description Proporciona un contexto temporal para operaciones agrupadas\n * \n * @example\n * const db = logger.scope('Database');\n * \n * // El contexto se limpia automáticamente al finalizar\n * db.context('Transaction').run(() => {\n * db.info('Iniciando transacción');\n * db.success('Transacción completada');\n * });\n * \n * @since 0.3.0\n */\nexport class ContextLogger {\n private parentLogger: ScopedLogger;\n private contextName: string;\n\n constructor(parentLogger: ScopedLogger, contextName: string) {\n this.parentLogger = parentLogger;\n this.contextName = contextName;\n }\n\n /**\n * Ejecuta una función con este contexto activo\n * \n * @template T - Tipo de retorno de la función\n * @param {Function} fn - Función a ejecutar\n * @returns {T} Resultado de la función\n * \n * @example\n * const result = logger.context('Process').run(() => {\n * logger.info('Procesando...');\n * return processData();\n * });\n * \n * @since 0.3.0\n */\n run<T>(fn: () => T): T {\n this.parentLogger._pushContext(this.contextName);\n try {\n return fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Run an async function with this context active\n */\n async runAsync<T>(fn: () => Promise<T>): Promise<T> {\n this.parentLogger._pushContext(this.contextName);\n try {\n return await fn();\n } finally {\n this.parentLogger._popContext();\n }\n }\n\n /**\n * Start the context (manual mode)\n */\n start(): void {\n this.parentLogger._pushContext(this.contextName);\n }\n\n /**\n * End the context (manual mode)\n */\n end(): void {\n this.parentLogger._popContext();\n }\n\n // Delegate logging methods to parent with context\n debug(...args: any[]): void { this.parentLogger.debug(...args); }\n info(...args: any[]): void { this.parentLogger.info(...args); }\n warn(...args: any[]): void { this.parentLogger.warn(...args); }\n error(...args: any[]): void { this.parentLogger.error(...args); }\n success(...args: any[]): void { this.parentLogger.success(...args); }\n critical(...args: any[]): void { this.parentLogger.critical(...args); }\n}"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ "use strict";const e={verbosity:"info",enableColors:!0,enableTimestamps:!0,enableStackTrace:!0,theme:"default",bannerType:"simple",bufferSize:1e3,autoDetectTheme:!0,outputFormat:"auto"},t={ms:1,s:1e3,m:6e4,h:36e5,d:864e5},r={timestamp:{light:"#666666",dark:"#a0a0a0"},messageText:{light:"#2d3748",dark:"#f7fafc"},prefix:{light:"#2d3748",dark:"#e2e8f0"},prefixBackground:{light:"#2d3748",dark:"#4a5568"},location:{light:"#718096",dark:"#a0aec0"}},s={nextjs:{verbosity:"info",enableColors:!0,enableTimestamps:!1,enableStackTrace:!1,autoDetectTheme:!1,outputFormat:"build"},webpack:{verbosity:"info",enableColors:!0,enableTimestamps:!0,enableStackTrace:!1,autoDetectTheme:!1,outputFormat:"build"},ci:{verbosity:"info",enableColors:!1,enableTimestamps:!0,enableStackTrace:!0,autoDetectTheme:!1,outputFormat:"ci"},terminal:{verbosity:"debug",enableColors:!0,enableTimestamps:!0,enableStackTrace:!0,autoDetectTheme:!1,outputFormat:"ansi"}},n={isNextJS:"undefined"!=typeof process&&(process.env.NEXT_RUNTIME||process.env.NEXT_PUBLIC_VERCEL_ENV||process.argv&&process.argv.some(e=>e.includes("next"))),isWebpack:"undefined"!=typeof process&&(process.env.WEBPACK_ENV||process.env.WEBPACK_BUILD||process.argv&&process.argv.some(e=>e.includes("webpack"))),isCI:"undefined"!=typeof process&&(process.env.CI||process.env.GITHUB_ACTIONS||process.env.JENKINS_URL||process.env.GITLAB_CI||process.env.TRAVIS||process.env.CIRCLECI),isBuild:"undefined"!=typeof process&&!0,isTerminal:"undefined"!=typeof process&&!0===process.stdout?.isTTY&&"dumb"!==process.env.TERM};function detectEnvironmentPreset(){return n.isCI?"ci":n.isNextJS?"nextjs":n.isWebpack?"webpack":"terminal"}function formatTimestamp(){try{/* @__PURE__ */
2
+ return(new Date).toISOString()}catch{/* @__PURE__ */
3
+ return(new Date).toISOString()}}class StyleBuilder{styles=[];constructor(e=""){e&&this.styles.push(e)}bg(e){return this.styles.push(`background: ${e}`),this}color(e){return this.styles.push(`color: ${e}`),this}border(e){return this.styles.push(`border: ${e}`),this}shadow(e){return this.styles.push(`box-shadow: ${e}`),this}padding(e){return this.styles.push(`padding: ${e}`),this}margin(e){return this.styles.push(`margin: ${e}`),this}rounded(e="4px"){return this.styles.push(`border-radius: ${e}`),this}bold(){return this.styles.push("font-weight: bold"),this}font(e){return this.styles.push(`font-family: ${e}`),this}mono(){return this.font('Monaco, Consolas, "Courier New", monospace')}system(){return this.font('system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif')}size(e){return this.styles.push(`font-size: ${e}`),this}lineHeight(e){return this.styles.push(`line-height: ${e}`),this}underline(){return this.styles.push("text-decoration: underline"),this}uppercase(){return this.styles.push("text-transform: uppercase"),this}opacity(e){return this.styles.push(`opacity: ${e}`),this}display(e){return this.styles.push(`display: ${e}`),this}position(e){return this.styles.push(`position: ${e}`),this}transform(e){return this.styles.push(`transform: ${e}`),this}animation(e){return this.styles.push(`animation: ${e}`),this}transition(e){return this.styles.push(`transition: ${e}`),this}cursor(e){return this.styles.push(`cursor: ${e}`),this}custom(e,t){return this.styles.push(`${e}: ${t}`),this}css(e,t){return this.custom(e,t)}build(){return this.styles.join("; ")}clear(){return this.styles=[],this}clone(){const e=new StyleBuilder;return e.styles=[...this.styles],e}merge(e){return this.styles.push(...e.styles),this}}!function(){const e=new StyleBuilder;new Proxy(e,{get(e,t){if(t in e){const r=e[t];return"function"==typeof r?r.bind(e):r}}})}();const o={success:()=>(new StyleBuilder).bg("linear-gradient(135deg, #00b894 0%, #00a085 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),error:()=>(new StyleBuilder).bg("linear-gradient(135deg, #e84393 0%, #d63031 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),warning:()=>(new StyleBuilder).bg("linear-gradient(135deg, #fdcb6e 0%, #e17055 100%)").color("#2d3436").padding("4px 8px").rounded("4px").bold(),info:()=>(new StyleBuilder).bg("linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),debug:()=>(new StyleBuilder).bg("linear-gradient(135deg, #667eea 0%, #764ba2 100%)").color("#ffffff").padding("4px 8px").rounded("4px").bold(),muted:()=>(new StyleBuilder).color("#6c757d").font("Monaco, Consolas, monospace").size("12px"),accent:()=>(new StyleBuilder).bg("#f8f9fa").color("#495057").padding("2px 6px").rounded("3px").border("1px solid #dee2e6"),neon:()=>(new StyleBuilder).bg("linear-gradient(135deg, #0f3460 0%, #e94560 100%)").color("#00ffff").padding("4px 8px").rounded("4px").bold().shadow("0 0 10px rgba(0, 255, 255, 0.5)")};function detectDevToolsTheme(){try{return"undefined"!=typeof window&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}catch(e){return console.warn("Failed to detect DevTools theme:",e),"light"}}function getAdaptiveColor(e,t){return e[t??detectDevToolsTheme()]}const i="undefined"!=typeof process&&process.versions&&process.versions.node,a="undefined"!=typeof window&&"undefined"!=typeof document;exports.ADAPTIVE_COLORS=r,exports.BUFFER_LIMITS={MIN_SIZE:50,DEFAULT_SIZE:1e3,MAX_SIZE:1e4},exports.BUILD_PRESETS=s,exports.DEFAULT_CONFIG=e,exports.ENVIRONMENT_DETECTION=n,exports.EXPORT_FORMATS={json:{extension:".json",mimeType:"application/json"},csv:{extension:".csv",mimeType:"text/csv"},markdown:{extension:".md",mimeType:"text/markdown"},plain:{extension:".txt",mimeType:"text/plain"},html:{extension:".html",mimeType:"text/html"}},exports.LEVEL_STYLES={debug:{emoji:"🔍",label:"DEBUG",background:"linear-gradient(90deg, #6c757d, #495057)",color:"#ffffff",border:"1px solid #6c757d",shadow:"0 2px 4px rgba(108, 117, 125, 0.3)"},info:{emoji:"ℹ️",label:"INFO",background:"linear-gradient(90deg, #007bff, #0056b3)",color:"#ffffff",border:"1px solid #007bff",shadow:"0 2px 4px rgba(0, 123, 255, 0.3)"},warn:{emoji:"⚠️",label:"WARN",background:"linear-gradient(90deg, #ffc107, #e0a800)",color:"#000000",border:"1px solid #ffc107",shadow:"0 2px 4px rgba(255, 193, 7, 0.3)"},error:{emoji:"❌",label:"ERROR",background:"linear-gradient(90deg, #dc3545, #c82333)",color:"#ffffff",border:"1px solid #dc3545",shadow:"0 2px 4px rgba(220, 53, 69, 0.3)"},critical:{emoji:"🚨",label:"CRITICAL",background:"linear-gradient(90deg, #8B0000, #FF0000)",color:"#ffffff",border:"2px solid #FF0000",shadow:"0 4px 8px rgba(255, 0, 0, 0.4)"},success:{emoji:"✅",label:"SUCCESS",background:"linear-gradient(90deg, #28a745, #1e7e34)",color:"#ffffff",border:"1px solid #28a745",shadow:"0 2px 4px rgba(40, 167, 69, 0.3)"}},exports.StyleBuilder=StyleBuilder,exports.StylePresets=o,exports.createStyledOutput=function(e,t,s,n,o,i=!0){const a=t[e],l=formatTimestamp(),d=i?detectDevToolsTheme():"light",c=(new StyleBuilder).color(getAdaptiveColor(r.timestamp,d)).size("11px").font("Monaco, Consolas, monospace").build(),p=(new StyleBuilder).bg(a.background).color(a.color).border(a.border).shadow(a.shadow).padding("2px 8px").rounded("4px").bold().font("Monaco, Consolas, monospace").size("12px").build(),u=(new StyleBuilder).bg(getAdaptiveColor(r.prefixBackground,d)).color(getAdaptiveColor(r.prefix,d)).padding("2px 6px").rounded("3px").bold().font("Monaco, Consolas, monospace").size("11px").build(),f=(new StyleBuilder).color(getAdaptiveColor(r.messageText,d)).font("system-ui, -apple-system, sans-serif").size("14px").build(),h=(new StyleBuilder).color(getAdaptiveColor(r.location,d)).size("11px").font("Monaco, Consolas, monospace").build();let m=`%c${l.slice(11,23)} %c${a.emoji} ${a.label}`;const g=[c,p];return s&&(m+=` %c${s}`,g.push(u)),m+=` %c${n}`,g.push(f),o&&(m+=` %c(${o.file}:${o.line}:${o.column})`,g.push(h)),[m,...g]},exports.detectEnvironmentPreset=detectEnvironmentPreset,exports.escapeHtml=function(e){const t=document.createElement("div");return t.textContent=e,t.innerHTML},exports.formatDisplayTime=function(e,t="short"){switch(t){case"time-only":return e.toTimeString().slice(0,8);case"full":return e.toISOString();default:return e.toISOString().slice(11,23)}},exports.formatTimestamp=formatTimestamp,exports.generateLogId=function(){return`${Date.now()}-${Math.random().toString(36).substr(2,9)}`},exports.getAdaptiveColor=getAdaptiveColor,exports.getOptimalConfig=function(){const t=detectEnvironmentPreset();return{...e,...s[t]}},exports.isBrowser=a,exports.isNode=i,exports.parseStackTrace=function(){try{const e=(new Error).stack;if(!e)return null;const t=e.split("\n").filter(e=>e.trim());for(let r=1;r<t.length;r++){const e=t[r];if(!e)continue;if(e.includes("parseStackTrace")||e.includes("Logger.")||e.includes(".log(")||e.includes("createStyledOutput"))continue;let s;const n=e.match(/at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?$/);if(n)s=n;else{const t=e.match(/(.+?)@(.+?):(\d+):(\d+)$/);if(t)s=t;else{const t=e.match(/(\S+)?@(.+?):(\d+):(\d+)$/);t&&(s=t)}}if(!s)continue;const[,o,i,a,l]=s;if(!i)continue;const d=i.split("/"),c=d[d.length-1];if(!c)continue;const p=c.split("?")[0],u=a?parseInt(a,10):0;return{file:p||"unknown",line:u,column:l?parseInt(l,10):0,function:o&&o.trim()?o.trim():void 0}}return null}catch{return null}},exports.parseTimeInput=function(e){if(e instanceof Date)return e;if("number"==typeof e)return new Date(Date.now()-e*t.h);if("string"==typeof e){const r=new Date(e);if(!isNaN(r.getTime()))return r;try{const r=function(e){const r=e.match(/^(\d+)(ms|s|m|h|d)$/);if(!r)throw new Error(`Invalid time format: ${e}. Use format like "2h", "30m", "1d"`);const[,s,n]=r,o=t[n];return parseInt(s||"0",10)*o}(e);return new Date(Date.now()-r)}catch{throw new Error(`Invalid time format: ${e}`)}}throw new Error("Unsupported time input type: "+typeof e)},exports.safeStringify=function(e,t=3){try{return JSON.stringify(e,(e,t)=>"function"==typeof t?"[Function]":t instanceof Error?`[Error: ${t.message}]`:t instanceof Date?t.toISOString():void 0===t?"[undefined]":t,2)}catch(r){return String(e)}},exports.setupThemeChangeListener=function(e){try{if("undefined"==typeof window||!window.matchMedia)return null;const t=window.matchMedia("(prefers-color-scheme: dark)"),handler=t=>{e(t.matches?"dark":"light")};return t.addEventListener?(t.addEventListener("change",handler),()=>t.removeEventListener("change",handler)):t.addListener?(t.addListener(handler),()=>t.removeListener?.(handler)):null}catch(t){return console.warn("Failed to set up theme change listener:",t),null}},exports.supportsANSIColors=function(){return!!i&&(!0===process.stdout?.isTTY||"1"===process.env.FORCE_COLOR||"true"===process.env.FORCE_COLOR)},exports.supportsCSSColors=function(){return a};
4
+ //# sourceMappingURL=environment-5I5unY89.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-5I5unY89.js","sources":["../../src/constants.ts","../../src/utils/timestamps.ts","../../src/styling/StyleBuilder.ts","../../src/utils/output.ts","../../src/utils/environment.ts","../../src/utils/stackTrace.ts"],"sourcesContent":["/**\n * @fileoverview Global constants for Advanced Logger\n */\n\nimport type { LogLevel, AdaptiveColors } from './types/index.js';\nimport type { LevelStyleConfig } from './utils/index.js';\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG = {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: true,\n theme: 'default' as const,\n bannerType: 'simple' as const,\n bufferSize: 1000,\n autoDetectTheme: true,\n outputFormat: 'auto' as const,\n} as const;\n\n/**\n * Basic level styles for core module (minimal CSS styling)\n */\nexport const LEVEL_STYLES: Record<LogLevel | 'success', LevelStyleConfig> = {\n debug: {\n emoji: '🔍',\n label: 'DEBUG',\n background: 'linear-gradient(90deg, #6c757d, #495057)',\n color: '#ffffff',\n border: '1px solid #6c757d',\n shadow: '0 2px 4px rgba(108, 117, 125, 0.3)'\n },\n info: {\n emoji: 'ℹ️',\n label: 'INFO',\n background: 'linear-gradient(90deg, #007bff, #0056b3)',\n color: '#ffffff',\n border: '1px solid #007bff',\n shadow: '0 2px 4px rgba(0, 123, 255, 0.3)'\n },\n warn: {\n emoji: '⚠️',\n label: 'WARN',\n background: 'linear-gradient(90deg, #ffc107, #e0a800)',\n color: '#000000',\n border: '1px solid #ffc107',\n shadow: '0 2px 4px rgba(255, 193, 7, 0.3)'\n },\n error: {\n emoji: '❌',\n label: 'ERROR',\n background: 'linear-gradient(90deg, #dc3545, #c82333)',\n color: '#ffffff',\n border: '1px solid #dc3545',\n shadow: '0 2px 4px rgba(220, 53, 69, 0.3)'\n },\n critical: {\n emoji: '🚨',\n label: 'CRITICAL',\n background: 'linear-gradient(90deg, #8B0000, #FF0000)',\n color: '#ffffff',\n border: '2px solid #FF0000',\n shadow: '0 4px 8px rgba(255, 0, 0, 0.4)'\n },\n success: {\n emoji: '✅',\n label: 'SUCCESS',\n background: 'linear-gradient(90deg, #28a745, #1e7e34)',\n color: '#ffffff',\n border: '1px solid #28a745',\n shadow: '0 2px 4px rgba(40, 167, 69, 0.3)'\n }\n} as const;\n\n/**\n * Maximum allowed buffer sizes for performance\n */\nexport const BUFFER_LIMITS = {\n MIN_SIZE: 50,\n DEFAULT_SIZE: 1000,\n MAX_SIZE: 10000,\n} as const;\n\n/**\n * Export format definitions with extensions\n */\nexport const EXPORT_FORMATS = {\n json: { extension: '.json', mimeType: 'application/json' },\n csv: { extension: '.csv', mimeType: 'text/csv' },\n markdown: { extension: '.md', mimeType: 'text/markdown' },\n plain: { extension: '.txt', mimeType: 'text/plain' },\n html: { extension: '.html', mimeType: 'text/html' },\n} as const;\n\n/**\n * CLI command definitions\n */\nexport const CLI_COMMANDS = {\n config: 'config',\n help: 'help',\n themes: 'themes',\n banners: 'banners',\n banner: 'banner',\n status: 'status',\n reset: 'reset',\n demo: 'demo',\n export: 'export',\n copy: 'copy',\n 'buffer-size': 'buffer-size',\n 'clear-buffer': 'clear-buffer',\n 'buffer-info': 'buffer-info',\n} as const;\n\n/**\n * Time parsing constants for relative time filters\n */\nexport const TIME_UNITS = {\n ms: 1,\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n} as const;\n\n/**\n * Default styling values\n */\nexport const STYLE_DEFAULTS = {\n FONT_FAMILY: 'Monaco, Consolas, monospace',\n FONT_SIZE: '12px',\n BORDER_RADIUS: '4px',\n PADDING: '4px 8px',\n} as const;\n\n/**\n * Level priority mapping for filtering\n */\nexport const LEVEL_PRIORITIES: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n critical: 4,\n} as const;\n\n/**\n * Adaptive color configurations for DevTools theme compatibility\n */\nexport const ADAPTIVE_COLORS = {\n timestamp: {\n light: '#666666',\n dark: '#a0a0a0',\n },\n messageText: {\n light: '#2d3748',\n dark: '#f7fafc',\n },\n prefix: {\n light: '#2d3748',\n dark: '#e2e8f0',\n },\n prefixBackground: {\n light: '#2d3748',\n dark: '#4a5568',\n },\n location: {\n light: '#718096',\n dark: '#a0aec0',\n },\n} as const satisfies Record<string, AdaptiveColors>;\n\n/**\n * Presets específicos para diferentes entornos de build\n */\nexport const BUILD_PRESETS = {\n /**\n * Configuración optimizada para Next.js builds\n */\n nextjs: {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: false,\n enableStackTrace: false,\n autoDetectTheme: false,\n outputFormat: 'build' as const,\n },\n\n /**\n * Configuración para Webpack builds\n */\n webpack: {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: false,\n autoDetectTheme: false,\n outputFormat: 'build' as const,\n },\n\n /**\n * Configuración para CI/CD environments\n */\n ci: {\n verbosity: 'info' as const,\n enableColors: false,\n enableTimestamps: true,\n enableStackTrace: true,\n autoDetectTheme: false,\n outputFormat: 'ci' as const,\n },\n\n /**\n * Configuración para desarrollo terminal\n */\n terminal: {\n verbosity: 'debug' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: true,\n autoDetectTheme: false,\n outputFormat: 'ansi' as const,\n }\n} as const;\n\n/**\n * Mapeo de variables de entorno a presets\n */\nexport const ENVIRONMENT_DETECTION = {\n // Next.js detection\n isNextJS: typeof process !== 'undefined' && (\n process.env.NEXT_RUNTIME ||\n process.env.NEXT_PUBLIC_VERCEL_ENV ||\n (process.argv && process.argv.some(arg => arg.includes('next')))\n ),\n\n // Webpack detection\n isWebpack: typeof process !== 'undefined' && (\n process.env.WEBPACK_ENV ||\n process.env.WEBPACK_BUILD ||\n (process.argv && process.argv.some(arg => arg.includes('webpack')))\n ),\n\n // CI/CD detection\n isCI: typeof process !== 'undefined' && (\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.JENKINS_URL ||\n process.env.GITLAB_CI ||\n process.env.TRAVIS ||\n process.env.CIRCLECI\n ),\n\n // Build detection\n isBuild: typeof process !== 'undefined' && (\n process.env.NODE_ENV === 'production' ||\n process.env.BUILD_MODE === 'production' ||\n (process.argv && process.argv.some(arg => arg.includes('build')))\n ),\n\n // Terminal with ANSI support\n isTerminal: typeof process !== 'undefined' && (\n process.stdout?.isTTY === true &&\n process.env.TERM !== 'dumb'\n )\n} as const;\n\n/**\n * Auto-detects the best preset based on current environment\n */\nexport function detectEnvironmentPreset(): keyof typeof BUILD_PRESETS {\n if (ENVIRONMENT_DETECTION.isCI) {\n return 'ci';\n }\n\n if (ENVIRONMENT_DETECTION.isNextJS) {\n return 'nextjs';\n }\n\n if (ENVIRONMENT_DETECTION.isWebpack) {\n return 'webpack';\n }\n\n if (ENVIRONMENT_DETECTION.isTerminal) {\n return 'terminal';\n }\n\n return 'terminal'; // Default fallback\n}\n\n/**\n * Gets the optimal configuration for current environment\n */\nexport function getOptimalConfig() {\n const preset = detectEnvironmentPreset();\n return {\n ...DEFAULT_CONFIG,\n ...BUILD_PRESETS[preset]\n };\n}","/**\n * @fileoverview Timestamp utilities for Advanced Logger\n */\n\nimport { TIME_UNITS } from '../constants.js';\n\n/**\n * Formats the timestamp using modern Date API\n */\nexport function formatTimestamp(): string {\n try {\n // Use modern Temporal API if available, fallback to Date\n const now = new Date();\n return now.toISOString();\n } catch {\n return new Date().toISOString();\n }\n}\n\n/**\n * Parse relative time strings like \"2h\", \"30m\", \"1d\" into milliseconds\n */\nexport function parseRelativeTime(timeStr: string): number {\n const match = timeStr.match(/^(\\d+)(ms|s|m|h|d)$/);\n if (!match) {\n throw new Error(`Invalid time format: ${timeStr}. Use format like \"2h\", \"30m\", \"1d\"`);\n }\n\n const [, amount, unit] = match;\n const multiplier = TIME_UNITS[unit as keyof typeof TIME_UNITS];\n \n return parseInt(amount || '0', 10) * multiplier;\n}\n\n/**\n * Parse time input which can be Date, ISO string, or relative time\n */\nexport function parseTimeInput(input: Date | string | number): Date {\n if (input instanceof Date) {\n return input;\n }\n\n if (typeof input === 'number') {\n // Assume hours ago\n return new Date(Date.now() - input * TIME_UNITS.h);\n }\n\n if (typeof input === 'string') {\n // Try parsing as ISO date first\n const isoDate = new Date(input);\n if (!isNaN(isoDate.getTime())) {\n return isoDate;\n }\n\n // Try parsing as relative time\n try {\n const ms = parseRelativeTime(input);\n return new Date(Date.now() - ms);\n } catch {\n throw new Error(`Invalid time format: ${input}`);\n }\n }\n\n throw new Error(`Unsupported time input type: ${typeof input}`);\n}\n\n/**\n * Format timestamp for display in different contexts\n */\nexport function formatDisplayTime(date: Date, format: 'short' | 'full' | 'time-only' = 'short'): string {\n switch (format) {\n case 'time-only':\n return date.toTimeString().slice(0, 8); // HH:MM:SS\n case 'full':\n return date.toISOString();\n case 'short':\n default:\n return date.toISOString().slice(11, 23); // HH:MM:SS.mmm\n }\n}","/**\n * @fileoverview StyleBuilder class for Advanced Logger\n */\n\n/**\n * Utility class for creating dynamic console styles with method chaining\n */\nexport class StyleBuilder {\n private styles: string[] = [];\n\n constructor(baseStyle = '') {\n if (baseStyle) this.styles.push(baseStyle);\n }\n\n /**\n * Add background color or gradient\n */\n bg(background: string): StyleBuilder {\n this.styles.push(`background: ${background}`);\n return this;\n }\n\n /**\n * Add text color\n */\n color(color: string): StyleBuilder {\n this.styles.push(`color: ${color}`);\n return this;\n }\n\n /**\n * Add border styling\n */\n border(border: string): StyleBuilder {\n this.styles.push(`border: ${border}`);\n return this;\n }\n\n /**\n * Add box shadow\n */\n shadow(shadow: string): StyleBuilder {\n this.styles.push(`box-shadow: ${shadow}`);\n return this;\n }\n\n /**\n * Add padding\n */\n padding(padding: string): StyleBuilder {\n this.styles.push(`padding: ${padding}`);\n return this;\n }\n\n /**\n * Add margin\n */\n margin(margin: string): StyleBuilder {\n this.styles.push(`margin: ${margin}`);\n return this;\n }\n\n /**\n * Add border radius\n */\n rounded(radius: string = '4px'): StyleBuilder {\n this.styles.push(`border-radius: ${radius}`);\n return this;\n }\n\n /**\n * Add font weight\n */\n bold(): StyleBuilder {\n this.styles.push('font-weight: bold');\n return this;\n }\n\n /**\n * Add font styling\n */\n font(font: string): StyleBuilder {\n this.styles.push(`font-family: ${font}`);\n return this;\n }\n\n /**\n * Set monospace font family (alias for common monospace fonts)\n */\n mono(): StyleBuilder {\n return this.font('Monaco, Consolas, \"Courier New\", monospace');\n }\n\n /**\n * Set system font family (alias for system fonts)\n */\n system(): StyleBuilder {\n return this.font('system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif');\n }\n\n /**\n * Add font size\n */\n size(size: string): StyleBuilder {\n this.styles.push(`font-size: ${size}`);\n return this;\n }\n\n /**\n * Add line height\n */\n lineHeight(height: string): StyleBuilder {\n this.styles.push(`line-height: ${height}`);\n return this;\n }\n\n /**\n * Add text decoration\n */\n underline(): StyleBuilder {\n this.styles.push('text-decoration: underline');\n return this;\n }\n\n /**\n * Add text transform\n */\n uppercase(): StyleBuilder {\n this.styles.push('text-transform: uppercase');\n return this;\n }\n\n /**\n * Add opacity\n */\n opacity(value: number): StyleBuilder {\n this.styles.push(`opacity: ${value}`);\n return this;\n }\n\n /**\n * Add display property\n */\n display(value: string): StyleBuilder {\n this.styles.push(`display: ${value}`);\n return this;\n }\n\n /**\n * Add position property\n */\n position(value: string): StyleBuilder {\n this.styles.push(`position: ${value}`);\n return this;\n }\n\n /**\n * Add transform property\n */\n transform(value: string): StyleBuilder {\n this.styles.push(`transform: ${value}`);\n return this;\n }\n\n /**\n * Add animation property\n */\n animation(value: string): StyleBuilder {\n this.styles.push(`animation: ${value}`);\n return this;\n }\n\n /**\n * Add transition property\n */\n transition(value: string): StyleBuilder {\n this.styles.push(`transition: ${value}`);\n return this;\n }\n\n /**\n * Add cursor property\n */\n cursor(value: string): StyleBuilder {\n this.styles.push(`cursor: ${value}`);\n return this;\n }\n\n /**\n * Add any custom CSS property\n */\n custom(property: string, value: string): StyleBuilder {\n this.styles.push(`${property}: ${value}`);\n return this;\n }\n\n /**\n * Add any CSS property (alias for custom)\n */\n css(property: string, value: string): StyleBuilder {\n return this.custom(property, value);\n }\n\n /**\n * Build the final CSS string\n */\n build(): string {\n return this.styles.join('; ');\n }\n\n /**\n * Clear all styles and start fresh\n */\n clear(): StyleBuilder {\n this.styles = [];\n return this;\n }\n\n /**\n * Clone this StyleBuilder with the same styles\n */\n clone(): StyleBuilder {\n const cloned = new StyleBuilder();\n cloned.styles = [...this.styles];\n return cloned;\n }\n\n /**\n * Merge another StyleBuilder's styles into this one\n */\n merge(other: StyleBuilder): StyleBuilder {\n this.styles.push(...other.styles);\n return this;\n }\n}\n\n/**\n * Proxy-based dynamic styler for chainable console styling\n */\nfunction createStyler(): any {\n const builder = new StyleBuilder();\n return new Proxy(builder, {\n get(target: StyleBuilder, prop: string) {\n if (prop in target) {\n const method = (target as any)[prop];\n if (typeof method === 'function') {\n return method.bind(target);\n }\n return method;\n }\n return undefined;\n }\n });\n}\n\n/**\n * Dynamic styler instance for external use\n */\nexport const $ = createStyler();\n\n/**\n * Pre-defined style presets for common use cases\n */\nexport const StylePresets = {\n success: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #00b894 0%, #00a085 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n error: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #e84393 0%, #d63031 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n warning: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #fdcb6e 0%, #e17055 100%)')\n .color('#2d3436')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n info: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n debug: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #667eea 0%, #764ba2 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n muted: () => new StyleBuilder()\n .color('#6c757d')\n .font('Monaco, Consolas, monospace')\n .size('12px'),\n\n accent: () => new StyleBuilder()\n .bg('#f8f9fa')\n .color('#495057')\n .padding('2px 6px')\n .rounded('3px')\n .border('1px solid #dee2e6'),\n\n neon: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #0f3460 0%, #e94560 100%)')\n .color('#00ffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold()\n .shadow('0 0 10px rgba(0, 255, 255, 0.5)'),\n};","/**\n * @fileoverview Styled output creation utilities for Advanced Logger\n */\n\nimport type { LogLevel, StackInfo, DevToolsTheme, AdaptiveColors } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\nimport { StyleBuilder } from '../styling/index.js';\nimport { ADAPTIVE_COLORS } from '../constants.js';\n\n/**\n * Style configuration for each log level\n */\nexport interface LevelStyleConfig {\n emoji: string;\n label: string;\n background: string;\n color: string;\n border: string;\n shadow: string;\n}\n\n/**\n * Detects the current DevTools theme preference\n */\nexport function detectDevToolsTheme(): DevToolsTheme {\n try {\n if (typeof window === 'undefined' || !window.matchMedia) {\n return 'light'; // Safe fallback for SSR or older browsers\n }\n \n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n return mediaQuery.matches ? 'dark' : 'light';\n } catch (error) {\n console.warn('Failed to detect DevTools theme:', error);\n return 'light'; // Fallback to light theme\n }\n}\n\n/**\n * Gets adaptive color based on current DevTools theme\n */\nexport function getAdaptiveColor(colors: AdaptiveColors, theme?: DevToolsTheme): string {\n const currentTheme = theme ?? detectDevToolsTheme();\n return colors[currentTheme];\n}\n\n/**\n * Sets up theme change listener for dynamic updates\n */\nexport function setupThemeChangeListener(callback: (theme: DevToolsTheme) => void): (() => void) | null {\n try {\n if (typeof window === 'undefined' || !window.matchMedia) {\n return null;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => {\n callback(e.matches ? 'dark' : 'light');\n };\n\n // Use newer addEventListener if available, fallback to addListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n } else if (mediaQuery.addListener) {\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener?.(handler);\n }\n\n return null;\n } catch (error) {\n console.warn('Failed to set up theme change listener:', error);\n return null;\n }\n}\n\n\n/**\n * Creates styled console output with multiple %c formatters\n */\nexport function createStyledOutput(\n level: LogLevel,\n levelStyles: Record<LogLevel | 'success', LevelStyleConfig>,\n prefix: string | undefined,\n message: string,\n stackInfo: StackInfo | null,\n autoDetectTheme: boolean = true\n): [string, ...string[]] {\n const levelConfig = levelStyles[level];\n const timestamp = formatTimestamp();\n const currentTheme = autoDetectTheme ? detectDevToolsTheme() : 'light';\n\n // Base styles with adaptive colors\n const timestampStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.timestamp, currentTheme))\n .size('11px')\n .font('Monaco, Consolas, monospace')\n .build();\n\n const levelStyle = new StyleBuilder()\n .bg(levelConfig.background)\n .color(levelConfig.color)\n .border(levelConfig.border)\n .shadow(levelConfig.shadow)\n .padding('2px 8px')\n .rounded('4px')\n .bold()\n .font('Monaco, Consolas, monospace')\n .size('12px')\n .build();\n\n const prefixStyle = new StyleBuilder()\n .bg(getAdaptiveColor(ADAPTIVE_COLORS.prefixBackground, currentTheme))\n .color(getAdaptiveColor(ADAPTIVE_COLORS.prefix, currentTheme))\n .padding('2px 6px')\n .rounded('3px')\n .bold()\n .font('Monaco, Consolas, monospace')\n .size('11px')\n .build();\n\n const messageStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.messageText, currentTheme))\n .font('system-ui, -apple-system, sans-serif')\n .size('14px')\n .build();\n\n const locationStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.location, currentTheme))\n .size('11px')\n .font('Monaco, Consolas, monospace')\n .build();\n\n // Build format string and styles\n let format = `%c${timestamp.slice(11, 23)} %c${levelConfig.emoji} ${levelConfig.label}`;\n const styles = [timestampStyle, levelStyle];\n\n if (prefix) {\n format += ` %c${prefix}`;\n styles.push(prefixStyle);\n }\n\n format += ` %c${message}`;\n styles.push(messageStyle);\n\n if (stackInfo) {\n format += ` %c(${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n styles.push(locationStyle);\n }\n\n return [format, ...styles];\n}\n\n/**\n * Create a unique ID for log entries\n */\nexport function generateLogId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Escape HTML entities for safe HTML output\n */\nexport function escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n}\n\n/**\n * Convert objects to safe string representation for logging\n */\nexport function safeStringify(obj: any, _maxDepth = 3): string {\n try {\n return JSON.stringify(obj, (_key, value) => {\n if (typeof value === 'function') return '[Function]';\n if (value instanceof Error) return `[Error: ${value.message}]`;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'undefined') return '[undefined]';\n return value;\n }, 2);\n } catch (error) {\n return String(obj);\n }\n}","/**\n * @fileoverview Environment detection utilities for Universal Logger\n */\n\n/**\n * Checks if running in Node.js environment\n */\nexport const isNode = typeof process !== 'undefined' && \n process.versions && \n process.versions.node;\n\n/**\n * Checks if running in browser environment\n */\nexport const isBrowser = typeof window !== 'undefined' && \n typeof document !== 'undefined';\n\n/**\n * Checks if running in web worker environment\n */\nexport const isWebWorker = typeof self !== 'undefined' && \n typeof (self as any).importScripts === 'function';\n\n/**\n * Checks if running in Deno environment\n */\nexport const isDeno = typeof globalThis !== 'undefined' && \n 'Deno' in globalThis;\n\n/**\n * Gets the current runtime environment\n */\nexport function getRuntimeEnvironment(): 'node' | 'browser' | 'webworker' | 'deno' | 'unknown' {\n if (isNode) return 'node';\n if (isBrowser) return 'browser';\n if (isWebWorker) return 'webworker';\n if (isDeno) return 'deno';\n return 'unknown';\n}\n\n/**\n * Checks if colors/styling should be supported in current environment\n */\nexport function supportsColors(): boolean {\n if (isBrowser) {\n // Browser always supports CSS colors\n return true;\n }\n \n if (isNode) {\n // Check if Node.js supports colors\n return process.stdout?.isTTY === true || \n process.env.FORCE_COLOR === '1' ||\n process.env.FORCE_COLOR === 'true';\n }\n \n return false;\n}\n\n/**\n * Checks if CSS styling is supported (browser-only feature)\n */\nexport function supportsCSSColors(): boolean {\n return isBrowser;\n}\n\n/**\n * Checks if ANSI colors are supported (terminal environments)\n */\nexport function supportsANSIColors(): boolean {\n if (isNode) {\n return process.stdout?.isTTY === true || \n process.env.FORCE_COLOR === '1' ||\n process.env.FORCE_COLOR === 'true';\n }\n \n return false;\n}\n\n/**\n * Gets environment-specific information\n */\nexport function getEnvironmentInfo() {\n const env = getRuntimeEnvironment();\n \n return {\n runtime: env,\n supportsColors: supportsColors(),\n supportsCSSColors: supportsCSSColors(),\n supportsANSIColors: supportsANSIColors(),\n isProduction: isNode ? process.env.NODE_ENV === 'production' : false,\n version: isNode ? process.versions.node : (isBrowser ? navigator.userAgent : 'unknown')\n };\n}","/**\n * @fileoverview Stack trace parsing utilities for Advanced Logger\n */\n\nimport type { StackInfo } from '../types/index.js';\n\n/**\n * Parses the current stack trace to extract caller information\n */\nexport function parseStackTrace(): StackInfo | null {\n try {\n const stack = new Error().stack;\n if (!stack) {\n return null;\n }\n\n const lines = stack.split('\\n').filter(line => line.trim());\n \n // Find the first caller that's not from Logger methods\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n \n if (!line) {\n continue;\n }\n \n // Skip if line contains Logger methods or parseStackTrace\n if (line.includes('parseStackTrace') || \n line.includes('Logger.') || \n line.includes('.log(') ||\n line.includes('createStyledOutput')) {\n continue;\n }\n\n // Parse different stack trace formats\n let match;\n \n // Chrome format: \"at functionName (file:line:column)\" or \"at file:line:column\"\n const chromeMatch = line.match(/at\\s+(?:(.+?)\\s+\\()?(.+?):(\\d+):(\\d+)\\)?$/);\n if (chromeMatch) {\n match = chromeMatch;\n } else {\n // Firefox format: \"functionName@file:line:column\"\n const firefoxMatch = line.match(/(.+?)@(.+?):(\\d+):(\\d+)$/);\n if (firefoxMatch) {\n match = firefoxMatch;\n } else {\n // Safari/other formats\n const safariMatch = line.match(/(\\S+)?@(.+?):(\\d+):(\\d+)$/);\n if (safariMatch) {\n match = safariMatch;\n }\n }\n }\n\n if (!match) {\n continue;\n }\n\n const [, functionName, file, lineStr, columnStr] = match;\n \n if (!file) {\n continue;\n }\n \n // Process file path - remove query params and get filename\n const fileParts = file.split('/');\n const fileName = fileParts[fileParts.length - 1];\n if (!fileName) {\n continue;\n }\n const cleanFileName = fileName.split('?')[0];\n \n // Parse line and column numbers\n const lineNum = lineStr ? parseInt(lineStr, 10) : 0;\n const columnNum = columnStr ? parseInt(columnStr, 10) : 0;\n \n // Clean function name\n const cleanFunction = functionName && functionName.trim() \n ? functionName.trim() \n : undefined;\n \n return {\n file: cleanFileName ? cleanFileName : 'unknown',\n line: lineNum,\n column: columnNum,\n function: cleanFunction\n };\n }\n \n return null;\n } catch {\n return null;\n }\n}"],"names":["DEFAULT_CONFIG","verbosity","enableColors","enableTimestamps","enableStackTrace","theme","bannerType","bufferSize","autoDetectTheme","outputFormat","TIME_UNITS","ms","s","m","h","d","ADAPTIVE_COLORS","timestamp","light","dark","messageText","prefix","prefixBackground","location","BUILD_PRESETS","nextjs","webpack","ci","terminal","ENVIRONMENT_DETECTION","isNextJS","process","env","NEXT_RUNTIME","NEXT_PUBLIC_VERCEL_ENV","argv","some","arg","includes","isWebpack","WEBPACK_ENV","WEBPACK_BUILD","isCI","CI","GITHUB_ACTIONS","JENKINS_URL","GITLAB_CI","TRAVIS","CIRCLECI","isBuild","isTerminal","stdout","isTTY","TERM","detectEnvironmentPreset","formatTimestamp","Date","toISOString","StyleBuilder","styles","constructor","baseStyle","this","push","bg","background","color","border","shadow","padding","margin","rounded","radius","bold","font","mono","system","size","lineHeight","height","underline","uppercase","opacity","value","display","position","transform","animation","transition","cursor","custom","property","css","build","join","clear","clone","cloned","merge","other","builder","Proxy","get","target","prop","method","bind","createStyler","StylePresets","success","error","warning","info","debug","muted","accent","neon","detectDevToolsTheme","window","matchMedia","matches","console","warn","getAdaptiveColor","colors","isNode","versions","node","isBrowser","document","MIN_SIZE","DEFAULT_SIZE","MAX_SIZE","json","extension","mimeType","csv","markdown","plain","html","emoji","label","critical","level","levelStyles","message","stackInfo","levelConfig","currentTheme","timestampStyle","levelStyle","prefixStyle","messageStyle","locationStyle","format","slice","file","line","column","text","div","createElement","textContent","innerHTML","date","toTimeString","now","Math","random","toString","substr","preset","stack","Error","lines","split","filter","trim","i","length","match","chromeMatch","firefoxMatch","safariMatch","functionName","lineStr","columnStr","fileParts","fileName","cleanFileName","lineNum","parseInt","function","input","isoDate","isNaN","getTime","timeStr","amount","unit","multiplier","parseRelativeTime","obj","_maxDepth","JSON","stringify","_key","String","callback","mediaQuery","handler","e","addEventListener","removeEventListener","addListener","removeListener","FORCE_COLOR"],"mappings":"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"}
@@ -64,7 +64,8 @@ const DEFAULT_CONFIG = {
64
64
  theme: "default",
65
65
  bannerType: "simple",
66
66
  bufferSize: 1e3,
67
- autoDetectTheme: true
67
+ autoDetectTheme: true,
68
+ outputFormat: "auto"
68
69
  };
69
70
  const LEVEL_STYLES = {
70
71
  debug: {
@@ -157,6 +158,86 @@ const ADAPTIVE_COLORS = {
157
158
  dark: "#a0aec0"
158
159
  }
159
160
  };
161
+ const BUILD_PRESETS = {
162
+ /**
163
+ * Configuración optimizada para Next.js builds
164
+ */
165
+ nextjs: {
166
+ verbosity: "info",
167
+ enableColors: true,
168
+ enableTimestamps: false,
169
+ enableStackTrace: false,
170
+ autoDetectTheme: false,
171
+ outputFormat: "build"
172
+ },
173
+ /**
174
+ * Configuración para Webpack builds
175
+ */
176
+ webpack: {
177
+ verbosity: "info",
178
+ enableColors: true,
179
+ enableTimestamps: true,
180
+ enableStackTrace: false,
181
+ autoDetectTheme: false,
182
+ outputFormat: "build"
183
+ },
184
+ /**
185
+ * Configuración para CI/CD environments
186
+ */
187
+ ci: {
188
+ verbosity: "info",
189
+ enableColors: false,
190
+ enableTimestamps: true,
191
+ enableStackTrace: true,
192
+ autoDetectTheme: false,
193
+ outputFormat: "ci"
194
+ },
195
+ /**
196
+ * Configuración para desarrollo terminal
197
+ */
198
+ terminal: {
199
+ verbosity: "debug",
200
+ enableColors: true,
201
+ enableTimestamps: true,
202
+ enableStackTrace: true,
203
+ autoDetectTheme: false,
204
+ outputFormat: "ansi"
205
+ }
206
+ };
207
+ const ENVIRONMENT_DETECTION = {
208
+ // Next.js detection
209
+ isNextJS: typeof process !== "undefined" && (process.env.NEXT_RUNTIME || process.env.NEXT_PUBLIC_VERCEL_ENV || process.argv && process.argv.some((arg) => arg.includes("next"))),
210
+ // Webpack detection
211
+ isWebpack: typeof process !== "undefined" && (process.env.WEBPACK_ENV || process.env.WEBPACK_BUILD || process.argv && process.argv.some((arg) => arg.includes("webpack"))),
212
+ // CI/CD detection
213
+ isCI: typeof process !== "undefined" && (process.env.CI || process.env.GITHUB_ACTIONS || process.env.JENKINS_URL || process.env.GITLAB_CI || process.env.TRAVIS || process.env.CIRCLECI),
214
+ // Build detection
215
+ isBuild: typeof process !== "undefined" && true,
216
+ // Terminal with ANSI support
217
+ isTerminal: typeof process !== "undefined" && (process.stdout?.isTTY === true && process.env.TERM !== "dumb")
218
+ };
219
+ function detectEnvironmentPreset() {
220
+ if (ENVIRONMENT_DETECTION.isCI) {
221
+ return "ci";
222
+ }
223
+ if (ENVIRONMENT_DETECTION.isNextJS) {
224
+ return "nextjs";
225
+ }
226
+ if (ENVIRONMENT_DETECTION.isWebpack) {
227
+ return "webpack";
228
+ }
229
+ if (ENVIRONMENT_DETECTION.isTerminal) {
230
+ return "terminal";
231
+ }
232
+ return "terminal";
233
+ }
234
+ function getOptimalConfig() {
235
+ const preset = detectEnvironmentPreset();
236
+ return {
237
+ ...DEFAULT_CONFIG,
238
+ ...BUILD_PRESETS[preset]
239
+ };
240
+ }
160
241
  function formatTimestamp() {
161
242
  try {
162
243
  const now = /* @__PURE__ */ new Date();
@@ -519,26 +600,37 @@ const isBrowser = typeof window !== "undefined" && typeof document !== "undefine
519
600
  function supportsCSSColors() {
520
601
  return isBrowser;
521
602
  }
603
+ function supportsANSIColors() {
604
+ if (isNode) {
605
+ return process.stdout?.isTTY === true || process.env.FORCE_COLOR === "1" || process.env.FORCE_COLOR === "true";
606
+ }
607
+ return false;
608
+ }
522
609
  export {
523
610
  ADAPTIVE_COLORS as A,
524
- BUFFER_LIMITS as B,
611
+ BUILD_PRESETS as B,
525
612
  DEFAULT_CONFIG as D,
526
- EXPORT_FORMATS as E,
613
+ ENVIRONMENT_DETECTION as E,
527
614
  LEVEL_STYLES as L,
528
615
  StylePresets as S,
529
616
  isBrowser as a,
530
617
  StyleBuilder as b,
531
618
  createStyledOutput as c,
532
- generateLogId as d,
533
- parseTimeInput as e,
619
+ detectEnvironmentPreset as d,
620
+ supportsANSIColors as e,
534
621
  formatTimestamp as f,
535
- getAdaptiveColor as g,
536
- formatDisplayTime as h,
622
+ getOptimalConfig as g,
623
+ getAdaptiveColor as h,
537
624
  isNode as i,
538
- safeStringify as j,
539
- escapeHtml as k,
540
- setupThemeChangeListener as l,
625
+ BUFFER_LIMITS as j,
626
+ generateLogId as k,
627
+ parseTimeInput as l,
628
+ formatDisplayTime as m,
629
+ safeStringify as n,
630
+ escapeHtml as o,
541
631
  parseStackTrace as p,
632
+ EXPORT_FORMATS as q,
633
+ setupThemeChangeListener as r,
542
634
  supportsCSSColors as s
543
635
  };
544
- //# sourceMappingURL=environment-Bxbnw4pd.js.map
636
+ //# sourceMappingURL=environment-wXLQvk5g.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-wXLQvk5g.js","sources":["../../src/utils/stackTrace.ts","../../src/constants.ts","../../src/utils/timestamps.ts","../../src/styling/StyleBuilder.ts","../../src/utils/output.ts","../../src/utils/environment.ts"],"sourcesContent":["/**\n * @fileoverview Stack trace parsing utilities for Advanced Logger\n */\n\nimport type { StackInfo } from '../types/index.js';\n\n/**\n * Parses the current stack trace to extract caller information\n */\nexport function parseStackTrace(): StackInfo | null {\n try {\n const stack = new Error().stack;\n if (!stack) {\n return null;\n }\n\n const lines = stack.split('\\n').filter(line => line.trim());\n \n // Find the first caller that's not from Logger methods\n for (let i = 1; i < lines.length; i++) {\n const line = lines[i];\n \n if (!line) {\n continue;\n }\n \n // Skip if line contains Logger methods or parseStackTrace\n if (line.includes('parseStackTrace') || \n line.includes('Logger.') || \n line.includes('.log(') ||\n line.includes('createStyledOutput')) {\n continue;\n }\n\n // Parse different stack trace formats\n let match;\n \n // Chrome format: \"at functionName (file:line:column)\" or \"at file:line:column\"\n const chromeMatch = line.match(/at\\s+(?:(.+?)\\s+\\()?(.+?):(\\d+):(\\d+)\\)?$/);\n if (chromeMatch) {\n match = chromeMatch;\n } else {\n // Firefox format: \"functionName@file:line:column\"\n const firefoxMatch = line.match(/(.+?)@(.+?):(\\d+):(\\d+)$/);\n if (firefoxMatch) {\n match = firefoxMatch;\n } else {\n // Safari/other formats\n const safariMatch = line.match(/(\\S+)?@(.+?):(\\d+):(\\d+)$/);\n if (safariMatch) {\n match = safariMatch;\n }\n }\n }\n\n if (!match) {\n continue;\n }\n\n const [, functionName, file, lineStr, columnStr] = match;\n \n if (!file) {\n continue;\n }\n \n // Process file path - remove query params and get filename\n const fileParts = file.split('/');\n const fileName = fileParts[fileParts.length - 1];\n if (!fileName) {\n continue;\n }\n const cleanFileName = fileName.split('?')[0];\n \n // Parse line and column numbers\n const lineNum = lineStr ? parseInt(lineStr, 10) : 0;\n const columnNum = columnStr ? parseInt(columnStr, 10) : 0;\n \n // Clean function name\n const cleanFunction = functionName && functionName.trim() \n ? functionName.trim() \n : undefined;\n \n return {\n file: cleanFileName ? cleanFileName : 'unknown',\n line: lineNum,\n column: columnNum,\n function: cleanFunction\n };\n }\n \n return null;\n } catch {\n return null;\n }\n}","/**\n * @fileoverview Global constants for Advanced Logger\n */\n\nimport type { LogLevel, AdaptiveColors } from './types/index.js';\nimport type { LevelStyleConfig } from './utils/index.js';\n\n/**\n * Default configuration values\n */\nexport const DEFAULT_CONFIG = {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: true,\n theme: 'default' as const,\n bannerType: 'simple' as const,\n bufferSize: 1000,\n autoDetectTheme: true,\n outputFormat: 'auto' as const,\n} as const;\n\n/**\n * Basic level styles for core module (minimal CSS styling)\n */\nexport const LEVEL_STYLES: Record<LogLevel | 'success', LevelStyleConfig> = {\n debug: {\n emoji: '🔍',\n label: 'DEBUG',\n background: 'linear-gradient(90deg, #6c757d, #495057)',\n color: '#ffffff',\n border: '1px solid #6c757d',\n shadow: '0 2px 4px rgba(108, 117, 125, 0.3)'\n },\n info: {\n emoji: 'ℹ️',\n label: 'INFO',\n background: 'linear-gradient(90deg, #007bff, #0056b3)',\n color: '#ffffff',\n border: '1px solid #007bff',\n shadow: '0 2px 4px rgba(0, 123, 255, 0.3)'\n },\n warn: {\n emoji: '⚠️',\n label: 'WARN',\n background: 'linear-gradient(90deg, #ffc107, #e0a800)',\n color: '#000000',\n border: '1px solid #ffc107',\n shadow: '0 2px 4px rgba(255, 193, 7, 0.3)'\n },\n error: {\n emoji: '❌',\n label: 'ERROR',\n background: 'linear-gradient(90deg, #dc3545, #c82333)',\n color: '#ffffff',\n border: '1px solid #dc3545',\n shadow: '0 2px 4px rgba(220, 53, 69, 0.3)'\n },\n critical: {\n emoji: '🚨',\n label: 'CRITICAL',\n background: 'linear-gradient(90deg, #8B0000, #FF0000)',\n color: '#ffffff',\n border: '2px solid #FF0000',\n shadow: '0 4px 8px rgba(255, 0, 0, 0.4)'\n },\n success: {\n emoji: '✅',\n label: 'SUCCESS',\n background: 'linear-gradient(90deg, #28a745, #1e7e34)',\n color: '#ffffff',\n border: '1px solid #28a745',\n shadow: '0 2px 4px rgba(40, 167, 69, 0.3)'\n }\n} as const;\n\n/**\n * Maximum allowed buffer sizes for performance\n */\nexport const BUFFER_LIMITS = {\n MIN_SIZE: 50,\n DEFAULT_SIZE: 1000,\n MAX_SIZE: 10000,\n} as const;\n\n/**\n * Export format definitions with extensions\n */\nexport const EXPORT_FORMATS = {\n json: { extension: '.json', mimeType: 'application/json' },\n csv: { extension: '.csv', mimeType: 'text/csv' },\n markdown: { extension: '.md', mimeType: 'text/markdown' },\n plain: { extension: '.txt', mimeType: 'text/plain' },\n html: { extension: '.html', mimeType: 'text/html' },\n} as const;\n\n/**\n * CLI command definitions\n */\nexport const CLI_COMMANDS = {\n config: 'config',\n help: 'help',\n themes: 'themes',\n banners: 'banners',\n banner: 'banner',\n status: 'status',\n reset: 'reset',\n demo: 'demo',\n export: 'export',\n copy: 'copy',\n 'buffer-size': 'buffer-size',\n 'clear-buffer': 'clear-buffer',\n 'buffer-info': 'buffer-info',\n} as const;\n\n/**\n * Time parsing constants for relative time filters\n */\nexport const TIME_UNITS = {\n ms: 1,\n s: 1000,\n m: 60 * 1000,\n h: 60 * 60 * 1000,\n d: 24 * 60 * 60 * 1000,\n} as const;\n\n/**\n * Default styling values\n */\nexport const STYLE_DEFAULTS = {\n FONT_FAMILY: 'Monaco, Consolas, monospace',\n FONT_SIZE: '12px',\n BORDER_RADIUS: '4px',\n PADDING: '4px 8px',\n} as const;\n\n/**\n * Level priority mapping for filtering\n */\nexport const LEVEL_PRIORITIES: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n critical: 4,\n} as const;\n\n/**\n * Adaptive color configurations for DevTools theme compatibility\n */\nexport const ADAPTIVE_COLORS = {\n timestamp: {\n light: '#666666',\n dark: '#a0a0a0',\n },\n messageText: {\n light: '#2d3748',\n dark: '#f7fafc',\n },\n prefix: {\n light: '#2d3748',\n dark: '#e2e8f0',\n },\n prefixBackground: {\n light: '#2d3748',\n dark: '#4a5568',\n },\n location: {\n light: '#718096',\n dark: '#a0aec0',\n },\n} as const satisfies Record<string, AdaptiveColors>;\n\n/**\n * Presets específicos para diferentes entornos de build\n */\nexport const BUILD_PRESETS = {\n /**\n * Configuración optimizada para Next.js builds\n */\n nextjs: {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: false,\n enableStackTrace: false,\n autoDetectTheme: false,\n outputFormat: 'build' as const,\n },\n\n /**\n * Configuración para Webpack builds\n */\n webpack: {\n verbosity: 'info' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: false,\n autoDetectTheme: false,\n outputFormat: 'build' as const,\n },\n\n /**\n * Configuración para CI/CD environments\n */\n ci: {\n verbosity: 'info' as const,\n enableColors: false,\n enableTimestamps: true,\n enableStackTrace: true,\n autoDetectTheme: false,\n outputFormat: 'ci' as const,\n },\n\n /**\n * Configuración para desarrollo terminal\n */\n terminal: {\n verbosity: 'debug' as const,\n enableColors: true,\n enableTimestamps: true,\n enableStackTrace: true,\n autoDetectTheme: false,\n outputFormat: 'ansi' as const,\n }\n} as const;\n\n/**\n * Mapeo de variables de entorno a presets\n */\nexport const ENVIRONMENT_DETECTION = {\n // Next.js detection\n isNextJS: typeof process !== 'undefined' && (\n process.env.NEXT_RUNTIME ||\n process.env.NEXT_PUBLIC_VERCEL_ENV ||\n (process.argv && process.argv.some(arg => arg.includes('next')))\n ),\n\n // Webpack detection\n isWebpack: typeof process !== 'undefined' && (\n process.env.WEBPACK_ENV ||\n process.env.WEBPACK_BUILD ||\n (process.argv && process.argv.some(arg => arg.includes('webpack')))\n ),\n\n // CI/CD detection\n isCI: typeof process !== 'undefined' && (\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.JENKINS_URL ||\n process.env.GITLAB_CI ||\n process.env.TRAVIS ||\n process.env.CIRCLECI\n ),\n\n // Build detection\n isBuild: typeof process !== 'undefined' && (\n process.env.NODE_ENV === 'production' ||\n process.env.BUILD_MODE === 'production' ||\n (process.argv && process.argv.some(arg => arg.includes('build')))\n ),\n\n // Terminal with ANSI support\n isTerminal: typeof process !== 'undefined' && (\n process.stdout?.isTTY === true &&\n process.env.TERM !== 'dumb'\n )\n} as const;\n\n/**\n * Auto-detects the best preset based on current environment\n */\nexport function detectEnvironmentPreset(): keyof typeof BUILD_PRESETS {\n if (ENVIRONMENT_DETECTION.isCI) {\n return 'ci';\n }\n\n if (ENVIRONMENT_DETECTION.isNextJS) {\n return 'nextjs';\n }\n\n if (ENVIRONMENT_DETECTION.isWebpack) {\n return 'webpack';\n }\n\n if (ENVIRONMENT_DETECTION.isTerminal) {\n return 'terminal';\n }\n\n return 'terminal'; // Default fallback\n}\n\n/**\n * Gets the optimal configuration for current environment\n */\nexport function getOptimalConfig() {\n const preset = detectEnvironmentPreset();\n return {\n ...DEFAULT_CONFIG,\n ...BUILD_PRESETS[preset]\n };\n}","/**\n * @fileoverview Timestamp utilities for Advanced Logger\n */\n\nimport { TIME_UNITS } from '../constants.js';\n\n/**\n * Formats the timestamp using modern Date API\n */\nexport function formatTimestamp(): string {\n try {\n // Use modern Temporal API if available, fallback to Date\n const now = new Date();\n return now.toISOString();\n } catch {\n return new Date().toISOString();\n }\n}\n\n/**\n * Parse relative time strings like \"2h\", \"30m\", \"1d\" into milliseconds\n */\nexport function parseRelativeTime(timeStr: string): number {\n const match = timeStr.match(/^(\\d+)(ms|s|m|h|d)$/);\n if (!match) {\n throw new Error(`Invalid time format: ${timeStr}. Use format like \"2h\", \"30m\", \"1d\"`);\n }\n\n const [, amount, unit] = match;\n const multiplier = TIME_UNITS[unit as keyof typeof TIME_UNITS];\n \n return parseInt(amount || '0', 10) * multiplier;\n}\n\n/**\n * Parse time input which can be Date, ISO string, or relative time\n */\nexport function parseTimeInput(input: Date | string | number): Date {\n if (input instanceof Date) {\n return input;\n }\n\n if (typeof input === 'number') {\n // Assume hours ago\n return new Date(Date.now() - input * TIME_UNITS.h);\n }\n\n if (typeof input === 'string') {\n // Try parsing as ISO date first\n const isoDate = new Date(input);\n if (!isNaN(isoDate.getTime())) {\n return isoDate;\n }\n\n // Try parsing as relative time\n try {\n const ms = parseRelativeTime(input);\n return new Date(Date.now() - ms);\n } catch {\n throw new Error(`Invalid time format: ${input}`);\n }\n }\n\n throw new Error(`Unsupported time input type: ${typeof input}`);\n}\n\n/**\n * Format timestamp for display in different contexts\n */\nexport function formatDisplayTime(date: Date, format: 'short' | 'full' | 'time-only' = 'short'): string {\n switch (format) {\n case 'time-only':\n return date.toTimeString().slice(0, 8); // HH:MM:SS\n case 'full':\n return date.toISOString();\n case 'short':\n default:\n return date.toISOString().slice(11, 23); // HH:MM:SS.mmm\n }\n}","/**\n * @fileoverview StyleBuilder class for Advanced Logger\n */\n\n/**\n * Utility class for creating dynamic console styles with method chaining\n */\nexport class StyleBuilder {\n private styles: string[] = [];\n\n constructor(baseStyle = '') {\n if (baseStyle) this.styles.push(baseStyle);\n }\n\n /**\n * Add background color or gradient\n */\n bg(background: string): StyleBuilder {\n this.styles.push(`background: ${background}`);\n return this;\n }\n\n /**\n * Add text color\n */\n color(color: string): StyleBuilder {\n this.styles.push(`color: ${color}`);\n return this;\n }\n\n /**\n * Add border styling\n */\n border(border: string): StyleBuilder {\n this.styles.push(`border: ${border}`);\n return this;\n }\n\n /**\n * Add box shadow\n */\n shadow(shadow: string): StyleBuilder {\n this.styles.push(`box-shadow: ${shadow}`);\n return this;\n }\n\n /**\n * Add padding\n */\n padding(padding: string): StyleBuilder {\n this.styles.push(`padding: ${padding}`);\n return this;\n }\n\n /**\n * Add margin\n */\n margin(margin: string): StyleBuilder {\n this.styles.push(`margin: ${margin}`);\n return this;\n }\n\n /**\n * Add border radius\n */\n rounded(radius: string = '4px'): StyleBuilder {\n this.styles.push(`border-radius: ${radius}`);\n return this;\n }\n\n /**\n * Add font weight\n */\n bold(): StyleBuilder {\n this.styles.push('font-weight: bold');\n return this;\n }\n\n /**\n * Add font styling\n */\n font(font: string): StyleBuilder {\n this.styles.push(`font-family: ${font}`);\n return this;\n }\n\n /**\n * Set monospace font family (alias for common monospace fonts)\n */\n mono(): StyleBuilder {\n return this.font('Monaco, Consolas, \"Courier New\", monospace');\n }\n\n /**\n * Set system font family (alias for system fonts)\n */\n system(): StyleBuilder {\n return this.font('system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif');\n }\n\n /**\n * Add font size\n */\n size(size: string): StyleBuilder {\n this.styles.push(`font-size: ${size}`);\n return this;\n }\n\n /**\n * Add line height\n */\n lineHeight(height: string): StyleBuilder {\n this.styles.push(`line-height: ${height}`);\n return this;\n }\n\n /**\n * Add text decoration\n */\n underline(): StyleBuilder {\n this.styles.push('text-decoration: underline');\n return this;\n }\n\n /**\n * Add text transform\n */\n uppercase(): StyleBuilder {\n this.styles.push('text-transform: uppercase');\n return this;\n }\n\n /**\n * Add opacity\n */\n opacity(value: number): StyleBuilder {\n this.styles.push(`opacity: ${value}`);\n return this;\n }\n\n /**\n * Add display property\n */\n display(value: string): StyleBuilder {\n this.styles.push(`display: ${value}`);\n return this;\n }\n\n /**\n * Add position property\n */\n position(value: string): StyleBuilder {\n this.styles.push(`position: ${value}`);\n return this;\n }\n\n /**\n * Add transform property\n */\n transform(value: string): StyleBuilder {\n this.styles.push(`transform: ${value}`);\n return this;\n }\n\n /**\n * Add animation property\n */\n animation(value: string): StyleBuilder {\n this.styles.push(`animation: ${value}`);\n return this;\n }\n\n /**\n * Add transition property\n */\n transition(value: string): StyleBuilder {\n this.styles.push(`transition: ${value}`);\n return this;\n }\n\n /**\n * Add cursor property\n */\n cursor(value: string): StyleBuilder {\n this.styles.push(`cursor: ${value}`);\n return this;\n }\n\n /**\n * Add any custom CSS property\n */\n custom(property: string, value: string): StyleBuilder {\n this.styles.push(`${property}: ${value}`);\n return this;\n }\n\n /**\n * Add any CSS property (alias for custom)\n */\n css(property: string, value: string): StyleBuilder {\n return this.custom(property, value);\n }\n\n /**\n * Build the final CSS string\n */\n build(): string {\n return this.styles.join('; ');\n }\n\n /**\n * Clear all styles and start fresh\n */\n clear(): StyleBuilder {\n this.styles = [];\n return this;\n }\n\n /**\n * Clone this StyleBuilder with the same styles\n */\n clone(): StyleBuilder {\n const cloned = new StyleBuilder();\n cloned.styles = [...this.styles];\n return cloned;\n }\n\n /**\n * Merge another StyleBuilder's styles into this one\n */\n merge(other: StyleBuilder): StyleBuilder {\n this.styles.push(...other.styles);\n return this;\n }\n}\n\n/**\n * Proxy-based dynamic styler for chainable console styling\n */\nfunction createStyler(): any {\n const builder = new StyleBuilder();\n return new Proxy(builder, {\n get(target: StyleBuilder, prop: string) {\n if (prop in target) {\n const method = (target as any)[prop];\n if (typeof method === 'function') {\n return method.bind(target);\n }\n return method;\n }\n return undefined;\n }\n });\n}\n\n/**\n * Dynamic styler instance for external use\n */\nexport const $ = createStyler();\n\n/**\n * Pre-defined style presets for common use cases\n */\nexport const StylePresets = {\n success: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #00b894 0%, #00a085 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n error: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #e84393 0%, #d63031 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n warning: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #fdcb6e 0%, #e17055 100%)')\n .color('#2d3436')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n info: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #74b9ff 0%, #0984e3 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n debug: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #667eea 0%, #764ba2 100%)')\n .color('#ffffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold(),\n\n muted: () => new StyleBuilder()\n .color('#6c757d')\n .font('Monaco, Consolas, monospace')\n .size('12px'),\n\n accent: () => new StyleBuilder()\n .bg('#f8f9fa')\n .color('#495057')\n .padding('2px 6px')\n .rounded('3px')\n .border('1px solid #dee2e6'),\n\n neon: () => new StyleBuilder()\n .bg('linear-gradient(135deg, #0f3460 0%, #e94560 100%)')\n .color('#00ffff')\n .padding('4px 8px')\n .rounded('4px')\n .bold()\n .shadow('0 0 10px rgba(0, 255, 255, 0.5)'),\n};","/**\n * @fileoverview Styled output creation utilities for Advanced Logger\n */\n\nimport type { LogLevel, StackInfo, DevToolsTheme, AdaptiveColors } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\nimport { StyleBuilder } from '../styling/index.js';\nimport { ADAPTIVE_COLORS } from '../constants.js';\n\n/**\n * Style configuration for each log level\n */\nexport interface LevelStyleConfig {\n emoji: string;\n label: string;\n background: string;\n color: string;\n border: string;\n shadow: string;\n}\n\n/**\n * Detects the current DevTools theme preference\n */\nexport function detectDevToolsTheme(): DevToolsTheme {\n try {\n if (typeof window === 'undefined' || !window.matchMedia) {\n return 'light'; // Safe fallback for SSR or older browsers\n }\n \n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n return mediaQuery.matches ? 'dark' : 'light';\n } catch (error) {\n console.warn('Failed to detect DevTools theme:', error);\n return 'light'; // Fallback to light theme\n }\n}\n\n/**\n * Gets adaptive color based on current DevTools theme\n */\nexport function getAdaptiveColor(colors: AdaptiveColors, theme?: DevToolsTheme): string {\n const currentTheme = theme ?? detectDevToolsTheme();\n return colors[currentTheme];\n}\n\n/**\n * Sets up theme change listener for dynamic updates\n */\nexport function setupThemeChangeListener(callback: (theme: DevToolsTheme) => void): (() => void) | null {\n try {\n if (typeof window === 'undefined' || !window.matchMedia) {\n return null;\n }\n\n const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n const handler = (e: MediaQueryListEvent) => {\n callback(e.matches ? 'dark' : 'light');\n };\n\n // Use newer addEventListener if available, fallback to addListener\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handler);\n return () => mediaQuery.removeEventListener('change', handler);\n } else if (mediaQuery.addListener) {\n mediaQuery.addListener(handler);\n return () => mediaQuery.removeListener?.(handler);\n }\n\n return null;\n } catch (error) {\n console.warn('Failed to set up theme change listener:', error);\n return null;\n }\n}\n\n\n/**\n * Creates styled console output with multiple %c formatters\n */\nexport function createStyledOutput(\n level: LogLevel,\n levelStyles: Record<LogLevel | 'success', LevelStyleConfig>,\n prefix: string | undefined,\n message: string,\n stackInfo: StackInfo | null,\n autoDetectTheme: boolean = true\n): [string, ...string[]] {\n const levelConfig = levelStyles[level];\n const timestamp = formatTimestamp();\n const currentTheme = autoDetectTheme ? detectDevToolsTheme() : 'light';\n\n // Base styles with adaptive colors\n const timestampStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.timestamp, currentTheme))\n .size('11px')\n .font('Monaco, Consolas, monospace')\n .build();\n\n const levelStyle = new StyleBuilder()\n .bg(levelConfig.background)\n .color(levelConfig.color)\n .border(levelConfig.border)\n .shadow(levelConfig.shadow)\n .padding('2px 8px')\n .rounded('4px')\n .bold()\n .font('Monaco, Consolas, monospace')\n .size('12px')\n .build();\n\n const prefixStyle = new StyleBuilder()\n .bg(getAdaptiveColor(ADAPTIVE_COLORS.prefixBackground, currentTheme))\n .color(getAdaptiveColor(ADAPTIVE_COLORS.prefix, currentTheme))\n .padding('2px 6px')\n .rounded('3px')\n .bold()\n .font('Monaco, Consolas, monospace')\n .size('11px')\n .build();\n\n const messageStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.messageText, currentTheme))\n .font('system-ui, -apple-system, sans-serif')\n .size('14px')\n .build();\n\n const locationStyle = new StyleBuilder()\n .color(getAdaptiveColor(ADAPTIVE_COLORS.location, currentTheme))\n .size('11px')\n .font('Monaco, Consolas, monospace')\n .build();\n\n // Build format string and styles\n let format = `%c${timestamp.slice(11, 23)} %c${levelConfig.emoji} ${levelConfig.label}`;\n const styles = [timestampStyle, levelStyle];\n\n if (prefix) {\n format += ` %c${prefix}`;\n styles.push(prefixStyle);\n }\n\n format += ` %c${message}`;\n styles.push(messageStyle);\n\n if (stackInfo) {\n format += ` %c(${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n styles.push(locationStyle);\n }\n\n return [format, ...styles];\n}\n\n/**\n * Create a unique ID for log entries\n */\nexport function generateLogId(): string {\n return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n}\n\n/**\n * Escape HTML entities for safe HTML output\n */\nexport function escapeHtml(text: string): string {\n const div = document.createElement('div');\n div.textContent = text;\n return div.innerHTML;\n}\n\n/**\n * Convert objects to safe string representation for logging\n */\nexport function safeStringify(obj: any, _maxDepth = 3): string {\n try {\n return JSON.stringify(obj, (_key, value) => {\n if (typeof value === 'function') return '[Function]';\n if (value instanceof Error) return `[Error: ${value.message}]`;\n if (value instanceof Date) return value.toISOString();\n if (typeof value === 'undefined') return '[undefined]';\n return value;\n }, 2);\n } catch (error) {\n return String(obj);\n }\n}","/**\n * @fileoverview Environment detection utilities for Universal Logger\n */\n\n/**\n * Checks if running in Node.js environment\n */\nexport const isNode = typeof process !== 'undefined' && \n process.versions && \n process.versions.node;\n\n/**\n * Checks if running in browser environment\n */\nexport const isBrowser = typeof window !== 'undefined' && \n typeof document !== 'undefined';\n\n/**\n * Checks if running in web worker environment\n */\nexport const isWebWorker = typeof self !== 'undefined' && \n typeof (self as any).importScripts === 'function';\n\n/**\n * Checks if running in Deno environment\n */\nexport const isDeno = typeof globalThis !== 'undefined' && \n 'Deno' in globalThis;\n\n/**\n * Gets the current runtime environment\n */\nexport function getRuntimeEnvironment(): 'node' | 'browser' | 'webworker' | 'deno' | 'unknown' {\n if (isNode) return 'node';\n if (isBrowser) return 'browser';\n if (isWebWorker) return 'webworker';\n if (isDeno) return 'deno';\n return 'unknown';\n}\n\n/**\n * Checks if colors/styling should be supported in current environment\n */\nexport function supportsColors(): boolean {\n if (isBrowser) {\n // Browser always supports CSS colors\n return true;\n }\n \n if (isNode) {\n // Check if Node.js supports colors\n return process.stdout?.isTTY === true || \n process.env.FORCE_COLOR === '1' ||\n process.env.FORCE_COLOR === 'true';\n }\n \n return false;\n}\n\n/**\n * Checks if CSS styling is supported (browser-only feature)\n */\nexport function supportsCSSColors(): boolean {\n return isBrowser;\n}\n\n/**\n * Checks if ANSI colors are supported (terminal environments)\n */\nexport function supportsANSIColors(): boolean {\n if (isNode) {\n return process.stdout?.isTTY === true || \n process.env.FORCE_COLOR === '1' ||\n process.env.FORCE_COLOR === 'true';\n }\n \n return false;\n}\n\n/**\n * Gets environment-specific information\n */\nexport function getEnvironmentInfo() {\n const env = getRuntimeEnvironment();\n \n return {\n runtime: env,\n supportsColors: supportsColors(),\n supportsCSSColors: supportsCSSColors(),\n supportsANSIColors: supportsANSIColors(),\n isProduction: isNode ? process.env.NODE_ENV === 'production' : false,\n version: isNode ? process.versions.node : (isBrowser ? navigator.userAgent : 'unknown')\n };\n}"],"names":[],"mappings":"AASO,SAAS,kBAAoC;AAChD,MAAI;AACA,UAAM,QAAQ,IAAI,MAAA,EAAQ;AAC1B,QAAI,CAAC,OAAO;AACR,aAAO;AAAA,IACX;AAEA,UAAM,QAAQ,MAAM,MAAM,IAAI,EAAE,OAAO,CAAA,SAAQ,KAAK,MAAM;AAG1D,aAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,YAAM,OAAO,MAAM,CAAC;AAEpB,UAAI,CAAC,MAAM;AACP;AAAA,MACJ;AAGA,UAAI,KAAK,SAAS,iBAAiB,KAC/B,KAAK,SAAS,SAAS,KACvB,KAAK,SAAS,OAAO,KACrB,KAAK,SAAS,oBAAoB,GAAG;AACrC;AAAA,MACJ;AAGA,UAAI;AAGJ,YAAM,cAAc,KAAK,MAAM,2CAA2C;AAC1E,UAAI,aAAa;AACb,gBAAQ;AAAA,MACZ,OAAO;AAEH,cAAM,eAAe,KAAK,MAAM,0BAA0B;AAC1D,YAAI,cAAc;AACd,kBAAQ;AAAA,QACZ,OAAO;AAEH,gBAAM,cAAc,KAAK,MAAM,2BAA2B;AAC1D,cAAI,aAAa;AACb,oBAAQ;AAAA,UACZ;AAAA,QACJ;AAAA,MACJ;AAEA,UAAI,CAAC,OAAO;AACR;AAAA,MACJ;AAEA,YAAM,CAAA,EAAG,cAAc,MAAM,SAAS,SAAS,IAAI;AAEnD,UAAI,CAAC,MAAM;AACP;AAAA,MACJ;AAGA,YAAM,YAAY,KAAK,MAAM,GAAG;AAChC,YAAM,WAAW,UAAU,UAAU,SAAS,CAAC;AAC/C,UAAI,CAAC,UAAU;AACX;AAAA,MACJ;AACA,YAAM,gBAAgB,SAAS,MAAM,GAAG,EAAE,CAAC;AAG3C,YAAM,UAAU,UAAU,SAAS,SAAS,EAAE,IAAI;AAClD,YAAM,YAAY,YAAY,SAAS,WAAW,EAAE,IAAI;AAGxD,YAAM,gBAAgB,gBAAgB,aAAa,SAC7C,aAAa,SACb;AAEN,aAAO;AAAA,QACH,MAAM,gBAAgB,gBAAgB;AAAA,QACtC,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,UAAU;AAAA,MAAA;AAAA,IAElB;AAEA,WAAO;AAAA,EACX,QAAQ;AACJ,WAAO;AAAA,EACX;AACJ;ACpFO,MAAM,iBAAiB;AAAA,EAC1B,WAAW;AAAA,EACX,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,OAAO;AAAA,EACP,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,cAAc;AAClB;AAKO,MAAM,eAA+D;AAAA,EACxE,OAAO;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,MAAM;AAAA,IACF,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,MAAM;AAAA,IACF,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,OAAO;AAAA,IACH,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,UAAU;AAAA,IACN,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAAA,EAEZ,SAAS;AAAA,IACL,OAAO;AAAA,IACP,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,QAAQ;AAAA,EAAA;AAEhB;AAKO,MAAM,gBAAgB;AAAA,EACzB,UAAU;AAAA,EACV,cAAc;AAAA,EACd,UAAU;AACd;AAKO,MAAM,iBAAiB;AAAA,EAC1B,MAAM,EAAE,WAAW,SAAS,UAAU,mBAAA;AAAA,EACtC,KAAK,EAAE,WAAW,QAAQ,UAAU,WAAA;AAAA,EACpC,UAAU,EAAE,WAAW,OAAO,UAAU,gBAAA;AAAA,EACxC,OAAO,EAAE,WAAW,QAAQ,UAAU,aAAA;AAAA,EACtC,MAAM,EAAE,WAAW,SAAS,UAAU,YAAA;AAC1C;AAwBO,MAAM,aAAa;AAAA,EACtB,IAAI;AAAA,EACJ,GAAG;AAAA,EACH,GAAG,KAAK;AAAA,EACR,GAAG,KAAK,KAAK;AAAA,EACb,GAAG,KAAK,KAAK,KAAK;AACtB;AA0BO,MAAM,kBAAkB;AAAA,EAC3B,WAAW;AAAA,IACP,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAAA,EAEV,aAAa;AAAA,IACT,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAAA,EAEV,QAAQ;AAAA,IACJ,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAAA,EAEV,kBAAkB;AAAA,IACd,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAAA,EAEV,UAAU;AAAA,IACN,OAAO;AAAA,IACP,MAAM;AAAA,EAAA;AAEd;AAKO,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA,EAIzB,QAAQ;AAAA,IACJ,WAAW;AAAA,IACX,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,SAAS;AAAA,IACL,WAAW;AAAA,IACX,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,IAAI;AAAA,IACA,WAAW;AAAA,IACX,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,EAMlB,UAAU;AAAA,IACN,WAAW;AAAA,IACX,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,IACjB,cAAc;AAAA,EAAA;AAEtB;AAKO,MAAM,wBAAwB;AAAA;AAAA,EAEjC,UAAU,OAAO,YAAY,gBACzB,QAAQ,IAAI,gBACZ,QAAQ,IAAI,0BACX,QAAQ,QAAQ,QAAQ,KAAK,KAAK,SAAO,IAAI,SAAS,MAAM,CAAC;AAAA;AAAA,EAIlE,WAAW,OAAO,YAAY,gBAC1B,QAAQ,IAAI,eACZ,QAAQ,IAAI,iBACX,QAAQ,QAAQ,QAAQ,KAAK,KAAK,SAAO,IAAI,SAAS,SAAS,CAAC;AAAA;AAAA,EAIrE,MAAM,OAAO,YAAY,gBACrB,QAAQ,IAAI,MACZ,QAAQ,IAAI,kBACZ,QAAQ,IAAI,eACZ,QAAQ,IAAI,aACZ,QAAQ,IAAI,UACZ,QAAQ,IAAI;AAAA;AAAA,EAIhB,SAAS,OAAO,YAAY,eACxB;AAAA;AAAA,EAMJ,YAAY,OAAO,YAAY,gBAC3B,QAAQ,QAAQ,UAAU,QAC1B,QAAQ,IAAI,SAAS;AAE7B;AAKO,SAAS,0BAAsD;AAClE,MAAI,sBAAsB,MAAM;AAC5B,WAAO;AAAA,EACX;AAEA,MAAI,sBAAsB,UAAU;AAChC,WAAO;AAAA,EACX;AAEA,MAAI,sBAAsB,WAAW;AACjC,WAAO;AAAA,EACX;AAEA,MAAI,sBAAsB,YAAY;AAClC,WAAO;AAAA,EACX;AAEA,SAAO;AACX;AAKO,SAAS,mBAAmB;AAC/B,QAAM,SAAS,wBAAA;AACf,SAAO;AAAA,IACH,GAAG;AAAA,IACH,GAAG,cAAc,MAAM;AAAA,EAAA;AAE/B;ACnSO,SAAS,kBAA0B;AACtC,MAAI;AAEA,UAAM,0BAAU,KAAA;AAChB,WAAO,IAAI,YAAA;AAAA,EACf,QAAQ;AACJ,YAAO,oBAAI,KAAA,GAAO,YAAA;AAAA,EACtB;AACJ;AAKO,SAAS,kBAAkB,SAAyB;AACvD,QAAM,QAAQ,QAAQ,MAAM,qBAAqB;AACjD,MAAI,CAAC,OAAO;AACR,UAAM,IAAI,MAAM,wBAAwB,OAAO,qCAAqC;AAAA,EACxF;AAEA,QAAM,CAAA,EAAG,QAAQ,IAAI,IAAI;AACzB,QAAM,aAAa,WAAW,IAA+B;AAE7D,SAAO,SAAS,UAAU,KAAK,EAAE,IAAI;AACzC;AAKO,SAAS,eAAe,OAAqC;AAChE,MAAI,iBAAiB,MAAM;AACvB,WAAO;AAAA,EACX;AAEA,MAAI,OAAO,UAAU,UAAU;AAE3B,WAAO,IAAI,KAAK,KAAK,QAAQ,QAAQ,WAAW,CAAC;AAAA,EACrD;AAEA,MAAI,OAAO,UAAU,UAAU;AAE3B,UAAM,UAAU,IAAI,KAAK,KAAK;AAC9B,QAAI,CAAC,MAAM,QAAQ,QAAA,CAAS,GAAG;AAC3B,aAAO;AAAA,IACX;AAGA,QAAI;AACA,YAAM,KAAK,kBAAkB,KAAK;AAClC,aAAO,IAAI,KAAK,KAAK,IAAA,IAAQ,EAAE;AAAA,IACnC,QAAQ;AACJ,YAAM,IAAI,MAAM,wBAAwB,KAAK,EAAE;AAAA,IACnD;AAAA,EACJ;AAEA,QAAM,IAAI,MAAM,gCAAgC,OAAO,KAAK,EAAE;AAClE;AAKO,SAAS,kBAAkB,MAAY,SAAyC,SAAiB;AACpG,UAAQ,QAAA;AAAA,IACJ,KAAK;AACD,aAAO,KAAK,aAAA,EAAe,MAAM,GAAG,CAAC;AAAA;AAAA,IACzC,KAAK;AACD,aAAO,KAAK,YAAA;AAAA,IAChB,KAAK;AAAA,IACL;AACI,aAAO,KAAK,YAAA,EAAc,MAAM,IAAI,EAAE;AAAA,EAAA;AAElD;ACxEO,MAAM,aAAa;AAAA,EACd,SAAmB,CAAA;AAAA,EAE3B,YAAY,YAAY,IAAI;AACxB,QAAI,UAAW,MAAK,OAAO,KAAK,SAAS;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,GAAG,YAAkC;AACjC,SAAK,OAAO,KAAK,eAAe,UAAU,EAAE;AAC5C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAA6B;AAC/B,SAAK,OAAO,KAAK,UAAU,KAAK,EAAE;AAClC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAA8B;AACjC,SAAK,OAAO,KAAK,WAAW,MAAM,EAAE;AACpC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAA8B;AACjC,SAAK,OAAO,KAAK,eAAe,MAAM,EAAE;AACxC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,SAA+B;AACnC,SAAK,OAAO,KAAK,YAAY,OAAO,EAAE;AACtC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,QAA8B;AACjC,SAAK,OAAO,KAAK,WAAW,MAAM,EAAE;AACpC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,SAAiB,OAAqB;AAC1C,SAAK,OAAO,KAAK,kBAAkB,MAAM,EAAE;AAC3C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAqB;AACjB,SAAK,OAAO,KAAK,mBAAmB;AACpC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAA4B;AAC7B,SAAK,OAAO,KAAK,gBAAgB,IAAI,EAAE;AACvC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAqB;AACjB,WAAO,KAAK,KAAK,4CAA4C;AAAA,EACjE;AAAA;AAAA;AAAA;AAAA,EAKA,SAAuB;AACnB,WAAO,KAAK,KAAK,sEAAsE;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA,EAKA,KAAK,MAA4B;AAC7B,SAAK,OAAO,KAAK,cAAc,IAAI,EAAE;AACrC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,QAA8B;AACrC,SAAK,OAAO,KAAK,gBAAgB,MAAM,EAAE;AACzC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,YAA0B;AACtB,SAAK,OAAO,KAAK,4BAA4B;AAC7C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,YAA0B;AACtB,SAAK,OAAO,KAAK,2BAA2B;AAC5C,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,OAA6B;AACjC,SAAK,OAAO,KAAK,YAAY,KAAK,EAAE;AACpC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAQ,OAA6B;AACjC,SAAK,OAAO,KAAK,YAAY,KAAK,EAAE;AACpC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,OAA6B;AAClC,SAAK,OAAO,KAAK,aAAa,KAAK,EAAE;AACrC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAA6B;AACnC,SAAK,OAAO,KAAK,cAAc,KAAK,EAAE;AACtC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,UAAU,OAA6B;AACnC,SAAK,OAAO,KAAK,cAAc,KAAK,EAAE;AACtC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,WAAW,OAA6B;AACpC,SAAK,OAAO,KAAK,eAAe,KAAK,EAAE;AACvC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,OAA6B;AAChC,SAAK,OAAO,KAAK,WAAW,KAAK,EAAE;AACnC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,UAAkB,OAA6B;AAClD,SAAK,OAAO,KAAK,GAAG,QAAQ,KAAK,KAAK,EAAE;AACxC,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAkB,OAA6B;AAC/C,WAAO,KAAK,OAAO,UAAU,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAgB;AACZ,WAAO,KAAK,OAAO,KAAK,IAAI;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,QAAsB;AAClB,SAAK,SAAS,CAAA;AACd,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,QAAsB;AAClB,UAAM,SAAS,IAAI,aAAA;AACnB,WAAO,SAAS,CAAC,GAAG,KAAK,MAAM;AAC/B,WAAO;AAAA,EACX;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,OAAmC;AACrC,SAAK,OAAO,KAAK,GAAG,MAAM,MAAM;AAChC,WAAO;AAAA,EACX;AACJ;AAKA,SAAS,eAAoB;AACzB,QAAM,UAAU,IAAI,aAAA;AACpB,SAAO,IAAI,MAAM,SAAS;AAAA,IACtB,IAAI,QAAsB,MAAc;AACpC,UAAI,QAAQ,QAAQ;AAChB,cAAM,SAAU,OAAe,IAAI;AACnC,YAAI,OAAO,WAAW,YAAY;AAC9B,iBAAO,OAAO,KAAK,MAAM;AAAA,QAC7B;AACA,eAAO;AAAA,MACX;AACA,aAAO;AAAA,IACX;AAAA,EAAA,CACH;AACL;AAKiB,aAAA;AAKV,MAAM,eAAe;AAAA,EACxB,SAAS,MAAM,IAAI,aAAA,EACd,GAAG,mDAAmD,EACtD,MAAM,SAAS,EACf,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,KAAA;AAAA,EAEL,OAAO,MAAM,IAAI,aAAA,EACZ,GAAG,mDAAmD,EACtD,MAAM,SAAS,EACf,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,KAAA;AAAA,EAEL,SAAS,MAAM,IAAI,aAAA,EACd,GAAG,mDAAmD,EACtD,MAAM,SAAS,EACf,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,KAAA;AAAA,EAEL,MAAM,MAAM,IAAI,aAAA,EACX,GAAG,mDAAmD,EACtD,MAAM,SAAS,EACf,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,KAAA;AAAA,EAEL,OAAO,MAAM,IAAI,aAAA,EACZ,GAAG,mDAAmD,EACtD,MAAM,SAAS,EACf,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,KAAA;AAAA,EAEL,OAAO,MAAM,IAAI,aAAA,EACZ,MAAM,SAAS,EACf,KAAK,6BAA6B,EAClC,KAAK,MAAM;AAAA,EAEhB,QAAQ,MAAM,IAAI,eACb,GAAG,SAAS,EACZ,MAAM,SAAS,EACf,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,OAAO,mBAAmB;AAAA,EAE/B,MAAM,MAAM,IAAI,aAAA,EACX,GAAG,mDAAmD,EACtD,MAAM,SAAS,EACf,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,KAAA,EACA,OAAO,iCAAiC;AACjD;ACtSO,SAAS,sBAAqC;AACjD,MAAI;AACA,QAAI,OAAO,WAAW,eAAe,CAAC,OAAO,YAAY;AACrD,aAAO;AAAA,IACX;AAEA,UAAM,aAAa,OAAO,WAAW,8BAA8B;AACnE,WAAO,WAAW,UAAU,SAAS;AAAA,EACzC,SAAS,OAAO;AACZ,YAAQ,KAAK,oCAAoC,KAAK;AACtD,WAAO;AAAA,EACX;AACJ;AAKO,SAAS,iBAAiB,QAAwB,OAA+B;AACpF,QAAM,eAAe,SAAS,oBAAA;AAC9B,SAAO,OAAO,YAAY;AAC9B;AAKO,SAAS,yBAAyB,UAA+D;AACpG,MAAI;AACA,QAAI,OAAO,WAAW,eAAe,CAAC,OAAO,YAAY;AACrD,aAAO;AAAA,IACX;AAEA,UAAM,aAAa,OAAO,WAAW,8BAA8B;AACnE,UAAM,UAAU,CAAC,MAA2B;AACxC,eAAS,EAAE,UAAU,SAAS,OAAO;AAAA,IACzC;AAGA,QAAI,WAAW,kBAAkB;AAC7B,iBAAW,iBAAiB,UAAU,OAAO;AAC7C,aAAO,MAAM,WAAW,oBAAoB,UAAU,OAAO;AAAA,IACjE,WAAW,WAAW,aAAa;AAC/B,iBAAW,YAAY,OAAO;AAC9B,aAAO,MAAM,WAAW,iBAAiB,OAAO;AAAA,IACpD;AAEA,WAAO;AAAA,EACX,SAAS,OAAO;AACZ,YAAQ,KAAK,2CAA2C,KAAK;AAC7D,WAAO;AAAA,EACX;AACJ;AAMO,SAAS,mBACZ,OACA,aACA,QACA,SACA,WACA,kBAA2B,MACN;AACrB,QAAM,cAAc,YAAY,KAAK;AACrC,QAAM,YAAY,gBAAA;AAClB,QAAM,eAAe,kBAAkB,oBAAA,IAAwB;AAG/D,QAAM,iBAAiB,IAAI,aAAA,EACtB,MAAM,iBAAiB,gBAAgB,WAAW,YAAY,CAAC,EAC/D,KAAK,MAAM,EACX,KAAK,6BAA6B,EAClC,MAAA;AAEL,QAAM,aAAa,IAAI,aAAA,EAClB,GAAG,YAAY,UAAU,EACzB,MAAM,YAAY,KAAK,EACvB,OAAO,YAAY,MAAM,EACzB,OAAO,YAAY,MAAM,EACzB,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,KAAA,EACA,KAAK,6BAA6B,EAClC,KAAK,MAAM,EACX,MAAA;AAEL,QAAM,cAAc,IAAI,eACnB,GAAG,iBAAiB,gBAAgB,kBAAkB,YAAY,CAAC,EACnE,MAAM,iBAAiB,gBAAgB,QAAQ,YAAY,CAAC,EAC5D,QAAQ,SAAS,EACjB,QAAQ,KAAK,EACb,OACA,KAAK,6BAA6B,EAClC,KAAK,MAAM,EACX,MAAA;AAEL,QAAM,eAAe,IAAI,aAAA,EACpB,MAAM,iBAAiB,gBAAgB,aAAa,YAAY,CAAC,EACjE,KAAK,sCAAsC,EAC3C,KAAK,MAAM,EACX,MAAA;AAEL,QAAM,gBAAgB,IAAI,aAAA,EACrB,MAAM,iBAAiB,gBAAgB,UAAU,YAAY,CAAC,EAC9D,KAAK,MAAM,EACX,KAAK,6BAA6B,EAClC,MAAA;AAGL,MAAI,SAAS,KAAK,UAAU,MAAM,IAAI,EAAE,CAAC,MAAM,YAAY,KAAK,IAAI,YAAY,KAAK;AACrF,QAAM,SAAS,CAAC,gBAAgB,UAAU;AAE1C,MAAI,QAAQ;AACR,cAAU,MAAM,MAAM;AACtB,WAAO,KAAK,WAAW;AAAA,EAC3B;AAEA,YAAU,MAAM,OAAO;AACvB,SAAO,KAAK,YAAY;AAExB,MAAI,WAAW;AACX,cAAU,OAAO,UAAU,IAAI,IAAI,UAAU,IAAI,IAAI,UAAU,MAAM;AACrE,WAAO,KAAK,aAAa;AAAA,EAC7B;AAEA,SAAO,CAAC,QAAQ,GAAG,MAAM;AAC7B;AAKO,SAAS,gBAAwB;AACpC,SAAO,GAAG,KAAK,IAAA,CAAK,IAAI,KAAK,OAAA,EAAS,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AACnE;AAKO,SAAS,WAAW,MAAsB;AAC7C,QAAM,MAAM,SAAS,cAAc,KAAK;AACxC,MAAI,cAAc;AAClB,SAAO,IAAI;AACf;AAKO,SAAS,cAAc,KAAU,YAAY,GAAW;AAC3D,MAAI;AACA,WAAO,KAAK,UAAU,KAAK,CAAC,MAAM,UAAU;AACxC,UAAI,OAAO,UAAU,WAAY,QAAO;AACxC,UAAI,iBAAiB,MAAO,QAAO,WAAW,MAAM,OAAO;AAC3D,UAAI,iBAAiB,KAAM,QAAO,MAAM,YAAA;AACxC,UAAI,OAAO,UAAU,YAAa,QAAO;AACzC,aAAO;AAAA,IACX,GAAG,CAAC;AAAA,EACR,SAAS,OAAO;AACZ,WAAO,OAAO,GAAG;AAAA,EACrB;AACJ;ACjLO,MAAM,SAAS,OAAO,YAAY,eACnB,QAAQ,YACR,QAAQ,SAAS;AAKhC,MAAM,YAAY,OAAO,WAAW,eACjB,OAAO,aAAa;AA+CvC,SAAS,oBAA6B;AACzC,SAAO;AACX;AAKO,SAAS,qBAA8B;AAC1C,MAAI,QAAQ;AACR,WAAO,QAAQ,QAAQ,UAAU,QAC1B,QAAQ,IAAI,gBAAgB,OAC5B,QAAQ,IAAI,gBAAgB;AAAA,EACvC;AAEA,SAAO;AACX;"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./environment-5I5unY89.js"),t={debug:{color:90,styles:[2],emoji:"🔍"},info:{color:34,styles:[1],emoji:"ℹ️"},warn:{color:33,background:43,styles:[1,30],emoji:"⚠️"},error:{color:31,background:41,styles:[1],emoji:"❌"},critical:{color:37,background:41,styles:[1,5],emoji:"🚨"},success:{color:32,background:42,styles:[1],emoji:"✅"}};function ansi(e){return`[${(Array.isArray(e)?e:[e]).join(";")}m`}function ansiStyle(t,r){return e.supportsANSIColors()?`${ansi(r)}${t}${ansi(0)}`:t}function ansiColor(e,t){return ansiStyle(e,[t])}function ansiBold(e){return ansiStyle(e,[1])}function formatTimestampANSI(e){return ansiColor(e,90)}function formatLogLevelANSI(r,n=!0){const o=t[r],s=n?o.emoji:"",i=r.toUpperCase().padEnd(8);if(!e.supportsANSIColors())return`${s} ${i}`;let a=[o.color,...o.styles];return o.background&&a.push(o.background),ansiStyle(`${s} ${i}`,a)}const r={compilation:(e,t="starting")=>{const r=ansiBold(e);switch(t){case"starting":return`${ansiColor("⚙️",34)} ${r}...`;case"completed":return`${ansiColor("✓",32)} ${r} ${ansiColor("completed",32)}`;case"failed":return`${ansiColor("✗",31)} ${r} ${ansiColor("failed",31)}`;default:return r}},warning:e=>`${ansiColor("⚠",33)} ${ansiStyle("Warning:",[33,1])} ${e}`,error:e=>`${ansiColor("✗",31)} ${ansiStyle("Error:",[31,1])} ${e}`,success:e=>`${ansiColor("✓",32)} ${ansiColor(e,32)}`,info:e=>`${ansiColor("ℹ",34)} ${e}`},n={"🔍":"[DEBUG]","ℹ️":"[INFO]","⚠️":"[WARN]","❌":"[ERROR]","🚨":"[CRITICAL]","✅":"[OK]","✓":"[OK]","✗":"[FAIL]","⚙️":"[BUILD]","📦":"[PKG]"};function sanitizeEmojis(e){const t=process.env.TERM&&(process.env.TERM.includes("xterm")||process.env.TERM.includes("screen")||process.env.TERM.includes("tmux")),r=process.env.CI||process.env.GITHUB_ACTIONS||process.env.JENKINS_URL;if(t&&!r)return e;let o=e;return Object.entries(n).forEach(([e,t])=>{o=o.replace(new RegExp(e,"g"),t)}),o}function createPlainOutput(t,r,n,o){let s=`[${e.formatTimestamp().slice(11,23)}] [${t.toUpperCase()}]`;return n&&(s+=` [${n}]`),s+=` ${r}`,o&&(s+=` (${o.file}:${o.line}:${o.column})`),s}function createANSIOutput(t,r,n,o){let s="";var i;return s+=formatTimestampANSI(`[${e.formatTimestamp().slice(11,23)}]`)+" ",s+=formatLogLevelANSI(t)+" ",n&&(s+=function(t){return e.supportsANSIColors()?ansiStyle(`[${t}]`,[36,1]):`[${t}]`}(n)+" "),s+=r,o&&(s+=" "+(i=`(${o.file}:${o.line}:${o.column})`,e.supportsANSIColors()?ansiColor(`(${i})`,90):`(${i})`)),sanitizeEmojis(s)}function createBuildOutput(t,n,o,s){const i=e.formatTimestamp().slice(11,23);let a="";if(e.supportsANSIColors())switch(a+=formatTimestampANSI(`[${i}]`)+" ",t){case"info":a+=r.info(n);break;case"warn":a+=r.warning(n);break;case"error":case"critical":a+=r.error(n);break;default:a+=`${formatLogLevelANSI(t)} ${n}`}else a=`[${i}] [${t.toUpperCase()}]`,o&&(a+=` [${o}]`),a+=` ${n}`;return s&&(a+=` (${s.file}:${s.line}:${s.column})`),sanitizeEmojis(a)}function createCIOutput(t,r,n,o){let s=`[${e.formatTimestamp().slice(11,23)}] [${t.toUpperCase()}]`;return n&&(s+=` [${n}]`),s+=` ${r}`,o&&(s+=` (${o.file}:${o.line}:${o.column})`),sanitizeEmojis(s)}function detectOptimalFormat(){const e=process.env.CI||process.env.GITHUB_ACTIONS||process.env.JENKINS_URL||process.env.GITLAB_CI||process.env.TRAVIS||process.env.CIRCLECI;return process.env.NEXT_RUNTIME||process.argv.some(e=>e.includes("next")),e?"ci":"build"}exports.BUILD_FORMATTERS=r,exports.ansiBackground=function(e,t,r){return ansiStyle(e,r?[r,t]:[t])},exports.ansiBold=ansiBold,exports.ansiColor=ansiColor,exports.ansiDim=function(e){return ansiStyle(e,[2])},exports.ansiStyle=ansiStyle,exports.ansiUnderline=function(e){return ansiStyle(e,[4])},exports.createANSIOutput=createANSIOutput,exports.createBuildOutput=createBuildOutput,exports.createCIOutput=createCIOutput,exports.createLogEntry=function(t,r,n,o,s){return{timestamp:e.formatTimestamp(),level:t.toUpperCase(),prefix:o,message:r,args:n.slice(1),location:s?{file:s.file,line:s.line,column:s.column,function:s.function}:void 0,raw:n}},exports.createOutput=function(e,t,r,n,o="auto"){switch("auto"===o?detectOptimalFormat():o){case"ansi":return createANSIOutput(e,t,r,n);case"build":return createBuildOutput(e,t,r,n);case"ci":return createCIOutput(e,t,r,n);default:return createPlainOutput(e,t,r,n)}},exports.createPlainOutput=createPlainOutput,exports.detectOptimalFormat=detectOptimalFormat,exports.formatLogLevelANSI=formatLogLevelANSI,exports.formatSuccessANSI=function(r,n=!0){const o=t.success,s=n?o.emoji:"";return e.supportsANSIColors()?`${ansiStyle(`${s} SUCCESS:`,[o.color,...o.styles])} ${r}`:`${s} SUCCESS: ${r}`},exports.formatTablePlain=function(e,t){try{if(Array.isArray(e)){if(0===e.length)return"[Empty Array]";if("object"!=typeof e[0])return e.map((e,t)=>`${t}: ${e}`).join("\n");const r=t||Object.keys(e[0]||{});return[r.join("\t"),...e.map(e=>r.map(t=>String(e[t]||"")).join("\t"))].join("\n")}return"object"==typeof e&&null!==e?Object.entries(e).map(([e,t])=>`${e}: ${t}`).join("\n"):String(e)}catch(r){return`[Error formatting table: ${r}]`}},exports.getConsoleMethod=function(e){switch(e){case"debug":default:return"log";case"info":return"info";case"warn":return"warn";case"error":case"critical":return"error"}},exports.safeSerialize=function safeSerialize(e,t=3,r=0){if(r>=t)return"[Max Depth Reached]";if(null===e)return null;if(void 0===e)return"[undefined]";if("function"==typeof e)return"[Function]";if(e instanceof Error)return`[Error: ${e.message}]`;if(e instanceof Date)return e.toISOString();if("object"!=typeof e)return e;if(Array.isArray(e))return e.map(e=>safeSerialize(e,t,r+1));const n={};for(const[o,s]of Object.entries(e))n[o]=safeSerialize(s,t,r+1);return n},exports.sanitizeEmojis=sanitizeEmojis;
2
+ //# sourceMappingURL=formatting-CiFnwe1I.js.map