UNPKG

@ahmic/autoit-js

Version:
138 lines (135 loc) 4.62 kB
import { inspect } from 'node:util'; var LogLevel; (function (LogLevel) { LogLevel[LogLevel["Debug"] = 0] = "Debug"; LogLevel[LogLevel["Info"] = 1] = "Info"; LogLevel[LogLevel["Warn"] = 2] = "Warn"; LogLevel[LogLevel["Error"] = 3] = "Error"; LogLevel[LogLevel["Fatal"] = 4] = "Fatal"; })(LogLevel || (LogLevel = {})); const labels = { [LogLevel.Debug]: 'DEBUG', [LogLevel.Info]: ' INFO', [LogLevel.Warn]: ' WARN', [LogLevel.Error]: 'ERROR', [LogLevel.Fatal]: 'FATAL', }; const colors = { [LogLevel.Debug]: '\x1b[34m', [LogLevel.Info]: '\x1b[32m', [LogLevel.Warn]: '\x1b[33m', [LogLevel.Error]: '\x1b[31m', [LogLevel.Fatal]: '\x1b[41m\x1b[37m', Blue: '\x1b[34m', Green: '\x1b[32m', Yellow: '\x1b[33m', Red: '\x1b[31m', White: '\x1b[41m\x1b[37m', Reset: '\x1b[0m', }; class Logger { logLevel; pid; useColors; context; constructor(context) { this.pid = process.pid.toString().padEnd(5, ' '); this.useColors = process.env.NO_COLOR !== '1'; const envLogLevel = process.env.AIT_LOG_LEVEL?.padStart(5, ' ')?.toUpperCase() ?? labels[LogLevel.Info]; switch (envLogLevel) { case labels[LogLevel.Debug]: this.logLevel = LogLevel.Debug; break; case labels[LogLevel.Info]: this.logLevel = LogLevel.Info; break; case labels[LogLevel.Warn]: this.logLevel = LogLevel.Warn; break; case labels[LogLevel.Error]: this.logLevel = LogLevel.Error; break; case labels[LogLevel.Fatal]: this.logLevel = LogLevel.Fatal; break; default: this.logLevel = LogLevel.Info; } this.context = context; } debug(...values) { return this.write(LogLevel.Debug, values); } info(...values) { return this.write(LogLevel.Info, values); } warn(...values) { return this.write(LogLevel.Warn, values); } error(...values) { return this.write(LogLevel.Error, values); } fatal(...values) { return this.write(LogLevel.Fatal, values); } logFunctionCall(functionName, functionArguments, functionResult) { if (this.logLevel < LogLevel.Debug) { return; } const fnName = `${colors.Green}${functionName}${colors.Reset}`; let fnArgs = ''; const arrow = `${colors.Yellow}=>${colors.Reset}`; const fnResult = `${colors.Green}${this.parseType(functionResult)}${colors.Reset}`; for (let i = 0; i < functionArguments.length; i++) { fnArgs += `${colors.Blue}${this.parseType(functionArguments[i])}${colors.Reset}${i < functionArguments.length - 1 ? ', ' : ''}`; } this.debug(`${fnName}(${fnArgs}) ${arrow} ${fnResult}`); } parseType(value) { switch (typeof value) { case 'string': return `"${value}"`; case 'number': case 'bigint': case 'boolean': return `${value}`; case 'undefined': return 'undefined'; case 'object': return value === null ? 'null' : inspect(value, { depth: 1, compact: true, breakLength: Infinity }); default: return typeof value; } } write(logLevel, values) { if (logLevel < this.logLevel) { return false; } const pid = this.colorize(logLevel, this.pid); const timestamp = new Date().toLocaleString('en-US'); const logLevelLabel = this.colorize(logLevel, labels[logLevel]); const loggerName = this.colorize(LogLevel.Warn, `[${this.context}]`); const messages = this.colorize(logLevel, values.map(this.formatValue).join(' ')); process.stdout.write(`${pid} - ${timestamp} ${logLevelLabel} ${loggerName} ${messages}\n`); return true; } formatValue(value) { if (value instanceof Error) { return value.stack ?? value.message; } else if (typeof value === 'object' || Array.isArray(value)) { return JSON.stringify(value); } return `${value}`; } colorize(logLevel, message) { if (!this.useColors) { return message; } const color = colors[logLevel]; const reset = colors.Reset; return `${color}${message}${reset}`; } } export { Logger }; //# sourceMappingURL=logger.js.map