ai-terminal-md 0.2.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 (154) hide show
  1. package/README.md +172 -0
  2. package/dist/__tests__/ansi.test.d.ts +2 -0
  3. package/dist/__tests__/ansi.test.d.ts.map +1 -0
  4. package/dist/__tests__/ansi.test.js +238 -0
  5. package/dist/__tests__/ansi.test.js.map +1 -0
  6. package/dist/__tests__/fixtures/code-blocks.d.ts +27 -0
  7. package/dist/__tests__/fixtures/code-blocks.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/code-blocks.js +72 -0
  9. package/dist/__tests__/fixtures/code-blocks.js.map +1 -0
  10. package/dist/__tests__/fixtures/markdown.d.ts +129 -0
  11. package/dist/__tests__/fixtures/markdown.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/markdown.js +205 -0
  13. package/dist/__tests__/fixtures/markdown.js.map +1 -0
  14. package/dist/__tests__/highlighter.test.d.ts +2 -0
  15. package/dist/__tests__/highlighter.test.d.ts.map +1 -0
  16. package/dist/__tests__/highlighter.test.js +567 -0
  17. package/dist/__tests__/highlighter.test.js.map +1 -0
  18. package/dist/__tests__/parser.test.d.ts +2 -0
  19. package/dist/__tests__/parser.test.d.ts.map +1 -0
  20. package/dist/__tests__/parser.test.js +226 -0
  21. package/dist/__tests__/parser.test.js.map +1 -0
  22. package/dist/__tests__/render-ai.test.d.ts +2 -0
  23. package/dist/__tests__/render-ai.test.d.ts.map +1 -0
  24. package/dist/__tests__/render-ai.test.js +234 -0
  25. package/dist/__tests__/render-ai.test.js.map +1 -0
  26. package/dist/__tests__/render-markdown.test.d.ts +2 -0
  27. package/dist/__tests__/render-markdown.test.d.ts.map +1 -0
  28. package/dist/__tests__/render-markdown.test.js +1107 -0
  29. package/dist/__tests__/render-markdown.test.js.map +1 -0
  30. package/dist/__tests__/renderer.test.d.ts +2 -0
  31. package/dist/__tests__/renderer.test.d.ts.map +1 -0
  32. package/dist/__tests__/renderer.test.js +153 -0
  33. package/dist/__tests__/renderer.test.js.map +1 -0
  34. package/dist/__tests__/streaming.test.d.ts +2 -0
  35. package/dist/__tests__/streaming.test.d.ts.map +1 -0
  36. package/dist/__tests__/streaming.test.js +196 -0
  37. package/dist/__tests__/streaming.test.js.map +1 -0
  38. package/dist/__tests__/terminal.test.d.ts +2 -0
  39. package/dist/__tests__/terminal.test.d.ts.map +1 -0
  40. package/dist/__tests__/terminal.test.js +206 -0
  41. package/dist/__tests__/terminal.test.js.map +1 -0
  42. package/dist/__tests__/theme.test.d.ts +2 -0
  43. package/dist/__tests__/theme.test.d.ts.map +1 -0
  44. package/dist/__tests__/theme.test.js +340 -0
  45. package/dist/__tests__/theme.test.js.map +1 -0
  46. package/dist/__tests__/types.test.d.ts +2 -0
  47. package/dist/__tests__/types.test.d.ts.map +1 -0
  48. package/dist/__tests__/types.test.js +196 -0
  49. package/dist/__tests__/types.test.js.map +1 -0
  50. package/dist/__tests__/wrap.test.d.ts +2 -0
  51. package/dist/__tests__/wrap.test.d.ts.map +1 -0
  52. package/dist/__tests__/wrap.test.js +151 -0
  53. package/dist/__tests__/wrap.test.js.map +1 -0
  54. package/dist/ansi.d.ts +38 -0
  55. package/dist/ansi.d.ts.map +1 -0
  56. package/dist/ansi.js +224 -0
  57. package/dist/ansi.js.map +1 -0
  58. package/dist/highlighter.d.ts +31 -0
  59. package/dist/highlighter.d.ts.map +1 -0
  60. package/dist/highlighter.js +77 -0
  61. package/dist/highlighter.js.map +1 -0
  62. package/dist/index.d.ts +8 -0
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.js +30 -0
  65. package/dist/index.js.map +1 -0
  66. package/dist/languages/c.d.ts +3 -0
  67. package/dist/languages/c.d.ts.map +1 -0
  68. package/dist/languages/c.js +79 -0
  69. package/dist/languages/c.js.map +1 -0
  70. package/dist/languages/data.d.ts +4 -0
  71. package/dist/languages/data.d.ts.map +1 -0
  72. package/dist/languages/data.js +75 -0
  73. package/dist/languages/data.js.map +1 -0
  74. package/dist/languages/go.d.ts +3 -0
  75. package/dist/languages/go.d.ts.map +1 -0
  76. package/dist/languages/go.js +67 -0
  77. package/dist/languages/go.js.map +1 -0
  78. package/dist/languages/index.d.ts +18 -0
  79. package/dist/languages/index.d.ts.map +1 -0
  80. package/dist/languages/index.js +98 -0
  81. package/dist/languages/index.js.map +1 -0
  82. package/dist/languages/java.d.ts +3 -0
  83. package/dist/languages/java.d.ts.map +1 -0
  84. package/dist/languages/java.js +66 -0
  85. package/dist/languages/java.js.map +1 -0
  86. package/dist/languages/javascript.d.ts +6 -0
  87. package/dist/languages/javascript.d.ts.map +1 -0
  88. package/dist/languages/javascript.js +145 -0
  89. package/dist/languages/javascript.js.map +1 -0
  90. package/dist/languages/markdown.d.ts +3 -0
  91. package/dist/languages/markdown.d.ts.map +1 -0
  92. package/dist/languages/markdown.js +55 -0
  93. package/dist/languages/markdown.js.map +1 -0
  94. package/dist/languages/php.d.ts +3 -0
  95. package/dist/languages/php.d.ts.map +1 -0
  96. package/dist/languages/php.js +76 -0
  97. package/dist/languages/php.js.map +1 -0
  98. package/dist/languages/python.d.ts +3 -0
  99. package/dist/languages/python.d.ts.map +1 -0
  100. package/dist/languages/python.js +69 -0
  101. package/dist/languages/python.js.map +1 -0
  102. package/dist/languages/ruby.d.ts +3 -0
  103. package/dist/languages/ruby.d.ts.map +1 -0
  104. package/dist/languages/ruby.js +74 -0
  105. package/dist/languages/ruby.js.map +1 -0
  106. package/dist/languages/rust.d.ts +3 -0
  107. package/dist/languages/rust.d.ts.map +1 -0
  108. package/dist/languages/rust.js +68 -0
  109. package/dist/languages/rust.js.map +1 -0
  110. package/dist/languages/shell.d.ts +3 -0
  111. package/dist/languages/shell.d.ts.map +1 -0
  112. package/dist/languages/shell.js +63 -0
  113. package/dist/languages/shell.js.map +1 -0
  114. package/dist/languages/sql.d.ts +3 -0
  115. package/dist/languages/sql.d.ts.map +1 -0
  116. package/dist/languages/sql.js +69 -0
  117. package/dist/languages/sql.js.map +1 -0
  118. package/dist/languages/web.d.ts +4 -0
  119. package/dist/languages/web.d.ts.map +1 -0
  120. package/dist/languages/web.js +101 -0
  121. package/dist/languages/web.js.map +1 -0
  122. package/dist/parser.d.ts +48 -0
  123. package/dist/parser.d.ts.map +1 -0
  124. package/dist/parser.js +188 -0
  125. package/dist/parser.js.map +1 -0
  126. package/dist/render-ai.d.ts +26 -0
  127. package/dist/render-ai.d.ts.map +1 -0
  128. package/dist/render-ai.js +222 -0
  129. package/dist/render-ai.js.map +1 -0
  130. package/dist/render-markdown.d.ts +25 -0
  131. package/dist/render-markdown.d.ts.map +1 -0
  132. package/dist/render-markdown.js +437 -0
  133. package/dist/render-markdown.js.map +1 -0
  134. package/dist/renderer.d.ts +9 -0
  135. package/dist/renderer.d.ts.map +1 -0
  136. package/dist/renderer.js +219 -0
  137. package/dist/renderer.js.map +1 -0
  138. package/dist/terminal.d.ts +56 -0
  139. package/dist/terminal.d.ts.map +1 -0
  140. package/dist/terminal.js +137 -0
  141. package/dist/terminal.js.map +1 -0
  142. package/dist/theme.d.ts +28 -0
  143. package/dist/theme.d.ts.map +1 -0
  144. package/dist/theme.js +326 -0
  145. package/dist/theme.js.map +1 -0
  146. package/dist/types.d.ts +230 -0
  147. package/dist/types.d.ts.map +1 -0
  148. package/dist/types.js +3 -0
  149. package/dist/types.js.map +1 -0
  150. package/dist/wrap.d.ts +14 -0
  151. package/dist/wrap.d.ts.map +1 -0
  152. package/dist/wrap.js +146 -0
  153. package/dist/wrap.js.map +1 -0
  154. package/package.json +39 -0
package/README.md ADDED
@@ -0,0 +1,172 @@
1
+ # ai-terminal-md
2
+
3
+ Terminal renderer optimized for AI markdown patterns. Renders markdown with full ANSI color support, syntax highlighting, and first-class handling of AI-specific XML elements (thinking blocks, artifacts, tool use, citations, and more).
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install ai-terminal-md
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ### Render a complete markdown string
14
+
15
+ ```typescript
16
+ import { render } from 'ai-terminal-md';
17
+
18
+ const output = render('# Hello\n\nThis is **bold** text.');
19
+ process.stdout.write(output);
20
+ ```
21
+
22
+ ### Stream rendering (incremental)
23
+
24
+ ```typescript
25
+ import { createRenderer } from 'ai-terminal-md';
26
+
27
+ const renderer = createRenderer({ theme: 'dark', width: 100 });
28
+
29
+ async function streamMarkdown(source: AsyncIterable<string>) {
30
+ for await (const chunk of renderer.renderStream(source)) {
31
+ process.stdout.write(chunk);
32
+ }
33
+ }
34
+ ```
35
+
36
+ ## API Reference
37
+
38
+ ### `render(markdown, options?)`
39
+
40
+ Convenience function. Renders a complete markdown string to an ANSI-formatted string.
41
+
42
+ ```typescript
43
+ import { render } from 'ai-terminal-md';
44
+
45
+ const out = render('# Title\n\nBody text.', { theme: 'dark', width: 80 });
46
+ ```
47
+
48
+ ### `createRenderer(config?)`
49
+
50
+ Creates a reusable renderer instance. Returns an `AITerminalRenderer` object.
51
+
52
+ ```typescript
53
+ import { createRenderer } from 'ai-terminal-md';
54
+
55
+ const renderer = createRenderer({ theme: 'dark', thinking: 'dim' });
56
+ ```
57
+
58
+ ### `renderer.render(markdown)`
59
+
60
+ Render a complete markdown string synchronously.
61
+
62
+ ### `renderer.renderChunk(chunk, state?)`
63
+
64
+ Render a single chunk of streaming markdown. Returns `{ output, state }`. Pass the returned `state` into the next call to maintain streaming context.
65
+
66
+ ```typescript
67
+ let state;
68
+ for (const chunk of chunks) {
69
+ const result = renderer.renderChunk(chunk, state);
70
+ process.stdout.write(result.output);
71
+ state = result.state;
72
+ }
73
+ // Flush any remaining buffered content
74
+ process.stdout.write(renderer.flush(state));
75
+ ```
76
+
77
+ ### `renderer.flush(state)`
78
+
79
+ Render whatever is left in the streaming buffer. Call this after the last chunk to ensure all content is output. Returns a string.
80
+
81
+ ### `renderer.renderStream(stream)`
82
+
83
+ Render an `AsyncIterable<string>` of markdown chunks. Returns an `AsyncIterable<string>` of rendered output chunks. Internally calls `renderChunk` for each incoming chunk and `flush` at the end.
84
+
85
+ ```typescript
86
+ for await (const rendered of renderer.renderStream(aiStream)) {
87
+ process.stdout.write(rendered);
88
+ }
89
+ ```
90
+
91
+ ## Configuration Options
92
+
93
+ Pass these as the `options` argument to `render()` or `createRenderer()`.
94
+
95
+ | Option | Type | Default | Description |
96
+ |---|---|---|---|
97
+ | `theme` | `'dark' \| 'light' \| 'minimal' \| 'monochrome'` | `'dark'` | Color theme |
98
+ | `width` | `number` | auto-detected | Terminal width in columns |
99
+ | `colorLevel` | `'none' \| '16' \| '256' \| 'truecolor'` | auto-detected | ANSI color support level |
100
+ | `unicode` | `boolean` | auto-detected | Use Unicode box-drawing characters |
101
+ | `thinking` | `'show' \| 'dim' \| 'hide'` | `'dim'` | How to render thinking blocks |
102
+ | `artifacts` | `'panel' \| 'inline' \| 'hide'` | `'panel'` | How to render artifact blocks |
103
+ | `toolUse` | `'box' \| 'inline' \| 'hide'` | `'box'` | How to render tool use blocks |
104
+ | `toolResult` | `'box' \| 'inline' \| 'hide'` | `'box'` | How to render tool result blocks |
105
+ | `semanticWrappers` | `'strip' \| 'label' \| 'keep'` | `'strip'` | How to handle semantic wrapper tags |
106
+ | `citations` | `'color' \| 'plain' \| 'hide'` | `'color'` | How to render citation markers |
107
+ | `codeBackground` | `boolean` | `true` | Apply background color to code blocks |
108
+ | `codeLineNumbers` | `boolean` | `false` | Show line numbers in code blocks |
109
+ | `codeLanguageLabel` | `boolean` | `true` | Show language label on code blocks |
110
+ | `codePadding` | `number` | `1` | Horizontal padding inside code blocks |
111
+ | `wordWrap` | `boolean` | `true` | Word-wrap text to terminal width |
112
+ | `margin` | `number` | `0` | Left margin (spaces) for all content |
113
+ | `showLinkUrls` | `boolean` | `true` | Show URLs after link text |
114
+ | `tableStyle` | `'unicode' \| 'ascii' \| 'none'` | `'unicode'` | Border style for tables |
115
+
116
+ ## Supported AI Elements
117
+
118
+ The renderer automatically detects and renders the following AI-specific XML elements embedded in markdown:
119
+
120
+ ### Thinking Blocks
121
+
122
+ Tags: `<thinking>`, `<antThinking>`, `<reflection>`, `<scratchpad>`, `<reasoning>`, `<inner_monologue>`, `<thought>`
123
+
124
+ Controlled by the `thinking` option:
125
+ - `'dim'` (default) — dimmed text with a "Thinking" header and left border
126
+ - `'show'` — full brightness with header and border
127
+ - `'hide'` — omit entirely
128
+
129
+ ### Artifacts
130
+
131
+ Tags: `<antArtifact type="..." title="..." identifier="...">`, `<artifact>`
132
+
133
+ Controlled by the `artifacts` option:
134
+ - `'panel'` (default) — bordered panel with title bar using box-drawing characters
135
+ - `'inline'` — "Artifact: title" label above content
136
+ - `'hide'` — omit entirely
137
+
138
+ ### Tool Use
139
+
140
+ Tags: `<tool_use>`, `<function_call>`, `<tool_call>` (with nested `<tool_name>` and `<arguments>`/`<parameters>`)
141
+
142
+ Controlled by the `toolUse` option:
143
+ - `'box'` (default) — bordered box with tool name header and formatted JSON arguments
144
+ - `'inline'` — compact `[Tool: name(arg=val)]` format
145
+ - `'hide'` — omit entirely
146
+
147
+ ### Tool Results
148
+
149
+ Tags: `<tool_result>`, `<function_result>`
150
+
151
+ Controlled by the `toolResult` option:
152
+ - `'box'` (default) — bordered box with success/error icon and tool name
153
+ - `'inline'` — compact format with `✓` or `✗` prefix
154
+ - `'hide'` — omit entirely
155
+
156
+ ### Semantic Wrappers
157
+
158
+ Tags: `<result>`, `<answer>`, `<output>`, `<response>`
159
+
160
+ Controlled by the `semanticWrappers` option:
161
+ - `'strip'` (default) — remove tags, render inner content
162
+ - `'label'` — add a subtle `[tagname]` label above the content
163
+ - `'keep'` — pass tags through as literal text
164
+
165
+ ### Citations
166
+
167
+ Pattern: `[1]`, `[2]`, etc. (standalone — not markdown links)
168
+
169
+ Controlled by the `citations` option:
170
+ - `'color'` (default) — colored inline markers
171
+ - `'plain'` — no special styling
172
+ - `'hide'` — remove from output
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ansi.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/ansi.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const ansi_1 = require("../ansi");
5
+ (0, vitest_1.describe)('ansi', () => {
6
+ (0, vitest_1.describe)('FG_COLORS', () => {
7
+ (0, vitest_1.it)('contains all 16 standard foreground colors', () => {
8
+ (0, vitest_1.expect)(Object.keys(ansi_1.FG_COLORS)).toHaveLength(16);
9
+ (0, vitest_1.expect)(ansi_1.FG_COLORS['black']).toBe(30);
10
+ (0, vitest_1.expect)(ansi_1.FG_COLORS['white']).toBe(37);
11
+ (0, vitest_1.expect)(ansi_1.FG_COLORS['brightBlack']).toBe(90);
12
+ (0, vitest_1.expect)(ansi_1.FG_COLORS['brightWhite']).toBe(97);
13
+ });
14
+ });
15
+ (0, vitest_1.describe)('BG_COLORS', () => {
16
+ (0, vitest_1.it)('contains all 16 standard background colors', () => {
17
+ (0, vitest_1.expect)(Object.keys(ansi_1.BG_COLORS)).toHaveLength(16);
18
+ (0, vitest_1.expect)(ansi_1.BG_COLORS['black']).toBe(40);
19
+ (0, vitest_1.expect)(ansi_1.BG_COLORS['white']).toBe(47);
20
+ (0, vitest_1.expect)(ansi_1.BG_COLORS['brightBlack']).toBe(100);
21
+ (0, vitest_1.expect)(ansi_1.BG_COLORS['brightWhite']).toBe(107);
22
+ });
23
+ });
24
+ (0, vitest_1.describe)('constants', () => {
25
+ (0, vitest_1.it)('exports correct ANSI attribute codes', () => {
26
+ (0, vitest_1.expect)(ansi_1.BOLD).toBe('\x1b[1m');
27
+ (0, vitest_1.expect)(ansi_1.DIM).toBe('\x1b[2m');
28
+ (0, vitest_1.expect)(ansi_1.ITALIC).toBe('\x1b[3m');
29
+ (0, vitest_1.expect)(ansi_1.UNDERLINE).toBe('\x1b[4m');
30
+ (0, vitest_1.expect)(ansi_1.STRIKETHROUGH).toBe('\x1b[9m');
31
+ (0, vitest_1.expect)(ansi_1.RESET).toBe('\x1b[0m');
32
+ });
33
+ });
34
+ (0, vitest_1.describe)('parseHex', () => {
35
+ (0, vitest_1.it)('parses 6-digit hex color', () => {
36
+ (0, vitest_1.expect)((0, ansi_1.parseHex)('#FF6B6B')).toEqual([255, 107, 107]);
37
+ });
38
+ (0, vitest_1.it)('parses 3-digit hex color', () => {
39
+ (0, vitest_1.expect)((0, ansi_1.parseHex)('#F00')).toEqual([255, 0, 0]);
40
+ });
41
+ (0, vitest_1.it)('handles hex without #', () => {
42
+ (0, vitest_1.expect)((0, ansi_1.parseHex)('00FF00')).toEqual([0, 255, 0]);
43
+ });
44
+ (0, vitest_1.it)('parses black', () => {
45
+ (0, vitest_1.expect)((0, ansi_1.parseHex)('#000000')).toEqual([0, 0, 0]);
46
+ });
47
+ (0, vitest_1.it)('parses white', () => {
48
+ (0, vitest_1.expect)((0, ansi_1.parseHex)('#FFFFFF')).toEqual([255, 255, 255]);
49
+ });
50
+ });
51
+ (0, vitest_1.describe)('rgbTo256', () => {
52
+ (0, vitest_1.it)('maps black to index 16', () => {
53
+ (0, vitest_1.expect)((0, ansi_1.rgbTo256)(0, 0, 0)).toBe(16);
54
+ });
55
+ (0, vitest_1.it)('maps white to index 231', () => {
56
+ (0, vitest_1.expect)((0, ansi_1.rgbTo256)(255, 255, 255)).toBe(231);
57
+ });
58
+ (0, vitest_1.it)('maps grayscale to grayscale ramp', () => {
59
+ const idx = (0, ansi_1.rgbTo256)(128, 128, 128);
60
+ (0, vitest_1.expect)(idx).toBeGreaterThanOrEqual(232);
61
+ (0, vitest_1.expect)(idx).toBeLessThanOrEqual(255);
62
+ });
63
+ (0, vitest_1.it)('maps pure red to red in color cube', () => {
64
+ const idx = (0, ansi_1.rgbTo256)(255, 0, 0);
65
+ // Should be 16 + 36*5 + 6*0 + 0 = 196
66
+ (0, vitest_1.expect)(idx).toBe(196);
67
+ });
68
+ (0, vitest_1.it)('maps pure green to green in color cube', () => {
69
+ const idx = (0, ansi_1.rgbTo256)(0, 255, 0);
70
+ // Should be 16 + 36*0 + 6*5 + 0 = 46
71
+ (0, vitest_1.expect)(idx).toBe(46);
72
+ });
73
+ (0, vitest_1.it)('maps pure blue to blue in color cube', () => {
74
+ const idx = (0, ansi_1.rgbTo256)(0, 0, 255);
75
+ // Should be 16 + 36*0 + 6*0 + 5 = 21
76
+ (0, vitest_1.expect)(idx).toBe(21);
77
+ });
78
+ });
79
+ (0, vitest_1.describe)('rgbTo16Fg', () => {
80
+ (0, vitest_1.it)('maps dark colors to non-bright ANSI codes', () => {
81
+ const code = (0, ansi_1.rgbTo16Fg)(128, 0, 0); // dark red
82
+ (0, vitest_1.expect)(code).toBe(31); // red
83
+ });
84
+ (0, vitest_1.it)('maps bright colors to bright ANSI codes', () => {
85
+ const code = (0, ansi_1.rgbTo16Fg)(255, 100, 100); // bright red-ish
86
+ (0, vitest_1.expect)(code).toBe(91); // brightRed
87
+ });
88
+ (0, vitest_1.it)('maps very dark to black', () => {
89
+ const code = (0, ansi_1.rgbTo16Fg)(10, 10, 10);
90
+ (0, vitest_1.expect)(code).toBe(30); // black
91
+ });
92
+ });
93
+ (0, vitest_1.describe)('fgSequence', () => {
94
+ (0, vitest_1.it)('returns empty string for none color level', () => {
95
+ (0, vitest_1.expect)((0, ansi_1.fgSequence)('red', 'none')).toBe('');
96
+ });
97
+ (0, vitest_1.it)('generates 16-color named foreground', () => {
98
+ (0, vitest_1.expect)((0, ansi_1.fgSequence)('red', '16')).toBe('\x1b[31m');
99
+ (0, vitest_1.expect)((0, ansi_1.fgSequence)('brightCyan', '16')).toBe('\x1b[96m');
100
+ });
101
+ (0, vitest_1.it)('generates 256-color foreground', () => {
102
+ (0, vitest_1.expect)((0, ansi_1.fgSequence)('196', '256')).toBe('\x1b[38;5;196m');
103
+ });
104
+ (0, vitest_1.it)('generates truecolor foreground from hex', () => {
105
+ (0, vitest_1.expect)((0, ansi_1.fgSequence)('#FF0000', 'truecolor')).toBe('\x1b[38;2;255;0;0m');
106
+ });
107
+ (0, vitest_1.it)('downgrades hex to 256-color when level is 256', () => {
108
+ const seq = (0, ansi_1.fgSequence)('#FF0000', '256');
109
+ (0, vitest_1.expect)(seq.startsWith('\x1b[38;5;')).toBe(true);
110
+ (0, vitest_1.expect)(seq.endsWith('m')).toBe(true);
111
+ });
112
+ (0, vitest_1.it)('downgrades hex to 16-color when level is 16', () => {
113
+ const seq = (0, ansi_1.fgSequence)('#FF0000', '16');
114
+ (0, vitest_1.expect)(seq.startsWith('\x1b[')).toBe(true);
115
+ (0, vitest_1.expect)(seq.endsWith('m')).toBe(true);
116
+ });
117
+ (0, vitest_1.it)('returns empty string for unknown color', () => {
118
+ (0, vitest_1.expect)((0, ansi_1.fgSequence)('notacolor', '16')).toBe('');
119
+ });
120
+ });
121
+ (0, vitest_1.describe)('bgSequence', () => {
122
+ (0, vitest_1.it)('returns empty string for none color level', () => {
123
+ (0, vitest_1.expect)((0, ansi_1.bgSequence)('red', 'none')).toBe('');
124
+ });
125
+ (0, vitest_1.it)('generates 16-color named background', () => {
126
+ (0, vitest_1.expect)((0, ansi_1.bgSequence)('red', '16')).toBe('\x1b[41m');
127
+ (0, vitest_1.expect)((0, ansi_1.bgSequence)('brightBlue', '256')).toBe('\x1b[104m');
128
+ });
129
+ (0, vitest_1.it)('generates 256-color background', () => {
130
+ (0, vitest_1.expect)((0, ansi_1.bgSequence)('232', '256')).toBe('\x1b[48;5;232m');
131
+ });
132
+ (0, vitest_1.it)('generates truecolor background from hex', () => {
133
+ (0, vitest_1.expect)((0, ansi_1.bgSequence)('#00FF00', 'truecolor')).toBe('\x1b[48;2;0;255;0m');
134
+ });
135
+ });
136
+ (0, vitest_1.describe)('applyStyle', () => {
137
+ (0, vitest_1.it)('returns text unchanged for empty style', () => {
138
+ (0, vitest_1.expect)((0, ansi_1.applyStyle)('hello', {}, 'truecolor')).toBe('hello');
139
+ });
140
+ (0, vitest_1.it)('applies bold', () => {
141
+ const result = (0, ansi_1.applyStyle)('hello', { bold: true }, 'truecolor');
142
+ (0, vitest_1.expect)(result).toBe(`${ansi_1.BOLD}hello${ansi_1.RESET}`);
143
+ });
144
+ (0, vitest_1.it)('applies dim', () => {
145
+ const result = (0, ansi_1.applyStyle)('hello', { dim: true }, 'truecolor');
146
+ (0, vitest_1.expect)(result).toBe(`${ansi_1.DIM}hello${ansi_1.RESET}`);
147
+ });
148
+ (0, vitest_1.it)('applies italic', () => {
149
+ const result = (0, ansi_1.applyStyle)('hello', { italic: true }, 'truecolor');
150
+ (0, vitest_1.expect)(result).toBe(`${ansi_1.ITALIC}hello${ansi_1.RESET}`);
151
+ });
152
+ (0, vitest_1.it)('applies underline', () => {
153
+ const result = (0, ansi_1.applyStyle)('hello', { underline: true }, 'truecolor');
154
+ (0, vitest_1.expect)(result).toBe(`${ansi_1.UNDERLINE}hello${ansi_1.RESET}`);
155
+ });
156
+ (0, vitest_1.it)('applies strikethrough', () => {
157
+ const result = (0, ansi_1.applyStyle)('hello', { strikethrough: true }, 'truecolor');
158
+ (0, vitest_1.expect)(result).toBe(`${ansi_1.STRIKETHROUGH}hello${ansi_1.RESET}`);
159
+ });
160
+ (0, vitest_1.it)('combines multiple attributes', () => {
161
+ const result = (0, ansi_1.applyStyle)('hello', { bold: true, italic: true }, 'truecolor');
162
+ (0, vitest_1.expect)(result).toBe(`${ansi_1.BOLD}${ansi_1.ITALIC}hello${ansi_1.RESET}`);
163
+ });
164
+ (0, vitest_1.it)('applies foreground color', () => {
165
+ const result = (0, ansi_1.applyStyle)('hello', { fg: 'red' }, 'truecolor');
166
+ (0, vitest_1.expect)(result).toContain('\x1b[31m');
167
+ (0, vitest_1.expect)(result).toContain('hello');
168
+ (0, vitest_1.expect)(result.endsWith(ansi_1.RESET)).toBe(true);
169
+ });
170
+ (0, vitest_1.it)('applies background color', () => {
171
+ const result = (0, ansi_1.applyStyle)('hello', { bg: 'blue' }, 'truecolor');
172
+ (0, vitest_1.expect)(result).toContain('\x1b[44m');
173
+ (0, vitest_1.expect)(result).toContain('hello');
174
+ });
175
+ (0, vitest_1.it)('applies color with attributes', () => {
176
+ const style = { fg: 'cyan', bold: true, dim: true };
177
+ const result = (0, ansi_1.applyStyle)('test', style, '16');
178
+ (0, vitest_1.expect)(result).toContain(ansi_1.BOLD);
179
+ (0, vitest_1.expect)(result).toContain(ansi_1.DIM);
180
+ (0, vitest_1.expect)(result).toContain('\x1b[36m'); // cyan fg
181
+ (0, vitest_1.expect)(result).toContain('test');
182
+ });
183
+ (0, vitest_1.it)('applies hex truecolor', () => {
184
+ const result = (0, ansi_1.applyStyle)('hi', { fg: '#FF6B6B' }, 'truecolor');
185
+ (0, vitest_1.expect)(result).toContain('\x1b[38;2;255;107;107m');
186
+ });
187
+ (0, vitest_1.it)('applies text attributes even with none color level', () => {
188
+ const result = (0, ansi_1.applyStyle)('hi', { bold: true, fg: 'red' }, 'none');
189
+ (0, vitest_1.expect)(result).toContain(ansi_1.BOLD);
190
+ (0, vitest_1.expect)(result).not.toContain('\x1b[31m');
191
+ });
192
+ (0, vitest_1.it)('skips color codes but keeps attributes with none level', () => {
193
+ const style = { bold: true, italic: true, fg: '#FF0000', bg: 'blue' };
194
+ const result = (0, ansi_1.applyStyle)('text', style, 'none');
195
+ (0, vitest_1.expect)(result).toBe(`${ansi_1.BOLD}${ansi_1.ITALIC}text${ansi_1.RESET}`);
196
+ });
197
+ });
198
+ (0, vitest_1.describe)('stripAnsi', () => {
199
+ (0, vitest_1.it)('removes bold/reset codes', () => {
200
+ (0, vitest_1.expect)((0, ansi_1.stripAnsi)(`${ansi_1.BOLD}hello${ansi_1.RESET}`)).toBe('hello');
201
+ });
202
+ (0, vitest_1.it)('removes color codes', () => {
203
+ (0, vitest_1.expect)((0, ansi_1.stripAnsi)('\x1b[31mhello\x1b[0m')).toBe('hello');
204
+ });
205
+ (0, vitest_1.it)('removes 256-color codes', () => {
206
+ (0, vitest_1.expect)((0, ansi_1.stripAnsi)('\x1b[38;5;196mhello\x1b[0m')).toBe('hello');
207
+ });
208
+ (0, vitest_1.it)('removes truecolor codes', () => {
209
+ (0, vitest_1.expect)((0, ansi_1.stripAnsi)('\x1b[38;2;255;0;0mhello\x1b[0m')).toBe('hello');
210
+ });
211
+ (0, vitest_1.it)('removes multiple codes', () => {
212
+ const styled = `${ansi_1.BOLD}${ansi_1.DIM}\x1b[31mhello\x1b[0m world${ansi_1.RESET}`;
213
+ (0, vitest_1.expect)((0, ansi_1.stripAnsi)(styled)).toBe('hello world');
214
+ });
215
+ (0, vitest_1.it)('returns plain text unchanged', () => {
216
+ (0, vitest_1.expect)((0, ansi_1.stripAnsi)('hello world')).toBe('hello world');
217
+ });
218
+ (0, vitest_1.it)('handles empty string', () => {
219
+ (0, vitest_1.expect)((0, ansi_1.stripAnsi)('')).toBe('');
220
+ });
221
+ });
222
+ (0, vitest_1.describe)('visibleLength', () => {
223
+ (0, vitest_1.it)('returns length of plain text', () => {
224
+ (0, vitest_1.expect)((0, ansi_1.visibleLength)('hello')).toBe(5);
225
+ });
226
+ (0, vitest_1.it)('excludes ANSI codes from length', () => {
227
+ (0, vitest_1.expect)((0, ansi_1.visibleLength)(`${ansi_1.BOLD}hello${ansi_1.RESET}`)).toBe(5);
228
+ });
229
+ (0, vitest_1.it)('handles complex styled text', () => {
230
+ const styled = (0, ansi_1.applyStyle)('test', { fg: '#FF0000', bold: true }, 'truecolor');
231
+ (0, vitest_1.expect)((0, ansi_1.visibleLength)(styled)).toBe(4);
232
+ });
233
+ (0, vitest_1.it)('returns 0 for empty string', () => {
234
+ (0, vitest_1.expect)((0, ansi_1.visibleLength)('')).toBe(0);
235
+ });
236
+ });
237
+ });
238
+ //# sourceMappingURL=ansi.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ansi.test.js","sourceRoot":"","sources":["../../src/__tests__/ansi.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /** Code block test fixtures for syntax highlighting tests. */
2
+ export declare const javascript: {
3
+ simple: string;
4
+ function: string;
5
+ arrowFunction: string;
6
+ classDefinition: string;
7
+ imports: string;
8
+ allTokenTypes: string;
9
+ };
10
+ export declare const typescript: {
11
+ interface: string;
12
+ typeAlias: string;
13
+ enumDef: string;
14
+ generic: string;
15
+ decorator: string;
16
+ };
17
+ export declare const unknownLanguage: {
18
+ brainfuck: string;
19
+ whitespace: string;
20
+ };
21
+ export declare const markdown: {
22
+ fencedJS: string;
23
+ fencedTS: string;
24
+ fencedUnknown: string;
25
+ fencedNoLang: string;
26
+ };
27
+ //# sourceMappingURL=code-blocks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-blocks.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/code-blocks.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,eAAO,MAAM,UAAU;;;;;;;CA8BtB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;CAyBtB,CAAC;AAEF,eAAO,MAAM,eAAe;;;CAG3B,CAAC;AAEF,eAAO,MAAM,QAAQ;;;;;CAKpB,CAAC"}
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ /** Code block test fixtures for syntax highlighting tests. */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.markdown = exports.unknownLanguage = exports.typescript = exports.javascript = void 0;
5
+ exports.javascript = {
6
+ simple: `const x = 1;`,
7
+ function: `function add(a, b) {
8
+ return a + b;
9
+ }`,
10
+ arrowFunction: `const greet = (name) => {
11
+ console.log(\`Hello, \${name}!\`);
12
+ };`,
13
+ classDefinition: `class Animal {
14
+ constructor(name) {
15
+ this.name = name;
16
+ }
17
+
18
+ speak() {
19
+ return \`\${this.name} makes a sound.\`;
20
+ }
21
+ }`,
22
+ imports: `import { readFile } from 'fs';
23
+ import path from 'path';
24
+ export default function main() {}`,
25
+ allTokenTypes: `// A comment
26
+ const PI = 3.14;
27
+ let greeting = "hello";
28
+ function add(a, b) {
29
+ if (a === null || b === undefined) {
30
+ return 0;
31
+ }
32
+ return a + b;
33
+ }
34
+ const result = add(1, 2);`,
35
+ };
36
+ exports.typescript = {
37
+ interface: `interface User {
38
+ readonly id: number;
39
+ name: string;
40
+ email?: string;
41
+ }`,
42
+ typeAlias: `type Result<T> = {
43
+ data: T;
44
+ error: string | null;
45
+ };`,
46
+ enumDef: `enum Direction {
47
+ Up = "UP",
48
+ Down = "DOWN",
49
+ Left = "LEFT",
50
+ Right = "RIGHT",
51
+ }`,
52
+ generic: `function identity<T>(arg: T): T {
53
+ return arg;
54
+ }`,
55
+ decorator: `@Component({
56
+ selector: 'app-root',
57
+ })
58
+ class AppComponent implements OnInit {
59
+ ngOnInit(): void {}
60
+ }`,
61
+ };
62
+ exports.unknownLanguage = {
63
+ brainfuck: `+++[-]>>>[-]<<<`,
64
+ whitespace: ` \t \t\t\n`,
65
+ };
66
+ exports.markdown = {
67
+ fencedJS: '```javascript\nconst x = 1;\n```',
68
+ fencedTS: '```typescript\ninterface Foo {}\n```',
69
+ fencedUnknown: '```brainfuck\n+++[-]\n```',
70
+ fencedNoLang: '```\nplain text\n```',
71
+ };
72
+ //# sourceMappingURL=code-blocks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-blocks.js","sourceRoot":"","sources":["../../../src/__tests__/fixtures/code-blocks.ts"],"names":[],"mappings":";AAAA,8DAA8D;;;AAEjD,QAAA,UAAU,GAAG;IACxB,MAAM,EAAE,cAAc;IACtB,QAAQ,EAAE;;EAEV;IACA,aAAa,EAAE;;GAEd;IACD,eAAe,EAAE;;;;;;;;EAQjB;IACA,OAAO,EAAE;;kCAEuB;IAChC,aAAa,EAAE;;;;;;;;;0BASS;CACzB,CAAC;AAEW,QAAA,UAAU,GAAG;IACxB,SAAS,EAAE;;;;EAIX;IACA,SAAS,EAAE;;;GAGV;IACD,OAAO,EAAE;;;;;EAKT;IACA,OAAO,EAAE;;EAET;IACA,SAAS,EAAE;;;;;EAKX;CACD,CAAC;AAEW,QAAA,eAAe,GAAG;IAC7B,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,cAAc;CAC3B,CAAC;AAEW,QAAA,QAAQ,GAAG;IACtB,QAAQ,EAAE,kCAAkC;IAC5C,QAAQ,EAAE,sCAAsC;IAChD,aAAa,EAAE,2BAA2B;IAC1C,YAAY,EAAE,sBAAsB;CACrC,CAAC"}