UNPKG

@pilotlab/lux-debug

Version:

A luxurious user experience framework, developed by your friends at Pilot.

302 lines 14.9 kB
"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