/** * @license * Copyright 2025 Google LLC * SPDX-License-Identifier: Apache-2.0 */ import process from 'node:process'; /** * Returns the color depth of the current terminal. * Returns 24 (TrueColor) if unknown or not a TTY. */ export function getColorDepth(): number { return process.stdout.getColorDepth ? process.stdout.getColorDepth() : 24; } /** * Returns true if the terminal has low color depth (less than 24-bit). */ export function isLowColorDepth(): boolean { return getColorDepth() < 24; } let cachedIsITerm2: boolean | undefined; /** * Returns true if the current terminal is iTerm2. */ export function isITerm2(): boolean { if (cachedIsITerm2 !== undefined) { return cachedIsITerm2; } cachedIsITerm2 = process.env['TERM_PROGRAM'] === 'iTerm.app'; return cachedIsITerm2; } /** * Resets the cached iTerm2 detection value. * Primarily used for testing. */ export function resetITerm2Cache(): void { cachedIsITerm2 = undefined; } /** * Returns true if the terminal likely supports emoji. */ export function shouldUseEmoji(): boolean { const locale = ( process.env['LC_ALL'] || process.env['LC_CTYPE'] || process.env['LANG'] || '' ).toLowerCase(); const supportsUtf8 = locale.includes('utf-8') || locale.includes('utf8'); if (!supportsUtf8) { return false; } if (process.env['TERM'] === 'linux') { return false; } return true; }