UNPKG

vaporwaver-ts

Version:

TypeScript version of the Vaporwaver Python library. Vaporwaver is a Python library for generating vaporwave image art.

78 lines (61 loc) 2.27 kB
import { writeFileSync, appendFileSync, existsSync, mkdirSync } from 'fs'; import { join, dirname } from 'path'; import { fileURLToPath } from 'url'; export class Logger { private static instance: Logger; private logFile: string; private debugMode: boolean; private constructor() { const rootDir = dirname(fileURLToPath(import.meta.url)); const logsDir = join(rootDir, '..', '..', 'logs'); // Ensure logs directory exists if (!existsSync(logsDir)) { mkdirSync(logsDir, { recursive: true }); } this.logFile = join(logsDir, 'vaporwaver.log'); this.debugMode = process.env.VAPORWAVER_DEBUG === 'true'; // Initialize log file if (!existsSync(this.logFile)) { writeFileSync(this.logFile, ''); } } static getInstance(): Logger { if (!Logger.instance) { Logger.instance = new Logger(); } return Logger.instance; } private formatMessage(level: string, message: string, meta?: any): string { const timestamp = new Date().toISOString(); const metaStr = meta ? `\n${JSON.stringify(meta, null, 2)}` : ''; return `[${timestamp}] ${level}: ${message}${metaStr}\n`; } private log(level: string, message: string, meta?: any): void { const formattedMessage = this.formatMessage(level, message, meta); appendFileSync(this.logFile, formattedMessage); if (this.debugMode || level === 'ERROR') { console.log(formattedMessage); } } info(message: string, meta?: any): void { this.log('INFO', message, meta); } warn(message: string, meta?: any): void { this.log('WARN', message, meta); } error(message: string, meta?: any): void { this.log('ERROR', message, meta); } debug(message: string, meta?: any): void { if (this.debugMode) { this.log('DEBUG', message, meta); } } clearLogs(): void { writeFileSync(this.logFile, ''); } setDebugMode(enabled: boolean): void { this.debugMode = enabled; } } export const logger = Logger.getInstance();