@reyalp/debug-utils
Version:
ts transformers for debug
102 lines (101 loc) • 4.33 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.LoggerDefaults = exports.DefaultLogPrinter = exports.DefaultLogFilter = exports.parseLogLevel = exports.DefaultLogFilterConfigs = exports.DefaultLogWriter = exports.DefaultLogFormatter = exports.Logger = exports.LogLevel = void 0;
const strftime_1 = __importDefault(require("strftime"));
const util_1 = require("util");
const prelude_1 = require("./prelude");
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
LogLevel[LogLevel["WARN"] = 1] = "WARN";
LogLevel[LogLevel["INFO"] = 2] = "INFO";
LogLevel[LogLevel["VERBOSE"] = 3] = "VERBOSE";
LogLevel[LogLevel["DEBUG"] = 4] = "DEBUG";
LogLevel[LogLevel["SILLY"] = 5] = "SILLY";
})(LogLevel || (exports.LogLevel = LogLevel = {}));
class Logger {
constructor(tags, impls) {
this.tags = tags;
this.rt = { LogLevel, ...exports.LoggerDefaults, ...impls };
}
tag(...tags) { void tags; return (0, prelude_1._not_transformed)(); }
dump(...exprs) { void exprs; return (0, prelude_1._not_transformed)(); }
error(...messages) { void messages; return (0, prelude_1._not_transformed)(); }
warn(...messages) { void messages; return (0, prelude_1._not_transformed)(); }
info(...messages) { void messages; return (0, prelude_1._not_transformed)(); }
verbose(...messages) { void messages; return (0, prelude_1._not_transformed)(); }
debug(...messages) { void messages; return (0, prelude_1._not_transformed)(); }
silly(...messages) { void messages; return (0, prelude_1._not_transformed)(); }
extend(...args) {
const [tags, impls] = args.length === 0 ? [[], {}]
: typeof args.at(-1) === 'string' ? [args, {}]
: [args.slice(0, -1), args.at(-1)];
return new Logger([...new Set(this.tags.concat(tags))], { ...this.rt, ...impls });
}
static create(...args) {
const [tags, impls] = args.length === 0 ? [[], {}]
: typeof args.at(-1) === 'string' ? [args, {}]
: [args.slice(0, -1), args.at(-1)];
return new Logger([...new Set(tags)], impls);
}
}
exports.Logger = Logger;
const DefaultLogFormatter = (messages, ll, tags, _rt, file, line, name) => {
const where = file ? ` ${file}:${line} ${name}` : '';
const label = `${(0, strftime_1.default)('%m-%d %T.%L')} ${'EWIVDS'[ll]}${tags.length ? (' (' + tags.join('|') + ')') : ''}${where}`;
const lines = messages.join(' ').split('\n').map(s => s.trimEnd());
if (lines.length === 0)
return [label + ':'];
if (lines.length === 1)
return [label + ': ' + lines[0]];
const indent = ' '.repeat(label.length);
return lines.map((s, i) => (i ? indent : label) + (i ? '| ' : ': ') + s);
};
exports.DefaultLogFormatter = DefaultLogFormatter;
const DefaultLogWriter = lines => {
for (const line of lines)
console.log(line);
};
exports.DefaultLogWriter = DefaultLogWriter;
exports.DefaultLogFilterConfigs = {
level: LogLevel.DEBUG,
masks: {}
};
const min = LogLevel.ERROR;
const max = LogLevel.SILLY;
function parseLogLevel(l) {
if (typeof l === 'number') {
return l >= min && l <= max ? l : undefined;
}
else {
const name = l.toUpperCase();
return LogLevel[name];
}
}
exports.parseLogLevel = parseLogLevel;
const DefaultLogFilter = (ll, tags) => {
if (ll > exports.DefaultLogFilterConfigs.level)
return false;
if (tags.length === 0)
return true;
for (const t of tags) {
if (exports.DefaultLogFilterConfigs.masks[t]) {
return false;
}
}
return true;
};
exports.DefaultLogFilter = DefaultLogFilter;
const _inspect = (obj) => (0, util_1.inspect)(obj, false, null, false);
const DefaultLogPrinter = (obj, hint) => hint ? _inspect(obj) : ((0, util_1.inspect)(obj) + ` ::${hint}`);
exports.DefaultLogPrinter = DefaultLogPrinter;
exports.LoggerDefaults = {
filter: exports.DefaultLogFilter,
format: exports.DefaultLogFormatter,
inspect: exports.DefaultLogPrinter,
write: exports.DefaultLogWriter,
};
const runtime = { LogLevel, ...exports.LoggerDefaults };