vt100.js 0.1.1 → 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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vt100.js",
3
- "version": "0.1.1",
3
+ "version": "0.2.0",
4
4
  "description": "Pure TypeScript VT100 terminal emulator. Zero dependencies, headless, fast.",
5
5
  "keywords": [
6
6
  "ansi",
@@ -16,34 +16,22 @@
16
16
  "license": "MIT",
17
17
  "author": "Beorn",
18
18
  "repository": "github:beorn/vt100",
19
- "files": [
20
- "dist",
21
- "src"
22
- ],
23
19
  "type": "module",
24
- "main": "./dist/index.js",
25
- "types": "./dist/index.d.ts",
26
20
  "exports": {
27
- ".": {
28
- "types": "./dist/index.d.ts",
29
- "import": "./dist/index.js"
30
- }
21
+ ".": "./src/index.ts"
31
22
  },
23
+ "files": ["src"],
32
24
  "publishConfig": {
33
25
  "access": "public"
34
26
  },
35
27
  "scripts": {
36
- "build": "tsc",
37
- "prepublishOnly": "bun run build",
38
28
  "test": "vitest run",
39
29
  "typecheck": "tsc --noEmit"
40
30
  },
41
31
  "devDependencies": {
42
- "typescript": "^5.7.3",
43
32
  "vitest": "^4.0.0"
44
33
  },
45
34
  "engines": {
46
- "bun": ">=1.0.0",
47
- "node": ">=18"
35
+ "node": ">=23.6.0"
48
36
  }
49
37
  }
package/src/index.ts CHANGED
@@ -5,4 +5,4 @@ export {
5
5
  type ScreenCell,
6
6
  type CellColor,
7
7
  type UnderlineStyle,
8
- } from "./screen.js"
8
+ } from "./screen.ts"
package/dist/index.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export { createScreen as createVt100Screen, type Screen as Vt100Screen, type ScreenOptions as Vt100ScreenOptions, type ScreenCell, type CellColor, type UnderlineStyle, } from "./screen.js";
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,iBAAiB,EACjC,KAAK,MAAM,IAAI,WAAW,EAC1B,KAAK,aAAa,IAAI,kBAAkB,EACxC,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,cAAc,GACpB,MAAM,aAAa,CAAA"}
package/dist/index.js DELETED
@@ -1,2 +0,0 @@
1
- export { createScreen as createVt100Screen, } from "./screen.js";
2
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,IAAI,iBAAiB,GAMlC,MAAM,aAAa,CAAA"}
package/dist/screen.d.ts DELETED
@@ -1,57 +0,0 @@
1
- /**
2
- * Pure TypeScript VT100 terminal emulator.
3
- *
4
- * Inspired by the Rust vt100 crate — parses a terminal byte stream and
5
- * maintains an in-memory screen representation with per-cell attributes,
6
- * cursor tracking, and mode state.
7
- *
8
- * Zero dependencies. Handles: SGR (16/256/truecolor), cursor movement,
9
- * erase, scroll regions, alternate screen, modes, OSC title, and more.
10
- */
11
- export interface CellColor {
12
- r: number;
13
- g: number;
14
- b: number;
15
- }
16
- export type UnderlineStyle = "none" | "single" | "double" | "curly" | "dotted" | "dashed";
17
- export interface ScreenCell {
18
- char: string;
19
- fg: CellColor | null;
20
- bg: CellColor | null;
21
- bold: boolean;
22
- faint: boolean;
23
- italic: boolean;
24
- underline: UnderlineStyle;
25
- strikethrough: boolean;
26
- inverse: boolean;
27
- hidden: boolean;
28
- wide: boolean;
29
- }
30
- export interface ScreenOptions {
31
- cols: number;
32
- rows: number;
33
- scrollbackLimit?: number;
34
- }
35
- export interface Screen {
36
- readonly cols: number;
37
- readonly rows: number;
38
- process(data: Uint8Array): void;
39
- resize(cols: number, rows: number): void;
40
- reset(): void;
41
- getCell(row: number, col: number): ScreenCell;
42
- getLine(row: number): ScreenCell[];
43
- getText(): string;
44
- getTextRange(startRow: number, startCol: number, endRow: number, endCol: number): string;
45
- getCursorPosition(): {
46
- x: number;
47
- y: number;
48
- };
49
- getCursorVisible(): boolean;
50
- getTitle(): string;
51
- getMode(mode: string): boolean;
52
- getScrollbackLength(): number;
53
- getViewportOffset(): number;
54
- scrollViewport(delta: number): void;
55
- }
56
- export declare function createScreen(opts: ScreenOptions): Screen;
57
- //# sourceMappingURL=screen.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,SAAS;IACxB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAEzF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,SAAS,GAAG,IAAI,CAAA;IACpB,EAAE,EAAE,SAAS,GAAG,IAAI,CAAA;IACpB,IAAI,EAAE,OAAO,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,cAAc,CAAA;IACzB,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;IACf,IAAI,EAAE,OAAO,CAAA;CACd;AA6FD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAcD,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAA;IAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACxC,KAAK,IAAI,IAAI,CAAA;IACb,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAAA;IAC7C,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,EAAE,CAAA;IAClC,OAAO,IAAI,MAAM,CAAA;IACjB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAAA;IACxF,iBAAiB,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,gBAAgB,IAAI,OAAO,CAAA;IAC3B,QAAQ,IAAI,MAAM,CAAA;IAClB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC9B,mBAAmB,IAAI,MAAM,CAAA;IAC7B,iBAAiB,IAAI,MAAM,CAAA;IAC3B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CA4gCxD"}
package/dist/screen.js DELETED
@@ -1,1093 +0,0 @@
1
- /**
2
- * Pure TypeScript VT100 terminal emulator.
3
- *
4
- * Inspired by the Rust vt100 crate — parses a terminal byte stream and
5
- * maintains an in-memory screen representation with per-cell attributes,
6
- * cursor tracking, and mode state.
7
- *
8
- * Zero dependencies. Handles: SGR (16/256/truecolor), cursor movement,
9
- * erase, scroll regions, alternate screen, modes, OSC title, and more.
10
- */
11
- /** Frozen sentinel for unwritten cells — never mutate, copy-on-write in writeChar(). */
12
- const EMPTY_CELL = Object.freeze({
13
- char: "",
14
- fg: null,
15
- bg: null,
16
- bold: false,
17
- faint: false,
18
- italic: false,
19
- underline: "none",
20
- strikethrough: false,
21
- inverse: false,
22
- hidden: false,
23
- wide: false,
24
- });
25
- function emptyCell() {
26
- return { ...EMPTY_CELL };
27
- }
28
- // ═══════════════════════════════════════════════════════
29
- // ANSI 256-color palette
30
- // ═══════════════════════════════════════════════════════
31
- const ANSI_16 = [
32
- { r: 0x00, g: 0x00, b: 0x00 }, // 0 Black
33
- { r: 0x80, g: 0x00, b: 0x00 }, // 1 Red
34
- { r: 0x00, g: 0x80, b: 0x00 }, // 2 Green
35
- { r: 0x80, g: 0x80, b: 0x00 }, // 3 Yellow
36
- { r: 0x00, g: 0x00, b: 0x80 }, // 4 Blue
37
- { r: 0x80, g: 0x00, b: 0x80 }, // 5 Magenta
38
- { r: 0x00, g: 0x80, b: 0x80 }, // 6 Cyan
39
- { r: 0xc0, g: 0xc0, b: 0xc0 }, // 7 White
40
- { r: 0x80, g: 0x80, b: 0x80 }, // 8 Bright Black
41
- { r: 0xff, g: 0x00, b: 0x00 }, // 9 Bright Red
42
- { r: 0x00, g: 0xff, b: 0x00 }, // 10 Bright Green
43
- { r: 0xff, g: 0xff, b: 0x00 }, // 11 Bright Yellow
44
- { r: 0x00, g: 0x00, b: 0xff }, // 12 Bright Blue
45
- { r: 0xff, g: 0x00, b: 0xff }, // 13 Bright Magenta
46
- { r: 0x00, g: 0xff, b: 0xff }, // 14 Bright Cyan
47
- { r: 0xff, g: 0xff, b: 0xff }, // 15 Bright White
48
- ];
49
- function buildPalette256() {
50
- const palette = [...ANSI_16];
51
- const levels = [0x00, 0x5f, 0x87, 0xaf, 0xd7, 0xff];
52
- for (let r = 0; r < 6; r++) {
53
- for (let g = 0; g < 6; g++) {
54
- for (let b = 0; b < 6; b++) {
55
- palette.push({ r: levels[r], g: levels[g], b: levels[b] });
56
- }
57
- }
58
- }
59
- for (let i = 0; i < 24; i++) {
60
- const v = 8 + i * 10;
61
- palette.push({ r: v, g: v, b: v });
62
- }
63
- return palette;
64
- }
65
- const PALETTE_256 = buildPalette256();
66
- // ═══════════════════════════════════════════════════════
67
- // Unicode width (simplified — CJK detection)
68
- // ═══════════════════════════════════════════════════════
69
- function isWide(codePoint) {
70
- // CJK Unified Ideographs, CJK Compatibility Ideographs, etc.
71
- return ((codePoint >= 0x1100 && codePoint <= 0x115f) || // Hangul Jamo
72
- (codePoint >= 0x2e80 && codePoint <= 0x303e) || // CJK Radicals
73
- (codePoint >= 0x3041 && codePoint <= 0x33bf) || // Hiragana, Katakana, Bopomofo, etc.
74
- (codePoint >= 0x3400 && codePoint <= 0x4dbf) || // CJK Unified Extension A
75
- (codePoint >= 0x4e00 && codePoint <= 0xa4cf) || // CJK Unified Ideographs
76
- (codePoint >= 0xa960 && codePoint <= 0xa97c) || // Hangul Jamo Extended-A
77
- (codePoint >= 0xac00 && codePoint <= 0xd7a3) || // Hangul Syllables
78
- (codePoint >= 0xf900 && codePoint <= 0xfaff) || // CJK Compatibility Ideographs
79
- (codePoint >= 0xfe10 && codePoint <= 0xfe19) || // Vertical Forms
80
- (codePoint >= 0xfe30 && codePoint <= 0xfe6b) || // CJK Compatibility Forms
81
- (codePoint >= 0xff01 && codePoint <= 0xff60) || // Fullwidth Forms
82
- (codePoint >= 0xffe0 && codePoint <= 0xffe6) || // Fullwidth Signs
83
- (codePoint >= 0x1f300 && codePoint <= 0x1f9ff) || // Misc Symbols/Emoticons
84
- (codePoint >= 0x1fa00 && codePoint <= 0x1faff) || // Extended Symbols & Pictographs
85
- (codePoint >= 0x20000 && codePoint <= 0x2fffd) || // CJK Extension B-F
86
- (codePoint >= 0x30000 && codePoint <= 0x3fffd) // CJK Extension G+
87
- );
88
- }
89
- export function createScreen(opts) {
90
- let cols = opts.cols;
91
- let rows = opts.rows;
92
- const scrollbackLimit = opts.scrollbackLimit ?? 1000;
93
- // Main and alternate screen buffers
94
- let mainGrid = makeGrid(cols, rows);
95
- let altGrid = makeGrid(cols, rows);
96
- let grid = mainGrid;
97
- let scrollback = [];
98
- // Cursor
99
- let curX = 0;
100
- let curY = 0;
101
- let curVisible = true;
102
- let savedCurX = 0;
103
- let savedCurY = 0;
104
- let savedState = {
105
- curX: 0,
106
- curY: 0,
107
- attrs: resetAttrs(),
108
- originMode: false,
109
- autoWrap: true,
110
- };
111
- // Current drawing attributes
112
- let attrs = resetAttrs();
113
- // Terminal state
114
- let title = "";
115
- let useAltScreen = false;
116
- let bracketedPaste = false;
117
- let applicationCursor = false;
118
- let applicationKeypad = false;
119
- let autoWrap = true;
120
- let mouseTracking = false;
121
- let focusTracking = false;
122
- let originMode = false;
123
- let insertMode = false;
124
- let reverseVideo = false;
125
- // Scroll region (inclusive, 0-based)
126
- let scrollTop = 0;
127
- let scrollBottom = rows - 1;
128
- // Viewport scroll offset for scrollViewport()
129
- let viewportOffset = 0;
130
- // Parser state
131
- let parserState = "ground";
132
- let escBuf = "";
133
- let oscBuf = "";
134
- // Decoder for incoming bytes
135
- const decoder = new TextDecoder();
136
- function makeGrid(c, r) {
137
- const g = [];
138
- for (let row = 0; row < r; row++) {
139
- g.push(makeRow(c));
140
- }
141
- return g;
142
- }
143
- function makeRow(c) {
144
- const row = [];
145
- for (let col = 0; col < c; col++) {
146
- row.push(EMPTY_CELL);
147
- }
148
- return row;
149
- }
150
- function resetAttrs() {
151
- return {
152
- fg: null,
153
- bg: null,
154
- bold: false,
155
- faint: false,
156
- italic: false,
157
- underline: "none",
158
- strikethrough: false,
159
- inverse: false,
160
- hidden: false,
161
- };
162
- }
163
- function clampCursor() {
164
- if (curX < 0)
165
- curX = 0;
166
- if (curX >= cols)
167
- curX = cols - 1;
168
- if (curY < 0)
169
- curY = 0;
170
- if (curY >= rows)
171
- curY = rows - 1;
172
- }
173
- // ── Scrolling ──
174
- function scrollUp(top, bottom) {
175
- // Move top row to scrollback (only if main screen & top of screen)
176
- if (grid === mainGrid && top === 0) {
177
- scrollback.push(grid[0]);
178
- // Bulk trim when exceeding 2x limit to avoid O(n) shift() on every scroll
179
- if (scrollback.length > scrollbackLimit * 2) {
180
- scrollback.splice(0, scrollback.length - scrollbackLimit);
181
- }
182
- }
183
- // Shift rows up within the region
184
- for (let i = top; i < bottom; i++) {
185
- grid[i] = grid[i + 1];
186
- }
187
- grid[bottom] = makeRow(cols);
188
- }
189
- function scrollDown(top, bottom) {
190
- for (let i = bottom; i > top; i--) {
191
- grid[i] = grid[i - 1];
192
- }
193
- grid[top] = makeRow(cols);
194
- }
195
- // ── Character writing ──
196
- function writeChar(ch) {
197
- const codePoint = ch.codePointAt(0) ?? 0;
198
- const wide = isWide(codePoint);
199
- const charWidth = wide ? 2 : 1;
200
- // Handle autowrap at end of line
201
- if (curX + charWidth > cols) {
202
- if (autoWrap) {
203
- curX = 0;
204
- curY++;
205
- if (curY > scrollBottom) {
206
- curY = scrollBottom;
207
- scrollUp(scrollTop, scrollBottom);
208
- }
209
- }
210
- else {
211
- curX = cols - charWidth;
212
- }
213
- }
214
- // Insert mode: shift existing characters right before writing
215
- if (insertMode) {
216
- const row = grid[curY];
217
- for (let i = 0; i < charWidth; i++) {
218
- row.splice(curX, 0, EMPTY_CELL);
219
- row.pop();
220
- }
221
- }
222
- // Copy-on-write: if cell is the shared EMPTY_CELL sentinel, create a fresh object
223
- const row = grid[curY];
224
- let cell = row[curX];
225
- if (cell === EMPTY_CELL) {
226
- cell = { ...EMPTY_CELL };
227
- row[curX] = cell;
228
- }
229
- cell.char = ch;
230
- cell.fg = attrs.fg ? { ...attrs.fg } : null;
231
- cell.bg = attrs.bg ? { ...attrs.bg } : null;
232
- cell.bold = attrs.bold;
233
- cell.faint = attrs.faint;
234
- cell.italic = attrs.italic;
235
- cell.underline = attrs.underline;
236
- cell.strikethrough = attrs.strikethrough;
237
- cell.inverse = attrs.inverse;
238
- cell.hidden = attrs.hidden;
239
- cell.wide = wide;
240
- if (wide && curX + 1 < cols) {
241
- // Spacer cell for wide character — always create fresh
242
- let spacer = row[curX + 1];
243
- if (spacer === EMPTY_CELL) {
244
- spacer = { ...EMPTY_CELL };
245
- row[curX + 1] = spacer;
246
- }
247
- spacer.char = "";
248
- spacer.fg = null;
249
- spacer.bg = null;
250
- spacer.bold = false;
251
- spacer.faint = false;
252
- spacer.italic = false;
253
- spacer.underline = "none";
254
- spacer.strikethrough = false;
255
- spacer.inverse = false;
256
- spacer.hidden = false;
257
- spacer.wide = false;
258
- }
259
- curX += charWidth;
260
- }
261
- // ── CSI handler ──
262
- function handleCSI(params, finalByte) {
263
- const parts = params.split(";").map((s) => (s === "" ? 0 : parseInt(s, 10)));
264
- switch (finalByte) {
265
- case "A": // CUU - Cursor Up
266
- curY -= Math.max(parts[0] ?? 1, 1);
267
- clampCursor();
268
- break;
269
- case "B": // CUD - Cursor Down
270
- curY += Math.max(parts[0] ?? 1, 1);
271
- clampCursor();
272
- break;
273
- case "C": // CUF - Cursor Forward
274
- curX += Math.max(parts[0] ?? 1, 1);
275
- clampCursor();
276
- break;
277
- case "D": // CUB - Cursor Back
278
- curX -= Math.max(parts[0] ?? 1, 1);
279
- clampCursor();
280
- break;
281
- case "E": // CNL - Cursor Next Line
282
- curY += Math.max(parts[0] ?? 1, 1);
283
- curX = 0;
284
- clampCursor();
285
- break;
286
- case "F": // CPL - Cursor Previous Line
287
- curY -= Math.max(parts[0] ?? 1, 1);
288
- curX = 0;
289
- clampCursor();
290
- break;
291
- case "G": // CHA - Cursor Horizontal Absolute
292
- curX = (parts[0] ?? 1) - 1;
293
- clampCursor();
294
- break;
295
- case "H": // CUP - Cursor Position
296
- case "f": // HVP - same as CUP
297
- curY = (parts[0] ?? 1) - 1;
298
- curX = (parts[1] ?? 1) - 1;
299
- clampCursor();
300
- break;
301
- case "J": // ED - Erase in Display
302
- handleEraseDisplay(parts[0] ?? 0);
303
- break;
304
- case "K": // EL - Erase in Line
305
- handleEraseLine(parts[0] ?? 0);
306
- break;
307
- case "L": // IL - Insert Lines
308
- handleInsertLines(Math.max(parts[0] ?? 1, 1));
309
- break;
310
- case "M": // DL - Delete Lines
311
- handleDeleteLines(Math.max(parts[0] ?? 1, 1));
312
- break;
313
- case "P": // DCH - Delete Characters
314
- handleDeleteChars(Math.max(parts[0] ?? 1, 1));
315
- break;
316
- case "@": // ICH - Insert Characters
317
- handleInsertChars(Math.max(parts[0] ?? 1, 1));
318
- break;
319
- case "X": // ECH - Erase Characters
320
- handleEraseChars(Math.max(parts[0] ?? 1, 1));
321
- break;
322
- case "S": // SU - Scroll Up
323
- for (let i = 0; i < Math.max(parts[0] ?? 1, 1); i++) {
324
- scrollUp(scrollTop, scrollBottom);
325
- }
326
- break;
327
- case "T": // SD - Scroll Down
328
- for (let i = 0; i < Math.max(parts[0] ?? 1, 1); i++) {
329
- scrollDown(scrollTop, scrollBottom);
330
- }
331
- break;
332
- case "d": // VPA - Line Position Absolute
333
- curY = (parts[0] ?? 1) - 1;
334
- clampCursor();
335
- break;
336
- case "m": // SGR - Select Graphic Rendition
337
- handleSGR(params);
338
- break;
339
- case "r": // DECSTBM - Set Scrolling Region
340
- scrollTop = (parts[0] ?? 1) - 1;
341
- scrollBottom = (parts[1] ?? rows) - 1;
342
- if (scrollTop < 0)
343
- scrollTop = 0;
344
- if (scrollBottom >= rows)
345
- scrollBottom = rows - 1;
346
- if (scrollTop > scrollBottom) {
347
- scrollTop = 0;
348
- scrollBottom = rows - 1;
349
- }
350
- curX = 0;
351
- curY = originMode ? scrollTop : 0;
352
- break;
353
- case "n": // DSR - Device Status Report (ignore)
354
- break;
355
- case "c": // DA - Device Attributes (ignore)
356
- break;
357
- case "s": // SCP - Save Cursor Position
358
- savedCurX = curX;
359
- savedCurY = curY;
360
- break;
361
- case "u": // RCP - Restore Cursor Position
362
- curX = savedCurX;
363
- curY = savedCurY;
364
- clampCursor();
365
- break;
366
- default:
367
- // Unknown CSI sequence — ignore
368
- break;
369
- }
370
- }
371
- function handleCSIPrivate(params, finalByte) {
372
- const parts = params.split(";").map((s) => (s === "" ? 0 : parseInt(s, 10)));
373
- const set = finalByte === "h";
374
- for (const code of parts) {
375
- switch (code) {
376
- case 1: // DECCKM - Application Cursor
377
- applicationCursor = set;
378
- break;
379
- case 6: // DECOM - Origin Mode
380
- originMode = set;
381
- break;
382
- case 7: // DECAWM - Autowrap Mode
383
- autoWrap = set;
384
- break;
385
- case 25: // DECTCEM - Cursor Visible
386
- curVisible = set;
387
- break;
388
- case 47: // Alternate screen buffer (old)
389
- case 1047: // Alternate screen buffer
390
- if (set && !useAltScreen) {
391
- useAltScreen = true;
392
- grid = altGrid;
393
- }
394
- else if (!set && useAltScreen) {
395
- useAltScreen = false;
396
- grid = mainGrid;
397
- }
398
- break;
399
- case 66: // DECNKM - Application Keypad
400
- applicationKeypad = set;
401
- break;
402
- case 1000: // Mouse tracking (basic)
403
- case 1002: // Mouse tracking (button events)
404
- case 1003: // Mouse tracking (all events)
405
- mouseTracking = set;
406
- break;
407
- case 1004: // Focus tracking
408
- focusTracking = set;
409
- break;
410
- case 1049: // Alternate screen buffer + save/restore cursor
411
- if (set && !useAltScreen) {
412
- savedCurX = curX;
413
- savedCurY = curY;
414
- useAltScreen = true;
415
- altGrid = makeGrid(cols, rows);
416
- grid = altGrid;
417
- curX = 0;
418
- curY = 0;
419
- }
420
- else if (!set && useAltScreen) {
421
- useAltScreen = false;
422
- grid = mainGrid;
423
- curX = savedCurX;
424
- curY = savedCurY;
425
- clampCursor();
426
- }
427
- break;
428
- case 2004: // Bracketed paste
429
- bracketedPaste = set;
430
- break;
431
- case 5: // DECSCNM - Reverse Video
432
- reverseVideo = set;
433
- break;
434
- case 4: // IRM - Insert Mode (via DEC private)
435
- insertMode = set;
436
- break;
437
- }
438
- }
439
- }
440
- function handleEraseDisplay(mode) {
441
- switch (mode) {
442
- case 0: // Erase from cursor to end
443
- eraseCells(curY, curX, curY, cols - 1);
444
- for (let row = curY + 1; row < rows; row++) {
445
- eraseCells(row, 0, row, cols - 1);
446
- }
447
- break;
448
- case 1: // Erase from start to cursor
449
- for (let row = 0; row < curY; row++) {
450
- eraseCells(row, 0, row, cols - 1);
451
- }
452
- eraseCells(curY, 0, curY, curX);
453
- break;
454
- case 2: // Erase entire display
455
- case 3: // Erase entire display + scrollback
456
- for (let row = 0; row < rows; row++) {
457
- eraseCells(row, 0, row, cols - 1);
458
- }
459
- if (mode === 3) {
460
- scrollback.length = 0;
461
- }
462
- break;
463
- }
464
- }
465
- function handleEraseLine(mode) {
466
- switch (mode) {
467
- case 0: // Erase from cursor to end of line
468
- eraseCells(curY, curX, curY, cols - 1);
469
- break;
470
- case 1: // Erase from start to cursor
471
- eraseCells(curY, 0, curY, curX);
472
- break;
473
- case 2: // Erase entire line
474
- eraseCells(curY, 0, curY, cols - 1);
475
- break;
476
- }
477
- }
478
- function eraseCells(row, startCol, _endRow, endCol) {
479
- const r = grid[row];
480
- if (!r)
481
- return;
482
- for (let col = startCol; col <= endCol && col < cols; col++) {
483
- r[col] = emptyCell();
484
- }
485
- }
486
- function handleInsertLines(count) {
487
- if (curY < scrollTop || curY > scrollBottom)
488
- return;
489
- for (let i = 0; i < count; i++) {
490
- scrollDown(curY, scrollBottom);
491
- }
492
- }
493
- function handleDeleteLines(count) {
494
- if (curY < scrollTop || curY > scrollBottom)
495
- return;
496
- for (let i = 0; i < count; i++) {
497
- scrollUp(curY, scrollBottom);
498
- }
499
- }
500
- function handleDeleteChars(count) {
501
- const row = grid[curY];
502
- if (!row)
503
- return;
504
- for (let i = 0; i < count; i++) {
505
- if (curX < cols) {
506
- row.splice(curX, 1);
507
- row.push(emptyCell());
508
- }
509
- }
510
- }
511
- function handleInsertChars(count) {
512
- const row = grid[curY];
513
- if (!row)
514
- return;
515
- for (let i = 0; i < count; i++) {
516
- row.splice(curX, 0, emptyCell());
517
- row.pop();
518
- }
519
- }
520
- function handleEraseChars(count) {
521
- const row = grid[curY];
522
- if (!row)
523
- return;
524
- for (let i = 0; i < count && curX + i < cols; i++) {
525
- row[curX + i] = emptyCell();
526
- }
527
- }
528
- // ── SGR (Select Graphic Rendition) ──
529
- function handleSGR(rawParams) {
530
- // Parse SGR parameters, handling colon sub-parameters (e.g., "4:3" for curly underline)
531
- const segments = rawParams.split(";");
532
- const params = [];
533
- // Map from param index to colon sub-parameters (e.g., index of "4" -> [4, 3])
534
- const subParams = new Map();
535
- for (const seg of segments) {
536
- if (seg.includes(":")) {
537
- const subs = seg.split(":").map((s) => (s === "" ? 0 : parseInt(s, 10)));
538
- subParams.set(params.length, subs);
539
- params.push(subs[0]);
540
- }
541
- else {
542
- params.push(seg === "" ? 0 : parseInt(seg, 10));
543
- }
544
- }
545
- if (params.length === 0 || (params.length === 1 && params[0] === 0)) {
546
- attrs = resetAttrs();
547
- return;
548
- }
549
- let i = 0;
550
- while (i < params.length) {
551
- const code = params[i];
552
- switch (code) {
553
- case 0:
554
- attrs = resetAttrs();
555
- break;
556
- case 1:
557
- attrs.bold = true;
558
- break;
559
- case 2:
560
- attrs.faint = true;
561
- break;
562
- case 3:
563
- attrs.italic = true;
564
- break;
565
- case 4: {
566
- // SGR 4 with optional sub-parameter: 4:0=none, 4:1=single, 4:3=curly, etc.
567
- const subs = subParams.get(i);
568
- if (subs && subs.length > 1) {
569
- const sub = subs[1];
570
- switch (sub) {
571
- case 0:
572
- attrs.underline = "none";
573
- break;
574
- case 1:
575
- attrs.underline = "single";
576
- break;
577
- case 2:
578
- attrs.underline = "double";
579
- break;
580
- case 3:
581
- attrs.underline = "curly";
582
- break;
583
- case 4:
584
- attrs.underline = "dotted";
585
- break;
586
- case 5:
587
- attrs.underline = "dashed";
588
- break;
589
- default:
590
- attrs.underline = "single";
591
- break;
592
- }
593
- }
594
- else {
595
- attrs.underline = "single";
596
- }
597
- break;
598
- }
599
- case 7:
600
- attrs.inverse = true;
601
- break;
602
- case 8: // Hidden/conceal
603
- attrs.hidden = true;
604
- break;
605
- case 9:
606
- attrs.strikethrough = true;
607
- break;
608
- case 21: // Double underline
609
- attrs.underline = "double";
610
- break;
611
- case 22: // Normal intensity (neither bold nor faint)
612
- attrs.bold = false;
613
- attrs.faint = false;
614
- break;
615
- case 23:
616
- attrs.italic = false;
617
- break;
618
- case 24:
619
- attrs.underline = "none";
620
- break;
621
- case 27:
622
- attrs.inverse = false;
623
- break;
624
- case 28: // Reveal (turn off hidden/conceal)
625
- attrs.hidden = false;
626
- break;
627
- case 29:
628
- attrs.strikethrough = false;
629
- break;
630
- // Foreground colors 30-37
631
- case 30:
632
- case 31:
633
- case 32:
634
- case 33:
635
- case 34:
636
- case 35:
637
- case 36:
638
- case 37:
639
- attrs.fg = { ...PALETTE_256[code - 30] };
640
- break;
641
- case 38: {
642
- // Extended foreground: 38;5;N (256) or 38;2;R;G;B (truecolor)
643
- const result = parseExtendedColor(params, i);
644
- if (result) {
645
- attrs.fg = result.color;
646
- i = result.nextIndex - 1; // -1 because loop increments
647
- }
648
- break;
649
- }
650
- case 39: // Default foreground
651
- attrs.fg = null;
652
- break;
653
- // Background colors 40-47
654
- case 40:
655
- case 41:
656
- case 42:
657
- case 43:
658
- case 44:
659
- case 45:
660
- case 46:
661
- case 47:
662
- attrs.bg = { ...PALETTE_256[code - 40] };
663
- break;
664
- case 48: {
665
- // Extended background: 48;5;N (256) or 48;2;R;G;B (truecolor)
666
- const result = parseExtendedColor(params, i);
667
- if (result) {
668
- attrs.bg = result.color;
669
- i = result.nextIndex - 1;
670
- }
671
- break;
672
- }
673
- case 49: // Default background
674
- attrs.bg = null;
675
- break;
676
- // Bright foreground 90-97
677
- case 90:
678
- case 91:
679
- case 92:
680
- case 93:
681
- case 94:
682
- case 95:
683
- case 96:
684
- case 97:
685
- attrs.fg = { ...PALETTE_256[code - 90 + 8] };
686
- break;
687
- // Bright background 100-107
688
- case 100:
689
- case 101:
690
- case 102:
691
- case 103:
692
- case 104:
693
- case 105:
694
- case 106:
695
- case 107:
696
- attrs.bg = { ...PALETTE_256[code - 100 + 8] };
697
- break;
698
- }
699
- i++;
700
- }
701
- }
702
- function parseExtendedColor(params, startIndex) {
703
- if (startIndex + 1 >= params.length)
704
- return null;
705
- const type = params[startIndex + 1];
706
- if (type === 5 && startIndex + 2 < params.length) {
707
- // 256-color: 38;5;N
708
- const idx = params[startIndex + 2];
709
- const color = PALETTE_256[idx] ?? { r: 0, g: 0, b: 0 };
710
- return { color: { ...color }, nextIndex: startIndex + 3 };
711
- }
712
- else if (type === 2 && startIndex + 4 < params.length) {
713
- // Truecolor: 38;2;R;G;B
714
- return {
715
- color: {
716
- r: params[startIndex + 2],
717
- g: params[startIndex + 3],
718
- b: params[startIndex + 4],
719
- },
720
- nextIndex: startIndex + 5,
721
- };
722
- }
723
- return null;
724
- }
725
- // ── OSC handler ──
726
- function handleOSC(oscString) {
727
- const semicolonIdx = oscString.indexOf(";");
728
- if (semicolonIdx === -1)
729
- return;
730
- const code = parseInt(oscString.substring(0, semicolonIdx), 10);
731
- const value = oscString.substring(semicolonIdx + 1);
732
- switch (code) {
733
- case 0: // Set icon name and window title
734
- case 2: // Set window title
735
- title = value;
736
- break;
737
- case 1: // Set icon name (ignore)
738
- break;
739
- }
740
- }
741
- // ── Main parser ──
742
- function process(data) {
743
- const text = decoder.decode(data, { stream: true });
744
- for (let i = 0; i < text.length; i++) {
745
- const ch = text[i];
746
- const code = text.charCodeAt(i);
747
- switch (parserState) {
748
- case "ground":
749
- if (code === 0x1b) {
750
- parserState = "escape";
751
- escBuf = "";
752
- }
753
- else if (code === 0x07) {
754
- // BEL — ignore
755
- }
756
- else if (code === 0x08) {
757
- // BS - Backspace
758
- if (curX > 0)
759
- curX--;
760
- }
761
- else if (code === 0x09) {
762
- // TAB
763
- curX = Math.min((Math.floor(curX / 8) + 1) * 8, cols - 1);
764
- }
765
- else if (code === 0x0a || code === 0x0b || code === 0x0c) {
766
- // LF, VT, FF — linefeed
767
- curY++;
768
- if (curY > scrollBottom) {
769
- curY = scrollBottom;
770
- scrollUp(scrollTop, scrollBottom);
771
- }
772
- }
773
- else if (code === 0x0d) {
774
- // CR - Carriage Return
775
- curX = 0;
776
- }
777
- else if (code >= 0x20) {
778
- // Handle surrogate pairs for characters > U+FFFF
779
- let char = ch;
780
- if (code >= 0xd800 && code <= 0xdbff && i + 1 < text.length) {
781
- const nextCode = text.charCodeAt(i + 1);
782
- if (nextCode >= 0xdc00 && nextCode <= 0xdfff) {
783
- char = ch + text[i + 1];
784
- i++;
785
- }
786
- }
787
- writeChar(char);
788
- }
789
- break;
790
- case "escape":
791
- if (ch === "[") {
792
- parserState = "csi";
793
- escBuf = "";
794
- }
795
- else if (ch === "]") {
796
- parserState = "osc";
797
- oscBuf = "";
798
- }
799
- else if (ch === "P") {
800
- parserState = "dcs";
801
- escBuf = "";
802
- }
803
- else if (ch === "c") {
804
- // RIS - Reset to Initial State
805
- fullReset();
806
- }
807
- else if (ch === "D") {
808
- // IND - Index (move cursor down, scroll if needed)
809
- curY++;
810
- if (curY > scrollBottom) {
811
- curY = scrollBottom;
812
- scrollUp(scrollTop, scrollBottom);
813
- }
814
- parserState = "ground";
815
- }
816
- else if (ch === "M") {
817
- // RI - Reverse Index (move cursor up, scroll if needed)
818
- curY--;
819
- if (curY < scrollTop) {
820
- curY = scrollTop;
821
- scrollDown(scrollTop, scrollBottom);
822
- }
823
- parserState = "ground";
824
- }
825
- else if (ch === "7") {
826
- // DECSC - Save Cursor + attributes + modes
827
- savedState = {
828
- curX,
829
- curY,
830
- attrs: { ...attrs, fg: attrs.fg ? { ...attrs.fg } : null, bg: attrs.bg ? { ...attrs.bg } : null },
831
- originMode,
832
- autoWrap,
833
- };
834
- parserState = "ground";
835
- }
836
- else if (ch === "8") {
837
- // DECRC - Restore Cursor + attributes + modes
838
- curX = savedState.curX;
839
- curY = savedState.curY;
840
- attrs = {
841
- ...savedState.attrs,
842
- fg: savedState.attrs.fg ? { ...savedState.attrs.fg } : null,
843
- bg: savedState.attrs.bg ? { ...savedState.attrs.bg } : null,
844
- };
845
- originMode = savedState.originMode;
846
- autoWrap = savedState.autoWrap;
847
- clampCursor();
848
- parserState = "ground";
849
- }
850
- else if (ch === "E") {
851
- // NEL - Next Line
852
- curX = 0;
853
- curY++;
854
- if (curY > scrollBottom) {
855
- curY = scrollBottom;
856
- scrollUp(scrollTop, scrollBottom);
857
- }
858
- parserState = "ground";
859
- }
860
- else {
861
- // Unknown escape — return to ground
862
- parserState = "ground";
863
- }
864
- break;
865
- case "csi":
866
- if (code >= 0x40 && code <= 0x7e) {
867
- // Final byte — dispatch CSI
868
- if (escBuf.startsWith("?")) {
869
- handleCSIPrivate(escBuf.substring(1), ch);
870
- }
871
- else {
872
- handleCSI(escBuf, ch);
873
- }
874
- parserState = "ground";
875
- }
876
- else if (escBuf.length >= 256) {
877
- // Buffer overflow — drop to ground to avoid unbounded accumulation
878
- parserState = "ground";
879
- }
880
- else {
881
- // Parameter or intermediate byte
882
- escBuf += ch;
883
- }
884
- break;
885
- case "osc":
886
- if (code === 0x07) {
887
- // BEL terminates OSC
888
- handleOSC(oscBuf);
889
- parserState = "ground";
890
- }
891
- else if (code === 0x1b) {
892
- // ESC might be start of ST (\x1b\\)
893
- parserState = "oscString";
894
- }
895
- else if (oscBuf.length >= 4096) {
896
- // Buffer overflow — drop to ground to avoid unbounded accumulation
897
- parserState = "ground";
898
- }
899
- else {
900
- oscBuf += ch;
901
- }
902
- break;
903
- case "oscString":
904
- if (ch === "\\") {
905
- // ST (String Terminator) — end of OSC
906
- handleOSC(oscBuf);
907
- }
908
- // Either way, back to ground
909
- parserState = "ground";
910
- break;
911
- case "dcs":
912
- // Consume until ST
913
- if (code === 0x1b) {
914
- parserState = "oscString"; // Reuse ST detection
915
- }
916
- break;
917
- }
918
- }
919
- }
920
- function fullReset() {
921
- mainGrid = makeGrid(cols, rows);
922
- altGrid = makeGrid(cols, rows);
923
- grid = mainGrid;
924
- scrollback = [];
925
- curX = 0;
926
- curY = 0;
927
- curVisible = true;
928
- savedCurX = 0;
929
- savedCurY = 0;
930
- savedState = { curX: 0, curY: 0, attrs: resetAttrs(), originMode: false, autoWrap: true };
931
- attrs = resetAttrs();
932
- title = "";
933
- useAltScreen = false;
934
- bracketedPaste = false;
935
- applicationCursor = false;
936
- applicationKeypad = false;
937
- autoWrap = true;
938
- mouseTracking = false;
939
- focusTracking = false;
940
- originMode = false;
941
- insertMode = false;
942
- reverseVideo = false;
943
- scrollTop = 0;
944
- scrollBottom = rows - 1;
945
- viewportOffset = 0;
946
- parserState = "ground";
947
- escBuf = "";
948
- oscBuf = "";
949
- }
950
- function resize(newCols, newRows) {
951
- const newMain = makeGrid(newCols, newRows);
952
- const newAlt = makeGrid(newCols, newRows);
953
- // Copy content from old grids
954
- copyGrid(mainGrid, newMain, Math.min(cols, newCols), Math.min(rows, newRows));
955
- copyGrid(altGrid, newAlt, Math.min(cols, newCols), Math.min(rows, newRows));
956
- mainGrid = newMain;
957
- altGrid = newAlt;
958
- grid = useAltScreen ? altGrid : mainGrid;
959
- cols = newCols;
960
- rows = newRows;
961
- scrollTop = 0;
962
- scrollBottom = rows - 1;
963
- clampCursor();
964
- }
965
- function copyGrid(src, dst, copyCols, copyRows) {
966
- for (let row = 0; row < copyRows; row++) {
967
- for (let col = 0; col < copyCols; col++) {
968
- const srcCell = src[row]?.[col];
969
- if (srcCell) {
970
- dst[row][col] = { ...srcCell };
971
- }
972
- }
973
- }
974
- }
975
- function getCell(row, col) {
976
- const r = grid[row];
977
- if (!r || col >= cols)
978
- return emptyCell();
979
- return { ...r[col] };
980
- }
981
- function getLine(row) {
982
- const r = grid[row];
983
- if (!r)
984
- return makeRow(cols);
985
- return r.map((cell) => ({ ...cell }));
986
- }
987
- function getText() {
988
- const lines = [];
989
- // Scrollback
990
- for (const row of scrollback) {
991
- lines.push(rowToString(row));
992
- }
993
- // Screen
994
- for (let r = 0; r < rows; r++) {
995
- lines.push(rowToString(grid[r]));
996
- }
997
- return lines.join("\n");
998
- }
999
- function rowToString(row) {
1000
- let line = "";
1001
- for (let i = 0; i < row.length; i++) {
1002
- const cell = row[i];
1003
- if (cell.wide) {
1004
- line += cell.char;
1005
- }
1006
- else if (cell.char === "") {
1007
- // Skip spacer cells after wide chars, otherwise treat as space
1008
- if (i > 0 && row[i - 1]?.wide) {
1009
- continue;
1010
- }
1011
- line += " ";
1012
- }
1013
- else {
1014
- line += cell.char;
1015
- }
1016
- }
1017
- return line.replace(/\s+$/, ""); // Trim trailing whitespace
1018
- }
1019
- function getTextRange(startRow, startCol, endRow, endCol) {
1020
- const parts = [];
1021
- for (let row = startRow; row <= endRow; row++) {
1022
- const r = grid[row];
1023
- if (!r)
1024
- continue;
1025
- const colStart = row === startRow ? startCol : 0;
1026
- const colEnd = row === endRow ? endCol : cols;
1027
- let line = "";
1028
- for (let col = colStart; col < colEnd; col++) {
1029
- const cell = r[col];
1030
- if (!cell)
1031
- continue;
1032
- if (cell.char === "" && col > 0 && r[col - 1]?.wide)
1033
- continue; // Skip spacer
1034
- line += cell.char || " ";
1035
- }
1036
- parts.push(line.replace(/\s+$/, ""));
1037
- }
1038
- return parts.join("\n");
1039
- }
1040
- function getMode(mode) {
1041
- switch (mode) {
1042
- case "altScreen":
1043
- return useAltScreen;
1044
- case "cursorVisible":
1045
- return curVisible;
1046
- case "bracketedPaste":
1047
- return bracketedPaste;
1048
- case "applicationCursor":
1049
- return applicationCursor;
1050
- case "applicationKeypad":
1051
- return applicationKeypad;
1052
- case "autoWrap":
1053
- return autoWrap;
1054
- case "mouseTracking":
1055
- return mouseTracking;
1056
- case "focusTracking":
1057
- return focusTracking;
1058
- case "originMode":
1059
- return originMode;
1060
- case "insertMode":
1061
- return insertMode;
1062
- case "reverseVideo":
1063
- return reverseVideo;
1064
- default:
1065
- return false;
1066
- }
1067
- }
1068
- return {
1069
- get cols() {
1070
- return cols;
1071
- },
1072
- get rows() {
1073
- return rows;
1074
- },
1075
- process,
1076
- resize,
1077
- reset: fullReset,
1078
- getCell,
1079
- getLine,
1080
- getText,
1081
- getTextRange,
1082
- getCursorPosition: () => ({ x: curX, y: curY }),
1083
- getCursorVisible: () => curVisible,
1084
- getTitle: () => title,
1085
- getMode,
1086
- getScrollbackLength: () => scrollback.length,
1087
- getViewportOffset: () => viewportOffset,
1088
- scrollViewport: (delta) => {
1089
- viewportOffset = Math.max(0, Math.min(scrollback.length, viewportOffset + delta));
1090
- },
1091
- };
1092
- }
1093
- //# sourceMappingURL=screen.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screen.js","sourceRoot":"","sources":["../src/screen.ts"],"names":[],"mappings":"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"}