/** * ANSI color codes mapping for terminal text coloring * @type {Object} */ const ANSI_COLORS = { '0': '\x1b[30m', // Black '1': '\x1b[34m', // Dark Blue '2': '\x1b[32m', // Dark Green '3': '\x1b[36m', // Dark Aqua '4': '\x1b[31m', // Dark Red '5': '\x1b[35m', // Dark Purple '6': '\x1b[33m', // Gold '7': '\x1b[37m', // Gray '8': '\x1b[90m', // Dark Gray '9': '\x1b[94m', // Blue 'a': '\x1b[92m', // Green 'b': '\x1b[96m', // Aqua 'c': '\x1b[91m', // Red 'd': '\x1b[95m', // Light Purple 'e': '\x1b[93m', // Yellow 'f': '\x1b[97m', // White 'r': '\x1b[0m', // Reset }; /** * Translates color codes in text to ANSI color sequences * @param {string} altColorChar - The character used to prefix color codes (e.g., '&' or 'ยง') * @param {string} textToTranslate - The text containing color codes to translate * @returns {string} The text with color codes replaced by ANSI sequences * @throws {Error} If altColorChar is not a single character */ function colors(altColorChar, textToTranslate) { if (typeof altColorChar !== 'string' || altColorChar.length !== 1) { throw new Error('altColorChar must be a single character'); } if (typeof textToTranslate !== 'string') { throw new Error('textToTranslate must be a string'); } const regex = new RegExp(`${altColorChar}([0-9a-fr])`, 'g'); return textToTranslate.replace(regex, (_, code) => ANSI_COLORS[code] || ''); } module.exports = colors;