@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.
Files changed (32) hide show
  1. package/CHANGELOG.md +41 -1
  2. package/README.md +208 -12
  3. package/dist/gradient.cjs +60 -3
  4. package/dist/gradient.mjs +54 -3
  5. package/dist/index.browser.mjs +63 -1
  6. package/dist/index.server.cjs +249 -2
  7. package/dist/index.server.mjs +63 -1
  8. package/dist/packem_shared/Colorize-BenP3bFn.mjs +241 -0
  9. package/dist/packem_shared/Colorize-Ca9CXTcj.mjs +413 -0
  10. package/dist/packem_shared/GradientBuilder-Ba4Teq6P.mjs +487 -0
  11. package/dist/packem_shared/GradientBuilder-DjJK22kP.cjs +491 -0
  12. package/dist/packem_shared/colorize.server-BA3gZZXz.cjs +193 -0
  13. package/dist/packem_shared/colorize.server-ry9FZNfG.mjs +191 -0
  14. package/dist/packem_shared/convertHexToRgb-CWdAm2kE.mjs +13 -0
  15. package/dist/packem_shared/convertHexToRgb-DvkHBM3-.cjs +17 -0
  16. package/dist/packem_shared/rgbToAnsi256-BdS0fomP.mjs +41 -0
  17. package/dist/packem_shared/rgbToAnsi256-DL8eajTz.cjs +47 -0
  18. package/dist/template.cjs +144 -2
  19. package/dist/template.mjs +138 -2
  20. package/dist/utils.cjs +13 -1
  21. package/dist/utils.mjs +2 -1
  22. package/package.json +2 -2
  23. package/dist/packem_shared/Colorize-Bn8gI3ME.mjs +0 -1
  24. package/dist/packem_shared/Colorize-CfIXnDUD.mjs +0 -2
  25. package/dist/packem_shared/GradientBuilder-C2IS34v_.cjs +0 -1
  26. package/dist/packem_shared/GradientBuilder-I_j6wpvU.mjs +0 -1
  27. package/dist/packem_shared/ansi256To16--f09kvlF.cjs +0 -1
  28. package/dist/packem_shared/ansi256To16-YETEPW8R.mjs +0 -1
  29. package/dist/packem_shared/colorize.server-9hV-s1hY.mjs +0 -2
  30. package/dist/packem_shared/colorize.server-B0BWdm8_.cjs +0 -2
  31. package/dist/packem_shared/convertHexToRgb-BEnfEytq.cjs +0 -1
  32. package/dist/packem_shared/convertHexToRgb-DGcGUKnj.mjs +0 -1
@@ -1,2 +1,249 @@
1
- "use strict";var H=Object.defineProperty;var u=(e,r)=>H(e,"name",{value:r,configurable:!0});Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const z=require("@visulima/is-ansi-color-supported");var F=Object.defineProperty,q=u((e,r)=>F(e,"name",{value:r,configurable:!0}),"e$3");function N({onlyFirst:e=!1}={}){const r="(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]";return new RegExp(r,e?void 0:"g")}u(N,"t$1");q(N,"ansiRegex");var W=Object.defineProperty,Y=u((e,r)=>W(e,"name",{value:r,configurable:!0}),"n$1");const g=Y((e,r,n)=>r>e?r:Math.min(e,n),"clamp");var _=Object.defineProperty,D=u((e,r)=>_(e,"name",{value:r,configurable:!0}),"e$2");const E=D(e=>{let[,r]=/([a-f\d]{3,6})/i.exec(e)??[];const n=r?r.length:0;if(n===3)r=r[0]+r[0]+r[1]+r[1]+r[2]+r[2];else if(n!==6)return[0,0,0];const o=Number.parseInt(r,16);return[o>>16&255,o>>8&255,o&255]},"convertHexToRgb");var I=Object.defineProperty,O=u((e,r)=>I(e,"name",{value:r,configurable:!0}),"e$1");const w=O((e,r,n)=>e===r&&r===n?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/51)+6*Math.round(r/51)+Math.round(n/51),"rgbToAnsi256"),B=O(e=>{let r,n,o;if(e<8)return 30+e;if(e<16)return 90+(e-8);if(e>=232)r=n=o=((e-232)*10+8)/255;else{e-=16;const f=e%36;r=Math.floor(e/36)/5,n=Math.floor(f/6)/5,o=f%6/5}const c=Math.max(r,n,o)*2;if(c===0)return 30;const l=30+(Math.round(o)<<2|Math.round(n)<<1|Math.round(r));return c===2?l+60:l},"ansi256To16"),x=O((e,r,n)=>B(w(e,r,n)),"rgbToAnsi16");var Z=Object.defineProperty,s=u((e,r)=>Z(e,"name",{value:r,configurable:!0}),"b");const a=39,i=49,M=10,v=z.isStdoutColorSupported(),T={close:"",open:""},t=v>0?(e,r)=>({close:`\x1B[${r}m`,open:`\x1B[${e}m`}):()=>T,R=s(e=>(r,n,o)=>e(w(Number(r),Number(n),Number(o))),"createRgbFunction"),k=s(e=>r=>{const[n,o,c]=E(r);return e(n,o,c)},"createHexFunction");let m=s(e=>t(`38;5;${e}`,a),"createAnsi256"),y=s(e=>t(`48;5;${e}`,i),"createBgAnsi256"),d=s((e,r,n)=>t(`38;2;${e};${r};${n}`,a),"createRgb"),h=s((e,r,n)=>t(`48;2;${e};${r};${n}`,i),"createBgRgb");v===1?(m=s(e=>t(B(Number(e)),a),"createAnsi256"),y=s(e=>t(B(Number(e))+M,i),"createBgAnsi256"),d=s((e,r,n)=>t(x(Number(e),Number(r),Number(n)),a),"createRgb"),h=s((e,r,n)=>t(x(Number(e),Number(r),Number(n))+M,i),"createBgRgb")):v===2&&(d=R(m),h=R(y));const A={bold:t(1,22),dim:t(2,22),hidden:t(8,28),inverse:t(7,27),italic:t(3,23),overline:t(53,55),reset:t(0,0),strike:t(9,29),strikethrough:t(9,29),underline:t(4,24),visible:T},P={bgBlack:t(40,i),bgBlackBright:t(100,i),bgBlue:t(44,i),bgBlueBright:t(104,i),bgCyan:t(46,i),bgCyanBright:t(106,i),bgGray:t(100,i),bgGreen:t(42,i),bgGreenBright:t(102,i),bgGrey:t(100,i),bgMagenta:t(45,i),bgMagentaBright:t(105,i),bgRed:t(41,i),bgRedBright:t(101,i),bgWhite:t(47,i),bgWhiteBright:t(107,i),bgYellow:t(43,i),bgYellowBright:t(103,i),black:t(30,a),blackBright:t(90,a),blue:t(34,a),blueBright:t(94,a),cyan:t(36,a),cyanBright:t(96,a),gray:t(90,a),green:t(32,a),greenBright:t(92,a),grey:t(90,a),magenta:t(35,a),magentaBright:t(95,a),red:t(31,a),redBright:t(91,a),white:t(37,a),whiteBright:t(97,a),yellow:t(33,a),yellowBright:t(93,a)},j={bg:s(e=>y(g(e,0,255)),"bg"),bgHex:k(h),bgRgb:s((e,r,n)=>h(g(e,0,255),g(r,0,255),g(n,0,255)),"bgRgb"),fg:s(e=>m(g(e,0,255)),"fg"),hex:k(d),rgb:s((e,r,n)=>d(g(e,0,255),g(r,0,255),g(n,0,255)),"rgb")};var J=Object.defineProperty,K=u((e,r)=>J(e,"name",{value:r,configurable:!0}),"s");const L=K((e,r,n)=>{if(r==="")return e;let o=e.indexOf(r);if(o<0)return e;const c=r.length;let l=0,f="";for(;~o;)f+=e.slice(l,o)+n,l=o+c,o=e.indexOf(r,l);return f+e.slice(l)},"stringReplaceAll");var Q=Object.defineProperty,p=u((e,r)=>Q(e,"name",{value:r,configurable:!0}),"a");const b={};let $=null;const U=p((e,r,n)=>{if(!e)return"";let o=e.raw==null?`${e}`:String.raw(e,...r);if(o.includes("\x1B"))for(let c=n;c;c=c.props)o=L(o,c.close,c.open);return o.includes(`
2
- `)&&(o=o.replace(/(\r*\n)/g,`${n.closeStack}$1${n.openStack}`)),n.openStack+o+n.closeStack},"wrapText"),S=p(({props:e},{close:r,open:n})=>{const o=(e?.openStack??"")+n,c=r+(e?.closeStack??""),l=p((f,...G)=>U(f,G,l.props),"style");return Object.setPrototypeOf(l,$),l.props={close:r,closeStack:c,open:n,openStack:o,props:e},l.open=o,l.close=c,l},"createStyle"),C=p(function(){const e=p(r=>`${r}`,"self");e.strip=r=>r.replaceAll(N(),"");for(const r in P)b[r]={get(){const n=S(this,P[r]);return Object.defineProperty(this,r,{value:n}),n}};for(const r in A)b[r]={get(){const n=S(this,A[r]);return Object.defineProperty(this,r,{value:n}),n}};return $=Object.defineProperties({},b),Object.setPrototypeOf(e,$),e},"Colorize");for(const e in j)b[e]={get(){return(...r)=>S(this,j[e](...r))}};b.ansi256=b.fg;b.bgAnsi256=b.bg;const V=new C,X=C;module.exports=V;module.exports.Colorize=X;
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;
@@ -1 +1,63 @@
1
- import g from"./packem_shared/Colorize-CfIXnDUD.mjs";const e=new g,{ansi256:i,bg:t,bgAnsi256:b,bgBlack:h,bgBlackBright:a,bgBlue:l,bgBlueBright:n,bgCyan:B,bgCyanBright:o,bgGray:s,bgGreen:d,bgGreenBright:y,bgGrey:c,bgHex:u,bgMagenta:w,bgMagentaBright:k,bgRed:m,bgRedBright:G,bgRgb:f,bgWhite:p,bgWhiteBright:v,bgYellow:x,bgYellowBright:C,black:R,blackBright:M,blue:W,blueBright:Y,bold:z,cyan:A,cyanBright:H,dim:S,fg:j,gray:q,green:D,greenBright:E,grey:F,hex:I,hidden:J,inverse:K,italic:L,magenta:N,magentaBright:O,overline:P,red:Q,redBright:T,reset:U,rgb:V,strike:X,strikethrough:Z,strip:_,underline:$,visible:gg,white:eg,whiteBright:rg,yellow:ig,yellowBright:tg}=e;export{g as Colorize,i as ansi256,t as bg,b as bgAnsi256,h as bgBlack,a as bgBlackBright,l as bgBlue,n as bgBlueBright,B as bgCyan,o as bgCyanBright,s as bgGray,d as bgGreen,y as bgGreenBright,c as bgGrey,u as bgHex,w as bgMagenta,k as bgMagentaBright,m as bgRed,G as bgRedBright,f as bgRgb,p as bgWhite,v as bgWhiteBright,x as bgYellow,C as bgYellowBright,R as black,M as blackBright,W as blue,Y as blueBright,z as bold,A as cyan,H as cyanBright,e as default,S as dim,j as fg,q as gray,D as green,E as greenBright,F as grey,I as hex,J as hidden,K as inverse,L as italic,N as magenta,O as magentaBright,P as overline,Q as red,T as redBright,U as reset,V as rgb,X as strike,Z as strikethrough,_ as strip,$ as underline,gg as visible,eg as white,rg as whiteBright,ig as yellow,tg as yellowBright};
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 };