@mks2508/better-logger 3.1.0 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +23 -1
- package/dist/Logger.d.ts +12 -0
- package/dist/Logger.d.ts.map +1 -1
- package/dist/chunks/{Logger-C086w3EM.js → Logger-D-gmmgR2.js} +201 -12
- package/dist/chunks/Logger-D-gmmgR2.js.map +1 -0
- package/dist/chunks/Logger-D7cfaz15.js +2 -0
- package/dist/chunks/Logger-D7cfaz15.js.map +1 -0
- package/dist/chunks/{environment-DXHouGD4.js → environment-COWvu6Wz.js} +15 -15
- package/dist/chunks/{environment-DXHouGD4.js.map → environment-COWvu6Wz.js.map} +1 -1
- package/dist/chunks/{formatting-BNnVUPcw.js → formatting-CYjT9yhO.js} +2 -2
- package/dist/chunks/{formatting-BNnVUPcw.js.map → formatting-CYjT9yhO.js.map} +1 -1
- package/dist/core.js +2 -2
- package/dist/exports.cjs +1 -1
- package/dist/exports.js +2 -2
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +141 -192
- package/dist/index.js.map +1 -1
- package/dist/styling.cjs +1 -1
- package/dist/styling.js +3 -3
- package/dist/types/core.d.ts +44 -0
- package/dist/types/core.d.ts.map +1 -1
- package/dist/writers/BufferWriter.d.ts +96 -0
- package/dist/writers/BufferWriter.d.ts.map +1 -0
- package/dist/writers/index.d.ts +6 -0
- package/dist/writers/index.d.ts.map +1 -0
- package/package.json +1 -1
- package/packages/core/package.json +1 -1
- package/src/Logger.ts +51 -9
- package/src/index.ts +5 -1
- package/src/types/core.ts +46 -0
- package/src/writers/BufferWriter.ts +157 -0
- package/src/writers/index.ts +6 -0
- package/dist/chunks/Logger-BV0v1AyC.js +0 -2
- package/dist/chunks/Logger-BV0v1AyC.js.map +0 -1
- package/dist/chunks/Logger-C086w3EM.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatting-BNnVUPcw.js","sources":["../../src/utils/ansi-colors.ts","../../src/utils/formatting.ts"],"sourcesContent":["/**\n * @fileoverview ANSI color utilities for terminal environments\n * @since 1.0.0\n */\n\nimport type { LogLevel } from '../types/index.js';\nimport { supportsANSIColors } from './environment.js';\n\n/**\n * ANSI color codes for terminal styling\n */\nexport const ANSI_CODES = {\n // Colors\n black: 30,\n red: 31,\n green: 32,\n yellow: 33,\n blue: 34,\n magenta: 35,\n cyan: 36,\n white: 37,\n\n // Bright colors\n brightBlack: 90,\n brightRed: 91,\n brightGreen: 92,\n brightYellow: 93,\n brightBlue: 94,\n brightMagenta: 95,\n brightCyan: 96,\n brightWhite: 97,\n\n // Background colors\n bgBlack: 40,\n bgRed: 41,\n bgGreen: 42,\n bgYellow: 43,\n bgBlue: 44,\n bgMagenta: 45,\n bgCyan: 46,\n bgWhite: 47,\n\n // Background bright colors\n bgBrightBlack: 100,\n bgBrightRed: 101,\n bgBrightGreen: 102,\n bgBrightYellow: 103,\n bgBrightBlue: 104,\n bgBrightMagenta: 105,\n bgBrightCyan: 106,\n bgBrightWhite: 107,\n\n // Styles\n reset: 0,\n bold: 1,\n dim: 2,\n italic: 3,\n underline: 4,\n blink: 5,\n inverse: 7,\n hidden: 8,\n strikethrough: 9,\n\n // Reset specific\n resetBold: 22,\n resetDim: 22,\n resetItalic: 23,\n resetUnderline: 24,\n resetBlink: 25,\n resetInverse: 27,\n resetHidden: 28,\n resetStrikethrough: 29\n} as const;\n\n/**\n * ANSI color presets for different log levels\n */\nexport const ANSI_LEVEL_STYLES: Record<LogLevel | 'success', {\n color: number;\n background?: number;\n styles: number[];\n emoji: string;\n}> = {\n debug: {\n color: ANSI_CODES.brightBlack,\n styles: [ANSI_CODES.dim],\n emoji: '🔍'\n },\n info: {\n color: ANSI_CODES.blue,\n styles: [ANSI_CODES.bold],\n emoji: 'ℹ️'\n },\n warn: {\n color: ANSI_CODES.yellow,\n background: ANSI_CODES.bgYellow,\n styles: [ANSI_CODES.bold, ANSI_CODES.black],\n emoji: '⚠️'\n },\n error: {\n color: ANSI_CODES.red,\n background: ANSI_CODES.bgRed,\n styles: [ANSI_CODES.bold],\n emoji: '❌'\n },\n critical: {\n color: ANSI_CODES.white,\n background: ANSI_CODES.bgRed,\n styles: [ANSI_CODES.bold, ANSI_CODES.blink],\n emoji: '🚨'\n },\n success: {\n color: ANSI_CODES.green,\n background: ANSI_CODES.bgGreen,\n styles: [ANSI_CODES.bold],\n emoji: '✅'\n }\n};\n\n/**\n * Creates an ANSI escape sequence\n */\nfunction ansi(code: number | number[]): string {\n const codes = Array.isArray(code) ? code : [code];\n return `\\x1b[${codes.join(';')}m`;\n}\n\n/**\n * Applies ANSI styling to text\n */\nexport function ansiStyle(text: string, codes: number[]): string {\n if (!supportsANSIColors()) return text;\n return `${ansi(codes)}${text}${ansi(ANSI_CODES.reset)}`;\n}\n\n/**\n * Applies color to text\n */\nexport function ansiColor(text: string, color: number): string {\n return ansiStyle(text, [color]);\n}\n\n/**\n * Applies background color to text\n */\nexport function ansiBackground(text: string, bg: number, color?: number): string {\n if (color) {\n return ansiStyle(text, [color, bg]);\n }\n return ansiStyle(text, [bg]);\n}\n\n/**\n * Makes text bold\n */\nexport function ansiBold(text: string): string {\n return ansiStyle(text, [ANSI_CODES.bold]);\n}\n\n/**\n * Makes text dim\n */\nexport function ansiDim(text: string): string {\n return ansiStyle(text, [ANSI_CODES.dim]);\n}\n\n/**\n * Underlines text\n */\nexport function ansiUnderline(text: string): string {\n return ansiStyle(text, [ANSI_CODES.underline]);\n}\n\n/**\n * Specialized formatters for different contexts\n */\n\n/**\n * Format timestamp for terminal\n */\nexport function formatTimestampANSI(timestamp: string): string {\n return ansiColor(timestamp, ANSI_CODES.brightBlack);\n}\n\n/**\n * Format log level for terminal\n */\nexport function formatLogLevelANSI(level: LogLevel, useEmojis: boolean = true): string {\n const style = ANSI_LEVEL_STYLES[level];\n const emoji = useEmojis ? style.emoji : '';\n const label = level.toUpperCase().padEnd(8);\n\n if (!supportsANSIColors()) {\n return `${emoji} ${label}`;\n }\n\n let codes = [style.color, ...style.styles];\n if (style.background) {\n codes.push(style.background);\n }\n\n return ansiStyle(`${emoji} ${label}`, codes);\n}\n\n/**\n * Format success message for terminal\n */\nexport function formatSuccessANSI(message: string, useEmojis: boolean = true): string {\n const style = ANSI_LEVEL_STYLES.success;\n const emoji = useEmojis ? style.emoji : '';\n\n if (!supportsANSIColors()) {\n return `${emoji} SUCCESS: ${message}`;\n }\n\n const prefix = ansiStyle(`${emoji} SUCCESS:`, [style.color, ...style.styles]);\n return `${prefix} ${message}`;\n}\n\n/**\n * Format prefix for terminal\n */\nexport function formatPrefixANSI(prefix: string): string {\n if (!supportsANSIColors()) {\n return `[${prefix}]`;\n }\n\n return ansiStyle(`[${prefix}]`, [ANSI_CODES.cyan, ANSI_CODES.bold]);\n}\n\n/**\n * Format file location for terminal\n */\nexport function formatLocationANSI(location: string): string {\n if (!supportsANSIColors()) {\n return `(${location})`;\n }\n\n return ansiColor(`(${location})`, ANSI_CODES.brightBlack);\n}\n\n/**\n * Format build-specific messages\n */\nexport const BUILD_FORMATTERS = {\n /**\n * Format compilation step\n */\n compilation: (step: string, status: 'starting' | 'completed' | 'failed' = 'starting') => {\n const stepText = ansiBold(step);\n\n switch (status) {\n case 'starting':\n return `${ansiColor('⚙️', ANSI_CODES.blue)} ${stepText}...`;\n case 'completed':\n return `${ansiColor('✓', ANSI_CODES.green)} ${stepText} ${ansiColor('completed', ANSI_CODES.green)}`;\n case 'failed':\n return `${ansiColor('✗', ANSI_CODES.red)} ${stepText} ${ansiColor('failed', ANSI_CODES.red)}`;\n default:\n return stepText;\n }\n },\n\n /**\n * Format warning message\n */\n warning: (message: string) => {\n return `${ansiColor('⚠', ANSI_CODES.yellow)} ${ansiStyle('Warning:', [ANSI_CODES.yellow, ANSI_CODES.bold])} ${message}`;\n },\n\n /**\n * Format error message\n */\n error: (message: string) => {\n return `${ansiColor('✗', ANSI_CODES.red)} ${ansiStyle('Error:', [ANSI_CODES.red, ANSI_CODES.bold])} ${message}`;\n },\n\n /**\n * Format success message\n */\n success: (message: string) => {\n return `${ansiColor('✓', ANSI_CODES.green)} ${ansiColor(message, ANSI_CODES.green)}`;\n },\n\n /**\n * Format info message\n */\n info: (message: string) => {\n return `${ansiColor('ℹ', ANSI_CODES.blue)} ${message}`;\n }\n};\n\n/**\n * Terminal-friendly emoji alternatives for environments that don't support them\n */\nexport const EMOJI_ALTERNATIVES = {\n '🔍': '[DEBUG]',\n 'ℹ️': '[INFO]',\n '⚠️': '[WARN]',\n '❌': '[ERROR]',\n '🚨': '[CRITICAL]',\n '✅': '[OK]',\n '✓': '[OK]',\n '✗': '[FAIL]',\n '⚙️': '[BUILD]',\n '📦': '[PKG]'\n};\n\n/**\n * Replace emojis with text alternatives for non-emoji terminals\n */\nexport function sanitizeEmojis(text: string): string {\n // Check if we're in a terminal that likely supports emojis\n const isModernTerminal = process.env.TERM &&\n (process.env.TERM.includes('xterm') ||\n process.env.TERM.includes('screen') ||\n process.env.TERM.includes('tmux'));\n\n const isCI = process.env.CI || process.env.GITHUB_ACTIONS || process.env.JENKINS_URL;\n\n // Use emojis if we have a modern terminal and not in CI\n if (isModernTerminal && !isCI) {\n return text;\n }\n\n // Replace emojis with text alternatives\n let result = text;\n Object.entries(EMOJI_ALTERNATIVES).forEach(([emoji, alt]) => {\n result = result.replace(new RegExp(emoji, 'g'), alt);\n });\n\n return result;\n}","/**\n * @fileoverview Formatting utilities for Universal Logger\n */\n\nimport type { LogLevel, StackInfo, OutputFormat } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\nimport { isNode, supportsANSIColors } from './environment.js';\nimport {\n formatLogLevelANSI,\n formatTimestampANSI,\n formatPrefixANSI,\n formatLocationANSI,\n sanitizeEmojis,\n BUILD_FORMATTERS\n} from './ansi-colors.js';\n\n// Re-export the type for convenience\nexport type { OutputFormat } from '../types/index.js';\n\n/**\n * Creates output based on environment and format preference\n */\nexport function createOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null,\n format: OutputFormat = 'auto'\n): string {\n const detectedFormat = format === 'auto' ? detectOptimalFormat() : format;\n\n switch (detectedFormat) {\n case 'ansi':\n return createANSIOutput(level, message, prefix, stackInfo);\n case 'build':\n return createBuildOutput(level, message, prefix, stackInfo);\n case 'ci':\n return createCIOutput(level, message, prefix, stackInfo);\n case 'plain':\n default:\n return createPlainOutput(level, message, prefix, stackInfo);\n }\n}\n\n/**\n * Creates plain text output for any environment\n * No colors, no styling - maximum compatibility\n */\nexport function createPlainOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23); // HH:MM:SS.mmm\n\n let output = `[${timeStr}] [${level.toUpperCase()}]`;\n\n if (prefix) {\n output += ` [${prefix}]`;\n }\n\n output += ` ${message}`;\n\n if (stackInfo) {\n output += ` (${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n }\n\n return output;\n}\n\n/**\n * Creates ANSI-colored output for terminals\n */\nexport function createANSIOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23);\n\n let output = '';\n\n // Timestamp\n output += formatTimestampANSI(`[${timeStr}]`) + ' ';\n\n // Log level with colors\n output += formatLogLevelANSI(level) + ' ';\n\n // Prefix if provided\n if (prefix) {\n output += formatPrefixANSI(prefix) + ' ';\n }\n\n // Message\n output += message;\n\n // Stack info if provided\n if (stackInfo) {\n output += ' ' + formatLocationANSI(`(${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`);\n }\n\n return sanitizeEmojis(output);\n}\n\n/**\n * Creates build-friendly output (optimized for Next.js builds, webpack, etc.)\n */\nexport function createBuildOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23);\n\n let output = '';\n\n // Use ANSI colors if supported\n if (supportsANSIColors()) {\n output += formatTimestampANSI(`[${timeStr}]`) + ' ';\n\n // Use build-specific formatters\n switch (level) {\n case 'info':\n output += BUILD_FORMATTERS.info(message);\n break;\n case 'warn':\n output += BUILD_FORMATTERS.warning(message);\n break;\n case 'error':\n case 'critical':\n output += BUILD_FORMATTERS.error(message);\n break;\n default:\n output += `${formatLogLevelANSI(level)} ${message}`;\n }\n } else {\n // Fallback to plain text\n output = `[${timeStr}] [${level.toUpperCase()}]`;\n\n if (prefix) {\n output += ` [${prefix}]`;\n }\n\n output += ` ${message}`;\n }\n\n if (stackInfo) {\n output += ` (${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n }\n\n return sanitizeEmojis(output);\n}\n\n/**\n * Creates CI-friendly output (no emojis, simple formatting)\n */\nexport function createCIOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23);\n\n let output = `[${timeStr}] [${level.toUpperCase()}]`;\n\n if (prefix) {\n output += ` [${prefix}]`;\n }\n\n output += ` ${message}`;\n\n if (stackInfo) {\n output += ` (${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n }\n\n // Always remove emojis for CI\n return sanitizeEmojis(output);\n}\n\n/**\n * Detects the optimal output format based on environment\n */\nexport function detectOptimalFormat(): OutputFormat {\n // Check for specific environment variables\n const isCI = 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 const isBuild = process.env.NODE_ENV === 'production' ||\n process.env.BUILD_MODE === 'production' ||\n process.argv.some(arg => arg.includes('build') || arg.includes('webpack'));\n\n const isNextJS = process.env.NEXT_RUNTIME ||\n process.argv.some(arg => arg.includes('next'));\n\n // CI environment - always use plain text\n if (isCI) {\n return 'ci';\n }\n\n // Next.js build environment\n if (isNextJS || isBuild) {\n return 'build';\n }\n\n // Node.js with ANSI support\n if (isNode && supportsANSIColors()) {\n return 'ansi';\n }\n\n // Default to plain text\n return 'plain';\n}\n\n/**\n * Gets the appropriate log method for the level\n * Uses different console methods for better semantics\n */\nexport function getConsoleMethod(level: LogLevel): 'log' | 'info' | 'warn' | 'error' {\n switch (level) {\n case 'debug':\n return 'log';\n case 'info':\n return 'info';\n case 'warn':\n return 'warn';\n case 'error':\n case 'critical':\n return 'error';\n default:\n return 'log';\n }\n}\n\n/**\n * Create a simple log entry object for handlers\n */\nexport function createLogEntry(\n level: LogLevel,\n message: string,\n args: any[],\n prefix?: string,\n stackInfo?: StackInfo | null\n) {\n return {\n timestamp: formatTimestamp(),\n level: level.toUpperCase(),\n prefix,\n message,\n args: args.slice(1), // Exclude the first message argument\n location: stackInfo ? {\n file: stackInfo.file,\n line: stackInfo.line,\n column: stackInfo.column,\n function: stackInfo.function\n } : undefined,\n raw: args\n };\n}\n\n/**\n * Format data for table display in plain text\n */\nexport function formatTablePlain(data: any, columns?: string[]): string {\n try {\n if (Array.isArray(data)) {\n if (data.length === 0) return '[Empty Array]';\n \n // Simple array formatting\n if (typeof data[0] !== 'object') {\n return data.map((item, i) => `${i}: ${item}`).join('\\n');\n }\n \n // Object array formatting\n const keys = columns || Object.keys(data[0] || {});\n const header = keys.join('\\t');\n const rows = data.map(item => \n keys.map(key => String(item[key] || '')).join('\\t')\n );\n \n return [header, ...rows].join('\\n');\n }\n \n if (typeof data === 'object' && data !== null) {\n // Simple object formatting\n return Object.entries(data)\n .map(([key, value]) => `${key}: ${value}`)\n .join('\\n');\n }\n \n return String(data);\n } catch (error) {\n return `[Error formatting table: ${error}]`;\n }\n}\n\n/**\n * Safe object serialization for logging\n */\nexport function safeSerialize(obj: any, maxDepth: number = 3, currentDepth: number = 0): any {\n if (currentDepth >= maxDepth) {\n return '[Max Depth Reached]';\n }\n \n if (obj === null) return null;\n if (obj === undefined) return '[undefined]';\n if (typeof obj === 'function') return '[Function]';\n if (obj instanceof Error) return `[Error: ${obj.message}]`;\n if (obj instanceof Date) return obj.toISOString();\n if (typeof obj !== 'object') return obj;\n \n if (Array.isArray(obj)) {\n return obj.map(item => safeSerialize(item, maxDepth, currentDepth + 1));\n }\n \n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = safeSerialize(value, maxDepth, currentDepth + 1);\n }\n return result;\n}"],"names":[],"mappings":";AAWO,MAAM,aAAa;AAAA;AAAA,EAEtB,OAAO;AAAA,EACP,KAAK;AAAA,EACL,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,MAAM;AAAA,EAEN,MAAM;AAAA,EACN,OAAO;AAAA;AAAA,EAGP,aAAa;AAAA,EAWb,OAAO;AAAA,EACP,SAAS;AAAA,EACT,UAAU;AAAA;AAAA,EAiBV,OAAO;AAAA,EACP,MAAM;AAAA,EACN,KAAK;AAAA,EAEL,WAAW;AAAA,EACX,OAAO;AAcX;AAKO,MAAM,oBAKR;AAAA,EACD,OAAO;AAAA,IACH,OAAO,WAAW;AAAA,IAClB,QAAQ,CAAC,WAAW,GAAG;AAAA,IACvB,OAAO;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACF,OAAO,WAAW;AAAA,IAClB,QAAQ,CAAC,WAAW,IAAI;AAAA,IACxB,OAAO;AAAA,EAAA;AAAA,EAEX,MAAM;AAAA,IACF,OAAO,WAAW;AAAA,IAClB,YAAY,WAAW;AAAA,IACvB,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK;AAAA,IAC1C,OAAO;AAAA,EAAA;AAAA,EAEX,OAAO;AAAA,IACH,OAAO,WAAW;AAAA,IAClB,YAAY,WAAW;AAAA,IACvB,QAAQ,CAAC,WAAW,IAAI;AAAA,IACxB,OAAO;AAAA,EAAA;AAAA,EAEX,UAAU;AAAA,IACN,OAAO,WAAW;AAAA,IAClB,YAAY,WAAW;AAAA,IACvB,QAAQ,CAAC,WAAW,MAAM,WAAW,KAAK;AAAA,IAC1C,OAAO;AAAA,EAAA;AAAA,EAEX,SAAS;AAAA,IACL,OAAO,WAAW;AAAA,IAClB,YAAY,WAAW;AAAA,IACvB,QAAQ,CAAC,WAAW,IAAI;AAAA,IACxB,OAAO;AAAA,EAAA;AAEf;AAKA,SAAS,KAAK,MAAiC;AAC3C,QAAM,QAAQ,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AAChD,SAAO,QAAQ,MAAM,KAAK,GAAG,CAAC;AAClC;AAKO,SAAS,UAAU,MAAc,OAAyB;AAC7D,MAAI,CAAC,mBAAA,EAAsB,QAAO;AAClC,SAAO,GAAG,KAAK,KAAK,CAAC,GAAG,IAAI,GAAG,KAAK,WAAW,KAAK,CAAC;AACzD;AAKO,SAAS,UAAU,MAAc,OAAuB;AAC3D,SAAO,UAAU,MAAM,CAAC,KAAK,CAAC;AAClC;AAKO,SAAS,eAAe,MAAc,IAAY,OAAwB;AAC7E,MAAI,OAAO;AACP,WAAO,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC;AAAA,EACtC;AACA,SAAO,UAAU,MAAM,CAAC,EAAE,CAAC;AAC/B;AAKO,SAAS,SAAS,MAAsB;AAC3C,SAAO,UAAU,MAAM,CAAC,WAAW,IAAI,CAAC;AAC5C;AAKO,SAAS,QAAQ,MAAsB;AAC1C,SAAO,UAAU,MAAM,CAAC,WAAW,GAAG,CAAC;AAC3C;AAKO,SAAS,cAAc,MAAsB;AAChD,SAAO,UAAU,MAAM,CAAC,WAAW,SAAS,CAAC;AACjD;AASO,SAAS,oBAAoB,WAA2B;AAC3D,SAAO,UAAU,WAAW,WAAW,WAAW;AACtD;AAKO,SAAS,mBAAmB,OAAiB,YAAqB,MAAc;AACnF,QAAM,QAAQ,kBAAkB,KAAK;AACrC,QAAM,QAAQ,YAAY,MAAM,QAAQ;AACxC,QAAM,QAAQ,MAAM,YAAA,EAAc,OAAO,CAAC;AAE1C,MAAI,CAAC,sBAAsB;AACvB,WAAO,GAAG,KAAK,IAAI,KAAK;AAAA,EAC5B;AAEA,MAAI,QAAQ,CAAC,MAAM,OAAO,GAAG,MAAM,MAAM;AACzC,MAAI,MAAM,YAAY;AAClB,UAAM,KAAK,MAAM,UAAU;AAAA,EAC/B;AAEA,SAAO,UAAU,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK;AAC/C;AAKO,SAAS,kBAAkB,SAAiB,YAAqB,MAAc;AAClF,QAAM,QAAQ,kBAAkB;AAChC,QAAM,QAAQ,YAAY,MAAM,QAAQ;AAExC,MAAI,CAAC,sBAAsB;AACvB,WAAO,GAAG,KAAK,aAAa,OAAO;AAAA,EACvC;AAEA,QAAM,SAAS,UAAU,GAAG,KAAK,aAAa,CAAC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC;AAC5E,SAAO,GAAG,MAAM,IAAI,OAAO;AAC/B;AAKO,SAAS,iBAAiB,QAAwB;AACrD,MAAI,CAAC,sBAAsB;AACvB,WAAO,IAAI,MAAM;AAAA,EACrB;AAEA,SAAO,UAAU,IAAI,MAAM,KAAK,CAAC,WAAW,MAAM,WAAW,IAAI,CAAC;AACtE;AAKO,SAAS,mBAAmB,UAA0B;AACzD,MAAI,CAAC,sBAAsB;AACvB,WAAO,IAAI,QAAQ;AAAA,EACvB;AAEA,SAAO,UAAU,IAAI,QAAQ,KAAK,WAAW,WAAW;AAC5D;AAKO,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA,EAI5B,aAAa,CAAC,MAAc,SAA8C,eAAe;AACrF,UAAM,WAAW,SAAS,IAAI;AAE9B,YAAQ,QAAA;AAAA,MACJ,KAAK;AACD,eAAO,GAAG,UAAU,MAAM,WAAW,IAAI,CAAC,IAAI,QAAQ;AAAA,MAC1D,KAAK;AACD,eAAO,GAAG,UAAU,KAAK,WAAW,KAAK,CAAC,IAAI,QAAQ,IAAI,UAAU,aAAa,WAAW,KAAK,CAAC;AAAA,MACtG,KAAK;AACD,eAAO,GAAG,UAAU,KAAK,WAAW,GAAG,CAAC,IAAI,QAAQ,IAAI,UAAU,UAAU,WAAW,GAAG,CAAC;AAAA,MAC/F;AACI,eAAO;AAAA,IAAA;AAAA,EAEnB;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,CAAC,YAAoB;AAC1B,WAAO,GAAG,UAAU,KAAK,WAAW,MAAM,CAAC,IAAI,UAAU,YAAY,CAAC,WAAW,QAAQ,WAAW,IAAI,CAAC,CAAC,IAAI,OAAO;AAAA,EACzH;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,CAAC,YAAoB;AACxB,WAAO,GAAG,UAAU,KAAK,WAAW,GAAG,CAAC,IAAI,UAAU,UAAU,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,OAAO;AAAA,EACjH;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,CAAC,YAAoB;AAC1B,WAAO,GAAG,UAAU,KAAK,WAAW,KAAK,CAAC,IAAI,UAAU,SAAS,WAAW,KAAK,CAAC;AAAA,EACtF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,CAAC,YAAoB;AACvB,WAAO,GAAG,UAAU,KAAK,WAAW,IAAI,CAAC,IAAI,OAAO;AAAA,EACxD;AACJ;AAKO,MAAM,qBAAqB;AAAA,EAC9B,MAAM;AAAA,EACN,MAAM;AAAA,EACN,MAAM;AAAA,EACN,KAAK;AAAA,EACL,MAAM;AAAA,EACN,KAAK;AAAA,EACL,KAAK;AAAA,EACL,KAAK;AAAA,EACL,MAAM;AAAA,EACN,MAAM;AACV;AAKO,SAAS,eAAe,MAAsB;AAEjD,QAAM,mBAAmB,QAAQ,IAAI,SAChC,QAAQ,IAAI,KAAK,SAAS,OAAO,KACjC,QAAQ,IAAI,KAAK,SAAS,QAAQ,KAClC,QAAQ,IAAI,KAAK,SAAS,MAAM;AAErC,QAAM,OAAO,QAAQ,IAAI,MAAM,QAAQ,IAAI,kBAAkB,QAAQ,IAAI;AAGzE,MAAI,oBAAoB,CAAC,MAAM;AAC3B,WAAO;AAAA,EACX;AAGA,MAAI,SAAS;AACb,SAAO,QAAQ,kBAAkB,EAAE,QAAQ,CAAC,CAAC,OAAO,GAAG,MAAM;AACzD,aAAS,OAAO,QAAQ,IAAI,OAAO,OAAO,GAAG,GAAG,GAAG;AAAA,EACvD,CAAC;AAED,SAAO;AACX;ACtTO,SAAS,aACZ,OACA,SACA,QACA,WACA,SAAuB,QACjB;AACN,QAAM,iBAAiB,WAAW,SAAS,oBAAA,IAAwB;AAEnE,UAAQ,gBAAA;AAAA,IACJ,KAAK;AACD,aAAO,iBAAiB,OAAO,SAAS,QAAQ,SAAS;AAAA,IAC7D,KAAK;AACD,aAAO,kBAAkB,OAAO,SAAS,QAAQ,SAAS;AAAA,IAC9D,KAAK;AACD,aAAO,eAAe,OAAO,SAAS,QAAQ,SAAS;AAAA,IAC3D,KAAK;AAAA,IACL;AACI,aAAO,kBAAkB,OAAO,SAAS,QAAQ,SAAS;AAAA,EAAA;AAEtE;AAMO,SAAS,kBACZ,OACA,SACA,QACA,WACM;AACN,QAAM,YAAY,gBAAA;AAClB,QAAM,UAAU,UAAU,MAAM,IAAI,EAAE;AAEtC,MAAI,SAAS,IAAI,OAAO,MAAM,MAAM,aAAa;AAEjD,MAAI,QAAQ;AACR,cAAU,KAAK,MAAM;AAAA,EACzB;AAEA,YAAU,IAAI,OAAO;AAErB,MAAI,WAAW;AACX,cAAU,KAAK,UAAU,IAAI,IAAI,UAAU,IAAI,IAAI,UAAU,MAAM;AAAA,EACvE;AAEA,SAAO;AACX;AAKO,SAAS,iBACZ,OACA,SACA,QACA,WACM;AACN,QAAM,YAAY,gBAAA;AAClB,QAAM,UAAU,UAAU,MAAM,IAAI,EAAE;AAEtC,MAAI,SAAS;AAGb,YAAU,oBAAoB,IAAI,OAAO,GAAG,IAAI;AAGhD,YAAU,mBAAmB,KAAK,IAAI;AAGtC,MAAI,QAAQ;AACR,cAAU,iBAAiB,MAAM,IAAI;AAAA,EACzC;AAGA,YAAU;AAGV,MAAI,WAAW;AACX,cAAU,MAAM,mBAAmB,IAAI,UAAU,IAAI,IAAI,UAAU,IAAI,IAAI,UAAU,MAAM,GAAG;AAAA,EAClG;AAEA,SAAO,eAAe,MAAM;AAChC;AAKO,SAAS,kBACZ,OACA,SACA,QACA,WACM;AACN,QAAM,YAAY,gBAAA;AAClB,QAAM,UAAU,UAAU,MAAM,IAAI,EAAE;AAEtC,MAAI,SAAS;AAGb,MAAI,sBAAsB;AACtB,cAAU,oBAAoB,IAAI,OAAO,GAAG,IAAI;AAGhD,YAAQ,OAAA;AAAA,MACJ,KAAK;AACD,kBAAU,iBAAiB,KAAK,OAAO;AACvC;AAAA,MACJ,KAAK;AACD,kBAAU,iBAAiB,QAAQ,OAAO;AAC1C;AAAA,MACJ,KAAK;AAAA,MACL,KAAK;AACD,kBAAU,iBAAiB,MAAM,OAAO;AACxC;AAAA,MACJ;AACI,kBAAU,GAAG,mBAAmB,KAAK,CAAC,IAAI,OAAO;AAAA,IAAA;AAAA,EAE7D,OAAO;AAEH,aAAS,IAAI,OAAO,MAAM,MAAM,aAAa;AAE7C,QAAI,QAAQ;AACR,gBAAU,KAAK,MAAM;AAAA,IACzB;AAEA,cAAU,IAAI,OAAO;AAAA,EACzB;AAEA,MAAI,WAAW;AACX,cAAU,KAAK,UAAU,IAAI,IAAI,UAAU,IAAI,IAAI,UAAU,MAAM;AAAA,EACvE;AAEA,SAAO,eAAe,MAAM;AAChC;AAKO,SAAS,eACZ,OACA,SACA,QACA,WACM;AACN,QAAM,YAAY,gBAAA;AAClB,QAAM,UAAU,UAAU,MAAM,IAAI,EAAE;AAEtC,MAAI,SAAS,IAAI,OAAO,MAAM,MAAM,aAAa;AAEjD,MAAI,QAAQ;AACR,cAAU,KAAK,MAAM;AAAA,EACzB;AAEA,YAAU,IAAI,OAAO;AAErB,MAAI,WAAW;AACX,cAAU,KAAK,UAAU,IAAI,IAAI,UAAU,IAAI,IAAI,UAAU,MAAM;AAAA,EACvE;AAGA,SAAO,eAAe,MAAM;AAChC;AAKO,SAAS,sBAAoC;AAEhD,QAAM,OAAO,QAAQ,IAAI,MACZ,QAAQ,IAAI,kBACZ,QAAQ,IAAI,eACZ,QAAQ,IAAI,aACZ,QAAQ,IAAI,UACZ,QAAQ,IAAI;AAMR,UAAQ,IAAI,gBACZ,QAAQ,KAAK,KAAK,CAAA,QAAO,IAAI,SAAS,MAAM,CAAC;AAG9D,MAAI,MAAM;AACN,WAAO;AAAA,EACX;AAGyB;AACrB,WAAO;AAAA,EACX;AASJ;AAMO,SAAS,iBAAiB,OAAoD;AACjF,UAAQ,OAAA;AAAA,IACJ,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AACD,aAAO;AAAA,IACX,KAAK;AAAA,IACL,KAAK;AACD,aAAO;AAAA,IACX;AACI,aAAO;AAAA,EAAA;AAEnB;AAKO,SAAS,eACZ,OACA,SACA,MACA,QACA,WACF;AACE,SAAO;AAAA,IACH,WAAW,gBAAA;AAAA,IACX,OAAO,MAAM,YAAA;AAAA,IACb;AAAA,IACA;AAAA,IACA,MAAM,KAAK,MAAM,CAAC;AAAA;AAAA,IAClB,UAAU,YAAY;AAAA,MAClB,MAAM,UAAU;AAAA,MAChB,MAAM,UAAU;AAAA,MAChB,QAAQ,UAAU;AAAA,MAClB,UAAU,UAAU;AAAA,IAAA,IACpB;AAAA,IACJ,KAAK;AAAA,EAAA;AAEb;AAKO,SAAS,iBAAiB,MAAW,SAA4B;AACpE,MAAI;AACA,QAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,UAAI,KAAK,WAAW,EAAG,QAAO;AAG9B,UAAI,OAAO,KAAK,CAAC,MAAM,UAAU;AAC7B,eAAO,KAAK,IAAI,CAAC,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,IAAI;AAAA,MAC3D;AAGA,YAAM,OAAO,WAAW,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE;AACjD,YAAM,SAAS,KAAK,KAAK,GAAI;AAC7B,YAAM,OAAO,KAAK;AAAA,QAAI,CAAA,SAClB,KAAK,IAAI,CAAA,QAAO,OAAO,KAAK,GAAG,KAAK,EAAE,CAAC,EAAE,KAAK,GAAI;AAAA,MAAA;AAGtD,aAAO,CAAC,QAAQ,GAAG,IAAI,EAAE,KAAK,IAAI;AAAA,IACtC;AAEA,QAAI,OAAO,SAAS,YAAY,SAAS,MAAM;AAE3C,aAAO,OAAO,QAAQ,IAAI,EACrB,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,GAAG,GAAG,KAAK,KAAK,EAAE,EACxC,KAAK,IAAI;AAAA,IAClB;AAEA,WAAO,OAAO,IAAI;AAAA,EACtB,SAAS,OAAO;AACZ,WAAO,4BAA4B,KAAK;AAAA,EAC5C;AACJ;AAKO,SAAS,cAAc,KAAU,WAAmB,GAAG,eAAuB,GAAQ;AACzF,MAAI,gBAAgB,UAAU;AAC1B,WAAO;AAAA,EACX;AAEA,MAAI,QAAQ,KAAM,QAAO;AACzB,MAAI,QAAQ,OAAW,QAAO;AAC9B,MAAI,OAAO,QAAQ,WAAY,QAAO;AACtC,MAAI,eAAe,MAAO,QAAO,WAAW,IAAI,OAAO;AACvD,MAAI,eAAe,KAAM,QAAO,IAAI,YAAA;AACpC,MAAI,OAAO,QAAQ,SAAU,QAAO;AAEpC,MAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,WAAO,IAAI,IAAI,CAAA,SAAQ,cAAc,MAAM,UAAU,eAAe,CAAC,CAAC;AAAA,EAC1E;AAEA,QAAM,SAAc,CAAA;AACpB,aAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,GAAG,GAAG;AAC5C,WAAO,GAAG,IAAI,cAAc,OAAO,UAAU,eAAe,CAAC;AAAA,EACjE;AACA,SAAO;AACX;"}
|
|
1
|
+
{"version":3,"file":"formatting-CYjT9yhO.js","sources":["../../src/utils/ansi-colors.ts","../../src/utils/formatting.ts"],"sourcesContent":["/**\n * @fileoverview ANSI color utilities for terminal environments\n * @since 1.0.0\n */\n\nimport type { LogLevel } from '../types/index.js';\nimport { supportsANSIColors } from './environment.js';\n\n/**\n * ANSI color codes for terminal styling\n */\nexport const ANSI_CODES = {\n // Colors\n black: 30,\n red: 31,\n green: 32,\n yellow: 33,\n blue: 34,\n magenta: 35,\n cyan: 36,\n white: 37,\n\n // Bright colors\n brightBlack: 90,\n brightRed: 91,\n brightGreen: 92,\n brightYellow: 93,\n brightBlue: 94,\n brightMagenta: 95,\n brightCyan: 96,\n brightWhite: 97,\n\n // Background colors\n bgBlack: 40,\n bgRed: 41,\n bgGreen: 42,\n bgYellow: 43,\n bgBlue: 44,\n bgMagenta: 45,\n bgCyan: 46,\n bgWhite: 47,\n\n // Background bright colors\n bgBrightBlack: 100,\n bgBrightRed: 101,\n bgBrightGreen: 102,\n bgBrightYellow: 103,\n bgBrightBlue: 104,\n bgBrightMagenta: 105,\n bgBrightCyan: 106,\n bgBrightWhite: 107,\n\n // Styles\n reset: 0,\n bold: 1,\n dim: 2,\n italic: 3,\n underline: 4,\n blink: 5,\n inverse: 7,\n hidden: 8,\n strikethrough: 9,\n\n // Reset specific\n resetBold: 22,\n resetDim: 22,\n resetItalic: 23,\n resetUnderline: 24,\n resetBlink: 25,\n resetInverse: 27,\n resetHidden: 28,\n resetStrikethrough: 29\n} as const;\n\n/**\n * ANSI color presets for different log levels\n */\nexport const ANSI_LEVEL_STYLES: Record<LogLevel | 'success', {\n color: number;\n background?: number;\n styles: number[];\n emoji: string;\n}> = {\n debug: {\n color: ANSI_CODES.brightBlack,\n styles: [ANSI_CODES.dim],\n emoji: '🔍'\n },\n info: {\n color: ANSI_CODES.blue,\n styles: [ANSI_CODES.bold],\n emoji: 'ℹ️'\n },\n warn: {\n color: ANSI_CODES.yellow,\n background: ANSI_CODES.bgYellow,\n styles: [ANSI_CODES.bold, ANSI_CODES.black],\n emoji: '⚠️'\n },\n error: {\n color: ANSI_CODES.red,\n background: ANSI_CODES.bgRed,\n styles: [ANSI_CODES.bold],\n emoji: '❌'\n },\n critical: {\n color: ANSI_CODES.white,\n background: ANSI_CODES.bgRed,\n styles: [ANSI_CODES.bold, ANSI_CODES.blink],\n emoji: '🚨'\n },\n success: {\n color: ANSI_CODES.green,\n background: ANSI_CODES.bgGreen,\n styles: [ANSI_CODES.bold],\n emoji: '✅'\n }\n};\n\n/**\n * Creates an ANSI escape sequence\n */\nfunction ansi(code: number | number[]): string {\n const codes = Array.isArray(code) ? code : [code];\n return `\\x1b[${codes.join(';')}m`;\n}\n\n/**\n * Applies ANSI styling to text\n */\nexport function ansiStyle(text: string, codes: number[]): string {\n if (!supportsANSIColors()) return text;\n return `${ansi(codes)}${text}${ansi(ANSI_CODES.reset)}`;\n}\n\n/**\n * Applies color to text\n */\nexport function ansiColor(text: string, color: number): string {\n return ansiStyle(text, [color]);\n}\n\n/**\n * Applies background color to text\n */\nexport function ansiBackground(text: string, bg: number, color?: number): string {\n if (color) {\n return ansiStyle(text, [color, bg]);\n }\n return ansiStyle(text, [bg]);\n}\n\n/**\n * Makes text bold\n */\nexport function ansiBold(text: string): string {\n return ansiStyle(text, [ANSI_CODES.bold]);\n}\n\n/**\n * Makes text dim\n */\nexport function ansiDim(text: string): string {\n return ansiStyle(text, [ANSI_CODES.dim]);\n}\n\n/**\n * Underlines text\n */\nexport function ansiUnderline(text: string): string {\n return ansiStyle(text, [ANSI_CODES.underline]);\n}\n\n/**\n * Specialized formatters for different contexts\n */\n\n/**\n * Format timestamp for terminal\n */\nexport function formatTimestampANSI(timestamp: string): string {\n return ansiColor(timestamp, ANSI_CODES.brightBlack);\n}\n\n/**\n * Format log level for terminal\n */\nexport function formatLogLevelANSI(level: LogLevel, useEmojis: boolean = true): string {\n const style = ANSI_LEVEL_STYLES[level];\n const emoji = useEmojis ? style.emoji : '';\n const label = level.toUpperCase().padEnd(8);\n\n if (!supportsANSIColors()) {\n return `${emoji} ${label}`;\n }\n\n let codes = [style.color, ...style.styles];\n if (style.background) {\n codes.push(style.background);\n }\n\n return ansiStyle(`${emoji} ${label}`, codes);\n}\n\n/**\n * Format success message for terminal\n */\nexport function formatSuccessANSI(message: string, useEmojis: boolean = true): string {\n const style = ANSI_LEVEL_STYLES.success;\n const emoji = useEmojis ? style.emoji : '';\n\n if (!supportsANSIColors()) {\n return `${emoji} SUCCESS: ${message}`;\n }\n\n const prefix = ansiStyle(`${emoji} SUCCESS:`, [style.color, ...style.styles]);\n return `${prefix} ${message}`;\n}\n\n/**\n * Format prefix for terminal\n */\nexport function formatPrefixANSI(prefix: string): string {\n if (!supportsANSIColors()) {\n return `[${prefix}]`;\n }\n\n return ansiStyle(`[${prefix}]`, [ANSI_CODES.cyan, ANSI_CODES.bold]);\n}\n\n/**\n * Format file location for terminal\n */\nexport function formatLocationANSI(location: string): string {\n if (!supportsANSIColors()) {\n return `(${location})`;\n }\n\n return ansiColor(`(${location})`, ANSI_CODES.brightBlack);\n}\n\n/**\n * Format build-specific messages\n */\nexport const BUILD_FORMATTERS = {\n /**\n * Format compilation step\n */\n compilation: (step: string, status: 'starting' | 'completed' | 'failed' = 'starting') => {\n const stepText = ansiBold(step);\n\n switch (status) {\n case 'starting':\n return `${ansiColor('⚙️', ANSI_CODES.blue)} ${stepText}...`;\n case 'completed':\n return `${ansiColor('✓', ANSI_CODES.green)} ${stepText} ${ansiColor('completed', ANSI_CODES.green)}`;\n case 'failed':\n return `${ansiColor('✗', ANSI_CODES.red)} ${stepText} ${ansiColor('failed', ANSI_CODES.red)}`;\n default:\n return stepText;\n }\n },\n\n /**\n * Format warning message\n */\n warning: (message: string) => {\n return `${ansiColor('⚠', ANSI_CODES.yellow)} ${ansiStyle('Warning:', [ANSI_CODES.yellow, ANSI_CODES.bold])} ${message}`;\n },\n\n /**\n * Format error message\n */\n error: (message: string) => {\n return `${ansiColor('✗', ANSI_CODES.red)} ${ansiStyle('Error:', [ANSI_CODES.red, ANSI_CODES.bold])} ${message}`;\n },\n\n /**\n * Format success message\n */\n success: (message: string) => {\n return `${ansiColor('✓', ANSI_CODES.green)} ${ansiColor(message, ANSI_CODES.green)}`;\n },\n\n /**\n * Format info message\n */\n info: (message: string) => {\n return `${ansiColor('ℹ', ANSI_CODES.blue)} ${message}`;\n }\n};\n\n/**\n * Terminal-friendly emoji alternatives for environments that don't support them\n */\nexport const EMOJI_ALTERNATIVES = {\n '🔍': '[DEBUG]',\n 'ℹ️': '[INFO]',\n '⚠️': '[WARN]',\n '❌': '[ERROR]',\n '🚨': '[CRITICAL]',\n '✅': '[OK]',\n '✓': '[OK]',\n '✗': '[FAIL]',\n '⚙️': '[BUILD]',\n '📦': '[PKG]'\n};\n\n/**\n * Replace emojis with text alternatives for non-emoji terminals\n */\nexport function sanitizeEmojis(text: string): string {\n // Check if we're in a terminal that likely supports emojis\n const isModernTerminal = process.env.TERM &&\n (process.env.TERM.includes('xterm') ||\n process.env.TERM.includes('screen') ||\n process.env.TERM.includes('tmux'));\n\n const isCI = process.env.CI || process.env.GITHUB_ACTIONS || process.env.JENKINS_URL;\n\n // Use emojis if we have a modern terminal and not in CI\n if (isModernTerminal && !isCI) {\n return text;\n }\n\n // Replace emojis with text alternatives\n let result = text;\n Object.entries(EMOJI_ALTERNATIVES).forEach(([emoji, alt]) => {\n result = result.replace(new RegExp(emoji, 'g'), alt);\n });\n\n return result;\n}","/**\n * @fileoverview Formatting utilities for Universal Logger\n */\n\nimport type { LogLevel, StackInfo, OutputFormat } from '../types/index.js';\nimport { formatTimestamp } from './timestamps.js';\nimport { isNode, supportsANSIColors } from './environment.js';\nimport {\n formatLogLevelANSI,\n formatTimestampANSI,\n formatPrefixANSI,\n formatLocationANSI,\n sanitizeEmojis,\n BUILD_FORMATTERS\n} from './ansi-colors.js';\n\n// Re-export the type for convenience\nexport type { OutputFormat } from '../types/index.js';\n\n/**\n * Creates output based on environment and format preference\n */\nexport function createOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null,\n format: OutputFormat = 'auto'\n): string {\n const detectedFormat = format === 'auto' ? detectOptimalFormat() : format;\n\n switch (detectedFormat) {\n case 'ansi':\n return createANSIOutput(level, message, prefix, stackInfo);\n case 'build':\n return createBuildOutput(level, message, prefix, stackInfo);\n case 'ci':\n return createCIOutput(level, message, prefix, stackInfo);\n case 'plain':\n default:\n return createPlainOutput(level, message, prefix, stackInfo);\n }\n}\n\n/**\n * Creates plain text output for any environment\n * No colors, no styling - maximum compatibility\n */\nexport function createPlainOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23); // HH:MM:SS.mmm\n\n let output = `[${timeStr}] [${level.toUpperCase()}]`;\n\n if (prefix) {\n output += ` [${prefix}]`;\n }\n\n output += ` ${message}`;\n\n if (stackInfo) {\n output += ` (${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n }\n\n return output;\n}\n\n/**\n * Creates ANSI-colored output for terminals\n */\nexport function createANSIOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23);\n\n let output = '';\n\n // Timestamp\n output += formatTimestampANSI(`[${timeStr}]`) + ' ';\n\n // Log level with colors\n output += formatLogLevelANSI(level) + ' ';\n\n // Prefix if provided\n if (prefix) {\n output += formatPrefixANSI(prefix) + ' ';\n }\n\n // Message\n output += message;\n\n // Stack info if provided\n if (stackInfo) {\n output += ' ' + formatLocationANSI(`(${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`);\n }\n\n return sanitizeEmojis(output);\n}\n\n/**\n * Creates build-friendly output (optimized for Next.js builds, webpack, etc.)\n */\nexport function createBuildOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23);\n\n let output = '';\n\n // Use ANSI colors if supported\n if (supportsANSIColors()) {\n output += formatTimestampANSI(`[${timeStr}]`) + ' ';\n\n // Use build-specific formatters\n switch (level) {\n case 'info':\n output += BUILD_FORMATTERS.info(message);\n break;\n case 'warn':\n output += BUILD_FORMATTERS.warning(message);\n break;\n case 'error':\n case 'critical':\n output += BUILD_FORMATTERS.error(message);\n break;\n default:\n output += `${formatLogLevelANSI(level)} ${message}`;\n }\n } else {\n // Fallback to plain text\n output = `[${timeStr}] [${level.toUpperCase()}]`;\n\n if (prefix) {\n output += ` [${prefix}]`;\n }\n\n output += ` ${message}`;\n }\n\n if (stackInfo) {\n output += ` (${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n }\n\n return sanitizeEmojis(output);\n}\n\n/**\n * Creates CI-friendly output (no emojis, simple formatting)\n */\nexport function createCIOutput(\n level: LogLevel,\n message: string,\n prefix?: string,\n stackInfo?: StackInfo | null\n): string {\n const timestamp = formatTimestamp();\n const timeStr = timestamp.slice(11, 23);\n\n let output = `[${timeStr}] [${level.toUpperCase()}]`;\n\n if (prefix) {\n output += ` [${prefix}]`;\n }\n\n output += ` ${message}`;\n\n if (stackInfo) {\n output += ` (${stackInfo.file}:${stackInfo.line}:${stackInfo.column})`;\n }\n\n // Always remove emojis for CI\n return sanitizeEmojis(output);\n}\n\n/**\n * Detects the optimal output format based on environment\n */\nexport function detectOptimalFormat(): OutputFormat {\n // Check for specific environment variables\n const isCI = 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 const isBuild = process.env.NODE_ENV === 'production' ||\n process.env.BUILD_MODE === 'production' ||\n process.argv.some(arg => arg.includes('build') || arg.includes('webpack'));\n\n const isNextJS = process.env.NEXT_RUNTIME ||\n process.argv.some(arg => arg.includes('next'));\n\n // CI environment - always use plain text\n if (isCI) {\n return 'ci';\n }\n\n // Next.js build environment\n if (isNextJS || isBuild) {\n return 'build';\n }\n\n // Node.js with ANSI support\n if (isNode && supportsANSIColors()) {\n return 'ansi';\n }\n\n // Default to plain text\n return 'plain';\n}\n\n/**\n * Gets the appropriate log method for the level\n * Uses different console methods for better semantics\n */\nexport function getConsoleMethod(level: LogLevel): 'log' | 'info' | 'warn' | 'error' {\n switch (level) {\n case 'debug':\n return 'log';\n case 'info':\n return 'info';\n case 'warn':\n return 'warn';\n case 'error':\n case 'critical':\n return 'error';\n default:\n return 'log';\n }\n}\n\n/**\n * Create a simple log entry object for handlers\n */\nexport function createLogEntry(\n level: LogLevel,\n message: string,\n args: any[],\n prefix?: string,\n stackInfo?: StackInfo | null\n) {\n return {\n timestamp: formatTimestamp(),\n level: level.toUpperCase(),\n prefix,\n message,\n args: args.slice(1), // Exclude the first message argument\n location: stackInfo ? {\n file: stackInfo.file,\n line: stackInfo.line,\n column: stackInfo.column,\n function: stackInfo.function\n } : undefined,\n raw: args\n };\n}\n\n/**\n * Format data for table display in plain text\n */\nexport function formatTablePlain(data: any, columns?: string[]): string {\n try {\n if (Array.isArray(data)) {\n if (data.length === 0) return '[Empty Array]';\n \n // Simple array formatting\n if (typeof data[0] !== 'object') {\n return data.map((item, i) => `${i}: ${item}`).join('\\n');\n }\n \n // Object array formatting\n const keys = columns || Object.keys(data[0] || {});\n const header = keys.join('\\t');\n const rows = data.map(item => \n keys.map(key => String(item[key] || '')).join('\\t')\n );\n \n return [header, ...rows].join('\\n');\n }\n \n if (typeof data === 'object' && data !== null) {\n // Simple object formatting\n return Object.entries(data)\n .map(([key, value]) => `${key}: ${value}`)\n .join('\\n');\n }\n \n return String(data);\n } catch (error) {\n return `[Error formatting table: ${error}]`;\n }\n}\n\n/**\n * Safe object serialization for logging\n */\nexport function safeSerialize(obj: any, maxDepth: number = 3, currentDepth: number = 0): any {\n if (currentDepth >= maxDepth) {\n return '[Max Depth Reached]';\n }\n \n if (obj === null) return null;\n if (obj === undefined) return '[undefined]';\n if (typeof obj === 'function') return '[Function]';\n if (obj instanceof Error) return `[Error: ${obj.message}]`;\n if (obj instanceof Date) return obj.toISOString();\n if (typeof obj !== 'object') return obj;\n \n if (Array.isArray(obj)) {\n return obj.map(item => safeSerialize(item, maxDepth, currentDepth + 1));\n }\n \n const result: any = {};\n for (const [key, value] of Object.entries(obj)) {\n result[key] = safeSerialize(value, maxDepth, currentDepth + 1);\n }\n return result;\n}"],"names":[],"mappings":"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"}
|
package/dist/core.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { D as DEFAULT_CONFIG, a as isBrowser, p as parseStackTrace, x as supportsCSSColors, y as createStyledOutput, L as LEVEL_STYLES, i as isNode } from "./chunks/environment-
|
|
2
|
-
import { o as getConsoleMethod, c as createOutput, p as createLogEntry, q as formatTablePlain, r as createPlainOutput } from "./chunks/formatting-
|
|
1
|
+
import { D as DEFAULT_CONFIG, a as isBrowser, p as parseStackTrace, x as supportsCSSColors, y as createStyledOutput, L as LEVEL_STYLES, i as isNode } from "./chunks/environment-COWvu6Wz.js";
|
|
2
|
+
import { o as getConsoleMethod, c as createOutput, p as createLogEntry, q as formatTablePlain, r as createPlainOutput } from "./chunks/formatting-CYjT9yhO.js";
|
|
3
3
|
class CoreLogger {
|
|
4
4
|
config;
|
|
5
5
|
scopedPrefix;
|
package/dist/exports.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-D7cfaz15.js");require("./chunks/environment-C_8J-zQ_.js");const r=require("./chunks/RemoteLogHandler-ymkQ97xl.js");class ExportLogger extends e.Logger{exportLogHandler;remoteHandlers=[];constructor(r={}){super(r),r.bufferSize&&(this.exportLogHandler=new e.ExportLogHandler(r.bufferSize),this.addHandler(this.exportLogHandler))}async exportLogs(e,r){if(!this.exportLogHandler)throw new Error("Export handler not initialized. Set bufferSize in constructor.");return JSON.stringify([])}getLogs(){return this.exportLogHandler,[]}clearLogs(){this.exportLogHandler}getLogStats(){return this.exportLogHandler,{}}addRemoteHandler(e,t){const o=new r.RemoteLogHandler(e,t);this.remoteHandlers.push(o),this.addHandler(o)}clearRemoteHandlers(){const e=this.getHandlers();this.remoteHandlers.forEach(r=>{const t=e.indexOf(r);t>-1&&e.splice(t,1)}),this.remoteHandlers=[]}async flushRemoteHandlers(){const e=this.remoteHandlers.map(e=>Promise.resolve());await Promise.all(e)}}const t=new ExportLogger({bufferSize:1e3}),o={exportCSV:async e=>await t.exportLogs("csv",e),exportJSON:async e=>await t.exportLogs("json",e),exportXML:async e=>await t.exportLogs("xml",e),getStats:()=>t.getLogStats(),clear(){t.clearLogs()}},s={addEndpoint(e,r){t.addRemoteHandler(e,r)},clearEndpoints(){t.clearRemoteHandlers()},async flush(){await t.flushRemoteHandlers()}};exports.ExportLogHandler=e.ExportLogHandler,exports.RemoteLogHandler=r.RemoteLogHandler,exports.ExportLogger=ExportLogger,exports.addHandler=e=>t.addHandler(e),exports.addRemoteHandler=(e,r)=>t.addRemoteHandler(e,r),exports.clearLogs=()=>t.clearLogs(),exports.clearRemoteHandlers=()=>t.clearRemoteHandlers(),exports.critical=(...e)=>t.critical(...e),exports.debug=(...e)=>t.debug(...e),exports.default=t,exports.error=(...e)=>t.error(...e),exports.exportLogs=async(e,r)=>await t.exportLogs(e,r),exports.exportUtils=o,exports.flushRemoteHandlers=async()=>await t.flushRemoteHandlers(),exports.getLogStats=()=>t.getLogStats(),exports.getLogs=()=>t.getLogs(),exports.group=(e,r)=>t.group(e,r),exports.groupEnd=()=>t.groupEnd(),exports.info=(...e)=>t.info(...e),exports.remoteUtils=s,exports.scope=e=>t.scope(e),exports.setGlobalPrefix=e=>t.setGlobalPrefix(e),exports.setVerbosity=e=>t.setVerbosity(e),exports.success=(...e)=>t.success(...e),exports.table=(e,r)=>t.table(e,r),exports.time=e=>t.time(e),exports.timeEnd=e=>t.timeEnd(e),exports.trace=(...e)=>t.trace(...e),exports.warn=(...e)=>t.warn(...e);
|
|
2
2
|
//# sourceMappingURL=exports.cjs.map
|
package/dist/exports.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { L as Logger, E as ExportLogHandler } from "./chunks/Logger-
|
|
2
|
-
import "./chunks/environment-
|
|
1
|
+
import { L as Logger, E as ExportLogHandler } from "./chunks/Logger-D-gmmgR2.js";
|
|
2
|
+
import "./chunks/environment-COWvu6Wz.js";
|
|
3
3
|
import { R as RemoteLogHandler } from "./chunks/RemoteLogHandler-CjWpWZGl.js";
|
|
4
4
|
class ExportLogger extends Logger {
|
|
5
5
|
exportLogHandler;
|
package/dist/index.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-BV0v1AyC.js"),t=require("./chunks/environment-C_8J-zQ_.js"),r=require("./chunks/formatting-Cg5YhB9Y.js"),o=require("./chunks/RemoteLogHandler-ymkQ97xl.js"),s={maxEntries:100,ttl:3e5,enabled:!0};class StyleCache{cache=/* @__PURE__ */new Map;config;hitCount=0;missCount=0;constructor(e={}){this.config={...s,...e}}generateKey(e){return`${e.level}:${e.theme}:${e.presetName||"default"}:${e.hasPrefix}:${e.hasLocation}`}get(e){if(!this.config.enabled)return null;const t=this.generateKey(e),r=this.cache.get(t);return r?Date.now()-r.createdAt>this.config.ttl?(this.cache.delete(t),this.missCount++,null):(r.hits++,this.cache.delete(t),this.cache.set(t,r),this.hitCount++,r):(this.missCount++,null)}set(e,t,r){if(!this.config.enabled)return;const o=this.generateKey(e);if(this.cache.size>=this.config.maxEntries){const e=this.cache.keys().next().value;e&&this.cache.delete(e)}this.cache.set(o,{format:t,styles:[...r],createdAt:Date.now(),hits:0})}clear(){this.cache.clear(),this.hitCount=0,this.missCount=0}getStats(){const e=this.hitCount+this.missCount;return{size:this.cache.size,maxSize:this.config.maxEntries,hitRate:e>0?this.hitCount/e:0,hits:this.hitCount,misses:this.missCount}}setEnabled(e){this.config.enabled=e,e||this.clear()}isEnabled(){return this.config.enabled}}let i=null;function stripAnsi(e){return e.replace(/\x1b\[[0-9;]*m/g,"")}function getVisibleLength(e){return stripAnsi(e).length}function padToWidth(e,t,r="left"){const o=getVisibleLength(e);if(o>=t)return e;const s=t-o;switch(r){case"right":return" ".repeat(s)+e;case"center":const t=Math.floor(s/2),r=s-t;return" ".repeat(t)+e+" ".repeat(r);default:return e+" ".repeat(s)}}function formatWithRightAlign(e,r,o){const s=(o??t.getTerminalWidth())-getVisibleLength(e)-getVisibleLength(r);return s<=1?`${e} ${r}`:`${e}${" ".repeat(s)}${r}`}let n=null;function formatRelativeTime(e){null===n&&(n=Date.now());const t=e.getTime()-n;return t<1e3?`+${t}ms`:t<6e4?`+${(t/1e3).toFixed(1)}s`:`+${Math.floor(t/6e4)}m${Math.floor(t%6e4/1e3)}s`}function formatElapsedTime(e){null===n&&(n=Date.now());const t=e.getTime()-n,r=Math.floor(t/36e5),o=Math.floor(t%36e5/6e4),s=Math.floor(t%6e4/1e3);return`${String(r).padStart(2,"0")}:${String(o).padStart(2,"0")}:${String(s).padStart(2,"0")}`}let a=null;function getLogger(){return a||(a=new e.Logger),a}const l=getLogger(),g={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()};exports.APILogger=e.APILogger,exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.ComponentLogger=e.ComponentLogger,exports.ContextLogger=e.ContextLogger,exports.HookManager=e.HookManager,exports.Logger=e.Logger,exports.ScopedLogger=e.ScopedLogger,exports.SerializerRegistry=e.SerializerRegistry,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.TransportManager=e.TransportManager,exports.ANSI=t.ANSI,exports.BUILD_PRESETS=t.BUILD_PRESETS,exports.DEFAULT_CONFIG=t.DEFAULT_CONFIG,exports.ENVIRONMENT_DETECTION=t.ENVIRONMENT_DETECTION,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.TerminalRenderer=t.TerminalRenderer,exports.colorToHex=t.colorToHex,exports.cssColorToANSI=t.cssColorToANSI,exports.detectEnvironmentPreset=t.detectEnvironmentPreset,exports.formatTimestamp=t.formatTimestamp,exports.getANSI256Background=t.getANSI256Background,exports.getANSI256Foreground=t.getANSI256Foreground,exports.getANSIBackground=t.getANSIBackground,exports.getANSIForeground=t.getANSIForeground,exports.getColorCapability=t.getColorCapability,exports.getEnvironment=t.getEnvironment,exports.getEnvironmentInfo=t.getEnvironmentInfo,exports.getOptimalConfig=t.getOptimalConfig,exports.getTerminalHeight=t.getTerminalHeight,exports.getTerminalWidth=t.getTerminalWidth,exports.hexTo256=t.hexTo256,exports.hexToRgb=t.hexToRgb,exports.isRunningInTerminal=t.isRunningInTerminal,exports.parseStackTrace=t.parseStackTrace,exports.rgbToHex=t.rgbToHex,exports.supportsANSI=t.supportsANSI,exports.BUILD_FORMATTERS=r.BUILD_FORMATTERS,exports.ansiBackground=r.ansiBackground,exports.ansiBold=r.ansiBold,exports.ansiColor=r.ansiColor,exports.ansiDim=r.ansiDim,exports.ansiStyle=r.ansiStyle,exports.ansiUnderline=r.ansiUnderline,exports.createANSIOutput=r.createANSIOutput,exports.createBuildOutput=r.createBuildOutput,exports.createCIOutput=r.createCIOutput,exports.createOutput=r.createOutput,exports.detectOptimalFormat=r.detectOptimalFormat,exports.formatLogLevelANSI=r.formatLogLevelANSI,exports.formatSuccessANSI=r.formatSuccessANSI,exports.sanitizeEmojis=r.sanitizeEmojis,exports.RemoteLogHandler=o.RemoteLogHandler,exports.AnalyticsLogHandler=class{handle(e,t,r,o){"error"!==e&&"critical"!==e||o.timestamp}},exports.ConsoleTransport=class{constructor(e){this.options=e}name="console";write(e){const t=this.getConsoleMethod(e.level),r=e.prefix?`[${e.prefix}] `:"",o=e.location?` (${e.location.file}:${e.location.line})`:"";console[t](`[${e.level.toUpperCase()}]${r} ${e.msg}${o}`)}getConsoleMethod(e){switch(e){case"debug":default:return"log";case"info":return"info";case"warn":return"warn";case"error":case"critical":return"error"}}},exports.FileLogHandler=class{filename;maxSize;fs;constructor(e="app.log",r){if(this.filename=e,this.maxSize=r,t.isNode)try{this.fs=require("fs")}catch(o){console.warn("FileLogHandler: Unable to load fs module:",o)}}handle(e,o,s,i){const n={timestamp:i.timestamp,level:e.toUpperCase(),prefix:i.prefix,message:o,args:s.slice(1).map(e=>r.safeSerialize(e)),location:i.stackInfo},a=this.formatLogLine(n);t.isNode&&this.fs?this.writeToFileNode(a):t.isBrowser?this.writeToFileLocal(a):console.log(`[FILE-LOG] ${a}`)}formatLogLine(e){let t=[e.timestamp,`[${e.level}]`,e.prefix?`[${e.prefix}]`:"",e.message].filter(Boolean).join(" ");return e.args&&e.args.length>0&&(t+=" "+e.args.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" ")),e.location&&(t+=` (${e.location.file}:${e.location.line}:${e.location.column})`),t}writeToFileNode(e){if(this.fs)try{if(this.maxSize)try{if(this.fs.statSync(this.filename).size>this.maxSize){const e=`${this.filename}.bak`;this.fs.renameSync(this.filename,e)}}catch(t){}this.fs.appendFileSync(this.filename,e+"\n","utf8")}catch(t){console.error("FileLogHandler: Failed to write to file:",t)}}writeToFileLocal(e){try{const t=`logger_${this.filename}`,r=localStorage.getItem(t)||"";let o=r;if(r.length>0&&(o+="\n"),o+=e,this.maxSize||o.split("\n").length>1e3){const e=o.split("\n"),t=this.maxSize?Math.floor(this.maxSize/100):1e3;e.length>t&&(o=e.slice(-t).join("\n"))}localStorage.setItem(t,o)}catch(t){console.error("FileLogHandler: Failed to write to localStorage:",t)}}getLogs(){if(t.isNode&&this.fs)try{return this.fs.readFileSync(this.filename,"utf8")}catch(e){return null}else if(t.isBrowser){const e=`logger_${this.filename}`;return localStorage.getItem(e)}return null}clearLogs(){if(t.isNode&&this.fs)try{this.fs.writeFileSync(this.filename,"","utf8")}catch(e){console.error("FileLogHandler: Failed to clear file:",e)}else if(t.isBrowser){const e=`logger_${this.filename}`;localStorage.removeItem(e)}}},exports.FileTransport=class{name="file";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){const t=JSON.stringify(e)+"\n";this.buffer.push(t),this.buffer.length>=(this.options.batchSize||100)&&this.flush()}async flush(){if(0===this.buffer.length)return;const e=this.buffer.join("");if(this.buffer=[],void 0!==globalThis.process&&"function"==typeof require)try{const t=require("fs"),r=this.options.destination||"app.log";t.appendFileSync(r,e)}catch{}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.HttpTransport=class{name="http";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){this.buffer.push(e),this.buffer.length>=(this.options.batchSize||50)&&this.flush()}async flush(){if(0===this.buffer.length||!this.options.url)return;const e=[...this.buffer];this.buffer=[];try{await fetch(this.options.url,{method:"POST",headers:{"Content-Type":"application/json",...this.options.headers},body:JSON.stringify({logs:e})})}catch{this.buffer.unshift(...e)}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.StyleCache=StyleCache,exports.addHandler=e=>getLogger().addHandler(e),exports.addSerializer=(e,t,r)=>getLogger().addSerializer(e,t,r),exports.addTransport=e=>getLogger().addTransport(e),exports.api=e=>getLogger().api(e),exports.applyLogOptions=function(e,t,r="full"){let o=e;return t.rightAlign&&(o=formatWithRightAlign(e,t.rightAlign)),o},exports.badge=e=>getLogger().badge(e),exports.badges=e=>getLogger().badges(e),exports.clearBadges=()=>getLogger().clearBadges(),exports.cli=e=>getLogger().cli(e),exports.closeTransports=()=>getLogger().closeTransports(),exports.component=e=>getLogger().component(e),exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>getLogger().critical(...e),exports.debug=(...e)=>getLogger().debug(...e),exports.default=l,exports.error=(...e)=>getLogger().error(...e),exports.flushTransports=()=>getLogger().flushTransports(),exports.formatBadge=function(e,r="brackets",o="full",s){const i=s&&"none"!==o?t.getANSIForeground(s,o):"",n="none"!==o?t.ANSI.reset:"",a="none"!==o?t.ANSI.bg.black:"",l=e.toUpperCase();switch(r){case"rounded":return`${a}${i}⟨${l}⟩${n}`;case"plain":return`${i}${l}${n}`;case"unicode":return`${a}${i}╭${l}╮${n}`;case"pill":return`${a}${i}⦗${l}⦘${n}`;default:return`${a}${i}[${l}]${n}`}},exports.formatColumns=function(e,r,o="full"){const s=r??t.getTerminalWidth();return e.length,e.map((t,r)=>{if(t.width)return{...t,calculatedWidth:t.width};const o=s-e.filter((e,t)=>t!==r&&e.width).reduce((e,t)=>e+(t.width??0),0),i=e.filter(e=>!e.width).length,n=Math.floor(o/i);return{...t,calculatedWidth:n}}).map(e=>{let r=e.content;return e.color&&"none"!==o&&(r=`${t.getANSIForeground(e.color,o)}${r}${t.ANSI.reset}`),padToWidth(r,e.calculatedWidth,e.align)}).join("")},exports.formatElapsedTime=formatElapsedTime,exports.formatKeyValue=function(e,r="full",o={}){const{separator:s=" ",keyColor:i="#888888",valueColor:n="#00ffff"}=o,a=Object.entries(e);if(0===a.length)return"";const l="none"!==r?t.getANSIForeground(i,r):"",g="none"!==r?t.getANSIForeground(n,r):"",c="none"!==r?t.ANSI.reset:"";return a.map(([e,t])=>{const r="object"==typeof t?JSON.stringify(t):String(t);return`${l}${e}:${c} ${g}${r}${c}`}).join(s)},exports.formatRelativeTime=formatRelativeTime,exports.formatTimestampExt=function(e=/* @__PURE__ */new Date,t="time"){switch(t){case"iso":return e.toISOString();case"date":return e.toISOString().split("T")[0]??"";case"time":return e.toTimeString().slice(0,8);case"timeMs":return e.toTimeString().slice(0,8)+"."+String(e.getMilliseconds()).padStart(3,"0");case"relative":return formatRelativeTime(e);case"elapsed":return formatElapsedTime(e);default:return e.toLocaleTimeString()}},exports.formatWithRightAlign=formatWithRightAlign,exports.getStyleCache=function(){return i||(i=new StyleCache),i},exports.getVisibleLength=getVisibleLength,exports.group=(e,t)=>getLogger().group(e,t),exports.groupEnd=()=>getLogger().groupEnd(),exports.info=(...e)=>getLogger().info(...e),exports.isKeyValueObject=function(e){if("object"!=typeof e||null===e)return!1;if(Array.isArray(e))return!1;const t=Object.getPrototypeOf(e);return(t===Object.prototype||null===t)&&Object.values(e).every(e=>"string"==typeof e||"number"==typeof e||"boolean"==typeof e||null===e)},exports.logAnimated=(e,t)=>getLogger().logAnimated(e,t),exports.logWithSVG=(e,t,r)=>getLogger().logWithSVG(e,t,r),exports.off=(e,t)=>getLogger().off(e,t),exports.on=(e,t,r)=>getLogger().on(e,t,r),exports.once=(e,t,r)=>getLogger().once(e,t,r),exports.padToWidth=padToWidth,exports.removeSerializer=e=>getLogger().removeSerializer(e),exports.removeTransport=e=>getLogger().removeTransport(e),exports.resetStartTime=function(){n=Date.now()},exports.scope=e=>getLogger().scope(e),exports.setBannerType=e=>getLogger().setBannerType(e),exports.setGlobalPrefix=e=>getLogger().setGlobalPrefix(e),exports.setTheme=e=>getLogger().setTheme(e),exports.setVerbosity=e=>getLogger().setVerbosity(e),exports.showBanner=e=>getLogger().showBanner(e),exports.stripAnsi=stripAnsi,exports.stylePresets=g,exports.success=(...e)=>getLogger().success(...e),exports.table=(e,t)=>getLogger().table(e,t),exports.time=e=>getLogger().time(e),exports.timeEnd=e=>getLogger().timeEnd(e),exports.trace=(...e)=>getLogger().trace(...e),exports.use=(e,t)=>getLogger().use(e,t),exports.warn=(...e)=>getLogger().warn(...e);
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("./chunks/Logger-D7cfaz15.js"),t=require("./chunks/environment-C_8J-zQ_.js"),r=require("./chunks/formatting-Cg5YhB9Y.js"),s=require("./chunks/RemoteLogHandler-ymkQ97xl.js"),o={maxEntries:100,ttl:3e5,enabled:!0};class StyleCache{cache=/* @__PURE__ */new Map;config;hitCount=0;missCount=0;constructor(e={}){this.config={...o,...e}}generateKey(e){return`${e.level}:${e.theme}:${e.presetName||"default"}:${e.hasPrefix}:${e.hasLocation}`}get(e){if(!this.config.enabled)return null;const t=this.generateKey(e),r=this.cache.get(t);return r?Date.now()-r.createdAt>this.config.ttl?(this.cache.delete(t),this.missCount++,null):(r.hits++,this.cache.delete(t),this.cache.set(t,r),this.hitCount++,r):(this.missCount++,null)}set(e,t,r){if(!this.config.enabled)return;const s=this.generateKey(e);if(this.cache.size>=this.config.maxEntries){const e=this.cache.keys().next().value;e&&this.cache.delete(e)}this.cache.set(s,{format:t,styles:[...r],createdAt:Date.now(),hits:0})}clear(){this.cache.clear(),this.hitCount=0,this.missCount=0}getStats(){const e=this.hitCount+this.missCount;return{size:this.cache.size,maxSize:this.config.maxEntries,hitRate:e>0?this.hitCount/e:0,hits:this.hitCount,misses:this.missCount}}setEnabled(e){this.config.enabled=e,e||this.clear()}isEnabled(){return this.config.enabled}}let i=null,n=null;function getLogger(){return n||(n=new e.Logger),n}const a=getLogger(),l={success:t.StylePresets.success().build(),error:t.StylePresets.error().build(),warning:t.StylePresets.warning().build(),info:t.StylePresets.info().build(),accent:t.StylePresets.accent().build()};exports.APILogger=e.APILogger,exports.BANNER_VARIANTS=e.BANNER_VARIANTS,exports.ComponentLogger=e.ComponentLogger,exports.ContextLogger=e.ContextLogger,exports.HookManager=e.HookManager,exports.Logger=e.Logger,exports.ScopedLogger=e.ScopedLogger,exports.SerializerRegistry=e.SerializerRegistry,exports.THEME_BANNERS=e.THEME_BANNERS,exports.THEME_PRESETS=e.THEME_PRESETS,exports.TransportManager=e.TransportManager,exports.applyLogOptions=e.applyLogOptions,exports.formatBadge=e.formatBadge,exports.formatColumns=e.formatColumns,exports.formatElapsedTime=e.formatElapsedTime,exports.formatKeyValue=e.formatKeyValue,exports.formatRelativeTime=e.formatRelativeTime,exports.formatTimestampExt=e.formatTimestamp,exports.formatWithRightAlign=e.formatWithRightAlign,exports.getVisibleLength=e.getVisibleLength,exports.isKeyValueObject=e.isKeyValueObject,exports.padToWidth=e.padToWidth,exports.resetStartTime=e.resetStartTime,exports.stripAnsi=e.stripAnsi,exports.ANSI=t.ANSI,exports.BUILD_PRESETS=t.BUILD_PRESETS,exports.DEFAULT_CONFIG=t.DEFAULT_CONFIG,exports.ENVIRONMENT_DETECTION=t.ENVIRONMENT_DETECTION,exports.StyleBuilder=t.StyleBuilder,exports.StylePresets=t.StylePresets,exports.TerminalRenderer=t.TerminalRenderer,exports.colorToHex=t.colorToHex,exports.cssColorToANSI=t.cssColorToANSI,exports.detectEnvironmentPreset=t.detectEnvironmentPreset,exports.formatTimestamp=t.formatTimestamp,exports.getANSI256Background=t.getANSI256Background,exports.getANSI256Foreground=t.getANSI256Foreground,exports.getANSIBackground=t.getANSIBackground,exports.getANSIForeground=t.getANSIForeground,exports.getColorCapability=t.getColorCapability,exports.getEnvironment=t.getEnvironment,exports.getEnvironmentInfo=t.getEnvironmentInfo,exports.getOptimalConfig=t.getOptimalConfig,exports.getTerminalHeight=t.getTerminalHeight,exports.getTerminalWidth=t.getTerminalWidth,exports.hexTo256=t.hexTo256,exports.hexToRgb=t.hexToRgb,exports.isRunningInTerminal=t.isRunningInTerminal,exports.parseStackTrace=t.parseStackTrace,exports.rgbToHex=t.rgbToHex,exports.supportsANSI=t.supportsANSI,exports.BUILD_FORMATTERS=r.BUILD_FORMATTERS,exports.ansiBackground=r.ansiBackground,exports.ansiBold=r.ansiBold,exports.ansiColor=r.ansiColor,exports.ansiDim=r.ansiDim,exports.ansiStyle=r.ansiStyle,exports.ansiUnderline=r.ansiUnderline,exports.createANSIOutput=r.createANSIOutput,exports.createBuildOutput=r.createBuildOutput,exports.createCIOutput=r.createCIOutput,exports.createOutput=r.createOutput,exports.detectOptimalFormat=r.detectOptimalFormat,exports.formatLogLevelANSI=r.formatLogLevelANSI,exports.formatSuccessANSI=r.formatSuccessANSI,exports.sanitizeEmojis=r.sanitizeEmojis,exports.RemoteLogHandler=s.RemoteLogHandler,exports.AnalyticsLogHandler=class{handle(e,t,r,s){"error"!==e&&"critical"!==e||s.timestamp}},exports.BufferWriter=class{buffer=[];maxSize;constructor(e=1e3){this.maxSize=e}write(e,t,r){this.buffer.length>=this.maxSize&&this.buffer.shift(),this.buffer.push({message:e,level:t,styles:r,timestamp:Date.now()})}getBuffer(){return[...this.buffer]}getByLevel(...e){return this.buffer.filter(t=>e.includes(t.level))}get size(){return this.buffer.length}get isEmpty(){return 0===this.buffer.length}clear(){this.buffer=[]}flush(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)}),this.clear()}replay(){this.buffer.forEach(e=>{e.styles.length>0?console.log(e.message,...e.styles):console.log(e.message)})}toArray(){return this.buffer.map(e=>e.message)}toString(e="\n"){return this.toArray().join(e)}},exports.ConsoleTransport=class{constructor(e){this.options=e}name="console";write(e){const t=this.getConsoleMethod(e.level),r=e.prefix?`[${e.prefix}] `:"",s=e.location?` (${e.location.file}:${e.location.line})`:"";console[t](`[${e.level.toUpperCase()}]${r} ${e.msg}${s}`)}getConsoleMethod(e){switch(e){case"debug":default:return"log";case"info":return"info";case"warn":return"warn";case"error":case"critical":return"error"}}},exports.FileLogHandler=class{filename;maxSize;fs;constructor(e="app.log",r){if(this.filename=e,this.maxSize=r,t.isNode)try{this.fs=require("fs")}catch(s){console.warn("FileLogHandler: Unable to load fs module:",s)}}handle(e,s,o,i){const n={timestamp:i.timestamp,level:e.toUpperCase(),prefix:i.prefix,message:s,args:o.slice(1).map(e=>r.safeSerialize(e)),location:i.stackInfo},a=this.formatLogLine(n);t.isNode&&this.fs?this.writeToFileNode(a):t.isBrowser?this.writeToFileLocal(a):console.log(`[FILE-LOG] ${a}`)}formatLogLine(e){let t=[e.timestamp,`[${e.level}]`,e.prefix?`[${e.prefix}]`:"",e.message].filter(Boolean).join(" ");return e.args&&e.args.length>0&&(t+=" "+e.args.map(e=>"object"==typeof e?JSON.stringify(e):String(e)).join(" ")),e.location&&(t+=` (${e.location.file}:${e.location.line}:${e.location.column})`),t}writeToFileNode(e){if(this.fs)try{if(this.maxSize)try{if(this.fs.statSync(this.filename).size>this.maxSize){const e=`${this.filename}.bak`;this.fs.renameSync(this.filename,e)}}catch(t){}this.fs.appendFileSync(this.filename,e+"\n","utf8")}catch(t){console.error("FileLogHandler: Failed to write to file:",t)}}writeToFileLocal(e){try{const t=`logger_${this.filename}`,r=localStorage.getItem(t)||"";let s=r;if(r.length>0&&(s+="\n"),s+=e,this.maxSize||s.split("\n").length>1e3){const e=s.split("\n"),t=this.maxSize?Math.floor(this.maxSize/100):1e3;e.length>t&&(s=e.slice(-t).join("\n"))}localStorage.setItem(t,s)}catch(t){console.error("FileLogHandler: Failed to write to localStorage:",t)}}getLogs(){if(t.isNode&&this.fs)try{return this.fs.readFileSync(this.filename,"utf8")}catch(e){return null}else if(t.isBrowser){const e=`logger_${this.filename}`;return localStorage.getItem(e)}return null}clearLogs(){if(t.isNode&&this.fs)try{this.fs.writeFileSync(this.filename,"","utf8")}catch(e){console.error("FileLogHandler: Failed to clear file:",e)}else if(t.isBrowser){const e=`logger_${this.filename}`;localStorage.removeItem(e)}}},exports.FileTransport=class{name="file";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){const t=JSON.stringify(e)+"\n";this.buffer.push(t),this.buffer.length>=(this.options.batchSize||100)&&this.flush()}async flush(){if(0===this.buffer.length)return;const e=this.buffer.join("");if(this.buffer=[],void 0!==globalThis.process&&"function"==typeof require)try{const t=require("fs"),r=this.options.destination||"app.log";t.appendFileSync(r,e)}catch{}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.HttpTransport=class{name="http";buffer=[];flushTimer;options;constructor(e){this.options=e||{},this.options.flushInterval&&(this.flushTimer=setInterval(()=>this.flush(),this.options.flushInterval))}write(e){this.buffer.push(e),this.buffer.length>=(this.options.batchSize||50)&&this.flush()}async flush(){if(0===this.buffer.length||!this.options.url)return;const e=[...this.buffer];this.buffer=[];try{await fetch(this.options.url,{method:"POST",headers:{"Content-Type":"application/json",...this.options.headers},body:JSON.stringify({logs:e})})}catch{this.buffer.unshift(...e)}}close(){this.flushTimer&&clearInterval(this.flushTimer),this.flush()}},exports.StyleCache=StyleCache,exports.addHandler=e=>getLogger().addHandler(e),exports.addSerializer=(e,t,r)=>getLogger().addSerializer(e,t,r),exports.addTransport=e=>getLogger().addTransport(e),exports.api=e=>getLogger().api(e),exports.badge=e=>getLogger().badge(e),exports.badges=e=>getLogger().badges(e),exports.clearBadges=()=>getLogger().clearBadges(),exports.cli=e=>getLogger().cli(e),exports.closeTransports=()=>getLogger().closeTransports(),exports.component=e=>getLogger().component(e),exports.createStyle=()=>new t.StyleBuilder,exports.critical=(...e)=>getLogger().critical(...e),exports.debug=(...e)=>getLogger().debug(...e),exports.default=a,exports.error=(...e)=>getLogger().error(...e),exports.flushTransports=()=>getLogger().flushTransports(),exports.getStyleCache=function(){return i||(i=new StyleCache),i},exports.group=(e,t)=>getLogger().group(e,t),exports.groupEnd=()=>getLogger().groupEnd(),exports.info=(...e)=>getLogger().info(...e),exports.logAnimated=(e,t)=>getLogger().logAnimated(e,t),exports.logWithSVG=(e,t,r)=>getLogger().logWithSVG(e,t,r),exports.off=(e,t)=>getLogger().off(e,t),exports.on=(e,t,r)=>getLogger().on(e,t,r),exports.once=(e,t,r)=>getLogger().once(e,t,r),exports.removeSerializer=e=>getLogger().removeSerializer(e),exports.removeTransport=e=>getLogger().removeTransport(e),exports.scope=e=>getLogger().scope(e),exports.setBannerType=e=>getLogger().setBannerType(e),exports.setGlobalPrefix=e=>getLogger().setGlobalPrefix(e),exports.setTheme=e=>getLogger().setTheme(e),exports.setVerbosity=e=>getLogger().setVerbosity(e),exports.showBanner=e=>getLogger().showBanner(e),exports.stylePresets=l,exports.success=(...e)=>getLogger().success(...e),exports.table=(e,t)=>getLogger().table(e,t),exports.time=e=>getLogger().time(e),exports.timeEnd=e=>getLogger().timeEnd(e),exports.trace=(...e)=>getLogger().trace(...e),exports.use=(e,t)=>getLogger().use(e,t),exports.warn=(...e)=>getLogger().warn(...e);
|
|
2
2
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/styling/StyleCache.ts","../src/terminal/formatter.ts","../src/index.ts","../src/handlers/AnalyticsLogHandler.ts","../src/transports/ConsoleTransport.ts","../src/handlers/FileLogHandler.ts","../src/transports/FileTransport.ts","../src/transports/HttpTransport.ts"],"sourcesContent":["import type { LogLevel, DevToolsTheme } from '../types/core.js';\n\ninterface CacheKey {\n level: LogLevel | 'success';\n theme: DevToolsTheme;\n presetName?: string;\n hasPrefix: boolean;\n hasLocation: boolean;\n}\n\ninterface CacheEntry {\n styles: string[];\n format: string;\n createdAt: number;\n hits: number;\n}\n\nexport interface StyleCacheConfig {\n maxEntries?: number;\n ttl?: number;\n enabled?: boolean;\n}\n\nconst DEFAULT_CONFIG: Required<StyleCacheConfig> = {\n maxEntries: 100,\n ttl: 5 * 60 * 1000,\n enabled: true\n};\n\nexport class StyleCache {\n private cache: Map<string, CacheEntry> = new Map();\n private config: Required<StyleCacheConfig>;\n private hitCount = 0;\n private missCount = 0;\n\n constructor(config: StyleCacheConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n private generateKey(key: CacheKey): string {\n return `${key.level}:${key.theme}:${key.presetName || 'default'}:${key.hasPrefix}:${key.hasLocation}`;\n }\n\n get(key: CacheKey): CacheEntry | null {\n if (!this.config.enabled) return null;\n\n const cacheKey = this.generateKey(key);\n const entry = this.cache.get(cacheKey);\n\n if (!entry) {\n this.missCount++;\n return null;\n }\n\n if (Date.now() - entry.createdAt > this.config.ttl) {\n this.cache.delete(cacheKey);\n this.missCount++;\n return null;\n }\n\n entry.hits++;\n this.cache.delete(cacheKey);\n this.cache.set(cacheKey, entry);\n this.hitCount++;\n\n return entry;\n }\n\n set(key: CacheKey, format: string, styles: string[]): void {\n if (!this.config.enabled) return;\n\n const cacheKey = this.generateKey(key);\n\n if (this.cache.size >= this.config.maxEntries) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n\n this.cache.set(cacheKey, {\n format,\n styles: [...styles],\n createdAt: Date.now(),\n hits: 0\n });\n }\n\n clear(): void {\n this.cache.clear();\n this.hitCount = 0;\n this.missCount = 0;\n }\n\n getStats(): {\n size: number;\n maxSize: number;\n hitRate: number;\n hits: number;\n misses: number;\n } {\n const total = this.hitCount + this.missCount;\n return {\n size: this.cache.size,\n maxSize: this.config.maxEntries,\n hitRate: total > 0 ? this.hitCount / total : 0,\n hits: this.hitCount,\n misses: this.missCount\n };\n }\n\n setEnabled(enabled: boolean): void {\n this.config.enabled = enabled;\n if (!enabled) {\n this.clear();\n }\n }\n\n isEnabled(): boolean {\n return this.config.enabled;\n }\n}\n\nlet _styleCache: StyleCache | null = null;\n\nexport function getStyleCache(): StyleCache {\n if (!_styleCache) {\n _styleCache = new StyleCache();\n }\n return _styleCache;\n}\n","/**\n * Terminal Formatter - Alignment, key-value, and advanced terminal formatting\n */\n\nimport { getTerminalWidth } from '../utils/environment-detector.js';\nimport { getANSIForeground, ANSI, type ColorCapability } from './color-converter.js';\nimport type { ColumnConfig, ColumnAlign, BadgeStyle, TimestampFormat, LogOptions } from '../types/index.js';\n\nexport function stripAnsi(str: string): string {\n return str.replace(/\\x1b\\[[0-9;]*m/g, '');\n}\n\nexport function getVisibleLength(str: string): number {\n return stripAnsi(str).length;\n}\n\nexport function padToWidth(str: string, width: number, align: ColumnAlign = 'left'): string {\n const visibleLen = getVisibleLength(str);\n if (visibleLen >= width) return str;\n\n const padding = width - visibleLen;\n\n switch (align) {\n case 'right':\n return ' '.repeat(padding) + str;\n case 'center':\n const leftPad = Math.floor(padding / 2);\n const rightPad = padding - leftPad;\n return ' '.repeat(leftPad) + str + ' '.repeat(rightPad);\n case 'left':\n default:\n return str + ' '.repeat(padding);\n }\n}\n\nexport function formatWithRightAlign(\n leftContent: string,\n rightContent: string,\n maxWidth?: number\n): string {\n const width = maxWidth ?? getTerminalWidth();\n const leftLen = getVisibleLength(leftContent);\n const rightLen = getVisibleLength(rightContent);\n\n const gap = width - leftLen - rightLen;\n if (gap <= 1) {\n return `${leftContent} ${rightContent}`;\n }\n\n return `${leftContent}${' '.repeat(gap)}${rightContent}`;\n}\n\nexport function formatColumns(\n columns: ColumnConfig[],\n maxWidth?: number,\n colorCapability: ColorCapability = 'full'\n): string {\n const width = maxWidth ?? getTerminalWidth();\n const totalColumns = columns.length;\n\n const columnsWithWidths = columns.map((col, idx) => {\n if (col.width) return { ...col, calculatedWidth: col.width };\n\n const remainingWidth = width - columns\n .filter((c, i) => i !== idx && c.width)\n .reduce((sum, c) => sum + (c.width ?? 0), 0);\n\n const autoColumns = columns.filter(c => !c.width).length;\n const calculatedWidth = Math.floor(remainingWidth / autoColumns);\n\n return { ...col, calculatedWidth };\n });\n\n return columnsWithWidths.map(col => {\n let content = col.content;\n\n if (col.color && colorCapability !== 'none') {\n const colorCode = getANSIForeground(col.color, colorCapability);\n content = `${colorCode}${content}${ANSI.reset}`;\n }\n\n return padToWidth(content, col.calculatedWidth, col.align);\n }).join('');\n}\n\nexport function formatKeyValue(\n obj: Record<string, unknown>,\n colorCapability: ColorCapability = 'full',\n options: { separator?: string; keyColor?: string; valueColor?: string } = {}\n): string {\n const {\n separator = ' ',\n keyColor = '#888888',\n valueColor = '#00ffff'\n } = options;\n\n const entries = Object.entries(obj);\n if (entries.length === 0) return '';\n\n const keyColorCode = colorCapability !== 'none'\n ? getANSIForeground(keyColor, colorCapability)\n : '';\n const valueColorCode = colorCapability !== 'none'\n ? getANSIForeground(valueColor, colorCapability)\n : '';\n const reset = colorCapability !== 'none' ? ANSI.reset : '';\n\n return entries\n .map(([key, value]) => {\n const valueStr = typeof value === 'object'\n ? JSON.stringify(value)\n : String(value);\n return `${keyColorCode}${key}:${reset} ${valueColorCode}${valueStr}${reset}`;\n })\n .join(separator);\n}\n\nexport function isKeyValueObject(obj: unknown): obj is Record<string, unknown> {\n if (typeof obj !== 'object' || obj === null) return false;\n if (Array.isArray(obj)) return false;\n\n const proto = Object.getPrototypeOf(obj);\n if (proto !== Object.prototype && proto !== null) return false;\n\n const values = Object.values(obj);\n return values.every(v =>\n typeof v === 'string' ||\n typeof v === 'number' ||\n typeof v === 'boolean' ||\n v === null\n );\n}\n\nexport function formatBadge(\n badge: string,\n style: BadgeStyle = 'brackets',\n colorCapability: ColorCapability = 'full',\n color?: string\n): string {\n const colorCode = color && colorCapability !== 'none'\n ? getANSIForeground(color, colorCapability)\n : '';\n const reset = colorCapability !== 'none' ? ANSI.reset : '';\n const bgBlack = colorCapability !== 'none' ? ANSI.bg.black : '';\n\n const text = badge.toUpperCase();\n\n switch (style) {\n case 'rounded':\n return `${bgBlack}${colorCode}⟨${text}⟩${reset}`;\n case 'plain':\n return `${colorCode}${text}${reset}`;\n case 'unicode':\n return `${bgBlack}${colorCode}╭${text}╮${reset}`;\n case 'pill':\n return `${bgBlack}${colorCode}⦗${text}⦘${reset}`;\n case 'brackets':\n default:\n return `${bgBlack}${colorCode}[${text}]${reset}`;\n }\n}\n\nexport function formatTimestamp(\n date: Date = new Date(),\n format: TimestampFormat = 'time'\n): string {\n switch (format) {\n case 'iso':\n return date.toISOString();\n case 'date':\n return date.toISOString().split('T')[0] ?? '';\n case 'time':\n return date.toTimeString().slice(0, 8);\n case 'timeMs':\n return date.toTimeString().slice(0, 8) + '.' +\n String(date.getMilliseconds()).padStart(3, '0');\n case 'relative':\n return formatRelativeTime(date);\n case 'elapsed':\n return formatElapsedTime(date);\n case 'custom':\n default:\n return date.toLocaleTimeString();\n }\n}\n\nlet startTime: number | null = null;\n\nexport function formatRelativeTime(date: Date): string {\n if (startTime === null) {\n startTime = Date.now();\n }\n\n const diff = date.getTime() - startTime;\n\n if (diff < 1000) {\n return `+${diff}ms`;\n } else if (diff < 60000) {\n return `+${(diff / 1000).toFixed(1)}s`;\n } else {\n const mins = Math.floor(diff / 60000);\n const secs = Math.floor((diff % 60000) / 1000);\n return `+${mins}m${secs}s`;\n }\n}\n\nexport function formatElapsedTime(date: Date): string {\n if (startTime === null) {\n startTime = Date.now();\n }\n\n const diff = date.getTime() - startTime;\n const hours = Math.floor(diff / 3600000);\n const mins = Math.floor((diff % 3600000) / 60000);\n const secs = Math.floor((diff % 60000) / 1000);\n\n return `${String(hours).padStart(2, '0')}:${String(mins).padStart(2, '0')}:${String(secs).padStart(2, '0')}`;\n}\n\nexport function resetStartTime(): void {\n startTime = Date.now();\n}\n\nexport function applyLogOptions(\n message: string,\n options: LogOptions,\n colorCapability: ColorCapability = 'full'\n): string {\n let result = message;\n\n if (options.rightAlign) {\n result = formatWithRightAlign(message, options.rightAlign);\n }\n\n return result;\n}\n","/**\n * @fileoverview Better Logger - Librería completa con todas las características\n * @version 0.3.0\n * @since 2024\n * \n * Punto de entrada principal que proporciona la experiencia completa de Better Logger\n * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,\n * capacidades de exportación y logging remoto.\n * \n * @module @mks2508/better-logger\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Lazy singleton - se inicializa solo cuando se necesita\nlet _logger: Logger | null = null;\n\nfunction getLogger(): Logger {\n if (!_logger) {\n _logger = new Logger();\n }\n return _logger;\n}\n\n/**\n * Clase principal Logger con conjunto completo de características\n * \n * @example\n * // Importación y uso básico\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.preset('cyberpunk'); // Aplicar preset completo\n * logger.info('¡Hola mundo!');\n * \n * @example\n * // Logger con scope para componentes\n * const auth = logger.component('Auth');\n * auth.info('Usuario autenticando...');\n * auth.success('Login exitoso');\n * \n * @example\n * // Logger para APIs con badges\n * const api = logger.api('GraphQL');\n * api.badges(['v2', 'cached']).info('Query ejecutada');\n * \n * @since 0.3.0\n */\nexport { Logger };\n\n/**\n * Instancia singleton del logger lista para usar\n * @default\n * \n * @example\n * // Uso directo sin crear instancia\n * import logger from '@mks2508/better-logger';\n * \n * logger.info('Aplicación iniciada');\n * logger.success('Conexión establecida');\n * logger.warn('Memoria al 80%');\n * logger.error('Fallo en conexión');\n */\nexport default getLogger();\n\n/**\n * Métodos de logging individuales (enlazados al singleton)\n * \n * @example\n * // Importar solo los métodos necesarios\n * import { info, error, success } from '@mks2508/better-logger';\n * \n * info('Proceso iniciado');\n * success('✓ Completado exitosamente');\n * error('Error:', errorDetails);\n * \n * @since 0.3.0\n */\nexport const debug = (...args: any[]) => getLogger().debug(...args);\nexport const info = (...args: any[]) => getLogger().info(...args);\nexport const warn = (...args: any[]) => getLogger().warn(...args);\nexport const error = (...args: any[]) => getLogger().error(...args);\nexport const success = (...args: any[]) => getLogger().success(...args);\nexport const critical = (...args: any[]) => getLogger().critical(...args);\nexport const trace = (...args: any[]) => getLogger().trace(...args);\nexport const table = (data: any, columns?: string[]) => getLogger().table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => getLogger().group(label, collapsed);\nexport const groupEnd = () => getLogger().groupEnd();\nexport const time = (label: string) => getLogger().time(label);\nexport const timeEnd = (label: string) => getLogger().timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => getLogger().setGlobalPrefix(prefix);\nexport const scope = (name: string) => getLogger().scope(name);\nexport const component = (name: string) => getLogger().component(name);\nexport const api = (name: string) => getLogger().api(name);\nexport const badges = (badgeList: string[]) => getLogger().badges(badgeList);\nexport const badge = (badgeName: string) => getLogger().badge(badgeName);\nexport const clearBadges = () => getLogger().clearBadges();\nexport const setVerbosity = (level: Verbosity) => getLogger().setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => getLogger().addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => getLogger().setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => getLogger().setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => getLogger().showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n getLogger().logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n getLogger().logAnimated(message, duration);\nexport const cli = (command: string) => getLogger().cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry,\n TimerResult,\n OutputFormat,\n IScopedLogger,\n IAPILogger,\n IComponentLogger,\n Bindings,\n SerializerFn,\n SerializerContext,\n SerializerConfig,\n ISerializerRegistry,\n HookLogEntry,\n HookEvent,\n HookCallback,\n MiddlewareFn,\n IHookManager,\n TransportRecord,\n TransportOptions,\n TransportTarget,\n ITransport,\n StyleCacheConfig,\n BadgeStyle,\n TimestampFormat,\n ColumnAlign,\n ColumnConfig,\n LogOptions,\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Serializers\nexport { SerializerRegistry } from './serializers/index.js';\n\n// Hooks & Middleware\nexport { HookManager } from './hooks/index.js';\n\n// Transports\nexport {\n TransportManager,\n ConsoleTransport,\n FileTransport,\n HttpTransport\n} from './transports/index.js';\n\n// Style Cache\nexport { StyleCache, getStyleCache } from './styling/StyleCache.js';\n\n// Enterprise feature function exports\nimport type { SerializerFn, HookEvent, HookCallback, MiddlewareFn, TransportTarget } from './types/index.js';\nexport const addSerializer = <T>(\n type: new (...args: any[]) => T,\n serializer: SerializerFn<T>,\n priority?: number\n) => getLogger().addSerializer(type, serializer, priority);\nexport const removeSerializer = <T>(type: new (...args: any[]) => T) =>\n getLogger().removeSerializer(type);\nexport const on = (event: HookEvent, callback: HookCallback, priority?: number) =>\n getLogger().on(event, callback, priority);\nexport const once = (event: HookEvent, callback: HookCallback, priority?: number) =>\n getLogger().once(event, callback, priority);\nexport const off = (event: HookEvent, callback: HookCallback) =>\n getLogger().off(event, callback);\nexport const use = (middleware: MiddlewareFn, priority?: number) =>\n getLogger().use(middleware, priority);\nexport const addTransport = (target: TransportTarget) =>\n getLogger().addTransport(target);\nexport const removeTransport = (id: string) =>\n getLogger().removeTransport(id);\nexport const flushTransports = () =>\n getLogger().flushTransports();\nexport const closeTransports = () =>\n getLogger().closeTransports();\n\n// Scoped loggers\nexport {\n ScopedLogger,\n APILogger,\n ComponentLogger,\n ContextLogger\n} from './ScopedLogger.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp,\n detectOptimalFormat,\n createOutput,\n createANSIOutput,\n createBuildOutput,\n createCIOutput\n} from './utils/index.js';\n\n// ANSI color utilities\nexport {\n ansiStyle,\n ansiColor,\n ansiBackground,\n ansiBold,\n ansiDim,\n ansiUnderline,\n formatLogLevelANSI,\n formatSuccessANSI,\n BUILD_FORMATTERS,\n sanitizeEmojis\n} from './utils/ansi-colors.js';\n\n// Environment detection and presets\nexport {\n BUILD_PRESETS,\n ENVIRONMENT_DETECTION,\n detectEnvironmentPreset,\n getOptimalConfig\n} from './constants.js';\n\n/**\n * Utilidades de estilo para crear estilos personalizados de consola\n * \n * @example\n * // Crear estilo personalizado\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const miEstilo = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .rounded('8px')\n * .bold()\n * .build();\n * \n * console.log('%cMensaje estilizado', miEstilo);\n * \n * @example\n * // Usar presets predefinidos\n * console.log('%cÉxito!', stylePresets.success);\n * console.log('%cError!', stylePresets.error);\n * \n * @since 0.3.0\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola\n * \n * @returns {StyleBuilder} Constructor de estilos encadenable\n * \n * @example\n * const estilo = createStyle()\n * .gradient('#667eea', '#764ba2')\n * .color('white')\n * .padding('8px 16px')\n * .rounded('4px')\n * .shadow('0 2px 4px rgba(0,0,0,0.2)')\n * .build();\n * \n * @since 0.3.0\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Presets de estilo predefinidos para casos de uso comunes\n * \n * @constant {Object} stylePresets\n * \n * @example\n * console.log('%cOperación exitosa', stylePresets.success);\n * console.log('%cAdvertencia', stylePresets.warning);\n * console.log('%cError crítico', stylePresets.error);\n * console.log('%cInformación', stylePresets.info);\n * console.log('%cDestacado', stylePresets.accent);\n * \n * @since 0.3.0\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};\n\n// Terminal formatting utilities\nexport {\n formatWithRightAlign,\n formatColumns,\n formatKeyValue,\n formatBadge,\n formatTimestamp as formatTimestampExt,\n formatRelativeTime,\n formatElapsedTime,\n resetStartTime,\n isKeyValueObject,\n stripAnsi,\n getVisibleLength,\n padToWidth,\n applyLogOptions,\n} from './terminal/formatter.js';\n\n// Color converter utilities\nexport {\n hexToRgb,\n rgbToHex,\n hexTo256,\n colorToHex,\n getANSIForeground,\n getANSIBackground,\n getANSI256Foreground,\n getANSI256Background,\n cssColorToANSI,\n ANSI,\n} from './terminal/color-converter.js';\n\nexport type { RGB, ColorCapability } from './terminal/color-converter.js';\n\n// Terminal renderer\nexport { TerminalRenderer } from './terminal/terminal-renderer.js';\nexport type { ANSIStyle, ChalkLikeInterface } from './terminal/terminal-renderer.js';\n\n// Environment detection\nexport {\n getEnvironment,\n isRunningInTerminal,\n supportsANSI,\n getColorCapability,\n getTerminalWidth,\n getTerminalHeight,\n getEnvironmentInfo,\n} from './utils/environment-detector.js';\n\nexport type { Environment } from './utils/environment-detector.js';","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","import type { TransportRecord, TransportOptions, ITransport, LogLevel } from '../types/index.js';\n\nexport class ConsoleTransport implements ITransport {\n readonly name = 'console';\n\n constructor(private options?: TransportOptions) {}\n\n write(record: TransportRecord): void {\n const method = this.getConsoleMethod(record.level);\n const prefix = record.prefix ? `[${record.prefix}] ` : '';\n const location = record.location\n ? ` (${record.location.file}:${record.location.line})`\n : '';\n\n console[method](`[${record.level.toUpperCase()}]${prefix} ${record.msg}${location}`);\n }\n\n private getConsoleMethod(level: LogLevel): 'log' | 'info' | 'warn' | 'error' {\n switch (level) {\n case 'debug': return 'log';\n case 'info': return 'info';\n case 'warn': return 'warn';\n case 'error':\n case 'critical': return 'error';\n default: return 'log';\n }\n }\n}\n","/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}","import type { TransportRecord, TransportOptions, ITransport } from '../types/index.js';\n\nexport interface FileTransportOptions extends TransportOptions {\n destination?: string;\n}\n\nexport class FileTransport implements ITransport {\n readonly name = 'file';\n private buffer: string[] = [];\n private flushTimer?: ReturnType<typeof setInterval>;\n private options: FileTransportOptions;\n\n constructor(options?: FileTransportOptions) {\n this.options = options || {};\n\n if (this.options.flushInterval) {\n this.flushTimer = setInterval(() => this.flush(), this.options.flushInterval);\n }\n }\n\n write(record: TransportRecord): void {\n const line = JSON.stringify(record) + '\\n';\n this.buffer.push(line);\n\n if (this.buffer.length >= (this.options.batchSize || 100)) {\n this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0) return;\n\n const lines = this.buffer.join('');\n this.buffer = [];\n\n if (typeof globalThis.process !== 'undefined' && typeof require === 'function') {\n try {\n const fs = require('fs');\n const dest = this.options.destination || 'app.log';\n fs.appendFileSync(dest, lines);\n } catch {\n // Silent fail in browser or if fs not available\n }\n }\n }\n\n close(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n this.flush();\n }\n}\n","import type { TransportRecord, TransportOptions, ITransport } from '../types/index.js';\n\nexport interface HttpTransportOptions extends TransportOptions {\n url?: string;\n headers?: Record<string, string>;\n}\n\nexport class HttpTransport implements ITransport {\n readonly name = 'http';\n private buffer: TransportRecord[] = [];\n private flushTimer?: ReturnType<typeof setInterval>;\n private options: HttpTransportOptions;\n\n constructor(options?: HttpTransportOptions) {\n this.options = options || {};\n\n if (this.options.flushInterval) {\n this.flushTimer = setInterval(() => this.flush(), this.options.flushInterval);\n }\n }\n\n write(record: TransportRecord): void {\n this.buffer.push(record);\n\n if (this.buffer.length >= (this.options.batchSize || 50)) {\n this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0 || !this.options.url) return;\n\n const records = [...this.buffer];\n this.buffer = [];\n\n try {\n await fetch(this.options.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.options.headers\n },\n body: JSON.stringify({ logs: records })\n });\n } catch {\n this.buffer.unshift(...records);\n }\n }\n\n close(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n this.flush();\n }\n}\n"],"names":["DEFAULT_CONFIG","maxEntries","ttl","enabled","StyleCache","cache","Map","config","hitCount","missCount","constructor","this","generateKey","key","level","theme","presetName","hasPrefix","hasLocation","get","cacheKey","entry","Date","now","createdAt","delete","hits","set","format","styles","size","firstKey","keys","next","value","clear","getStats","total","maxSize","hitRate","misses","setEnabled","isEnabled","_styleCache","stripAnsi","str","replace","getVisibleLength","length","padToWidth","width","align","visibleLen","padding","repeat","leftPad","Math","floor","rightPad","formatWithRightAlign","leftContent","rightContent","maxWidth","gap","getTerminalWidth","startTime","formatRelativeTime","date","diff","getTime","toFixed","formatElapsedTime","hours","mins","secs","String","padStart","_logger","getLogger","Logger","index","stylePresets","success","StylePresets","build","error","warning","info","accent","handle","message","_args","metadata","timestamp","options","name","write","record","method","getConsoleMethod","prefix","location","file","line","console","toUpperCase","msg","filename","fs","isNode","require","warn","args","logEntry","slice","map","arg","safeSerialize","stackInfo","logLine","formatLogLine","writeToFileNode","isBrowser","writeToFileLocal","log","filter","Boolean","join","JSON","stringify","column","statSync","backupName","renameSync","appendFileSync","storageKey","existingLogs","localStorage","getItem","newLogs","split","lines","maxLines","setItem","getLogs","readFileSync","clearLogs","writeFileSync","removeItem","buffer","flushTimer","flushInterval","setInterval","flush","push","batchSize","globalThis","process","dest","destination","close","clearInterval","url","records","fetch","headers","body","logs","unshift","handler","addHandler","type","serializer","priority","addSerializer","target","addTransport","api","colorCapability","result","rightAlign","badgeName","badge","badgeList","badges","clearBadges","command","cli","closeTransports","component","StyleBuilder","critical","debug","flushTransports","style","color","colorCode","getANSIForeground","reset","ANSI","bgBlack","bg","black","text","columns","col","idx","calculatedWidth","remainingWidth","c","i","reduce","sum","autoColumns","content","obj","separator","keyColor","valueColor","entries","Object","keyColorCode","valueColorCode","valueStr","toISOString","toTimeString","getMilliseconds","toLocaleTimeString","label","collapsed","group","groupEnd","Array","isArray","proto","getPrototypeOf","prototype","values","every","v","duration","logAnimated","svgContent","logWithSVG","event","callback","off","on","once","removeSerializer","id","removeTransport","scope","bannerType","setBannerType","setGlobalPrefix","setTheme","setVerbosity","showBanner","data","table","time","timeEnd","trace","middleware","use"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/styling/StyleCache.ts","../src/index.ts","../src/handlers/AnalyticsLogHandler.ts","../src/writers/BufferWriter.ts","../src/transports/ConsoleTransport.ts","../src/handlers/FileLogHandler.ts","../src/transports/FileTransport.ts","../src/transports/HttpTransport.ts"],"sourcesContent":["import type { LogLevel, DevToolsTheme } from '../types/core.js';\n\ninterface CacheKey {\n level: LogLevel | 'success';\n theme: DevToolsTheme;\n presetName?: string;\n hasPrefix: boolean;\n hasLocation: boolean;\n}\n\ninterface CacheEntry {\n styles: string[];\n format: string;\n createdAt: number;\n hits: number;\n}\n\nexport interface StyleCacheConfig {\n maxEntries?: number;\n ttl?: number;\n enabled?: boolean;\n}\n\nconst DEFAULT_CONFIG: Required<StyleCacheConfig> = {\n maxEntries: 100,\n ttl: 5 * 60 * 1000,\n enabled: true\n};\n\nexport class StyleCache {\n private cache: Map<string, CacheEntry> = new Map();\n private config: Required<StyleCacheConfig>;\n private hitCount = 0;\n private missCount = 0;\n\n constructor(config: StyleCacheConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n private generateKey(key: CacheKey): string {\n return `${key.level}:${key.theme}:${key.presetName || 'default'}:${key.hasPrefix}:${key.hasLocation}`;\n }\n\n get(key: CacheKey): CacheEntry | null {\n if (!this.config.enabled) return null;\n\n const cacheKey = this.generateKey(key);\n const entry = this.cache.get(cacheKey);\n\n if (!entry) {\n this.missCount++;\n return null;\n }\n\n if (Date.now() - entry.createdAt > this.config.ttl) {\n this.cache.delete(cacheKey);\n this.missCount++;\n return null;\n }\n\n entry.hits++;\n this.cache.delete(cacheKey);\n this.cache.set(cacheKey, entry);\n this.hitCount++;\n\n return entry;\n }\n\n set(key: CacheKey, format: string, styles: string[]): void {\n if (!this.config.enabled) return;\n\n const cacheKey = this.generateKey(key);\n\n if (this.cache.size >= this.config.maxEntries) {\n const firstKey = this.cache.keys().next().value;\n if (firstKey) {\n this.cache.delete(firstKey);\n }\n }\n\n this.cache.set(cacheKey, {\n format,\n styles: [...styles],\n createdAt: Date.now(),\n hits: 0\n });\n }\n\n clear(): void {\n this.cache.clear();\n this.hitCount = 0;\n this.missCount = 0;\n }\n\n getStats(): {\n size: number;\n maxSize: number;\n hitRate: number;\n hits: number;\n misses: number;\n } {\n const total = this.hitCount + this.missCount;\n return {\n size: this.cache.size,\n maxSize: this.config.maxEntries,\n hitRate: total > 0 ? this.hitCount / total : 0,\n hits: this.hitCount,\n misses: this.missCount\n };\n }\n\n setEnabled(enabled: boolean): void {\n this.config.enabled = enabled;\n if (!enabled) {\n this.clear();\n }\n }\n\n isEnabled(): boolean {\n return this.config.enabled;\n }\n}\n\nlet _styleCache: StyleCache | null = null;\n\nexport function getStyleCache(): StyleCache {\n if (!_styleCache) {\n _styleCache = new StyleCache();\n }\n return _styleCache;\n}\n","/**\n * @fileoverview Better Logger - Librería completa con todas las características\n * @version 0.3.0\n * @since 2024\n * \n * Punto de entrada principal que proporciona la experiencia completa de Better Logger\n * con características avanzadas incluyendo estilos CSS, soporte SVG, animaciones,\n * capacidades de exportación y logging remoto.\n * \n * @module @mks2508/better-logger\n */\n\n// Main Logger class with all features\nimport { Logger } from './Logger.js';\nimport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler\n} from './types/index.js';\n\n// Lazy singleton - se inicializa solo cuando se necesita\nlet _logger: Logger | null = null;\n\nfunction getLogger(): Logger {\n if (!_logger) {\n _logger = new Logger();\n }\n return _logger;\n}\n\n/**\n * Clase principal Logger con conjunto completo de características\n * \n * @example\n * // Importación y uso básico\n * import { Logger } from '@mks2508/better-logger';\n * \n * const logger = new Logger();\n * logger.preset('cyberpunk'); // Aplicar preset completo\n * logger.info('¡Hola mundo!');\n * \n * @example\n * // Logger con scope para componentes\n * const auth = logger.component('Auth');\n * auth.info('Usuario autenticando...');\n * auth.success('Login exitoso');\n * \n * @example\n * // Logger para APIs con badges\n * const api = logger.api('GraphQL');\n * api.badges(['v2', 'cached']).info('Query ejecutada');\n * \n * @since 0.3.0\n */\nexport { Logger };\n\n/**\n * Instancia singleton del logger lista para usar\n * @default\n * \n * @example\n * // Uso directo sin crear instancia\n * import logger from '@mks2508/better-logger';\n * \n * logger.info('Aplicación iniciada');\n * logger.success('Conexión establecida');\n * logger.warn('Memoria al 80%');\n * logger.error('Fallo en conexión');\n */\nexport default getLogger();\n\n/**\n * Métodos de logging individuales (enlazados al singleton)\n * \n * @example\n * // Importar solo los métodos necesarios\n * import { info, error, success } from '@mks2508/better-logger';\n * \n * info('Proceso iniciado');\n * success('✓ Completado exitosamente');\n * error('Error:', errorDetails);\n * \n * @since 0.3.0\n */\nexport const debug = (...args: any[]) => getLogger().debug(...args);\nexport const info = (...args: any[]) => getLogger().info(...args);\nexport const warn = (...args: any[]) => getLogger().warn(...args);\nexport const error = (...args: any[]) => getLogger().error(...args);\nexport const success = (...args: any[]) => getLogger().success(...args);\nexport const critical = (...args: any[]) => getLogger().critical(...args);\nexport const trace = (...args: any[]) => getLogger().trace(...args);\nexport const table = (data: any, columns?: string[]) => getLogger().table(data, columns);\nexport const group = (label: string, collapsed?: boolean) => getLogger().group(label, collapsed);\nexport const groupEnd = () => getLogger().groupEnd();\nexport const time = (label: string) => getLogger().time(label);\nexport const timeEnd = (label: string) => getLogger().timeEnd(label);\nexport const setGlobalPrefix = (prefix: string) => getLogger().setGlobalPrefix(prefix);\nexport const scope = (name: string) => getLogger().scope(name);\nexport const component = (name: string) => getLogger().component(name);\nexport const api = (name: string) => getLogger().api(name);\nexport const badges = (badgeList: string[]) => getLogger().badges(badgeList);\nexport const badge = (badgeName: string) => getLogger().badge(badgeName);\nexport const clearBadges = () => getLogger().clearBadges();\nexport const setVerbosity = (level: Verbosity) => getLogger().setVerbosity(level);\nexport const addHandler = (handler: ILogHandler) => getLogger().addHandler(handler);\nexport const setTheme = (theme: ThemeVariant) => getLogger().setTheme(theme);\nexport const setBannerType = (bannerType: BannerType) => getLogger().setBannerType(bannerType);\nexport const showBanner = (bannerType?: BannerType) => getLogger().showBanner(bannerType);\nexport const logWithSVG = (message: string, svgContent?: string, options?: StyleOptions) => \n getLogger().logWithSVG(message, svgContent, options);\nexport const logAnimated = (message: string, duration?: number) => \n getLogger().logAnimated(message, duration);\nexport const cli = (command: string) => getLogger().cli(command);\n\n// Type exports\nexport type {\n LogLevel,\n Verbosity,\n ThemeVariant,\n BannerType,\n StyleOptions,\n ILogHandler,\n LoggerConfig,\n LogMetadata,\n StackInfo,\n TimerEntry,\n TimerResult,\n OutputFormat,\n IScopedLogger,\n IAPILogger,\n IComponentLogger,\n Bindings,\n SerializerFn,\n SerializerContext,\n SerializerConfig,\n ISerializerRegistry,\n HookLogEntry,\n HookEvent,\n HookCallback,\n MiddlewareFn,\n IHookManager,\n TransportRecord,\n TransportOptions,\n TransportTarget,\n ITransport,\n StyleCacheConfig,\n BadgeStyle,\n TimestampFormat,\n ColumnAlign,\n ColumnConfig,\n LogOptions,\n} from './types/index.js';\n\n// Styling utilities\nexport { \n StyleBuilder,\n StylePresets,\n THEME_PRESETS,\n THEME_BANNERS,\n BANNER_VARIANTS\n} from './styling/index.js';\n\n// Handler exports\nexport {\n FileLogHandler,\n RemoteLogHandler,\n AnalyticsLogHandler\n} from './handlers/index.js';\n\n// Serializers\nexport { SerializerRegistry } from './serializers/index.js';\n\n// Hooks & Middleware\nexport { HookManager } from './hooks/index.js';\n\n// Transports\nexport {\n TransportManager,\n ConsoleTransport,\n FileTransport,\n HttpTransport\n} from './transports/index.js';\n\n// Style Cache\nexport { StyleCache, getStyleCache } from './styling/StyleCache.js';\n\n// Enterprise feature function exports\nimport type { SerializerFn, HookEvent, HookCallback, MiddlewareFn, TransportTarget } from './types/index.js';\nexport const addSerializer = <T>(\n type: new (...args: any[]) => T,\n serializer: SerializerFn<T>,\n priority?: number\n) => getLogger().addSerializer(type, serializer, priority);\nexport const removeSerializer = <T>(type: new (...args: any[]) => T) =>\n getLogger().removeSerializer(type);\nexport const on = (event: HookEvent, callback: HookCallback, priority?: number) =>\n getLogger().on(event, callback, priority);\nexport const once = (event: HookEvent, callback: HookCallback, priority?: number) =>\n getLogger().once(event, callback, priority);\nexport const off = (event: HookEvent, callback: HookCallback) =>\n getLogger().off(event, callback);\nexport const use = (middleware: MiddlewareFn, priority?: number) =>\n getLogger().use(middleware, priority);\nexport const addTransport = (target: TransportTarget) =>\n getLogger().addTransport(target);\nexport const removeTransport = (id: string) =>\n getLogger().removeTransport(id);\nexport const flushTransports = () =>\n getLogger().flushTransports();\nexport const closeTransports = () =>\n getLogger().closeTransports();\n\n// Scoped loggers\nexport {\n ScopedLogger,\n APILogger,\n ComponentLogger,\n ContextLogger\n} from './ScopedLogger.js';\n\n// Constants\nexport { DEFAULT_CONFIG } from './constants.js';\n\n// Utility exports\nexport {\n parseStackTrace,\n formatTimestamp,\n detectOptimalFormat,\n createOutput,\n createANSIOutput,\n createBuildOutput,\n createCIOutput\n} from './utils/index.js';\n\n// ANSI color utilities\nexport {\n ansiStyle,\n ansiColor,\n ansiBackground,\n ansiBold,\n ansiDim,\n ansiUnderline,\n formatLogLevelANSI,\n formatSuccessANSI,\n BUILD_FORMATTERS,\n sanitizeEmojis\n} from './utils/ansi-colors.js';\n\n// Environment detection and presets\nexport {\n BUILD_PRESETS,\n ENVIRONMENT_DETECTION,\n detectEnvironmentPreset,\n getOptimalConfig\n} from './constants.js';\n\n/**\n * Utilidades de estilo para crear estilos personalizados de consola\n * \n * @example\n * // Crear estilo personalizado\n * import { createStyle, stylePresets } from '@mks2508/better-logger';\n * \n * const miEstilo = createStyle()\n * .bg('linear-gradient(45deg, #ff6b6b, #feca57)')\n * .color('white')\n * .padding('10px')\n * .rounded('8px')\n * .bold()\n * .build();\n * \n * console.log('%cMensaje estilizado', miEstilo);\n * \n * @example\n * // Usar presets predefinidos\n * console.log('%cÉxito!', stylePresets.success);\n * console.log('%cError!', stylePresets.error);\n * \n * @since 0.3.0\n */\nimport { StyleBuilder, StylePresets } from './styling/index.js';\n\n/**\n * Crea una nueva instancia de StyleBuilder para estilos personalizados de consola\n * \n * @returns {StyleBuilder} Constructor de estilos encadenable\n * \n * @example\n * const estilo = createStyle()\n * .gradient('#667eea', '#764ba2')\n * .color('white')\n * .padding('8px 16px')\n * .rounded('4px')\n * .shadow('0 2px 4px rgba(0,0,0,0.2)')\n * .build();\n * \n * @since 0.3.0\n */\nexport const createStyle = () => new StyleBuilder();\n\n/**\n * Presets de estilo predefinidos para casos de uso comunes\n * \n * @constant {Object} stylePresets\n * \n * @example\n * console.log('%cOperación exitosa', stylePresets.success);\n * console.log('%cAdvertencia', stylePresets.warning);\n * console.log('%cError crítico', stylePresets.error);\n * console.log('%cInformación', stylePresets.info);\n * console.log('%cDestacado', stylePresets.accent);\n * \n * @since 0.3.0\n */\nexport const stylePresets = {\n success: StylePresets.success().build(),\n error: StylePresets.error().build(),\n warning: StylePresets.warning().build(),\n info: StylePresets.info().build(),\n accent: StylePresets.accent().build(),\n};\n\n// Terminal formatting utilities\nexport {\n formatWithRightAlign,\n formatColumns,\n formatKeyValue,\n formatBadge,\n formatTimestamp as formatTimestampExt,\n formatRelativeTime,\n formatElapsedTime,\n resetStartTime,\n isKeyValueObject,\n stripAnsi,\n getVisibleLength,\n padToWidth,\n applyLogOptions,\n} from './terminal/formatter.js';\n\n// Color converter utilities\nexport {\n hexToRgb,\n rgbToHex,\n hexTo256,\n colorToHex,\n getANSIForeground,\n getANSIBackground,\n getANSI256Foreground,\n getANSI256Background,\n cssColorToANSI,\n ANSI,\n} from './terminal/color-converter.js';\n\nexport type { RGB, ColorCapability } from './terminal/color-converter.js';\n\n// Terminal renderer\nexport { TerminalRenderer } from './terminal/terminal-renderer.js';\nexport type { ANSIStyle, ChalkLikeInterface } from './terminal/terminal-renderer.js';\n\n// Environment detection\nexport {\n getEnvironment,\n isRunningInTerminal,\n supportsANSI,\n getColorCapability,\n getTerminalWidth,\n getTerminalHeight,\n getEnvironmentInfo,\n} from './utils/environment-detector.js';\n\nexport type { Environment } from './utils/environment-detector.js';\n\n// Output writers for custom log destinations\nexport { BufferWriter, type BufferEntry } from './writers/index.js';\nexport type { OutputWriter, OutputMode } from './types/core.js';","/**\n * @fileoverview Analytics log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\n\n/**\n * Example custom handler for analytics demonstration\n */\nexport class AnalyticsLogHandler implements ILogHandler {\n handle(level: LogLevel, message: string, _args: any[], metadata: LogMetadata): void {\n // In a real implementation, this could send analytics data\n if (level === 'error' || level === 'critical') {\n // Track errors for analytics\n console.debug('Analytics: Error tracked', { \n level, \n message, \n timestamp: metadata.timestamp \n });\n }\n }\n}","/**\n * @fileoverview BufferWriter - Collects log output in memory for later use\n * @version 4.0.0\n */\n\nimport type { LogLevel, OutputWriter } from '../types/core.js';\n\n/**\n * Entry in the log buffer\n */\nexport interface BufferEntry {\n message: string;\n level: LogLevel;\n styles: string[];\n timestamp: number;\n}\n\n/**\n * BufferWriter collects log messages in memory instead of outputting to console.\n * Useful for:\n * - CLI operations with spinners (buffer logs during spinner, show after)\n * - Testing (capture logs for assertions)\n * - Batch processing (collect logs, process together)\n *\n * @implements {OutputWriter}\n * @since 4.0.0\n *\n * @example\n * import logger, { BufferWriter } from '@mks2508/better-logger';\n *\n * const buffer = new BufferWriter();\n * logger.updateConfig({\n * outputMode: 'custom',\n * outputWriter: buffer\n * });\n *\n * // Logs go to buffer, not console\n * spinner.start('Loading...');\n * logger.info('Connecting...');\n * logger.info('Processing...');\n * spinner.stop();\n *\n * // Show buffered logs\n * logger.updateConfig({ outputMode: 'console' });\n * buffer.flush(); // Outputs all buffered logs to console\n */\nexport class BufferWriter implements OutputWriter {\n private buffer: BufferEntry[] = [];\n private maxSize: number;\n\n /**\n * Creates a new BufferWriter\n * @param maxSize - Maximum number of entries to buffer (default: 1000)\n */\n constructor(maxSize: number = 1000) {\n this.maxSize = maxSize;\n }\n\n /**\n * Writes a log entry to the buffer\n * @param message - Formatted log message\n * @param level - Log level\n * @param styles - CSS styles (for browser console)\n */\n write(message: string, level: LogLevel, styles: string[]): void {\n if (this.buffer.length >= this.maxSize) {\n this.buffer.shift(); // Remove oldest entry\n }\n\n this.buffer.push({\n message,\n level,\n styles,\n timestamp: Date.now()\n });\n }\n\n /**\n * Returns all buffered entries\n * @returns Copy of the buffer array\n */\n getBuffer(): BufferEntry[] {\n return [...this.buffer];\n }\n\n /**\n * Returns buffered entries filtered by log level\n * @param levels - Log levels to include\n * @returns Filtered buffer entries\n */\n getByLevel(...levels: LogLevel[]): BufferEntry[] {\n return this.buffer.filter(entry => levels.includes(entry.level));\n }\n\n /**\n * Returns the number of buffered entries\n */\n get size(): number {\n return this.buffer.length;\n }\n\n /**\n * Checks if buffer is empty\n */\n get isEmpty(): boolean {\n return this.buffer.length === 0;\n }\n\n /**\n * Clears all buffered entries\n */\n clear(): void {\n this.buffer = [];\n }\n\n /**\n * Outputs all buffered entries to console and clears the buffer\n */\n flush(): void {\n this.buffer.forEach(entry => {\n if (entry.styles.length > 0) {\n console.log(entry.message, ...entry.styles);\n } else {\n console.log(entry.message);\n }\n });\n this.clear();\n }\n\n /**\n * Outputs buffered entries to console without clearing\n */\n replay(): void {\n this.buffer.forEach(entry => {\n if (entry.styles.length > 0) {\n console.log(entry.message, ...entry.styles);\n } else {\n console.log(entry.message);\n }\n });\n }\n\n /**\n * Returns all messages as an array of strings\n */\n toArray(): string[] {\n return this.buffer.map(entry => entry.message);\n }\n\n /**\n * Returns all messages joined as a single string\n * @param separator - String to join messages with (default: newline)\n */\n toString(separator: string = '\\n'): string {\n return this.toArray().join(separator);\n }\n}\n","import type { TransportRecord, TransportOptions, ITransport, LogLevel } from '../types/index.js';\n\nexport class ConsoleTransport implements ITransport {\n readonly name = 'console';\n\n constructor(private options?: TransportOptions) {}\n\n write(record: TransportRecord): void {\n const method = this.getConsoleMethod(record.level);\n const prefix = record.prefix ? `[${record.prefix}] ` : '';\n const location = record.location\n ? ` (${record.location.file}:${record.location.line})`\n : '';\n\n console[method](`[${record.level.toUpperCase()}]${prefix} ${record.msg}${location}`);\n }\n\n private getConsoleMethod(level: LogLevel): 'log' | 'info' | 'warn' | 'error' {\n switch (level) {\n case 'debug': return 'log';\n case 'info': return 'info';\n case 'warn': return 'warn';\n case 'error':\n case 'critical': return 'error';\n default: return 'log';\n }\n }\n}\n","/**\n * @fileoverview File-based log handler for Advanced Logger\n */\n\nimport type { ILogHandler, LogLevel, LogMetadata } from '../types/index.js';\nimport { isNode, isBrowser } from '../utils/environment.js';\nimport { safeSerialize } from '../utils/formatting.js';\n\n/**\n * Universal file-based log handler for persistent logging\n * Works in both Node.js (real files) and browser (localStorage)\n */\nexport class FileLogHandler implements ILogHandler {\n private filename: string;\n private maxSize?: number;\n private fs?: any; // Node.js fs module\n\n constructor(filename: string = 'app.log', maxSize?: number) {\n this.filename = filename;\n this.maxSize = maxSize;\n \n // Load Node.js fs module if in Node environment\n if (isNode) {\n try {\n this.fs = require('fs');\n } catch (error) {\n console.warn('FileLogHandler: Unable to load fs module:', error);\n }\n }\n }\n\n handle(level: LogLevel, message: string, args: any[], metadata: LogMetadata): void {\n const logEntry = {\n timestamp: metadata.timestamp,\n level: level.toUpperCase(),\n prefix: metadata.prefix,\n message,\n args: args.slice(1).map(arg => safeSerialize(arg)),\n location: metadata.stackInfo,\n };\n\n const logLine = this.formatLogLine(logEntry);\n\n if (isNode && this.fs) {\n this.writeToFileNode(logLine);\n } else if (isBrowser) {\n this.writeToFileLocal(logLine);\n } else {\n // Fallback - just console output\n console.log(`[FILE-LOG] ${logLine}`);\n }\n }\n\n /**\n * Format log entry as a single line for file storage\n */\n private formatLogLine(entry: any): string {\n const parts = [\n entry.timestamp,\n `[${entry.level}]`,\n entry.prefix ? `[${entry.prefix}]` : '',\n entry.message\n ].filter(Boolean);\n\n let line = parts.join(' ');\n \n if (entry.args && entry.args.length > 0) {\n line += ' ' + entry.args.map((arg: any) => \n typeof arg === 'object' ? JSON.stringify(arg) : String(arg)\n ).join(' ');\n }\n \n if (entry.location) {\n line += ` (${entry.location.file}:${entry.location.line}:${entry.location.column})`;\n }\n \n return line;\n }\n\n /**\n * Write to actual file in Node.js environment\n */\n private writeToFileNode(logLine: string): void {\n if (!this.fs) return;\n\n try {\n // Check file size if maxSize is set\n if (this.maxSize) {\n try {\n const stats = this.fs.statSync(this.filename);\n if (stats.size > this.maxSize) {\n // Simple rotation: backup current file and start fresh\n const backupName = `${this.filename}.bak`;\n this.fs.renameSync(this.filename, backupName);\n }\n } catch (error) {\n // File doesn't exist yet, that's fine\n }\n }\n\n // Append to file\n this.fs.appendFileSync(this.filename, logLine + '\\n', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to write to file:', error);\n }\n }\n\n /**\n * Write to localStorage in browser environment\n */\n private writeToFileLocal(logLine: string): void {\n try {\n const storageKey = `logger_${this.filename}`;\n const existingLogs = localStorage.getItem(storageKey) || '';\n \n let newLogs = existingLogs;\n if (existingLogs.length > 0) {\n newLogs += '\\n';\n }\n newLogs += logLine;\n \n // Simple size management - keep last 1000 lines max\n if (this.maxSize || newLogs.split('\\n').length > 1000) {\n const lines = newLogs.split('\\n');\n const maxLines = this.maxSize ? Math.floor(this.maxSize / 100) : 1000;\n if (lines.length > maxLines) {\n newLogs = lines.slice(-maxLines).join('\\n');\n }\n }\n \n localStorage.setItem(storageKey, newLogs);\n } catch (error) {\n console.error('FileLogHandler: Failed to write to localStorage:', error);\n }\n }\n\n /**\n * Get stored logs (useful for debugging)\n */\n getLogs(): string | null {\n if (isNode && this.fs) {\n try {\n return this.fs.readFileSync(this.filename, 'utf8');\n } catch (error) {\n return null;\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n return localStorage.getItem(storageKey);\n }\n return null;\n }\n\n /**\n * Clear stored logs\n */\n clearLogs(): void {\n if (isNode && this.fs) {\n try {\n this.fs.writeFileSync(this.filename, '', 'utf8');\n } catch (error) {\n console.error('FileLogHandler: Failed to clear file:', error);\n }\n } else if (isBrowser) {\n const storageKey = `logger_${this.filename}`;\n localStorage.removeItem(storageKey);\n }\n }\n}","import type { TransportRecord, TransportOptions, ITransport } from '../types/index.js';\n\nexport interface FileTransportOptions extends TransportOptions {\n destination?: string;\n}\n\nexport class FileTransport implements ITransport {\n readonly name = 'file';\n private buffer: string[] = [];\n private flushTimer?: ReturnType<typeof setInterval>;\n private options: FileTransportOptions;\n\n constructor(options?: FileTransportOptions) {\n this.options = options || {};\n\n if (this.options.flushInterval) {\n this.flushTimer = setInterval(() => this.flush(), this.options.flushInterval);\n }\n }\n\n write(record: TransportRecord): void {\n const line = JSON.stringify(record) + '\\n';\n this.buffer.push(line);\n\n if (this.buffer.length >= (this.options.batchSize || 100)) {\n this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0) return;\n\n const lines = this.buffer.join('');\n this.buffer = [];\n\n if (typeof globalThis.process !== 'undefined' && typeof require === 'function') {\n try {\n const fs = require('fs');\n const dest = this.options.destination || 'app.log';\n fs.appendFileSync(dest, lines);\n } catch {\n // Silent fail in browser or if fs not available\n }\n }\n }\n\n close(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n this.flush();\n }\n}\n","import type { TransportRecord, TransportOptions, ITransport } from '../types/index.js';\n\nexport interface HttpTransportOptions extends TransportOptions {\n url?: string;\n headers?: Record<string, string>;\n}\n\nexport class HttpTransport implements ITransport {\n readonly name = 'http';\n private buffer: TransportRecord[] = [];\n private flushTimer?: ReturnType<typeof setInterval>;\n private options: HttpTransportOptions;\n\n constructor(options?: HttpTransportOptions) {\n this.options = options || {};\n\n if (this.options.flushInterval) {\n this.flushTimer = setInterval(() => this.flush(), this.options.flushInterval);\n }\n }\n\n write(record: TransportRecord): void {\n this.buffer.push(record);\n\n if (this.buffer.length >= (this.options.batchSize || 50)) {\n this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0 || !this.options.url) return;\n\n const records = [...this.buffer];\n this.buffer = [];\n\n try {\n await fetch(this.options.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.options.headers\n },\n body: JSON.stringify({ logs: records })\n });\n } catch {\n this.buffer.unshift(...records);\n }\n }\n\n close(): void {\n if (this.flushTimer) {\n clearInterval(this.flushTimer);\n }\n this.flush();\n }\n}\n"],"names":["DEFAULT_CONFIG","maxEntries","ttl","enabled","StyleCache","cache","Map","config","hitCount","missCount","constructor","this","generateKey","key","level","theme","presetName","hasPrefix","hasLocation","get","cacheKey","entry","Date","now","createdAt","delete","hits","set","format","styles","size","firstKey","keys","next","value","clear","getStats","total","maxSize","hitRate","misses","setEnabled","isEnabled","_styleCache","_logger","getLogger","Logger","index","stylePresets","success","StylePresets","build","error","warning","info","accent","handle","message","_args","metadata","timestamp","buffer","write","length","shift","push","getBuffer","getByLevel","levels","filter","includes","isEmpty","flush","forEach","console","log","replay","toArray","map","toString","separator","join","options","name","record","method","getConsoleMethod","prefix","location","file","line","toUpperCase","msg","filename","fs","isNode","require","warn","args","logEntry","slice","arg","safeSerialize","stackInfo","logLine","formatLogLine","writeToFileNode","isBrowser","writeToFileLocal","Boolean","JSON","stringify","String","column","statSync","backupName","renameSync","appendFileSync","storageKey","existingLogs","localStorage","getItem","newLogs","split","lines","maxLines","Math","floor","setItem","getLogs","readFileSync","clearLogs","writeFileSync","removeItem","flushTimer","flushInterval","setInterval","batchSize","globalThis","process","dest","destination","close","clearInterval","url","records","fetch","headers","body","logs","unshift","handler","addHandler","type","serializer","priority","addSerializer","target","addTransport","api","badgeName","badge","badgeList","badges","clearBadges","command","cli","closeTransports","component","StyleBuilder","critical","debug","flushTransports","label","collapsed","group","groupEnd","duration","logAnimated","svgContent","logWithSVG","event","callback","off","on","once","removeSerializer","id","removeTransport","scope","bannerType","setBannerType","setGlobalPrefix","setTheme","setVerbosity","showBanner","data","columns","table","time","timeEnd","trace","middleware","use"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -148,4 +148,6 @@ export { TerminalRenderer } from './terminal/terminal-renderer.js';
|
|
|
148
148
|
export type { ANSIStyle, ChalkLikeInterface } from './terminal/terminal-renderer.js';
|
|
149
149
|
export { getEnvironment, isRunningInTerminal, supportsANSI, getColorCapability, getTerminalWidth, getTerminalHeight, getEnvironmentInfo, } from './utils/environment-detector.js';
|
|
150
150
|
export type { Environment } from './utils/environment-detector.js';
|
|
151
|
+
export { BufferWriter, type BufferEntry } from './writers/index.js';
|
|
152
|
+
export type { OutputWriter, OutputMode } from './types/core.js';
|
|
151
153
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|