antlr-ng
Version:
Next generation ANTLR Tool
45 lines (44 loc) • 1.19 kB
JavaScript
var __defProp = Object.defineProperty;
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
import { writeFileSync } from "node:fs";
import { basename, join } from "node:path";
class LogManager {
static {
__name(this, "LogManager");
}
records = [];
log(info) {
const stack = new Error().stack?.split("\n");
let fileName;
let lineNumber;
if (stack) {
try {
const stackLine = stack[3];
const match = stackLine.match(/\(([^)]+)\)/);
if (match) {
const parts = match[1].split(":");
fileName = basename(parts[0]);
lineNumber = parseInt(parts[1], 10);
}
} catch {
}
}
this.records.push({ ...info, fileName, lineNumber });
}
save(filename) {
if (!filename) {
filename = join(".", `antlrng-${Date.now()}.log`);
}
writeFileSync(filename, this.toString());
return filename;
}
toString() {
const entries = this.records.map((entry) => {
return `${entry.component ?? ""} ${entry.fileName ?? ""}:${entry.lineNumber ?? -1} ${entry.msg}`;
});
return entries.join("\n");
}
}
export {
LogManager
};