@visulima/is-ansi-color-supported
Version:
Detect whether a terminal or browser supports ansi colors.
129 lines (126 loc) • 5.28 kB
JavaScript
import { SPACE_MONO, SPACE_256_COLORS, SPACE_TRUE_COLORS, SPACE_16_COLORS } from './packem_shared/SPACE_MONO-VdlYcTli.mjs';
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_16_COLORS;
} else if (forceColorValue === "false") {
forceColor = SPACE_MONO;
} else if (forceColorValueIsString && forceColorValue.length === 0) {
forceColor = 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;
}
if (oneOfFlags(/^-{1,2}(color=256)$/)) {
return SPACE_256_COLORS;
}
if (oneOfFlags(/^-{1,2}(color=16m|color=full|color=truecolor)$/)) {
return SPACE_TRUE_COLORS;
}
const isForceEnabled = oneOfFlags(/^-{1,2}(color|colors|color=true|color=always)$/);
if (isForceEnabled) {
return SPACE_16_COLORS;
}
const minColorLevel = forceColor || SPACE_MONO;
if ("TF_BUILD" in environment && "AGENT_NAME" in environment) {
return 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_TRUE_COLORS : SPACE_256_COLORS;
}
return SPACE_16_COLORS;
} catch {
}
}
if ("CI" in environment) {
if ("GITHUB_ACTIONS" in environment || "GITHUB_WORKFLOW" in environment || "GITEA_ACTIONS" in environment) {
return SPACE_TRUE_COLORS;
}
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "BUILDKITE", "DRONE", "GITLAB_CI"].some((sign) => sign in environment) || environment.CI_NAME === "codeship") {
return SPACE_16_COLORS;
}
return minColorLevel;
}
if (environment.TERMINAL_EMULATOR?.includes("JediTerm")) {
return SPACE_TRUE_COLORS;
}
if ("TEAMCITY_VERSION" in environment) {
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(environment.TEAMCITY_VERSION) ? SPACE_16_COLORS : SPACE_MONO;
}
if (environment.COLORTERM === "truecolor") {
return SPACE_TRUE_COLORS;
}
if (environment.TERM === "xterm-kitty") {
return 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_TRUE_COLORS : SPACE_256_COLORS;
}
if (environment.TERM_PROGRAM === "Apple_Terminal") {
return SPACE_256_COLORS;
}
}
if (/-256(color)?$/i.test(environment.TERM)) {
return 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_16_COLORS;
}
if ("COLORTERM" in environment) {
return SPACE_16_COLORS;
}
return minColorLevel;
}, "isColorSupportedFactory");
const isStdoutColorSupported = /* @__PURE__ */ __name(() => isColorSupportedFactory("out"), "isStdoutColorSupported");
const isStderrColorSupported = /* @__PURE__ */ __name(() => isColorSupportedFactory("err"), "isStderrColorSupported");
export { SPACE_16_COLORS, SPACE_256_COLORS, SPACE_MONO, SPACE_TRUE_COLORS, isStderrColorSupported, isStdoutColorSupported };