UNPKG

colorprint

Version:
201 lines (163 loc) 17.2 kB
/** * Colorpint context. * @memberof module:colorprint/lib * @inner * @constructor Colorprint * @param {object} config - Context configuration. */ 'use strict'; var formatMsg = require('./msg/format_msg'); var decorateMsg = require('./msg/decorate_msg'); var indentMsg = require('./msg/indent_msg'); /** @lends module:colorprint/lib~Colorprint */ function Colorprint() { this.init.apply(this, arguments); } Colorprint.prototype = { disabled: false, prepareMsg: function prepareMsg() { var msg = formatMsg.apply(formatMsg, arguments); return [this.PREFIX, indentMsg(msg, this.indent), this.SUFFIX].join(''); }, writeToStdout: function writeToStdout(msg, color) { if (this.disabled) { return; } console.log(decorateMsg(msg, color)); }, writeToStderr: function writeToStderr(msg, color) { console.error(decorateMsg(msg, color)); }, /** Color for point print. */ POINT_COLOR: 'blue', /** Color for notice print. */ NOTICE_COLOR: 'magenta', /** Color for info print. */ INFO_COLOR: 'green', /** Color for debug print. */ DEBUG_COLOR: '', /** Color for trace print. */ TRACE_COLOR: 'white', /** Color for warn print. */ WARN_COLOR: 'yellow', /** Color for error print. */ ERROR_COLOR: 'red', /** Color for error_detail print. */ ERROR_DETAIL_COLOR: '', /** Color for fatal print. */ FATAL_COLOR: 'bgRed', /** Alias for module:colorprint/lib~Colorprint#point. */ POINT: function POINT() { this.point.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#notice. */ NOTICE: function NOTICE() { this.notice.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#info. */ INFO: function INFO() { this.info.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#debug. */ DEBUG: function DEBUG() { this.debug.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#trace. */ TRACE: function TRACE() { this.trace.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#warn. */ WARN: function WARN() { this.warn.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#error. */ ERROR: function ERROR() { this.error.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#error_detail. */ ERROR_DETAIL: function ERROR_DETAIL() { this.error_detail.apply(this, arguments); }, /** Alias for module:colorprint/lib~Colorprint#fatal. */ FATAL: function FATAL() { this.fatal.apply(this, arguments); }, /** @constructs module:colorprint/lib~Colorprint */ init: function init() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; Object.assign(this, config); this.PREFIX = config.prefix || this.PREFIX; this.SUFFIX = config.suffix || this.SUFFIX; }, /** Number of indent */ indent: 0, /** Message prefix */ PREFIX: '', /** Message suffix */ SUFFIX: '', /** * Print point message. * @param {...string} msg - Message to print. */ point: function point(msg) { this.writeToStdout(this.prepareMsg.apply(this, arguments), this.POINT_COLOR); }, /** * Print notice message. * @param {...string} msg - Message to print. */ notice: function notice(msg) { this.writeToStdout(this.prepareMsg.apply(this, arguments), this.NOTICE_COLOR); }, /** * Print info message. * @param {...string} msg - Message to print. */ info: function info(msg) { this.writeToStdout(this.prepareMsg.apply(this, arguments), this.INFO_COLOR); }, /** * Print debug message. * @param {...string} msg - Message to print. */ debug: function debug(msg) { this.writeToStdout(this.prepareMsg.apply(this, arguments), this.DEBUG_COLOR); }, /** * Print trace message. * @param {...string} msg - Message to print. */ trace: function trace(msg) { this.writeToStdout(this.prepareMsg.apply(this, arguments), this.TRACE_COLOR); }, /** * Print warn message. * @param {...string} msg - Message to print. */ warn: function warn(msg) { this.writeToStdout(this.prepareMsg.apply(this, arguments), this.WARN_COLOR); }, /** * Print error message. * @param {...string} msg - Message to print. */ error: function error(msg) { this.writeToStderr(this.prepareMsg.apply(this, arguments), this.ERROR_COLOR); }, /** * Print error_detail message. * @param {...string} msg - Message to print. */ errorDetail: function errorDetail(msg) { this.writeToStderr(this.prepareMsg.apply(this, arguments), this.ERROR_DETAIL_COLOR); }, /** * Print fatal message. * @param {...string} msg - Message to print. */ fatal: function fatal(msg) { this.writeToStderr(this.prepareMsg.apply(this, arguments), this.FATAL_COLOR); } }; module.exports = Colorprint; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbG9ycHJpbnQuanMiXSwibmFtZXMiOlsiZm9ybWF0TXNnIiwicmVxdWlyZSIsImRlY29yYXRlTXNnIiwiaW5kZW50TXNnIiwiQ29sb3JwcmludCIsImluaXQiLCJhcHBseSIsImFyZ3VtZW50cyIsInByb3RvdHlwZSIsImRpc2FibGVkIiwicHJlcGFyZU1zZyIsIm1zZyIsIlBSRUZJWCIsImluZGVudCIsIlNVRkZJWCIsImpvaW4iLCJ3cml0ZVRvU3Rkb3V0IiwiY29sb3IiLCJjb25zb2xlIiwibG9nIiwid3JpdGVUb1N0ZGVyciIsImVycm9yIiwiUE9JTlRfQ09MT1IiLCJOT1RJQ0VfQ09MT1IiLCJJTkZPX0NPTE9SIiwiREVCVUdfQ09MT1IiLCJUUkFDRV9DT0xPUiIsIldBUk5fQ09MT1IiLCJFUlJPUl9DT0xPUiIsIkVSUk9SX0RFVEFJTF9DT0xPUiIsIkZBVEFMX0NPTE9SIiwiUE9JTlQiLCJwb2ludCIsIk5PVElDRSIsIm5vdGljZSIsIklORk8iLCJpbmZvIiwiREVCVUciLCJkZWJ1ZyIsIlRSQUNFIiwidHJhY2UiLCJXQVJOIiwid2FybiIsIkVSUk9SIiwiRVJST1JfREVUQUlMIiwiZXJyb3JfZGV0YWlsIiwiRkFUQUwiLCJmYXRhbCIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsInByZWZpeCIsInN1ZmZpeCIsImVycm9yRGV0YWlsIiwibW9kdWxlIiwiZXhwb3J0cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7QUFRQTs7QUFFQSxJQUFNQSxTQUFTLEdBQUdDLE9BQU8sQ0FBQyxrQkFBRCxDQUF6Qjs7QUFDQSxJQUFNQyxXQUFXLEdBQUdELE9BQU8sQ0FBQyxvQkFBRCxDQUEzQjs7QUFDQSxJQUFNRSxTQUFTLEdBQUdGLE9BQU8sQ0FBQyxrQkFBRCxDQUF6QjtBQUVBOzs7QUFDQSxTQUFTRyxVQUFULEdBQXVCO0FBQ3JCLE9BQUtDLElBQUwsQ0FBVUMsS0FBVixDQUFnQixJQUFoQixFQUFzQkMsU0FBdEI7QUFDRDs7QUFFREgsVUFBVSxD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UCxHQUFpQm5ELFVBQWpCIiwic291cmNlUm9vdCI6Ii4uLy4uL2xpYiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29sb3JwaW50IGNvbnRleHQuXG4gKiBAbWVtYmVyb2YgbW9kdWxlOmNvbG9ycHJpbnQvbGliXG4gKiBAaW5uZXJcbiAqIEBjb25zdHJ1Y3RvciBDb2xvcnByaW50XG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIC0gQ29udGV4dCBjb25maWd1cmF0aW9uLlxuICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBmb3JtYXRNc2cgPSByZXF1aXJlKCcuL21zZy9mb3JtYXRfbXNnJylcbmNvbnN0IGRlY29yYXRlTXNnID0gcmVxdWlyZSgnLi9tc2cvZGVjb3JhdGVfbXNnJylcbmNvbnN0IGluZGVudE1zZyA9IHJlcXVpcmUoJy4vbXNnL2luZGVudF9tc2cnKVxuXG4vKiogQGxlbmRzIG1vZHVsZTpjb2xvcnByaW50L2xpYn5Db2xvcnByaW50ICovXG5mdW5jdGlvbiBDb2xvcnByaW50ICgpIHtcbiAgdGhpcy5pbml0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQ29sb3JwcmludC5wcm90b3R5cGUgPSB7XG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgcHJlcGFyZU1zZyAoKSB7XG4gICAgY29uc3QgbXNnID0gZm9ybWF0TXNnLmFwcGx5KGZvcm1hdE1zZywgYXJndW1lbnRzKVxuICAgIHJldHVybiBbdGhpcy5QUkVGSVgsIGluZGVudE1zZyhtc2csIHRoaXMuaW5kZW50KSwgdGhpcy5TVUZGSVhdLmpvaW4oJycpXG4gIH0sXG4gIHdyaXRlVG9TdGRvdXQgKG1zZywgY29sb3IpIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnNvbGUubG9nKGRlY29yYXRlTXNnKG1zZywgY29sb3IpKVxuICB9LFxuICB3cml0ZVRvU3RkZXJyIChtc2csIGNvbG9yKSB7XG4gICAgY29uc29sZS5lcnJvcihkZWNvcmF0ZU1zZyhtc2csIGNvbG9yKSlcbiAgfSxcbiAgLyoqIENvbG9yIGZvciBwb2ludCBwcmludC4gKi9cbiAgUE9JTlRfQ09MT1I6ICdibHVlJyxcbiAgLyoqIENvbG9yIGZvciBub3RpY2UgcHJpbnQuICovXG4gIE5PVElDRV9DT0xPUjogJ21hZ2VudGEnLFxuICAvKiogQ29sb3IgZm9yIGluZm8gcHJpbnQuICovXG4gIElORk9fQ09MT1I6ICdncmVlbicsXG4gIC8qKiBDb2xvciBmb3IgZGVidWcgcHJpbnQuICovXG4gIERFQlVHX0NPTE9SOiAnJyxcbiAgLyoqIENvbG9yIGZvciB0cmFjZSBwcmludC4gKi9cbiAgVFJBQ0VfQ09MT1I6ICd3aGl0ZScsXG4gIC8qKiBDb2xvciBmb3Igd2FybiBwcmludC4gKi9cbiAgV0FSTl9DT0xPUjogJ3llbGxvdycsXG4gIC8qKiBDb2xvciBmb3IgZXJyb3IgcHJpbnQuICovXG4gIEVSUk9SX0NPTE9SOiAncmVkJyxcbiAgLyoqIENvbG9yIGZvciBlcnJvcl9kZXRhaWwgcHJpbnQuICovXG4gIEVSUk9SX0RFVEFJTF9DT0xPUjogJycsXG4gIC8qKiBDb2xvciBmb3IgZmF0YWwgcHJpbnQuICovXG4gIEZBVEFMX0NPTE9SOiAnYmdSZWQnLFxuICAvKiogQWxpYXMgZm9yIG1vZHVsZTpjb2xvcnByaW50L2xpYn5Db2xvcnByaW50I3BvaW50LiAqL1xuICBQT0lOVCAoKSB7XG4gICAgdGhpcy5wb2ludC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG4gIC8qKiBBbGlhcyBmb3IgbW9kdWxlOmNvbG9ycHJpbnQvbGlifkNvbG9ycHJpbnQjbm90aWNlLiAqL1xuICBOT1RJQ0UgKCkge1xuICAgIHRoaXMubm90aWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfSxcbiAgLyoqIEFsaWFzIGZvciBtb2R1bGU6Y29sb3JwcmludC9saWJ+Q29sb3JwcmludCNpbmZvLiAqL1xuICBJTkZPICgpIHtcbiAgICB0aGlzLmluZm8uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9LFxuICAvKiogQWxpYXMgZm9yIG1vZHVsZTpjb2xvcnByaW50L2xpYn5Db2xvcnByaW50I2RlYnVnLiAqL1xuICBERUJVRyAoKSB7XG4gICAgdGhpcy5kZWJ1Zy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG4gIC8qKiBBbGlhcyBmb3IgbW9kdWxlOmNvbG9ycHJpbnQvbGlifkNvbG9ycHJpbnQjdHJhY2UuICovXG4gIFRSQUNFICgpIHtcbiAgICB0aGlzLnRyYWNlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfSxcbiAgLyoqIEFsaWFzIGZvciBtb2R1bGU6Y29sb3JwcmludC9saWJ+Q29sb3JwcmludCN3YXJuLiAqL1xuICBXQVJOICgpIHtcbiAgICB0aGlzLndhcm4uYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9LFxuICAvKiogQWxpYXMgZm9yIG1vZHVsZTpjb2xvcnByaW50L2xpYn5Db2xvcnByaW50I2Vycm9yLiAqL1xuICBFUlJPUiAoKSB7XG4gICAgdGhpcy5lcnJvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG4gIH0sXG4gIC8qKiBBbGlhcyBmb3IgbW9kdWxlOmNvbG9ycHJpbnQvbGlifkNvbG9ycHJpbnQjZXJyb3JfZGV0YWlsLiAqL1xuICBFUlJPUl9ERVRBSUwgKCkge1xuICAgIHRoaXMuZXJyb3JfZGV0YWlsLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbiAgfSxcbiAgLyoqIEFsaWFzIGZvciBtb2R1bGU6Y29sb3JwcmludC9saWJ+Q29sb3JwcmludCNmYXRhbC4gKi9cbiAgRkFUQUwgKCkge1xuICAgIHRoaXMuZmF0YWwuYXBwbHkodGhpcywgYXJndW1lbnRzKVxuICB9LFxuICAvKiogQGNvbnN0cnVjdHMgbW9kdWxlOmNvbG9ycHJpbnQvbGlifkNvbG9ycHJpbnQgKi9cbiAgaW5pdCAoY29uZmlnID0ge30pIHtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIGNvbmZpZylcbiAgICB0aGlzLlBSRUZJWCA9IGNvbmZpZy5wcmVmaXggfHwgdGhpcy5QUkVGSVhcbiAgICB0aGlzLlNVRkZJWCA9IGNvbmZpZy5zdWZmaXggfHwgdGhpcy5TVUZGSVhcbiAgfSxcbiAgLyoqIE51bWJlciBvZiBpbmRlbnQgKi9cbiAgaW5kZW50OiAwLFxuICAvKiogTWVzc2FnZSBwcmVmaXggKi9cbiAgUFJFRklYOiAnJyxcbiAgLyoqIE1lc3NhZ2Ugc3VmZml4ICovXG4gIFNVRkZJWDogJycsXG4gIC8qKlxuICAgKiBQcmludCBwb2ludCBtZXNzYWdlLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30gbXNnIC0gTWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHBvaW50IChtc2cpIHtcbiAgICB0aGlzLndyaXRlVG9TdGRvdXQodGhpcy5wcmVwYXJlTXNnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuUE9JTlRfQ09MT1IpXG4gIH0sXG4gIC8qKlxuICAgKiBQcmludCBub3RpY2UgbWVzc2FnZS5cbiAgICogQHBhcmFtIHsuLi5zdHJpbmd9IG1zZyAtIE1lc3NhZ2UgdG8gcHJpbnQuXG4gICAqL1xuICBub3RpY2UgKG1zZykge1xuICAgIHRoaXMud3JpdGVUb1N0ZG91dCh0aGlzLnByZXBhcmVNc2cuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpcy5OT1RJQ0VfQ09MT1IpXG4gIH0sXG4gIC8qKlxuICAgKiBQcmludCBpbmZvIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBtc2cgLSBNZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgaW5mbyAobXNnKSB7XG4gICAgdGhpcy53cml0ZVRvU3Rkb3V0KHRoaXMucHJlcGFyZU1zZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLklORk9fQ09MT1IpXG4gIH0sXG4gIC8qKlxuICAgKiBQcmludCBkZWJ1ZyBtZXNzYWdlLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30gbXNnIC0gTWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIGRlYnVnIChtc2cpIHtcbiAgICB0aGlzLndyaXRlVG9TdGRvdXQodGhpcy5wcmVwYXJlTXNnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuREVCVUdfQ09MT1IpXG4gIH0sXG4gIC8qKlxuICAgKiBQcmludCB0cmFjZSBtZXNzYWdlLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30gbXNnIC0gTWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIHRyYWNlIChtc2cpIHtcbiAgICB0aGlzLndyaXRlVG9TdGRvdXQodGhpcy5wcmVwYXJlTXNnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuVFJBQ0VfQ09MT1IpXG4gIH0sXG4gIC8qKlxuICAgKiBQcmludCB3YXJuIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBtc2cgLSBNZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgd2FybiAobXNnKSB7XG4gICAgdGhpcy53cml0ZVRvU3Rkb3V0KHRoaXMucHJlcGFyZU1zZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLldBUk5fQ09MT1IpXG4gIH0sXG4gIC8qKlxuICAgKiBQcmludCBlcnJvciBtZXNzYWdlLlxuICAgKiBAcGFyYW0gey4uLnN0cmluZ30gbXNnIC0gTWVzc2FnZSB0byBwcmludC5cbiAgICovXG4gIGVycm9yIChtc2cpIHtcbiAgICB0aGlzLndyaXRlVG9TdGRlcnIodGhpcy5wcmVwYXJlTXNnLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHRoaXMuRVJST1JfQ09MT1IpXG4gIH0sXG4gIC8qKlxuICAgKiBQcmludCBlcnJvcl9kZXRhaWwgbWVzc2FnZS5cbiAgICogQHBhcmFtIHsuLi5zdHJpbmd9IG1zZyAtIE1lc3NhZ2UgdG8gcHJpbnQuXG4gICAqL1xuICBlcnJvckRldGFpbCAobXNnKSB7XG4gICAgdGhpcy53cml0ZVRvU3RkZXJyKHRoaXMucHJlcGFyZU1zZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCB0aGlzLkVSUk9SX0RFVEFJTF9DT0xPUilcbiAgfSxcbiAgLyoqXG4gICAqIFByaW50IGZhdGFsIG1lc3NhZ2UuXG4gICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBtc2cgLSBNZXNzYWdlIHRvIHByaW50LlxuICAgKi9cbiAgZmF0YWwgKG1zZykge1xuICAgIHRoaXMud3JpdGVUb1N0ZGVycih0aGlzLnByZXBhcmVNc2cuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgdGhpcy5GQVRBTF9DT0xPUilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENvbG9ycHJpbnRcbiJdfQ==