in src/js/node/tty.ts [190:297]
WriteStream.prototype.getColorDepth = function (env = process.env) {
// Use level 0-3 to support the same levels as `chalk` does. This is done for
// consistency throughout the ecosystem.
if (env.FORCE_COLOR !== undefined) {
switch (env.FORCE_COLOR) {
case "":
case "1":
case "true":
warnOnDeactivatedColors(env);
return COLORS_16;
case "2":
warnOnDeactivatedColors(env);
return COLORS_256;
case "3":
warnOnDeactivatedColors(env);
return COLORS_16m;
default:
return COLORS_2;
}
}
if (
env.NODE_DISABLE_COLORS !== undefined ||
// See https://no-color.org/
env.NO_COLOR !== undefined ||
// The "dumb" special terminal, as defined by terminfo, doesn't support
// ANSI color control codes.
// See https://invisible-island.net/ncurses/terminfo.ti.html#toc-_Specials
env.TERM === "dumb"
) {
return COLORS_2;
}
if (process.platform === "win32") {
// Lazy load for startup performance.
if (OSRelease === undefined) {
const { release } = require("node:os");
OSRelease = release().split(".");
}
// Windows 10 build 10586 is the first Windows release that supports 256
// colors. Windows 10 build 14931 is the first release that supports
// 16m/TrueColor.
if (+OSRelease[0] >= 10) {
const build = +OSRelease[2];
if (build >= 14931) return COLORS_16m;
if (build >= 10586) return COLORS_256;
}
return COLORS_16;
}
if (env.TMUX) {
return COLORS_256;
}
if (env.CI) {
if (
["APPVEYOR", "BUILDKITE", "CIRCLECI", "DRONE", "GITHUB_ACTIONS", "GITLAB_CI", "TRAVIS"].some(
sign => sign in env,
) ||
env.CI_NAME === "codeship"
) {
return COLORS_256;
}
return COLORS_2;
}
if ("TEAMCITY_VERSION" in env) {
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? COLORS_16 : COLORS_2;
}
switch (env.TERM_PROGRAM) {
case "iTerm.app":
if (!env.TERM_PROGRAM_VERSION || /^[0-2]\./.test(env.TERM_PROGRAM_VERSION)) {
return COLORS_256;
}
return COLORS_16m;
case "HyperTerm":
case "MacTerm":
return COLORS_16m;
case "Apple_Terminal":
return COLORS_256;
}
if (env.COLORTERM === "truecolor" || env.COLORTERM === "24bit") {
return COLORS_16m;
}
if (env.TERM) {
if (/^xterm-256/.test(env.TERM) !== null) {
return COLORS_256;
}
const termEnv = env.TERM.toLowerCase();
if (TERM_ENVS[termEnv]) {
return TERM_ENVS[termEnv];
}
if (TERM_ENVS_REG_EXP.some(term => term.test(termEnv))) {
return COLORS_16;
}
}
// Move 16 color COLORTERM below 16m and 256
if (env.COLORTERM) {
return COLORS_16;
}
return COLORS_2;
};