index.js 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. var enabled = true;
  2. // Support both browser and node environments
  3. var globalVar = typeof self !== 'undefined'
  4. ? self
  5. : typeof window !== 'undefined'
  6. ? window
  7. : typeof global !== 'undefined'
  8. ? global
  9. : {};
  10. /**
  11. * Detect how much colors the current terminal supports
  12. */
  13. var supportLevel = 0 /* none */;
  14. if (globalVar.process && globalVar.process.env && globalVar.process.stdout) {
  15. 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;
  16. if (NODE_DISABLE_COLORS || NO_COLOR || FORCE_COLOR === '0') {
  17. enabled = false;
  18. }
  19. else if (FORCE_COLOR === '1' ||
  20. FORCE_COLOR === '2' ||
  21. FORCE_COLOR === '3') {
  22. enabled = true;
  23. }
  24. else if (TERM === 'dumb') {
  25. enabled = false;
  26. }
  27. else if ('CI' in globalVar.process.env &&
  28. [
  29. 'TRAVIS',
  30. 'CIRCLECI',
  31. 'APPVEYOR',
  32. 'GITLAB_CI',
  33. 'GITHUB_ACTIONS',
  34. 'BUILDKITE',
  35. 'DRONE',
  36. ].some(function (vendor) { return vendor in globalVar.process.env; })) {
  37. enabled = true;
  38. }
  39. else {
  40. enabled = process.stdout.isTTY;
  41. }
  42. if (enabled) {
  43. // Windows supports 24bit True Colors since Windows 10 revision #14931,
  44. // see https://devblogs.microsoft.com/commandline/24-bit-color-in-the-windows-console/
  45. if (process.platform === 'win32') {
  46. supportLevel = 3 /* trueColor */;
  47. }
  48. else {
  49. if (COLORTERM && (COLORTERM === 'truecolor' || COLORTERM === '24bit')) {
  50. supportLevel = 3 /* trueColor */;
  51. }
  52. else if (TERM && (TERM.endsWith('-256color') || TERM.endsWith('256'))) {
  53. supportLevel = 2 /* ansi256 */;
  54. }
  55. else {
  56. supportLevel = 1 /* ansi */;
  57. }
  58. }
  59. }
  60. }
  61. export var options = {
  62. enabled: enabled,
  63. supportLevel: supportLevel,
  64. };
  65. function kolorist(start, end, level) {
  66. if (level === void 0) { level = 1 /* ansi */; }
  67. var open = "\u001B[" + start + "m";
  68. var close = "\u001B[" + end + "m";
  69. var regex = new RegExp("\\x1b\\[" + end + "m", 'g');
  70. return function (str) {
  71. return options.enabled && options.supportLevel >= level
  72. ? open + ('' + str).replace(regex, open) + close
  73. : '' + str;
  74. };
  75. }
  76. // Lower colors into 256 color space
  77. // Taken from https://github.com/Qix-/color-convert/blob/3f0e0d4e92e235796ccb17f6e85c72094a651f49/conversions.js
  78. // which is MIT licensed and copyright by Heather Arthur and Josh Junon
  79. function rgbToAnsi256(r, g, b) {
  80. // We use the extended greyscale palette here, with the exception of
  81. // black and white. normal palette only has 4 greyscale shades.
  82. if (r >> 4 === g >> 4 && g >> 4 === b >> 4) {
  83. if (r < 8) {
  84. return 16;
  85. }
  86. if (r > 248) {
  87. return 231;
  88. }
  89. return Math.round(((r - 8) / 247) * 24) + 232;
  90. }
  91. var ansi = 16 +
  92. 36 * Math.round((r / 255) * 5) +
  93. 6 * Math.round((g / 255) * 5) +
  94. Math.round((b / 255) * 5);
  95. return ansi;
  96. }
  97. export function stripColors(str) {
  98. return ('' + str)
  99. .replace(/\x1b\[[0-9;]+m/g, '')
  100. .replace(/\x1b\]8;;.*?\x07(.*?)\x1b\]8;;\x07/g, function (_, group) { return group; });
  101. }
  102. // modifiers
  103. export var reset = kolorist(0, 0);
  104. export var bold = kolorist(1, 22);
  105. export var dim = kolorist(2, 22);
  106. export var italic = kolorist(3, 23);
  107. export var underline = kolorist(4, 24);
  108. export var inverse = kolorist(7, 27);
  109. export var hidden = kolorist(8, 28);
  110. export var strikethrough = kolorist(9, 29);
  111. // colors
  112. export var black = kolorist(30, 39);
  113. export var red = kolorist(31, 39);
  114. export var green = kolorist(32, 39);
  115. export var yellow = kolorist(33, 39);
  116. export var blue = kolorist(34, 39);
  117. export var magenta = kolorist(35, 39);
  118. export var cyan = kolorist(36, 39);
  119. export var white = kolorist(97, 39);
  120. export var gray = kolorist(90, 39);
  121. export var lightGray = kolorist(37, 39);
  122. export var lightRed = kolorist(91, 39);
  123. export var lightGreen = kolorist(92, 39);
  124. export var lightYellow = kolorist(93, 39);
  125. export var lightBlue = kolorist(94, 39);
  126. export var lightMagenta = kolorist(95, 39);
  127. export var lightCyan = kolorist(96, 39);
  128. // background colors
  129. export var bgBlack = kolorist(40, 49);
  130. export var bgRed = kolorist(41, 49);
  131. export var bgGreen = kolorist(42, 49);
  132. export var bgYellow = kolorist(43, 49);
  133. export var bgBlue = kolorist(44, 49);
  134. export var bgMagenta = kolorist(45, 49);
  135. export var bgCyan = kolorist(46, 49);
  136. export var bgWhite = kolorist(107, 49);
  137. export var bgGray = kolorist(100, 49);
  138. export var bgLightRed = kolorist(101, 49);
  139. export var bgLightGreen = kolorist(102, 49);
  140. export var bgLightYellow = kolorist(103, 49);
  141. export var bgLightBlue = kolorist(104, 49);
  142. export var bgLightMagenta = kolorist(105, 49);
  143. export var bgLightCyan = kolorist(106, 49);
  144. export var bgLightGray = kolorist(47, 49);
  145. // 256 support
  146. export var ansi256 = function (n) {
  147. return kolorist('38;5;' + n, 0, 2 /* ansi256 */);
  148. };
  149. export var ansi256Bg = function (n) {
  150. return kolorist('48;5;' + n, 0, 2 /* ansi256 */);
  151. };
  152. // TrueColor 24bit support
  153. export var trueColor = function (r, g, b) {
  154. return options.supportLevel === 2 /* ansi256 */
  155. ? ansi256(rgbToAnsi256(r, g, b))
  156. : kolorist("38;2;" + r + ";" + g + ";" + b, 0, 3 /* trueColor */);
  157. };
  158. export var trueColorBg = function (r, g, b) {
  159. return options.supportLevel === 2 /* ansi256 */
  160. ? ansi256Bg(rgbToAnsi256(r, g, b))
  161. : kolorist("48;2;" + r + ";" + g + ";" + b, 0, 3 /* trueColor */);
  162. };
  163. // Links
  164. var OSC = '\u001B]';
  165. var BEL = '\u0007';
  166. var SEP = ';';
  167. export function link(text, url) {
  168. return options.enabled
  169. ? OSC + '8' + SEP + SEP + url + BEL + text + OSC + '8' + SEP + SEP + BEL
  170. : text + " (\u200B" + url + "\u200B)";
  171. }
  172. //# sourceMappingURL=index.js.map