@backtrace/javascript-cli
Version:
Backtrace CLI for working with Javascript files.
100 lines • 2.94 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.createLogger = exports.CliLogger = void 0;
const util_1 = require("util");
class CliLogger {
constructor(options) {
this.options = options;
this._levelMap = this.createLevelMap(options.level);
}
clone(options) {
return new CliLogger({ ...this.options, ...options });
}
output(value, ...args) {
return this.log('output', value, ...args);
}
fatal(value, ...args) {
return this.log('fatal', value, ...args);
}
error(value, ...args) {
return this.log('error', value, ...args);
}
warn(value, ...args) {
return this.log('warn', value, ...args);
}
info(value, ...args) {
return this.log('info', value, ...args);
}
debug(value, ...args) {
return this.log('debug', value, ...args);
}
trace(value, ...args) {
return this.log('trace', value, ...args);
}
log(level, value, ...args) {
const isOutput = level === 'output';
if (this.options.silent) {
return;
}
if (!this._levelMap[level]) {
return;
}
const logger = isOutput
? (...args) => console.log(...args)
: (...args) => console.error(...args);
const message = [];
if (this.options.prefix) {
message.push(`${this.options.prefix}`);
}
if (!isOutput) {
message.push(`${level}:`);
}
if (value instanceof Error) {
message.push(...args, value);
}
else {
message.push(value, ...args);
}
logger((0, util_1.format)(...message));
}
createLevelMap(level) {
const levelMap = {
output: 0,
fatal: 1,
error: 2,
warn: 3,
info: 4,
debug: 5,
trace: 6,
};
return {
output: levelMap[level] >= levelMap['output'],
fatal: levelMap[level] >= levelMap['fatal'],
error: levelMap[level] >= levelMap['error'],
warn: levelMap[level] >= levelMap['warn'],
info: levelMap[level] >= levelMap['info'],
debug: levelMap[level] >= levelMap['debug'],
trace: levelMap[level] >= levelMap['trace'],
};
}
}
exports.CliLogger = CliLogger;
function createLogger(options) {
let level;
if (options?.['log-level']) {
level = options?.['log-level'];
}
else if (options?.verbose) {
switch (options.verbose.length) {
case 1:
level = 'debug';
break;
case 2:
level = 'trace';
break;
}
}
return new CliLogger({ level: level ?? 'info', silent: options?.quiet });
}
exports.createLogger = createLogger;
//# sourceMappingURL=logger.js.map
;