Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | import type { Prettify } from '@https-enable/types'
import type { AllColorKeys, ColorName, ColorScheme, ColorType, StyleType } from './type'
const defaultFG = 39
const defaultBG = 49
// ================= 颜色代码配置 =================
const colors: ColorScheme = {
black: {
normal: { fg: 30, bg: 40 },
},
red: {
normal: { fg: 31, bg: 41 },
bright: { fg: 91, bg: 101 },
},
green: {
normal: { fg: 32, bg: 42 },
bright: { fg: 92, bg: 102 },
},
yellow: {
normal: { fg: 33, bg: 43 },
bright: { fg: 93, bg: 103 },
},
blue: {
normal: { fg: 34, bg: 44 },
bright: { fg: 94, bg: 104 },
},
magenta: {
normal: { fg: 35, bg: 45 },
bright: { fg: 95, bg: 105 },
},
cyan: {
normal: { fg: 36, bg: 46 },
bright: { fg: 96, bg: 106 },
},
white: {
normal: { fg: 37, bg: 47 },
bright: { fg: 97, bg: 107 },
},
gray: {
normal: { fg: 90, bg: 100 },
},
grey: {
normal: { fg: 90, bg: 100 },
},
}
// ================= 样式生成器 =================
function createEntry(code: number, resetCode: number) {
return {
open: `\u001B[${code}m`,
close: `\u001B[${resetCode}m`,
}
}
// 类型安全的颜色生成器
function buildColorStyles(): ColorType {
return Object.entries(colors).reduce((acc, [name, variants]) => {
const colorName = name as ColorName
const capitalized = colorName[0]?.toUpperCase() + colorName.slice(1)
// 前景色
acc[colorName] = createEntry(variants.normal.fg, defaultFG)
if ('bright' in variants) {
const brightKey = `bright${capitalized}` as AllColorKeys
acc[brightKey] = createEntry(variants.bright.fg, defaultFG)
}
// 背景色
const bgKey = `bg${capitalized}` as AllColorKeys
acc[bgKey] = createEntry(variants.normal.bg, defaultBG)
if ('bright' in variants) {
const bgBrightKey = `bgBright${capitalized}` as AllColorKeys
acc[bgBrightKey] = createEntry(variants.bright.bg, defaultBG)
}
return acc
}, {} as ColorType) // 关键类型断言
}
// See: https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js#L407~L454
// See: https://en.wikipedia.org/wiki/ANSI_escape_code#graphics
// See: https://github.com/mintty/mintty/wiki/Tips#text-attributes-and-rendering
export const styles: Prettify<StyleType & ColorType> = {
// 基础样式
reset: createEntry(0, 0),
bold: createEntry(1, 22),
dim: createEntry(2, 22),
italic: createEntry(3, 23),
underline: createEntry(4, 24),
blink: createEntry(5, 25),
// Swap foreground and background colors
inverse: createEntry(7, 27),
hidden: createEntry(8, 28),
strikethrough: createEntry(9, 29),
doubleunderline: createEntry(21, 24),
framed: createEntry(51, 54),
overlined: createEntry(53, 55),
// 动态生成颜色样式
...buildColorStyles(),
}
export default styles
|