blob: e917d61e8c7d2c6be52900c06dd44da4b425d742 [file] [log] [blame]
'use strict';
var colorConvert = require('color-convert');
function wrapAnsi16(fn, offset) {
return function () {
var code = fn.apply(colorConvert, arguments);
return '\u001b[' + (code + offset) + 'm';
};
}
function wrapAnsi256(fn, offset) {
return function () {
var code = fn.apply(colorConvert, arguments);
return '\u001b[' + (38 + offset) + ';5;' + code + 'm';
};
}
function wrapAnsi16m(fn, offset) {
return function () {
var rgb = fn.apply(colorConvert, arguments);
return '\u001b[' + (38 + offset) + ';2;' +
rgb[0] + ';' + rgb[1] + ';' + rgb[2] + 'm';
};
}
function assembleStyles() {
var styles = {
modifier: {
reset: [0, 0],
// 21 isn't widely supported and 22 does the same thing
bold: [1, 22],
dim: [2, 22],
italic: [3, 23],
underline: [4, 24],
inverse: [7, 27],
hidden: [8, 28],
strikethrough: [9, 29]
},
color: {
black: [30, 39],
red: [31, 39],
green: [32, 39],
yellow: [33, 39],
blue: [34, 39],
magenta: [35, 39],
cyan: [36, 39],
white: [37, 39],
gray: [90, 39]
},
bgColor: {
bgBlack: [40, 49],
bgRed: [41, 49],
bgGreen: [42, 49],
bgYellow: [43, 49],
bgBlue: [44, 49],
bgMagenta: [45, 49],
bgCyan: [46, 49],
bgWhite: [47, 49]
}
};
// fix humans
styles.color.grey = styles.color.gray;
Object.keys(styles).forEach(function (groupName) {
var group = styles[groupName];
Object.keys(group).forEach(function (styleName) {
var style = group[styleName];
styles[styleName] = group[styleName] = {
open: '\u001b[' + style[0] + 'm',
close: '\u001b[' + style[1] + 'm'
};
});
Object.defineProperty(styles, groupName, {
value: group,
enumerable: false
});
});
function rgb2rgb(r, g, b) {
return [r, g, b];
}
styles.color.close = '\u001b[39m';
styles.bgColor.close = '\u001b[49m';
styles.color.ansi = {};
styles.color.ansi256 = {};
styles.color.ansi16m = {
rgb: wrapAnsi16m(rgb2rgb, 0)
};
styles.bgColor.ansi = {};
styles.bgColor.ansi256 = {};
styles.bgColor.ansi16m = {
rgb: wrapAnsi16m(rgb2rgb, 10)
};
for (var key in colorConvert) {
if (!colorConvert.hasOwnProperty(key) || typeof colorConvert[key] !== 'object') {
continue;
}
var suite = colorConvert[key];
if ('ansi16' in suite) {
styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
}
if ('ansi256' in suite) {
styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
}
if ('rgb' in suite) {
styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
}
}
return styles;
}
Object.defineProperty(module, 'exports', {
enumerable: true,
get: assembleStyles
});