Add skeleton for file event handling

This commit is contained in:
Andras Schmelczer 2024-12-08 10:58:03 +00:00
parent 1420cf104e
commit 8a7cc65e88
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
6 changed files with 259 additions and 4 deletions

68
plugin/src/logger.ts Normal file
View file

@ -0,0 +1,68 @@
enum LogLevel {
INFO,
WARNING,
ERROR,
}
class LogLine {
constructor(public level: LogLevel, public message: string) {}
public toString(): string {
return `${this.formatLevel()}: ${this.message}`;
}
private formatLevel(): string {
switch (this.level) {
case LogLevel.INFO:
return "INFO";
case LogLevel.WARNING:
return "WARNING";
case LogLevel.ERROR:
return "ERROR";
default:
return "UNKNOWN";
}
}
}
export class Logger {
private static readonly MAX_MESSAGES = 1000;
private static instance: Logger;
private messages: LogLine[] = [];
private constructor() {}
static getInstance(): Logger {
if (!Logger.instance) {
Logger.instance = new Logger();
}
return Logger.instance;
}
public info(message: string): void {
this.pushMessage(message, LogLevel.INFO);
console.log(message);
}
public warn(message: string): void {
this.pushMessage(message, LogLevel.WARNING);
console.warn(message);
}
public error(message: string): void {
this.pushMessage(message, LogLevel.ERROR);
console.error(message);
}
public getMessages(): LogLine[] {
return this.messages;
}
private pushMessage(message: string, level: LogLevel): void {
this.messages.push(new LogLine(level, message));
if (this.messages.length > Logger.MAX_MESSAGES) {
this.messages.shift();
}
}
}