172 lines
5.9 KiB
JavaScript
172 lines
5.9 KiB
JavaScript
|
var enabled = true;
|
||
|
// Support both browser and node environments
|
||
|
var globalVar = typeof self !== 'undefined'
|
||
|
? self
|
||
|
: typeof window !== 'undefined'
|
||
|
? window
|
||
|
: typeof global !== 'undefined'
|
||
|
? global
|
||
|
: {};
|
||
|
/**
|
||
|
* Detect how much colors the current terminal supports
|
||
|
*/
|
||
|
var supportLevel = 0 /* none */;
|
||
|
if (globalVar.process && globalVar.process.env && globalVar.process.stdout) {
|
||
|
var _a = globalVar.process.env, FORCE_COLOR = _a.FORCE_COLOR, NODE_DISABLE_COLORS = _a.NODE_DISABLE_COLORS, NO_COLOR = _a.NO_COLOR, TERM = _a.TERM, COLORTERM = _a.COLORTERM;
|
||
|
if (NODE_DISABLE_COLORS || NO_COLOR || FORCE_COLOR === '0') {
|
||
|
enabled = false;
|
||
|
}
|
||
|
else if (FORCE_COLOR === '1' ||
|
||
|
FORCE_COLOR === '2' ||
|
||
|
FORCE_COLOR === '3') {
|
||
|
enabled = true;
|
||
|
}
|
||
|
else if (TERM === 'dumb') {
|
||
|
enabled = false;
|
||
|
}
|
||
|
else if ('CI' in globalVar.process.env &&
|
||
|
[
|
||
|
'TRAVIS',
|
||
|
'CIRCLECI',
|
||
|
'APPVEYOR',
|
||
|
'GITLAB_CI',
|
||
|
'GITHUB_ACTIONS',
|
||
|
'BUILDKITE',
|
||
|
'DRONE',
|
||
|
].some(function (vendor) { return vendor in globalVar.process.env; })) {
|
||
|
enabled = true;
|
||
|
}
|
||
|
else {
|
||
|
enabled = process.stdout.isTTY;
|
||
|
}
|
||
|
if (enabled) {
|
||
|
// Windows supports 24bit True Colors since Windows 10 revision #14931,
|
||
|
// see https://devblogs.microsoft.com/commandline/24-bit-color-in-the-windows-console/
|
||
|
if (process.platform === 'win32') {
|
||
|
supportLevel = 3 /* trueColor */;
|
||
|
}
|
||
|
else {
|
||
|
if (COLORTERM && (COLORTERM === 'truecolor' || COLORTERM === '24bit')) {
|
||
|
supportLevel = 3 /* trueColor */;
|
||
|
}
|
||
|
else if (TERM && (TERM.endsWith('-256color') || TERM.endsWith('256'))) {
|
||
|
supportLevel = 2 /* ansi256 */;
|
||
|
}
|
||
|
else {
|
||
|
supportLevel = 1 /* ansi */;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
export var options = {
|
||
|
enabled: enabled,
|
||
|
supportLevel: supportLevel,
|
||
|
};
|
||
|
function kolorist(start, end, level) {
|
||
|
if (level === void 0) { level = 1 /* ansi */; }
|
||
|
var open = "\u001B[" + start + "m";
|
||
|
var close = "\u001B[" + end + "m";
|
||
|
var regex = new RegExp("\\x1b\\[" + end + "m", 'g');
|
||
|
return function (str) {
|
||
|
return options.enabled && options.supportLevel >= level
|
||
|
? open + ('' + str).replace(regex, open) + close
|
||
|
: '' + str;
|
||
|
};
|
||
|
}
|
||
|
// Lower colors into 256 color space
|
||
|
// Taken from https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js
|
||
|
// which is MIT licensed and copyright by Heather Arthur and Josh Junon
|
||
|
function rgbToAnsi256(r, g, b) {
|
||
|
// We use the extended greyscale palette here, with the exception of
|
||
|
// black and white. normal palette only has 4 greyscale shades.
|
||
|
if (r >> 4 === g >> 4 && g >> 4 === b >> 4) {
|
||
|
if (r < 8) {
|
||
|
return 16;
|
||
|
}
|
||
|
if (r > 248) {
|
||
|
return 231;
|
||
|
}
|
||
|
return Math.round(((r - 8) / 247) * 24) + 232;
|
||
|
}
|
||
|
var ansi = 16 +
|
||
|
36 * Math.round((r / 255) * 5) +
|
||
|
6 * Math.round((g / 255) * 5) +
|
||
|
Math.round((b / 255) * 5);
|
||
|
return ansi;
|
||
|
}
|
||
|
export function stripColors(str) {
|
||
|
return ('' + str)
|
||
|
.replace(/\x1b\[[0-9;]+m/g, '')
|
||
|
.replace(/\x1b\]8;;.*?\x07(.*?)\x1b\]8;;\x07/g, function (_, group) { return group; });
|
||
|
}
|
||
|
// modifiers
|
||
|
export var reset = kolorist(0, 0);
|
||
|
export var bold = kolorist(1, 22);
|
||
|
export var dim = kolorist(2, 22);
|
||
|
export var italic = kolorist(3, 23);
|
||
|
export var underline = kolorist(4, 24);
|
||
|
export var inverse = kolorist(7, 27);
|
||
|
export var hidden = kolorist(8, 28);
|
||
|
export var strikethrough = kolorist(9, 29);
|
||
|
// colors
|
||
|
export var black = kolorist(30, 39);
|
||
|
export var red = kolorist(31, 39);
|
||
|
export var green = kolorist(32, 39);
|
||
|
export var yellow = kolorist(33, 39);
|
||
|
export var blue = kolorist(34, 39);
|
||
|
export var magenta = kolorist(35, 39);
|
||
|
export var cyan = kolorist(36, 39);
|
||
|
export var white = kolorist(97, 39);
|
||
|
export var gray = kolorist(90, 39);
|
||
|
export var lightGray = kolorist(37, 39);
|
||
|
export var lightRed = kolorist(91, 39);
|
||
|
export var lightGreen = kolorist(92, 39);
|
||
|
export var lightYellow = kolorist(93, 39);
|
||
|
export var lightBlue = kolorist(94, 39);
|
||
|
export var lightMagenta = kolorist(95, 39);
|
||
|
export var lightCyan = kolorist(96, 39);
|
||
|
// background colors
|
||
|
export var bgBlack = kolorist(40, 49);
|
||
|
export var bgRed = kolorist(41, 49);
|
||
|
export var bgGreen = kolorist(42, 49);
|
||
|
export var bgYellow = kolorist(43, 49);
|
||
|
export var bgBlue = kolorist(44, 49);
|
||
|
export var bgMagenta = kolorist(45, 49);
|
||
|
export var bgCyan = kolorist(46, 49);
|
||
|
export var bgWhite = kolorist(107, 49);
|
||
|
export var bgGray = kolorist(100, 49);
|
||
|
export var bgLightRed = kolorist(101, 49);
|
||
|
export var bgLightGreen = kolorist(102, 49);
|
||
|
export var bgLightYellow = kolorist(103, 49);
|
||
|
export var bgLightBlue = kolorist(104, 49);
|
||
|
export var bgLightMagenta = kolorist(105, 49);
|
||
|
export var bgLightCyan = kolorist(106, 49);
|
||
|
export var bgLightGray = kolorist(47, 49);
|
||
|
// 256 support
|
||
|
export var ansi256 = function (n) {
|
||
|
return kolorist('38;5;' + n, 0, 2 /* ansi256 */);
|
||
|
};
|
||
|
export var ansi256Bg = function (n) {
|
||
|
return kolorist('48;5;' + n, 0, 2 /* ansi256 */);
|
||
|
};
|
||
|
// TrueColor 24bit support
|
||
|
export var trueColor = function (r, g, b) {
|
||
|
return options.supportLevel === 2 /* ansi256 */
|
||
|
? ansi256(rgbToAnsi256(r, g, b))
|
||
|
: kolorist("38;2;" + r + ";" + g + ";" + b, 0, 3 /* trueColor */);
|
||
|
};
|
||
|
export var trueColorBg = function (r, g, b) {
|
||
|
return options.supportLevel === 2 /* ansi256 */
|
||
|
? ansi256Bg(rgbToAnsi256(r, g, b))
|
||
|
: kolorist("48;2;" + r + ";" + g + ";" + b, 0, 3 /* trueColor */);
|
||
|
};
|
||
|
// Links
|
||
|
var OSC = '\u001B]';
|
||
|
var BEL = '\u0007';
|
||
|
var SEP = ';';
|
||
|
export function link(text, url) {
|
||
|
return options.enabled
|
||
|
? OSC + '8' + SEP + SEP + url + BEL + text + OSC + '8' + SEP + SEP + BEL
|
||
|
: text + " (\u200B" + url + "\u200B)";
|
||
|
}
|
||
|
//# sourceMappingURL=index.js.map
|