codev / src /ink-picture /utils /bgColorize.ts
chenbhao's picture
refactor: integrate ink-picture as source directory
7e3630c
Raw
History Blame Contribute Delete
1.1 kB
import chalk from "chalk";
const rgbRegex = /^rgb\(\s?(\d+),\s?(\d+),\s?(\d+)\s?\)$/;
const ansiRegex = /^ansi256\(\s?(\d+)\s?\)$/;
const isNamedColor = (color: string): color is keyof typeof chalk =>
color in chalk;
export default function bgColorize(str: string, color: string): string {
if (isNamedColor(color)) {
const methodName = `bg${color[0].toUpperCase() + color.slice(1)}` as
| keyof typeof chalk
| undefined;
if (methodName && methodName in chalk) {
return (chalk[methodName] as (s: string) => string)(str);
}
return str;
}
if (color.startsWith("#")) {
return chalk.bgHex(color)(str);
}
if (color.startsWith("ansi256")) {
const matches = ansiRegex.exec(color);
if (matches) {
return chalk.bgAnsi256(Number(matches[1]))(str);
}
return str;
}
if (color.startsWith("rgb")) {
const matches = rgbRegex.exec(color);
if (matches) {
return chalk.bgRgb(
Number(matches[1]),
Number(matches[2]),
Number(matches[3]),
)(str);
}
return str;
}
return str;
}