@linxiraos/pi-utils 1.0.0

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 (244) hide show
  1. package/CHANGELOG.md +449 -0
  2. package/README.md +36 -0
  3. package/dist/types/abortable.d.ts +32 -0
  4. package/dist/types/acp/connection.d.ts +118 -0
  5. package/dist/types/acp/protocol.d.ts +526 -0
  6. package/dist/types/acp/schema.d.ts +41 -0
  7. package/dist/types/acp/stream.d.ts +8 -0
  8. package/dist/types/acp/transport.d.ts +81 -0
  9. package/dist/types/acp.d.ts +6 -0
  10. package/dist/types/async.d.ts +20 -0
  11. package/dist/types/binary.d.ts +17 -0
  12. package/dist/types/browsers.d.ts +68 -0
  13. package/dist/types/chalk.d.ts +125 -0
  14. package/dist/types/cli.d.ts +134 -0
  15. package/dist/types/color.d.ts +102 -0
  16. package/dist/types/dates.d.ts +7 -0
  17. package/dist/types/dirs.d.ts +282 -0
  18. package/dist/types/docx/converter.d.ts +46 -0
  19. package/dist/types/docx/xml.d.ts +26 -0
  20. package/dist/types/docx/zip.d.ts +6 -0
  21. package/dist/types/docx.d.ts +11 -0
  22. package/dist/types/dom/core.d.ts +431 -0
  23. package/dist/types/dom/parser.d.ts +7 -0
  24. package/dist/types/dom/selector.d.ts +5 -0
  25. package/dist/types/dom.d.ts +5 -0
  26. package/dist/types/env.d.ts +124 -0
  27. package/dist/types/fetch-retry.d.ts +96 -0
  28. package/dist/types/file-lock.d.ts +23 -0
  29. package/dist/types/format.d.ts +37 -0
  30. package/dist/types/frontmatter.d.ts +46 -0
  31. package/dist/types/fs-error.d.ts +31 -0
  32. package/dist/types/glob.d.ts +28 -0
  33. package/dist/types/headers.d.ts +34 -0
  34. package/dist/types/index.d.ts +39 -0
  35. package/dist/types/json-parse.d.ts +74 -0
  36. package/dist/types/json.d.ts +14 -0
  37. package/dist/types/logger/rotating-file.d.ts +18 -0
  38. package/dist/types/logger.d.ts +96 -0
  39. package/dist/types/loop-phase.d.ts +10 -0
  40. package/dist/types/lru.d.ts +46 -0
  41. package/dist/types/marked/core.d.ts +445 -0
  42. package/dist/types/marked.d.ts +2 -0
  43. package/dist/types/mermaid-ascii.d.ts +11 -0
  44. package/dist/types/mime.d.ts +29 -0
  45. package/dist/types/module-timer.d.ts +1 -0
  46. package/dist/types/path-tree.d.ts +76 -0
  47. package/dist/types/path.d.ts +2 -0
  48. package/dist/types/peek-file.d.ts +29 -0
  49. package/dist/types/postmortem.d.ts +104 -0
  50. package/dist/types/process-name.d.ts +7 -0
  51. package/dist/types/procmgr.d.ts +74 -0
  52. package/dist/types/prompt.d.ts +18 -0
  53. package/dist/types/ptree.d.ts +110 -0
  54. package/dist/types/readability/readability.d.ts +9 -0
  55. package/dist/types/readability/readerable.d.ts +10 -0
  56. package/dist/types/readability/types.d.ts +70 -0
  57. package/dist/types/readability.d.ts +4 -0
  58. package/dist/types/ring.d.ts +93 -0
  59. package/dist/types/runtime-install.d.ts +78 -0
  60. package/dist/types/sanitize-text.d.ts +29 -0
  61. package/dist/types/snowflake.d.ts +25 -0
  62. package/dist/types/stderr-guard.d.ts +22 -0
  63. package/dist/types/stream.d.ts +67 -0
  64. package/dist/types/tab-spacing.d.ts +24 -0
  65. package/dist/types/temp.d.ts +17 -0
  66. package/dist/types/template.d.ts +62 -0
  67. package/dist/types/timing-buffer.d.ts +22 -0
  68. package/dist/types/tls-fetch.d.ts +37 -0
  69. package/dist/types/turndown/gfm.d.ts +11 -0
  70. package/dist/types/turndown/html.d.ts +5 -0
  71. package/dist/types/turndown/service.d.ts +21 -0
  72. package/dist/types/turndown/types.d.ts +70 -0
  73. package/dist/types/turndown.d.ts +4 -0
  74. package/dist/types/type-guards.d.ts +5 -0
  75. package/dist/types/vendor/mermaid-ascii/ascii/ansi.d.ts +41 -0
  76. package/dist/types/vendor/mermaid-ascii/ascii/canvas.d.ts +89 -0
  77. package/dist/types/vendor/mermaid-ascii/ascii/class-diagram.d.ts +7 -0
  78. package/dist/types/vendor/mermaid-ascii/ascii/converter.d.ts +12 -0
  79. package/dist/types/vendor/mermaid-ascii/ascii/draw.d.ts +66 -0
  80. package/dist/types/vendor/mermaid-ascii/ascii/edge-bundling.d.ts +48 -0
  81. package/dist/types/vendor/mermaid-ascii/ascii/edge-routing.d.ts +43 -0
  82. package/dist/types/vendor/mermaid-ascii/ascii/er-diagram.d.ts +7 -0
  83. package/dist/types/vendor/mermaid-ascii/ascii/grid.d.ts +56 -0
  84. package/dist/types/vendor/mermaid-ascii/ascii/index.d.ts +65 -0
  85. package/dist/types/vendor/mermaid-ascii/ascii/multiline-utils.d.ts +27 -0
  86. package/dist/types/vendor/mermaid-ascii/ascii/pathfinder.d.ts +17 -0
  87. package/dist/types/vendor/mermaid-ascii/ascii/sequence.d.ts +7 -0
  88. package/dist/types/vendor/mermaid-ascii/ascii/shapes/circle.d.ts +11 -0
  89. package/dist/types/vendor/mermaid-ascii/ascii/shapes/corners.d.ts +34 -0
  90. package/dist/types/vendor/mermaid-ascii/ascii/shapes/diamond.d.ts +11 -0
  91. package/dist/types/vendor/mermaid-ascii/ascii/shapes/hexagon.d.ts +11 -0
  92. package/dist/types/vendor/mermaid-ascii/ascii/shapes/index.d.ts +26 -0
  93. package/dist/types/vendor/mermaid-ascii/ascii/shapes/rectangle.d.ts +31 -0
  94. package/dist/types/vendor/mermaid-ascii/ascii/shapes/rounded.d.ts +11 -0
  95. package/dist/types/vendor/mermaid-ascii/ascii/shapes/special.d.ts +59 -0
  96. package/dist/types/vendor/mermaid-ascii/ascii/shapes/stadium.d.ts +17 -0
  97. package/dist/types/vendor/mermaid-ascii/ascii/shapes/state.d.ts +30 -0
  98. package/dist/types/vendor/mermaid-ascii/ascii/shapes/types.d.ts +55 -0
  99. package/dist/types/vendor/mermaid-ascii/ascii/types.d.ts +206 -0
  100. package/dist/types/vendor/mermaid-ascii/ascii/validate.d.ts +51 -0
  101. package/dist/types/vendor/mermaid-ascii/ascii/xychart.d.ts +2 -0
  102. package/dist/types/vendor/mermaid-ascii/class/parser.d.ts +6 -0
  103. package/dist/types/vendor/mermaid-ascii/class/types.d.ts +102 -0
  104. package/dist/types/vendor/mermaid-ascii/er/parser.d.ts +6 -0
  105. package/dist/types/vendor/mermaid-ascii/er/types.d.ts +76 -0
  106. package/dist/types/vendor/mermaid-ascii/index.d.ts +1 -0
  107. package/dist/types/vendor/mermaid-ascii/multiline-utils.d.ts +9 -0
  108. package/dist/types/vendor/mermaid-ascii/parser.d.ts +7 -0
  109. package/dist/types/vendor/mermaid-ascii/sequence/parser.d.ts +6 -0
  110. package/dist/types/vendor/mermaid-ascii/sequence/types.d.ts +130 -0
  111. package/dist/types/vendor/mermaid-ascii/text-metrics.d.ts +21 -0
  112. package/dist/types/vendor/mermaid-ascii/types.d.ts +114 -0
  113. package/dist/types/vendor/mermaid-ascii/xychart/colors.d.ts +25 -0
  114. package/dist/types/vendor/mermaid-ascii/xychart/parser.d.ts +6 -0
  115. package/dist/types/vendor/mermaid-ascii/xychart/types.d.ts +145 -0
  116. package/dist/types/version.d.ts +18 -0
  117. package/dist/types/vterm/buffer.d.ts +99 -0
  118. package/dist/types/vterm/terminal.d.ts +44 -0
  119. package/dist/types/vterm.d.ts +8 -0
  120. package/dist/types/which.d.ts +37 -0
  121. package/dist/types/worker-host.d.ts +51 -0
  122. package/dist/types/xml.d.ts +31 -0
  123. package/package.json +59 -0
  124. package/src/abortable.ts +109 -0
  125. package/src/acp/connection.ts +344 -0
  126. package/src/acp/protocol.ts +466 -0
  127. package/src/acp/schema.ts +160 -0
  128. package/src/acp/stream.ts +82 -0
  129. package/src/acp/transport.ts +213 -0
  130. package/src/acp.ts +6 -0
  131. package/src/async.ts +91 -0
  132. package/src/binary.ts +50 -0
  133. package/src/browsers.ts +501 -0
  134. package/src/chalk.ts +312 -0
  135. package/src/cli.ts +529 -0
  136. package/src/color.ts +302 -0
  137. package/src/dates.ts +194 -0
  138. package/src/dirs.ts +1026 -0
  139. package/src/docx/converter.ts +681 -0
  140. package/src/docx/xml.ts +166 -0
  141. package/src/docx/zip.ts +87 -0
  142. package/src/docx.ts +20 -0
  143. package/src/dom/core.ts +1254 -0
  144. package/src/dom/parser.ts +370 -0
  145. package/src/dom/selector.ts +290 -0
  146. package/src/dom.ts +33 -0
  147. package/src/env.ts +400 -0
  148. package/src/fetch-retry.ts +379 -0
  149. package/src/file-lock.ts +69 -0
  150. package/src/format.ts +113 -0
  151. package/src/frontmatter.ts +205 -0
  152. package/src/fs-error.ts +56 -0
  153. package/src/glob.ts +189 -0
  154. package/src/headers.ts +167 -0
  155. package/src/index.ts +59 -0
  156. package/src/json-parse.ts +821 -0
  157. package/src/json.ts +23 -0
  158. package/src/logger/rotating-file.ts +149 -0
  159. package/src/logger.ts +798 -0
  160. package/src/loop-phase.ts +49 -0
  161. package/src/lru.ts +185 -0
  162. package/src/marked/core.ts +1576 -0
  163. package/src/marked.ts +2 -0
  164. package/src/mermaid-ascii.ts +31 -0
  165. package/src/mime.ts +159 -0
  166. package/src/module-timer.ts +148 -0
  167. package/src/path-tree.ts +147 -0
  168. package/src/path.ts +28 -0
  169. package/src/peek-file.ts +188 -0
  170. package/src/postmortem.ts +433 -0
  171. package/src/process-name.ts +57 -0
  172. package/src/procmgr.ts +247 -0
  173. package/src/prompt.ts +545 -0
  174. package/src/ptree.ts +412 -0
  175. package/src/readability/readability.ts +533 -0
  176. package/src/readability/readerable.ts +51 -0
  177. package/src/readability/types.ts +72 -0
  178. package/src/readability.ts +11 -0
  179. package/src/ring.ts +169 -0
  180. package/src/runtime-install.ts +393 -0
  181. package/src/sanitize-text.ts +96 -0
  182. package/src/snowflake.ts +121 -0
  183. package/src/stderr-guard.ts +155 -0
  184. package/src/stream.ts +454 -0
  185. package/src/tab-spacing.ts +336 -0
  186. package/src/temp.ts +134 -0
  187. package/src/template.ts +586 -0
  188. package/src/timing-buffer.ts +47 -0
  189. package/src/tls-fetch.ts +178 -0
  190. package/src/turndown/gfm.ts +106 -0
  191. package/src/turndown/html.ts +257 -0
  192. package/src/turndown/service.ts +334 -0
  193. package/src/turndown/types.ts +81 -0
  194. package/src/turndown.ts +5 -0
  195. package/src/type-guards.ts +17 -0
  196. package/src/vendor/mermaid-ascii/NOTICE +33 -0
  197. package/src/vendor/mermaid-ascii/ascii/ansi.ts +409 -0
  198. package/src/vendor/mermaid-ascii/ascii/canvas.ts +476 -0
  199. package/src/vendor/mermaid-ascii/ascii/class-diagram.ts +699 -0
  200. package/src/vendor/mermaid-ascii/ascii/converter.ts +271 -0
  201. package/src/vendor/mermaid-ascii/ascii/draw.ts +1382 -0
  202. package/src/vendor/mermaid-ascii/ascii/edge-bundling.ts +328 -0
  203. package/src/vendor/mermaid-ascii/ascii/edge-routing.ts +297 -0
  204. package/src/vendor/mermaid-ascii/ascii/er-diagram.ts +441 -0
  205. package/src/vendor/mermaid-ascii/ascii/grid.ts +578 -0
  206. package/src/vendor/mermaid-ascii/ascii/index.ts +187 -0
  207. package/src/vendor/mermaid-ascii/ascii/multiline-utils.ts +78 -0
  208. package/src/vendor/mermaid-ascii/ascii/pathfinder.ts +277 -0
  209. package/src/vendor/mermaid-ascii/ascii/sequence.ts +460 -0
  210. package/src/vendor/mermaid-ascii/ascii/shapes/circle.ts +27 -0
  211. package/src/vendor/mermaid-ascii/ascii/shapes/corners.ts +127 -0
  212. package/src/vendor/mermaid-ascii/ascii/shapes/diamond.ts +27 -0
  213. package/src/vendor/mermaid-ascii/ascii/shapes/hexagon.ts +27 -0
  214. package/src/vendor/mermaid-ascii/ascii/shapes/index.ts +101 -0
  215. package/src/vendor/mermaid-ascii/ascii/shapes/rectangle.ts +175 -0
  216. package/src/vendor/mermaid-ascii/ascii/shapes/rounded.ts +27 -0
  217. package/src/vendor/mermaid-ascii/ascii/shapes/special.ts +296 -0
  218. package/src/vendor/mermaid-ascii/ascii/shapes/stadium.ts +114 -0
  219. package/src/vendor/mermaid-ascii/ascii/shapes/state.ts +192 -0
  220. package/src/vendor/mermaid-ascii/ascii/shapes/types.ts +73 -0
  221. package/src/vendor/mermaid-ascii/ascii/types.ts +273 -0
  222. package/src/vendor/mermaid-ascii/ascii/validate.ts +120 -0
  223. package/src/vendor/mermaid-ascii/ascii/xychart.ts +875 -0
  224. package/src/vendor/mermaid-ascii/class/parser.ts +290 -0
  225. package/src/vendor/mermaid-ascii/class/types.ts +121 -0
  226. package/src/vendor/mermaid-ascii/er/parser.ts +181 -0
  227. package/src/vendor/mermaid-ascii/er/types.ts +91 -0
  228. package/src/vendor/mermaid-ascii/index.ts +14 -0
  229. package/src/vendor/mermaid-ascii/multiline-utils.ts +30 -0
  230. package/src/vendor/mermaid-ascii/parser.ts +645 -0
  231. package/src/vendor/mermaid-ascii/sequence/parser.ts +207 -0
  232. package/src/vendor/mermaid-ascii/sequence/types.ts +146 -0
  233. package/src/vendor/mermaid-ascii/text-metrics.ts +71 -0
  234. package/src/vendor/mermaid-ascii/types.ts +164 -0
  235. package/src/vendor/mermaid-ascii/xychart/colors.ts +140 -0
  236. package/src/vendor/mermaid-ascii/xychart/parser.ts +115 -0
  237. package/src/vendor/mermaid-ascii/xychart/types.ts +150 -0
  238. package/src/version.ts +99 -0
  239. package/src/vterm/buffer.ts +218 -0
  240. package/src/vterm/terminal.ts +773 -0
  241. package/src/vterm.ts +8 -0
  242. package/src/which.ts +234 -0
  243. package/src/worker-host.ts +100 -0
  244. package/src/xml.ts +313 -0
package/src/chalk.ts ADDED
@@ -0,0 +1,312 @@
1
+ /** Behavior-compatible reimplementation of chalk's used surface. */
2
+
3
+ import { hexToRgb } from "./color";
4
+
5
+ /** ANSI color capability level. */
6
+ export type ColorLevel = 0 | 1 | 2 | 3;
7
+
8
+ /** Details about a terminal's supported color depth. */
9
+ export interface ColorSupport {
10
+ /** Highest supported ANSI color level. */
11
+ level: ColorLevel;
12
+ /** Whether the terminal supports the basic 16 colors. */
13
+ hasBasic: boolean;
14
+ /** Whether the terminal supports the 256-color palette. */
15
+ has256: boolean;
16
+ /** Whether the terminal supports 24-bit color. */
17
+ has16m: boolean;
18
+ }
19
+
20
+ interface ChalkOptions {
21
+ level?: ColorLevel;
22
+ }
23
+
24
+ interface Style {
25
+ open: string;
26
+ close: string;
27
+ }
28
+
29
+ interface ChalkContext {
30
+ level: number;
31
+ }
32
+
33
+ /** A callable, chainable ANSI text formatter. */
34
+ export interface ChalkInstance {
35
+ (...text: unknown[]): string;
36
+ /** Active color capability level. */
37
+ level: ColorLevel;
38
+ /** Reset every active terminal style. */
39
+ readonly reset: ChalkInstance;
40
+ /** Render bold text. */
41
+ readonly bold: ChalkInstance;
42
+ /** Render faint text. */
43
+ readonly dim: ChalkInstance;
44
+ /** Render italic text. */
45
+ readonly italic: ChalkInstance;
46
+ /** Render underlined text. */
47
+ readonly underline: ChalkInstance;
48
+ /** Swap foreground and background colors. */
49
+ readonly inverse: ChalkInstance;
50
+ /** Render struck-through text. */
51
+ readonly strikethrough: ChalkInstance;
52
+ /** Render black text. */
53
+ readonly black: ChalkInstance;
54
+ /** Render red text. */
55
+ readonly red: ChalkInstance;
56
+ /** Render green text. */
57
+ readonly green: ChalkInstance;
58
+ /** Render yellow text. */
59
+ readonly yellow: ChalkInstance;
60
+ /** Render blue text. */
61
+ readonly blue: ChalkInstance;
62
+ /** Render magenta text. */
63
+ readonly magenta: ChalkInstance;
64
+ /** Render cyan text. */
65
+ readonly cyan: ChalkInstance;
66
+ /** Render white text. */
67
+ readonly white: ChalkInstance;
68
+ /** Render gray text. */
69
+ readonly gray: ChalkInstance;
70
+ /** Alias for gray text. */
71
+ readonly grey: ChalkInstance;
72
+ /** Render bright black text. */
73
+ readonly blackBright: ChalkInstance;
74
+ /** Render bright red text. */
75
+ readonly redBright: ChalkInstance;
76
+ /** Render bright green text. */
77
+ readonly greenBright: ChalkInstance;
78
+ /** Render bright yellow text. */
79
+ readonly yellowBright: ChalkInstance;
80
+ /** Render bright blue text. */
81
+ readonly blueBright: ChalkInstance;
82
+ /** Render bright magenta text. */
83
+ readonly magentaBright: ChalkInstance;
84
+ /** Render bright cyan text. */
85
+ readonly cyanBright: ChalkInstance;
86
+ /** Render bright white text. */
87
+ readonly whiteBright: ChalkInstance;
88
+ /** Render text on a black background. */
89
+ readonly bgBlack: ChalkInstance;
90
+ /** Render text on a red background. */
91
+ readonly bgRed: ChalkInstance;
92
+ /** Render text on a green background. */
93
+ readonly bgGreen: ChalkInstance;
94
+ /** Render text on a yellow background. */
95
+ readonly bgYellow: ChalkInstance;
96
+ /** Render text on a blue background. */
97
+ readonly bgBlue: ChalkInstance;
98
+ /** Render text on a magenta background. */
99
+ readonly bgMagenta: ChalkInstance;
100
+ /** Render text on a cyan background. */
101
+ readonly bgCyan: ChalkInstance;
102
+ /** Render text on a white background. */
103
+ readonly bgWhite: ChalkInstance;
104
+ /** Render text on a gray background. */
105
+ readonly bgGray: ChalkInstance;
106
+ /** Alias for a gray background. */
107
+ readonly bgGrey: ChalkInstance;
108
+ /** Render text on a bright black background. */
109
+ readonly bgBlackBright: ChalkInstance;
110
+ /** Render text on a bright red background. */
111
+ readonly bgRedBright: ChalkInstance;
112
+ /** Render text on a bright green background. */
113
+ readonly bgGreenBright: ChalkInstance;
114
+ /** Render text on a bright yellow background. */
115
+ readonly bgYellowBright: ChalkInstance;
116
+ /** Render text on a bright blue background. */
117
+ readonly bgBlueBright: ChalkInstance;
118
+ /** Render text on a bright magenta background. */
119
+ readonly bgMagentaBright: ChalkInstance;
120
+ /** Render text on a bright cyan background. */
121
+ readonly bgCyanBright: ChalkInstance;
122
+ /** Render text on a bright white background. */
123
+ readonly bgWhiteBright: ChalkInstance;
124
+ /** Render text with an arbitrary hexadecimal foreground color. */
125
+ hex(color: string): ChalkInstance;
126
+ }
127
+
128
+ /** Constructor for an independently configured chalk formatter. */
129
+ export interface ChalkConstructor {
130
+ new (options?: ChalkOptions): ChalkInstance;
131
+ }
132
+
133
+ const ESC = "\u001B[";
134
+ const STYLES: Readonly<Record<string, Style>> = {
135
+ reset: { open: `${ESC}0m`, close: `${ESC}0m` },
136
+ bold: { open: `${ESC}1m`, close: `${ESC}22m` },
137
+ dim: { open: `${ESC}2m`, close: `${ESC}22m` },
138
+ italic: { open: `${ESC}3m`, close: `${ESC}23m` },
139
+ underline: { open: `${ESC}4m`, close: `${ESC}24m` },
140
+ inverse: { open: `${ESC}7m`, close: `${ESC}27m` },
141
+ strikethrough: { open: `${ESC}9m`, close: `${ESC}29m` },
142
+ black: { open: `${ESC}30m`, close: `${ESC}39m` },
143
+ red: { open: `${ESC}31m`, close: `${ESC}39m` },
144
+ green: { open: `${ESC}32m`, close: `${ESC}39m` },
145
+ yellow: { open: `${ESC}33m`, close: `${ESC}39m` },
146
+ blue: { open: `${ESC}34m`, close: `${ESC}39m` },
147
+ magenta: { open: `${ESC}35m`, close: `${ESC}39m` },
148
+ cyan: { open: `${ESC}36m`, close: `${ESC}39m` },
149
+ white: { open: `${ESC}37m`, close: `${ESC}39m` },
150
+ gray: { open: `${ESC}90m`, close: `${ESC}39m` },
151
+ blackBright: { open: `${ESC}90m`, close: `${ESC}39m` },
152
+ redBright: { open: `${ESC}91m`, close: `${ESC}39m` },
153
+ greenBright: { open: `${ESC}92m`, close: `${ESC}39m` },
154
+ yellowBright: { open: `${ESC}93m`, close: `${ESC}39m` },
155
+ blueBright: { open: `${ESC}94m`, close: `${ESC}39m` },
156
+ magentaBright: { open: `${ESC}95m`, close: `${ESC}39m` },
157
+ cyanBright: { open: `${ESC}96m`, close: `${ESC}39m` },
158
+ whiteBright: { open: `${ESC}97m`, close: `${ESC}39m` },
159
+ bgBlack: { open: `${ESC}40m`, close: `${ESC}49m` },
160
+ bgRed: { open: `${ESC}41m`, close: `${ESC}49m` },
161
+ bgGreen: { open: `${ESC}42m`, close: `${ESC}49m` },
162
+ bgYellow: { open: `${ESC}43m`, close: `${ESC}49m` },
163
+ bgBlue: { open: `${ESC}44m`, close: `${ESC}49m` },
164
+ bgMagenta: { open: `${ESC}45m`, close: `${ESC}49m` },
165
+ bgCyan: { open: `${ESC}46m`, close: `${ESC}49m` },
166
+ bgWhite: { open: `${ESC}47m`, close: `${ESC}49m` },
167
+ bgBlackBright: { open: `${ESC}100m`, close: `${ESC}49m` },
168
+ bgRedBright: { open: `${ESC}101m`, close: `${ESC}49m` },
169
+ bgGreenBright: { open: `${ESC}102m`, close: `${ESC}49m` },
170
+ bgYellowBright: { open: `${ESC}103m`, close: `${ESC}49m` },
171
+ bgBlueBright: { open: `${ESC}104m`, close: `${ESC}49m` },
172
+ bgMagentaBright: { open: `${ESC}105m`, close: `${ESC}49m` },
173
+ bgCyanBright: { open: `${ESC}106m`, close: `${ESC}49m` },
174
+ bgWhiteBright: { open: `${ESC}107m`, close: `${ESC}49m` },
175
+ };
176
+
177
+ function parseForcedLevel(value: string | undefined): ColorLevel | undefined {
178
+ if (value === undefined) return undefined;
179
+ if (value === "" || value === "true") return 1;
180
+ if (value === "false") return 0;
181
+ const parsed = Number.parseInt(value, 10);
182
+ if (Number.isNaN(parsed)) return 1;
183
+ return Math.max(0, Math.min(3, parsed)) as ColorLevel;
184
+ }
185
+
186
+ /** Detect an ANSI color level from terminal environment and TTY state. */
187
+ export function detectColorLevel(environment: NodeJS.ProcessEnv, isTTY: boolean): ColorLevel {
188
+ const forced = parseForcedLevel(environment.FORCE_COLOR);
189
+ if (forced !== undefined) return forced;
190
+ if ("NO_COLOR" in environment || environment.TERM === "dumb") return 0;
191
+ if (!isTTY) return 0;
192
+ if (environment.COLORTERM === "truecolor" || environment.COLORTERM === "24bit") return 3;
193
+ if (environment.TERM?.endsWith("-256color")) return 2;
194
+ if (environment.CI) {
195
+ if (environment.GITHUB_ACTIONS || environment.GITEA_ACTIONS) return 3;
196
+ if (
197
+ environment.TRAVIS ||
198
+ environment.CIRCLECI ||
199
+ environment.APPVEYOR ||
200
+ environment.GITLAB_CI ||
201
+ environment.BUILDKITE
202
+ ) {
203
+ return 1;
204
+ }
205
+ return 0;
206
+ }
207
+ if (environment.TERM_PROGRAM === "iTerm.app") {
208
+ return Number.parseInt(environment.TERM_PROGRAM_VERSION ?? "0", 10) >= 3 ? 3 : 2;
209
+ }
210
+ if (environment.TERM_PROGRAM === "Apple_Terminal") return 2;
211
+ return 1;
212
+ }
213
+
214
+ function colorSupport(level: ColorLevel): ColorSupport | false {
215
+ if (level === 0) return false;
216
+ return { level, hasBasic: true, has256: level >= 2, has16m: level >= 3 };
217
+ }
218
+
219
+ /** Color support detected for standard output. */
220
+ export const supportsColor = colorSupport(detectColorLevel(process.env, Boolean(process.stdout.isTTY)));
221
+
222
+ /** Color support detected for standard error. */
223
+ export const supportsColorStderr = colorSupport(detectColorLevel(process.env, Boolean(process.stderr.isTTY)));
224
+
225
+ function ansi256(r: number, g: number, b: number): number {
226
+ if (r === g && g === b) {
227
+ if (r < 8) return 16;
228
+ if (r > 248) return 231;
229
+ return Math.round(((r - 8) / 247) * 24) + 232;
230
+ }
231
+ return 16 + 36 * Math.round((r / 255) * 5) + 6 * Math.round((g / 255) * 5) + Math.round((b / 255) * 5);
232
+ }
233
+
234
+ function ansi16(r: number, g: number, b: number): number {
235
+ const value = Math.max(r, g, b);
236
+ if (value < 50) return 30;
237
+ let code = 30 + ((Math.round(b / 255) << 2) | (Math.round(g / 255) << 1) | Math.round(r / 255));
238
+ if (value > 191) code += 60;
239
+ return code;
240
+ }
241
+
242
+ function hexStyle(color: string, level: number): Style {
243
+ const { r, g, b } = hexToRgb(color);
244
+ const open =
245
+ level >= 3
246
+ ? `${ESC}38;2;${r};${g};${b}m`
247
+ : level === 2
248
+ ? `${ESC}38;5;${ansi256(r, g, b)}m`
249
+ : `${ESC}${ansi16(r, g, b)}m`;
250
+ return { open, close: `${ESC}39m` };
251
+ }
252
+
253
+ function applyStyles(input: string, styles: readonly Style[]): string {
254
+ let output = input;
255
+ let opening = "";
256
+ let closing = "";
257
+ for (let index = styles.length - 1; index >= 0; index--) {
258
+ const style = styles[index];
259
+ if (!style) continue;
260
+ output = output.split(style.close).join(style.close + style.open);
261
+ opening = style.open + opening;
262
+ closing += style.close;
263
+ }
264
+ output = output.replace(/\r?\n/g, match => `${closing}${match}${opening}`);
265
+ return opening + output + closing;
266
+ }
267
+
268
+ function createBuilder(context: ChalkContext, styles: readonly Style[]): ChalkInstance {
269
+ const builder = ((...values: unknown[]) => {
270
+ let text = "";
271
+ for (let index = 0; index < values.length; index++) {
272
+ if (index > 0) text += " ";
273
+ text += String(values[index]);
274
+ }
275
+ if (text.length === 0 || context.level === 0) return text;
276
+ return applyStyles(text, styles);
277
+ }) as ChalkInstance;
278
+ Object.defineProperty(builder, "level", {
279
+ get: () => context.level,
280
+ set: (level: number) => {
281
+ context.level = level;
282
+ },
283
+ });
284
+ for (const name in STYLES) {
285
+ const style = STYLES[name];
286
+ if (style) Object.defineProperty(builder, name, { get: () => createBuilder(context, [...styles, style]) });
287
+ }
288
+ Object.defineProperty(builder, "grey", { get: () => createBuilder(context, [...styles, STYLES.gray!]) });
289
+ Object.defineProperty(builder, "bgGray", {
290
+ get: () => createBuilder(context, [...styles, STYLES.bgBlackBright!]),
291
+ });
292
+ Object.defineProperty(builder, "bgGrey", {
293
+ get: () => createBuilder(context, [...styles, STYLES.bgBlackBright!]),
294
+ });
295
+ Object.defineProperty(builder, "hex", {
296
+ value: (color: string) => createBuilder(context, [...styles, hexStyle(color, context.level)]),
297
+ });
298
+ return builder;
299
+ }
300
+
301
+ function ChalkImplementation(this: unknown, options: ChalkOptions = {}): ChalkInstance {
302
+ const detectedLevel = supportsColor === false ? 0 : supportsColor.level;
303
+ return createBuilder({ level: options.level ?? detectedLevel }, []);
304
+ }
305
+
306
+ /** Construct an independently configured chalk formatter. */
307
+ export const Chalk = ChalkImplementation as unknown as ChalkConstructor;
308
+
309
+ const defaultLevel = supportsColor === false ? 0 : supportsColor.level;
310
+ const chalk = new Chalk({ level: defaultLevel });
311
+
312
+ export default chalk;