123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- import * as tty from "tty"
-
- const {
- env = {},
- argv = [],
- platform = "",
- } = typeof process === "undefined" ? {} : process
-
- const isDisabled = "NO_COLOR" in env || argv.includes("--no-color")
- const isForced = "FORCE_COLOR" in env || argv.includes("--color")
- const isWindows = platform === "win32"
- const isDumbTerminal = env.TERM === "dumb"
-
- const isCompatibleTerminal =
- tty && tty.isatty && tty.isatty(1) && env.TERM && !isDumbTerminal
-
- const isCI =
- "CI" in env &&
- ("GITHUB_ACTIONS" in env || "GITLAB_CI" in env || "CIRCLECI" in env)
-
- export const isColorSupported =
- !isDisabled &&
- (isForced || (isWindows && !isDumbTerminal) || isCompatibleTerminal || isCI)
-
- const replaceClose = (
- index,
- string,
- close,
- replace,
- head = string.substring(0, index) + replace,
- tail = string.substring(index + close.length),
- next = tail.indexOf(close)
- ) => head + (next < 0 ? tail : replaceClose(next, tail, close, replace))
-
- const clearBleed = (index, string, open, close, replace) =>
- index < 0
- ? open + string + close
- : open + replaceClose(index, string, close, replace) + close
-
- const filterEmpty =
- (open, close, replace = open, at = open.length + 1) =>
- (string) =>
- string || !(string === "" || string === undefined)
- ? clearBleed(
- ("" + string).indexOf(close, at),
- string,
- open,
- close,
- replace
- )
- : ""
-
- const init = (open, close, replace) =>
- filterEmpty(`\x1b[${open}m`, `\x1b[${close}m`, replace)
-
- const colors = {
- reset: init(0, 0),
- bold: init(1, 22, "\x1b[22m\x1b[1m"),
- dim: init(2, 22, "\x1b[22m\x1b[2m"),
- italic: init(3, 23),
- underline: init(4, 24),
- inverse: init(7, 27),
- hidden: init(8, 28),
- strikethrough: init(9, 29),
- black: init(30, 39),
- red: init(31, 39),
- green: init(32, 39),
- yellow: init(33, 39),
- blue: init(34, 39),
- magenta: init(35, 39),
- cyan: init(36, 39),
- white: init(37, 39),
- gray: init(90, 39),
- bgBlack: init(40, 49),
- bgRed: init(41, 49),
- bgGreen: init(42, 49),
- bgYellow: init(43, 49),
- bgBlue: init(44, 49),
- bgMagenta: init(45, 49),
- bgCyan: init(46, 49),
- bgWhite: init(47, 49),
- blackBright: init(90, 39),
- redBright: init(91, 39),
- greenBright: init(92, 39),
- yellowBright: init(93, 39),
- blueBright: init(94, 39),
- magentaBright: init(95, 39),
- cyanBright: init(96, 39),
- whiteBright: init(97, 39),
- bgBlackBright: init(100, 49),
- bgRedBright: init(101, 49),
- bgGreenBright: init(102, 49),
- bgYellowBright: init(103, 49),
- bgBlueBright: init(104, 49),
- bgMagentaBright: init(105, 49),
- bgCyanBright: init(106, 49),
- bgWhiteBright: init(107, 49),
- }
-
- export const createColors = ({ useColor = isColorSupported } = {}) =>
- useColor
- ? colors
- : Object.keys(colors).reduce(
- (colors, key) => ({ ...colors, [key]: String }),
- {}
- )
-
- export const {
- reset,
- bold,
- dim,
- italic,
- underline,
- inverse,
- hidden,
- strikethrough,
- black,
- red,
- green,
- yellow,
- blue,
- magenta,
- cyan,
- white,
- gray,
- bgBlack,
- bgRed,
- bgGreen,
- bgYellow,
- bgBlue,
- bgMagenta,
- bgCyan,
- bgWhite,
- blackBright,
- redBright,
- greenBright,
- yellowBright,
- blueBright,
- magentaBright,
- cyanBright,
- whiteBright,
- bgBlackBright,
- bgRedBright,
- bgGreenBright,
- bgYellowBright,
- bgBlueBright,
- bgMagentaBright,
- bgCyanBright,
- bgWhiteBright,
- } = createColors()
|