logixia 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["AsyncLocalStorage","traceId: string | undefined","serialized: Record<string, any>","entry: LogEntry","colors: Record<string, string>","levelMap: Record<string, number>","createLogger","logger","LogixiaLoggerService","defaultConfig: LoggerConfig","errorData: any","Scope","TraceMiddleware","config?: TraceIdConfig","traceId: string | undefined","DEFAULT_ROUTES: RouteInfo[]","RequestMethod","LogixiaLoggerModule","traceConfig: TraceIdConfig | undefined","defaultConfig: LoggerConfig","formatted: Record<string, any>","serialized: Record<string, any>","parts: string[]","createLoggerFromCore"],"sources":["../src/types/index.ts","../src/utils/trace.utils.ts","../src/utils/error.utils.ts","../src/core/logitron-logger.ts","../node_modules/.pnpm/@oxc-project+runtime@0.87.0/node_modules/@oxc-project/runtime/src/helpers/decorateMetadata.js","../node_modules/.pnpm/@oxc-project+runtime@0.87.0/node_modules/@oxc-project/runtime/src/helpers/decorate.js","../src/core/logitron-nestjs.service.ts","../src/core/trace.middleware.ts","../src/core/logitron-logger.module.ts","../src/formatters/json.formatter.ts","../src/formatters/text.formatter.ts","../src/index.ts"],"sourcesContent":["/**\n * Core type definitions for Logitron Logger\n */\n\nimport { HttpRequest, HttpResponse } from './http.types';\n\n// Log levels const object for better flexibility\nexport const LogLevel = {\n ERROR: 'error',\n WARN: 'warn',\n INFO: 'info',\n DEBUG: 'debug',\n TRACE: 'trace',\n VERBOSE: 'verbose',\n} as const;\n\nexport type LogLevel = typeof LogLevel[keyof typeof LogLevel];\nexport type LogLevelString = LogLevel | (string & {});\n\n// Predefined color types\nexport type LogColor = 'black' | 'red' | 'green' | 'yellow' | 'blue' | 'magenta' | 'cyan' | 'white' | 'gray' | 'grey' | 'brightRed' | 'brightGreen' | 'brightYellow' | 'brightBlue' | 'brightMagenta' | 'brightCyan' | 'brightWhite';\n\n// Predefined field keys that can be enabled/disabled\nexport type LogFieldKey = 'timestamp' | 'level' | 'appName' | 'service' | 'traceId' | 'message' | 'payload' | 'timeTaken' | 'context' | 'requestId' | 'userId' | 'sessionId' | 'environment';\n\n// Environment types\nexport type Environment = 'development' | 'production';\n\n// Trace ID configuration\nexport interface TraceIdExtractorConfig {\n header?: string | string[];\n query?: string | string[];\n body?: string | string[];\n params?: string | string[];\n}\n\nexport interface TraceIdConfig {\n enabled: boolean;\n generator?: () => string;\n contextKey?: string;\n extractor?: TraceIdExtractorConfig;\n}\n\nexport interface LoggerConfig<TLevels extends Record<string, number> = Record<string, number>> {\n appName?: string;\n environment?: Environment;\n traceId?: boolean | TraceIdConfig;\n format?: {\n timestamp?: boolean;\n colorize?: boolean;\n json?: boolean;\n };\n silent?: boolean;\n levelOptions?: {\n level?: keyof TLevels | LogLevelString;\n levels?: TLevels;\n colors?: Record<string, LogColor>;\n } | undefined;\n fields?: Partial<Record<LogFieldKey, string | boolean>>; // Enable/disable fields or customize their format\n // Example: { timestamp: '[yyyy-mm-dd HH:MM:ss.MS]', level: true, appName: false, message: true }\n [key: string]: any;\n}\n\n// Base logger interface with standard methods\nexport interface IBaseLogger {\n error(message: string, data?: Record<string, any>): Promise<void>;\n error(error: Error, data?: Record<string, any>): Promise<void>;\n warn(message: string, data?: Record<string, any>): Promise<void>;\n info(message: string, data?: Record<string, any>): Promise<void>;\n debug(message: string, data?: Record<string, any>): Promise<void>;\n trace(message: string, data?: Record<string, any>): Promise<void>;\n verbose(message: string, data?: Record<string, any>): Promise<void>;\n logLevel(level: string, message: string, data?: Record<string, any>): Promise<void>;\n \n time(label: string): void;\n timeEnd(label: string): Promise<number | undefined>;\n timeAsync<T>(label: string, fn: () => Promise<T>): Promise<T>;\n \n setLevel(level: LogLevel | string): void;\n getLevel(): string;\n setContext(context: string): void;\n getContext(): string | undefined;\n \n child(context: string, data?: Record<string, any>): ILogger;\n close(): Promise<void>;\n}\n\n// Type for custom level methods based on config\nexport type CustomLevelMethods<T extends Record<string, number>> = {\n [K in keyof T]: (message: string, data?: Record<string, any>) => Promise<void>;\n};\n\n// Generic logger type that combines base logger with custom level methods\nexport type ILogger<TLevels extends Record<string, number> = {}> = IBaseLogger & CustomLevelMethods<TLevels>;\n\n// Default logger interface for backward compatibility\nexport interface ILoggerDefault extends IBaseLogger {}\n\n// Helper type to create logger with specific custom levels\nexport type LoggerWithLevels<T extends LoggerConfig<any>> = T['levelOptions'] extends { levels: infer L }\n ? L extends Record<string, number>\n ? ILogger<L>\n : ILoggerDefault\n : ILoggerDefault;\n\n// Helper type to extract levels from config for IntelliSense\nexport type ExtractLevels<T> = T extends LoggerConfig<infer L> ? L : Record<string, number>;\n\n// Log entry interface\nexport interface LogEntry {\n timestamp: string;\n level: string;\n appName: string;\n traceId?: string;\n message: string;\n payload?: Record<string, any>;\n context?: string;\n error?: Error;\n}\n\n// Error serialization options\nexport interface ErrorSerializationOptions {\n includeStack?: boolean;\n maxDepth?: number;\n excludeFields?: string[];\n}\n\n// Timing entry interface\nexport interface TimingEntry {\n label: string;\n startTime: number;\n endTime?: number;\n duration?: number;\n}\n\n// Context data interface\nexport interface ContextData {\n [key: string]: any;\n}\n\n// Log formatter interface\nexport interface ILogFormatter {\n format(entry: LogEntry): string;\n}\n\n// Request context interface for tracking request lifecycle\nexport interface RequestContext {\n requestId: string;\n traceId?: string;\n startTime: number;\n endTime?: number;\n duration?: number;\n request: HttpRequest;\n response?: HttpResponse;\n error?: Error;\n userId?: string;\n sessionId?: string;\n userAgent?: string;\n ip?: string;\n}\n\n// Default log levels with colors\nexport const DEFAULT_LOG_LEVELS = {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n trace: 4,\n verbose: 5\n};\n\nexport const DEFAULT_LOG_COLORS = {\n error: 'red',\n warn: 'yellow',\n info: 'green',\n debug: 'blue',\n trace: 'magenta',\n verbose: 'cyan'\n};\n\n// Additional exports for compatibility\nexport type { LoggerConfig as LoggerConfigInterface };\n\n// Export all HTTP types\nexport * from './http.types';","/**\n * Trace ID utilities for Logitron\n */\n\nimport { v4 as uuidv4 } from 'uuid';\nimport { AsyncLocalStorage } from 'async_hooks';\nimport { TraceIdConfig, TraceIdExtractorConfig } from '../types';\n\n// Async local storage for trace context\nexport const traceStorage = new AsyncLocalStorage<{ traceId: string; [key: string]: any }>();\n\n/**\n * Default trace ID generator using UUID v4\n */\nexport function generateTraceId(): string {\n return uuidv4().replace(/-/g, '').substring(0, 16);\n}\n\n/**\n * Get current trace ID from async context\n */\nexport function getCurrentTraceId(): string | undefined {\n const store = traceStorage.getStore();\n return store?.traceId;\n}\n\n/**\n * Set trace ID in async context\n */\nexport function setTraceId(traceId: string, data?: Record<string, any>): void {\n const currentStore = traceStorage.getStore() || {};\n traceStorage.enterWith({ ...currentStore, traceId, ...data });\n}\n\n/**\n * Run function with trace ID context\n */\nexport function runWithTraceId<T>(\n traceId: string,\n fn: () => T,\n data?: Record<string, any>\n): T {\n return traceStorage.run({ traceId, ...data }, fn);\n}\n\n/**\n * Extract trace ID from request using configuration\n */\nexport function extractTraceId(\n request: any,\n config: TraceIdExtractorConfig\n): string | undefined {\n // Try headers first\n if (config.header) {\n const headers = Array.isArray(config.header) ? config.header : [config.header];\n for (const header of headers) {\n const value = request.headers?.[header.toLowerCase()];\n if (value) {\n return Array.isArray(value) ? value[0] : value;\n }\n }\n }\n\n // Try query parameters\n if (config.query) {\n const queries = Array.isArray(config.query) ? config.query : [config.query];\n for (const query of queries) {\n const value = request.query?.[query];\n if (value) {\n return Array.isArray(value) ? value[0] : value;\n }\n }\n }\n\n // Try body parameters\n if (config.body) {\n const bodyFields = Array.isArray(config.body) ? config.body : [config.body];\n for (const field of bodyFields) {\n const value = request.body?.[field];\n if (value) {\n return value;\n }\n }\n }\n\n // Try route parameters\n if (config.params) {\n const paramFields = Array.isArray(config.params) ? config.params : [config.params];\n for (const param of paramFields) {\n const value = request.params?.[param];\n if (value) {\n return value;\n }\n }\n }\n\n return undefined;\n}\n\n/**\n * Create trace ID middleware for Express/NestJS\n */\nexport function createTraceMiddleware(config: TraceIdConfig) {\n return (req: any, res: any, next: any) => {\n let traceId: string | undefined;\n\n // Try to extract existing trace ID\n if (config.extractor) {\n traceId = extractTraceId(req, config.extractor);\n }\n\n // Generate new trace ID if not found\n if (!traceId) {\n traceId = config.generator ? config.generator() : generateTraceId();\n }\n\n // Set trace ID in request\n req.traceId = traceId;\n\n // Set response header\n res.setHeader('X-Trace-Id', traceId);\n\n // Run with trace context\n runWithTraceId(traceId, () => {\n next();\n }, { requestId: req.id || generateTraceId() });\n };\n}","/**\n * Error serialization utilities for Logitron\n */\n\nimport { ErrorSerializationOptions } from '../types';\n\n/**\n * Serialize error object to JSON-safe format\n */\nexport function serializeError(\n error: Error,\n options: ErrorSerializationOptions = {}\n): Record<string, any> {\n const {\n includeStack = true,\n maxDepth = 3,\n excludeFields = []\n } = options;\n\n const serialized: Record<string, any> = {\n name: error.name,\n message: error.message\n };\n\n // Add stack trace if requested\n if (includeStack && error.stack) {\n serialized.stack = error.stack;\n }\n\n // Add custom properties\n const errorKeys = Object.getOwnPropertyNames(error);\n for (const key of errorKeys) {\n if (\n key !== 'name' &&\n key !== 'message' &&\n key !== 'stack' &&\n !excludeFields.includes(key)\n ) {\n try {\n const value = (error as any)[key];\n serialized[key] = serializeValue(value, maxDepth);\n } catch {\n // Ignore properties that can't be serialized\n }\n }\n }\n\n return serialized;\n}\n\n/**\n * Recursively serialize values with depth limit\n */\nfunction serializeValue(value: any, maxDepth: number, currentDepth = 0): any {\n if (currentDepth >= maxDepth) {\n return '[Max Depth Reached]';\n }\n\n if (value === null || value === undefined) {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n if (value instanceof Date) {\n return value.toISOString();\n }\n\n if (value instanceof Error) {\n return serializeError(value, { maxDepth: maxDepth - currentDepth });\n }\n\n if (Array.isArray(value)) {\n return value.map(item => serializeValue(item, maxDepth, currentDepth + 1));\n }\n\n if (typeof value === 'object') {\n const serialized: Record<string, any> = {};\n for (const [key, val] of Object.entries(value)) {\n try {\n serialized[key] = serializeValue(val, maxDepth, currentDepth + 1);\n } catch {\n serialized[key] = '[Unserializable]';\n }\n }\n return serialized;\n }\n\n return String(value);\n}\n\n/**\n * Check if value is an Error instance\n */\nexport function isError(value: any): value is Error {\n return value instanceof Error || \n (value && typeof value === 'object' && 'name' in value && 'message' in value);\n}\n\n/**\n * Create error from various input types\n */\nexport function normalizeError(error: any): Error {\n if (isError(error)) {\n return error;\n }\n\n if (typeof error === 'string') {\n return new Error(error);\n }\n\n if (typeof error === 'object' && error !== null) {\n const err = new Error(error.message || 'Unknown error');\n Object.assign(err, error);\n return err;\n }\n\n return new Error(String(error));\n}","/**\n * Core Logitron Logger implementation\n */\n\nimport {\n ILogger,\n ILoggerDefault,\n LoggerConfig,\n LogLevel,\n LogLevelString,\n LogEntry,\n TimingEntry,\n ContextData,\n LoggerWithLevels\n} from '../types';\nimport { getCurrentTraceId, generateTraceId } from '../utils/trace.utils';\nimport { serializeError, isError, normalizeError } from '../utils/error.utils';\n\nexport class LogixiaLogger<TConfig extends LoggerConfig<any> = LoggerConfig> implements ILoggerDefault {\n [K: string]: any; // Allow dynamic custom level methods\n private config: TConfig;\n private context?: string;\n private timers: Map<string, TimingEntry> = new Map();\n private contextData: ContextData = {};\n\n constructor(config: TConfig, context?: string) {\n const defaultConfig: LoggerConfig = {\n appName: 'App',\n environment: 'development',\n traceId: true,\n format: {\n timestamp: true,\n colorize: true,\n json: false\n },\n silent: false,\n levelOptions: {\n level: LogLevel.INFO,\n levels: {\n [LogLevel.ERROR]: 0,\n [LogLevel.WARN]: 1,\n [LogLevel.INFO]: 2,\n [LogLevel.DEBUG]: 3,\n [LogLevel.TRACE]: 4,\n [LogLevel.VERBOSE]: 5\n },\n colors: {\n [LogLevel.ERROR]: 'red',\n [LogLevel.WARN]: 'yellow',\n [LogLevel.INFO]: 'blue',\n [LogLevel.DEBUG]: 'green',\n [LogLevel.TRACE]: 'gray',\n [LogLevel.VERBOSE]: 'cyan'\n }\n }\n };\n \n this.config = { ...defaultConfig, ...config };\n \n // Set default fields if not provided\n if (!this.config.fields) {\n this.config.fields = {\n timestamp: '[yyyy-mm-dd HH:MM:ss.MS]',\n level: '[log_level]',\n appName: '[app_name]',\n traceId: '[trace_id]',\n message: '[message]',\n payload: '[payload]',\n timeTaken: '[time_taken_MS]'\n };\n }\n \n this.context = context ?? '';\n \n // Create dynamic methods for custom levels\n this.createCustomLevelMethods();\n }\n\n /**\n * Create dynamic methods for custom levels\n */\n private createCustomLevelMethods(): void {\n if (this.config.levelOptions?.levels) {\n Object.keys(this.config.levelOptions.levels).forEach(levelName => {\n // Skip if method already exists (predefined levels)\n if (!(this as any)[levelName.toLowerCase()]) {\n (this as any)[levelName.toLowerCase()] = async (message: string, data?: Record<string, any>) => {\n await this.log(levelName.toLowerCase(), message, data);\n };\n }\n });\n }\n }\n\n /**\n * Error logging with overloads\n */\n async error(messageOrError: string | Error, data?: Record<string, any>): Promise<void> {\n if (isError(messageOrError)) {\n await this.log('error', messageOrError.message, {\n ...data,\n error: serializeError(messageOrError)\n });\n } else {\n await this.log('error', messageOrError, data);\n }\n }\n\n async warn(message: string, data?: Record<string, any>): Promise<void> {\n await this.log('warn', message, data);\n }\n\n async info(message: string, data?: Record<string, any>): Promise<void> {\n await this.log('info', message, data);\n }\n\n async debug(message: string, data?: Record<string, any>): Promise<void> {\n await this.log('debug', message, data);\n }\n\n async trace(message: string, data?: Record<string, any>): Promise<void> {\n await this.log('trace', message, data);\n }\n\n async verbose(message: string, data?: Record<string, any>): Promise<void> {\n await this.log('verbose', message, data);\n }\n\n /**\n * Log with custom level\n */\n async logLevel(level: string, message: string, data?: Record<string, any>): Promise<void> {\n await this.log(level, message, data);\n }\n\n /**\n * Timing methods\n */\n time(label: string): void {\n this.timers.set(label, {\n label,\n startTime: Date.now()\n });\n }\n\n async timeEnd(label: string): Promise<number | undefined> {\n const timer = this.timers.get(label);\n if (!timer) {\n await this.warn(`Timer '${label}' does not exist`);\n return undefined;\n }\n\n const endTime = Date.now();\n const duration = endTime - timer.startTime;\n \n timer.endTime = endTime;\n timer.duration = duration;\n \n await this.info(`Timer '${label}' finished`, {\n duration: `${duration}ms`,\n startTime: new Date(timer.startTime).toISOString(),\n endTime: new Date(endTime).toISOString()\n });\n \n this.timers.delete(label);\n return duration;\n }\n\n async timeAsync<T>(label: string, fn: () => Promise<T>): Promise<T> {\n this.time(label);\n try {\n const result = await fn();\n await this.timeEnd(label);\n return result;\n } catch (error) {\n await this.timeEnd(label);\n throw error;\n }\n }\n\n /**\n * Level and context management\n */\n setLevel(level: LogLevelString): void {\n this.config.levelOptions = this.config.levelOptions || {};\n this.config.levelOptions.level = level as string;\n }\n\n getLevel(): LogLevelString {\n return (this.config.levelOptions?.level as LogLevelString) || LogLevel.INFO;\n }\n\n setContext(context: string): void {\n this.context = context;\n }\n\n getContext(): string | undefined {\n return this.context;\n }\n\n /**\n * Create child logger\n */\n child(context: string, data?: Record<string, any>): ILogger {\n const childLogger = new LogixiaLogger(this.config, context);\n if (data) {\n childLogger.contextData = { ...this.contextData, ...data };\n }\n return childLogger;\n }\n\n /**\n * Close logger and cleanup resources\n */\n async close(): Promise<void> {\n // Log any remaining timers\n for (const [label, timer] of this.timers) {\n await this.warn(`Timer '${label}' was not ended properly`, {\n startTime: new Date(timer.startTime).toISOString(),\n duration: `${Date.now() - timer.startTime}ms (incomplete)`\n });\n }\n this.timers.clear();\n }\n\n /**\n * Core logging method\n */\n private async log(level: string, message: string, data?: Record<string, any>): Promise<void> {\n // Check if logging is disabled\n if (this.config.silent) {\n return;\n }\n\n // Check log level\n if (!this.shouldLog(level)) {\n return;\n }\n\n // Create log entry\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n level,\n appName: this.config.appName ?? 'App',\n message,\n ...(this.context && { context: this.context }),\n payload: { ...this.contextData, ...data }\n };\n\n // Add trace ID if enabled\n if (this.config.traceId) {\n entry.traceId = getCurrentTraceId() || generateTraceId();\n }\n\n // Format and output log\n const formattedLog = this.formatLog(entry);\n this.output(formattedLog, level);\n }\n\n /**\n * Format log entry according to configuration\n */\n private formatLog(entry: LogEntry): string {\n if (this.config.format?.json) {\n return JSON.stringify(entry);\n }\n\n // Build formatted string\n let formatted = '';\n\n // Timestamp\n if (this.config.format?.timestamp !== false) {\n const timestamp = new Date(entry.timestamp).toLocaleString();\n formatted += `[${timestamp}] `;\n }\n\n // Log level\n const levelName = entry.level;\n const coloredLevel = this.config.format?.colorize\n ? this.colorize(levelName.toUpperCase(), this.config.levelOptions?.colors?.[levelName] || 'white')\n : levelName.toUpperCase();\n formatted += `[${coloredLevel}] `;\n\n // App name\n formatted += `[${entry.appName}] `;\n\n // Trace ID\n if (entry.traceId) {\n formatted += `[${entry.traceId}] `;\n }\n\n // Context\n if (entry.context) {\n formatted += `[${entry.context}] `;\n }\n\n // Message\n formatted += entry.message;\n\n // Payload\n if (entry.payload && Object.keys(entry.payload).length > 0) {\n formatted += ` ${JSON.stringify(entry.payload)}`;\n }\n\n return formatted;\n }\n\n /**\n * Colorize text based on color name\n */\n private colorize(text: string, color: string): string {\n if (!this.config.format?.colorize) {\n return text;\n }\n\n const colors: Record<string, string> = {\n red: '\\x1b[31m',\n green: '\\x1b[32m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n magenta: '\\x1b[35m',\n cyan: '\\x1b[36m',\n white: '\\x1b[37m',\n gray: '\\x1b[90m',\n reset: '\\x1b[0m'\n };\n\n const colorCode = colors[color.toLowerCase()] || colors.white;\n return `${colorCode}${text}${colors.reset}`;\n }\n\n private shouldLog(level: string): boolean {\n const currentLevel = this.getLevel();\n \n // Create level map with custom levels\n const levelMap: Record<string, number> = {\n [LogLevel.ERROR]: 0,\n [LogLevel.WARN]: 1,\n [LogLevel.INFO]: 2,\n [LogLevel.DEBUG]: 3,\n [LogLevel.TRACE]: 4,\n [LogLevel.VERBOSE]: 5,\n ...(this.config.levelOptions?.levels || {})\n };\n\n const currentLevelValue = levelMap[currentLevel];\n const messageLevelValue = levelMap[level];\n\n return messageLevelValue !== undefined && currentLevelValue !== undefined && messageLevelValue <= currentLevelValue;\n }\n\n /**\n * Output log to console or other destinations\n */\n private output(message: string, level: string): void {\n switch (level) {\n case LogLevel.ERROR:\n console.error(message);\n break;\n case LogLevel.WARN:\n console.warn(message);\n break;\n case LogLevel.DEBUG:\n case LogLevel.TRACE:\n console.debug(message);\n break;\n default:\n console.log(message);\n }\n }\n}\n\n/**\n * Factory function to create a typed logger with custom levels\n */\nexport function createLogger<T extends LoggerConfig<any>>(config: T, context?: string): LoggerWithLevels<T> {\n const logger = new LogixiaLogger<T>(config, context) as any;\n \n // Add custom level methods dynamically\n if (config.levelOptions?.levels) {\n Object.keys(config.levelOptions.levels).forEach(levelName => {\n if (!logger[levelName]) {\n logger[levelName] = async (message: string, data?: Record<string, any>) => {\n await logger.log(levelName, message, data);\n };\n }\n });\n }\n \n return logger as LoggerWithLevels<T>;\n}","// Copy from https://github.com/microsoft/TypeScript/blob/d85767abfd83880cea17cea70f9913e9c4496dcc/src/compiler/factory/emitHelpers.ts#L744-L753\n\nfunction __decorateMetadata(k, v) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(k, v);\n};\n\n(module.exports = __decorateMetadata),\n (module.exports.__esModule = true),\n (module.exports[\"default\"] = module.exports);\n","// Copy from https://github.com/microsoft/TypeScript/blob/d85767abfd83880cea17cea70f9913e9c4496dcc/src/compiler/factory/emitHelpers.ts#L730-L742\n\nfunction __decorate(decorators, target, key, desc) {\n var c = arguments.length,\n r =\n c < 3\n ? target\n : desc === null\n ? (desc = Object.getOwnPropertyDescriptor(target, key))\n : desc,\n d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\")\n r = Reflect.decorate(decorators, target, key, desc);\n else\n for (var i = decorators.length - 1; i >= 0; i--)\n if ((d = decorators[i]))\n r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\n(module.exports = __decorate),\n (module.exports.__esModule = true),\n (module.exports[\"default\"] = module.exports);\n","/**\n * NestJS Service integration for Logitron Logger\n */\n\nimport { Injectable, LoggerService, Scope } from '@nestjs/common';\nimport { LogixiaLogger } from './logitron-logger';\nimport type { LoggerConfig } from '../types';\nimport { LogLevel, LogLevelString } from '../types';\nimport { getCurrentTraceId } from '../utils/trace.utils';\n\n@Injectable({ scope: Scope.TRANSIENT })\nexport class LogixiaLoggerService implements LoggerService {\n private logger: LogixiaLogger;\n private context?: string;\n\n constructor(config?: LoggerConfig) {\n const defaultConfig: LoggerConfig = {\n appName: 'NestJS-App',\n environment: 'development',\n traceId: true,\n format: {\n timestamp: true,\n colorize: true,\n json: false\n },\n silent: false,\n levelOptions: {\n level: LogLevel.INFO,\n levels: {\n error: 0,\n warn: 1,\n log: 2,\n debug: 3,\n verbose: 4\n },\n colors: {\n error: 'red',\n warn: 'yellow',\n log: 'green',\n debug: 'blue',\n verbose: 'cyan'\n }\n },\n fields: {\n timestamp: '[yyyy-mm-dd HH:MM:ss.MS]',\n level: '[log_level]',\n appName: '[app_name]',\n traceId: '[trace_id]',\n message: '[message]',\n payload: '[payload]',\n timeTaken: '[time_taken_MS]'\n }\n };\n\n this.logger = new LogixiaLogger({ ...defaultConfig, ...config });\n }\n\n /**\n * NestJS LoggerService interface implementation\n */\n log(message: any, context?: string): void {\n this.setContextIfProvided(context);\n this.logger.info(this.formatMessage(message)).catch(console.error);\n }\n\n error(message: any, trace?: string, context?: string): void {\n this.setContextIfProvided(context);\n const errorData: any = {};\n \n if (trace) {\n errorData.stack = trace;\n }\n \n if (typeof message === 'object' && message instanceof Error) {\n this.logger.error(message, errorData).catch(console.error);\n } else {\n this.logger.error(this.formatMessage(message), errorData).catch(console.error);\n }\n }\n\n warn(message: any, context?: string): void {\n this.setContextIfProvided(context);\n this.logger.warn(this.formatMessage(message)).catch(console.error);\n }\n\n debug(message: any, context?: string): void {\n this.setContextIfProvided(context);\n this.logger.debug(this.formatMessage(message)).catch(console.error);\n }\n\n verbose(message: any, context?: string): void {\n this.setContextIfProvided(context);\n this.logger.trace(this.formatMessage(message)).catch(console.error);\n }\n\n /**\n * Extended Logitron methods\n */\n async info(message: string, data?: Record<string, any>): Promise<void> {\n return this.logger.info(message, data);\n }\n\n async trace(message: string, data?: Record<string, any>): Promise<void> {\n return this.logger.trace(message, data);\n }\n\n logLevel(level: string, message: string, data?: Record<string, any>): Promise<void> {\n return this.logger.logLevel(level, message, data);\n }\n\n /**\n * Timing methods\n */\n time(label: string): void {\n this.logger.time(label);\n }\n\n async timeEnd(label: string): Promise<number | undefined> {\n return this.logger.timeEnd(label);\n }\n\n async timeAsync<T>(label: string, fn: () => Promise<T>): Promise<T> {\n return this.logger.timeAsync(label, fn);\n }\n\n /**\n * Context and level management\n */\n setContext(context: string): void {\n this.context = context;\n this.logger.setContext(context);\n }\n\n getContext(): string | undefined {\n return this.context;\n }\n\n setLevel(level: LogLevelString): void {\n this.logger.setLevel(level);\n }\n\n getLevel(): LogLevelString {\n return this.logger.getLevel();\n }\n\n /**\n * Create child logger\n */\n child(context: string, data?: Record<string, any>): LogixiaLoggerService {\n const childService = new LogixiaLoggerService();\n childService.logger = this.logger.child(context, data) as LogixiaLogger;\n childService.context = context;\n return childService;\n }\n\n /**\n * Get current trace ID\n */\n getCurrentTraceId(): string | undefined {\n return getCurrentTraceId();\n }\n\n /**\n * Close logger\n */\n async close(): Promise<void> {\n return this.logger.close();\n }\n\n /**\n * Private helper methods\n */\n private setContextIfProvided(context?: string): void {\n if (context && context !== this.context) {\n this.setContext(context);\n }\n }\n\n private formatMessage(message: any): string {\n if (typeof message === 'string') {\n return message;\n }\n \n if (typeof message === 'object') {\n return JSON.stringify(message);\n }\n \n return String(message);\n }\n\n /**\n * Static factory method for easy instantiation\n */\n static create(config?: LoggerConfig): LogixiaLoggerService {\n return new LogixiaLoggerService(config);\n }\n\n /**\n * Get the underlying Logitron logger instance\n */\n getLogger(): LogixiaLogger {\n return this.logger;\n }\n}","/**\n * Trace ID middleware for NestJS integration\n */\n\nimport { Injectable, NestMiddleware } from '@nestjs/common';\nimport { Request, Response, NextFunction } from 'express';\nimport {\n generateTraceId,\n extractTraceId,\n runWithTraceId,\n getCurrentTraceId\n} from '../utils/trace.utils';\nimport type { TraceIdConfig } from '../types';\n\n// Extend Express Request interface\ndeclare global {\n namespace Express {\n interface Request {\n traceId?: string;\n requestId?: string;\n }\n }\n}\n\n@Injectable()\nexport class TraceMiddleware implements NestMiddleware {\n constructor(private readonly config?: TraceIdConfig) {\n this.config = {\n enabled: true,\n generator: generateTraceId,\n contextKey: 'traceId',\n extractor: {\n header: ['x-trace-id', 'x-request-id', 'trace-id'],\n query: ['traceId', 'trace_id']\n },\n ...config\n };\n }\n\n use(req: Request, res: Response, next: NextFunction): void {\n if (!this.config?.enabled) {\n return next();\n }\n\n let traceId: string | undefined;\n\n // Try to extract existing trace ID\n if (this.config.extractor) {\n traceId = extractTraceId(req, this.config.extractor);\n }\n\n // Generate new trace ID if not found\n if (!traceId) {\n traceId = this.config.generator ? this.config.generator() : generateTraceId();\n }\n\n // Set trace ID in request\n req.traceId = traceId;\n req.requestId = req.requestId || generateTraceId();\n\n // Set response headers\n res.setHeader('X-Trace-Id', traceId);\n res.setHeader('X-Request-Id', req.requestId);\n\n // Run with trace context\n runWithTraceId(traceId, () => {\n next();\n }, { \n requestId: req.requestId,\n method: req.method,\n url: req.url,\n userAgent: req.get('User-Agent'),\n ip: req.ip || req.connection.remoteAddress\n });\n }\n}\n\n/**\n * Factory function to create trace middleware with configuration\n */\nexport function createTraceMiddleware(config?: TraceIdConfig): TraceMiddleware {\n return new TraceMiddleware(config);\n}\n\n/**\n * Functional middleware for Express-style usage\n */\nexport function traceMiddleware(config?: TraceIdConfig) {\n const traceConfig = {\n enabled: true,\n generator: generateTraceId,\n contextKey: 'traceId',\n extractor: {\n header: ['x-trace-id', 'x-request-id', 'trace-id'],\n query: ['traceId', 'trace_id']\n },\n ...config\n };\n\n return (req: Request, res: Response, next: NextFunction) => {\n if (!traceConfig.enabled) {\n return next();\n }\n\n let traceId: string | undefined;\n\n // Try to extract existing trace ID\n if (traceConfig.extractor) {\n traceId = extractTraceId(req, traceConfig.extractor);\n }\n\n // Generate new trace ID if not found\n if (!traceId) {\n traceId = traceConfig.generator ? traceConfig.generator() : generateTraceId();\n }\n\n // Set trace ID in request\n req.traceId = traceId;\n req.requestId = req.requestId || generateTraceId();\n\n // Set response headers\n res.setHeader('X-Trace-Id', traceId);\n res.setHeader('X-Request-Id', req.requestId);\n\n // Run with trace context\n runWithTraceId(traceId, () => {\n next();\n }, { \n requestId: req.requestId,\n method: req.method,\n url: req.url,\n userAgent: req.get('User-Agent'),\n ip: req.ip || req.connection.remoteAddress\n });\n };\n}","import { MiddlewareConsumer, Module, NestModule, RequestMethod, ModuleMetadata, Type, InjectionToken, OptionalFactoryDependency } from '@nestjs/common';\nimport { RouteInfo } from '@nestjs/common/interfaces/middleware/middleware-configuration.interface';\nimport { LoggerConfig, TraceIdConfig } from '../types';\nimport { LogixiaLoggerService } from './logitron-nestjs.service';\nimport { TraceMiddleware, traceMiddleware } from './trace.middleware';\nimport { NextFunction, Request, Response } from 'express';\n\nconst DEFAULT_ROUTES: RouteInfo[] = [{ path: '*', method: RequestMethod.ALL }];\n\n// Constants for provider tokens\nexport const LOGIXIA_LOGGER_CONFIG = 'LOGIXIA_LOGGER_CONFIG';\nexport const LOGIXIA_LOGGER_PREFIX = 'LOGIXIA_LOGGER_';\n\n// Export the service for external use\nexport { LogixiaLoggerService } from './logitron-nestjs.service';\n\n// Interface for module configuration\ninterface LogixiaModuleConfig {\n forRoutes?: RouteInfo[];\n exclude?: RouteInfo[];\n}\n\n// Interface for async configuration\nexport interface LogixiaAsyncOptions extends Pick<ModuleMetadata, 'imports'> {\n useExisting?: Type<LogixiaOptionsFactory>;\n useClass?: Type<LogixiaOptionsFactory>;\n useFactory?: (...args: any[]) => Promise<Partial<LoggerConfig>> | Partial<LoggerConfig>;\n inject?: Array<InjectionToken | OptionalFactoryDependency>;\n}\n\n// Interface for options factory\nexport interface LogixiaOptionsFactory {\n createLogixiaOptions(): Promise<Partial<LoggerConfig>> | Partial<LoggerConfig>;\n}\n\n/**\n * Logixia Logger Module for NestJS dependency injection\n */\n@Module({})\nexport class LogixiaLoggerModule implements NestModule {\n private config: LogixiaModuleConfig = {};\n private static loggerConfig: Partial<LoggerConfig> = {};\n\n configure(consumer: MiddlewareConsumer) {\n const { forRoutes = DEFAULT_ROUTES, exclude } = this.config;\n\n // Configure middleware with trace config\n const middlewareConfig = (req: Request, res: Response, next: NextFunction) => {\n let traceConfig: TraceIdConfig | undefined;\n \n if (typeof LogixiaLoggerModule.loggerConfig.traceId === 'object') {\n traceConfig = LogixiaLoggerModule.loggerConfig.traceId as TraceIdConfig;\n } else if (LogixiaLoggerModule.loggerConfig.traceId === true) {\n // Default configuration when traceId is simply true\n traceConfig = {\n enabled: true,\n contextKey: 'traceId',\n generator: () => {\n const timestamp = Date.now().toString(36);\n const random = Math.random().toString(36).substring(2, 8);\n return `${timestamp}-${random}`;\n }\n };\n } else {\n traceConfig = undefined;\n }\n \n const middleware = new TraceMiddleware(traceConfig);\n return middleware.use(req, res, next);\n };\n\n if (exclude) {\n consumer\n .apply(middlewareConfig)\n .exclude(...exclude)\n .forRoutes(...forRoutes);\n } else {\n consumer.apply(middlewareConfig).forRoutes(...forRoutes);\n }\n }\n\n /**\n * Configure the module with synchronous options\n */\n static forRoot(config?: Partial<LoggerConfig>) {\n // Store config for middleware access\n LogixiaLoggerModule.loggerConfig = config || {};\n \n return {\n module: LogixiaLoggerModule,\n providers: [\n {\n provide: LOGIXIA_LOGGER_CONFIG,\n useValue: config || {},\n },\n {\n provide: LogixiaLoggerService,\n useFactory: (loggerConfig: Partial<LoggerConfig>) => {\n const defaultConfig: LoggerConfig = {\n level: 'info',\n service: 'NestJSApp',\n environment: 'development',\n fields: {},\n formatters: ['text'],\n outputs: ['console'],\n levelOptions: {\n level: 'info', // INFO level\n levels: {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n verbose: 4\n },\n colors: {\n error: 'red',\n warn: 'yellow',\n info: 'green',\n debug: 'blue',\n verbose: 'cyan'\n }\n },\n ...loggerConfig\n };\n return new LogixiaLoggerService(defaultConfig);\n },\n inject: [LOGIXIA_LOGGER_CONFIG],\n },\n ],\n exports: [LogixiaLoggerService, LOGIXIA_LOGGER_CONFIG],\n global: true,\n };\n }\n\n /**\n * Configure the module with asynchronous options\n */\n static forRootAsync(options: LogixiaAsyncOptions) {\n return {\n module: LogixiaLoggerModule,\n imports: options.imports || [],\n providers: [\n ...this.createAsyncProviders(options),\n {\n provide: LogixiaLoggerService,\n useFactory: (loggerConfig: Partial<LoggerConfig>) => {\n const defaultConfig: LoggerConfig = {\n level: 'info',\n service: 'NestJSApp',\n environment: 'development',\n fields: {},\n formatters: ['text'],\n outputs: ['console'],\n levelOptions: {\n level: 'info', // INFO level\n levels: {\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n verbose: 4\n },\n colors: {\n error: 'red',\n warn: 'yellow',\n info: 'green',\n debug: 'blue',\n verbose: 'cyan'\n }\n },\n ...loggerConfig\n };\n // Store config for middleware access\n LogixiaLoggerModule.loggerConfig = defaultConfig;\n return new LogixiaLoggerService(defaultConfig);\n },\n inject: [LOGIXIA_LOGGER_CONFIG],\n },\n ],\n exports: [LogixiaLoggerService, LOGIXIA_LOGGER_CONFIG],\n global: true,\n };\n }\n\n /**\n * Create feature-specific logger instances\n */\n static forFeature(context: string) {\n const providerToken = `${LOGIXIA_LOGGER_PREFIX}${context.toUpperCase()}`;\n return {\n module: LogixiaLoggerModule,\n providers: [\n {\n provide: providerToken,\n useFactory: (baseLogger: LogixiaLoggerService) => {\n return baseLogger.child(context);\n },\n inject: [LogixiaLoggerService],\n },\n ],\n exports: [providerToken],\n };\n }\n\n private static createAsyncProviders(options: LogixiaAsyncOptions) {\n if (options.useExisting || options.useFactory) {\n return [this.createAsyncOptionsProvider(options)];\n }\n return [\n this.createAsyncOptionsProvider(options),\n {\n provide: options.useClass!,\n useClass: options.useClass!,\n },\n ];\n }\n\n private static createAsyncOptionsProvider(options: LogixiaAsyncOptions) {\n if (options.useFactory) {\n return {\n provide: LOGIXIA_LOGGER_CONFIG,\n useFactory: options.useFactory,\n inject: options.inject || [],\n };\n }\n return {\n provide: LOGIXIA_LOGGER_CONFIG,\n useFactory: async (optionsFactory: LogixiaOptionsFactory) =>\n await optionsFactory.createLogixiaOptions(),\n inject: [options.useExisting || options.useClass!],\n };\n }\n}","/**\n * JSON formatter for Logitron\n */\n\nimport { ILogFormatter, LogEntry, LogLevel } from '../types';\nimport { serializeError } from '../utils/error.utils';\n\nexport class JsonFormatter implements ILogFormatter {\n private includeTimestamp: boolean;\n private includeLevel: boolean;\n private includeAppName: boolean;\n private includeTraceId: boolean;\n private includeContext: boolean;\n private prettyPrint: boolean;\n\n constructor(options: {\n includeTimestamp?: boolean;\n includeLevel?: boolean;\n includeAppName?: boolean;\n includeTraceId?: boolean;\n includeContext?: boolean;\n prettyPrint?: boolean;\n } = {}) {\n this.includeTimestamp = options.includeTimestamp ?? true;\n this.includeLevel = options.includeLevel ?? true;\n this.includeAppName = options.includeAppName ?? true;\n this.includeTraceId = options.includeTraceId ?? true;\n this.includeContext = options.includeContext ?? true;\n this.prettyPrint = options.prettyPrint ?? false;\n }\n\n format(entry: LogEntry): string {\n const formatted: Record<string, any> = {};\n\n // Add timestamp\n if (this.includeTimestamp) {\n formatted.timestamp = entry.timestamp;\n }\n\n // Add log level\n if (this.includeLevel) {\n formatted.level = entry.level.toLowerCase();\n formatted.levelValue = entry.level;\n }\n\n // Add app name\n if (this.includeAppName) {\n formatted.appName = entry.appName;\n }\n\n // Add trace ID\n if (this.includeTraceId && entry.traceId) {\n formatted.traceId = entry.traceId;\n }\n\n // Add context\n if (this.includeContext && entry.context) {\n formatted.context = entry.context;\n }\n\n // Add message\n formatted.message = entry.message;\n\n // Add payload\n if (entry.payload && Object.keys(entry.payload).length > 0) {\n formatted.payload = this.serializePayload(entry.payload);\n }\n\n // Add error if present\n if (entry.error) {\n formatted.error = serializeError(entry.error);\n }\n\n // Add metadata\n formatted.meta = {\n pid: process.pid,\n hostname: process.env.HOSTNAME || 'unknown',\n version: process.version\n };\n\n return this.prettyPrint \n ? JSON.stringify(formatted, null, 2)\n : JSON.stringify(formatted);\n }\n\n private serializePayload(payload: Record<string, any>): Record<string, any> {\n const serialized: Record<string, any> = {};\n \n for (const [key, value] of Object.entries(payload)) {\n try {\n if (value instanceof Error) {\n serialized[key] = serializeError(value);\n } else if (value instanceof Date) {\n serialized[key] = value.toISOString();\n } else if (typeof value === 'function') {\n serialized[key] = '[Function]';\n } else if (typeof value === 'symbol') {\n serialized[key] = value.toString();\n } else if (value === undefined) {\n serialized[key] = null;\n } else {\n serialized[key] = value;\n }\n } catch {\n serialized[key] = '[Unserializable]';\n }\n }\n \n return serialized;\n }\n}","/**\n * Text formatter for Logitron\n */\n\nimport { ILogFormatter, LogEntry, LogLevel } from '../types';\n\nexport class TextFormatter implements ILogFormatter {\n private colorize: boolean;\n private includeTimestamp: boolean;\n private includeAppName: boolean;\n private includeTraceId: boolean;\n private includeContext: boolean;\n private timestampFormat: 'iso' | 'locale' | 'short';\n private colors: Record<string, string>;\n\n constructor(options: {\n colorize?: boolean;\n includeTimestamp?: boolean;\n includeAppName?: boolean;\n includeTraceId?: boolean;\n includeContext?: boolean;\n timestampFormat?: 'iso' | 'locale' | 'short';\n colors?: Record<string, string>;\n } = {}) {\n this.colorize = options.colorize ?? true;\n this.includeTimestamp = options.includeTimestamp ?? true;\n this.includeAppName = options.includeAppName ?? true;\n this.includeTraceId = options.includeTraceId ?? true;\n this.includeContext = options.includeContext ?? true;\n this.timestampFormat = options.timestampFormat ?? 'locale';\n this.colors = {\n error: '\\x1b[31m', // Red\n warn: '\\x1b[33m', // Yellow\n info: '\\x1b[32m', // Green\n debug: '\\x1b[34m', // Blue\n trace: '\\x1b[35m', // Magenta\n verbose: '\\x1b[36m', // Cyan\n reset: '\\x1b[0m', // Reset\n bold: '\\x1b[1m', // Bold\n dim: '\\x1b[2m', // Dim\n ...options.colors\n };\n }\n\n format(entry: LogEntry): string {\n const parts: string[] = [];\n\n // Add timestamp\n if (this.includeTimestamp) {\n const timestamp = this.formatTimestamp(entry.timestamp);\n parts.push(this.colorize ? `${this.colors.dim}${timestamp}${this.colors.reset}` : timestamp);\n }\n\n // Add log level\n const levelName = entry.level.toLowerCase();\n const levelColor = this.colors[levelName] || this.colors.reset;\n const formattedLevel = this.colorize \n ? `${levelColor}${this.colors.bold}${levelName.toUpperCase().padEnd(5)}${this.colors.reset}`\n : levelName.toUpperCase().padEnd(5);\n parts.push(`[${formattedLevel}]`);\n\n // Add app name\n if (this.includeAppName) {\n const appName = this.colorize \n ? `${this.colors.bold}${entry.appName}${this.colors.reset}`\n : entry.appName;\n parts.push(`[${appName}]`);\n }\n\n // Add trace ID\n if (this.includeTraceId && entry.traceId) {\n const traceId = this.colorize \n ? `${this.colors.dim}${entry.traceId}${this.colors.reset}`\n : entry.traceId;\n parts.push(`[${traceId}]`);\n }\n\n // Add context\n if (this.includeContext && entry.context) {\n const context = this.colorize \n ? `${this.colors.cyan}${entry.context}${this.colors.reset}`\n : entry.context;\n parts.push(`[${context}]`);\n }\n\n // Add message\n const message = this.colorize && entry.level === LogLevel.ERROR\n ? `${this.colors.error}${entry.message}${this.colors.reset}`\n : entry.message;\n parts.push(message);\n\n // Add payload\n if (entry.payload && Object.keys(entry.payload).length > 0) {\n const payload = this.formatPayload(entry.payload);\n if (payload) {\n parts.push(this.colorize ? `${this.colors.dim}${payload}${this.colors.reset}` : payload);\n }\n }\n\n return parts.join(' ');\n }\n\n private formatTimestamp(timestamp: string): string {\n const date = new Date(timestamp);\n \n switch (this.timestampFormat) {\n case 'iso':\n return date.toISOString();\n case 'short':\n return date.toLocaleTimeString();\n case 'locale':\n default:\n return date.toLocaleString();\n }\n }\n\n private formatPayload(payload: Record<string, any>): string {\n try {\n // Handle simple objects\n if (Object.keys(payload).length === 1) {\n const entry = Object.entries(payload)[0];\n if (entry) {\n const [key, value] = entry;\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return `${key}=${value}`;\n }\n }\n }\n\n // Handle multiple properties or complex objects\n const formatted = Object.entries(payload)\n .map(([key, value]) => {\n if (value === null || value === undefined) {\n return `${key}=${value}`;\n }\n if (typeof value === 'string') {\n return `${key}=\"${value}\"`;\n }\n if (typeof value === 'number' || typeof value === 'boolean') {\n return `${key}=${value}`;\n }\n if (value instanceof Date) {\n return `${key}=${value.toISOString()}`;\n }\n if (typeof value === 'object') {\n return `${key}=${JSON.stringify(value)}`;\n }\n return `${key}=${String(value)}`;\n })\n .join(' ');\n\n return formatted;\n } catch {\n return JSON.stringify(payload);\n }\n }\n\n /**\n * Create a formatter with preset configurations\n */\n static createSimple(): TextFormatter {\n return new TextFormatter({\n colorize: true,\n includeTimestamp: true,\n includeAppName: false,\n includeTraceId: false,\n includeContext: true,\n timestampFormat: 'short'\n });\n }\n\n static createDetailed(): TextFormatter {\n return new TextFormatter({\n colorize: true,\n includeTimestamp: true,\n includeAppName: true,\n includeTraceId: true,\n includeContext: true,\n timestampFormat: 'locale'\n });\n }\n\n static createMinimal(): TextFormatter {\n return new TextFormatter({\n colorize: false,\n includeTimestamp: false,\n includeAppName: false,\n includeTraceId: false,\n includeContext: false\n });\n }\n}","/**\n * Logitron - Advanced TypeScript Logger\n * \n * A comprehensive logging library with support for:\n * - Multiple output formats (console, file, JSON)\n * - Trace ID tracking\n * - Performance monitoring\n * - NestJS integration\n * - Customizable log levels and colors\n */\n\nimport { LogixiaLogger, createLogger as createLoggerFromCore } from './core/logitron-logger';\nimport { LogixiaLoggerService } from './core/logitron-nestjs.service';\nimport { LoggerConfig, LogLevel, LogColor, Environment } from './types';\n\n// Type exports\nexport * from './types';\nexport * from './core/logitron-nestjs.service';\nexport * from './core/logitron-logger.module';\nexport * from './formatters';\nexport * from './utils/trace.utils';\nexport * from './utils/error.utils';\n\n// Core exports\nexport { LogixiaLogger, LogixiaLoggerService, DEFAULT_CONFIG };\n\n/**\n * Default configuration for Logitron logger\n */\nconst DEFAULT_CONFIG = {\n appName: 'App',\n environment: 'development' as Environment,\n traceId: true,\n format: {\n timestamp: true,\n colorize: true,\n json: false,\n },\n silent: false,\n levelOptions: {\n level: LogLevel.INFO,\n levels: {\n [LogLevel.ERROR]: 0,\n [LogLevel.WARN]: 1,\n [LogLevel.INFO]: 2,\n [LogLevel.DEBUG]: 3,\n [LogLevel.TRACE]: 4,\n [LogLevel.VERBOSE]: 5,\n },\n colors: {\n [LogLevel.ERROR]: 'red',\n [LogLevel.WARN]: 'yellow',\n [LogLevel.INFO]: 'blue',\n [LogLevel.DEBUG]: 'green',\n [LogLevel.TRACE]: 'gray',\n [LogLevel.VERBOSE]: 'cyan',\n } as Record<string, LogColor>,\n },\n fields: {\n timestamp: true,\n level: true,\n appName: true,\n traceId: true,\n message: true,\n payload: true,\n timeTaken: true,\n },\n outputs: ['console'],\n};\n\n/**\n * Create a new Logitron logger instance with TypeScript support for custom levels\n * @param config - Logger configuration\n * @returns Typed logger instance\n */\nexport const createLogger = createLoggerFromCore;\n\n/**\n * Create a new Logitron logger service for NestJS\n * @param config - Logger configuration\n * @returns LogixiaLoggerService instance\n */\nexport function createLoggerService(config?: Partial<LoggerConfig>): LogixiaLoggerService {\n return new LogixiaLoggerService({ ...DEFAULT_CONFIG, ...config });\n}\n\n/**\n * Default logger instance\n */\nexport const logger = new LogixiaLogger(DEFAULT_CONFIG);\n\n/**\n * Export default configuration for reference\n */"],"x_google_ignoreList":[4,5],"mappings":"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"}