UNPKG

@visulima/is-ansi-color-supported

Version:

Detect whether a terminal or browser supports ansi colors.

138 lines (133 loc) 5.83 kB
'use strict'; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } }); const SPACE_MONO = require('./packem_shared/SPACE_MONO-Cwv43lY6.cjs'); var __defProp = Object.defineProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); const isColorSupportedFactory = /* @__PURE__ */ __name((stdName) => { const _this = globalThis; const isDeno = _this.Deno != null; const proc = _this.process ?? _this.Deno ?? {}; const argv = proc.argv ?? proc.args ?? []; const oneOfFlags = /* @__PURE__ */ __name((regex) => { const terminatorPosition = argv.indexOf("--"); const position = argv.findIndex((flag) => regex.test(flag)); return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition); }, "oneOfFlags"); let environment = {}; try { environment = isDeno ? proc.env.toObject() : proc.env ?? {}; } catch { } const FORCE_COLOR = "FORCE_COLOR"; const hasForceColor = FORCE_COLOR in environment; const forceColorValue = environment[FORCE_COLOR] ? String(environment[FORCE_COLOR]) : void 0; const forceColorValueIsString = Object.prototype.toString.call(forceColorValue).slice(8, -1) === "String"; let forceColor; if (forceColorValue === "true") { forceColor = SPACE_MONO.SPACE_16_COLORS; } else if (forceColorValue === "false") { forceColor = SPACE_MONO.SPACE_MONO; } else if (forceColorValueIsString && forceColorValue.length === 0) { forceColor = SPACE_MONO.SPACE_16_COLORS; } else if (forceColorValueIsString && forceColorValue.length > 0) { forceColor = Math.min(Number.parseInt(forceColorValue, 10), 3); } if (forceColorValue !== "true" && forceColorValue !== "false" && forceColor !== void 0 && forceColor < 4) { return forceColor; } const isForceDisabled = ( // eslint-disable-next-line regexp/no-unused-capturing-group "NO_COLOR" in environment || hasForceColor && forceColor === 0 || oneOfFlags(/^-{1,2}(no-color|no-colors|color=false|color=never)$/) ); if (isForceDisabled) { return SPACE_MONO.SPACE_MONO; } if (oneOfFlags(/^-{1,2}(color=256)$/)) { return SPACE_MONO.SPACE_256_COLORS; } if (oneOfFlags(/^-{1,2}(color=16m|color=full|color=truecolor)$/)) { return SPACE_MONO.SPACE_TRUE_COLORS; } const isForceEnabled = oneOfFlags(/^-{1,2}(color|colors|color=true|color=always)$/); if (isForceEnabled) { return SPACE_MONO.SPACE_16_COLORS; } const minColorLevel = forceColor || SPACE_MONO.SPACE_MONO; if ("TF_BUILD" in environment && "AGENT_NAME" in environment) { return SPACE_MONO.SPACE_16_COLORS; } const isDumbTerminal = environment.TERM && /-mono|dumb/i.test(environment.TERM); if (isDumbTerminal) { return minColorLevel; } if ((isDeno ? _this.Deno.build.os : proc.platform) === "win32") { try { const osRelease = (isDeno ? _this.Deno.osRelease() : proc.os.release()).split("."); if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) { return Number(osRelease[2]) >= 14931 ? SPACE_MONO.SPACE_TRUE_COLORS : SPACE_MONO.SPACE_256_COLORS; } return SPACE_MONO.SPACE_16_COLORS; } catch { } } if ("CI" in environment) { if ("GITHUB_ACTIONS" in environment || "GITHUB_WORKFLOW" in environment || "GITEA_ACTIONS" in environment) { return SPACE_MONO.SPACE_TRUE_COLORS; } if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE", "GITLAB_CI"].some((sign) => sign in environment) || environment.CI_NAME === "codeship") { return SPACE_MONO.SPACE_16_COLORS; } return minColorLevel; } if (environment.TERMINAL_EMULATOR?.includes("JediTerm")) { return SPACE_MONO.SPACE_TRUE_COLORS; } if ("TEAMCITY_VERSION" in environment) { return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(environment.TEAMCITY_VERSION) ? SPACE_MONO.SPACE_16_COLORS : SPACE_MONO.SPACE_MONO; } if (environment.COLORTERM === "truecolor") { return SPACE_MONO.SPACE_TRUE_COLORS; } if (environment.TERM === "xterm-kitty") { return SPACE_MONO.SPACE_TRUE_COLORS; } if ("TERM_PROGRAM" in environment) { const version = Number.parseInt((environment.TERM_PROGRAM_VERSION ?? "").split(".")[0], 10); if (environment.TERM_PROGRAM === "iTerm.app") { return version >= 3 ? SPACE_MONO.SPACE_TRUE_COLORS : SPACE_MONO.SPACE_256_COLORS; } if (environment.TERM_PROGRAM === "Apple_Terminal") { return SPACE_MONO.SPACE_256_COLORS; } } if (/-256(color)?$/i.test(environment.TERM)) { return SPACE_MONO.SPACE_256_COLORS; } let isTTY = false; if (isDeno) { if (stdName === "out") { isTTY = _this.Deno.stdout.isTerminal(); } else if (stdName === "err") { isTTY = _this.Deno.stderr.isTerminal(); } } else if ("PM2_HOME" in environment && "pm_id" in environment) { isTTY = true; } else { isTTY = proc["std" + stdName] && "isTTY" in proc["std" + stdName]; } if (isTTY && /^screen|^tmux|^xterm|^vt[1-5]\d\d|^ansi|color|mintty|rxvt|cygwin|linux/i.test(environment.TERM)) { return SPACE_MONO.SPACE_16_COLORS; } if ("COLORTERM" in environment) { return SPACE_MONO.SPACE_16_COLORS; } return minColorLevel; }, "isColorSupportedFactory"); const isStdoutColorSupported = /* @__PURE__ */ __name(() => isColorSupportedFactory("out"), "isStdoutColorSupported"); const isStderrColorSupported = /* @__PURE__ */ __name(() => isColorSupportedFactory("err"), "isStderrColorSupported"); exports.SPACE_16_COLORS = SPACE_MONO.SPACE_16_COLORS; exports.SPACE_256_COLORS = SPACE_MONO.SPACE_256_COLORS; exports.SPACE_MONO = SPACE_MONO.SPACE_MONO; exports.SPACE_TRUE_COLORS = SPACE_MONO.SPACE_TRUE_COLORS; exports.isStderrColorSupported = isStderrColorSupported; exports.isStdoutColorSupported = isStdoutColorSupported;