@jrichman/ink 6.5.1-beta.5 → 6.5.1-beta.7

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.
@@ -0,0 +1,110 @@
1
+ /**
2
+ * A highly optimized representation of styled characters for terminal rendering.
3
+ * Replaces arrays of `StyledChar` objects with parallel arrays to eliminate
4
+ * massive GC overhead during large layout and scroll updates.
5
+ */
6
+ export class StyledLines {
7
+ values = [];
8
+ fullWidths = [];
9
+ styles = [];
10
+ get length() {
11
+ return this.values.length;
12
+ }
13
+ set length(value) {
14
+ this.values.length = value;
15
+ this.fullWidths.length = value;
16
+ this.styles.length = value;
17
+ }
18
+ push(value, fullWidth, styles) {
19
+ this.values.push(value);
20
+ this.fullWidths.push(fullWidth);
21
+ this.styles.push(styles);
22
+ }
23
+ pushChar(char) {
24
+ this.values.push(char.value);
25
+ this.fullWidths.push(char.fullWidth || false);
26
+ this.styles.push(char.styles || []);
27
+ }
28
+ pushLine(other) {
29
+ for (let i = 0; i < other.length; i++) {
30
+ this.values.push(other.values[i]);
31
+ this.fullWidths.push(other.fullWidths[i]);
32
+ this.styles.push(other.styles[i]);
33
+ }
34
+ }
35
+ slice(start, end) {
36
+ const result = new StyledLines();
37
+ result.values = this.values.slice(start, end);
38
+ result.fullWidths = this.fullWidths.slice(start, end);
39
+ result.styles = this.styles.slice(start, end);
40
+ return result;
41
+ }
42
+ splice(start, deleteCount, ...items) {
43
+ const result = new StyledLines();
44
+ result.values = this.values.splice(start, deleteCount, ...items.map(i => i.value));
45
+ result.fullWidths = this.fullWidths.splice(start, deleteCount, ...items.map(i => i.fullWidth || false));
46
+ result.styles = this.styles.splice(start, deleteCount, ...items.map(i => i.styles || []));
47
+ return result;
48
+ }
49
+ *[Symbol.iterator]() {
50
+ for (let i = 0; i < this.length; i++) {
51
+ yield {
52
+ type: 'char',
53
+ value: this.values[i],
54
+ fullWidth: this.fullWidths[i],
55
+ styles: this.styles[i],
56
+ };
57
+ }
58
+ }
59
+ entries() {
60
+ let i = 0;
61
+ return {
62
+ [Symbol.iterator]() {
63
+ return this;
64
+ },
65
+ next: () => {
66
+ if (i >= this.length)
67
+ return { done: true, value: undefined };
68
+ const val = [i, this.at(i)];
69
+ i++;
70
+ return { done: false, value: val };
71
+ },
72
+ };
73
+ }
74
+ map(callbackfn, thisArg) {
75
+ const result = [];
76
+ for (let i = 0; i < this.length; i++) {
77
+ result.push(callbackfn.call(thisArg, this.at(i), i, this));
78
+ }
79
+ return result;
80
+ }
81
+ indexOf(searchElement, fromIndex = 0) {
82
+ for (let i = fromIndex; i < this.length; i++) {
83
+ if (this.values[i] === searchElement.value &&
84
+ this.fullWidths[i] === searchElement.fullWidth)
85
+ return i;
86
+ }
87
+ return -1;
88
+ }
89
+ at(index) {
90
+ if (index < 0) {
91
+ index = this.length + index;
92
+ }
93
+ if (index < 0 || index >= this.length)
94
+ return undefined;
95
+ return {
96
+ type: 'char',
97
+ value: this.values[index],
98
+ fullWidth: this.fullWidths[index],
99
+ styles: this.styles[index],
100
+ };
101
+ }
102
+ clone() {
103
+ const result = new StyledLines();
104
+ result.values = [...this.values];
105
+ result.fullWidths = [...this.fullWidths];
106
+ result.styles = [...this.styles];
107
+ return result;
108
+ }
109
+ }
110
+ //# sourceMappingURL=styled-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styled-lines.js","sourceRoot":"","sources":["../src/styled-lines.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,OAAO,WAAW;IAChB,MAAM,GAAa,EAAE,CAAC;IACtB,UAAU,GAAc,EAAE,CAAC;IAC3B,MAAM,GAAiB,EAAE,CAAC;IAEjC,IAAI,MAAM;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,IAAI,MAAM,CAAC,KAAa;QACvB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,KAAK,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC;IAC5B,CAAC;IAED,IAAI,CAAC,KAAa,EAAE,SAAkB,EAAE,MAAkB;QACzD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1B,CAAC;IAED,QAAQ,CAAC,IAAgB;QACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,QAAQ,CAAC,KAAkB;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;YACnC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAE,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;IAED,KAAK,CAAC,KAAc,EAAE,GAAY;QACjC,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9C,OAAO,MAAM,CAAC;IACf,CAAC;IAED,MAAM,CACL,KAAa,EACb,WAAmB,EACnB,GAAG,KAAmB;QAEtB,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CACjC,KAAK,EACL,WAAW,EACX,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAC1B,CAAC;QACF,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACzC,KAAK,EACL,WAAW,EACX,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC,CACvC,CAAC;QACF,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CACjC,KAAK,EACL,WAAW,EACX,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CACjC,CAAC;QACF,OAAO,MAAM,CAAC;IACf,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM;gBACL,IAAI,EAAE,MAAe;gBACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE;gBACtB,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE;gBAC9B,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAE;aACvB,CAAC;QACH,CAAC;IACF,CAAC;IAED,OAAO;QACN,IAAI,CAAC,GAAG,CAAC,CAAC;QAEV,OAAO;YACN,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAChB,OAAO,IAAI,CAAC;YACb,CAAC;YACD,IAAI,EAAE,GAAyC,EAAE;gBAChD,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;oBAAE,OAAO,EAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAC,CAAC;gBAC5D,MAAM,GAAG,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,CAAyB,CAAC;gBACrD,CAAC,EAAE,CAAC;gBACJ,OAAO,EAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAC,CAAC;YAClC,CAAC;SACD,CAAC;IACH,CAAC;IAED,GAAG,CACF,UAAwE,EACxE,OAAa;QAEb,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAE,EAAE,CAAC,EAAE,IAAW,CAAC,CAAC,CAAC;QACpE,CAAC;QAED,OAAO,MAAM,CAAC;IACf,CAAC;IAED,OAAO,CAAC,aAAyB,EAAE,SAAS,GAAG,CAAC;QAC/C,KAAK,IAAI,CAAC,GAAG,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,IACC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,KAAK;gBACtC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,aAAa,CAAC,SAAS;gBAE9C,OAAO,CAAC,CAAC;QACX,CAAC;QAED,OAAO,CAAC,CAAC,CAAC;IACX,CAAC;IAED,EAAE,CAAC,KAAa;QACf,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACf,KAAK,GAAG,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QAC7B,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,SAAS,CAAC;QACxD,OAAO;YACN,IAAI,EAAE,MAAe;YACrB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE;YAC1B,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAE;YAClC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAE;SAC3B,CAAC;IACH,CAAC;IAED,KAAK;QACJ,MAAM,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,CAAC,UAAU,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,MAAM,CAAC;IACf,CAAC;CACD"}
@@ -0,0 +1,69 @@
1
+ import { type StyledChar } from '@alcalzone/ansi-tokenize';
2
+ export declare const rainbowColors: string[];
3
+ export type RenderLine = {
4
+ styledChars: StyledChar[];
5
+ text: string;
6
+ length: number;
7
+ tainted: boolean;
8
+ };
9
+ export declare function linesEqual(lineA: StyledChar[] | undefined, lineB: StyledChar[] | undefined): boolean;
10
+ export declare class TerminalWriter {
11
+ private columns;
12
+ private rows;
13
+ private readonly stdout;
14
+ isTainted: boolean;
15
+ debugRainbowColor?: string;
16
+ private screen;
17
+ private backbuffer;
18
+ private cursorX;
19
+ private cursorY;
20
+ private scrollRegionTop;
21
+ private scrollRegionBottom;
22
+ private firstRender;
23
+ private readonly enableSynchronizedOutput;
24
+ private cancelSlowFlush;
25
+ private outputBuffer;
26
+ private currentChunkBuffer;
27
+ constructor(columns: number, rows: number, stdout: NodeJS.WriteStream);
28
+ unkownCursorLocation(): void;
29
+ getBackbufferLength(): number;
30
+ getBackbufferEntry(index: number): RenderLine | undefined;
31
+ getScreenLine(y: number): RenderLine | undefined;
32
+ get isFirstRender(): boolean;
33
+ /**
34
+ * Append lines to the backbuffer leaving the on screen content unchanged.
35
+ */
36
+ appendLinesBackbuffer(lines: RenderLine[]): void;
37
+ updateBackbuffer(start: number, deleteCount: number, newLines: RenderLine[]): void;
38
+ writeLines(lines: RenderLine[]): void;
39
+ moveCursor(x: number, y: number): void;
40
+ clampLine(line: StyledChar[], width: number): RenderLine;
41
+ syncLine(line: RenderLine, y: number): void;
42
+ /**
43
+ * Trigger a scroll up of content into the backbuffer.
44
+ */
45
+ private applyScrollUpBackbuffer;
46
+ private applyScrollUp;
47
+ private applyScrollDown;
48
+ private performScroll;
49
+ scrollLines(options: {
50
+ start: number;
51
+ end: number;
52
+ linesToScroll: number;
53
+ lines: RenderLine[];
54
+ direction: 'up' | 'down';
55
+ scrollToBackbuffer: boolean;
56
+ }): void;
57
+ resize(columns: number, rows: number): void;
58
+ clear(): void;
59
+ startSynchronizedOutput(): void;
60
+ endSynchronizedOutput(): void;
61
+ flush(): void;
62
+ slowFlush(): Promise<void>;
63
+ validateLinesConsistent(lines: RenderLine[]): void;
64
+ private synchronizedWrite;
65
+ private resetScrollRegion;
66
+ private setScrollRegion;
67
+ private writeHelper;
68
+ private finishChunk;
69
+ }