@kingkoo1985/ink 6.6.6

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 (225) hide show
  1. package/build/colorize.d.ts +4 -0
  2. package/build/colorize.js +59 -0
  3. package/build/colorize.js.map +1 -0
  4. package/build/components/AccessibilityContext.d.ts +3 -0
  5. package/build/components/AccessibilityContext.js +5 -0
  6. package/build/components/AccessibilityContext.js.map +1 -0
  7. package/build/components/App.d.ts +68 -0
  8. package/build/components/App.js +290 -0
  9. package/build/components/App.js.map +1 -0
  10. package/build/components/AppContext.d.ts +52 -0
  11. package/build/components/AppContext.js +16 -0
  12. package/build/components/AppContext.js.map +1 -0
  13. package/build/components/BackgroundContext.d.ts +4 -0
  14. package/build/components/BackgroundContext.js +3 -0
  15. package/build/components/BackgroundContext.js.map +1 -0
  16. package/build/components/Box.d.ts +171 -0
  17. package/build/components/Box.js +40 -0
  18. package/build/components/Box.js.map +1 -0
  19. package/build/components/ErrorOverview.d.ts +6 -0
  20. package/build/components/ErrorOverview.js +84 -0
  21. package/build/components/ErrorOverview.js.map +1 -0
  22. package/build/components/FocusContext.d.ts +16 -0
  23. package/build/components/FocusContext.js +16 -0
  24. package/build/components/FocusContext.js.map +1 -0
  25. package/build/components/Newline.d.ts +13 -0
  26. package/build/components/Newline.js +8 -0
  27. package/build/components/Newline.js.map +1 -0
  28. package/build/components/Spacer.d.ts +7 -0
  29. package/build/components/Spacer.js +11 -0
  30. package/build/components/Spacer.js.map +1 -0
  31. package/build/components/Static.d.ts +24 -0
  32. package/build/components/Static.js +29 -0
  33. package/build/components/Static.js.map +1 -0
  34. package/build/components/StaticRender.d.ts +8 -0
  35. package/build/components/StaticRender.js +19 -0
  36. package/build/components/StaticRender.js.map +1 -0
  37. package/build/components/StderrContext.d.ts +15 -0
  38. package/build/components/StderrContext.js +12 -0
  39. package/build/components/StderrContext.js.map +1 -0
  40. package/build/components/StdinContext.d.ts +22 -0
  41. package/build/components/StdinContext.js +16 -0
  42. package/build/components/StdinContext.js.map +1 -0
  43. package/build/components/StdoutContext.d.ts +15 -0
  44. package/build/components/StdoutContext.js +12 -0
  45. package/build/components/StdoutContext.js.map +1 -0
  46. package/build/components/Text.d.ts +63 -0
  47. package/build/components/Text.js +50 -0
  48. package/build/components/Text.js.map +1 -0
  49. package/build/components/Transform.d.ts +16 -0
  50. package/build/components/Transform.js +15 -0
  51. package/build/components/Transform.js.map +1 -0
  52. package/build/data-limited-lru-map.d.ts +20 -0
  53. package/build/data-limited-lru-map.js +65 -0
  54. package/build/data-limited-lru-map.js.map +1 -0
  55. package/build/debug-log.d.ts +2 -0
  56. package/build/debug-log.js +44 -0
  57. package/build/debug-log.js.map +1 -0
  58. package/build/devtools-window-polyfill.d.ts +1 -0
  59. package/build/devtools-window-polyfill.js +65 -0
  60. package/build/devtools-window-polyfill.js.map +1 -0
  61. package/build/devtools.d.ts +1 -0
  62. package/build/devtools.js +8 -0
  63. package/build/devtools.js.map +1 -0
  64. package/build/dom.d.ts +114 -0
  65. package/build/dom.js +169 -0
  66. package/build/dom.js.map +1 -0
  67. package/build/get-max-width.d.ts +3 -0
  68. package/build/get-max-width.js +10 -0
  69. package/build/get-max-width.js.map +1 -0
  70. package/build/hooks/use-app.d.ts +5 -0
  71. package/build/hooks/use-app.js +8 -0
  72. package/build/hooks/use-app.js.map +1 -0
  73. package/build/hooks/use-focus-manager.d.ts +28 -0
  74. package/build/hooks/use-focus-manager.js +17 -0
  75. package/build/hooks/use-focus-manager.js.map +1 -0
  76. package/build/hooks/use-focus.d.ts +29 -0
  77. package/build/hooks/use-focus.js +42 -0
  78. package/build/hooks/use-focus.js.map +1 -0
  79. package/build/hooks/use-input.d.ts +93 -0
  80. package/build/hooks/use-input.js +92 -0
  81. package/build/hooks/use-input.js.map +1 -0
  82. package/build/hooks/use-is-screen-reader-enabled.d.ts +5 -0
  83. package/build/hooks/use-is-screen-reader-enabled.js +11 -0
  84. package/build/hooks/use-is-screen-reader-enabled.js.map +1 -0
  85. package/build/hooks/use-stderr.d.ts +5 -0
  86. package/build/hooks/use-stderr.js +8 -0
  87. package/build/hooks/use-stderr.js.map +1 -0
  88. package/build/hooks/use-stdin.d.ts +5 -0
  89. package/build/hooks/use-stdin.js +8 -0
  90. package/build/hooks/use-stdin.js.map +1 -0
  91. package/build/hooks/use-stdout.d.ts +5 -0
  92. package/build/hooks/use-stdout.js +8 -0
  93. package/build/hooks/use-stdout.js.map +1 -0
  94. package/build/index.d.ts +38 -0
  95. package/build/index.js +27 -0
  96. package/build/index.js.map +1 -0
  97. package/build/ink.d.ts +110 -0
  98. package/build/ink.js +576 -0
  99. package/build/ink.js.map +1 -0
  100. package/build/instances.d.ts +3 -0
  101. package/build/instances.js +8 -0
  102. package/build/instances.js.map +1 -0
  103. package/build/layout.d.ts +18 -0
  104. package/build/layout.js +54 -0
  105. package/build/layout.js.map +1 -0
  106. package/build/log-update.d.ts +28 -0
  107. package/build/log-update.js +529 -0
  108. package/build/log-update.js.map +1 -0
  109. package/build/measure-element.d.ts +119 -0
  110. package/build/measure-element.js +825 -0
  111. package/build/measure-element.js.map +1 -0
  112. package/build/measure-text.d.ts +50 -0
  113. package/build/measure-text.js +237 -0
  114. package/build/measure-text.js.map +1 -0
  115. package/build/output.d.ts +242 -0
  116. package/build/output.js +607 -0
  117. package/build/output.js.map +1 -0
  118. package/build/parse-keypress.d.ts +14 -0
  119. package/build/parse-keypress.js +225 -0
  120. package/build/parse-keypress.js.map +1 -0
  121. package/build/reconciler.d.ts +4 -0
  122. package/build/reconciler.js +326 -0
  123. package/build/reconciler.js.map +1 -0
  124. package/build/render-background.d.ts +4 -0
  125. package/build/render-background.js +37 -0
  126. package/build/render-background.js.map +1 -0
  127. package/build/render-border.d.ts +4 -0
  128. package/build/render-border.js +81 -0
  129. package/build/render-border.js.map +1 -0
  130. package/build/render-cached.d.ts +18 -0
  131. package/build/render-cached.js +66 -0
  132. package/build/render-cached.js.map +1 -0
  133. package/build/render-container.d.ts +27 -0
  134. package/build/render-container.js +169 -0
  135. package/build/render-container.js.map +1 -0
  136. package/build/render-node-to-output.d.ts +32 -0
  137. package/build/render-node-to-output.js +177 -0
  138. package/build/render-node-to-output.js.map +1 -0
  139. package/build/render-screen-reader.d.ts +5 -0
  140. package/build/render-screen-reader.js +54 -0
  141. package/build/render-screen-reader.js.map +1 -0
  142. package/build/render-scrollbar.d.ts +23 -0
  143. package/build/render-scrollbar.js +70 -0
  144. package/build/render-scrollbar.js.map +1 -0
  145. package/build/render-sticky.d.ts +53 -0
  146. package/build/render-sticky.js +317 -0
  147. package/build/render-sticky.js.map +1 -0
  148. package/build/render-text-node.d.ts +20 -0
  149. package/build/render-text-node.js +155 -0
  150. package/build/render-text-node.js.map +1 -0
  151. package/build/render.d.ts +165 -0
  152. package/build/render.js +60 -0
  153. package/build/render.js.map +1 -0
  154. package/build/renderer.d.ts +24 -0
  155. package/build/renderer.js +292 -0
  156. package/build/renderer.js.map +1 -0
  157. package/build/replay.d.ts +59 -0
  158. package/build/replay.js +128 -0
  159. package/build/replay.js.map +1 -0
  160. package/build/resize-observer.d.ts +24 -0
  161. package/build/resize-observer.js +102 -0
  162. package/build/resize-observer.js.map +1 -0
  163. package/build/scroll.d.ts +11 -0
  164. package/build/scroll.js +123 -0
  165. package/build/scroll.js.map +1 -0
  166. package/build/selection.d.ts +52 -0
  167. package/build/selection.js +359 -0
  168. package/build/selection.js.map +1 -0
  169. package/build/serialization.d.ts +25 -0
  170. package/build/serialization.js +224 -0
  171. package/build/serialization.js.map +1 -0
  172. package/build/squash-text-nodes.d.ts +16 -0
  173. package/build/squash-text-nodes.js +58 -0
  174. package/build/squash-text-nodes.js.map +1 -0
  175. package/build/styled-line.d.ts +58 -0
  176. package/build/styled-line.js +629 -0
  177. package/build/styled-line.js.map +1 -0
  178. package/build/styles.d.ts +286 -0
  179. package/build/styles.js +257 -0
  180. package/build/styles.js.map +1 -0
  181. package/build/terminal-buffer.d.ts +57 -0
  182. package/build/terminal-buffer.js +507 -0
  183. package/build/terminal-buffer.js.map +1 -0
  184. package/build/text-wrap.d.ts +12 -0
  185. package/build/text-wrap.js +154 -0
  186. package/build/text-wrap.js.map +1 -0
  187. package/build/tokenize.d.ts +47 -0
  188. package/build/tokenize.js +419 -0
  189. package/build/tokenize.js.map +1 -0
  190. package/build/vertical-gap.d.ts +17 -0
  191. package/build/vertical-gap.js +20 -0
  192. package/build/vertical-gap.js.map +1 -0
  193. package/build/worker/animation-controller.d.ts +72 -0
  194. package/build/worker/animation-controller.js +128 -0
  195. package/build/worker/animation-controller.js.map +1 -0
  196. package/build/worker/ansi-utils.d.ts +16 -0
  197. package/build/worker/ansi-utils.js +40 -0
  198. package/build/worker/ansi-utils.js.map +1 -0
  199. package/build/worker/canvas.d.ts +49 -0
  200. package/build/worker/canvas.js +90 -0
  201. package/build/worker/canvas.js.map +1 -0
  202. package/build/worker/compositor.d.ts +33 -0
  203. package/build/worker/compositor.js +308 -0
  204. package/build/worker/compositor.js.map +1 -0
  205. package/build/worker/platform.d.ts +15 -0
  206. package/build/worker/platform.js +19 -0
  207. package/build/worker/platform.js.map +1 -0
  208. package/build/worker/render-worker.d.ts +112 -0
  209. package/build/worker/render-worker.js +944 -0
  210. package/build/worker/render-worker.js.map +1 -0
  211. package/build/worker/scene-manager.d.ts +26 -0
  212. package/build/worker/scene-manager.js +109 -0
  213. package/build/worker/scene-manager.js.map +1 -0
  214. package/build/worker/scroll-optimizer.d.ts +32 -0
  215. package/build/worker/scroll-optimizer.js +110 -0
  216. package/build/worker/scroll-optimizer.js.map +1 -0
  217. package/build/worker/terminal-writer.d.ts +116 -0
  218. package/build/worker/terminal-writer.js +708 -0
  219. package/build/worker/terminal-writer.js.map +1 -0
  220. package/build/worker/worker-entry.d.ts +6 -0
  221. package/build/worker/worker-entry.js +130 -0
  222. package/build/worker/worker-entry.js.map +1 -0
  223. package/license +9 -0
  224. package/package.json +208 -0
  225. package/readme.md +2353 -0
@@ -0,0 +1,507 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import process from 'node:process';
7
+ import fs from 'node:fs';
8
+ import { fileURLToPath } from 'node:url';
9
+ import { fork } from 'node:child_process';
10
+ import { StyledLine } from './styled-line.js';
11
+ import { Serializer } from './serialization.js';
12
+ import { TerminalBufferWorker } from './worker/render-worker.js';
13
+ import { linesEqual } from './worker/terminal-writer.js';
14
+ import { flattenRegion, regionLayoutProperties, copyRegionProperty, treesEqual, } from './output.js';
15
+ const debugEdits = false;
16
+ export default class TerminalBuffer {
17
+ get lines() {
18
+ if (this._cachedLines) {
19
+ return this._cachedLines;
20
+ }
21
+ if (this.lastRootRegion) {
22
+ this._cachedLines = flattenRegion(this.lastRootRegion, {
23
+ skipScrollbars: true,
24
+ skipStickyHeaders: true,
25
+ });
26
+ return this._cachedLines;
27
+ }
28
+ return [];
29
+ }
30
+ _cachedLines;
31
+ lastRootRegion;
32
+ serializer = new Serializer();
33
+ worker;
34
+ workerInstance;
35
+ resizeListener;
36
+ stdout;
37
+ // Track previous state of all regions by ID
38
+ lastRegions = new Map();
39
+ lastCursorPosition;
40
+ lastTree;
41
+ lastOptions;
42
+ optionsChanged = false;
43
+ columns;
44
+ rows;
45
+ constructor(columns, rows, options) {
46
+ this.lastOptions = {
47
+ isAlternateBufferEnabled: options?.isAlternateBufferEnabled,
48
+ stickyHeadersInBackbuffer: options?.stickyHeadersInBackbuffer,
49
+ animatedScroll: options?.animatedScroll,
50
+ animationInterval: options?.animationInterval,
51
+ backbufferUpdateDelay: options?.backbufferUpdateDelay,
52
+ maxScrollbackLength: options?.maxScrollbackLength,
53
+ forceScrollToBottomOnBackbufferRefresh: options?.forceScrollToBottomOnBackbufferRefresh,
54
+ };
55
+ this.columns = columns;
56
+ this.rows = rows;
57
+ this.stdout = options?.stdout ?? process.stdout;
58
+ const createWorkerInstance = () => {
59
+ const instance = new TerminalBufferWorker(columns, rows, {
60
+ debugRainbowEnabled: options?.debugRainbowEnabled,
61
+ stdout: this.stdout,
62
+ isAlternateBufferEnabled: options?.isAlternateBufferEnabled,
63
+ stickyHeadersInBackbuffer: options?.stickyHeadersInBackbuffer,
64
+ animatedScroll: options?.animatedScroll,
65
+ animationInterval: options?.animationInterval,
66
+ backbufferUpdateDelay: options?.backbufferUpdateDelay,
67
+ maxScrollbackLength: options?.maxScrollbackLength,
68
+ forceScrollToBottomOnBackbufferRefresh: options?.forceScrollToBottomOnBackbufferRefresh,
69
+ });
70
+ void instance.render();
71
+ return instance;
72
+ };
73
+ let renderInProcess = options?.renderInProcess ?? false;
74
+ let workerUrl;
75
+ if (!renderInProcess) {
76
+ // eslint-disable-next-line unicorn/relative-url-style
77
+ workerUrl = new URL('./worker/worker-entry.js', import.meta.url);
78
+ let workerPath = workerUrl.protocol === 'file:' ? fileURLToPath(workerUrl) : null;
79
+ // Fallback for ts-node testing environments
80
+ if (workerPath &&
81
+ !fs.existsSync(workerPath) &&
82
+ workerPath.endsWith('.js')) {
83
+ const tsPath = workerPath.replace(/\.js$/, '.ts');
84
+ if (fs.existsSync(tsPath)) {
85
+ workerPath = tsPath;
86
+ // eslint-disable-next-line unicorn/relative-url-style
87
+ workerUrl = new URL('./worker/worker-entry.ts', import.meta.url);
88
+ }
89
+ }
90
+ if (workerPath && !fs.existsSync(workerPath)) {
91
+ console.warn(`Unable to launch render process at ${workerPath}`);
92
+ // Fallback to in-process rendering if the worker file was not bundled.
93
+ renderInProcess = true;
94
+ }
95
+ }
96
+ if (renderInProcess) {
97
+ this.workerInstance = createWorkerInstance();
98
+ }
99
+ else {
100
+ this.worker = fork(workerUrl, {
101
+ env: {
102
+ ...process.env,
103
+ INK_WORKER: 'true',
104
+ },
105
+ });
106
+ this.worker.on('error', error => {
107
+ console.error('Render worker error:', error);
108
+ });
109
+ this.sendToWorker({
110
+ type: 'init',
111
+ columns,
112
+ rows,
113
+ debugRainbowEnabled: options?.debugRainbowEnabled,
114
+ isAlternateBufferEnabled: options?.isAlternateBufferEnabled,
115
+ stickyHeadersInBackbuffer: options?.stickyHeadersInBackbuffer,
116
+ animatedScroll: options?.animatedScroll,
117
+ animationInterval: options?.animationInterval,
118
+ backbufferUpdateDelay: options?.backbufferUpdateDelay,
119
+ maxScrollbackLength: options?.maxScrollbackLength,
120
+ forceScrollToBottomOnBackbufferRefresh: options?.forceScrollToBottomOnBackbufferRefresh,
121
+ cacheToStyledCharacters: options?.cacheToStyledCharacters,
122
+ }, 'Failed to send init message to worker:');
123
+ }
124
+ this.resizeListener = () => {
125
+ if (this.stdout.columns && this.stdout.rows) {
126
+ this.resize(this.stdout.columns, this.stdout.rows);
127
+ }
128
+ };
129
+ this.stdout.on('resize', this.resizeListener);
130
+ }
131
+ resize(columns, rows) {
132
+ if (this.columns === columns && this.rows === rows) {
133
+ return;
134
+ }
135
+ this.columns = columns;
136
+ this.rows = rows;
137
+ if (this.workerInstance) {
138
+ this.workerInstance.resize(columns, rows);
139
+ }
140
+ else {
141
+ this.sendToWorker({
142
+ type: 'resize',
143
+ columns,
144
+ rows,
145
+ }, 'Failed to send resize message to worker:');
146
+ }
147
+ }
148
+ updateOptions(options) {
149
+ const keys = [
150
+ 'isAlternateBufferEnabled',
151
+ 'stickyHeadersInBackbuffer',
152
+ 'animatedScroll',
153
+ 'animationInterval',
154
+ 'backbufferUpdateDelay',
155
+ 'maxScrollbackLength',
156
+ 'forceScrollToBottomOnBackbufferRefresh',
157
+ ];
158
+ for (const key of keys) {
159
+ if (options[key] !== this.lastOptions?.[key]) {
160
+ this.optionsChanged = true;
161
+ break;
162
+ }
163
+ }
164
+ this.lastOptions = { ...options };
165
+ if (this.workerInstance) {
166
+ this.workerInstance.updateOptions(options);
167
+ }
168
+ else {
169
+ this.sendToWorker({
170
+ type: 'updateOptions',
171
+ options,
172
+ }, 'Failed to send updateOptions message to worker:');
173
+ }
174
+ }
175
+ startRecording(filename) {
176
+ if (this.workerInstance) {
177
+ this.workerInstance.startRecording(filename);
178
+ }
179
+ else {
180
+ this.sendToWorker({
181
+ type: 'startRecording',
182
+ filename,
183
+ }, 'Failed to send startRecording message to worker:');
184
+ }
185
+ }
186
+ stopRecording() {
187
+ if (this.workerInstance) {
188
+ this.workerInstance.stopRecording();
189
+ }
190
+ else {
191
+ this.sendToWorker({
192
+ type: 'stopRecording',
193
+ }, 'Failed to send stopRecording message to worker:');
194
+ }
195
+ }
196
+ dumpCurrentFrame(filename) {
197
+ if (this.workerInstance) {
198
+ this.workerInstance.dumpCurrentFrame(filename);
199
+ }
200
+ else {
201
+ this.sendToWorker({
202
+ type: 'dumpCurrentFrame',
203
+ filename,
204
+ }, 'Failed to send dumpCurrentFrame message to worker:');
205
+ }
206
+ }
207
+ update(_start, _end, root, cursorPosition) {
208
+ this.lastRootRegion = root;
209
+ this._cachedLines = undefined;
210
+ const currentRegionsMap = new Map();
211
+ const nodeIdToElement = new Map();
212
+ const updates = [];
213
+ // Traverse tree to collect all current regions and build structure
214
+ const buildTree = (r) => {
215
+ currentRegionsMap.set(r.id, r);
216
+ // Populate nodeIdToElement map
217
+ if (r.nodeId !== undefined && r.node !== undefined) {
218
+ nodeIdToElement.set(r.nodeId, r.node);
219
+ }
220
+ // Diff this region
221
+ const update = this.diffRegion(r, nodeIdToElement);
222
+ if (update) {
223
+ updates.push(update);
224
+ }
225
+ return {
226
+ id: r.id,
227
+ children: r.children.map(child => buildTree(child)),
228
+ };
229
+ };
230
+ const tree = buildTree(root);
231
+ const treeChanged = !this.lastTree || !treesEqual(this.lastTree, tree);
232
+ this.lastTree = tree;
233
+ // Update local state to current frame
234
+ this.lastRegions = currentRegionsMap;
235
+ const cursorChanged = cursorPosition !== this.lastCursorPosition &&
236
+ (!cursorPosition ||
237
+ !this.lastCursorPosition ||
238
+ cursorPosition.row !== this.lastCursorPosition.row ||
239
+ cursorPosition.col !== this.lastCursorPosition.col);
240
+ this.lastCursorPosition = cursorPosition;
241
+ if (updates.length > 0 ||
242
+ cursorChanged ||
243
+ this.optionsChanged ||
244
+ treeChanged) {
245
+ this.optionsChanged = false;
246
+ this.sendEdits(tree, updates, cursorPosition);
247
+ return true;
248
+ }
249
+ return false;
250
+ }
251
+ async render() {
252
+ if (this.workerInstance) {
253
+ await this.workerInstance.render();
254
+ }
255
+ else if (this.worker?.connected) {
256
+ try {
257
+ this.worker.send({
258
+ type: 'render',
259
+ });
260
+ }
261
+ catch (error) {
262
+ console.error('Failed to send render message to worker:', error);
263
+ }
264
+ }
265
+ }
266
+ async fullRender() {
267
+ if (this.workerInstance) {
268
+ await this.workerInstance.fullRender();
269
+ }
270
+ else if (this.worker?.connected) {
271
+ try {
272
+ this.worker.send({
273
+ type: 'fullRender',
274
+ });
275
+ }
276
+ catch (error) {
277
+ console.error('Failed to send fullRender message to worker:', error);
278
+ }
279
+ }
280
+ }
281
+ done() {
282
+ if (this.workerInstance) {
283
+ this.workerInstance.done();
284
+ }
285
+ else if (this.worker?.connected) {
286
+ try {
287
+ this.worker.send({
288
+ type: 'done',
289
+ });
290
+ }
291
+ catch {
292
+ // Silently fail on exit errors as the worker might already be gone
293
+ }
294
+ }
295
+ }
296
+ async getLinesUpdated() {
297
+ if (this.workerInstance) {
298
+ return this.workerInstance.getLinesUpdated();
299
+ }
300
+ if (!this.worker?.connected) {
301
+ return 0;
302
+ }
303
+ return new Promise(resolve => {
304
+ const handler = (message) => {
305
+ if (message.type === 'linesUpdated') {
306
+ this.worker?.off('message', handler);
307
+ resolve(message.count);
308
+ }
309
+ };
310
+ this.worker?.on('message', handler);
311
+ try {
312
+ this.worker?.send({ type: 'getLinesUpdated' });
313
+ }
314
+ catch (error) {
315
+ this.worker?.off('message', handler);
316
+ console.error('Failed to send getLinesUpdated message to worker:', error);
317
+ resolve(0);
318
+ }
319
+ });
320
+ }
321
+ resetLinesUpdated() {
322
+ if (this.workerInstance) {
323
+ this.workerInstance.resetLinesUpdated();
324
+ }
325
+ else if (this.worker?.connected) {
326
+ try {
327
+ this.worker.send({ type: 'resetLinesUpdated' });
328
+ }
329
+ catch (error) {
330
+ console.error('Failed to send resetLinesUpdated message to worker:', error);
331
+ }
332
+ }
333
+ }
334
+ destroy() {
335
+ if (this.worker) {
336
+ this.worker.kill();
337
+ }
338
+ if (this.resizeListener) {
339
+ this.stdout.off('resize', this.resizeListener);
340
+ }
341
+ }
342
+ sendToWorker(message, errorMessage) {
343
+ if (this.worker?.connected) {
344
+ try {
345
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
346
+ this.worker.send(message);
347
+ }
348
+ catch (error) {
349
+ console.error(errorMessage, error);
350
+ }
351
+ }
352
+ }
353
+ diffRegion(current, nodeIdToElement) {
354
+ const last = this.lastRegions.get(current.id);
355
+ const update = { id: current.id };
356
+ let hasChanges = false;
357
+ if (!last) {
358
+ // New region, send everything
359
+ hasChanges = true;
360
+ for (const key of regionLayoutProperties) {
361
+ copyRegionProperty(update, current, key);
362
+ }
363
+ update.stickyHeaders = current.stickyHeaders.map(h => ({
364
+ ...h,
365
+ node: undefined,
366
+ lines: this.serializer.serialize(h.lines),
367
+ stuckLines: h.stuckLines
368
+ ? this.serializer.serialize(h.stuckLines)
369
+ : undefined,
370
+ styledOutput: this.serializer.serialize(h.styledOutput),
371
+ }));
372
+ // Send all lines
373
+ const serialized = this.serializer.serialize(current.lines);
374
+ update.lines = {
375
+ updates: [
376
+ {
377
+ start: 0,
378
+ end: current.lines.length,
379
+ data: serialized,
380
+ },
381
+ ],
382
+ totalLength: current.lines.length,
383
+ };
384
+ return update;
385
+ }
386
+ // Check properties
387
+ for (const key of regionLayoutProperties) {
388
+ if (current[key] !== last[key]) {
389
+ copyRegionProperty(update, current, key);
390
+ hasChanges = true;
391
+ }
392
+ }
393
+ // Deep compare sticky headers? For now assuming reference change or simple length change is enough,
394
+ // or we can rely on the fact they are rebuilt every frame.
395
+ // Let's just resend if length differs or assume they might change.
396
+ // To be safe and simple: always send sticky headers if they exist or existed.
397
+ if (current.stickyHeaders !== last.stickyHeaders ||
398
+ current.stickyHeaders.length > 0 ||
399
+ last.stickyHeaders.length > 0) {
400
+ update.stickyHeaders = current.stickyHeaders.map(h => ({
401
+ ...h,
402
+ node: undefined,
403
+ lines: this.serializer.serialize(h.lines),
404
+ stuckLines: h.stuckLines
405
+ ? this.serializer.serialize(h.stuckLines)
406
+ : undefined,
407
+ styledOutput: this.serializer.serialize(h.styledOutput),
408
+ }));
409
+ hasChanges = true;
410
+ }
411
+ // Diff lines
412
+ const lineUpdates = this.diffLines(last.lines, current.lines);
413
+ if (lineUpdates.length > 0 || last.lines.length !== current.lines.length) {
414
+ hasChanges = true;
415
+ update.lines = {
416
+ updates: lineUpdates,
417
+ totalLength: current.lines.length,
418
+ };
419
+ if (current.stableScrollback && current.nodeId !== undefined) {
420
+ const element = nodeIdToElement.get(current.nodeId);
421
+ if (element) {
422
+ const scrollTop = current.scrollTop ?? 0;
423
+ for (const chunk of lineUpdates) {
424
+ if (chunk.start < scrollTop) {
425
+ element.internalIsScrollbackDirty = true;
426
+ break;
427
+ }
428
+ }
429
+ // Also check if lines were removed from the end of the content but still within the scrollback
430
+ if (!element.internalIsScrollbackDirty &&
431
+ current.lines.length < last.lines.length &&
432
+ current.lines.length < scrollTop) {
433
+ element.internalIsScrollbackDirty = true;
434
+ }
435
+ }
436
+ }
437
+ }
438
+ return hasChanges ? update : undefined;
439
+ }
440
+ diffLines(oldLines, newLines) {
441
+ if (oldLines === newLines) {
442
+ return [];
443
+ }
444
+ const updates = [];
445
+ const limit = Math.max(oldLines.length, newLines.length);
446
+ let chunkStart = -1;
447
+ let chunkLines = [];
448
+ let chunkSource = [];
449
+ for (let i = 0; i < limit; i++) {
450
+ const newLine = newLines[i];
451
+ const oldLine = oldLines[i];
452
+ const areEqual = linesEqual(oldLine, newLine);
453
+ if (areEqual) {
454
+ if (chunkStart !== -1) {
455
+ updates.push({
456
+ start: chunkStart,
457
+ end: chunkStart + chunkLines.length,
458
+ data: this.serializer.serialize(chunkLines),
459
+ source: debugEdits
460
+ ? this.serializer.serialize(chunkSource)
461
+ : undefined,
462
+ });
463
+ chunkStart = -1;
464
+ chunkLines = [];
465
+ chunkSource = [];
466
+ }
467
+ }
468
+ else {
469
+ if (chunkStart === -1) {
470
+ chunkStart = i;
471
+ }
472
+ chunkLines.push(newLine ?? new StyledLine());
473
+ if (debugEdits) {
474
+ chunkSource.push(oldLine ?? new StyledLine());
475
+ }
476
+ }
477
+ }
478
+ if (chunkStart !== -1) {
479
+ updates.push({
480
+ start: chunkStart,
481
+ end: chunkStart + chunkLines.length,
482
+ data: this.serializer.serialize(chunkLines),
483
+ source: debugEdits ? this.serializer.serialize(chunkSource) : undefined,
484
+ });
485
+ }
486
+ return updates;
487
+ }
488
+ sendEdits(tree, updates, cursorPosition) {
489
+ if (this.workerInstance) {
490
+ this.workerInstance.update(tree, updates, cursorPosition);
491
+ }
492
+ else if (this.worker?.connected) {
493
+ try {
494
+ this.worker.send({
495
+ type: 'edits',
496
+ tree,
497
+ updates,
498
+ cursorPosition,
499
+ });
500
+ }
501
+ catch (error) {
502
+ console.error('Failed to send edits to worker:', error);
503
+ }
504
+ }
505
+ }
506
+ }
507
+ //# sourceMappingURL=terminal-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-buffer.js","sourceRoot":"","sources":["../src/terminal-buffer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { StyledLine } from './styled-line.js';
7
+ export declare const sliceStyledChars: (line: StyledLine, begin: number, end?: number) => StyledLine;
8
+ export declare const truncateStyledChars: (line: StyledLine, columns: number, options?: {
9
+ position?: "start" | "middle" | "end";
10
+ }) => StyledLine;
11
+ export declare const wrapStyledChars: (line: StyledLine, columns: number) => StyledLine[];
12
+ export declare const wrapOrTruncateStyledChars: (line: StyledLine, maxWidth: number, textWrap?: string) => StyledLine[];