WriteStream.prototype.getColorDepth = function()

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;
    };