@visulima/colorize 1.4.25 → 1.4.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -1
- package/README.md +208 -12
- package/dist/gradient.cjs +60 -3
- package/dist/gradient.mjs +54 -3
- package/dist/index.browser.mjs +63 -1
- package/dist/index.server.cjs +249 -2
- package/dist/index.server.mjs +63 -1
- package/dist/packem_shared/Colorize-BenP3bFn.mjs +241 -0
- package/dist/packem_shared/Colorize-Ca9CXTcj.mjs +413 -0
- package/dist/packem_shared/GradientBuilder-Ba4Teq6P.mjs +487 -0
- package/dist/packem_shared/GradientBuilder-DjJK22kP.cjs +491 -0
- package/dist/packem_shared/colorize.server-BA3gZZXz.cjs +193 -0
- package/dist/packem_shared/colorize.server-ry9FZNfG.mjs +191 -0
- package/dist/packem_shared/convertHexToRgb-CWdAm2kE.mjs +13 -0
- package/dist/packem_shared/convertHexToRgb-DvkHBM3-.cjs +17 -0
- package/dist/packem_shared/rgbToAnsi256-BdS0fomP.mjs +41 -0
- package/dist/packem_shared/rgbToAnsi256-DL8eajTz.cjs +47 -0
- package/dist/template.cjs +144 -2
- package/dist/template.mjs +138 -2
- package/dist/utils.cjs +13 -1
- package/dist/utils.mjs +2 -1
- package/package.json +2 -2
- package/dist/packem_shared/Colorize-Bn8gI3ME.mjs +0 -1
- package/dist/packem_shared/Colorize-CfIXnDUD.mjs +0 -2
- package/dist/packem_shared/GradientBuilder-C2IS34v_.cjs +0 -1
- package/dist/packem_shared/GradientBuilder-I_j6wpvU.mjs +0 -1
- package/dist/packem_shared/ansi256To16--f09kvlF.cjs +0 -1
- package/dist/packem_shared/ansi256To16-YETEPW8R.mjs +0 -1
- package/dist/packem_shared/colorize.server-9hV-s1hY.mjs +0 -2
- package/dist/packem_shared/colorize.server-B0BWdm8_.cjs +0 -2
- package/dist/packem_shared/convertHexToRgb-BEnfEytq.cjs +0 -1
- package/dist/packem_shared/convertHexToRgb-DGcGUKnj.mjs +0 -1
package/dist/index.server.cjs
CHANGED
|
@@ -1,2 +1,249 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
4
|
+
|
|
5
|
+
const isAnsiColorSupported = require('@visulima/is-ansi-color-supported');
|
|
6
|
+
|
|
7
|
+
function ansiRegex({ onlyFirst = false } = {}) {
|
|
8
|
+
const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
|
|
9
|
+
const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
|
|
10
|
+
const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
|
|
11
|
+
const pattern = `${osc}|${csi}`;
|
|
12
|
+
return new RegExp(pattern, onlyFirst ? void 0 : "g");
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const clamp = (number_, min, max) => min > number_ ? min : Math.min(number_, max);
|
|
16
|
+
|
|
17
|
+
const convertHexToRgb = (hex) => {
|
|
18
|
+
let [, color] = /([a-f\d]{3,6})/i.exec(hex) ?? [];
|
|
19
|
+
const length_ = color ? color.length : 0;
|
|
20
|
+
if (length_ === 3) {
|
|
21
|
+
color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];
|
|
22
|
+
} else if (length_ !== 6) {
|
|
23
|
+
return [0, 0, 0];
|
|
24
|
+
}
|
|
25
|
+
const number_ = Number.parseInt(color, 16);
|
|
26
|
+
return [number_ >> 16 & 255, number_ >> 8 & 255, number_ & 255];
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
const rgbToAnsi256 = (r, g, b) => {
|
|
30
|
+
if (r === g && g === b) {
|
|
31
|
+
if (r < 8) {
|
|
32
|
+
return 16;
|
|
33
|
+
}
|
|
34
|
+
if (r > 248) {
|
|
35
|
+
return 231;
|
|
36
|
+
}
|
|
37
|
+
return Math.round((r - 8) / 247 * 24) + 232;
|
|
38
|
+
}
|
|
39
|
+
return 16 + 36 * Math.round(r / 51) + 6 * Math.round(g / 51) + Math.round(b / 51);
|
|
40
|
+
};
|
|
41
|
+
const ansi256To16 = (code) => {
|
|
42
|
+
let r;
|
|
43
|
+
let g;
|
|
44
|
+
let b;
|
|
45
|
+
if (code < 8) {
|
|
46
|
+
return 30 + code;
|
|
47
|
+
}
|
|
48
|
+
if (code < 16) {
|
|
49
|
+
return 90 + (code - 8);
|
|
50
|
+
}
|
|
51
|
+
if (code >= 232) {
|
|
52
|
+
r = g = b = ((code - 232) * 10 + 8) / 255;
|
|
53
|
+
} else {
|
|
54
|
+
code -= 16;
|
|
55
|
+
const remainder = code % 36;
|
|
56
|
+
r = Math.floor(code / 36) / 5;
|
|
57
|
+
g = Math.floor(remainder / 6) / 5;
|
|
58
|
+
b = remainder % 6 / 5;
|
|
59
|
+
}
|
|
60
|
+
const value = Math.max(r, g, b) * 2;
|
|
61
|
+
if (value === 0) {
|
|
62
|
+
return 30;
|
|
63
|
+
}
|
|
64
|
+
const code16 = 30 + (Math.round(b) << 2 | Math.round(g) << 1 | Math.round(r));
|
|
65
|
+
return value === 2 ? code16 + 60 : code16;
|
|
66
|
+
};
|
|
67
|
+
const rgbToAnsi16 = (r, g, b) => ansi256To16(rgbToAnsi256(r, g, b));
|
|
68
|
+
|
|
69
|
+
const closeCode = 39;
|
|
70
|
+
const bgCloseCode = 49;
|
|
71
|
+
const bgOffset = 10;
|
|
72
|
+
const supportedColor = isAnsiColorSupported.isStdoutColorSupported();
|
|
73
|
+
const mono = { close: "", open: "" };
|
|
74
|
+
const esc = supportedColor > 0 ? (open, close) => {
|
|
75
|
+
return { close: `\x1B[${close}m`, open: `\x1B[${open}m` };
|
|
76
|
+
} : () => mono;
|
|
77
|
+
const createRgbFunction = (function_) => (r, g, b) => function_(rgbToAnsi256(Number(r), Number(g), Number(b)));
|
|
78
|
+
const createHexFunction = (function_) => (hex) => {
|
|
79
|
+
const [r, g, b] = convertHexToRgb(hex);
|
|
80
|
+
return function_(r, g, b);
|
|
81
|
+
};
|
|
82
|
+
let createAnsi256 = (code) => esc(`38;5;${code}`, closeCode);
|
|
83
|
+
let createBgAnsi256 = (code) => esc(`48;5;${code}`, bgCloseCode);
|
|
84
|
+
let createRgb = (r, g, b) => esc(`38;2;${r};${g};${b}`, closeCode);
|
|
85
|
+
let createBgRgb = (r, g, b) => esc(`48;2;${r};${g};${b}`, bgCloseCode);
|
|
86
|
+
if (supportedColor === 1) {
|
|
87
|
+
createAnsi256 = (code) => esc(ansi256To16(Number(code)), closeCode);
|
|
88
|
+
createBgAnsi256 = (code) => esc(ansi256To16(Number(code)) + bgOffset, bgCloseCode);
|
|
89
|
+
createRgb = (r, g, b) => esc(rgbToAnsi16(Number(r), Number(g), Number(b)), closeCode);
|
|
90
|
+
createBgRgb = (r, g, b) => esc(rgbToAnsi16(Number(r), Number(g), Number(b)) + bgOffset, bgCloseCode);
|
|
91
|
+
} else if (supportedColor === 2) {
|
|
92
|
+
createRgb = createRgbFunction(createAnsi256);
|
|
93
|
+
createBgRgb = createRgbFunction(createBgAnsi256);
|
|
94
|
+
}
|
|
95
|
+
const baseStyles = {
|
|
96
|
+
// 21 isn't widely supported and 22 does the same thing
|
|
97
|
+
bold: esc(1, 22),
|
|
98
|
+
dim: esc(2, 22),
|
|
99
|
+
hidden: esc(8, 28),
|
|
100
|
+
inverse: esc(7, 27),
|
|
101
|
+
italic: esc(3, 23),
|
|
102
|
+
overline: esc(53, 55),
|
|
103
|
+
reset: esc(0, 0),
|
|
104
|
+
strike: esc(9, 29),
|
|
105
|
+
// alias for strikethrough
|
|
106
|
+
strikethrough: esc(9, 29),
|
|
107
|
+
underline: esc(4, 24),
|
|
108
|
+
visible: mono
|
|
109
|
+
};
|
|
110
|
+
const baseColors = {
|
|
111
|
+
bgBlack: esc(40, bgCloseCode),
|
|
112
|
+
bgBlackBright: esc(100, bgCloseCode),
|
|
113
|
+
bgBlue: esc(44, bgCloseCode),
|
|
114
|
+
bgBlueBright: esc(104, bgCloseCode),
|
|
115
|
+
bgCyan: esc(46, bgCloseCode),
|
|
116
|
+
bgCyanBright: esc(106, bgCloseCode),
|
|
117
|
+
bgGray: esc(100, bgCloseCode),
|
|
118
|
+
// US spelling alias for bgBlackBright
|
|
119
|
+
bgGreen: esc(42, bgCloseCode),
|
|
120
|
+
bgGreenBright: esc(102, bgCloseCode),
|
|
121
|
+
bgGrey: esc(100, bgCloseCode),
|
|
122
|
+
// UK spelling alias for bgBlackBright
|
|
123
|
+
bgMagenta: esc(45, bgCloseCode),
|
|
124
|
+
bgMagentaBright: esc(105, bgCloseCode),
|
|
125
|
+
bgRed: esc(41, bgCloseCode),
|
|
126
|
+
bgRedBright: esc(101, bgCloseCode),
|
|
127
|
+
bgWhite: esc(47, bgCloseCode),
|
|
128
|
+
bgWhiteBright: esc(107, bgCloseCode),
|
|
129
|
+
bgYellow: esc(43, bgCloseCode),
|
|
130
|
+
bgYellowBright: esc(103, bgCloseCode),
|
|
131
|
+
black: esc(30, closeCode),
|
|
132
|
+
blackBright: esc(90, closeCode),
|
|
133
|
+
blue: esc(34, closeCode),
|
|
134
|
+
blueBright: esc(94, closeCode),
|
|
135
|
+
cyan: esc(36, closeCode),
|
|
136
|
+
cyanBright: esc(96, closeCode),
|
|
137
|
+
gray: esc(90, closeCode),
|
|
138
|
+
// US spelling alias for blackBright
|
|
139
|
+
green: esc(32, closeCode),
|
|
140
|
+
greenBright: esc(92, closeCode),
|
|
141
|
+
grey: esc(90, closeCode),
|
|
142
|
+
// UK spelling alias for blackBright
|
|
143
|
+
magenta: esc(35, closeCode),
|
|
144
|
+
magentaBright: esc(95, closeCode),
|
|
145
|
+
red: esc(31, closeCode),
|
|
146
|
+
redBright: esc(91, closeCode),
|
|
147
|
+
white: esc(37, closeCode),
|
|
148
|
+
whiteBright: esc(97, closeCode),
|
|
149
|
+
yellow: esc(33, closeCode),
|
|
150
|
+
yellowBright: esc(93, closeCode)
|
|
151
|
+
};
|
|
152
|
+
const styleMethods = {
|
|
153
|
+
bg: (code) => createBgAnsi256(clamp(code, 0, 255)),
|
|
154
|
+
bgHex: createHexFunction(createBgRgb),
|
|
155
|
+
bgRgb: (r, g, b) => createBgRgb(clamp(r, 0, 255), clamp(g, 0, 255), clamp(b, 0, 255)),
|
|
156
|
+
fg: (code) => createAnsi256(clamp(code, 0, 255)),
|
|
157
|
+
hex: createHexFunction(createRgb),
|
|
158
|
+
rgb: (r, g, b) => createRgb(clamp(r, 0, 255), clamp(g, 0, 255), clamp(b, 0, 255))
|
|
159
|
+
};
|
|
160
|
+
|
|
161
|
+
const stringReplaceAll = (string_, searchValue, replaceValue) => {
|
|
162
|
+
if (searchValue === "") {
|
|
163
|
+
return string_;
|
|
164
|
+
}
|
|
165
|
+
let pos = string_.indexOf(searchValue);
|
|
166
|
+
if (pos < 0) {
|
|
167
|
+
return string_;
|
|
168
|
+
}
|
|
169
|
+
const substringLength = searchValue.length;
|
|
170
|
+
let lastPos = 0;
|
|
171
|
+
let result = "";
|
|
172
|
+
while (~pos) {
|
|
173
|
+
result += string_.slice(lastPos, pos) + replaceValue;
|
|
174
|
+
lastPos = pos + substringLength;
|
|
175
|
+
pos = string_.indexOf(searchValue, lastPos);
|
|
176
|
+
}
|
|
177
|
+
return result + string_.slice(lastPos);
|
|
178
|
+
};
|
|
179
|
+
|
|
180
|
+
const styles = {};
|
|
181
|
+
let stylePrototype = null;
|
|
182
|
+
const wrapText = (strings, values, properties) => {
|
|
183
|
+
if (!strings) {
|
|
184
|
+
return "";
|
|
185
|
+
}
|
|
186
|
+
let string = strings.raw == void 0 ? `${strings}` : String.raw(strings, ...values);
|
|
187
|
+
if (string.includes("\x1B")) {
|
|
188
|
+
for (let currentProperties = properties; currentProperties; currentProperties = currentProperties.props) {
|
|
189
|
+
string = stringReplaceAll(string, currentProperties.close, currentProperties.open);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (string.includes("\n")) {
|
|
193
|
+
string = string.replace(/(\r*\n)/g, `${properties.closeStack}$1${properties.openStack}`);
|
|
194
|
+
}
|
|
195
|
+
return properties.openStack + string + properties.closeStack;
|
|
196
|
+
};
|
|
197
|
+
const createStyle = ({ props }, { close, open }) => {
|
|
198
|
+
const openStack = (props?.openStack ?? "") + open;
|
|
199
|
+
const closeStack = close + (props?.closeStack ?? "");
|
|
200
|
+
const style = (strings, ...values) => wrapText(strings, values, style.props);
|
|
201
|
+
Object.setPrototypeOf(style, stylePrototype);
|
|
202
|
+
style.props = { close, closeStack, open, openStack, props };
|
|
203
|
+
style.open = openStack;
|
|
204
|
+
style.close = closeStack;
|
|
205
|
+
return style;
|
|
206
|
+
};
|
|
207
|
+
const Colorize$1 = function() {
|
|
208
|
+
const self = (string_) => `${string_}`;
|
|
209
|
+
self.strip = (value) => value.replaceAll(ansiRegex(), "");
|
|
210
|
+
for (const name in baseColors) {
|
|
211
|
+
styles[name] = {
|
|
212
|
+
get() {
|
|
213
|
+
const style = createStyle(this, baseColors[name]);
|
|
214
|
+
Object.defineProperty(this, name, { value: style });
|
|
215
|
+
return style;
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
for (const name in baseStyles) {
|
|
220
|
+
styles[name] = {
|
|
221
|
+
get() {
|
|
222
|
+
const style = createStyle(this, baseStyles[name]);
|
|
223
|
+
Object.defineProperty(this, name, { value: style });
|
|
224
|
+
return style;
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
}
|
|
228
|
+
stylePrototype = Object.defineProperties({}, styles);
|
|
229
|
+
Object.setPrototypeOf(self, stylePrototype);
|
|
230
|
+
return self;
|
|
231
|
+
};
|
|
232
|
+
for (const name in styleMethods) {
|
|
233
|
+
styles[name] = {
|
|
234
|
+
get() {
|
|
235
|
+
return (...arguments_) => (
|
|
236
|
+
// @ts-expect-error: TODO: fix typing of `arguments_`
|
|
237
|
+
createStyle(this, styleMethods[name](...arguments_))
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
styles.ansi256 = styles.fg;
|
|
243
|
+
styles.bgAnsi256 = styles.bg;
|
|
244
|
+
|
|
245
|
+
const colorize = new Colorize$1();
|
|
246
|
+
const Colorize = Colorize$1;
|
|
247
|
+
|
|
248
|
+
module.exports = colorize;
|
|
249
|
+
module.exports.Colorize = Colorize;
|
package/dist/index.server.mjs
CHANGED
|
@@ -1 +1,63 @@
|
|
|
1
|
-
import
|
|
1
|
+
import Colorize from './packem_shared/Colorize-BenP3bFn.mjs';
|
|
2
|
+
|
|
3
|
+
const colorize = new Colorize();
|
|
4
|
+
const {
|
|
5
|
+
ansi256,
|
|
6
|
+
bg,
|
|
7
|
+
bgAnsi256,
|
|
8
|
+
bgBlack,
|
|
9
|
+
bgBlackBright,
|
|
10
|
+
bgBlue,
|
|
11
|
+
bgBlueBright,
|
|
12
|
+
bgCyan,
|
|
13
|
+
bgCyanBright,
|
|
14
|
+
bgGray,
|
|
15
|
+
bgGreen,
|
|
16
|
+
bgGreenBright,
|
|
17
|
+
bgGrey,
|
|
18
|
+
bgHex,
|
|
19
|
+
bgMagenta,
|
|
20
|
+
bgMagentaBright,
|
|
21
|
+
bgRed,
|
|
22
|
+
bgRedBright,
|
|
23
|
+
bgRgb,
|
|
24
|
+
bgWhite,
|
|
25
|
+
bgWhiteBright,
|
|
26
|
+
bgYellow,
|
|
27
|
+
bgYellowBright,
|
|
28
|
+
black,
|
|
29
|
+
blackBright,
|
|
30
|
+
blue,
|
|
31
|
+
blueBright,
|
|
32
|
+
bold,
|
|
33
|
+
cyan,
|
|
34
|
+
cyanBright,
|
|
35
|
+
dim,
|
|
36
|
+
fg,
|
|
37
|
+
gray,
|
|
38
|
+
green,
|
|
39
|
+
greenBright,
|
|
40
|
+
grey,
|
|
41
|
+
hex,
|
|
42
|
+
hidden,
|
|
43
|
+
inverse,
|
|
44
|
+
italic,
|
|
45
|
+
magenta,
|
|
46
|
+
magentaBright,
|
|
47
|
+
overline,
|
|
48
|
+
red,
|
|
49
|
+
redBright,
|
|
50
|
+
reset,
|
|
51
|
+
rgb,
|
|
52
|
+
strike,
|
|
53
|
+
strikethrough,
|
|
54
|
+
strip,
|
|
55
|
+
underline,
|
|
56
|
+
visible,
|
|
57
|
+
white,
|
|
58
|
+
whiteBright,
|
|
59
|
+
yellow,
|
|
60
|
+
yellowBright
|
|
61
|
+
} = colorize;
|
|
62
|
+
|
|
63
|
+
export { Colorize, ansi256, bg, bgAnsi256, bgBlack, bgBlackBright, bgBlue, bgBlueBright, bgCyan, bgCyanBright, bgGray, bgGreen, bgGreenBright, bgGrey, bgHex, bgMagenta, bgMagentaBright, bgRed, bgRedBright, bgRgb, bgWhite, bgWhiteBright, bgYellow, bgYellowBright, black, blackBright, blue, blueBright, bold, cyan, cyanBright, colorize as default, dim, fg, gray, green, greenBright, grey, hex, hidden, inverse, italic, magenta, magentaBright, overline, red, redBright, reset, rgb, strike, strikethrough, strip, underline, visible, white, whiteBright, yellow, yellowBright };
|
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
import { isStdoutColorSupported } from '@visulima/is-ansi-color-supported';
|
|
2
|
+
|
|
3
|
+
function ansiRegex({ onlyFirst = false } = {}) {
|
|
4
|
+
const ST = "(?:\\u0007|\\u001B\\u005C|\\u009C)";
|
|
5
|
+
const osc = `(?:\\u001B\\][\\s\\S]*?${ST})`;
|
|
6
|
+
const csi = "[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";
|
|
7
|
+
const pattern = `${osc}|${csi}`;
|
|
8
|
+
return new RegExp(pattern, onlyFirst ? void 0 : "g");
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const clamp = (number_, min, max) => min > number_ ? min : Math.min(number_, max);
|
|
12
|
+
|
|
13
|
+
const convertHexToRgb = (hex) => {
|
|
14
|
+
let [, color] = /([a-f\d]{3,6})/i.exec(hex) ?? [];
|
|
15
|
+
const length_ = color ? color.length : 0;
|
|
16
|
+
if (length_ === 3) {
|
|
17
|
+
color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];
|
|
18
|
+
} else if (length_ !== 6) {
|
|
19
|
+
return [0, 0, 0];
|
|
20
|
+
}
|
|
21
|
+
const number_ = Number.parseInt(color, 16);
|
|
22
|
+
return [number_ >> 16 & 255, number_ >> 8 & 255, number_ & 255];
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
const rgbToAnsi256 = (r, g, b) => {
|
|
26
|
+
if (r === g && g === b) {
|
|
27
|
+
if (r < 8) {
|
|
28
|
+
return 16;
|
|
29
|
+
}
|
|
30
|
+
if (r > 248) {
|
|
31
|
+
return 231;
|
|
32
|
+
}
|
|
33
|
+
return Math.round((r - 8) / 247 * 24) + 232;
|
|
34
|
+
}
|
|
35
|
+
return 16 + 36 * Math.round(r / 51) + 6 * Math.round(g / 51) + Math.round(b / 51);
|
|
36
|
+
};
|
|
37
|
+
const ansi256To16 = (code) => {
|
|
38
|
+
let r;
|
|
39
|
+
let g;
|
|
40
|
+
let b;
|
|
41
|
+
if (code < 8) {
|
|
42
|
+
return 30 + code;
|
|
43
|
+
}
|
|
44
|
+
if (code < 16) {
|
|
45
|
+
return 90 + (code - 8);
|
|
46
|
+
}
|
|
47
|
+
if (code >= 232) {
|
|
48
|
+
r = g = b = ((code - 232) * 10 + 8) / 255;
|
|
49
|
+
} else {
|
|
50
|
+
code -= 16;
|
|
51
|
+
const remainder = code % 36;
|
|
52
|
+
r = Math.floor(code / 36) / 5;
|
|
53
|
+
g = Math.floor(remainder / 6) / 5;
|
|
54
|
+
b = remainder % 6 / 5;
|
|
55
|
+
}
|
|
56
|
+
const value = Math.max(r, g, b) * 2;
|
|
57
|
+
if (value === 0) {
|
|
58
|
+
return 30;
|
|
59
|
+
}
|
|
60
|
+
const code16 = 30 + (Math.round(b) << 2 | Math.round(g) << 1 | Math.round(r));
|
|
61
|
+
return value === 2 ? code16 + 60 : code16;
|
|
62
|
+
};
|
|
63
|
+
const rgbToAnsi16 = (r, g, b) => ansi256To16(rgbToAnsi256(r, g, b));
|
|
64
|
+
|
|
65
|
+
const closeCode = 39;
|
|
66
|
+
const bgCloseCode = 49;
|
|
67
|
+
const bgOffset = 10;
|
|
68
|
+
const supportedColor = isStdoutColorSupported();
|
|
69
|
+
const mono = { close: "", open: "" };
|
|
70
|
+
const esc = supportedColor > 0 ? (open, close) => {
|
|
71
|
+
return { close: `\x1B[${close}m`, open: `\x1B[${open}m` };
|
|
72
|
+
} : () => mono;
|
|
73
|
+
const createRgbFunction = (function_) => (r, g, b) => function_(rgbToAnsi256(Number(r), Number(g), Number(b)));
|
|
74
|
+
const createHexFunction = (function_) => (hex) => {
|
|
75
|
+
const [r, g, b] = convertHexToRgb(hex);
|
|
76
|
+
return function_(r, g, b);
|
|
77
|
+
};
|
|
78
|
+
let createAnsi256 = (code) => esc(`38;5;${code}`, closeCode);
|
|
79
|
+
let createBgAnsi256 = (code) => esc(`48;5;${code}`, bgCloseCode);
|
|
80
|
+
let createRgb = (r, g, b) => esc(`38;2;${r};${g};${b}`, closeCode);
|
|
81
|
+
let createBgRgb = (r, g, b) => esc(`48;2;${r};${g};${b}`, bgCloseCode);
|
|
82
|
+
if (supportedColor === 1) {
|
|
83
|
+
createAnsi256 = (code) => esc(ansi256To16(Number(code)), closeCode);
|
|
84
|
+
createBgAnsi256 = (code) => esc(ansi256To16(Number(code)) + bgOffset, bgCloseCode);
|
|
85
|
+
createRgb = (r, g, b) => esc(rgbToAnsi16(Number(r), Number(g), Number(b)), closeCode);
|
|
86
|
+
createBgRgb = (r, g, b) => esc(rgbToAnsi16(Number(r), Number(g), Number(b)) + bgOffset, bgCloseCode);
|
|
87
|
+
} else if (supportedColor === 2) {
|
|
88
|
+
createRgb = createRgbFunction(createAnsi256);
|
|
89
|
+
createBgRgb = createRgbFunction(createBgAnsi256);
|
|
90
|
+
}
|
|
91
|
+
const baseStyles = {
|
|
92
|
+
// 21 isn't widely supported and 22 does the same thing
|
|
93
|
+
bold: esc(1, 22),
|
|
94
|
+
dim: esc(2, 22),
|
|
95
|
+
hidden: esc(8, 28),
|
|
96
|
+
inverse: esc(7, 27),
|
|
97
|
+
italic: esc(3, 23),
|
|
98
|
+
overline: esc(53, 55),
|
|
99
|
+
reset: esc(0, 0),
|
|
100
|
+
strike: esc(9, 29),
|
|
101
|
+
// alias for strikethrough
|
|
102
|
+
strikethrough: esc(9, 29),
|
|
103
|
+
underline: esc(4, 24),
|
|
104
|
+
visible: mono
|
|
105
|
+
};
|
|
106
|
+
const baseColors = {
|
|
107
|
+
bgBlack: esc(40, bgCloseCode),
|
|
108
|
+
bgBlackBright: esc(100, bgCloseCode),
|
|
109
|
+
bgBlue: esc(44, bgCloseCode),
|
|
110
|
+
bgBlueBright: esc(104, bgCloseCode),
|
|
111
|
+
bgCyan: esc(46, bgCloseCode),
|
|
112
|
+
bgCyanBright: esc(106, bgCloseCode),
|
|
113
|
+
bgGray: esc(100, bgCloseCode),
|
|
114
|
+
// US spelling alias for bgBlackBright
|
|
115
|
+
bgGreen: esc(42, bgCloseCode),
|
|
116
|
+
bgGreenBright: esc(102, bgCloseCode),
|
|
117
|
+
bgGrey: esc(100, bgCloseCode),
|
|
118
|
+
// UK spelling alias for bgBlackBright
|
|
119
|
+
bgMagenta: esc(45, bgCloseCode),
|
|
120
|
+
bgMagentaBright: esc(105, bgCloseCode),
|
|
121
|
+
bgRed: esc(41, bgCloseCode),
|
|
122
|
+
bgRedBright: esc(101, bgCloseCode),
|
|
123
|
+
bgWhite: esc(47, bgCloseCode),
|
|
124
|
+
bgWhiteBright: esc(107, bgCloseCode),
|
|
125
|
+
bgYellow: esc(43, bgCloseCode),
|
|
126
|
+
bgYellowBright: esc(103, bgCloseCode),
|
|
127
|
+
black: esc(30, closeCode),
|
|
128
|
+
blackBright: esc(90, closeCode),
|
|
129
|
+
blue: esc(34, closeCode),
|
|
130
|
+
blueBright: esc(94, closeCode),
|
|
131
|
+
cyan: esc(36, closeCode),
|
|
132
|
+
cyanBright: esc(96, closeCode),
|
|
133
|
+
gray: esc(90, closeCode),
|
|
134
|
+
// US spelling alias for blackBright
|
|
135
|
+
green: esc(32, closeCode),
|
|
136
|
+
greenBright: esc(92, closeCode),
|
|
137
|
+
grey: esc(90, closeCode),
|
|
138
|
+
// UK spelling alias for blackBright
|
|
139
|
+
magenta: esc(35, closeCode),
|
|
140
|
+
magentaBright: esc(95, closeCode),
|
|
141
|
+
red: esc(31, closeCode),
|
|
142
|
+
redBright: esc(91, closeCode),
|
|
143
|
+
white: esc(37, closeCode),
|
|
144
|
+
whiteBright: esc(97, closeCode),
|
|
145
|
+
yellow: esc(33, closeCode),
|
|
146
|
+
yellowBright: esc(93, closeCode)
|
|
147
|
+
};
|
|
148
|
+
const styleMethods = {
|
|
149
|
+
bg: (code) => createBgAnsi256(clamp(code, 0, 255)),
|
|
150
|
+
bgHex: createHexFunction(createBgRgb),
|
|
151
|
+
bgRgb: (r, g, b) => createBgRgb(clamp(r, 0, 255), clamp(g, 0, 255), clamp(b, 0, 255)),
|
|
152
|
+
fg: (code) => createAnsi256(clamp(code, 0, 255)),
|
|
153
|
+
hex: createHexFunction(createRgb),
|
|
154
|
+
rgb: (r, g, b) => createRgb(clamp(r, 0, 255), clamp(g, 0, 255), clamp(b, 0, 255))
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
const stringReplaceAll = (string_, searchValue, replaceValue) => {
|
|
158
|
+
if (searchValue === "") {
|
|
159
|
+
return string_;
|
|
160
|
+
}
|
|
161
|
+
let pos = string_.indexOf(searchValue);
|
|
162
|
+
if (pos < 0) {
|
|
163
|
+
return string_;
|
|
164
|
+
}
|
|
165
|
+
const substringLength = searchValue.length;
|
|
166
|
+
let lastPos = 0;
|
|
167
|
+
let result = "";
|
|
168
|
+
while (~pos) {
|
|
169
|
+
result += string_.slice(lastPos, pos) + replaceValue;
|
|
170
|
+
lastPos = pos + substringLength;
|
|
171
|
+
pos = string_.indexOf(searchValue, lastPos);
|
|
172
|
+
}
|
|
173
|
+
return result + string_.slice(lastPos);
|
|
174
|
+
};
|
|
175
|
+
|
|
176
|
+
const styles = {};
|
|
177
|
+
let stylePrototype = null;
|
|
178
|
+
const wrapText = (strings, values, properties) => {
|
|
179
|
+
if (!strings) {
|
|
180
|
+
return "";
|
|
181
|
+
}
|
|
182
|
+
let string = strings.raw == void 0 ? `${strings}` : String.raw(strings, ...values);
|
|
183
|
+
if (string.includes("\x1B")) {
|
|
184
|
+
for (let currentProperties = properties; currentProperties; currentProperties = currentProperties.props) {
|
|
185
|
+
string = stringReplaceAll(string, currentProperties.close, currentProperties.open);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (string.includes("\n")) {
|
|
189
|
+
string = string.replace(/(\r*\n)/g, `${properties.closeStack}$1${properties.openStack}`);
|
|
190
|
+
}
|
|
191
|
+
return properties.openStack + string + properties.closeStack;
|
|
192
|
+
};
|
|
193
|
+
const createStyle = ({ props }, { close, open }) => {
|
|
194
|
+
const openStack = (props?.openStack ?? "") + open;
|
|
195
|
+
const closeStack = close + (props?.closeStack ?? "");
|
|
196
|
+
const style = (strings, ...values) => wrapText(strings, values, style.props);
|
|
197
|
+
Object.setPrototypeOf(style, stylePrototype);
|
|
198
|
+
style.props = { close, closeStack, open, openStack, props };
|
|
199
|
+
style.open = openStack;
|
|
200
|
+
style.close = closeStack;
|
|
201
|
+
return style;
|
|
202
|
+
};
|
|
203
|
+
const Colorize = function() {
|
|
204
|
+
const self = (string_) => `${string_}`;
|
|
205
|
+
self.strip = (value) => value.replaceAll(ansiRegex(), "");
|
|
206
|
+
for (const name in baseColors) {
|
|
207
|
+
styles[name] = {
|
|
208
|
+
get() {
|
|
209
|
+
const style = createStyle(this, baseColors[name]);
|
|
210
|
+
Object.defineProperty(this, name, { value: style });
|
|
211
|
+
return style;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
for (const name in baseStyles) {
|
|
216
|
+
styles[name] = {
|
|
217
|
+
get() {
|
|
218
|
+
const style = createStyle(this, baseStyles[name]);
|
|
219
|
+
Object.defineProperty(this, name, { value: style });
|
|
220
|
+
return style;
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
stylePrototype = Object.defineProperties({}, styles);
|
|
225
|
+
Object.setPrototypeOf(self, stylePrototype);
|
|
226
|
+
return self;
|
|
227
|
+
};
|
|
228
|
+
for (const name in styleMethods) {
|
|
229
|
+
styles[name] = {
|
|
230
|
+
get() {
|
|
231
|
+
return (...arguments_) => (
|
|
232
|
+
// @ts-expect-error: TODO: fix typing of `arguments_`
|
|
233
|
+
createStyle(this, styleMethods[name](...arguments_))
|
|
234
|
+
);
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
styles.ansi256 = styles.fg;
|
|
239
|
+
styles.bgAnsi256 = styles.bg;
|
|
240
|
+
|
|
241
|
+
export { Colorize as default };
|