@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
package/build/ink.js ADDED
@@ -0,0 +1,576 @@
1
+ import process from 'node:process';
2
+ import React from 'react';
3
+ import { throttle } from 'es-toolkit/compat';
4
+ import ansiEscapes from 'ansi-escapes';
5
+ import isInCi from 'is-in-ci';
6
+ import autoBind from 'auto-bind';
7
+ import signalExit from 'signal-exit';
8
+ import patchConsole from 'patch-console';
9
+ import { LegacyRoot } from 'react-reconciler/constants.js';
10
+ import Yoga from 'yoga-layout';
11
+ import wrapAnsi from 'wrap-ansi';
12
+ import reconciler from './reconciler.js';
13
+ import render from './renderer.js';
14
+ import * as dom from './dom.js';
15
+ import logUpdate, { positionImeCursor } from './log-update.js';
16
+ import instances from './instances.js';
17
+ import App from './components/App.js';
18
+ import { accessibilityContext as AccessibilityContext } from './components/AccessibilityContext.js';
19
+ import { calculateScroll } from './scroll.js';
20
+ import { measureAndExtractObservers, } from './resize-observer.js'; // Removed unused imports
21
+ import { Selection } from './selection.js';
22
+ import TerminalBuffer from './terminal-buffer.js';
23
+ import { setEnableToStyledCharactersCache, clearToStyledCharactersCache, } from './measure-text.js';
24
+ const noop = () => { };
25
+ const rainbowColors = [
26
+ 'red',
27
+ 'green',
28
+ 'yellow',
29
+ 'blue',
30
+ 'magenta',
31
+ 'cyan',
32
+ 'white',
33
+ 'blackBright',
34
+ 'redBright',
35
+ 'greenBright',
36
+ 'yellowBright',
37
+ 'blueBright',
38
+ 'magentaBright',
39
+ 'cyanBright',
40
+ 'whiteBright',
41
+ ];
42
+ export default class Ink {
43
+ rootNode;
44
+ options;
45
+ log;
46
+ throttledLog;
47
+ isScreenReaderEnabled;
48
+ selection;
49
+ terminalBuffer;
50
+ optionsState;
51
+ // Ignore last render after unmounting a tree to prevent empty output before exit
52
+ isUnmounted;
53
+ lastOutput;
54
+ lastOutputHeight;
55
+ lastCursorPosition;
56
+ container;
57
+ node;
58
+ // This variable is used only in debug mode to store full static output
59
+ // so that it's rerendered every time, not just new static parts, like in non-debug mode
60
+ fullStaticOutput;
61
+ exitPromise;
62
+ restoreConsole;
63
+ unsubscribeResize;
64
+ unsubscribeSelection;
65
+ frameIndex = 0;
66
+ isTerminalResized = false;
67
+ constructor(options) {
68
+ autoBind(this);
69
+ this.options = options;
70
+ if (options.cacheToStyledCharacters === false) {
71
+ setEnableToStyledCharactersCache(false);
72
+ }
73
+ else if (options.cacheToStyledCharacters === true) {
74
+ setEnableToStyledCharactersCache(true);
75
+ }
76
+ this.optionsState = {
77
+ isAlternateBufferEnabled: options.isAlternateBufferEnabled ?? options.alternateBuffer,
78
+ stickyHeadersInBackbuffer: options.stickyHeadersInBackbuffer,
79
+ animatedScroll: options.animatedScroll,
80
+ animationInterval: options.animationInterval,
81
+ backbufferUpdateDelay: options.backbufferUpdateDelay,
82
+ maxScrollbackLength: options.maxScrollbackLength,
83
+ forceScrollToBottomOnBackbufferRefresh: options.forceScrollToBottomOnBackbufferRefresh,
84
+ };
85
+ this.rootNode = dom.createNode('ink-root');
86
+ this.rootNode.onComputeLayout = this.calculateLayout;
87
+ this.isScreenReaderEnabled =
88
+ options.isScreenReaderEnabled ??
89
+ process.env['INK_SCREEN_READER'] === 'true';
90
+ this.selection = new Selection();
91
+ const unthrottled = options.debug || this.isScreenReaderEnabled;
92
+ const maxFps = options.maxFps ?? 30;
93
+ const renderThrottleMs = maxFps > 0 ? Math.max(1, Math.ceil(1000 / maxFps)) : 0;
94
+ const onRender = unthrottled
95
+ ? this.onRender
96
+ : throttle(this.onRender, renderThrottleMs, {
97
+ leading: true,
98
+ trailing: true,
99
+ });
100
+ let isRenderScheduled = false;
101
+ const renderMethod = options.standardReactLayoutTiming
102
+ ? () => {
103
+ if (isRenderScheduled)
104
+ return;
105
+ isRenderScheduled = true;
106
+ queueMicrotask(() => {
107
+ isRenderScheduled = false;
108
+ void onRender();
109
+ });
110
+ }
111
+ : onRender;
112
+ this.rootNode.onRender = renderMethod;
113
+ this.unsubscribeSelection = this.selection.onChange(renderMethod);
114
+ this.rootNode.onImmediateRender = options.standardReactLayoutTiming
115
+ ? renderMethod
116
+ : this.onRender; // Original unthrottled method
117
+ if (options.renderProcess === true || options.terminalBuffer === true) {
118
+ this.terminalBuffer = new TerminalBuffer(options.stdout.columns ?? 80, options.stdout.rows ?? 24, {
119
+ debugRainbowEnabled: options.debugRainbow,
120
+ renderInProcess: !options.renderProcess && options.terminalBuffer,
121
+ stdout: options.stdout,
122
+ isAlternateBufferEnabled: options.isAlternateBufferEnabled,
123
+ stickyHeadersInBackbuffer: options.stickyHeadersInBackbuffer,
124
+ animatedScroll: options.animatedScroll,
125
+ animationInterval: options.animationInterval,
126
+ backbufferUpdateDelay: options.backbufferUpdateDelay,
127
+ maxScrollbackLength: options.maxScrollbackLength,
128
+ forceScrollToBottomOnBackbufferRefresh: options.forceScrollToBottomOnBackbufferRefresh,
129
+ cacheToStyledCharacters: options.cacheToStyledCharacters,
130
+ });
131
+ }
132
+ this.log = logUpdate.create(options.stdout, {
133
+ alternateBuffer: options.alternateBuffer,
134
+ alternateBufferAlreadyActive: options.alternateBufferAlreadyActive,
135
+ getRows: () => options.stdout.rows,
136
+ getColumns: () => options.stdout.columns,
137
+ incremental: options.incrementalRendering,
138
+ });
139
+ this.throttledLog = unthrottled
140
+ ? this.log
141
+ : throttle(this.log, undefined, {
142
+ leading: true,
143
+ trailing: true,
144
+ });
145
+ // Ignore last render after unmounting a tree to prevent empty output before exit
146
+ this.isUnmounted = false;
147
+ // Store last output to only rerender when needed
148
+ this.lastOutput = '';
149
+ this.lastOutputHeight = 0;
150
+ // This variable is used only in debug mode to store full static output
151
+ // so that it's rerendered every time, not just new static parts, like in non-debug mode
152
+ this.fullStaticOutput = '';
153
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
154
+ this.container = reconciler.createContainer(this.rootNode, LegacyRoot, null, false, null, 'id', () => { }, () => { }, () => { }, () => { }, null);
155
+ // Unmount when process exits
156
+ this.unsubscribeExit = signalExit(this.unmount, { alwaysLast: false });
157
+ if (process.env['DEV'] === 'true') {
158
+ reconciler.injectIntoDevTools({
159
+ bundleType: 0,
160
+ // Reporting React DOM's version, not Ink's
161
+ // See https://github.com/facebook/react/issues/16666#issuecomment-532639905
162
+ version: '16.13.1',
163
+ rendererPackageName: 'ink',
164
+ });
165
+ }
166
+ if (options.patchConsole) {
167
+ this.patchConsole();
168
+ }
169
+ if (!isInCi) {
170
+ options.stdout.on('resize', this.resized);
171
+ this.unsubscribeResize = () => {
172
+ options.stdout.off('resize', this.resized);
173
+ };
174
+ }
175
+ }
176
+ resized = () => {
177
+ const terminalWidth = this.options.stdout.columns ?? 80;
178
+ const terminalHeight = this.options.stdout.rows ?? 24;
179
+ clearToStyledCharactersCache();
180
+ this.terminalBuffer?.resize(terminalWidth, terminalHeight);
181
+ this.resetScrollbackPadding(this.rootNode);
182
+ this.isTerminalResized = true;
183
+ this.calculateLayout();
184
+ void this.onRender();
185
+ };
186
+ getSelection() {
187
+ return this.selection;
188
+ }
189
+ resolveExitPromise = () => { };
190
+ rejectExitPromise = () => { };
191
+ unsubscribeExit = () => { };
192
+ calculateLayout = () => {
193
+ // The 'columns' property can be undefined or 0 when not using a TTY.
194
+ // In that case we fall back to 80.
195
+ const terminalWidth = this.options.stdout.columns ?? 80;
196
+ this.rootNode.yogaNode.setWidth(terminalWidth);
197
+ this.rootNode.yogaNode.calculateLayout(undefined, undefined, Yoga.DIRECTION_LTR);
198
+ const observerEntries = new Map();
199
+ this.calculateLayoutAndTriggerObservers(this.rootNode, observerEntries, this.isTerminalResized);
200
+ this.isTerminalResized = false;
201
+ for (const [observer, entries] of observerEntries) {
202
+ observer.internalTrigger(entries);
203
+ }
204
+ };
205
+ calculateLayoutAndTriggerObservers(node, observerEntries, isTerminalResized = false) {
206
+ if (node.nodeName === 'ink-box') {
207
+ const { style } = node;
208
+ const overflow = style.overflow ?? 'visible';
209
+ const overflowX = style.overflowX ?? overflow;
210
+ const overflowY = style.overflowY ?? overflow;
211
+ if (overflowX === 'scroll' || overflowY === 'scroll') {
212
+ calculateScroll(node, isTerminalResized);
213
+ }
214
+ else if (node.internal_scrollState) {
215
+ delete node.internal_scrollState;
216
+ }
217
+ }
218
+ measureAndExtractObservers(node, observerEntries);
219
+ if (node.internal_static ||
220
+ (node.nodeName === 'ink-static-render' && node.cachedRender)) {
221
+ return;
222
+ }
223
+ for (const child of node.childNodes) {
224
+ if (child.nodeName !== '#text') {
225
+ this.calculateLayoutAndTriggerObservers(child, observerEntries, isTerminalResized);
226
+ }
227
+ }
228
+ }
229
+ onRender = async () => {
230
+ if (this.isUnmounted) {
231
+ return;
232
+ }
233
+ const startTime = performance.now();
234
+ let debugRainbowColor;
235
+ if (this.options.debugRainbow) {
236
+ debugRainbowColor = rainbowColors[this.frameIndex % rainbowColors.length];
237
+ this.frameIndex++;
238
+ }
239
+ const { output, outputHeight, staticOutput, styledOutput, cursorPosition, root, } = render(this.rootNode, {
240
+ isScreenReaderEnabled: this.isScreenReaderEnabled,
241
+ selection: this.selection,
242
+ selectionStyle: this.options.selectionStyle,
243
+ skipScrollbars: Boolean(this.terminalBuffer),
244
+ });
245
+ if (this.terminalBuffer && root) {
246
+ await this.renderWithTerminalBuffer(root, cursorPosition);
247
+ }
248
+ else {
249
+ // If <Static> output isn't empty, it means new children have been added to it
250
+ const hasStaticOutput = Boolean(staticOutput && staticOutput !== '\n');
251
+ const renderOptions = {
252
+ output,
253
+ outputHeight,
254
+ staticOutput,
255
+ styledOutput,
256
+ cursorPosition,
257
+ debugRainbowColor,
258
+ hasStaticOutput,
259
+ };
260
+ if (this.options.debug) {
261
+ this.renderDebug(renderOptions);
262
+ }
263
+ else if (isInCi) {
264
+ this.renderCi(renderOptions);
265
+ }
266
+ else if (this.optionsState.isAlternateBufferEnabled) {
267
+ this.renderAlternateBuffer(renderOptions);
268
+ }
269
+ else if (this.isScreenReaderEnabled) {
270
+ this.renderScreenReader(renderOptions);
271
+ }
272
+ else if (this.lastOutputHeight >= this.options.stdout.rows) {
273
+ this.renderFullTerminal(renderOptions);
274
+ }
275
+ else {
276
+ this.renderLegacy(renderOptions);
277
+ }
278
+ }
279
+ this.callOnRender(startTime, output, staticOutput);
280
+ };
281
+ recalculateLayout() {
282
+ this.markAllTextNodesDirty(this.rootNode);
283
+ this.calculateLayout();
284
+ void this.onRender();
285
+ }
286
+ onRerender = () => {
287
+ if (this.isUnmounted) {
288
+ return;
289
+ }
290
+ this.log.clear();
291
+ this.lastOutput = '';
292
+ this.resetScrollbackPadding(this.rootNode);
293
+ void this.onRender();
294
+ };
295
+ setOptions = (options) => {
296
+ this.optionsState = {
297
+ ...this.optionsState,
298
+ ...options,
299
+ };
300
+ this.terminalBuffer?.updateOptions(this.optionsState);
301
+ this.lastOutput = '';
302
+ if (this.node) {
303
+ this.render(this.node);
304
+ }
305
+ else {
306
+ this.onRerender();
307
+ }
308
+ };
309
+ render(node) {
310
+ this.node = node;
311
+ const tree = (React.createElement(AccessibilityContext.Provider, { value: { isScreenReaderEnabled: this.isScreenReaderEnabled } },
312
+ React.createElement(App, { stdin: this.options.stdin, stdout: this.options.stdout, stderr: this.options.stderr, writeToStdout: this.writeToStdout, writeToStderr: this.writeToStderr, exitOnCtrlC: this.options.exitOnCtrlC, selection: this.selection, options: this.optionsState, setOptions: this.setOptions, dumpCurrentFrame: this.dumpCurrentFrame, startRecording: this.startRecording, stopRecording: this.stopRecording, onExit: this.unmount, onRerender: this.onRerender }, node)));
313
+ // @ts-expect-error the types for `react-reconciler` are not up to date with the library.
314
+ reconciler.updateContainerSync(tree, this.container, null, noop);
315
+ // @ts-expect-error the types for `react-reconciler` are not up to date with the library.
316
+ reconciler.flushSyncWork();
317
+ }
318
+ writeToStdout(data) {
319
+ if (this.isUnmounted) {
320
+ return;
321
+ }
322
+ if (this.options.debug) {
323
+ this.options.stdout.write(data + this.fullStaticOutput + this.lastOutput);
324
+ return;
325
+ }
326
+ if (isInCi) {
327
+ this.options.stdout.write(data);
328
+ return;
329
+ }
330
+ this.log.clear();
331
+ this.options.stdout.write(data);
332
+ this.log(this.lastOutput, []);
333
+ }
334
+ writeToStderr(data) {
335
+ if (this.isUnmounted) {
336
+ return;
337
+ }
338
+ if (this.options.debug) {
339
+ this.options.stderr.write(data);
340
+ this.options.stdout.write(this.fullStaticOutput + this.lastOutput);
341
+ return;
342
+ }
343
+ if (isInCi) {
344
+ this.options.stderr.write(data);
345
+ return;
346
+ }
347
+ this.log.clear();
348
+ this.options.stderr.write(data);
349
+ this.log(this.lastOutput, []);
350
+ }
351
+ // eslint-disable-next-line @typescript-eslint/ban-types
352
+ unmount(error) {
353
+ if (this.isUnmounted) {
354
+ return;
355
+ }
356
+ this.calculateLayout();
357
+ void this.onRender();
358
+ this.unsubscribeExit();
359
+ if (typeof this.restoreConsole === 'function') {
360
+ this.restoreConsole();
361
+ }
362
+ if (typeof this.unsubscribeResize === 'function') {
363
+ this.unsubscribeResize();
364
+ }
365
+ if (typeof this.unsubscribeSelection === 'function') {
366
+ this.unsubscribeSelection();
367
+ }
368
+ // CIs don't handle erasing ansi escapes well, so it's better to
369
+ // only render last frame of non-static output
370
+ if (isInCi) {
371
+ this.options.stdout.write(this.lastOutput + '\n');
372
+ }
373
+ else if (!this.options.debug) {
374
+ this.log.done();
375
+ if (this.terminalBuffer) {
376
+ this.terminalBuffer.done();
377
+ }
378
+ }
379
+ if (this.terminalBuffer) {
380
+ this.terminalBuffer.destroy();
381
+ }
382
+ this.isUnmounted = true;
383
+ // @ts-expect-error the types for `react-reconciler` are not up to date with the library.
384
+ reconciler.updateContainerSync(null, this.container, null, noop);
385
+ // @ts-expect-error the types for `react-reconciler` are not up to date with the library.
386
+ reconciler.flushSyncWork();
387
+ instances.delete(this.options.stdout);
388
+ if (error instanceof Error) {
389
+ this.rejectExitPromise(error);
390
+ }
391
+ else {
392
+ this.resolveExitPromise();
393
+ }
394
+ }
395
+ async waitUntilExit() {
396
+ this.exitPromise ||= new Promise((resolve, reject) => {
397
+ this.resolveExitPromise = resolve;
398
+ this.rejectExitPromise = reject;
399
+ });
400
+ return this.exitPromise;
401
+ }
402
+ dumpCurrentFrame(filename) {
403
+ if (this.terminalBuffer) {
404
+ this.terminalBuffer.dumpCurrentFrame(filename);
405
+ }
406
+ else {
407
+ console.error('dumpCurrentFrame is only supported when terminalBuffer is true');
408
+ }
409
+ }
410
+ startRecording(filename) {
411
+ if (this.terminalBuffer) {
412
+ this.terminalBuffer.startRecording(filename);
413
+ }
414
+ else {
415
+ console.error('startRecording is only supported when terminalBuffer is true');
416
+ }
417
+ }
418
+ stopRecording() {
419
+ if (this.terminalBuffer) {
420
+ this.terminalBuffer.stopRecording();
421
+ }
422
+ else {
423
+ console.error('stopRecording is only supported when terminalBuffer is true');
424
+ }
425
+ }
426
+ clear() {
427
+ if (!isInCi && !this.options.debug) {
428
+ this.log.clear();
429
+ }
430
+ }
431
+ patchConsole() {
432
+ if (this.options.debug) {
433
+ return;
434
+ }
435
+ this.restoreConsole = patchConsole((stream, data) => {
436
+ if (stream === 'stdout') {
437
+ this.writeToStdout(data);
438
+ }
439
+ if (stream === 'stderr') {
440
+ const isReactMessage = data.startsWith('The above error occurred');
441
+ if (!isReactMessage) {
442
+ this.writeToStderr(data);
443
+ }
444
+ }
445
+ });
446
+ }
447
+ async renderWithTerminalBuffer(root, cursorPosition) {
448
+ const appliedChanges = this.terminalBuffer.update(0, Number.MAX_SAFE_INTEGER, root, cursorPosition);
449
+ if (appliedChanges) {
450
+ await this.terminalBuffer.render();
451
+ }
452
+ }
453
+ renderDebug({ output, staticOutput, hasStaticOutput, }) {
454
+ if (hasStaticOutput) {
455
+ this.fullStaticOutput += staticOutput;
456
+ }
457
+ this.options.stdout.write(this.fullStaticOutput + output);
458
+ }
459
+ renderCi({ output, outputHeight, staticOutput, hasStaticOutput, }) {
460
+ if (hasStaticOutput) {
461
+ this.options.stdout.write(staticOutput);
462
+ }
463
+ this.lastOutput = output;
464
+ this.lastOutputHeight = outputHeight;
465
+ }
466
+ renderAlternateBuffer({ output, styledOutput, staticOutput, cursorPosition, debugRainbowColor, hasStaticOutput, }) {
467
+ if (hasStaticOutput) {
468
+ this.fullStaticOutput += staticOutput;
469
+ }
470
+ this.log(this.fullStaticOutput + output, styledOutput, debugRainbowColor, cursorPosition);
471
+ this.lastOutput = output;
472
+ }
473
+ renderScreenReader({ output, staticOutput, hasStaticOutput, }) {
474
+ if (hasStaticOutput) {
475
+ // We need to erase the main output before writing new static output
476
+ const erase = this.lastOutputHeight > 0
477
+ ? ansiEscapes.eraseLines(this.lastOutputHeight)
478
+ : '';
479
+ this.options.stdout.write(erase + staticOutput);
480
+ // After erasing, the last output is gone, so we should reset its height
481
+ this.lastOutputHeight = 0;
482
+ }
483
+ if (output === this.lastOutput && !hasStaticOutput) {
484
+ return;
485
+ }
486
+ const terminalWidth = this.options.stdout.columns ?? 80;
487
+ const wrappedOutput = wrapAnsi(output, terminalWidth, {
488
+ trim: false,
489
+ hard: true,
490
+ });
491
+ // If we haven't erased yet, do it now.
492
+ if (hasStaticOutput) {
493
+ this.options.stdout.write(wrappedOutput);
494
+ }
495
+ else {
496
+ const erase = this.lastOutputHeight > 0
497
+ ? ansiEscapes.eraseLines(this.lastOutputHeight)
498
+ : '';
499
+ this.options.stdout.write(erase + wrappedOutput);
500
+ }
501
+ this.lastOutput = output;
502
+ this.lastOutputHeight =
503
+ wrappedOutput === '' ? 0 : wrappedOutput.split('\n').length;
504
+ }
505
+ renderFullTerminal({ output, outputHeight, staticOutput, cursorPosition, hasStaticOutput, }) {
506
+ if (hasStaticOutput) {
507
+ this.fullStaticOutput += staticOutput;
508
+ }
509
+ // Build a single buffer for all operations
510
+ let buffer = '';
511
+ buffer += ansiEscapes.clearTerminal + this.fullStaticOutput + output;
512
+ // Position cursor after screen clear if requested by a component
513
+ if (cursorPosition) {
514
+ const lineCount = output.split('\n').length;
515
+ buffer += positionImeCursor(lineCount, cursorPosition);
516
+ }
517
+ this.options.stdout.write(buffer);
518
+ this.lastOutput = output;
519
+ this.lastOutputHeight = outputHeight;
520
+ this.lastCursorPosition = cursorPosition;
521
+ this.log.sync(output, cursorPosition);
522
+ }
523
+ /**
524
+ * The goal is to remove this method making terminal buffer required.
525
+ */
526
+ renderLegacy({ output, outputHeight, styledOutput, staticOutput, cursorPosition, debugRainbowColor, hasStaticOutput, }) {
527
+ if (hasStaticOutput) {
528
+ this.fullStaticOutput += staticOutput;
529
+ }
530
+ // To ensure static output is cleanly rendered before main output, clear main output first
531
+ if (hasStaticOutput) {
532
+ this.log.clear();
533
+ this.options.stdout.write(staticOutput);
534
+ this.log(output, styledOutput, debugRainbowColor, cursorPosition);
535
+ }
536
+ const outputChanged = output !== this.lastOutput;
537
+ const cursorChanged = cursorPosition !== this.lastCursorPosition &&
538
+ (!cursorPosition ||
539
+ !this.lastCursorPosition ||
540
+ cursorPosition.row !== this.lastCursorPosition.row ||
541
+ cursorPosition.col !== this.lastCursorPosition.col);
542
+ if (!hasStaticOutput && (outputChanged || cursorChanged)) {
543
+ this.throttledLog(output, styledOutput, debugRainbowColor, cursorPosition);
544
+ }
545
+ this.lastOutput = output;
546
+ this.lastOutputHeight = outputHeight;
547
+ this.lastCursorPosition = cursorPosition;
548
+ }
549
+ markAllTextNodesDirty(node) {
550
+ if (node.nodeName === 'ink-text' && node.yogaNode) {
551
+ node.yogaNode.markDirty();
552
+ }
553
+ for (const child of node.childNodes) {
554
+ if (child.nodeName !== '#text') {
555
+ this.markAllTextNodesDirty(child);
556
+ }
557
+ }
558
+ }
559
+ resetScrollbackPadding(node) {
560
+ node.internalMaxScrollTop = 0;
561
+ node.internalIsScrollbackDirty = false;
562
+ for (const child of node.childNodes) {
563
+ if (child.nodeName !== '#text') {
564
+ this.resetScrollbackPadding(child);
565
+ }
566
+ }
567
+ }
568
+ callOnRender(startTime, output, staticOutput) {
569
+ this.options.onRender?.({
570
+ renderTime: performance.now() - startTime,
571
+ output,
572
+ staticOutput,
573
+ });
574
+ }
575
+ }
576
+ //# sourceMappingURL=ink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ink.js","sourceRoot":"","sources":["../src/ink.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type Ink from './ink.js';
2
+ declare const instances: WeakMap<NodeJS.WriteStream, Ink>;
3
+ export default instances;
@@ -0,0 +1,8 @@
1
+ // Store all instances of Ink (instance.js) to ensure that consecutive render() calls
2
+ // use the same instance of Ink and don't create a new one
3
+ //
4
+ // This map has to be stored in a separate file, because render.js creates instances,
5
+ // but instance.js should delete itself from the map on unmount
6
+ const instances = new WeakMap();
7
+ export default instances;
8
+ //# sourceMappingURL=instances.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instances.js","sourceRoot":"","sources":["../src/instances.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,0DAA0D;AAC1D,EAAE;AACF,qFAAqF;AACrF,+DAA+D;AAI/D,MAAM,SAAS,GAAG,IAAI,OAAO,EAA2B,CAAC;AACzD,eAAe,SAAS,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type DOMNode } from './dom.js';
7
+ import { type TextFragment } from './measure-element.js';
8
+ export type LayoutState = Record<string, any>;
9
+ export type LayoutCallbacks<T extends LayoutState> = {
10
+ onText: (fragment: TextFragment, state: T) => void;
11
+ onNewline: (count: number, state: T) => void;
12
+ onSpace: (count: number, state: T) => void;
13
+ initialState: () => T;
14
+ };
15
+ export declare const processLayout: <T extends LayoutState>(node: DOMNode, callbacks: LayoutCallbacks<T>) => {
16
+ state: T;
17
+ lineBottom: number;
18
+ };