log-ocd
Version:
the best node.js logger
133 lines (113 loc) • 3.2 kB
JavaScript
/**
* -----------------------------------------------------------------------------
* LOG-OCD: STYLE NEW-THEME
* -----------------------------------------------------------------------------
* @version 1.0.0-beta.11
* @see [log-ocd]{@link https://github.com/imaginate/log-ocd}
*
* @author Adam Smith <imagineadamsmith@gmail.com> (https://github.com/imaginate)
* @copyright 2022 Adam A Smith <imagineadamsmith@gmail.com> (https://github.com/imaginate)
*
* Supporting Libraries:
* @see [chalk]{@link https://github.com/chalk/chalk}
* @see [vitals]{@link https://github.com/imaginate/vitals}
*
* Annotations:
* @see [JSDoc3]{@link http://usejsdoc.org/}
* @see [Closure Compiler specific JSDoc]{@link https://developers.google.com/closure/compiler/docs/js-for-compiler}
*/
;
var capFirst = require('../../../helpers/cap-first');
var help = require('../../../helpers');
var cut = help.cut;
var each = help.each;
var freeze = help.freeze;
var fuse = help.fuse;
var has = help.has;
var MODIFIERS = 'bold,dim,hidden,inverse,italic,reset,strikethrough,underline';
var COLORS = freeze([
'black','red','green','yellow','blue','magenta','cyan','white','gray'
]);
var BGS = freeze([
'black','red','green','yellow','blue','magenta','cyan','white'
]);
var COLOR_ERROR = fuse('invalid color (opts: ', COLORS.join(','), ')');
var BG_ERROR = fuse('invalid bg (opts: ', BGS.join(','), ')');
exports['color'] = setColor;
exports['bg'] = setBG;
each(MODIFIERS, function(mod) {
exports[mod] = newModSetter(mod);
});
freeze(exports);
/**
* @this {(Theme|MainTheme)}
* @param {string} curr
* @param {string} prev
* @return {string}
*/
function setColor(curr, prev) {
/** @type {!Error} */
var error;
/** @type {!Array<string>} */
var keys;
if ( curr && !has.val(COLORS, curr) ) {
error = new Error(COLOR_ERROR);
error.__setter = true;
error.__type = true;
throw error;
}
keys = this.__keys || [];
if (prev) keys = cut.val(keys, prev);
if (curr) keys = fuse.val(keys, curr);
this.__keys = keys.length ? keys : null;
return curr;
}
/**
* @this {(Theme|MainTheme)}
* @param {string} curr
* @param {string} prev
* @return {string}
*/
function setBG(curr, prev) {
/** @type {!Error} */
var error;
/** @type {!Array<string>} */
var keys;
if ( curr && !has.val(BGS, curr) ) {
error = new Error(BG_ERROR);
error.__setter = true;
error.__type = true;
throw error;
}
keys = this.__keys || [];
if (prev) keys = cut.val(keys, prev);
if (curr) {
curr = capFirst(curr);
curr = fuse('bg', curr);
keys = fuse.val(keys, curr);
}
this.__keys = keys.length ? keys : null;
return curr;
}
/**
* @private
* @param {string} mod
* @return {function}
*/
function newModSetter(mod) {
/**
* @this {(Theme|MainTheme)}
* @param {boolean} curr
* @param {boolean} prev
* @return {boolean}
*/
return function setModifier(curr, prev) {
/** @type {!Array<string>} */
var keys;
keys = this.__keys || [];
if (prev) keys = cut.val(keys, mod);
if (curr) keys = fuse.val(keys, mod);
this.__keys = keys.length ? keys : null;
return curr;
};
}