Files
AFFiNE-Mirror/tools/utils/src/logger.ts
2025-01-09 08:04:21 +00:00

47 lines
1.2 KiB
TypeScript

import chalk from 'chalk';
import { identity } from 'lodash-es';
export const newLineSeparator = /\r\n|[\n\r\x85\u2028\u2029]/g;
interface StringLike {
toString: () => string;
}
export class Logger {
log = this.getLineLogger(console.log.bind(console));
info = this.getLineLogger(console.info.bind(console), chalk.blue);
warn = this.getLineLogger(
console.warn.bind(console),
chalk.bgHex('#322b08').hex('#fadea6')
);
error = this.getLineLogger(
console.error.bind(console),
chalk.bgHex('#250201').hex('#ef8784')
);
success = this.getLineLogger(console.log.bind(console), chalk.green);
constructor(private readonly tag: string = '') {}
getLineLogger(
logLine: (...line: string[]) => void,
color: (...text: string[]) => string = identity
) {
return (...args: StringLike[]) => {
args.forEach(arg => {
arg
.toString()
.split(newLineSeparator)
.forEach(line => {
if (line.length !== 0) {
if (this.tag) {
logLine(color(`[${this.tag}] ${line}`));
} else {
logLine(color(line));
}
}
});
});
};
}
}