index.js 6.7 KB

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