| let tty = require("tty") |
| |
| let isColorSupported = |
| !("NO_COLOR" in process.env || process.argv.includes("--no-color")) && |
| ("FORCE_COLOR" in process.env || |
| process.argv.includes("--color") || |
| process.platform === "win32" || |
| (tty.isatty(1) && process.env.TERM !== "dumb") || |
| "CI" in process.env) |
| |
| let formatter = |
| (open, close, replace = open) => |
| input => { |
| let string = "" + input |
| let index = string.indexOf(close, open.length) |
| return ~index |
| ? open + replaceClose(string, close, replace, index) + close |
| : open + string + close |
| } |
| |
| let replaceClose = (string, close, replace, index) => { |
| let start = string.substring(0, index) + replace |
| let end = string.substring(index + close.length) |
| let nextIndex = end.indexOf(close) |
| return ~nextIndex ? start + replaceClose(end, close, replace, nextIndex) : start + end |
| } |
| |
| let createColors = (enabled = isColorSupported) => ({ |
| isColorSupported: enabled, |
| reset: enabled ? s => `\x1b[0m${s}\x1b[0m` : String, |
| bold: enabled ? formatter("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m") : String, |
| dim: enabled ? formatter("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m") : String, |
| italic: enabled ? formatter("\x1b[3m", "\x1b[23m") : String, |
| underline: enabled ? formatter("\x1b[4m", "\x1b[24m") : String, |
| inverse: enabled ? formatter("\x1b[7m", "\x1b[27m") : String, |
| hidden: enabled ? formatter("\x1b[8m", "\x1b[28m") : String, |
| strikethrough: enabled ? formatter("\x1b[9m", "\x1b[29m") : String, |
| black: enabled ? formatter("\x1b[30m", "\x1b[39m") : String, |
| red: enabled ? formatter("\x1b[31m", "\x1b[39m") : String, |
| green: enabled ? formatter("\x1b[32m", "\x1b[39m") : String, |
| yellow: enabled ? formatter("\x1b[33m", "\x1b[39m") : String, |
| blue: enabled ? formatter("\x1b[34m", "\x1b[39m") : String, |
| magenta: enabled ? formatter("\x1b[35m", "\x1b[39m") : String, |
| cyan: enabled ? formatter("\x1b[36m", "\x1b[39m") : String, |
| white: enabled ? formatter("\x1b[37m", "\x1b[39m") : String, |
| gray: enabled ? formatter("\x1b[90m", "\x1b[39m") : String, |
| bgBlack: enabled ? formatter("\x1b[40m", "\x1b[49m") : String, |
| bgRed: enabled ? formatter("\x1b[41m", "\x1b[49m") : String, |
| bgGreen: enabled ? formatter("\x1b[42m", "\x1b[49m") : String, |
| bgYellow: enabled ? formatter("\x1b[43m", "\x1b[49m") : String, |
| bgBlue: enabled ? formatter("\x1b[44m", "\x1b[49m") : String, |
| bgMagenta: enabled ? formatter("\x1b[45m", "\x1b[49m") : String, |
| bgCyan: enabled ? formatter("\x1b[46m", "\x1b[49m") : String, |
| bgWhite: enabled ? formatter("\x1b[47m", "\x1b[49m") : String, |
| }) |
| |
| module.exports = createColors() |
| module.exports.createColors = createColors |