makit
Version:
Make in JavaScript done right!
82 lines (81 loc) • 2.69 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = exports.hlTarget = exports.LogLevel = void 0;
const chalk_1 = __importDefault(require("chalk"));
var LogLevel;
(function (LogLevel) {
LogLevel[LogLevel["error"] = 0] = "error";
LogLevel[LogLevel["warning"] = 1] = "warning";
LogLevel[LogLevel["info"] = 2] = "info";
LogLevel[LogLevel["verbose"] = 3] = "verbose";
LogLevel[LogLevel["debug"] = 4] = "debug";
LogLevel[LogLevel["default"] = 2] = "default";
})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
function hlTarget(str) {
return chalk_1.default['cyan'](str);
}
exports.hlTarget = hlTarget;
class Logger {
constructor(logLevel = LogLevel.default) {
this.logLevel = logLevel;
this.suspended = false;
}
static getOrCreate(logLevel) {
if (!Logger.instance) {
Logger.instance = new Logger(logLevel);
}
logLevel !== undefined && Logger.instance.setLevel(logLevel);
return Logger.instance;
}
resume() {
this.suspended = false;
}
suspend() {
this.suspended = true;
}
setLevel(level) {
if (level < LogLevel.error || level > LogLevel.debug)
throw new Error('invalid loglevel');
this.logLevel = level;
}
getLevel() {
return this.logLevel;
}
error(title, ...args) {
if (this.suspended || this.logLevel < LogLevel.error)
return;
this.doLog(chalk_1.default.red(title), args);
}
warning(title, ...args) {
if (this.suspended || this.logLevel < LogLevel.warning)
return;
this.doLog(chalk_1.default.yellow(title), args);
}
info(title, ...args) {
if (this.suspended || this.logLevel < LogLevel.info)
return;
this.doLog(chalk_1.default.cyan(title), args);
}
infoStr(str) {
if (this.suspended || this.logLevel < LogLevel.info)
return;
process.stdout.write(str);
}
verbose(title, ...args) {
if (this.suspended || this.logLevel < LogLevel.verbose)
return;
this.doLog(chalk_1.default.gray(title), args);
}
debug(title, ...args) {
if (this.suspended || this.logLevel < LogLevel.debug)
return;
this.doLog(chalk_1.default.magenta(title), args);
}
doLog(title, args) {
console.log(chalk_1.default.inverse(title), ...args.map(x => typeof x === 'function' ? x() : x));
}
}
exports.Logger = Logger;