diff --git a/src/utils.ts b/src/utils.ts index 3af4928..d9f0779 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -36,7 +36,17 @@ export type TermColor = keyof typeof colorMap function _colorize(text: string, color: TermColor): string { const c = colorMap[color]! - return `\x1b[${c}m${text}\x1b[0m` + let r = 0 + + if (c > 1 && c < 30) { + r = c + 20 + } else if (c === 1) { + r = 23 + } else { + r = 0 + } + + return `\x1b[${c}m${text}\x1b[${r}m` } function isTemplateStringArray(template: TemplateStringsArray | unknown): template is TemplateStringsArray { diff --git a/tests/utils.test.ts b/tests/utils.test.ts index 4b3870a..30ee2b2 100644 --- a/tests/utils.test.ts +++ b/tests/utils.test.ts @@ -1,5 +1,4 @@ -import { handleErr, resolve } from "../src/utils" - +import { handleErr, resolve, colorize, TermColor } from "../src/utils" describe("utils", () => { describe("resolve", () => { test("should resolve function", () => { @@ -19,3 +18,51 @@ describe("utils", () => { }) }) }) + +describe("colorize", () => { + it("should colorize text with red color", () => { + const result = colorize("Hello", "red") + expect(result).toBe("\x1b[31mHello\x1b[0m") + }) + + it("should colorize text with bold", () => { + const result = colorize("Hello", "bold") + expect(result).toBe("\x1b[1mHello\x1b[23m") + }) + + it("should reset color", () => { + const result = colorize("Hello", "reset") + expect(result).toBe("\x1b[0mHello\x1b[0m") + }) + + it("should have all color functions", () => { + const colors: TermColor[] = [ + "reset", + "dim", + "bold", + "italic", + "underline", + "red", + "green", + "yellow", + "blue", + "magenta", + "cyan", + "white", + "gray", + ] + colors.forEach((color) => { + expect(typeof colorize[color]).toBe("function") + }) + }) + + it("should colorize text using colorize.red", () => { + const result = colorize.red("Hello") + expect(result).toBe("\x1b[31mHello\x1b[0m") + }) + + it("should colorize text using template strings with colorize.blue", () => { + const result = colorize.blue`Hello ${"World"}` + expect(result).toBe("\x1b[34mHello World\x1b[0m") + }) +})