@suds-cli/tea 0.0.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/dist/commands.d.ts +27 -0
- package/dist/commands.d.ts.map +1 -0
- package/dist/commands.js +106 -0
- package/dist/commands.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +8 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +98 -0
- package/dist/input.js.map +1 -0
- package/dist/keys.d.ts +86 -0
- package/dist/keys.d.ts.map +1 -0
- package/dist/keys.js +317 -0
- package/dist/keys.js.map +1 -0
- package/dist/messages.d.ts +78 -0
- package/dist/messages.d.ts.map +1 -0
- package/dist/messages.js +104 -0
- package/dist/messages.js.map +1 -0
- package/dist/mouse.d.ts +46 -0
- package/dist/mouse.d.ts.map +1 -0
- package/dist/mouse.js +167 -0
- package/dist/mouse.js.map +1 -0
- package/dist/program.d.ts +39 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +231 -0
- package/dist/program.js.map +1 -0
- package/dist/renderer.d.ts +19 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +49 -0
- package/dist/renderer.js.map +1 -0
- package/dist/screen.d.ts +22 -0
- package/dist/screen.d.ts.map +1 -0
- package/dist/screen.js +35 -0
- package/dist/screen.js.map +1 -0
- package/dist/terminal.d.ts +32 -0
- package/dist/terminal.d.ts.map +1 -0
- package/dist/terminal.js +119 -0
- package/dist/terminal.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/package.json +33 -0
package/dist/terminal.js
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TerminalController = void 0;
|
|
4
|
+
const CURSOR_SHOW = "\u001b[?25h";
|
|
5
|
+
const CURSOR_HIDE = "\u001b[?25l";
|
|
6
|
+
const CLEAR_SCREEN = "\u001b[2J";
|
|
7
|
+
const CURSOR_HOME = "\u001b[H";
|
|
8
|
+
const ALT_SCREEN_ON = "\u001b[?1049h";
|
|
9
|
+
const ALT_SCREEN_OFF = "\u001b[?1049l";
|
|
10
|
+
const MOUSE_CELL_ON = "\u001b[?1002h";
|
|
11
|
+
const MOUSE_ALL_ON = "\u001b[?1003h";
|
|
12
|
+
const MOUSE_SGR_ON = "\u001b[?1006h";
|
|
13
|
+
const MOUSE_CELL_OFF = "\u001b[?1002l";
|
|
14
|
+
const MOUSE_ALL_OFF = "\u001b[?1003l";
|
|
15
|
+
const MOUSE_SGR_OFF = "\u001b[?1006l";
|
|
16
|
+
const BRACKETED_PASTE_ON = "\u001b[?2004h";
|
|
17
|
+
const BRACKETED_PASTE_OFF = "\u001b[?2004l";
|
|
18
|
+
const REPORT_FOCUS_ON = "\u001b[?1004h";
|
|
19
|
+
const REPORT_FOCUS_OFF = "\u001b[?1004l";
|
|
20
|
+
class TerminalController {
|
|
21
|
+
input;
|
|
22
|
+
output;
|
|
23
|
+
rawMode = false;
|
|
24
|
+
altScreen = false;
|
|
25
|
+
bracketedPaste = false;
|
|
26
|
+
focusReporting = false;
|
|
27
|
+
constructor(input = process.stdin, output = process.stdout) {
|
|
28
|
+
this.input = input;
|
|
29
|
+
this.output = output;
|
|
30
|
+
}
|
|
31
|
+
enableRawMode() {
|
|
32
|
+
const asTty = this.input;
|
|
33
|
+
if (typeof asTty.isTTY === "boolean" &&
|
|
34
|
+
asTty.isTTY &&
|
|
35
|
+
typeof asTty.setRawMode === "function") {
|
|
36
|
+
asTty.setRawMode(true);
|
|
37
|
+
asTty.resume();
|
|
38
|
+
this.rawMode = true;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
disableRawMode() {
|
|
42
|
+
const asTty = this.input;
|
|
43
|
+
if (this.rawMode && typeof asTty.setRawMode === "function") {
|
|
44
|
+
asTty.setRawMode(false);
|
|
45
|
+
this.rawMode = false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
enterAltScreen() {
|
|
49
|
+
this.write(ALT_SCREEN_ON);
|
|
50
|
+
this.altScreen = true;
|
|
51
|
+
}
|
|
52
|
+
exitAltScreen() {
|
|
53
|
+
this.write(ALT_SCREEN_OFF);
|
|
54
|
+
this.altScreen = false;
|
|
55
|
+
}
|
|
56
|
+
clearScreen() {
|
|
57
|
+
this.write(`${CLEAR_SCREEN}${CURSOR_HOME}`);
|
|
58
|
+
}
|
|
59
|
+
showCursor() {
|
|
60
|
+
this.write(CURSOR_SHOW);
|
|
61
|
+
}
|
|
62
|
+
hideCursor() {
|
|
63
|
+
this.write(CURSOR_HIDE);
|
|
64
|
+
}
|
|
65
|
+
enableMouseCellMotion() {
|
|
66
|
+
this.write(MOUSE_CELL_ON);
|
|
67
|
+
this.write(MOUSE_SGR_ON);
|
|
68
|
+
}
|
|
69
|
+
enableMouseAllMotion() {
|
|
70
|
+
this.write(MOUSE_ALL_ON);
|
|
71
|
+
this.write(MOUSE_SGR_ON);
|
|
72
|
+
}
|
|
73
|
+
disableMouse() {
|
|
74
|
+
this.write(MOUSE_CELL_OFF);
|
|
75
|
+
this.write(MOUSE_ALL_OFF);
|
|
76
|
+
this.write(MOUSE_SGR_OFF);
|
|
77
|
+
}
|
|
78
|
+
enableBracketedPaste() {
|
|
79
|
+
this.write(BRACKETED_PASTE_ON);
|
|
80
|
+
this.bracketedPaste = true;
|
|
81
|
+
}
|
|
82
|
+
disableBracketedPaste() {
|
|
83
|
+
this.write(BRACKETED_PASTE_OFF);
|
|
84
|
+
this.bracketedPaste = false;
|
|
85
|
+
}
|
|
86
|
+
enableReportFocus() {
|
|
87
|
+
this.write(REPORT_FOCUS_ON);
|
|
88
|
+
this.focusReporting = true;
|
|
89
|
+
}
|
|
90
|
+
disableReportFocus() {
|
|
91
|
+
this.write(REPORT_FOCUS_OFF);
|
|
92
|
+
this.focusReporting = false;
|
|
93
|
+
}
|
|
94
|
+
setWindowTitle(title) {
|
|
95
|
+
this.write(`\u001b]0;${title}\u0007`);
|
|
96
|
+
}
|
|
97
|
+
cleanup() {
|
|
98
|
+
this.disableMouse();
|
|
99
|
+
if (this.focusReporting) {
|
|
100
|
+
this.disableReportFocus();
|
|
101
|
+
}
|
|
102
|
+
if (this.bracketedPaste) {
|
|
103
|
+
this.disableBracketedPaste();
|
|
104
|
+
}
|
|
105
|
+
this.showCursor();
|
|
106
|
+
if (this.altScreen) {
|
|
107
|
+
this.exitAltScreen();
|
|
108
|
+
}
|
|
109
|
+
this.disableRawMode();
|
|
110
|
+
}
|
|
111
|
+
write(data) {
|
|
112
|
+
if (data.length === 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
this.output.write(data);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.TerminalController = TerminalController;
|
|
119
|
+
//# sourceMappingURL=terminal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"terminal.js","sourceRoot":"","sources":["../src/terminal.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Message - any value that triggers an update.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* @public
|
|
6
|
+
* Message - must be discriminated for safe matching.
|
|
7
|
+
*/
|
|
8
|
+
export type Msg = {
|
|
9
|
+
readonly _tag: string;
|
|
10
|
+
};
|
|
11
|
+
export type Effect<M extends Msg = Msg> = M | M[] | null | undefined;
|
|
12
|
+
/** @public Function producing an effectful message or messages. */
|
|
13
|
+
export type EffectFn<M extends Msg = Msg> = () => Effect<M> | Promise<Effect<M>>;
|
|
14
|
+
/**
|
|
15
|
+
* @public
|
|
16
|
+
* Command - an async side effect that eventually yields a message.
|
|
17
|
+
* Use `null` to indicate no-op.
|
|
18
|
+
*/
|
|
19
|
+
export type Cmd<M extends Msg = Msg> = EffectFn<M> | null;
|
|
20
|
+
/**
|
|
21
|
+
* @public
|
|
22
|
+
* Elm-like model contract.
|
|
23
|
+
*/
|
|
24
|
+
export interface Model<M extends Msg = Msg, Self extends Model<M, Self> = any> {
|
|
25
|
+
init(): Cmd<M>;
|
|
26
|
+
update(msg: M): [Self, Cmd<M>];
|
|
27
|
+
view(): string;
|
|
28
|
+
}
|
|
29
|
+
/** @public Outcome of running a program. */
|
|
30
|
+
export type ProgramResult<M extends Model> = {
|
|
31
|
+
model: M;
|
|
32
|
+
error?: unknown;
|
|
33
|
+
};
|
|
34
|
+
/** @public Infer the message type carried by a model. */
|
|
35
|
+
export type ModelMsg<M> = M extends Model<infer MsgT, any> ? MsgT : Msg;
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;GAGG;AACH,MAAM,MAAM,GAAG,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE5C,MAAM,MAAM,MAAM,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;AACrE,mEAAmE;AACnE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,MACxC,MAAM,CAAC,CAAC,CAAC,GACT,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAEvB;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AAE1D;;;GAGG;AAEH,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,GAAG,GAAG,GAAG,EAAE,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG;IAC3E,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC;IACf,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,IAAI,MAAM,CAAC;CAChB;AAED,4CAA4C;AAC5C,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,KAAK,IAAI;IAC3C,KAAK,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,yDAAyD;AAEzD,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,IAAI,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@suds-cli/tea",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Bubble Tea-inspired runtime for Suds terminal UIs",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./dist/index.js",
|
|
10
|
+
"./package.json": "./package.json"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist"
|
|
14
|
+
],
|
|
15
|
+
"sideEffects": false,
|
|
16
|
+
"devDependencies": {
|
|
17
|
+
"@types/node": "^20.0.0",
|
|
18
|
+
"vitest": "^4.0.15",
|
|
19
|
+
"typescript": "5.8.2"
|
|
20
|
+
},
|
|
21
|
+
"engines": {
|
|
22
|
+
"node": ">=20.0.0"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"clean": "rm -rf dist",
|
|
26
|
+
"build": "pnpm run clean && tsc -p ./tsconfig.json",
|
|
27
|
+
"test": "vitest run --passWithNoTests",
|
|
28
|
+
"generate:api-report": "api-extractor run --local",
|
|
29
|
+
"check:api-report": "pnpm run generate:api-report",
|
|
30
|
+
"check:eslint": "pnpm run lint",
|
|
31
|
+
"lint": "eslint \"src/**/*.{ts,tsx}\""
|
|
32
|
+
}
|
|
33
|
+
}
|