@virtualdisplay.io/client 3.7.0 â 4.0.0-alpha.10
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.md +106 -76
- package/LICENSE +1 -1
- package/README.md +322 -31
- package/dist/browser-CDLfpTNV.cjs +8 -0
- package/dist/browser-DxtIwHNu.js +1227 -0
- package/dist/chunk-BcutgqC9.cjs +1 -0
- package/dist/chunk-C_CI6nMA.js +13 -0
- package/dist/src/annotations/annotations.d.ts +20 -0
- package/dist/src/annotations/annotations.d.ts.map +1 -0
- package/dist/src/annotations/index.d.ts +2 -0
- package/dist/src/annotations/index.d.ts.map +1 -0
- package/dist/src/attributes/attribute.d.ts +38 -0
- package/dist/src/attributes/attribute.d.ts.map +1 -0
- package/dist/src/attributes/attributes.d.ts +43 -0
- package/dist/src/attributes/attributes.d.ts.map +1 -0
- package/dist/src/attributes/selections.d.ts +16 -0
- package/dist/src/attributes/selections.d.ts.map +1 -0
- package/dist/src/attributes/value.d.ts +13 -0
- package/dist/src/attributes/value.d.ts.map +1 -0
- package/dist/src/camera/camera.d.ts +40 -0
- package/dist/src/camera/camera.d.ts.map +1 -0
- package/dist/src/camera/index.d.ts +4 -0
- package/dist/src/camera/index.d.ts.map +1 -0
- package/dist/src/camera/position.d.ts +56 -0
- package/dist/src/camera/position.d.ts.map +1 -0
- package/dist/src/client/client.d.ts +51 -0
- package/dist/src/client/client.d.ts.map +1 -0
- package/dist/src/client/error.d.ts +26 -0
- package/dist/src/client/error.d.ts.map +1 -0
- package/dist/src/client/iframe-builder.d.ts +27 -0
- package/dist/src/client/iframe-builder.d.ts.map +1 -0
- package/dist/src/client/options.d.ts +19 -0
- package/dist/src/client/options.d.ts.map +1 -0
- package/dist/src/client/ready-state-tracker.d.ts +13 -0
- package/dist/src/client/ready-state-tracker.d.ts.map +1 -0
- package/dist/src/client/types.d.ts +19 -0
- package/dist/src/client/types.d.ts.map +1 -0
- package/dist/src/index.d.ts +12 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/snapshot/index.d.ts +3 -0
- package/dist/src/snapshot/index.d.ts.map +1 -0
- package/dist/src/snapshot/photo.d.ts +47 -0
- package/dist/src/snapshot/photo.d.ts.map +1 -0
- package/dist/src/snapshot/snapshot.d.ts +30 -0
- package/dist/src/snapshot/snapshot.d.ts.map +1 -0
- package/dist/src/ui/action-bar.d.ts +18 -0
- package/dist/src/ui/action-bar.d.ts.map +1 -0
- package/dist/src/ui/camera-controls.d.ts +8 -0
- package/dist/src/ui/camera-controls.d.ts.map +1 -0
- package/dist/src/ui/controls/attribute-group.d.ts +6 -0
- package/dist/src/ui/controls/attribute-group.d.ts.map +1 -0
- package/dist/src/ui/event-bus.d.ts +12 -0
- package/dist/src/ui/event-bus.d.ts.map +1 -0
- package/dist/src/ui/loading.d.ts +43 -0
- package/dist/src/ui/loading.d.ts.map +1 -0
- package/dist/src/ui/standard-interface.d.ts +42 -0
- package/dist/src/ui/standard-interface.d.ts.map +1 -0
- package/dist/src/ui/styles.d.ts +3 -0
- package/dist/src/ui/styles.d.ts.map +1 -0
- package/dist/src/utils/logger.d.ts +11 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/virtualdisplay.client.cjs.js +311 -8
- package/dist/virtualdisplay.client.es.js +2218 -8018
- package/dist/virtualdisplay.client.umd.js +318 -8
- package/package.json +15 -99
- package/README.npm.md +0 -78
- package/dist/index.d.ts +0 -821
- package/dist/virtualdisplay.client.cjs.js.map +0 -1
- package/dist/virtualdisplay.client.es.js.map +0 -1
- package/dist/virtualdisplay.client.umd.js.map +0 -1
- package/node_modules/@virtualdisplay-io/logger/CHANGELOG.md +0 -82
- package/node_modules/@virtualdisplay-io/logger/LICENSE +0 -21
- package/node_modules/@virtualdisplay-io/logger/README.md +0 -314
- package/node_modules/@virtualdisplay-io/logger/dist/index.d.ts +0 -167
- package/node_modules/@virtualdisplay-io/logger/dist/virtualdisplay.logger.cjs.js +0 -4
- package/node_modules/@virtualdisplay-io/logger/dist/virtualdisplay.logger.cjs.js.map +0 -1
- package/node_modules/@virtualdisplay-io/logger/dist/virtualdisplay.logger.es.js +0 -377
- package/node_modules/@virtualdisplay-io/logger/dist/virtualdisplay.logger.es.js.map +0 -1
- package/node_modules/@virtualdisplay-io/logger/package.json +0 -79
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"virtualdisplay.logger.cjs.js","sources":["../src/types.ts","../src/transports/console-transport.ts","../src/transports/memory-transport.ts","../src/logger.ts","../src/formatters/json-formatter.ts","../src/formatters/context-formatter.ts","../src/index.ts"],"sourcesContent":["export type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport type LogLevelValue = 0 | 1 | 2 | 3;\n\nexport interface LoggerOptions {\n prefix?: string;\n enabled?: boolean;\n level?: LogLevel;\n timestamp?: boolean;\n colors?: boolean;\n context?: Record<string, unknown>;\n transports?: LogTransport[];\n formatters?: LogFormatter[];\n}\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n context?: Record<string, unknown>;\n args?: unknown[];\n prefix?: string;\n}\n\nexport interface LogTransport {\n name: string;\n log(entry: LogEntry): void | Promise<void>;\n}\n\nexport interface LogFormatter {\n name: string;\n format(entry: LogEntry): LogEntry;\n}\n\nexport interface Logger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n child(options?: Partial<LoggerOptions>): Logger;\n setLevel(level: LogLevel): void;\n getLevel(): LogLevel;\n isEnabled(): boolean;\n setEnabled(enabled: boolean): void;\n addTransport(transport: LogTransport): void;\n removeTransport(name: string): void;\n addFormatter(formatter: LogFormatter): void;\n removeFormatter(name: string): void;\n}\n\nexport const LOG_LEVELS: Record<LogLevel, LogLevelValue> = Object.freeze({\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n} as const);\n\nexport const LOG_LEVEL_NAMES: Record<LogLevelValue, LogLevel> = Object.freeze({\n 0: 'debug',\n 1: 'info',\n 2: 'warn',\n 3: 'error',\n} as const);\n","import type { LogTransport, LogEntry, LogLevel } from '../types';\n\nexport interface ConsoleTransportOptions {\n colors?: boolean;\n timestamp?: boolean;\n}\n\nexport class ConsoleTransport implements LogTransport {\n public readonly name = 'console';\n\n private readonly colorMap: Record<LogLevel, string> = {\n info: 'color: #007bff;', // Blue (exactly like server logger)\n warn: 'color: #ffc107;', // Yellow\n error: 'color: #dc3545;', // Red\n debug: 'color: #28a745;', // Green\n };\n\n private readonly emojiMap: Record<LogLevel, string> = {\n info: 'đ',\n warn: 'â ī¸',\n error: 'â',\n debug: 'đ',\n };\n\n constructor(_options: ConsoleTransportOptions = {}) {\n // Options available for future use\n }\n\n public log(entry: LogEntry): void {\n const logOrigin = this.createStackTrace();\n const emoji = this.emojiMap[entry.level];\n const color = this.colorMap[entry.level];\n const formattedMessage = entry.prefix\n ? `%c[${entry.prefix}] ${emoji} ${entry.message}`\n : `%c${emoji} ${entry.message}`;\n const styles = [color];\n\n // Robust console logging with fallbacks (exactly like server logger)\n try {\n if (this.supportsGroupedLogging()) {\n // Type-safe access to console methods\n const consoleWithGrouping = console as Console & {\n groupCollapsed: (message: string, ...styles: string[]) => void;\n groupEnd: () => void;\n };\n consoleWithGrouping.groupCollapsed(formattedMessage, ...styles);\n const method = this.getConsoleMethod(entry.level);\n method(`Origin: ${logOrigin}`);\n method('Arguments: ', ...(entry.args ?? []));\n consoleWithGrouping.groupEnd();\n } else {\n // Fallback to simple logging with specific method routing\n const simpleMessage = entry.prefix\n ? `[${entry.prefix}] ${emoji} ${entry.message}`\n : `${emoji} ${entry.message}`;\n const method = this.getConsoleMethod(entry.level);\n method(simpleMessage, ...(entry.args ?? []));\n }\n } catch {\n // Ultimate fallback - basic console.log only\n try {\n const ultimateMessage = entry.prefix\n ? `[${entry.prefix}] ${entry.level.toUpperCase()}: ${entry.message}`\n : `${entry.level.toUpperCase()}: ${entry.message}`;\n console.log(ultimateMessage, ...(entry.args ?? []));\n } catch {\n // Silently fail if even console.log doesn't work\n }\n }\n }\n\n private createStackTrace(): string {\n const stack = new Error().stack;\n if (!stack) {\n return 'unknown location';\n }\n\n const stackLines = stack.split('\\n');\n const callerLine = stackLines.find(\n line =>\n !line.includes('console-transport.ts') && !line.includes('logger.ts') && line.includes('at')\n );\n\n return callerLine ? callerLine.trim().replace(/^at\\s+/, '') : 'unknown location';\n }\n\n private getConsoleMethod(level: LogLevel): (...args: unknown[]) => void {\n // Map log levels to console methods (same as server logger)\n switch (level) {\n case 'debug':\n return console.log; // Debug uses console.log like server logger\n case 'info':\n return console.info;\n case 'warn':\n return console.warn;\n case 'error':\n return console.error;\n default:\n return console.log;\n }\n }\n\n private supportsGroupedLogging(): boolean {\n try {\n // Disable grouped logging in test environments for simpler testing\n if (this.isTestEnvironment()) {\n return false;\n }\n return typeof console.groupCollapsed === 'function' && typeof console.groupEnd === 'function';\n } catch {\n return false;\n }\n }\n\n private isTestEnvironment(): boolean {\n // Check for common test runners\n if (typeof window !== 'undefined') {\n // Web Test Runner\n if ((window as unknown as { __WTR_CONFIG__?: unknown }).__WTR_CONFIG__ !== undefined) {\n return true;\n }\n // Karma\n if ((window as unknown as { __karma__?: unknown }).__karma__ !== undefined) {\n return true;\n }\n }\n\n // Node.js test environments\n if (typeof process !== 'undefined' && process.env) {\n return (\n process.env.NODE_ENV === 'test' ||\n process.env.JEST_WORKER_ID !== undefined ||\n process.env.VITEST === 'true'\n );\n }\n\n return false;\n }\n}\n","import type { LogTransport, LogEntry } from '../types';\n\nexport interface MemoryTransportOptions {\n maxSize?: number;\n}\n\nexport class MemoryTransport implements LogTransport {\n public readonly name = 'memory';\n private readonly logs: LogEntry[] = [];\n private readonly maxSize: number;\n\n constructor(options: MemoryTransportOptions = {}) {\n this.maxSize = options.maxSize ?? 1000;\n }\n\n public log(entry: LogEntry): void {\n this.logs.push({ ...entry });\n\n // Keep only the last maxSize entries\n if (this.logs.length > this.maxSize) {\n this.logs.shift();\n }\n }\n\n public getLogs(): ReadonlyArray<LogEntry> {\n return [...this.logs];\n }\n\n public clear(): void {\n this.logs.length = 0;\n }\n\n public getLogsByLevel(level: LogEntry['level']): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.level === level);\n }\n\n public getLogsAfter(timestamp: Date): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.timestamp > timestamp);\n }\n\n public getLogsBefore(timestamp: Date): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.timestamp < timestamp);\n }\n\n public getLogsBetween(start: Date, end: Date): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.timestamp >= start && log.timestamp <= end);\n }\n\n public search(query: string | RegExp): ReadonlyArray<LogEntry> {\n const regex = typeof query === 'string' ? new RegExp(query, 'i') : query;\n return this.logs.filter(log => regex.test(log.message));\n }\n\n public toJSON(): string {\n return JSON.stringify(this.logs, null, 2);\n }\n\n public toCSV(): string {\n const headers = ['timestamp', 'level', 'prefix', 'message', 'context'];\n const rows = this.logs.map(log => [\n log.timestamp.toISOString(),\n log.level,\n log.prefix ?? '',\n log.message,\n JSON.stringify(log.context ?? {}),\n ]);\n\n return [headers.join(','), ...rows.map(row => row.map(cell => `\"${cell}\"`).join(','))].join(\n '\\n'\n );\n }\n}\n","import type {\n Logger as ILogger,\n LoggerOptions,\n LogLevel,\n LogEntry,\n LogTransport,\n LogFormatter,\n} from './types';\nimport { LOG_LEVELS } from './types';\nimport { ConsoleTransport } from './transports';\n\nexport class Logger implements ILogger {\n private static instance: Logger | undefined;\n private static mute = false;\n\n private readonly prefix?: string;\n private enabled: boolean;\n private level: LogLevel;\n private readonly context: Record<string, unknown>;\n private readonly transports: Map<string, LogTransport>;\n private readonly formatters: Map<string, LogFormatter>;\n private readonly isRoot: boolean;\n\n constructor(options: LoggerOptions = {}, isRoot = true) {\n this.prefix = options.prefix;\n this.enabled = options.enabled ?? true;\n this.level = options.level ?? 'info';\n this.context = options.context ?? {};\n this.transports = new Map();\n this.formatters = new Map();\n this.isRoot = isRoot;\n\n // Initialize default transport for root logger (simplified like server logger)\n if (this.isRoot) {\n const consoleTransport = new ConsoleTransport({\n colors: options.colors ?? true,\n timestamp: options.timestamp ?? false,\n });\n this.addTransport(consoleTransport);\n }\n\n // Add custom transports and formatters\n options.transports?.forEach(transport => this.addTransport(transport));\n options.formatters?.forEach(formatter => this.addFormatter(formatter));\n }\n\n public static getInstance(options?: LoggerOptions): Logger {\n Logger.instance ??= new Logger(options);\n return Logger.instance;\n }\n\n public static setMute(mute: boolean): void {\n Logger.mute = mute;\n }\n\n public static isMuted(): boolean {\n return Logger.mute;\n }\n\n // Global debug commands - accessible as logger.exportLogs()\n public static exportLogs(): string {\n return Logger.getInstance().exportLogs();\n }\n\n public static exportLogsCSV(): string {\n return Logger.getInstance().exportLogsCSV();\n }\n\n public static getRecentErrors(minutes?: number): LogEntry[] {\n return Logger.getInstance().getRecentErrors(minutes);\n }\n\n public static searchLogs(query: string | RegExp): LogEntry[] {\n return Logger.getInstance().searchLogs(query);\n }\n\n public static clearLogs(): void {\n Logger.getInstance().clearLogs();\n }\n\n public static enableMemoryLogging(maxSize?: number): Promise<void> {\n return Logger.getInstance().enableMemoryLogging(maxSize);\n }\n\n public debug(message: string, ...args: unknown[]): void {\n this.log('debug', message, ...args);\n }\n\n public info(message: string, ...args: unknown[]): void {\n this.log('info', message, ...args);\n }\n\n public warn(message: string, ...args: unknown[]): void {\n this.log('warn', message, ...args);\n }\n\n public error(message: string, ...args: unknown[]): void {\n this.log('error', message, ...args);\n }\n\n public child(options: Partial<LoggerOptions> = {}): Logger {\n const childOptions: LoggerOptions = {\n prefix: options.prefix ?? this.prefix,\n enabled: options.enabled ?? this.enabled,\n level: options.level ?? this.level,\n context: { ...this.context, ...options.context },\n transports: Array.from(this.transports.values()),\n formatters: Array.from(this.formatters.values()),\n };\n\n return new Logger(childOptions, false);\n }\n\n public setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n public getLevel(): LogLevel {\n return this.level;\n }\n\n public isEnabled(): boolean {\n return this.enabled && !Logger.mute;\n }\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n public addTransport(transport: LogTransport): void {\n this.transports.set(transport.name, transport);\n }\n\n public removeTransport(name: string): void {\n this.transports.delete(name);\n }\n\n public addFormatter(formatter: LogFormatter): void {\n this.formatters.set(formatter.name, formatter);\n }\n\n public removeFormatter(name: string): void {\n this.formatters.delete(name);\n }\n\n public getTransport(name: string): LogTransport | undefined {\n return this.transports.get(name);\n }\n\n public getFormatter(name: string): LogFormatter | undefined {\n return this.formatters.get(name);\n }\n\n // Debug/Developer Commands - accessible via console\n public exportLogs(): string {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return JSON.stringify({ error: 'No memory transport found. Logs are not being stored.' });\n }\n return memoryTransport.toJSON();\n }\n\n public exportLogsCSV(): string {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return 'Error: No memory transport found. Logs are not being stored.';\n }\n return memoryTransport.toCSV();\n }\n\n public getRecentErrors(minutes = 30): LogEntry[] {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return [];\n }\n const since = new Date(Date.now() - minutes * 60 * 1000);\n return [...memoryTransport.getLogsAfter(since).filter(log => log.level === 'error')];\n }\n\n public searchLogs(query: string | RegExp): LogEntry[] {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return [];\n }\n return [...memoryTransport.search(query)];\n }\n\n public clearLogs(): void {\n const memoryTransport = this.getMemoryTransport();\n if (memoryTransport) {\n memoryTransport.clear();\n console.log('đī¸ Logger memory cleared');\n } else {\n console.log('âšī¸ No memory transport found to clear');\n }\n }\n\n public enableMemoryLogging(maxSize = 1000): Promise<void> {\n // Import dynamically to avoid circular dependency\n return import('./transports').then(({ MemoryTransport }) => {\n const memoryTransport = new MemoryTransport({ maxSize });\n this.addTransport(memoryTransport);\n console.log(`đ Memory logging enabled (max ${maxSize} entries)`);\n console.log('đĄ Use logger.exportLogs() to get logs as JSON');\n console.log('đĄ Use logger.exportLogsCSV() to get logs as CSV');\n console.log('đĄ Use logger.getRecentErrors() to get recent errors');\n console.log('đĄ Use logger.clearLogs() to clear stored logs');\n });\n }\n\n private getMemoryTransport(): import('./transports').MemoryTransport | undefined {\n return this.transports.get('memory') as import('./transports').MemoryTransport | undefined;\n }\n\n private log(level: LogLevel, message: string, ...args: unknown[]): void {\n if (!this.shouldLog(level)) {\n return;\n }\n\n let entry: LogEntry = {\n level,\n message,\n timestamp: new Date(),\n context: this.context,\n args,\n prefix: this.prefix,\n };\n\n // Apply formatters\n for (const formatter of this.formatters.values()) {\n entry = formatter.format(entry);\n }\n\n // Send to transports\n for (const transport of this.transports.values()) {\n try {\n void transport.log(entry);\n } catch (error) {\n // Avoid infinite loop if transport fails\n if (this.isRoot) {\n console.error('Logger transport error:', error);\n }\n }\n }\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (!this.isEnabled()) {\n return false;\n }\n\n // Simple log level check - if enabled, follow the configured level\n const currentLevelValue = LOG_LEVELS[this.level];\n const messageLevelValue = LOG_LEVELS[level];\n return messageLevelValue >= currentLevelValue;\n }\n}\n","import type { LogFormatter, LogEntry } from '../types';\n\nexport class JSONFormatter implements LogFormatter {\n public readonly name = 'json';\n private seen = new WeakSet();\n\n public format(entry: LogEntry): LogEntry {\n // Reset seen set for each format call\n this.seen = new WeakSet();\n // Create a clean JSON-serializable object\n const jsonEntry = {\n ...entry,\n timestamp: entry.timestamp.toISOString(),\n message: this.sanitizeMessage(entry.message),\n };\n\n // Ensure all values are JSON-serializable\n if (entry.context) {\n jsonEntry.context = this.sanitizeObject(entry.context);\n }\n\n if (entry.args) {\n jsonEntry.args = entry.args.map(arg => this.sanitizeValue(arg));\n }\n\n return {\n ...entry,\n message: JSON.stringify(jsonEntry),\n };\n }\n\n private sanitizeMessage(message: string): string {\n // Remove any ANSI color codes\n return message.replace(/\\x1b\\[[0-9;]*m/g, '');\n }\n\n private sanitizeValue(value: unknown): unknown {\n if (value === undefined) return null;\n if (value === null) return null;\n if (typeof value === 'function') return '[Function]';\n if (typeof value === 'symbol') return value.toString();\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n if (typeof value === 'object') {\n return this.sanitizeObject(value as Record<string, unknown>);\n }\n return value;\n }\n\n private sanitizeObject(obj: Record<string, unknown>): Record<string, unknown> {\n // Check for circular references\n if (this.seen.has(obj)) {\n return { '[Circular]': true };\n }\n this.seen.add(obj);\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n try {\n result[key] = this.sanitizeValue(value);\n } catch {\n result[key] = '[Unserializable]';\n }\n }\n\n return result;\n }\n}\n","import type { LogFormatter, LogEntry } from '../types';\n\nexport interface ContextFormatterOptions {\n includeContext?: boolean;\n contextPrefix?: string;\n}\n\nexport class ContextFormatter implements LogFormatter {\n public readonly name = 'context';\n private readonly includeContext: boolean;\n private readonly contextPrefix: string;\n\n constructor(options: ContextFormatterOptions = {}) {\n this.includeContext = options.includeContext ?? true;\n this.contextPrefix = options.contextPrefix ?? ' ';\n }\n\n public format(entry: LogEntry): LogEntry {\n if (!this.includeContext || !entry.context || Object.keys(entry.context).length === 0) {\n return entry;\n }\n\n const contextStr = this.formatContext(entry.context);\n return {\n ...entry,\n message: `${entry.message}${this.contextPrefix}${contextStr}`,\n };\n }\n\n private formatContext(context: Record<string, unknown>): string {\n const pairs = Object.entries(context)\n .map(([key, value]) => `${key}=${this.formatValue(value)}`)\n .join(' ');\n\n return `{${pairs}}`;\n }\n\n private formatValue(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return `\"${value}\"`;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (value instanceof Date) return value.toISOString();\n if (value instanceof Error) return `Error(${value.message})`;\n if (Array.isArray(value)) return `[${value.length}]`;\n if (typeof value === 'object') return '{...}';\n return JSON.stringify(value) ?? 'unknown';\n }\n}\n","export { Logger } from './logger';\nexport type {\n LogLevel,\n LogLevelValue,\n LoggerOptions,\n LogEntry,\n LogTransport,\n LogFormatter,\n Logger as ILogger,\n} from './types';\nexport { LOG_LEVELS, LOG_LEVEL_NAMES } from './types';\n\n// Export transports\nexport { ConsoleTransport, MemoryTransport } from './transports';\nexport type { ConsoleTransportOptions, MemoryTransportOptions } from './transports';\n\n// Export formatters\nexport { JSONFormatter, ContextFormatter } from './formatters';\nexport type { ContextFormatterOptions } from './formatters';\n\n// Create and export default logger instance\nimport { Logger } from './logger';\n\n// Create default logger instance without prefix for neutral library use\n// Users can create their own logger instances with their own prefix if needed\nexport const logger = Logger.getInstance();\n\n// Only export debug commands that developers might use from console\n// These are accessed via the logger instance: logger.exportLogs(), etc.\nexport const enableMemoryLogging = Logger.enableMemoryLogging.bind(Logger);\n"],"names":["LOG_LEVELS","LOG_LEVEL_NAMES","ConsoleTransport","_options","entry","logOrigin","emoji","color","formattedMessage","styles","consoleWithGrouping","method","simpleMessage","ultimateMessage","stack","callerLine","line","level","MemoryTransport","options","log","timestamp","start","end","query","regex","headers","rows","row","cell","Logger","isRoot","consoleTransport","transport","formatter","mute","minutes","maxSize","message","args","childOptions","enabled","name","memoryTransport","since","error","currentLevelValue","JSONFormatter","jsonEntry","arg","value","obj","result","key","ContextFormatter","contextStr","context","logger","enableMemoryLogging"],"mappings":"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"}
|
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
const g = Object.freeze({
|
|
2
|
-
debug: 0,
|
|
3
|
-
info: 1,
|
|
4
|
-
warn: 2,
|
|
5
|
-
error: 3
|
|
6
|
-
}), p = Object.freeze({
|
|
7
|
-
0: "debug",
|
|
8
|
-
1: "info",
|
|
9
|
-
2: "warn",
|
|
10
|
-
3: "error"
|
|
11
|
-
});
|
|
12
|
-
class f {
|
|
13
|
-
name = "console";
|
|
14
|
-
colorMap = {
|
|
15
|
-
info: "color: #007bff;",
|
|
16
|
-
// Blue (exactly like server logger)
|
|
17
|
-
warn: "color: #ffc107;",
|
|
18
|
-
// Yellow
|
|
19
|
-
error: "color: #dc3545;",
|
|
20
|
-
// Red
|
|
21
|
-
debug: "color: #28a745;"
|
|
22
|
-
// Green
|
|
23
|
-
};
|
|
24
|
-
emojiMap = {
|
|
25
|
-
info: "đ",
|
|
26
|
-
warn: "â ī¸",
|
|
27
|
-
error: "â",
|
|
28
|
-
debug: "đ"
|
|
29
|
-
};
|
|
30
|
-
constructor(e = {}) {
|
|
31
|
-
}
|
|
32
|
-
log(e) {
|
|
33
|
-
const t = this.createStackTrace(), r = this.emojiMap[e.level], s = this.colorMap[e.level], i = e.prefix ? `%c[${e.prefix}] ${r} ${e.message}` : `%c${r} ${e.message}`, c = [s];
|
|
34
|
-
try {
|
|
35
|
-
if (this.supportsGroupedLogging()) {
|
|
36
|
-
const n = console;
|
|
37
|
-
n.groupCollapsed(i, ...c);
|
|
38
|
-
const l = this.getConsoleMethod(e.level);
|
|
39
|
-
l(`Origin: ${t}`), l("Arguments: ", ...e.args ?? []), n.groupEnd();
|
|
40
|
-
} else {
|
|
41
|
-
const n = e.prefix ? `[${e.prefix}] ${r} ${e.message}` : `${r} ${e.message}`;
|
|
42
|
-
this.getConsoleMethod(e.level)(n, ...e.args ?? []);
|
|
43
|
-
}
|
|
44
|
-
} catch {
|
|
45
|
-
try {
|
|
46
|
-
const n = e.prefix ? `[${e.prefix}] ${e.level.toUpperCase()}: ${e.message}` : `${e.level.toUpperCase()}: ${e.message}`;
|
|
47
|
-
console.log(n, ...e.args ?? []);
|
|
48
|
-
} catch {
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
createStackTrace() {
|
|
53
|
-
const e = new Error().stack;
|
|
54
|
-
if (!e)
|
|
55
|
-
return "unknown location";
|
|
56
|
-
const r = e.split(`
|
|
57
|
-
`).find(
|
|
58
|
-
(s) => !s.includes("console-transport.ts") && !s.includes("logger.ts") && s.includes("at")
|
|
59
|
-
);
|
|
60
|
-
return r ? r.trim().replace(/^at\s+/, "") : "unknown location";
|
|
61
|
-
}
|
|
62
|
-
getConsoleMethod(e) {
|
|
63
|
-
switch (e) {
|
|
64
|
-
case "debug":
|
|
65
|
-
return console.log;
|
|
66
|
-
// Debug uses console.log like server logger
|
|
67
|
-
case "info":
|
|
68
|
-
return console.info;
|
|
69
|
-
case "warn":
|
|
70
|
-
return console.warn;
|
|
71
|
-
case "error":
|
|
72
|
-
return console.error;
|
|
73
|
-
default:
|
|
74
|
-
return console.log;
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
supportsGroupedLogging() {
|
|
78
|
-
try {
|
|
79
|
-
return this.isTestEnvironment() ? !1 : typeof console.groupCollapsed == "function" && typeof console.groupEnd == "function";
|
|
80
|
-
} catch {
|
|
81
|
-
return !1;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
isTestEnvironment() {
|
|
85
|
-
return typeof window < "u" && (window.__WTR_CONFIG__ !== void 0 || window.__karma__ !== void 0) ? !0 : typeof process < "u" && process.env ? process.env.NODE_ENV === "test" || process.env.JEST_WORKER_ID !== void 0 || process.env.VITEST === "true" : !1;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
class m {
|
|
89
|
-
name = "memory";
|
|
90
|
-
logs = [];
|
|
91
|
-
maxSize;
|
|
92
|
-
constructor(e = {}) {
|
|
93
|
-
this.maxSize = e.maxSize ?? 1e3;
|
|
94
|
-
}
|
|
95
|
-
log(e) {
|
|
96
|
-
this.logs.push({ ...e }), this.logs.length > this.maxSize && this.logs.shift();
|
|
97
|
-
}
|
|
98
|
-
getLogs() {
|
|
99
|
-
return [...this.logs];
|
|
100
|
-
}
|
|
101
|
-
clear() {
|
|
102
|
-
this.logs.length = 0;
|
|
103
|
-
}
|
|
104
|
-
getLogsByLevel(e) {
|
|
105
|
-
return this.logs.filter((t) => t.level === e);
|
|
106
|
-
}
|
|
107
|
-
getLogsAfter(e) {
|
|
108
|
-
return this.logs.filter((t) => t.timestamp > e);
|
|
109
|
-
}
|
|
110
|
-
getLogsBefore(e) {
|
|
111
|
-
return this.logs.filter((t) => t.timestamp < e);
|
|
112
|
-
}
|
|
113
|
-
getLogsBetween(e, t) {
|
|
114
|
-
return this.logs.filter((r) => r.timestamp >= e && r.timestamp <= t);
|
|
115
|
-
}
|
|
116
|
-
search(e) {
|
|
117
|
-
const t = typeof e == "string" ? new RegExp(e, "i") : e;
|
|
118
|
-
return this.logs.filter((r) => t.test(r.message));
|
|
119
|
-
}
|
|
120
|
-
toJSON() {
|
|
121
|
-
return JSON.stringify(this.logs, null, 2);
|
|
122
|
-
}
|
|
123
|
-
toCSV() {
|
|
124
|
-
const e = ["timestamp", "level", "prefix", "message", "context"], t = this.logs.map((r) => [
|
|
125
|
-
r.timestamp.toISOString(),
|
|
126
|
-
r.level,
|
|
127
|
-
r.prefix ?? "",
|
|
128
|
-
r.message,
|
|
129
|
-
JSON.stringify(r.context ?? {})
|
|
130
|
-
]);
|
|
131
|
-
return [e.join(","), ...t.map((r) => r.map((s) => `"${s}"`).join(","))].join(
|
|
132
|
-
`
|
|
133
|
-
`
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
const u = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
138
|
-
__proto__: null,
|
|
139
|
-
ConsoleTransport: f,
|
|
140
|
-
MemoryTransport: m
|
|
141
|
-
}, Symbol.toStringTag, { value: "Module" }));
|
|
142
|
-
class o {
|
|
143
|
-
static instance;
|
|
144
|
-
static mute = !1;
|
|
145
|
-
prefix;
|
|
146
|
-
enabled;
|
|
147
|
-
level;
|
|
148
|
-
context;
|
|
149
|
-
transports;
|
|
150
|
-
formatters;
|
|
151
|
-
isRoot;
|
|
152
|
-
constructor(e = {}, t = !0) {
|
|
153
|
-
if (this.prefix = e.prefix, this.enabled = e.enabled ?? !0, this.level = e.level ?? "info", this.context = e.context ?? {}, this.transports = /* @__PURE__ */ new Map(), this.formatters = /* @__PURE__ */ new Map(), this.isRoot = t, this.isRoot) {
|
|
154
|
-
const r = new f({
|
|
155
|
-
colors: e.colors ?? !0,
|
|
156
|
-
timestamp: e.timestamp ?? !1
|
|
157
|
-
});
|
|
158
|
-
this.addTransport(r);
|
|
159
|
-
}
|
|
160
|
-
e.transports?.forEach((r) => this.addTransport(r)), e.formatters?.forEach((r) => this.addFormatter(r));
|
|
161
|
-
}
|
|
162
|
-
static getInstance(e) {
|
|
163
|
-
return o.instance ??= new o(e), o.instance;
|
|
164
|
-
}
|
|
165
|
-
static setMute(e) {
|
|
166
|
-
o.mute = e;
|
|
167
|
-
}
|
|
168
|
-
static isMuted() {
|
|
169
|
-
return o.mute;
|
|
170
|
-
}
|
|
171
|
-
// Global debug commands - accessible as logger.exportLogs()
|
|
172
|
-
static exportLogs() {
|
|
173
|
-
return o.getInstance().exportLogs();
|
|
174
|
-
}
|
|
175
|
-
static exportLogsCSV() {
|
|
176
|
-
return o.getInstance().exportLogsCSV();
|
|
177
|
-
}
|
|
178
|
-
static getRecentErrors(e) {
|
|
179
|
-
return o.getInstance().getRecentErrors(e);
|
|
180
|
-
}
|
|
181
|
-
static searchLogs(e) {
|
|
182
|
-
return o.getInstance().searchLogs(e);
|
|
183
|
-
}
|
|
184
|
-
static clearLogs() {
|
|
185
|
-
o.getInstance().clearLogs();
|
|
186
|
-
}
|
|
187
|
-
static enableMemoryLogging(e) {
|
|
188
|
-
return o.getInstance().enableMemoryLogging(e);
|
|
189
|
-
}
|
|
190
|
-
debug(e, ...t) {
|
|
191
|
-
this.log("debug", e, ...t);
|
|
192
|
-
}
|
|
193
|
-
info(e, ...t) {
|
|
194
|
-
this.log("info", e, ...t);
|
|
195
|
-
}
|
|
196
|
-
warn(e, ...t) {
|
|
197
|
-
this.log("warn", e, ...t);
|
|
198
|
-
}
|
|
199
|
-
error(e, ...t) {
|
|
200
|
-
this.log("error", e, ...t);
|
|
201
|
-
}
|
|
202
|
-
child(e = {}) {
|
|
203
|
-
const t = {
|
|
204
|
-
prefix: e.prefix ?? this.prefix,
|
|
205
|
-
enabled: e.enabled ?? this.enabled,
|
|
206
|
-
level: e.level ?? this.level,
|
|
207
|
-
context: { ...this.context, ...e.context },
|
|
208
|
-
transports: Array.from(this.transports.values()),
|
|
209
|
-
formatters: Array.from(this.formatters.values())
|
|
210
|
-
};
|
|
211
|
-
return new o(t, !1);
|
|
212
|
-
}
|
|
213
|
-
setLevel(e) {
|
|
214
|
-
this.level = e;
|
|
215
|
-
}
|
|
216
|
-
getLevel() {
|
|
217
|
-
return this.level;
|
|
218
|
-
}
|
|
219
|
-
isEnabled() {
|
|
220
|
-
return this.enabled && !o.mute;
|
|
221
|
-
}
|
|
222
|
-
setEnabled(e) {
|
|
223
|
-
this.enabled = e;
|
|
224
|
-
}
|
|
225
|
-
addTransport(e) {
|
|
226
|
-
this.transports.set(e.name, e);
|
|
227
|
-
}
|
|
228
|
-
removeTransport(e) {
|
|
229
|
-
this.transports.delete(e);
|
|
230
|
-
}
|
|
231
|
-
addFormatter(e) {
|
|
232
|
-
this.formatters.set(e.name, e);
|
|
233
|
-
}
|
|
234
|
-
removeFormatter(e) {
|
|
235
|
-
this.formatters.delete(e);
|
|
236
|
-
}
|
|
237
|
-
getTransport(e) {
|
|
238
|
-
return this.transports.get(e);
|
|
239
|
-
}
|
|
240
|
-
getFormatter(e) {
|
|
241
|
-
return this.formatters.get(e);
|
|
242
|
-
}
|
|
243
|
-
// Debug/Developer Commands - accessible via console
|
|
244
|
-
exportLogs() {
|
|
245
|
-
const e = this.getMemoryTransport();
|
|
246
|
-
return e ? e.toJSON() : JSON.stringify({ error: "No memory transport found. Logs are not being stored." });
|
|
247
|
-
}
|
|
248
|
-
exportLogsCSV() {
|
|
249
|
-
const e = this.getMemoryTransport();
|
|
250
|
-
return e ? e.toCSV() : "Error: No memory transport found. Logs are not being stored.";
|
|
251
|
-
}
|
|
252
|
-
getRecentErrors(e = 30) {
|
|
253
|
-
const t = this.getMemoryTransport();
|
|
254
|
-
if (!t)
|
|
255
|
-
return [];
|
|
256
|
-
const r = new Date(Date.now() - e * 60 * 1e3);
|
|
257
|
-
return [...t.getLogsAfter(r).filter((s) => s.level === "error")];
|
|
258
|
-
}
|
|
259
|
-
searchLogs(e) {
|
|
260
|
-
const t = this.getMemoryTransport();
|
|
261
|
-
return t ? [...t.search(e)] : [];
|
|
262
|
-
}
|
|
263
|
-
clearLogs() {
|
|
264
|
-
const e = this.getMemoryTransport();
|
|
265
|
-
e ? (e.clear(), console.log("đī¸ Logger memory cleared")) : console.log("âšī¸ No memory transport found to clear");
|
|
266
|
-
}
|
|
267
|
-
enableMemoryLogging(e = 1e3) {
|
|
268
|
-
return Promise.resolve().then(() => u).then(({ MemoryTransport: t }) => {
|
|
269
|
-
const r = new t({ maxSize: e });
|
|
270
|
-
this.addTransport(r), console.log(`đ Memory logging enabled (max ${e} entries)`), console.log("đĄ Use logger.exportLogs() to get logs as JSON"), console.log("đĄ Use logger.exportLogsCSV() to get logs as CSV"), console.log("đĄ Use logger.getRecentErrors() to get recent errors"), console.log("đĄ Use logger.clearLogs() to clear stored logs");
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
getMemoryTransport() {
|
|
274
|
-
return this.transports.get("memory");
|
|
275
|
-
}
|
|
276
|
-
log(e, t, ...r) {
|
|
277
|
-
if (!this.shouldLog(e))
|
|
278
|
-
return;
|
|
279
|
-
let s = {
|
|
280
|
-
level: e,
|
|
281
|
-
message: t,
|
|
282
|
-
timestamp: /* @__PURE__ */ new Date(),
|
|
283
|
-
context: this.context,
|
|
284
|
-
args: r,
|
|
285
|
-
prefix: this.prefix
|
|
286
|
-
};
|
|
287
|
-
for (const i of this.formatters.values())
|
|
288
|
-
s = i.format(s);
|
|
289
|
-
for (const i of this.transports.values())
|
|
290
|
-
try {
|
|
291
|
-
i.log(s);
|
|
292
|
-
} catch (c) {
|
|
293
|
-
this.isRoot && console.error("Logger transport error:", c);
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
shouldLog(e) {
|
|
297
|
-
if (!this.isEnabled())
|
|
298
|
-
return !1;
|
|
299
|
-
const t = g[this.level];
|
|
300
|
-
return g[e] >= t;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
class h {
|
|
304
|
-
name = "json";
|
|
305
|
-
seen = /* @__PURE__ */ new WeakSet();
|
|
306
|
-
format(e) {
|
|
307
|
-
this.seen = /* @__PURE__ */ new WeakSet();
|
|
308
|
-
const t = {
|
|
309
|
-
...e,
|
|
310
|
-
timestamp: e.timestamp.toISOString(),
|
|
311
|
-
message: this.sanitizeMessage(e.message)
|
|
312
|
-
};
|
|
313
|
-
return e.context && (t.context = this.sanitizeObject(e.context)), e.args && (t.args = e.args.map((r) => this.sanitizeValue(r))), {
|
|
314
|
-
...e,
|
|
315
|
-
message: JSON.stringify(t)
|
|
316
|
-
};
|
|
317
|
-
}
|
|
318
|
-
sanitizeMessage(e) {
|
|
319
|
-
return e.replace(/\x1b\[[0-9;]*m/g, "");
|
|
320
|
-
}
|
|
321
|
-
sanitizeValue(e) {
|
|
322
|
-
return e === void 0 || e === null ? null : typeof e == "function" ? "[Function]" : typeof e == "symbol" ? e.toString() : e instanceof Error ? {
|
|
323
|
-
name: e.name,
|
|
324
|
-
message: e.message,
|
|
325
|
-
stack: e.stack
|
|
326
|
-
} : typeof e == "object" ? this.sanitizeObject(e) : e;
|
|
327
|
-
}
|
|
328
|
-
sanitizeObject(e) {
|
|
329
|
-
if (this.seen.has(e))
|
|
330
|
-
return { "[Circular]": !0 };
|
|
331
|
-
this.seen.add(e);
|
|
332
|
-
const t = {};
|
|
333
|
-
for (const [r, s] of Object.entries(e))
|
|
334
|
-
try {
|
|
335
|
-
t[r] = this.sanitizeValue(s);
|
|
336
|
-
} catch {
|
|
337
|
-
t[r] = "[Unserializable]";
|
|
338
|
-
}
|
|
339
|
-
return t;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
class d {
|
|
343
|
-
name = "context";
|
|
344
|
-
includeContext;
|
|
345
|
-
contextPrefix;
|
|
346
|
-
constructor(e = {}) {
|
|
347
|
-
this.includeContext = e.includeContext ?? !0, this.contextPrefix = e.contextPrefix ?? " ";
|
|
348
|
-
}
|
|
349
|
-
format(e) {
|
|
350
|
-
if (!this.includeContext || !e.context || Object.keys(e.context).length === 0)
|
|
351
|
-
return e;
|
|
352
|
-
const t = this.formatContext(e.context);
|
|
353
|
-
return {
|
|
354
|
-
...e,
|
|
355
|
-
message: `${e.message}${this.contextPrefix}${t}`
|
|
356
|
-
};
|
|
357
|
-
}
|
|
358
|
-
formatContext(e) {
|
|
359
|
-
return `{${Object.entries(e).map(([r, s]) => `${r}=${this.formatValue(s)}`).join(" ")}}`;
|
|
360
|
-
}
|
|
361
|
-
formatValue(e) {
|
|
362
|
-
return e === null ? "null" : e === void 0 ? "undefined" : typeof e == "string" ? `"${e}"` : typeof e == "number" || typeof e == "boolean" ? String(e) : e instanceof Date ? e.toISOString() : e instanceof Error ? `Error(${e.message})` : Array.isArray(e) ? `[${e.length}]` : typeof e == "object" ? "{...}" : JSON.stringify(e) ?? "unknown";
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
const x = o.getInstance(), b = o.enableMemoryLogging.bind(o);
|
|
366
|
-
export {
|
|
367
|
-
f as ConsoleTransport,
|
|
368
|
-
d as ContextFormatter,
|
|
369
|
-
h as JSONFormatter,
|
|
370
|
-
g as LOG_LEVELS,
|
|
371
|
-
p as LOG_LEVEL_NAMES,
|
|
372
|
-
o as Logger,
|
|
373
|
-
m as MemoryTransport,
|
|
374
|
-
b as enableMemoryLogging,
|
|
375
|
-
x as logger
|
|
376
|
-
};
|
|
377
|
-
//# sourceMappingURL=virtualdisplay.logger.es.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"virtualdisplay.logger.es.js","sources":["../src/types.ts","../src/transports/console-transport.ts","../src/transports/memory-transport.ts","../src/logger.ts","../src/formatters/json-formatter.ts","../src/formatters/context-formatter.ts","../src/index.ts"],"sourcesContent":["export type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport type LogLevelValue = 0 | 1 | 2 | 3;\n\nexport interface LoggerOptions {\n prefix?: string;\n enabled?: boolean;\n level?: LogLevel;\n timestamp?: boolean;\n colors?: boolean;\n context?: Record<string, unknown>;\n transports?: LogTransport[];\n formatters?: LogFormatter[];\n}\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n timestamp: Date;\n context?: Record<string, unknown>;\n args?: unknown[];\n prefix?: string;\n}\n\nexport interface LogTransport {\n name: string;\n log(entry: LogEntry): void | Promise<void>;\n}\n\nexport interface LogFormatter {\n name: string;\n format(entry: LogEntry): LogEntry;\n}\n\nexport interface Logger {\n debug(message: string, ...args: unknown[]): void;\n info(message: string, ...args: unknown[]): void;\n warn(message: string, ...args: unknown[]): void;\n error(message: string, ...args: unknown[]): void;\n child(options?: Partial<LoggerOptions>): Logger;\n setLevel(level: LogLevel): void;\n getLevel(): LogLevel;\n isEnabled(): boolean;\n setEnabled(enabled: boolean): void;\n addTransport(transport: LogTransport): void;\n removeTransport(name: string): void;\n addFormatter(formatter: LogFormatter): void;\n removeFormatter(name: string): void;\n}\n\nexport const LOG_LEVELS: Record<LogLevel, LogLevelValue> = Object.freeze({\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n} as const);\n\nexport const LOG_LEVEL_NAMES: Record<LogLevelValue, LogLevel> = Object.freeze({\n 0: 'debug',\n 1: 'info',\n 2: 'warn',\n 3: 'error',\n} as const);\n","import type { LogTransport, LogEntry, LogLevel } from '../types';\n\nexport interface ConsoleTransportOptions {\n colors?: boolean;\n timestamp?: boolean;\n}\n\nexport class ConsoleTransport implements LogTransport {\n public readonly name = 'console';\n\n private readonly colorMap: Record<LogLevel, string> = {\n info: 'color: #007bff;', // Blue (exactly like server logger)\n warn: 'color: #ffc107;', // Yellow\n error: 'color: #dc3545;', // Red\n debug: 'color: #28a745;', // Green\n };\n\n private readonly emojiMap: Record<LogLevel, string> = {\n info: 'đ',\n warn: 'â ī¸',\n error: 'â',\n debug: 'đ',\n };\n\n constructor(_options: ConsoleTransportOptions = {}) {\n // Options available for future use\n }\n\n public log(entry: LogEntry): void {\n const logOrigin = this.createStackTrace();\n const emoji = this.emojiMap[entry.level];\n const color = this.colorMap[entry.level];\n const formattedMessage = entry.prefix\n ? `%c[${entry.prefix}] ${emoji} ${entry.message}`\n : `%c${emoji} ${entry.message}`;\n const styles = [color];\n\n // Robust console logging with fallbacks (exactly like server logger)\n try {\n if (this.supportsGroupedLogging()) {\n // Type-safe access to console methods\n const consoleWithGrouping = console as Console & {\n groupCollapsed: (message: string, ...styles: string[]) => void;\n groupEnd: () => void;\n };\n consoleWithGrouping.groupCollapsed(formattedMessage, ...styles);\n const method = this.getConsoleMethod(entry.level);\n method(`Origin: ${logOrigin}`);\n method('Arguments: ', ...(entry.args ?? []));\n consoleWithGrouping.groupEnd();\n } else {\n // Fallback to simple logging with specific method routing\n const simpleMessage = entry.prefix\n ? `[${entry.prefix}] ${emoji} ${entry.message}`\n : `${emoji} ${entry.message}`;\n const method = this.getConsoleMethod(entry.level);\n method(simpleMessage, ...(entry.args ?? []));\n }\n } catch {\n // Ultimate fallback - basic console.log only\n try {\n const ultimateMessage = entry.prefix\n ? `[${entry.prefix}] ${entry.level.toUpperCase()}: ${entry.message}`\n : `${entry.level.toUpperCase()}: ${entry.message}`;\n console.log(ultimateMessage, ...(entry.args ?? []));\n } catch {\n // Silently fail if even console.log doesn't work\n }\n }\n }\n\n private createStackTrace(): string {\n const stack = new Error().stack;\n if (!stack) {\n return 'unknown location';\n }\n\n const stackLines = stack.split('\\n');\n const callerLine = stackLines.find(\n line =>\n !line.includes('console-transport.ts') && !line.includes('logger.ts') && line.includes('at')\n );\n\n return callerLine ? callerLine.trim().replace(/^at\\s+/, '') : 'unknown location';\n }\n\n private getConsoleMethod(level: LogLevel): (...args: unknown[]) => void {\n // Map log levels to console methods (same as server logger)\n switch (level) {\n case 'debug':\n return console.log; // Debug uses console.log like server logger\n case 'info':\n return console.info;\n case 'warn':\n return console.warn;\n case 'error':\n return console.error;\n default:\n return console.log;\n }\n }\n\n private supportsGroupedLogging(): boolean {\n try {\n // Disable grouped logging in test environments for simpler testing\n if (this.isTestEnvironment()) {\n return false;\n }\n return typeof console.groupCollapsed === 'function' && typeof console.groupEnd === 'function';\n } catch {\n return false;\n }\n }\n\n private isTestEnvironment(): boolean {\n // Check for common test runners\n if (typeof window !== 'undefined') {\n // Web Test Runner\n if ((window as unknown as { __WTR_CONFIG__?: unknown }).__WTR_CONFIG__ !== undefined) {\n return true;\n }\n // Karma\n if ((window as unknown as { __karma__?: unknown }).__karma__ !== undefined) {\n return true;\n }\n }\n\n // Node.js test environments\n if (typeof process !== 'undefined' && process.env) {\n return (\n process.env.NODE_ENV === 'test' ||\n process.env.JEST_WORKER_ID !== undefined ||\n process.env.VITEST === 'true'\n );\n }\n\n return false;\n }\n}\n","import type { LogTransport, LogEntry } from '../types';\n\nexport interface MemoryTransportOptions {\n maxSize?: number;\n}\n\nexport class MemoryTransport implements LogTransport {\n public readonly name = 'memory';\n private readonly logs: LogEntry[] = [];\n private readonly maxSize: number;\n\n constructor(options: MemoryTransportOptions = {}) {\n this.maxSize = options.maxSize ?? 1000;\n }\n\n public log(entry: LogEntry): void {\n this.logs.push({ ...entry });\n\n // Keep only the last maxSize entries\n if (this.logs.length > this.maxSize) {\n this.logs.shift();\n }\n }\n\n public getLogs(): ReadonlyArray<LogEntry> {\n return [...this.logs];\n }\n\n public clear(): void {\n this.logs.length = 0;\n }\n\n public getLogsByLevel(level: LogEntry['level']): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.level === level);\n }\n\n public getLogsAfter(timestamp: Date): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.timestamp > timestamp);\n }\n\n public getLogsBefore(timestamp: Date): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.timestamp < timestamp);\n }\n\n public getLogsBetween(start: Date, end: Date): ReadonlyArray<LogEntry> {\n return this.logs.filter(log => log.timestamp >= start && log.timestamp <= end);\n }\n\n public search(query: string | RegExp): ReadonlyArray<LogEntry> {\n const regex = typeof query === 'string' ? new RegExp(query, 'i') : query;\n return this.logs.filter(log => regex.test(log.message));\n }\n\n public toJSON(): string {\n return JSON.stringify(this.logs, null, 2);\n }\n\n public toCSV(): string {\n const headers = ['timestamp', 'level', 'prefix', 'message', 'context'];\n const rows = this.logs.map(log => [\n log.timestamp.toISOString(),\n log.level,\n log.prefix ?? '',\n log.message,\n JSON.stringify(log.context ?? {}),\n ]);\n\n return [headers.join(','), ...rows.map(row => row.map(cell => `\"${cell}\"`).join(','))].join(\n '\\n'\n );\n }\n}\n","import type {\n Logger as ILogger,\n LoggerOptions,\n LogLevel,\n LogEntry,\n LogTransport,\n LogFormatter,\n} from './types';\nimport { LOG_LEVELS } from './types';\nimport { ConsoleTransport } from './transports';\n\nexport class Logger implements ILogger {\n private static instance: Logger | undefined;\n private static mute = false;\n\n private readonly prefix?: string;\n private enabled: boolean;\n private level: LogLevel;\n private readonly context: Record<string, unknown>;\n private readonly transports: Map<string, LogTransport>;\n private readonly formatters: Map<string, LogFormatter>;\n private readonly isRoot: boolean;\n\n constructor(options: LoggerOptions = {}, isRoot = true) {\n this.prefix = options.prefix;\n this.enabled = options.enabled ?? true;\n this.level = options.level ?? 'info';\n this.context = options.context ?? {};\n this.transports = new Map();\n this.formatters = new Map();\n this.isRoot = isRoot;\n\n // Initialize default transport for root logger (simplified like server logger)\n if (this.isRoot) {\n const consoleTransport = new ConsoleTransport({\n colors: options.colors ?? true,\n timestamp: options.timestamp ?? false,\n });\n this.addTransport(consoleTransport);\n }\n\n // Add custom transports and formatters\n options.transports?.forEach(transport => this.addTransport(transport));\n options.formatters?.forEach(formatter => this.addFormatter(formatter));\n }\n\n public static getInstance(options?: LoggerOptions): Logger {\n Logger.instance ??= new Logger(options);\n return Logger.instance;\n }\n\n public static setMute(mute: boolean): void {\n Logger.mute = mute;\n }\n\n public static isMuted(): boolean {\n return Logger.mute;\n }\n\n // Global debug commands - accessible as logger.exportLogs()\n public static exportLogs(): string {\n return Logger.getInstance().exportLogs();\n }\n\n public static exportLogsCSV(): string {\n return Logger.getInstance().exportLogsCSV();\n }\n\n public static getRecentErrors(minutes?: number): LogEntry[] {\n return Logger.getInstance().getRecentErrors(minutes);\n }\n\n public static searchLogs(query: string | RegExp): LogEntry[] {\n return Logger.getInstance().searchLogs(query);\n }\n\n public static clearLogs(): void {\n Logger.getInstance().clearLogs();\n }\n\n public static enableMemoryLogging(maxSize?: number): Promise<void> {\n return Logger.getInstance().enableMemoryLogging(maxSize);\n }\n\n public debug(message: string, ...args: unknown[]): void {\n this.log('debug', message, ...args);\n }\n\n public info(message: string, ...args: unknown[]): void {\n this.log('info', message, ...args);\n }\n\n public warn(message: string, ...args: unknown[]): void {\n this.log('warn', message, ...args);\n }\n\n public error(message: string, ...args: unknown[]): void {\n this.log('error', message, ...args);\n }\n\n public child(options: Partial<LoggerOptions> = {}): Logger {\n const childOptions: LoggerOptions = {\n prefix: options.prefix ?? this.prefix,\n enabled: options.enabled ?? this.enabled,\n level: options.level ?? this.level,\n context: { ...this.context, ...options.context },\n transports: Array.from(this.transports.values()),\n formatters: Array.from(this.formatters.values()),\n };\n\n return new Logger(childOptions, false);\n }\n\n public setLevel(level: LogLevel): void {\n this.level = level;\n }\n\n public getLevel(): LogLevel {\n return this.level;\n }\n\n public isEnabled(): boolean {\n return this.enabled && !Logger.mute;\n }\n\n public setEnabled(enabled: boolean): void {\n this.enabled = enabled;\n }\n\n public addTransport(transport: LogTransport): void {\n this.transports.set(transport.name, transport);\n }\n\n public removeTransport(name: string): void {\n this.transports.delete(name);\n }\n\n public addFormatter(formatter: LogFormatter): void {\n this.formatters.set(formatter.name, formatter);\n }\n\n public removeFormatter(name: string): void {\n this.formatters.delete(name);\n }\n\n public getTransport(name: string): LogTransport | undefined {\n return this.transports.get(name);\n }\n\n public getFormatter(name: string): LogFormatter | undefined {\n return this.formatters.get(name);\n }\n\n // Debug/Developer Commands - accessible via console\n public exportLogs(): string {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return JSON.stringify({ error: 'No memory transport found. Logs are not being stored.' });\n }\n return memoryTransport.toJSON();\n }\n\n public exportLogsCSV(): string {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return 'Error: No memory transport found. Logs are not being stored.';\n }\n return memoryTransport.toCSV();\n }\n\n public getRecentErrors(minutes = 30): LogEntry[] {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return [];\n }\n const since = new Date(Date.now() - minutes * 60 * 1000);\n return [...memoryTransport.getLogsAfter(since).filter(log => log.level === 'error')];\n }\n\n public searchLogs(query: string | RegExp): LogEntry[] {\n const memoryTransport = this.getMemoryTransport();\n if (!memoryTransport) {\n return [];\n }\n return [...memoryTransport.search(query)];\n }\n\n public clearLogs(): void {\n const memoryTransport = this.getMemoryTransport();\n if (memoryTransport) {\n memoryTransport.clear();\n console.log('đī¸ Logger memory cleared');\n } else {\n console.log('âšī¸ No memory transport found to clear');\n }\n }\n\n public enableMemoryLogging(maxSize = 1000): Promise<void> {\n // Import dynamically to avoid circular dependency\n return import('./transports').then(({ MemoryTransport }) => {\n const memoryTransport = new MemoryTransport({ maxSize });\n this.addTransport(memoryTransport);\n console.log(`đ Memory logging enabled (max ${maxSize} entries)`);\n console.log('đĄ Use logger.exportLogs() to get logs as JSON');\n console.log('đĄ Use logger.exportLogsCSV() to get logs as CSV');\n console.log('đĄ Use logger.getRecentErrors() to get recent errors');\n console.log('đĄ Use logger.clearLogs() to clear stored logs');\n });\n }\n\n private getMemoryTransport(): import('./transports').MemoryTransport | undefined {\n return this.transports.get('memory') as import('./transports').MemoryTransport | undefined;\n }\n\n private log(level: LogLevel, message: string, ...args: unknown[]): void {\n if (!this.shouldLog(level)) {\n return;\n }\n\n let entry: LogEntry = {\n level,\n message,\n timestamp: new Date(),\n context: this.context,\n args,\n prefix: this.prefix,\n };\n\n // Apply formatters\n for (const formatter of this.formatters.values()) {\n entry = formatter.format(entry);\n }\n\n // Send to transports\n for (const transport of this.transports.values()) {\n try {\n void transport.log(entry);\n } catch (error) {\n // Avoid infinite loop if transport fails\n if (this.isRoot) {\n console.error('Logger transport error:', error);\n }\n }\n }\n }\n\n private shouldLog(level: LogLevel): boolean {\n if (!this.isEnabled()) {\n return false;\n }\n\n // Simple log level check - if enabled, follow the configured level\n const currentLevelValue = LOG_LEVELS[this.level];\n const messageLevelValue = LOG_LEVELS[level];\n return messageLevelValue >= currentLevelValue;\n }\n}\n","import type { LogFormatter, LogEntry } from '../types';\n\nexport class JSONFormatter implements LogFormatter {\n public readonly name = 'json';\n private seen = new WeakSet();\n\n public format(entry: LogEntry): LogEntry {\n // Reset seen set for each format call\n this.seen = new WeakSet();\n // Create a clean JSON-serializable object\n const jsonEntry = {\n ...entry,\n timestamp: entry.timestamp.toISOString(),\n message: this.sanitizeMessage(entry.message),\n };\n\n // Ensure all values are JSON-serializable\n if (entry.context) {\n jsonEntry.context = this.sanitizeObject(entry.context);\n }\n\n if (entry.args) {\n jsonEntry.args = entry.args.map(arg => this.sanitizeValue(arg));\n }\n\n return {\n ...entry,\n message: JSON.stringify(jsonEntry),\n };\n }\n\n private sanitizeMessage(message: string): string {\n // Remove any ANSI color codes\n return message.replace(/\\x1b\\[[0-9;]*m/g, '');\n }\n\n private sanitizeValue(value: unknown): unknown {\n if (value === undefined) return null;\n if (value === null) return null;\n if (typeof value === 'function') return '[Function]';\n if (typeof value === 'symbol') return value.toString();\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n if (typeof value === 'object') {\n return this.sanitizeObject(value as Record<string, unknown>);\n }\n return value;\n }\n\n private sanitizeObject(obj: Record<string, unknown>): Record<string, unknown> {\n // Check for circular references\n if (this.seen.has(obj)) {\n return { '[Circular]': true };\n }\n this.seen.add(obj);\n\n const result: Record<string, unknown> = {};\n\n for (const [key, value] of Object.entries(obj)) {\n try {\n result[key] = this.sanitizeValue(value);\n } catch {\n result[key] = '[Unserializable]';\n }\n }\n\n return result;\n }\n}\n","import type { LogFormatter, LogEntry } from '../types';\n\nexport interface ContextFormatterOptions {\n includeContext?: boolean;\n contextPrefix?: string;\n}\n\nexport class ContextFormatter implements LogFormatter {\n public readonly name = 'context';\n private readonly includeContext: boolean;\n private readonly contextPrefix: string;\n\n constructor(options: ContextFormatterOptions = {}) {\n this.includeContext = options.includeContext ?? true;\n this.contextPrefix = options.contextPrefix ?? ' ';\n }\n\n public format(entry: LogEntry): LogEntry {\n if (!this.includeContext || !entry.context || Object.keys(entry.context).length === 0) {\n return entry;\n }\n\n const contextStr = this.formatContext(entry.context);\n return {\n ...entry,\n message: `${entry.message}${this.contextPrefix}${contextStr}`,\n };\n }\n\n private formatContext(context: Record<string, unknown>): string {\n const pairs = Object.entries(context)\n .map(([key, value]) => `${key}=${this.formatValue(value)}`)\n .join(' ');\n\n return `{${pairs}}`;\n }\n\n private formatValue(value: unknown): string {\n if (value === null) return 'null';\n if (value === undefined) return 'undefined';\n if (typeof value === 'string') return `\"${value}\"`;\n if (typeof value === 'number' || typeof value === 'boolean') return String(value);\n if (value instanceof Date) return value.toISOString();\n if (value instanceof Error) return `Error(${value.message})`;\n if (Array.isArray(value)) return `[${value.length}]`;\n if (typeof value === 'object') return '{...}';\n return JSON.stringify(value) ?? 'unknown';\n }\n}\n","export { Logger } from './logger';\nexport type {\n LogLevel,\n LogLevelValue,\n LoggerOptions,\n LogEntry,\n LogTransport,\n LogFormatter,\n Logger as ILogger,\n} from './types';\nexport { LOG_LEVELS, LOG_LEVEL_NAMES } from './types';\n\n// Export transports\nexport { ConsoleTransport, MemoryTransport } from './transports';\nexport type { ConsoleTransportOptions, MemoryTransportOptions } from './transports';\n\n// Export formatters\nexport { JSONFormatter, ContextFormatter } from './formatters';\nexport type { ContextFormatterOptions } from './formatters';\n\n// Create and export default logger instance\nimport { Logger } from './logger';\n\n// Create default logger instance without prefix for neutral library use\n// Users can create their own logger instances with their own prefix if needed\nexport const logger = Logger.getInstance();\n\n// Only export debug commands that developers might use from console\n// These are accessed via the logger instance: logger.exportLogs(), etc.\nexport const enableMemoryLogging = Logger.enableMemoryLogging.bind(Logger);\n"],"names":["LOG_LEVELS","LOG_LEVEL_NAMES","ConsoleTransport","_options","entry","logOrigin","emoji","color","formattedMessage","styles","consoleWithGrouping","method","simpleMessage","ultimateMessage","stack","callerLine","line","level","MemoryTransport","options","log","timestamp","start","end","query","regex","headers","rows","row","cell","Logger","isRoot","consoleTransport","transport","formatter","mute","minutes","maxSize","message","args","childOptions","enabled","name","memoryTransport","since","error","currentLevelValue","JSONFormatter","jsonEntry","arg","value","obj","result","key","ContextFormatter","contextStr","context","logger","enableMemoryLogging"],"mappings":"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"}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@virtualdisplay-io/logger",
|
|
3
|
-
"version": "1.2.0",
|
|
4
|
-
"description": "Simple, TypeScript-first logging library for browser and Node.js applications",
|
|
5
|
-
"main": "dist/virtualdisplay.logger.cjs.js",
|
|
6
|
-
"module": "dist/virtualdisplay.logger.es.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
|
-
"type": "module",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"build": "tsc && vite build",
|
|
11
|
-
"dev": "vite",
|
|
12
|
-
"test": "vitest run",
|
|
13
|
-
"test:watch": "vitest",
|
|
14
|
-
"test:coverage": "vitest run --coverage",
|
|
15
|
-
"test:coverage:ui": "vitest run --coverage --ui",
|
|
16
|
-
"lint": "eslint . --ext .ts",
|
|
17
|
-
"format": "prettier --write \"src/**/*.{ts,json}\" \"tests/**/*.{ts,json}\"",
|
|
18
|
-
"format:check": "prettier --check \"src/**/*.{ts,json}\" \"tests/**/*.{ts,json}\"",
|
|
19
|
-
"analyze": "vite-bundle-visualizer --template treemap --output stats.html --open false",
|
|
20
|
-
"docs": "typedoc --out docs src/index.ts",
|
|
21
|
-
"prepare": "pnpm build",
|
|
22
|
-
"release": "semantic-release"
|
|
23
|
-
},
|
|
24
|
-
"exports": {
|
|
25
|
-
".": {
|
|
26
|
-
"types": "./dist/index.d.ts",
|
|
27
|
-
"import": "./dist/virtualdisplay.logger.es.js",
|
|
28
|
-
"require": "./dist/virtualdisplay.logger.cjs.js"
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"files": [
|
|
32
|
-
"dist",
|
|
33
|
-
"README.md",
|
|
34
|
-
"CHANGELOG.md",
|
|
35
|
-
"LICENSE"
|
|
36
|
-
],
|
|
37
|
-
"publishConfig": {
|
|
38
|
-
"registry": "https://npm.pkg.github.com/",
|
|
39
|
-
"access": "restricted"
|
|
40
|
-
},
|
|
41
|
-
"repository": {
|
|
42
|
-
"type": "git",
|
|
43
|
-
"url": "git+https://github.com/virtualdisplay-io/logger.git"
|
|
44
|
-
},
|
|
45
|
-
"keywords": [
|
|
46
|
-
"logger",
|
|
47
|
-
"logging",
|
|
48
|
-
"log",
|
|
49
|
-
"virtual-display",
|
|
50
|
-
"typescript",
|
|
51
|
-
"browser",
|
|
52
|
-
"node"
|
|
53
|
-
],
|
|
54
|
-
"license": "MIT",
|
|
55
|
-
"devDependencies": {
|
|
56
|
-
"@semantic-release/changelog": "^6.0.3",
|
|
57
|
-
"@semantic-release/git": "^10.0.1",
|
|
58
|
-
"@types/node": "^22.10.7",
|
|
59
|
-
"@typescript-eslint/eslint-plugin": "^8.33.0",
|
|
60
|
-
"@typescript-eslint/parser": "^8.33.0",
|
|
61
|
-
"@vitest/coverage-v8": "^2.1.9",
|
|
62
|
-
"eslint": "^9.28.0",
|
|
63
|
-
"eslint-config-prettier": "^10.1.5",
|
|
64
|
-
"eslint-plugin-prettier": "^5.4.1",
|
|
65
|
-
"jsdom": "^26.1.0",
|
|
66
|
-
"prettier": "^3.5.3",
|
|
67
|
-
"semantic-release": "^24.0.0",
|
|
68
|
-
"typedoc": "^0.28.5",
|
|
69
|
-
"typescript": "^5.8.3",
|
|
70
|
-
"vite": "^6.3.5",
|
|
71
|
-
"vite-bundle-visualizer": "^1.2.1",
|
|
72
|
-
"vite-plugin-dts": "^4.5.4",
|
|
73
|
-
"vitest": "^2.1.9"
|
|
74
|
-
},
|
|
75
|
-
"engines": {
|
|
76
|
-
"node": ">=18.0.0"
|
|
77
|
-
},
|
|
78
|
-
"sideEffects": false
|
|
79
|
-
}
|