@ahmic/autoit-js
Version:
Node.js bindings for AutoItX3.dll
138 lines (135 loc) • 4.62 kB
JavaScript
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