linecraft 0.1.0 → 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 (283) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +313 -64
  3. package/lib/api/color.d.ts +6 -0
  4. package/lib/api/color.d.ts.map +1 -0
  5. package/lib/api/color.js +9 -0
  6. package/lib/api/color.js.map +1 -0
  7. package/lib/api/color.test.d.ts +2 -0
  8. package/lib/api/color.test.d.ts.map +1 -0
  9. package/lib/api/color.test.js +23 -0
  10. package/lib/api/color.test.js.map +1 -0
  11. package/lib/api/flex.d.ts +55 -0
  12. package/lib/api/flex.d.ts.map +1 -0
  13. package/lib/api/flex.js +86 -0
  14. package/lib/api/flex.js.map +1 -0
  15. package/lib/api/flex.test.d.ts +2 -0
  16. package/lib/api/flex.test.d.ts.map +1 -0
  17. package/lib/api/flex.test.js +82 -0
  18. package/lib/api/flex.test.js.map +1 -0
  19. package/lib/api/grid.d.ts +22 -0
  20. package/lib/api/grid.d.ts.map +1 -0
  21. package/lib/api/grid.js +65 -0
  22. package/lib/api/grid.js.map +1 -0
  23. package/lib/api/grid.test.d.ts +2 -0
  24. package/lib/api/grid.test.d.ts.map +1 -0
  25. package/lib/api/grid.test.js +48 -0
  26. package/lib/api/grid.test.js.map +1 -0
  27. package/lib/components/base.d.ts +53 -0
  28. package/lib/components/base.d.ts.map +1 -0
  29. package/lib/components/base.js +47 -0
  30. package/lib/components/base.js.map +1 -0
  31. package/lib/components/col.d.ts +35 -0
  32. package/lib/components/col.d.ts.map +1 -0
  33. package/lib/components/col.js +168 -0
  34. package/lib/components/col.js.map +1 -0
  35. package/lib/components/col.test.d.ts +2 -0
  36. package/lib/components/col.test.d.ts.map +1 -0
  37. package/lib/components/col.test.js +96 -0
  38. package/lib/components/col.test.js.map +1 -0
  39. package/lib/components/index.d.ts +3 -0
  40. package/lib/components/index.d.ts.map +1 -0
  41. package/lib/components/index.js +5 -0
  42. package/lib/components/index.js.map +1 -0
  43. package/lib/components/progress-bar-grid.d.ts +20 -0
  44. package/lib/components/progress-bar-grid.d.ts.map +1 -0
  45. package/lib/components/progress-bar-grid.js +44 -0
  46. package/lib/components/progress-bar-grid.js.map +1 -0
  47. package/lib/components/progress-bar-grid.test.d.ts +2 -0
  48. package/lib/components/progress-bar-grid.test.d.ts.map +1 -0
  49. package/lib/components/progress-bar-grid.test.js +101 -0
  50. package/lib/components/progress-bar-grid.test.js.map +1 -0
  51. package/lib/components/progress-bar.d.ts +26 -3
  52. package/lib/components/progress-bar.d.ts.map +1 -1
  53. package/lib/components/progress-bar.js +62 -6
  54. package/lib/components/progress-bar.js.map +1 -1
  55. package/lib/components/progress-bar.test.d.ts +2 -0
  56. package/lib/components/progress-bar.test.d.ts.map +1 -0
  57. package/lib/components/progress-bar.test.js +153 -0
  58. package/lib/components/progress-bar.test.js.map +1 -0
  59. package/lib/components/prompt.d.ts +14 -0
  60. package/lib/components/prompt.d.ts.map +1 -0
  61. package/lib/components/prompt.js +77 -0
  62. package/lib/components/prompt.js.map +1 -0
  63. package/lib/components/renderable.d.ts +42 -0
  64. package/lib/components/renderable.d.ts.map +1 -0
  65. package/lib/components/renderable.js +225 -0
  66. package/lib/components/renderable.js.map +1 -0
  67. package/lib/components/spinner.d.ts +2 -2
  68. package/lib/components/spinner.d.ts.map +1 -1
  69. package/lib/components/spinner.js +3 -1
  70. package/lib/components/spinner.js.map +1 -1
  71. package/lib/components/spinner.test.d.ts +2 -0
  72. package/lib/components/spinner.test.d.ts.map +1 -0
  73. package/lib/components/spinner.test.js +168 -0
  74. package/lib/components/spinner.test.js.map +1 -0
  75. package/lib/components/style.d.ts +16 -0
  76. package/lib/components/style.d.ts.map +1 -0
  77. package/lib/components/style.js +72 -0
  78. package/lib/components/style.js.map +1 -0
  79. package/lib/components/style.test.d.ts +2 -0
  80. package/lib/components/style.test.d.ts.map +1 -0
  81. package/lib/components/style.test.js +135 -0
  82. package/lib/components/style.test.js.map +1 -0
  83. package/lib/components/text.d.ts +24 -0
  84. package/lib/components/text.d.ts.map +1 -0
  85. package/lib/components/text.js +65 -0
  86. package/lib/components/text.js.map +1 -0
  87. package/lib/drawing/boxes.d.ts +33 -0
  88. package/lib/drawing/boxes.d.ts.map +1 -0
  89. package/lib/drawing/boxes.js +76 -0
  90. package/lib/drawing/boxes.js.map +1 -0
  91. package/lib/index.d.ts +18 -11
  92. package/lib/index.d.ts.map +1 -1
  93. package/lib/index.js +21 -10
  94. package/lib/index.js.map +1 -1
  95. package/lib/index.test.d.ts +2 -0
  96. package/lib/index.test.d.ts.map +1 -0
  97. package/lib/index.test.js +80 -0
  98. package/lib/index.test.js.map +1 -0
  99. package/lib/layout/flex.d.ts +39 -0
  100. package/lib/layout/flex.d.ts.map +1 -0
  101. package/lib/layout/flex.js +300 -0
  102. package/lib/layout/flex.js.map +1 -0
  103. package/lib/layout/flex.test.d.ts +2 -0
  104. package/lib/layout/flex.test.d.ts.map +1 -0
  105. package/lib/layout/flex.test.js +206 -0
  106. package/lib/layout/flex.test.js.map +1 -0
  107. package/lib/layout/grid.d.ts +53 -0
  108. package/lib/layout/grid.d.ts.map +1 -0
  109. package/lib/layout/grid.js +421 -0
  110. package/lib/layout/grid.js.map +1 -0
  111. package/lib/layout/grid.test.d.ts +2 -0
  112. package/lib/layout/grid.test.d.ts.map +1 -0
  113. package/lib/layout/grid.test.js +139 -0
  114. package/lib/layout/grid.test.js.map +1 -0
  115. package/lib/native/ansi.d.ts +104 -0
  116. package/lib/native/ansi.d.ts.map +1 -0
  117. package/lib/native/ansi.js +120 -0
  118. package/lib/native/ansi.js.map +1 -0
  119. package/lib/native/ansi.test.d.ts +2 -0
  120. package/lib/native/ansi.test.d.ts.map +1 -0
  121. package/lib/native/ansi.test.js +57 -0
  122. package/lib/native/ansi.test.js.map +1 -0
  123. package/lib/native/buffer.d.ts +32 -0
  124. package/lib/native/buffer.d.ts.map +1 -0
  125. package/lib/native/buffer.js +49 -0
  126. package/lib/native/buffer.js.map +1 -0
  127. package/lib/native/buffer.test.d.ts +2 -0
  128. package/lib/native/buffer.test.d.ts.map +1 -0
  129. package/lib/native/buffer.test.js +64 -0
  130. package/lib/native/buffer.test.js.map +1 -0
  131. package/lib/native/diff.d.ts +20 -0
  132. package/lib/native/diff.d.ts.map +1 -0
  133. package/lib/native/diff.js +33 -0
  134. package/lib/native/diff.js.map +1 -0
  135. package/lib/native/diff.test.d.ts +2 -0
  136. package/lib/native/diff.test.d.ts.map +1 -0
  137. package/lib/native/diff.test.js +106 -0
  138. package/lib/native/diff.test.js.map +1 -0
  139. package/lib/native/region-old.d.ts +117 -0
  140. package/lib/native/region-old.d.ts.map +1 -0
  141. package/lib/native/region-old.js +539 -0
  142. package/lib/native/region-old.js.map +1 -0
  143. package/lib/native/region-renderer.d.ts +167 -0
  144. package/lib/native/region-renderer.d.ts.map +1 -0
  145. package/lib/native/region-renderer.js +1238 -0
  146. package/lib/native/region-renderer.js.map +1 -0
  147. package/lib/native/region-simple.d.ts +44 -0
  148. package/lib/native/region-simple.d.ts.map +1 -0
  149. package/lib/native/region-simple.js +290 -0
  150. package/lib/native/region-simple.js.map +1 -0
  151. package/lib/native/region.d.ts +53 -0
  152. package/lib/native/region.d.ts.map +1 -0
  153. package/lib/native/region.js +426 -0
  154. package/lib/native/region.js.map +1 -0
  155. package/lib/native/region.test.d.ts +2 -0
  156. package/lib/native/region.test.d.ts.map +1 -0
  157. package/lib/native/region.test.js +248 -0
  158. package/lib/native/region.test.js.map +1 -0
  159. package/lib/native/throttle.d.ts +29 -0
  160. package/lib/native/throttle.d.ts.map +1 -0
  161. package/lib/native/throttle.js +57 -0
  162. package/lib/native/throttle.js.map +1 -0
  163. package/lib/native/throttle.test.d.ts +2 -0
  164. package/lib/native/throttle.test.d.ts.map +1 -0
  165. package/lib/native/throttle.test.js +86 -0
  166. package/lib/native/throttle.test.js.map +1 -0
  167. package/lib/native.d.ts +5 -11
  168. package/lib/native.d.ts.map +1 -1
  169. package/lib/native.js +8 -64
  170. package/lib/native.js.map +1 -1
  171. package/lib/region.d.ts +48 -5
  172. package/lib/region.d.ts.map +1 -1
  173. package/lib/region.js +474 -36
  174. package/lib/region.js.map +1 -1
  175. package/lib/region.test.d.ts +2 -0
  176. package/lib/region.test.d.ts.map +1 -0
  177. package/lib/region.test.js +227 -0
  178. package/lib/region.test.js.map +1 -0
  179. package/lib/region.visual.test.d.ts +2 -0
  180. package/lib/region.visual.test.d.ts.map +1 -0
  181. package/lib/region.visual.test.js +55 -0
  182. package/lib/region.visual.test.js.map +1 -0
  183. package/lib/test-helpers/capturable-terminal.d.ts +61 -0
  184. package/lib/test-helpers/capturable-terminal.d.ts.map +1 -0
  185. package/lib/test-helpers/capturable-terminal.js +113 -0
  186. package/lib/test-helpers/capturable-terminal.js.map +1 -0
  187. package/lib/test-helpers/capturable-terminal.test.d.ts +2 -0
  188. package/lib/test-helpers/capturable-terminal.test.d.ts.map +1 -0
  189. package/lib/test-helpers/capturable-terminal.test.js +45 -0
  190. package/lib/test-helpers/capturable-terminal.test.js.map +1 -0
  191. package/lib/test-helpers/mock-region.d.ts +21 -0
  192. package/lib/test-helpers/mock-region.d.ts.map +1 -0
  193. package/lib/test-helpers/mock-region.js +37 -0
  194. package/lib/test-helpers/mock-region.js.map +1 -0
  195. package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts +2 -0
  196. package/lib/test-helpers/virtual-terminal-diff-reflow.test.d.ts.map +1 -0
  197. package/lib/test-helpers/virtual-terminal-diff-reflow.test.js +256 -0
  198. package/lib/test-helpers/virtual-terminal-diff-reflow.test.js.map +1 -0
  199. package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts +2 -0
  200. package/lib/test-helpers/virtual-terminal-flex-resize.test.d.ts.map +1 -0
  201. package/lib/test-helpers/virtual-terminal-flex-resize.test.js +438 -0
  202. package/lib/test-helpers/virtual-terminal-flex-resize.test.js.map +1 -0
  203. package/lib/test-helpers/virtual-terminal.d.ts +176 -0
  204. package/lib/test-helpers/virtual-terminal.d.ts.map +1 -0
  205. package/lib/test-helpers/virtual-terminal.js +492 -0
  206. package/lib/test-helpers/virtual-terminal.js.map +1 -0
  207. package/lib/test-helpers/virtual-terminal.test.d.ts +2 -0
  208. package/lib/test-helpers/virtual-terminal.test.d.ts.map +1 -0
  209. package/lib/test-helpers/virtual-terminal.test.js +219 -0
  210. package/lib/test-helpers/virtual-terminal.test.js.map +1 -0
  211. package/lib/ts/components/spinner.test.d.ts +2 -0
  212. package/lib/ts/components/spinner.test.d.ts.map +1 -0
  213. package/lib/ts/components/spinner.test.js +168 -0
  214. package/lib/ts/components/spinner.test.js.map +1 -0
  215. package/lib/ts/utils/colors.test.d.ts +2 -0
  216. package/lib/ts/utils/colors.test.d.ts.map +1 -0
  217. package/lib/ts/utils/colors.test.js +87 -0
  218. package/lib/ts/utils/colors.test.js.map +1 -0
  219. package/lib/types.d.ts +8 -2
  220. package/lib/types.d.ts.map +1 -1
  221. package/lib/types.js.map +1 -1
  222. package/lib/utils/colors-simple.d.ts +51 -0
  223. package/lib/utils/colors-simple.d.ts.map +1 -0
  224. package/lib/utils/colors-simple.js +59 -0
  225. package/lib/utils/colors-simple.js.map +1 -0
  226. package/lib/utils/colors.d.ts +1 -1
  227. package/lib/utils/colors.d.ts.map +1 -1
  228. package/lib/utils/colors.js.map +1 -1
  229. package/lib/utils/colors.test.d.ts +2 -0
  230. package/lib/utils/colors.test.d.ts.map +1 -0
  231. package/lib/utils/colors.test.js +87 -0
  232. package/lib/utils/colors.test.js.map +1 -0
  233. package/lib/utils/cursor-position.d.ts +22 -0
  234. package/lib/utils/cursor-position.d.ts.map +1 -0
  235. package/lib/utils/cursor-position.js +139 -0
  236. package/lib/utils/cursor-position.js.map +1 -0
  237. package/lib/utils/debug-log.d.ts +2 -0
  238. package/lib/utils/debug-log.d.ts.map +1 -0
  239. package/lib/utils/debug-log.js +36 -0
  240. package/lib/utils/debug-log.js.map +1 -0
  241. package/lib/utils/terminal.d.ts +27 -0
  242. package/lib/utils/terminal.d.ts.map +1 -0
  243. package/lib/utils/terminal.js +116 -0
  244. package/lib/utils/terminal.js.map +1 -0
  245. package/lib/utils/text.d.ts +21 -0
  246. package/lib/utils/text.d.ts.map +1 -0
  247. package/lib/utils/text.js +82 -0
  248. package/lib/utils/text.js.map +1 -0
  249. package/lib/utils/wait-for-spacebar.d.ts +10 -0
  250. package/lib/utils/wait-for-spacebar.d.ts.map +1 -0
  251. package/lib/utils/wait-for-spacebar.js +71 -0
  252. package/lib/utils/wait-for-spacebar.js.map +1 -0
  253. package/package.json +31 -28
  254. package/.cursor/plan.md +0 -952
  255. package/TESTING.md +0 -102
  256. package/build.zig +0 -100
  257. package/examples/basic-progress.ts +0 -21
  258. package/examples/multi-lane.ts +0 -29
  259. package/examples/spinner.ts +0 -20
  260. package/examples/test-basic.ts +0 -23
  261. package/src/ts/components/progress-bar.ts +0 -53
  262. package/src/ts/components/spinner.ts +0 -56
  263. package/src/ts/index.ts +0 -37
  264. package/src/ts/native.ts +0 -86
  265. package/src/ts/region.ts +0 -89
  266. package/src/ts/types/ffi-napi.d.ts +0 -11
  267. package/src/ts/types/ref-napi.d.ts +0 -5
  268. package/src/ts/types.ts +0 -53
  269. package/src/ts/utils/colors.ts +0 -72
  270. package/src/zig/ansi.zig +0 -21
  271. package/src/zig/buffer.zig +0 -37
  272. package/src/zig/diff.zig +0 -43
  273. package/src/zig/region.zig +0 -292
  274. package/src/zig/renderer.zig +0 -92
  275. package/src/zig/test_ansi.zig +0 -66
  276. package/src/zig/test_buffer.zig +0 -82
  277. package/src/zig/test_diff.zig +0 -220
  278. package/src/zig/test_integration.zig +0 -76
  279. package/src/zig/test_region.zig +0 -191
  280. package/src/zig/test_runner.zig +0 -27
  281. package/src/zig/test_throttle.zig +0 -59
  282. package/src/zig/throttle.zig +0 -38
  283. package/tsconfig.json +0 -21
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-terminal.d.ts","sourceRoot":"","sources":["../../src/ts/test-helpers/virtual-terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,492 @@
1
+ /**
2
+ * Virtual Terminal for Testing
3
+ *
4
+ * A complete terminal simulator that:
5
+ * - Implements TerminalRegion interface (drop-in replacement for tests)
6
+ * - Tracks character positions in a 2D grid
7
+ * - Handles ANSI escape codes (colors, cursor movement)
8
+ * - Simulates text wrapping when width changes
9
+ * - Allows resizing to test flex layouts and reflow
10
+ * - Emits resize events that native TerminalRegion can listen to
11
+ * - Provides readback of actual displayed content
12
+ *
13
+ * Use this instead of CapturableTerminal for comprehensive testing of:
14
+ * - Resize behavior
15
+ * - Text wrapping
16
+ * - Flex layout calculations
17
+ * - ANSI code handling
18
+ */
19
+ import { EventEmitter } from 'events';
20
+ /**
21
+ * A virtual terminal that simulates real terminal behavior for testing
22
+ * Has the same API as TerminalRegion so it can be used as a drop-in replacement
23
+ */
24
+ export class VirtualTerminal extends EventEmitter {
25
+ grid;
26
+ autoWrap;
27
+ cursorX = 0;
28
+ cursorY = 0;
29
+ currentStyle = {};
30
+ writeHistory = [];
31
+ setLineCalls = [];
32
+ _width;
33
+ _height;
34
+ writeStream = null;
35
+ constructor(options = {}) {
36
+ super(); // Initialize EventEmitter
37
+ this._width = options.width ?? 80;
38
+ this._height = options.height ?? 24;
39
+ this.autoWrap = options.autoWrap ?? true;
40
+ this.grid = Array(this._height).fill(null).map(() => Array(this._width).fill(null).map(() => ({ char: ' ', bold: false, italic: false, underline: false })));
41
+ }
42
+ // TerminalRegion-compatible API
43
+ get width() {
44
+ return this._width;
45
+ }
46
+ get height() {
47
+ return this._height;
48
+ }
49
+ /**
50
+ * Set a line (1-based line numbers) - implements TerminalRegion interface
51
+ * This simulates what happens when col.render() calls setLine
52
+ *
53
+ * Note: col.render() already handles merging at the x position, so setLine
54
+ * receives the final merged line content. We just need to store it.
55
+ */
56
+ setLine(lineNumber, content) {
57
+ if (lineNumber < 1) {
58
+ throw new Error('Line numbers start at 1');
59
+ }
60
+ const text = typeof content === 'string' ? content : content.text;
61
+ this.setLineCalls.push({ line: lineNumber, content: text });
62
+ // Convert line number (1-based) to y position (0-based)
63
+ const y = lineNumber - 1;
64
+ // Expand height if needed
65
+ if (y >= this._height) {
66
+ this.expandTo(y + 1);
67
+ }
68
+ // Store the line content directly to the grid
69
+ // col.render() already merged the content at the x position,
70
+ // so we just need to write it to the grid starting at x=0
71
+ this.cursorY = y;
72
+ this.cursorX = 0;
73
+ // Write the content (this will handle ANSI codes and update the grid)
74
+ this.write(text);
75
+ // Update height tracking
76
+ this._height = Math.max(this._height, lineNumber);
77
+ }
78
+ /**
79
+ * Get a line (1-based line numbers) - implements TerminalRegion interface
80
+ * Returns the actual content that would be displayed
81
+ */
82
+ getLine(lineNumber) {
83
+ if (lineNumber < 1) {
84
+ throw new Error('Line numbers start at 1');
85
+ }
86
+ const y = lineNumber - 1;
87
+ return this.getLineAt(y, false); // Return plain text (no ANSI)
88
+ }
89
+ /**
90
+ * Clear a line (1-based)
91
+ */
92
+ clearLine(lineNumber) {
93
+ if (lineNumber < 1) {
94
+ throw new Error('Line numbers start at 1');
95
+ }
96
+ const y = lineNumber - 1;
97
+ if (y >= 0 && y < this._height) {
98
+ for (let x = 0; x < this._width; x++) {
99
+ this.grid[y][x] = { char: ' ', bold: false, italic: false, underline: false };
100
+ }
101
+ }
102
+ }
103
+ /**
104
+ * Set entire content (multiple lines)
105
+ */
106
+ set(content) {
107
+ if (typeof content === 'string') {
108
+ const lines = content.split('\n');
109
+ lines.forEach((line, i) => {
110
+ this.setLine(i + 1, line);
111
+ });
112
+ }
113
+ else if (Array.isArray(content)) {
114
+ content.forEach((item, i) => {
115
+ this.setLine(i + 1, item);
116
+ });
117
+ }
118
+ }
119
+ /**
120
+ * Flush - no-op for simulator
121
+ */
122
+ flush() { }
123
+ /**
124
+ * Set throttle - no-op for simulator
125
+ */
126
+ setThrottle(fps) { }
127
+ /**
128
+ * Destroy - clears simulator
129
+ */
130
+ destroy(clearFirst = false) {
131
+ if (clearFirst) {
132
+ this.clear();
133
+ }
134
+ }
135
+ /**
136
+ * Get width (for TerminalRegion interface)
137
+ */
138
+ getWidth() {
139
+ return this._width;
140
+ }
141
+ /**
142
+ * Get height (for TerminalRegion interface)
143
+ */
144
+ getHeight() {
145
+ return this._height;
146
+ }
147
+ /**
148
+ * Resize the terminal - this simulates what happens when a terminal is resized
149
+ * Text that no longer fits will wrap or be truncated
150
+ *
151
+ * This method reflows existing content and emits a 'resize' event
152
+ * that native TerminalRegion can listen to (via process.stdout.on('resize'))
153
+ */
154
+ resize(newWidth, newHeight) {
155
+ const oldWidth = this._width;
156
+ const oldHeight = this._height;
157
+ // Create new grid
158
+ const newGrid = Array(newHeight).fill(null).map(() => Array(newWidth).fill(null).map(() => ({ char: ' ', bold: false, italic: false, underline: false })));
159
+ // Copy existing content, handling wrapping/truncation
160
+ for (let y = 0; y < Math.min(oldHeight, newHeight); y++) {
161
+ for (let x = 0; x < Math.min(oldWidth, newWidth); x++) {
162
+ if (this.grid[y] && this.grid[y][x]) {
163
+ newGrid[y][x] = { ...this.grid[y][x] };
164
+ }
165
+ }
166
+ // If line is longer than new width, handle wrapping
167
+ if (oldWidth > newWidth && this.autoWrap) {
168
+ // Text beyond new width wraps to next line
169
+ for (let x = newWidth; x < oldWidth; x++) {
170
+ if (this.grid[y] && this.grid[y][x] && this.grid[y][x].char !== ' ') {
171
+ const wrapY = y + Math.floor((x - newWidth) / newWidth) + 1;
172
+ const wrapX = (x - newWidth) % newWidth;
173
+ if (wrapY < newHeight) {
174
+ if (!newGrid[wrapY]) {
175
+ newGrid[wrapY] = Array(newWidth).fill(null).map(() => ({ char: ' ', bold: false, italic: false, underline: false }));
176
+ }
177
+ newGrid[wrapY][wrapX] = { ...this.grid[y][x] };
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ this.grid = newGrid;
184
+ this._width = newWidth;
185
+ this._height = newHeight;
186
+ // Clamp cursor position
187
+ this.cursorX = Math.min(this.cursorX, newWidth - 1);
188
+ this.cursorY = Math.min(this.cursorY, newHeight - 1);
189
+ // Emit resize event (this is what native TerminalRegion listens to)
190
+ // The writeStream will also emit this event
191
+ this.emit('resize');
192
+ if (this.writeStream) {
193
+ this.writeStream.emit('resize');
194
+ }
195
+ }
196
+ /**
197
+ * Expand terminal height
198
+ */
199
+ expandTo(newHeight) {
200
+ this._height = newHeight;
201
+ // Expand grid
202
+ while (this.grid.length < newHeight) {
203
+ this.grid.push(Array(this._width).fill(null).map(() => ({ char: ' ', bold: false, italic: false, underline: false })));
204
+ }
205
+ }
206
+ /**
207
+ * Write data to the terminal (simulating stdout.write)
208
+ * Handles ANSI escape codes and updates the grid
209
+ */
210
+ write(data) {
211
+ this.writeHistory.push({ data, timestamp: Date.now() });
212
+ let i = 0;
213
+ while (i < data.length) {
214
+ // Handle ANSI escape codes
215
+ if (data[i] === '\x1b' && data[i + 1] === '[') {
216
+ i = this.handleAnsiCode(data, i);
217
+ continue;
218
+ }
219
+ // Handle control characters
220
+ if (data[i] === '\r') {
221
+ this.cursorX = 0;
222
+ i++;
223
+ continue;
224
+ }
225
+ if (data[i] === '\n') {
226
+ this.cursorY++;
227
+ this.cursorX = 0;
228
+ if (this.cursorY >= this.height) {
229
+ this.expandTo(this.cursorY + 1);
230
+ }
231
+ i++;
232
+ continue;
233
+ }
234
+ // Regular character
235
+ if (this.cursorY >= 0 && this.cursorY < this._height &&
236
+ this.cursorX >= 0 && this.cursorX < this._width) {
237
+ this.grid[this.cursorY][this.cursorX] = {
238
+ char: data[i],
239
+ fgColor: this.currentStyle.fgColor,
240
+ bgColor: this.currentStyle.bgColor,
241
+ bold: this.currentStyle.bold ?? false,
242
+ italic: this.currentStyle.italic ?? false,
243
+ underline: this.currentStyle.underline ?? false,
244
+ };
245
+ this.cursorX++;
246
+ // Auto-wrap if enabled
247
+ if (this.autoWrap && this.cursorX >= this._width) {
248
+ this.cursorX = 0;
249
+ this.cursorY++;
250
+ if (this.cursorY >= this._height) {
251
+ this.expandTo(this.cursorY + 1);
252
+ }
253
+ }
254
+ }
255
+ i++;
256
+ }
257
+ }
258
+ /**
259
+ * Handle ANSI escape codes
260
+ */
261
+ handleAnsiCode(data, start) {
262
+ let i = start + 2; // Skip '\x1b['
263
+ let code = '';
264
+ while (i < data.length) {
265
+ if (data[i] === 'm') {
266
+ // End of escape code
267
+ this.applyAnsiCode(code);
268
+ return i + 1;
269
+ }
270
+ code += data[i];
271
+ i++;
272
+ }
273
+ return data.length;
274
+ }
275
+ /**
276
+ * Apply ANSI escape code to current style
277
+ */
278
+ applyAnsiCode(code) {
279
+ if (!code) {
280
+ // Reset
281
+ this.currentStyle = {};
282
+ return;
283
+ }
284
+ const codes = code.split(';').map(c => parseInt(c, 10));
285
+ for (const c of codes) {
286
+ if (c === 0) {
287
+ this.currentStyle = {};
288
+ }
289
+ else if (c === 1) {
290
+ this.currentStyle.bold = true;
291
+ }
292
+ else if (c === 3) {
293
+ this.currentStyle.italic = true;
294
+ }
295
+ else if (c === 4) {
296
+ this.currentStyle.underline = true;
297
+ }
298
+ else if (c >= 30 && c <= 37) {
299
+ const colors = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white'];
300
+ this.currentStyle.fgColor = colors[c - 30];
301
+ }
302
+ else if (c >= 90 && c <= 97) {
303
+ const colors = ['brightBlack', 'brightRed', 'brightGreen', 'brightYellow',
304
+ 'brightBlue', 'brightMagenta', 'brightCyan', 'brightWhite'];
305
+ this.currentStyle.fgColor = colors[c - 90];
306
+ }
307
+ }
308
+ }
309
+ /**
310
+ * Get the character at a specific position
311
+ */
312
+ getCell(x, y) {
313
+ if (y < 0 || y >= this._height || x < 0 || x >= this._width) {
314
+ return null;
315
+ }
316
+ return this.grid[y][x] || { char: ' ', bold: false, italic: false, underline: false };
317
+ }
318
+ /**
319
+ * Get a line as a string (strips ANSI for plain text, or includes ANSI)
320
+ * Returns only the actual content, trimming trailing spaces
321
+ */
322
+ getLineAt(y, includeAnsi = false) {
323
+ if (y < 0 || y >= this._height) {
324
+ return '';
325
+ }
326
+ const line = this.grid[y] || [];
327
+ let result = '';
328
+ let lastStyle = {};
329
+ // Find the last non-space character to avoid returning trailing spaces
330
+ let lastNonSpace = -1;
331
+ for (let x = this._width - 1; x >= 0; x--) {
332
+ const cell = line[x];
333
+ if (cell && cell.char !== ' ') {
334
+ lastNonSpace = x;
335
+ break;
336
+ }
337
+ }
338
+ // If no content, return empty string
339
+ if (lastNonSpace === -1) {
340
+ return '';
341
+ }
342
+ for (let x = 0; x <= lastNonSpace; x++) {
343
+ const cell = line[x] || { char: ' ', bold: false, italic: false, underline: false };
344
+ if (includeAnsi) {
345
+ // Add ANSI codes when style changes
346
+ const styleChanged = cell.fgColor !== lastStyle.fgColor ||
347
+ cell.bgColor !== lastStyle.bgColor ||
348
+ cell.bold !== lastStyle.bold ||
349
+ cell.italic !== lastStyle.italic ||
350
+ cell.underline !== lastStyle.underline;
351
+ if (styleChanged) {
352
+ // Reset first
353
+ if (lastStyle.fgColor || lastStyle.bgColor || lastStyle.bold ||
354
+ lastStyle.italic || lastStyle.underline) {
355
+ result += '\x1b[0m';
356
+ }
357
+ // Apply new style
358
+ const codes = [];
359
+ if (cell.bold)
360
+ codes.push(1);
361
+ if (cell.italic)
362
+ codes.push(3);
363
+ if (cell.underline)
364
+ codes.push(4);
365
+ if (cell.fgColor) {
366
+ const colorMap = {
367
+ black: 30, red: 31, green: 32, yellow: 33, blue: 34,
368
+ magenta: 35, cyan: 36, white: 37,
369
+ brightBlack: 90, brightRed: 91, brightGreen: 92, brightYellow: 93,
370
+ brightBlue: 94, brightMagenta: 95, brightCyan: 96, brightWhite: 97,
371
+ };
372
+ if (colorMap[cell.fgColor]) {
373
+ codes.push(colorMap[cell.fgColor]);
374
+ }
375
+ }
376
+ if (codes.length > 0) {
377
+ result += `\x1b[${codes.join(';')}m`;
378
+ }
379
+ lastStyle = { ...cell };
380
+ }
381
+ }
382
+ result += cell.char;
383
+ }
384
+ if (includeAnsi && (lastStyle.fgColor || lastStyle.bgColor || lastStyle.bold)) {
385
+ result += '\x1b[0m';
386
+ }
387
+ return result;
388
+ }
389
+ /**
390
+ * Get all lines as an array
391
+ */
392
+ getAllLines(includeAnsi = false) {
393
+ const result = [];
394
+ for (let y = 0; y < this._height; y++) {
395
+ result.push(this.getLineAt(y, includeAnsi));
396
+ }
397
+ return result;
398
+ }
399
+ /**
400
+ * Get a snapshot of the terminal as a string
401
+ */
402
+ snapshot(includeAnsi = false) {
403
+ return this.getAllLines(includeAnsi).join('\n');
404
+ }
405
+ /**
406
+ * Clear the terminal
407
+ */
408
+ clear() {
409
+ this.grid = Array(this._height).fill(null).map(() => Array(this._width).fill(null).map(() => ({ char: ' ', bold: false, italic: false, underline: false })));
410
+ this.cursorX = 0;
411
+ this.cursorY = 0;
412
+ this.currentStyle = {};
413
+ this.setLineCalls = [];
414
+ }
415
+ /**
416
+ * Get write history (for debugging)
417
+ */
418
+ getWriteHistory() {
419
+ return [...this.writeHistory];
420
+ }
421
+ /**
422
+ * Get setLine call history
423
+ */
424
+ getSetLineCalls() {
425
+ return [...this.setLineCalls];
426
+ }
427
+ /**
428
+ * Create a NodeJS.WriteStream-like object that writes to this simulator
429
+ * Useful for passing to native TerminalRegion
430
+ *
431
+ * This stream emits 'resize' events that native TerminalRegion listens to
432
+ */
433
+ createWriteStream() {
434
+ const self = this;
435
+ // Create an EventEmitter for the stream
436
+ const streamEmitter = new EventEmitter();
437
+ // Forward resize events from the virtual terminal to the stream
438
+ this.on('resize', () => {
439
+ streamEmitter.emit('resize');
440
+ });
441
+ const stream = {
442
+ write: (chunk, encoding, callback) => {
443
+ const data = typeof chunk === 'string' ? chunk : chunk.toString();
444
+ self.write(data);
445
+ if (callback) {
446
+ callback(null);
447
+ }
448
+ return true;
449
+ },
450
+ isTTY: true,
451
+ get columns() { return self._width; },
452
+ get rows() { return self._height; },
453
+ on: (event, handler) => {
454
+ streamEmitter.on(event, handler);
455
+ return stream;
456
+ },
457
+ off: (event, handler) => {
458
+ streamEmitter.off(event, handler);
459
+ return stream;
460
+ },
461
+ removeListener: (event, handler) => {
462
+ streamEmitter.removeListener(event, handler);
463
+ return stream;
464
+ },
465
+ emit: (event, ...args) => {
466
+ return streamEmitter.emit(event, ...args);
467
+ },
468
+ addListener: (event, handler) => {
469
+ streamEmitter.addListener(event, handler);
470
+ return stream;
471
+ },
472
+ };
473
+ // Store reference so we can emit resize events
474
+ this.writeStream = stream;
475
+ return stream;
476
+ }
477
+ /**
478
+ * Simulate a resize event
479
+ * This is the key feature for testing resize behavior!
480
+ *
481
+ * This will:
482
+ * 1. Resize the terminal grid and reflow content
483
+ * 2. Update the writeStream's columns/rows (via getters)
484
+ * 3. Emit 'resize' events that native TerminalRegion listens to
485
+ */
486
+ simulateResize(newWidth, newHeight) {
487
+ this.resize(newWidth, newHeight);
488
+ // The writeStream's columns/rows are getters, so they'll automatically update
489
+ // And resize events are emitted by resize() method
490
+ }
491
+ }
492
+ //# sourceMappingURL=virtual-terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-terminal.js","sourceRoot":"","sources":["../../src/ts/test-helpers/virtual-terminal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=virtual-terminal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"virtual-terminal.test.d.ts","sourceRoot":"","sources":["../../src/ts/test-helpers/virtual-terminal.test.ts"],"names":[],"mappings":""}