gdal-async
Version:
Bindings to GDAL (Geospatial Data Abstraction Library) with full async support
76 lines (70 loc) • 2.33 kB
JavaScript
const node_util = require('node:util');
const node_path = require('node:path');
function parseStack(stack) {
const cwd = process.cwd() + node_path.sep;
const lines = stack.split("\n").splice(1).map((l) => l.trim().replace("file://", "").replace(cwd, ""));
return lines;
}
function writeStream(data, stream) {
const write = stream.__write || stream.write;
return write.call(stream, data);
}
const bracket = (x) => x ? `[${x}]` : "";
class BasicReporter {
formatStack(stack, opts) {
const indent = " ".repeat((opts?.errorLevel || 0) + 1);
return indent + parseStack(stack).join(`
${indent}`);
}
formatError(err, opts) {
const message = err.message ?? node_util.formatWithOptions(opts, err);
const stack = err.stack ? this.formatStack(err.stack, opts) : "";
const level = opts?.errorLevel || 0;
const causedPrefix = level > 0 ? `${" ".repeat(level)}[cause]: ` : "";
const causedError = err.cause ? "\n\n" + this.formatError(err.cause, { ...opts, errorLevel: level + 1 }) : "";
return causedPrefix + message + "\n" + stack + causedError;
}
formatArgs(args, opts) {
const _args = args.map((arg) => {
if (arg && typeof arg.stack === "string") {
return this.formatError(arg, opts);
}
return arg;
});
return node_util.formatWithOptions(opts, ..._args);
}
formatDate(date, opts) {
return opts.date ? date.toLocaleTimeString() : "";
}
filterAndJoin(arr) {
return arr.filter(Boolean).join(" ");
}
formatLogObj(logObj, opts) {
const message = this.formatArgs(logObj.args, opts);
if (logObj.type === "box") {
return "\n" + [
bracket(logObj.tag),
logObj.title && logObj.title,
...message.split("\n")
].filter(Boolean).map((l) => " > " + l).join("\n") + "\n";
}
return this.filterAndJoin([
bracket(logObj.type),
bracket(logObj.tag),
message
]);
}
log(logObj, ctx) {
const line = this.formatLogObj(logObj, {
columns: ctx.options.stdout.columns || 0,
...ctx.options.formatOptions
});
return writeStream(
line + "\n",
logObj.level < 2 ? ctx.options.stderr || process.stderr : ctx.options.stdout || process.stdout
);
}
}
exports.BasicReporter = BasicReporter;
exports.parseStack = parseStack;
;