repomix
Version:
A tool to pack repository contents to single file for AI consumption
98 lines (97 loc) • 2.79 kB
JavaScript
import util from 'node:util';
import { workerData } from 'node:worker_threads';
import pc from 'picocolors';
export const repomixLogLevels = {
SILENT: -1,
ERROR: 0,
WARN: 1,
INFO: 2,
DEBUG: 3,
};
class RepomixLogger {
level = repomixLogLevels.INFO;
constructor() {
this.init();
}
init() {
this.setLogLevel(repomixLogLevels.INFO);
}
setLogLevel(level) {
this.level = level;
}
getLogLevel() {
return this.level;
}
error(...args) {
if (this.level >= repomixLogLevels.ERROR) {
console.error(pc.red(this.formatArgs(args)));
}
}
warn(...args) {
if (this.level >= repomixLogLevels.WARN) {
console.log(pc.yellow(this.formatArgs(args)));
}
}
success(...args) {
if (this.level >= repomixLogLevels.INFO) {
console.log(pc.green(this.formatArgs(args)));
}
}
info(...args) {
if (this.level >= repomixLogLevels.INFO) {
console.log(pc.cyan(this.formatArgs(args)));
}
}
log(...args) {
if (this.level >= repomixLogLevels.INFO) {
console.log(this.formatArgs(args));
}
}
note(...args) {
if (this.level >= repomixLogLevels.INFO) {
console.log(pc.dim(this.formatArgs(args)));
}
}
debug(...args) {
if (this.level >= repomixLogLevels.DEBUG) {
console.log(pc.blue(this.formatArgs(args)));
}
}
trace(...args) {
if (this.level >= repomixLogLevels.DEBUG) {
console.log(pc.gray(this.formatArgs(args)));
}
}
formatArgs(args) {
return args
.map((arg) => (typeof arg === 'object' ? util.inspect(arg, { depth: null, colors: true }) : arg))
.join(' ');
}
}
export const logger = new RepomixLogger();
export const setLogLevel = (level) => {
logger.setLogLevel(level);
};
const isValidLogLevel = (level) => {
return (level === repomixLogLevels.SILENT ||
level === repomixLogLevels.ERROR ||
level === repomixLogLevels.WARN ||
level === repomixLogLevels.INFO ||
level === repomixLogLevels.DEBUG);
};
export const setLogLevelByWorkerData = () => {
const envLogLevel = process.env.REPOMIX_LOG_LEVEL;
if (envLogLevel !== undefined) {
const logLevel = Number(envLogLevel);
if (!Number.isNaN(logLevel) && isValidLogLevel(logLevel)) {
setLogLevel(logLevel);
return;
}
}
if (Array.isArray(workerData) && workerData.length > 1 && workerData[1]?.logLevel !== undefined) {
const logLevel = workerData[1].logLevel;
if (isValidLogLevel(logLevel)) {
setLogLevel(logLevel);
}
}
};