@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.
Files changed (45) hide show
  1. package/dist/commands.d.ts +27 -0
  2. package/dist/commands.d.ts.map +1 -0
  3. package/dist/commands.js +106 -0
  4. package/dist/commands.js.map +1 -0
  5. package/dist/index.d.ts +12 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +52 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/input.d.ts +8 -0
  10. package/dist/input.d.ts.map +1 -0
  11. package/dist/input.js +98 -0
  12. package/dist/input.js.map +1 -0
  13. package/dist/keys.d.ts +86 -0
  14. package/dist/keys.d.ts.map +1 -0
  15. package/dist/keys.js +317 -0
  16. package/dist/keys.js.map +1 -0
  17. package/dist/messages.d.ts +78 -0
  18. package/dist/messages.d.ts.map +1 -0
  19. package/dist/messages.js +104 -0
  20. package/dist/messages.js.map +1 -0
  21. package/dist/mouse.d.ts +46 -0
  22. package/dist/mouse.d.ts.map +1 -0
  23. package/dist/mouse.js +167 -0
  24. package/dist/mouse.js.map +1 -0
  25. package/dist/program.d.ts +39 -0
  26. package/dist/program.d.ts.map +1 -0
  27. package/dist/program.js +231 -0
  28. package/dist/program.js.map +1 -0
  29. package/dist/renderer.d.ts +19 -0
  30. package/dist/renderer.d.ts.map +1 -0
  31. package/dist/renderer.js +49 -0
  32. package/dist/renderer.js.map +1 -0
  33. package/dist/screen.d.ts +22 -0
  34. package/dist/screen.d.ts.map +1 -0
  35. package/dist/screen.js +35 -0
  36. package/dist/screen.js.map +1 -0
  37. package/dist/terminal.d.ts +32 -0
  38. package/dist/terminal.d.ts.map +1 -0
  39. package/dist/terminal.js +119 -0
  40. package/dist/terminal.js.map +1 -0
  41. package/dist/types.d.ts +36 -0
  42. package/dist/types.d.ts.map +1 -0
  43. package/dist/types.js +3 -0
  44. package/dist/types.js.map +1 -0
  45. package/package.json +33 -0
@@ -0,0 +1,27 @@
1
+ import { Cmd, Msg } from "./types.js";
2
+ /**
3
+ * @public
4
+ * Run multiple commands concurrently and flatten their results.
5
+ */
6
+ export declare function batch<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M>;
7
+ /**
8
+ * @public
9
+ * Run commands sequentially, preserving order and skipping nulls.
10
+ */
11
+ export declare function sequence<M extends Msg>(...cmds: Array<Cmd<M>>): Cmd<M>;
12
+ /**
13
+ * @public
14
+ * Emit a message after a delay.
15
+ */
16
+ export declare function tick<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M>;
17
+ /**
18
+ * @public
19
+ * Schedule a single message aligned to the next interval boundary.
20
+ * Call again from your update loop to continue a repeating cadence.
21
+ */
22
+ export declare function every<M extends Msg>(ms: number, fn: (t: Date) => M): Cmd<M>;
23
+ /** @public Lift a message into a command. */
24
+ export declare const msg: <M extends Msg>(value: M) => Cmd<M>;
25
+ /** @public Command that emits a QuitMsg. */
26
+ export declare const quit: () => Cmd<Msg>;
27
+ //# sourceMappingURL=commands.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.d.ts","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAU,GAAG,EAAE,MAAM,YAAY,CAAC;AAM9C;;;GAGG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAenE;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,GAAG,EAAE,GAAG,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAmBtE;AAED;;;GAGG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAK1E;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,CAAC,SAAS,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAO3E;AAED,6CAA6C;AAC7C,eAAO,MAAM,GAAG,GACb,CAAC,SAAS,GAAG,EAAE,OAAO,CAAC,KAAG,GAAG,CAAC,CAAC,CAEzB,CAAC;AACV,4CAA4C;AAC5C,eAAO,MAAM,IAAI,QAAO,GAAG,CAAC,GAAG,CAAuB,CAAC"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.quit = exports.msg = void 0;
4
+ exports.batch = batch;
5
+ exports.sequence = sequence;
6
+ exports.tick = tick;
7
+ exports.every = every;
8
+ const messages_js_1 = require("./messages.js");
9
+ const now = () => new Date();
10
+ /**
11
+ * @public
12
+ * Run multiple commands concurrently and flatten their results.
13
+ */
14
+ function batch(...cmds) {
15
+ const valid = cmds.filter((cmd) => Boolean(cmd));
16
+ if (valid.length === 0) {
17
+ return null;
18
+ }
19
+ if (valid.length === 1) {
20
+ const [only] = valid;
21
+ return only ?? null;
22
+ }
23
+ return async () => {
24
+ const results = await Promise.all(valid.map((cmd) => Promise.resolve(cmd?.())));
25
+ return flatten(results);
26
+ };
27
+ }
28
+ /**
29
+ * @public
30
+ * Run commands sequentially, preserving order and skipping nulls.
31
+ */
32
+ function sequence(...cmds) {
33
+ const valid = cmds.filter((cmd) => Boolean(cmd));
34
+ if (valid.length === 0) {
35
+ return null;
36
+ }
37
+ if (valid.length === 1) {
38
+ const [only] = valid;
39
+ return only ?? null;
40
+ }
41
+ return async () => {
42
+ const messages = [];
43
+ for (const cmd of valid) {
44
+ const result = await Promise.resolve(cmd?.());
45
+ if (result !== null && result !== undefined) {
46
+ messages.push(result);
47
+ }
48
+ }
49
+ return flatten(messages);
50
+ };
51
+ }
52
+ /**
53
+ * @public
54
+ * Emit a message after a delay.
55
+ */
56
+ function tick(ms, fn) {
57
+ return () => new Promise((resolve) => {
58
+ setTimeout(() => resolve(fn(now())), ms);
59
+ });
60
+ }
61
+ /**
62
+ * @public
63
+ * Schedule a single message aligned to the next interval boundary.
64
+ * Call again from your update loop to continue a repeating cadence.
65
+ */
66
+ function every(ms, fn) {
67
+ return () => new Promise((resolve) => {
68
+ const current = now();
69
+ const delay = alignToInterval(current, ms);
70
+ setTimeout(() => resolve(fn(now())), delay);
71
+ });
72
+ }
73
+ /** @public Lift a message into a command. */
74
+ const msg = (value) => () => value;
75
+ exports.msg = msg;
76
+ /** @public Command that emits a QuitMsg. */
77
+ const quit = () => (0, exports.msg)(new messages_js_1.QuitMsg());
78
+ exports.quit = quit;
79
+ function flatten(values) {
80
+ const results = [];
81
+ for (const value of values) {
82
+ if (value === null || value === undefined) {
83
+ continue;
84
+ }
85
+ if (Array.isArray(value)) {
86
+ results.push(...value);
87
+ }
88
+ else {
89
+ results.push(value);
90
+ }
91
+ }
92
+ if (results.length === 0) {
93
+ return null;
94
+ }
95
+ if (results.length === 1) {
96
+ return results[0];
97
+ }
98
+ return results;
99
+ }
100
+ function alignToInterval(date, ms) {
101
+ const next = new Date(date);
102
+ next.setMilliseconds(0);
103
+ const remainder = date.getTime() % ms;
104
+ return remainder === 0 ? ms : ms - remainder;
105
+ }
106
+ //# sourceMappingURL=commands.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export { Program, type ProgramOptions } from "./program.js";
2
+ export type { Msg, Cmd, Model, ProgramResult } from "./types.js";
3
+ export { QuitMsg, InterruptMsg, SuspendMsg, ResumeMsg, WindowSizeMsg, FocusMsg, BlurMsg, ClearScreenMsg, EnterAltScreenMsg, ExitAltScreenMsg, EnableMouseCellMotionMsg, EnableMouseAllMotionMsg, DisableMouseMsg, ShowCursorMsg, HideCursorMsg, EnableReportFocusMsg, DisableReportFocusMsg, SetWindowTitleMsg, } from "./messages.js";
4
+ export { KeyMsg, KeyType, type Key, keyToString } from "./keys.js";
5
+ export { MouseMsg, MouseAction, MouseButton, type MouseEvent, } from "./mouse.js";
6
+ export { type InputOptions } from "./input.js";
7
+ export { type TerminalOptions } from "./terminal.js";
8
+ export { type RendererOptions } from "./renderer.js";
9
+ export { type EffectFn } from "./types.js";
10
+ export { batch, sequence, tick, every, quit, msg } from "./commands.js";
11
+ export { clearScreen, enableMouseCellMotion, enableMouseAllMotion, disableMouse, showCursor, hideCursor, setWindowTitle, windowSize, } from "./screen.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAC;AAC5D,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGjE,OAAO,EACL,OAAO,EACP,YAAY,EACZ,UAAU,EACV,SAAS,EACT,aAAa,EACb,QAAQ,EACR,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,gBAAgB,EAChB,wBAAwB,EACxB,uBAAuB,EACvB,eAAe,EACf,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnE,OAAO,EACL,QAAQ,EACR,WAAW,EACX,WAAW,EACX,KAAK,UAAU,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,oBAAoB,EACpB,YAAY,EACZ,UAAU,EACV,UAAU,EACV,cAAc,EACd,UAAU,GACX,MAAM,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.windowSize = exports.setWindowTitle = exports.hideCursor = exports.showCursor = exports.disableMouse = exports.enableMouseAllMotion = exports.enableMouseCellMotion = exports.clearScreen = exports.msg = exports.quit = exports.every = exports.tick = exports.sequence = exports.batch = exports.MouseButton = exports.MouseAction = exports.MouseMsg = exports.keyToString = exports.KeyType = exports.KeyMsg = exports.SetWindowTitleMsg = exports.DisableReportFocusMsg = exports.EnableReportFocusMsg = exports.HideCursorMsg = exports.ShowCursorMsg = exports.DisableMouseMsg = exports.EnableMouseAllMotionMsg = exports.EnableMouseCellMotionMsg = exports.ExitAltScreenMsg = exports.EnterAltScreenMsg = exports.ClearScreenMsg = exports.BlurMsg = exports.FocusMsg = exports.WindowSizeMsg = exports.ResumeMsg = exports.SuspendMsg = exports.InterruptMsg = exports.QuitMsg = exports.Program = void 0;
4
+ var program_js_1 = require("./program.js");
5
+ Object.defineProperty(exports, "Program", { enumerable: true, get: function () { return program_js_1.Program; } });
6
+ // Messages
7
+ var messages_js_1 = require("./messages.js");
8
+ Object.defineProperty(exports, "QuitMsg", { enumerable: true, get: function () { return messages_js_1.QuitMsg; } });
9
+ Object.defineProperty(exports, "InterruptMsg", { enumerable: true, get: function () { return messages_js_1.InterruptMsg; } });
10
+ Object.defineProperty(exports, "SuspendMsg", { enumerable: true, get: function () { return messages_js_1.SuspendMsg; } });
11
+ Object.defineProperty(exports, "ResumeMsg", { enumerable: true, get: function () { return messages_js_1.ResumeMsg; } });
12
+ Object.defineProperty(exports, "WindowSizeMsg", { enumerable: true, get: function () { return messages_js_1.WindowSizeMsg; } });
13
+ Object.defineProperty(exports, "FocusMsg", { enumerable: true, get: function () { return messages_js_1.FocusMsg; } });
14
+ Object.defineProperty(exports, "BlurMsg", { enumerable: true, get: function () { return messages_js_1.BlurMsg; } });
15
+ Object.defineProperty(exports, "ClearScreenMsg", { enumerable: true, get: function () { return messages_js_1.ClearScreenMsg; } });
16
+ Object.defineProperty(exports, "EnterAltScreenMsg", { enumerable: true, get: function () { return messages_js_1.EnterAltScreenMsg; } });
17
+ Object.defineProperty(exports, "ExitAltScreenMsg", { enumerable: true, get: function () { return messages_js_1.ExitAltScreenMsg; } });
18
+ Object.defineProperty(exports, "EnableMouseCellMotionMsg", { enumerable: true, get: function () { return messages_js_1.EnableMouseCellMotionMsg; } });
19
+ Object.defineProperty(exports, "EnableMouseAllMotionMsg", { enumerable: true, get: function () { return messages_js_1.EnableMouseAllMotionMsg; } });
20
+ Object.defineProperty(exports, "DisableMouseMsg", { enumerable: true, get: function () { return messages_js_1.DisableMouseMsg; } });
21
+ Object.defineProperty(exports, "ShowCursorMsg", { enumerable: true, get: function () { return messages_js_1.ShowCursorMsg; } });
22
+ Object.defineProperty(exports, "HideCursorMsg", { enumerable: true, get: function () { return messages_js_1.HideCursorMsg; } });
23
+ Object.defineProperty(exports, "EnableReportFocusMsg", { enumerable: true, get: function () { return messages_js_1.EnableReportFocusMsg; } });
24
+ Object.defineProperty(exports, "DisableReportFocusMsg", { enumerable: true, get: function () { return messages_js_1.DisableReportFocusMsg; } });
25
+ Object.defineProperty(exports, "SetWindowTitleMsg", { enumerable: true, get: function () { return messages_js_1.SetWindowTitleMsg; } });
26
+ // Input messages
27
+ var keys_js_1 = require("./keys.js");
28
+ Object.defineProperty(exports, "KeyMsg", { enumerable: true, get: function () { return keys_js_1.KeyMsg; } });
29
+ Object.defineProperty(exports, "KeyType", { enumerable: true, get: function () { return keys_js_1.KeyType; } });
30
+ Object.defineProperty(exports, "keyToString", { enumerable: true, get: function () { return keys_js_1.keyToString; } });
31
+ var mouse_js_1 = require("./mouse.js");
32
+ Object.defineProperty(exports, "MouseMsg", { enumerable: true, get: function () { return mouse_js_1.MouseMsg; } });
33
+ Object.defineProperty(exports, "MouseAction", { enumerable: true, get: function () { return mouse_js_1.MouseAction; } });
34
+ Object.defineProperty(exports, "MouseButton", { enumerable: true, get: function () { return mouse_js_1.MouseButton; } });
35
+ // Commands
36
+ var commands_js_1 = require("./commands.js");
37
+ Object.defineProperty(exports, "batch", { enumerable: true, get: function () { return commands_js_1.batch; } });
38
+ Object.defineProperty(exports, "sequence", { enumerable: true, get: function () { return commands_js_1.sequence; } });
39
+ Object.defineProperty(exports, "tick", { enumerable: true, get: function () { return commands_js_1.tick; } });
40
+ Object.defineProperty(exports, "every", { enumerable: true, get: function () { return commands_js_1.every; } });
41
+ Object.defineProperty(exports, "quit", { enumerable: true, get: function () { return commands_js_1.quit; } });
42
+ Object.defineProperty(exports, "msg", { enumerable: true, get: function () { return commands_js_1.msg; } });
43
+ var screen_js_1 = require("./screen.js");
44
+ Object.defineProperty(exports, "clearScreen", { enumerable: true, get: function () { return screen_js_1.clearScreen; } });
45
+ Object.defineProperty(exports, "enableMouseCellMotion", { enumerable: true, get: function () { return screen_js_1.enableMouseCellMotion; } });
46
+ Object.defineProperty(exports, "enableMouseAllMotion", { enumerable: true, get: function () { return screen_js_1.enableMouseAllMotion; } });
47
+ Object.defineProperty(exports, "disableMouse", { enumerable: true, get: function () { return screen_js_1.disableMouse; } });
48
+ Object.defineProperty(exports, "showCursor", { enumerable: true, get: function () { return screen_js_1.showCursor; } });
49
+ Object.defineProperty(exports, "hideCursor", { enumerable: true, get: function () { return screen_js_1.hideCursor; } });
50
+ Object.defineProperty(exports, "setWindowTitle", { enumerable: true, get: function () { return screen_js_1.setWindowTitle; } });
51
+ Object.defineProperty(exports, "windowSize", { enumerable: true, get: function () { return screen_js_1.windowSize; } });
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,2CAA4D;AAAnD,qGAAA,OAAO,OAAA;AAGhB,WAAW;AACX,6CAmBuB;AAlBrB,sGAAA,OAAO,OAAA;AACP,2GAAA,YAAY,OAAA;AACZ,yGAAA,UAAU,OAAA;AACV,wGAAA,SAAS,OAAA;AACT,4GAAA,aAAa,OAAA;AACb,uGAAA,QAAQ,OAAA;AACR,sGAAA,OAAO,OAAA;AACP,6GAAA,cAAc,OAAA;AACd,gHAAA,iBAAiB,OAAA;AACjB,+GAAA,gBAAgB,OAAA;AAChB,uHAAA,wBAAwB,OAAA;AACxB,sHAAA,uBAAuB,OAAA;AACvB,8GAAA,eAAe,OAAA;AACf,4GAAA,aAAa,OAAA;AACb,4GAAA,aAAa,OAAA;AACb,mHAAA,oBAAoB,OAAA;AACpB,oHAAA,qBAAqB,OAAA;AACrB,gHAAA,iBAAiB,OAAA;AAGnB,iBAAiB;AACjB,qCAAmE;AAA1D,iGAAA,MAAM,OAAA;AAAE,kGAAA,OAAO,OAAA;AAAY,sGAAA,WAAW,OAAA;AAC/C,uCAKoB;AAJlB,oGAAA,QAAQ,OAAA;AACR,uGAAA,WAAW,OAAA;AACX,uGAAA,WAAW,OAAA;AASb,WAAW;AACX,6CAAwE;AAA/D,oGAAA,KAAK,OAAA;AAAE,uGAAA,QAAQ,OAAA;AAAE,mGAAA,IAAI,OAAA;AAAE,oGAAA,KAAK,OAAA;AAAE,mGAAA,IAAI,OAAA;AAAE,kGAAA,GAAG,OAAA;AAChD,yCASqB;AARnB,wGAAA,WAAW,OAAA;AACX,kHAAA,qBAAqB,OAAA;AACrB,iHAAA,oBAAoB,OAAA;AACpB,yGAAA,YAAY,OAAA;AACZ,uGAAA,UAAU,OAAA;AACV,uGAAA,UAAU,OAAA;AACV,2GAAA,cAAc,OAAA;AACd,uGAAA,UAAU,OAAA"}
@@ -0,0 +1,8 @@
1
+ import type { Msg } from "./types.js";
2
+ /** @public Options for the input reader. */
3
+ export interface InputOptions {
4
+ input?: NodeJS.ReadableStream;
5
+ onMessage: (msg: Msg) => void;
6
+ }
7
+ export declare function startInput(options: InputOptions): () => void;
8
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEtC,4CAA4C;AAC5C,MAAM,WAAW,YAAY;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC9B,SAAS,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAC/B;AAKD,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,IAAI,CAgB5D"}
package/dist/input.js ADDED
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startInput = startInput;
4
+ const node_buffer_1 = require("node:buffer");
5
+ const messages_js_1 = require("./messages.js");
6
+ const keys_js_1 = require("./keys.js");
7
+ const mouse_js_1 = require("./mouse.js");
8
+ const BRACKET_PASTE_START = "\u001b[200~";
9
+ const BRACKET_PASTE_END = "\u001b[201~";
10
+ function startInput(options) {
11
+ const input = options.input ?? process.stdin;
12
+ let buffer = node_buffer_1.Buffer.alloc(0);
13
+ const onData = (data) => {
14
+ const chunk = typeof data === "string" ? node_buffer_1.Buffer.from(data, "utf8") : data;
15
+ buffer = node_buffer_1.Buffer.concat([buffer, chunk]);
16
+ buffer = consumeBuffer(buffer, options.onMessage);
17
+ };
18
+ input.on("data", onData);
19
+ input.resume();
20
+ return () => {
21
+ input.off("data", onData);
22
+ };
23
+ }
24
+ function consumeBuffer(buffer, push) {
25
+ let offset = 0;
26
+ while (offset < buffer.length) {
27
+ const slice = buffer.subarray(offset);
28
+ const result = detectOne(slice, offset + slice.length === buffer.length);
29
+ if (!result || "needMore" in result) {
30
+ break;
31
+ }
32
+ offset += result.length;
33
+ if (result.msg) {
34
+ push(result.msg);
35
+ }
36
+ }
37
+ return buffer.subarray(offset);
38
+ }
39
+ function detectOne(buffer, allowMoreData) {
40
+ if (buffer.length === 0) {
41
+ return allowMoreData ? { needMore: true } : undefined;
42
+ }
43
+ const mouse = (0, mouse_js_1.parseMouse)(buffer, allowMoreData);
44
+ if (mouse) {
45
+ if ("needMore" in mouse) {
46
+ return mouse;
47
+ }
48
+ return { msg: mouse.msg, length: mouse.length };
49
+ }
50
+ const focus = detectFocus(buffer);
51
+ if (focus) {
52
+ return focus;
53
+ }
54
+ const paste = detectBracketedPaste(buffer, allowMoreData);
55
+ if (paste) {
56
+ return paste;
57
+ }
58
+ const key = (0, keys_js_1.parseKey)(buffer, allowMoreData);
59
+ if (!key) {
60
+ return undefined;
61
+ }
62
+ if ("needMore" in key) {
63
+ return key;
64
+ }
65
+ return { msg: new keys_js_1.KeyMsg(key.key), length: key.length };
66
+ }
67
+ function detectFocus(buffer) {
68
+ // Focus in: ESC [ I, Focus out: ESC [ O (exactly three bytes)
69
+ if (buffer.length === 3 && buffer[0] === 0x1b && buffer[1] === 0x5b) {
70
+ if (buffer[2] === 0x49) {
71
+ return { msg: new messages_js_1.FocusMsg(), length: 3 };
72
+ }
73
+ if (buffer[2] === 0x4f) {
74
+ return { msg: new messages_js_1.BlurMsg(), length: 3 };
75
+ }
76
+ }
77
+ return undefined;
78
+ }
79
+ function detectBracketedPaste(buffer, allowMoreData) {
80
+ const asString = buffer.toString("utf8");
81
+ if (!asString.startsWith(BRACKET_PASTE_START)) {
82
+ return undefined;
83
+ }
84
+ const endIndex = asString.indexOf(BRACKET_PASTE_END, BRACKET_PASTE_START.length);
85
+ if (endIndex === -1) {
86
+ return allowMoreData ? { needMore: true } : undefined;
87
+ }
88
+ const content = asString.slice(BRACKET_PASTE_START.length, endIndex);
89
+ const length = node_buffer_1.Buffer.byteLength(BRACKET_PASTE_START + content + BRACKET_PASTE_END, "utf8");
90
+ const key = new keys_js_1.KeyMsg({
91
+ type: keys_js_1.KeyType.Runes,
92
+ runes: content,
93
+ alt: false,
94
+ paste: true,
95
+ });
96
+ return { msg: key, length };
97
+ }
98
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../src/input.ts"],"names":[],"mappings":"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"}
package/dist/keys.d.ts ADDED
@@ -0,0 +1,86 @@
1
+ import { Buffer } from "node:buffer";
2
+ /** @public Known key types parsed from terminal input. */
3
+ export declare enum KeyType {
4
+ Null = "null",
5
+ Break = "break",
6
+ Enter = "enter",
7
+ Backspace = "backspace",
8
+ Tab = "tab",
9
+ Esc = "esc",
10
+ Space = "space",
11
+ Runes = "runes",
12
+ Up = "up",
13
+ Down = "down",
14
+ Right = "right",
15
+ Left = "left",
16
+ ShiftTab = "shift+tab",
17
+ Home = "home",
18
+ End = "end",
19
+ PgUp = "pgup",
20
+ PgDown = "pgdown",
21
+ CtrlPgUp = "ctrl+pgup",
22
+ CtrlPgDown = "ctrl+pgdown",
23
+ Delete = "delete",
24
+ Insert = "insert",
25
+ CtrlUp = "ctrl+up",
26
+ CtrlDown = "ctrl+down",
27
+ CtrlRight = "ctrl+right",
28
+ CtrlLeft = "ctrl+left",
29
+ CtrlHome = "ctrl+home",
30
+ CtrlEnd = "ctrl+end",
31
+ ShiftUp = "shift+up",
32
+ ShiftDown = "shift+down",
33
+ ShiftRight = "shift+right",
34
+ ShiftLeft = "shift+left",
35
+ ShiftHome = "shift+home",
36
+ ShiftEnd = "shift+end",
37
+ CtrlShiftUp = "ctrl+shift+up",
38
+ CtrlShiftDown = "ctrl+shift+down",
39
+ CtrlShiftLeft = "ctrl+shift+left",
40
+ CtrlShiftRight = "ctrl+shift+right",
41
+ CtrlShiftHome = "ctrl+shift+home",
42
+ CtrlShiftEnd = "ctrl+shift+end",
43
+ F1 = "f1",
44
+ F2 = "f2",
45
+ F3 = "f3",
46
+ F4 = "f4",
47
+ F5 = "f5",
48
+ F6 = "f6",
49
+ F7 = "f7",
50
+ F8 = "f8",
51
+ F9 = "f9",
52
+ F10 = "f10",
53
+ F11 = "f11",
54
+ F12 = "f12",
55
+ F13 = "f13",
56
+ F14 = "f14",
57
+ F15 = "f15",
58
+ F16 = "f16",
59
+ F17 = "f17",
60
+ F18 = "f18",
61
+ F19 = "f19",
62
+ F20 = "f20"
63
+ }
64
+ /** @public Parsed key metadata. */
65
+ export interface Key {
66
+ type: KeyType;
67
+ runes: string;
68
+ alt: boolean;
69
+ paste: boolean;
70
+ }
71
+ /** @public Message representing a parsed key event. */
72
+ export declare class KeyMsg {
73
+ readonly key: Key;
74
+ readonly _tag = "key";
75
+ constructor(key: Key);
76
+ toString(): string;
77
+ }
78
+ /** @public Convert a parsed key to a human-readable string. */
79
+ export declare function keyToString(key: Key): string;
80
+ export declare function parseKey(buffer: Buffer, allowMoreData: boolean): {
81
+ key: Key;
82
+ length: number;
83
+ } | {
84
+ needMore: true;
85
+ } | undefined;
86
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../src/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,0DAA0D;AAC1D,oBAAY,OAAO;IACjB,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;IACf,SAAS,cAAc;IACvB,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,KAAK,UAAU;IACf,KAAK,UAAU;IACf,EAAE,OAAO;IACT,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,QAAQ,cAAc;IACtB,IAAI,SAAS;IACb,GAAG,QAAQ;IACX,IAAI,SAAS;IACb,MAAM,WAAW;IACjB,QAAQ,cAAc;IACtB,UAAU,gBAAgB;IAC1B,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,YAAY;IAClB,QAAQ,cAAc;IACtB,SAAS,eAAe;IACxB,QAAQ,cAAc;IACtB,QAAQ,cAAc;IACtB,OAAO,aAAa;IACpB,OAAO,aAAa;IACpB,SAAS,eAAe;IACxB,UAAU,gBAAgB;IAC1B,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB,QAAQ,cAAc;IACtB,WAAW,kBAAkB;IAC7B,aAAa,oBAAoB;IACjC,aAAa,oBAAoB;IACjC,cAAc,qBAAqB;IACnC,aAAa,oBAAoB;IACjC,YAAY,mBAAmB;IAC/B,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,EAAE,OAAO;IACT,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;IACX,GAAG,QAAQ;CACZ;AAED,mCAAmC;AACnC,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;CAChB;AA6KD,uDAAuD;AACvD,qBAAa,MAAM;aAEW,GAAG,EAAE,GAAG;IADpC,QAAQ,CAAC,IAAI,SAAS;gBACM,GAAG,EAAE,GAAG;IAEpC,QAAQ,IAAI,MAAM;CAGnB;AAED,+DAA+D;AAC/D,wBAAgB,WAAW,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAO5C;AAED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,OAAO,GACrB;IAAE,GAAG,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG,SAAS,CAwD/D"}