@pilotlab/lux-debug
Version:
A luxurious user experience framework, developed by your friends at Pilot.
302 lines • 14.9 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var lux_is_1 = require("@pilotlab/lux-is");
var lux_strings_1 = require("@pilotlab/lux-strings");
var lux_collections_1 = require("@pilotlab/lux-collections");
var logFormat_1 = require("./logFormat");
var debug_1 = require("./debug");
var logEnums_1 = require("./logEnums");
var logMessage_1 = require("./logMessage");
var logConsole_1 = require("./logConsole");
var Logger = (function () {
function Logger() {
this.isTrace = false;
this.p_categories = new lux_collections_1.MapList();
this.p_console = new logConsole_1.default();
this.p_tagLengthMax = 60;
this.p_lineLengthMax = 120;
this.p_TIME_STAMP_LENGTH = 8;
this.p_SPACE = ' ';
this.p_LABEL_AREA_LENGTH_MAX = 20;
this.p_FILL_SPACES_MIN = 3;
this.p_SPACE_FILLER_START = '';
this.p_SPACE_FILLER = '─';
this.p_INDENT_START = '';
this.p_HEADER_LENGTH = this.p_TIME_STAMP_LENGTH + this.p_SPACE.length + this.p_LABEL_AREA_LENGTH_MAX + (this.p_SPACE.length * 2);
}
Object.defineProperty(Logger, "format", {
get: function () {
if (lux_is_1.default.empty(this._format))
this._format = new logFormat_1.default();
return this._format;
},
enumerable: true,
configurable: true
});
Object.defineProperty(Logger, "time", {
get: function () {
var today = new Date();
var hour = today.getHours();
var minute = today.getMinutes();
var second = today.getSeconds();
return lux_strings_1.Strings.padDigits(hour, 2) + ":" + lux_strings_1.Strings.padDigits(minute, 2) + ":" + lux_strings_1.Strings.padDigits(second, 2);
},
enumerable: true,
configurable: true
});
Logger.setColor = function (text, color) {
switch (color) {
case logEnums_1.LogColor.BLACK:
text = Logger.format.black.value(text);
break;
case logEnums_1.LogColor.BLACK_BRIGHT:
text = Logger.format.blackBright.value(text);
break;
case logEnums_1.LogColor.BLUE:
text = Logger.format.blue.value(text);
break;
case logEnums_1.LogColor.BLUE_BRIGHT:
text = Logger.format.blueBright.value(text);
break;
case logEnums_1.LogColor.CYAN:
text = Logger.format.cyan.value(text);
break;
case logEnums_1.LogColor.CYAN_BRIGHT:
text = Logger.format.cyanBright.value(text);
break;
case logEnums_1.LogColor.GRAY:
text = Logger.format.gray.value(text);
break;
case logEnums_1.LogColor.GREEN:
text = Logger.format.green.value(text);
break;
case logEnums_1.LogColor.GREEN_BRIGHT:
text = Logger.format.greenBright.value(text);
break;
case logEnums_1.LogColor.MAGENTA:
text = Logger.format.magenta.value(text);
break;
case logEnums_1.LogColor.MAGENTA_BRIGHT:
text = Logger.format.magentaBright.value(text);
break;
case logEnums_1.LogColor.ORANGE:
text = Logger.format.orange.value(text);
break;
case logEnums_1.LogColor.RED:
text = Logger.format.red.value(text);
break;
case logEnums_1.LogColor.RED_BRIGHT:
text = Logger.format.redBright.value(text);
break;
case logEnums_1.LogColor.YELLOW:
text = Logger.format.yellow.value(text);
break;
case logEnums_1.LogColor.YELLOW_BRIGHT:
text = Logger.format.yellowBright.value(text);
break;
}
return text;
};
Object.defineProperty(Logger.prototype, "console", {
get: function () { return this.p_console; },
enumerable: true,
configurable: true
});
Object.defineProperty(Logger.prototype, "tagLengthMax", {
get: function () { return this.p_tagLengthMax; },
set: function (value) { this.p_tagLengthMax = value; },
enumerable: true,
configurable: true
});
Object.defineProperty(Logger.prototype, "lineLengthMax", {
get: function () { return this.p_lineLengthMax; },
set: function (value) { this.p_lineLengthMax = value; },
enumerable: true,
configurable: true
});
Logger.prototype.setCategoryMode = function (category, isOn) {
this.p_categories.set(category, isOn);
};
Logger.prototype.isCategoryOn = function (category) {
if (lux_is_1.default.empty(category, true))
return true;
return this.p_categories.get(category);
};
Logger.prototype.assert = function (isConditionMet, message, tag, category) {
if (!isConditionMet)
this.logType(logEnums_1.LogType.ASSERT, message, tag, category);
return isConditionMet;
};
Logger.prototype.data = function (message, tag, category) { return this.logType(logEnums_1.LogType.DATA, message, category); };
Logger.prototype.error = function (message, tag, category) { return this.logType(logEnums_1.LogType.ERROR, message, tag, category); };
Logger.prototype.info = function (message, tag, category) { return this.logType(logEnums_1.LogType.INFO, message, tag, category); };
Logger.prototype.warn = function (message, tag, category) { return this.logType(logEnums_1.LogType.WARNING, message, tag, category); };
Logger.prototype.log = function (message, tag, category) { return this.logType(logEnums_1.LogType.LOG, message, tag, category); };
Logger.prototype.test = function (message, tag, category) { return this.logType(logEnums_1.LogType.TEST, message, tag, category); };
Logger.prototype.logType = function (type, message, tag, category) {
switch (type) {
case logEnums_1.LogType.ASSERT:
return this.custom(message, logEnums_1.LogType[logEnums_1.LogType.ASSERT], logEnums_1.LogColor.ORANGE, tag, category);
case logEnums_1.LogType.DATA:
return this.custom(JSON.stringify(message), logEnums_1.LogType[logEnums_1.LogType.DATA], logEnums_1.LogColor.BLUE_BRIGHT, debug_1.default.getClassName(message), category);
case logEnums_1.LogType.ERROR:
return this.custom(message, logEnums_1.LogType[logEnums_1.LogType.ERROR], logEnums_1.LogColor.RED_BRIGHT, tag, category);
case logEnums_1.LogType.INFO:
return this.custom(message, logEnums_1.LogType[logEnums_1.LogType.INFO], logEnums_1.LogColor.CYAN_BRIGHT, tag, category);
case logEnums_1.LogType.WARNING:
return this.custom(message, logEnums_1.LogType[logEnums_1.LogType.WARNING], logEnums_1.LogColor.YELLOW_BRIGHT, tag, category);
case logEnums_1.LogType.LOG:
return this.custom(message, logEnums_1.LogType[logEnums_1.LogType.LOG], logEnums_1.LogColor.GREEN_BRIGHT, tag, category);
case logEnums_1.LogType.TEST:
return this.custom(message, logEnums_1.LogType[logEnums_1.LogType.TEST], logEnums_1.LogColor.MAGENTA_BRIGHT, tag, category);
}
};
Logger.prototype.custom = function (message, label, labelColor, tag, category, spinnerCharacter) {
if (label === void 0) { label = ''; }
if (labelColor === void 0) { labelColor = logEnums_1.LogColor.GRAY; }
if (spinnerCharacter === void 0) { spinnerCharacter = ' '; }
if (lux_is_1.default.notEmpty(category, true) && !this.isCategoryOn(category))
return new logMessage_1.default(this, label, labelColor, message, 0, tag, category);
if (!message)
message = '';
if (!spinnerCharacter || spinnerCharacter === '')
spinnerCharacter = ' ';
var error = message instanceof Error ? message : new Error(message.toString());
var messageString = error ? error.message : '';
var timeStamp = Logger.time;
var logString = Logger.format.gray.value(timeStamp);
var lineCount = 1;
var labelFormatted = '';
var labelLengthMax = this.p_LABEL_AREA_LENGTH_MAX - this.p_FILL_SPACES_MIN - this.p_SPACE.length;
if (label && label !== '' && typeof label === 'string') {
labelFormatted = label;
if (labelFormatted.length > labelLengthMax) {
labelFormatted = labelFormatted.slice(0, labelLengthMax - 3);
while (labelFormatted.length < labelLengthMax)
labelFormatted += '.';
}
}
var spaceFiller = this.p_SPACE + this.p_SPACE_FILLER_START;
var labelFormattedLength = labelFormatted.length;
while (spaceFiller.length < this.p_LABEL_AREA_LENGTH_MAX - labelFormattedLength)
spaceFiller += this.p_SPACE_FILLER;
if (labelFormatted && labelFormatted !== '')
spaceFiller += this.p_SPACE;
else {
for (var i = 0; i < this.p_SPACE.length; i++) {
spaceFiller += this.p_SPACE_FILLER;
}
}
logString += Logger.format.gray.value(spaceFiller);
switch (labelColor) {
case logEnums_1.LogColor.BLACK:
logString += Logger.format.bold.black.value(labelFormatted);
break;
case logEnums_1.LogColor.BLACK_BRIGHT:
logString += Logger.format.bold.blackBright.value(labelFormatted);
break;
case logEnums_1.LogColor.BLUE:
logString += Logger.format.bold.blue.value(labelFormatted);
break;
case logEnums_1.LogColor.BLUE_BRIGHT:
logString += Logger.format.bold.blueBright.value(labelFormatted);
break;
case logEnums_1.LogColor.CYAN:
logString += Logger.format.bold.cyan.value(labelFormatted);
break;
case logEnums_1.LogColor.CYAN_BRIGHT:
logString += Logger.format.bold.cyanBright.value(labelFormatted);
break;
case logEnums_1.LogColor.GRAY:
logString += Logger.format.bold.gray.value(labelFormatted);
break;
case logEnums_1.LogColor.GREEN:
logString += Logger.format.bold.green.value(labelFormatted);
break;
case logEnums_1.LogColor.GREEN_BRIGHT:
logString += Logger.format.bold.greenBright.value(labelFormatted);
break;
case logEnums_1.LogColor.MAGENTA:
logString += Logger.format.bold.magenta.value(labelFormatted);
break;
case logEnums_1.LogColor.MAGENTA_BRIGHT:
logString += Logger.format.bold.magentaBright.value(labelFormatted);
break;
case logEnums_1.LogColor.ORANGE:
logString += Logger.format.bold.orange.value(labelFormatted);
break;
case logEnums_1.LogColor.RED:
logString += Logger.format.bold.red.value(labelFormatted);
break;
case logEnums_1.LogColor.RED_BRIGHT:
logString += Logger.format.bold.redBright.value(labelFormatted);
break;
case logEnums_1.LogColor.YELLOW:
logString += Logger.format.bold.yellow.value(labelFormatted);
break;
case logEnums_1.LogColor.YELLOW_BRIGHT:
logString += Logger.format.bold.yellowBright.value(labelFormatted);
break;
}
var tagFormatted = '';
if (tag && typeof tag === 'string') {
tagFormatted = tag;
if (tagFormatted.length > this.tagLengthMax) {
tagFormatted = tagFormatted.slice(0, this.tagLengthMax - 3);
while (tagFormatted.length < this.tagLengthMax)
tagFormatted += '.';
}
tagFormatted = this.p_SPACE + this.p_SPACE + Logger.format.gray.value("" + tagFormatted);
}
logString += ' ' + spinnerCharacter;
if (messageString.length > this.lineLengthMax) {
var messageLines = [];
var tabSpace = '';
while (tabSpace.length < (timeStamp.length + this.p_SPACE.length))
tabSpace += ' ';
tabSpace += this.p_INDENT_START;
while (tabSpace.length < this.p_HEADER_LENGTH)
tabSpace += ' ';
messageLines = lux_strings_1.Strings.getLines(messageString, this.lineLengthMax);
lineCount = messageLines.length;
logString += this.p_SPACE + messageLines[0];
logString += tagFormatted + '\n';
for (var i = 1; i < messageLines.length; i++) {
logString += Logger.format.gray.value("" + tabSpace) + messageLines[i] + '\n';
}
}
else {
logString += this.p_SPACE + (messageString && messageString !== '' ? Logger.format.whiteBright.value(messageString) : Logger.format.gray.value('null, undefined, or empty message'));
logString += tagFormatted;
}
console.log(logString);
if (this.isTrace && error.stack) {
var traceString = error.stack.toString();
var traceStringFormatted = '';
if (traceString.length > this.lineLengthMax) {
var tabSpace = '';
while (tabSpace.length < this.p_HEADER_LENGTH)
tabSpace += ' ';
var traceLines = lux_strings_1.Strings.getLines(traceString, this.lineLengthMax);
for (var i = 0; i < traceLines.length; i++) {
traceStringFormatted += tabSpace + Logger.format.bgBlackBright.value(Logger.format.white.value(traceLines[i])) + '\n';
}
}
else {
traceStringFormatted +=
this.p_SPACE + this.p_SPACE + (traceString && traceString !== '' ?
Logger.format.whiteBright.value(traceString) :
Logger.format.gray.value('null, undefined, or empty message'));
}
console.log('');
console.log(traceStringFormatted);
console.log('');
}
var logMessage = new logMessage_1.default(this, label, labelColor, message, lineCount, tag, category, this.p_HEADER_LENGTH);
return logMessage;
};
return Logger;
}());
exports.Logger = Logger;
exports.default = Logger;
//# sourceMappingURL=logger.js.map