@reliverse/relinka 1.1.4 → 1.1.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 (118) hide show
  1. package/dist-npm/components/anykey/index.js +77 -57
  2. package/dist-npm/components/block/block.js +61 -48
  3. package/dist-npm/components/checkbox/index.js +211 -178
  4. package/dist-npm/components/confirm/confirm-main.js +122 -86
  5. package/dist-npm/components/confirm/confirm-three.js +27 -24
  6. package/dist-npm/components/confirm/index.js +45 -36
  7. package/dist-npm/components/core/Separator.js +17 -15
  8. package/dist-npm/components/core/create-prompt.js +124 -101
  9. package/dist-npm/components/core/errors.js +15 -19
  10. package/dist-npm/components/core/hook-engine.js +120 -91
  11. package/dist-npm/components/core/index.js +12 -12
  12. package/dist-npm/components/core/key.js +6 -16
  13. package/dist-npm/components/core/lines.js +54 -45
  14. package/dist-npm/components/core/make-theme.js +30 -21
  15. package/dist-npm/components/core/position.js +23 -27
  16. package/dist-npm/components/core/promise-polyfill.js +14 -11
  17. package/dist-npm/components/core/screen-manager.js +74 -59
  18. package/dist-npm/components/core/theme.js +32 -22
  19. package/dist-npm/components/core/use-effect.js +15 -9
  20. package/dist-npm/components/core/use-keypress.js +23 -19
  21. package/dist-npm/components/core/use-memo.js +16 -10
  22. package/dist-npm/components/core/use-pagination.js +32 -33
  23. package/dist-npm/components/core/use-prefix.js +38 -40
  24. package/dist-npm/components/core/use-ref.js +5 -2
  25. package/dist-npm/components/core/use-state.js +23 -15
  26. package/dist-npm/components/core/useKeyPress.js +17 -14
  27. package/dist-npm/components/core/usePromptState.js +14 -8
  28. package/dist-npm/components/core/utils.js +16 -7
  29. package/dist-npm/components/date/date.js +204 -168
  30. package/dist-npm/components/editor/index.js +92 -71
  31. package/dist-npm/components/expand/index.js +124 -96
  32. package/dist-npm/components/figures/index.js +294 -283
  33. package/dist-npm/components/input/index.js +87 -61
  34. package/dist-npm/components/input/text-main.js +124 -86
  35. package/dist-npm/components/input/text.js +28 -24
  36. package/dist-npm/components/instance/basic.js +25 -17
  37. package/dist-npm/components/instance/browser.js +18 -14
  38. package/dist-npm/components/instance/reporter/basic.js +65 -46
  39. package/dist-npm/components/instance/reporter/browser.js +47 -44
  40. package/dist-npm/components/instance/reporter/fancy.js +96 -83
  41. package/dist-npm/components/instance/shared.js +2 -2
  42. package/dist-npm/components/mono/mono.js +62 -52
  43. package/dist-npm/components/mono/monoTwo.js +49 -35
  44. package/dist-npm/components/multiselect/group-multiselect.js +71 -55
  45. package/dist-npm/components/multiselect/multi-select-two.js +130 -98
  46. package/dist-npm/components/multiselect/multi-select.js +49 -43
  47. package/dist-npm/components/multiselect/multiselect-main.js +146 -120
  48. package/dist-npm/components/multiselect/num-multi-select.js +130 -98
  49. package/dist-npm/components/multiselect/num-multiselect-main.js +35 -24
  50. package/dist-npm/components/next-steps/next-steps.js +25 -24
  51. package/dist-npm/components/number/index.js +112 -78
  52. package/dist-npm/components/number/number-main.js +2 -96
  53. package/dist-npm/components/password/index.js +73 -54
  54. package/dist-npm/components/password/password-main.js +2 -120
  55. package/dist-npm/components/password/password-three.js +30 -26
  56. package/dist-npm/components/progressbar/ProgressBar.js +64 -45
  57. package/dist-npm/components/progressbar/helper.js +40 -33
  58. package/dist-npm/components/progressbar/index.js +1 -1
  59. package/dist-npm/components/prompts/create.js +44 -29
  60. package/dist-npm/components/prompts/index.js +45 -45
  61. package/dist-npm/components/prompts/prompt.js +260 -211
  62. package/dist-npm/components/prompts/promptTwo.js +605 -561
  63. package/dist-npm/components/prompts/relinka.js +295 -237
  64. package/dist-npm/components/range/range.js +294 -247
  65. package/dist-npm/components/rawlist/index.js +107 -87
  66. package/dist-npm/components/results/results.js +37 -31
  67. package/dist-npm/components/search/index.js +193 -148
  68. package/dist-npm/components/select/index.js +186 -148
  69. package/dist-npm/components/select/num-select-main.js +27 -27
  70. package/dist-npm/components/select/num-select.js +5 -125
  71. package/dist-npm/components/select/select-key.js +25 -24
  72. package/dist-npm/components/select/select-main.js +133 -109
  73. package/dist-npm/components/select/select-three.js +36 -32
  74. package/dist-npm/components/select/select-two.js +87 -95
  75. package/dist-npm/components/spinner/index.js +136 -107
  76. package/dist-npm/components/st-end/end.d.ts +1 -1
  77. package/dist-npm/components/st-end/end.js +26 -35
  78. package/dist-npm/components/st-end/start.d.ts +1 -1
  79. package/dist-npm/components/st-end/start.js +15 -30
  80. package/dist-npm/components/toggle/index.js +137 -113
  81. package/dist-npm/components/visual/animate/animate.js +10 -53
  82. package/dist-npm/components/visual/ascii-art/ascii-art.js +1 -12
  83. package/dist-npm/mod.js +2 -1
  84. package/dist-npm/testing/index.js +83 -58
  85. package/dist-npm/types/general.d.ts +2 -1
  86. package/dist-npm/types/general.js +1 -0
  87. package/dist-npm/types/index.js +3 -2
  88. package/dist-npm/types/keypress.js +36 -35
  89. package/dist-npm/types/readline.js +1 -0
  90. package/dist-npm/types/relinka.js +1 -0
  91. package/dist-npm/types/utils.js +1 -0
  92. package/dist-npm/utils/box.js +137 -135
  93. package/dist-npm/utils/color.js +74 -65
  94. package/dist-npm/utils/colorize.js +156 -124
  95. package/dist-npm/utils/component.js +657 -532
  96. package/dist-npm/utils/constants.js +63 -64
  97. package/dist-npm/utils/core.js +3 -2
  98. package/dist-npm/utils/decoder.js +223 -244
  99. package/dist-npm/utils/error.js +9 -4
  100. package/dist-npm/utils/errors.js +4 -14
  101. package/dist-npm/utils/format.js +24 -19
  102. package/dist-npm/utils/keypress.js +414 -316
  103. package/dist-npm/utils/log.js +15 -11
  104. package/dist-npm/utils/mapping.js +52 -45
  105. package/dist-npm/utils/messages.js +183 -183
  106. package/dist-npm/utils/platforms.js +20 -16
  107. package/dist-npm/utils/prompt-tmp.js +286 -235
  108. package/dist-npm/utils/prompt-two.js +286 -235
  109. package/dist-npm/utils/readline.js +7 -5
  110. package/dist-npm/utils/skeleton.js +170 -130
  111. package/dist-npm/utils/stream.js +2 -2
  112. package/dist-npm/utils/string.js +58 -44
  113. package/dist-npm/utils/terminal.js +34 -23
  114. package/dist-npm/utils/tree.js +41 -30
  115. package/dist-npm/utils/types.js +1 -0
  116. package/dist-npm/utils/utils.js +8 -8
  117. package/dist-npm/utils/variants.js +44 -36
  118. package/package.json +20 -28
@@ -1,327 +1,425 @@
1
- import { StringDecoder } from "./decoder.js";
2
- const metaKeyCodeRe = /^(?:\u001b)([a-zA-Z0-9])$/;
3
- const functionKeyCodeRe = (
4
-
5
- /^(?:\u001b+)(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([~^$])|(?:1;)?(\d+)?([a-zA-Z]))/
6
- );
1
+ import {StringDecoder} from './decoder.js';
2
+
3
+ const isFn = (a) => typeof a === 'function';
4
+ const isBool = (a) => typeof a === 'boolean';
5
+ const isString = (a) => typeof a === 'string';
6
+ const metaKeyCodeRe = /^\u001b([\dA-Za-z])$/;
7
+
8
+ const functionKeyCodeRe = /^\u001b+(O|N|\[|\[\[)(?:(\d+)(?:;(\d+))?([$^~])|(?:1;)?(\d+)?([A-Za-z]))/;
9
+
7
10
  const parse = (s, enc) => {
8
- let parts;
9
- const key = {
10
- name: void 0,
11
- ctrl: false,
12
- meta: false,
13
- shift: false,
14
- sequence: s.toString(enc || "utf-8"),
15
- raw: ""
16
- };
17
- if (Buffer.isBuffer(s)) {
18
- if (s[0] > 127 && s[1] === void 0) {
19
- s[0] -= 128;
20
- s = Buffer.from("\x1B" + s.toString(enc || "utf-8"));
21
- } else {
22
- s = s.toString(enc || "utf-8");
11
+ let parts;
12
+ const key = {
13
+ name: void 0,
14
+ ctrl: false,
15
+ meta: false,
16
+ shift: false,
17
+ sequence: s.toString(enc || 'utf-8'),
18
+ raw: '',
19
+ };
20
+
21
+ if (Buffer.isBuffer(s)) {
22
+ if (s[0] > 127 && s[1] === void 0) {
23
+ s[0] -= 128;
24
+ s = Buffer.from('\x1B' + s.toString(enc || 'utf-8'));
25
+ } else {
26
+ s = s.toString(enc || 'utf-8');
27
+ }
23
28
  }
24
- }
25
- const input = typeof s === "string" ? s : s.toString(enc || "utf-8");
26
- if (input === "\r") {
27
- key.name = "return";
28
- } else if (input === "\n") {
29
- key.name = "enter";
30
- } else if (input === " ") {
31
- key.name = "tab";
32
- } else if (input === "\b" || input === "\x7F" || input === "\x1B\x7F" || input === "\x1B\b") {
33
- key.name = "backspace";
34
- key.meta = input.startsWith("\x1B");
35
- } else if (input === "\x1B" || input === "\x1B\x1B") {
36
- key.name = "escape";
37
- key.meta = input.length === 2;
38
- } else if (input === " " || input === "\x1B ") {
39
- key.name = "space";
40
- key.meta = input.length === 2;
41
- } else if (input <= "") {
42
- key.name = String.fromCharCode(input.charCodeAt(0) + "a".charCodeAt(0) - 1);
43
- key.ctrl = true;
44
- } else if (input.length === 1 && input >= "a" && input <= "z") {
45
- key.name = input;
46
- } else if (input.length === 1 && input >= "A" && input <= "Z") {
47
- key.name = input.toLowerCase();
48
- key.shift = true;
49
- } else if (parts = metaKeyCodeRe.exec(input)) {
50
- key.name = parts[1].toLowerCase();
51
- key.meta = true;
52
- key.shift = /^[A-Z]$/.test(parts[1]);
53
- } else if (parts = functionKeyCodeRe.exec(input)) {
54
- const code = (parts[1] || "") + (parts[2] || "") + (parts[4] || "") + (parts[6] || "");
55
- const modifier = parseInt(parts[3] || parts[5] || "1", 10) - 1 || 0;
56
- key.ctrl = !!(modifier & 4);
57
- key.meta = !!(modifier & 10);
58
- key.shift = !!(modifier & 1);
59
- key.code = code;
60
- switch (code) {
61
- case "OP":
62
- key.name = "f1";
63
- break;
64
- case "OQ":
65
- key.name = "f2";
66
- break;
67
- case "OR":
68
- key.name = "f3";
69
- break;
70
- case "OS":
71
- key.name = "f4";
72
- break;
73
- case "[11~":
74
- key.name = "f1";
75
- break;
76
- case "[12~":
77
- key.name = "f2";
78
- break;
79
- case "[13~":
80
- key.name = "f3";
81
- break;
82
- case "[14~":
83
- key.name = "f4";
84
- break;
85
- case "[[A":
86
- key.name = "f1";
87
- break;
88
- case "[[B":
89
- key.name = "f2";
90
- break;
91
- case "[[C":
92
- key.name = "f3";
93
- break;
94
- case "[[D":
95
- key.name = "f4";
96
- break;
97
- case "[[E":
98
- key.name = "f5";
99
- break;
100
- case "[15~":
101
- key.name = "f5";
102
- break;
103
- case "[17~":
104
- key.name = "f6";
105
- break;
106
- case "[18~":
107
- key.name = "f7";
108
- break;
109
- case "[19~":
110
- key.name = "f8";
111
- break;
112
- case "[20~":
113
- key.name = "f9";
114
- break;
115
- case "[21~":
116
- key.name = "f10";
117
- break;
118
- case "[23~":
119
- key.name = "f11";
120
- break;
121
- case "[24~":
122
- key.name = "f12";
123
- break;
124
- case "[A":
125
- key.name = "up";
126
- break;
127
- case "[B":
128
- key.name = "down";
129
- break;
130
- case "[C":
131
- key.name = "right";
132
- break;
133
- case "[D":
134
- key.name = "left";
135
- break;
136
- case "[E":
137
- key.name = "clear";
138
- break;
139
- case "[F":
140
- key.name = "end";
141
- break;
142
- case "[H":
143
- key.name = "home";
144
- break;
145
- case "OA":
146
- key.name = "up";
147
- break;
148
- case "OB":
149
- key.name = "down";
150
- break;
151
- case "OC":
152
- key.name = "right";
153
- break;
154
- case "OD":
155
- key.name = "left";
156
- break;
157
- case "OE":
158
- key.name = "clear";
159
- break;
160
- case "OF":
161
- key.name = "end";
162
- break;
163
- case "OH":
164
- key.name = "home";
165
- break;
166
- case "[1~":
167
- key.name = "home";
168
- break;
169
- case "[2~":
170
- key.name = "insert";
171
- break;
172
- case "[3~":
173
- key.name = "delete";
174
- break;
175
- case "[4~":
176
- key.name = "end";
177
- break;
178
- case "[5~":
179
- key.name = "pageup";
180
- break;
181
- case "[6~":
182
- key.name = "pagedown";
183
- break;
184
- case "[[5~":
185
- key.name = "pageup";
186
- break;
187
- case "[[6~":
188
- key.name = "pagedown";
189
- break;
190
- case "[7~":
191
- key.name = "home";
192
- break;
193
- case "[8~":
194
- key.name = "end";
195
- break;
196
- case "[a":
197
- key.name = "up";
198
- key.shift = true;
199
- break;
200
- case "[b":
201
- key.name = "down";
202
- key.shift = true;
203
- break;
204
- case "[c":
205
- key.name = "right";
206
- key.shift = true;
207
- break;
208
- case "[d":
209
- key.name = "left";
210
- key.shift = true;
211
- break;
212
- case "[e":
213
- key.name = "clear";
214
- key.shift = true;
215
- break;
216
- case "[2$":
217
- key.name = "insert";
218
- key.shift = true;
219
- break;
220
- case "[3$":
221
- key.name = "delete";
222
- key.shift = true;
223
- break;
224
- case "[5$":
225
- key.name = "pageup";
226
- key.shift = true;
227
- break;
228
- case "[6$":
229
- key.name = "pagedown";
230
- key.shift = true;
231
- break;
232
- case "[7$":
233
- key.name = "home";
234
- key.shift = true;
235
- break;
236
- case "[8$":
237
- key.name = "end";
238
- key.shift = true;
239
- break;
240
- case "Oa":
241
- key.name = "up";
29
+
30
+ const input = isString(s) ? s : s.toString(enc || 'utf-8');
31
+
32
+ if (input === '\r') {
33
+ key.name = 'return';
34
+ } else if (input === '\n') {
35
+ key.name = 'enter';
36
+ } else if (input === ' ') {
37
+ key.name = 'tab';
38
+ } else if (input === '\b' || input === '\x7F' || input === '\x1B\x7F' || input === '\x1B\b') {
39
+ key.name = 'backspace';
40
+ key.meta = input.startsWith('\x1B');
41
+ } else if (input === '\x1B' || input === '\x1B\x1B') {
42
+ key.name = 'escape';
43
+ key.meta = input.length === 2;
44
+ } else if (input === ' ' || input === '\x1B ') {
45
+ key.name = 'space';
46
+ key.meta = input.length === 2;
47
+ } else if (input <= '') {
48
+ key.name = String.fromCharCode(input.charCodeAt(0) + 'a'.charCodeAt(0) - 1);
242
49
  key.ctrl = true;
243
- break;
244
- case "Ob":
245
- key.name = "down";
246
- key.ctrl = true;
247
- break;
248
- case "Oc":
249
- key.name = "right";
250
- key.ctrl = true;
251
- break;
252
- case "Od":
253
- key.name = "left";
254
- key.ctrl = true;
255
- break;
256
- case "Oe":
257
- key.name = "clear";
258
- key.ctrl = true;
259
- break;
260
- case "[2^":
261
- key.name = "insert";
262
- key.ctrl = true;
263
- break;
264
- case "[3^":
265
- key.name = "delete";
266
- key.ctrl = true;
267
- break;
268
- case "[5^":
269
- key.name = "pageup";
270
- key.ctrl = true;
271
- break;
272
- case "[6^":
273
- key.name = "pagedown";
274
- key.ctrl = true;
275
- break;
276
- case "[7^":
277
- key.name = "home";
278
- key.ctrl = true;
279
- break;
280
- case "[8^":
281
- key.name = "end";
282
- key.ctrl = true;
283
- break;
284
- case "[Z":
285
- key.name = "tab";
50
+ } else if (input.length === 1 && input >= 'a' && input <= 'z') {
51
+ key.name = input;
52
+ } else if (input.length === 1 && input >= 'A' && input <= 'Z') {
53
+ key.name = input.toLowerCase();
286
54
  key.shift = true;
287
- break;
288
- default:
289
- key.name = "undefined";
290
- break;
55
+ } else if (parts = metaKeyCodeRe.exec(input)) {
56
+ key.name = parts[1].toLowerCase();
57
+ key.meta = true;
58
+ key.shift = /^[A-Z]$/.test(parts[1]);
59
+ } else if (parts = functionKeyCodeRe.exec(input)) {
60
+ const code = (parts[1] || '') + (parts[2] || '') + (parts[4] || '') + (parts[6] || '');
61
+ const modifier = parseInt(parts[3] || parts[5] || '1', 10) - 1 || 0;
62
+
63
+ key.ctrl = !!(modifier & 4);
64
+ key.meta = !!(modifier & 10);
65
+ key.shift = !!(modifier & 1);
66
+ key.code = code;
67
+ switch(code) {
68
+ case 'OP':
69
+ key.name = 'f1';
70
+ break;
71
+
72
+ case 'OQ':
73
+ key.name = 'f2';
74
+ break;
75
+
76
+ case 'OR':
77
+ key.name = 'f3';
78
+ break;
79
+
80
+ case 'OS':
81
+ key.name = 'f4';
82
+ break;
83
+
84
+ case '[11~':
85
+ key.name = 'f1';
86
+ break;
87
+
88
+ case '[12~':
89
+ key.name = 'f2';
90
+ break;
91
+
92
+ case '[13~':
93
+ key.name = 'f3';
94
+ break;
95
+
96
+ case '[14~':
97
+ key.name = 'f4';
98
+ break;
99
+
100
+ case '[[A':
101
+ key.name = 'f1';
102
+ break;
103
+
104
+ case '[[B':
105
+ key.name = 'f2';
106
+ break;
107
+
108
+ case '[[C':
109
+ key.name = 'f3';
110
+ break;
111
+
112
+ case '[[D':
113
+ key.name = 'f4';
114
+ break;
115
+
116
+ case '[[E':
117
+ key.name = 'f5';
118
+ break;
119
+
120
+ case '[15~':
121
+ key.name = 'f5';
122
+ break;
123
+
124
+ case '[17~':
125
+ key.name = 'f6';
126
+ break;
127
+
128
+ case '[18~':
129
+ key.name = 'f7';
130
+ break;
131
+
132
+ case '[19~':
133
+ key.name = 'f8';
134
+ break;
135
+
136
+ case '[20~':
137
+ key.name = 'f9';
138
+ break;
139
+
140
+ case '[21~':
141
+ key.name = 'f10';
142
+ break;
143
+
144
+ case '[23~':
145
+ key.name = 'f11';
146
+ break;
147
+
148
+ case '[24~':
149
+ key.name = 'f12';
150
+ break;
151
+
152
+ case '[A':
153
+ key.name = 'up';
154
+ break;
155
+
156
+ case '[B':
157
+ key.name = 'down';
158
+ break;
159
+
160
+ case '[C':
161
+ key.name = 'right';
162
+ break;
163
+
164
+ case '[D':
165
+ key.name = 'left';
166
+ break;
167
+
168
+ case '[E':
169
+ key.name = 'clear';
170
+ break;
171
+
172
+ case '[F':
173
+ key.name = 'end';
174
+ break;
175
+
176
+ case '[H':
177
+ key.name = 'home';
178
+ break;
179
+
180
+ case 'OA':
181
+ key.name = 'up';
182
+ break;
183
+
184
+ case 'OB':
185
+ key.name = 'down';
186
+ break;
187
+
188
+ case 'OC':
189
+ key.name = 'right';
190
+ break;
191
+
192
+ case 'OD':
193
+ key.name = 'left';
194
+ break;
195
+
196
+ case 'OE':
197
+ key.name = 'clear';
198
+ break;
199
+
200
+ case 'OF':
201
+ key.name = 'end';
202
+ break;
203
+
204
+ case 'OH':
205
+ key.name = 'home';
206
+ break;
207
+
208
+ case '[1~':
209
+ key.name = 'home';
210
+ break;
211
+
212
+ case '[2~':
213
+ key.name = 'insert';
214
+ break;
215
+
216
+ case '[3~':
217
+ key.name = 'delete';
218
+ break;
219
+
220
+ case '[4~':
221
+ key.name = 'end';
222
+ break;
223
+
224
+ case '[5~':
225
+ key.name = 'pageup';
226
+ break;
227
+
228
+ case '[6~':
229
+ key.name = 'pagedown';
230
+ break;
231
+
232
+ case '[[5~':
233
+ key.name = 'pageup';
234
+ break;
235
+
236
+ case '[[6~':
237
+ key.name = 'pagedown';
238
+ break;
239
+
240
+ case '[7~':
241
+ key.name = 'home';
242
+ break;
243
+
244
+ case '[8~':
245
+ key.name = 'end';
246
+ break;
247
+
248
+ case '[a':
249
+ key.name = 'up';
250
+ key.shift = true;
251
+ break;
252
+
253
+ case '[b':
254
+ key.name = 'down';
255
+ key.shift = true;
256
+ break;
257
+
258
+ case '[c':
259
+ key.name = 'right';
260
+ key.shift = true;
261
+ break;
262
+
263
+ case '[d':
264
+ key.name = 'left';
265
+ key.shift = true;
266
+ break;
267
+
268
+ case '[e':
269
+ key.name = 'clear';
270
+ key.shift = true;
271
+ break;
272
+
273
+ case '[2$':
274
+ key.name = 'insert';
275
+ key.shift = true;
276
+ break;
277
+
278
+ case '[3$':
279
+ key.name = 'delete';
280
+ key.shift = true;
281
+ break;
282
+
283
+ case '[5$':
284
+ key.name = 'pageup';
285
+ key.shift = true;
286
+ break;
287
+
288
+ case '[6$':
289
+ key.name = 'pagedown';
290
+ key.shift = true;
291
+ break;
292
+
293
+ case '[7$':
294
+ key.name = 'home';
295
+ key.shift = true;
296
+ break;
297
+
298
+ case '[8$':
299
+ key.name = 'end';
300
+ key.shift = true;
301
+ break;
302
+
303
+ case 'Oa':
304
+ key.name = 'up';
305
+ key.ctrl = true;
306
+ break;
307
+
308
+ case 'Ob':
309
+ key.name = 'down';
310
+ key.ctrl = true;
311
+ break;
312
+
313
+ case 'Oc':
314
+ key.name = 'right';
315
+ key.ctrl = true;
316
+ break;
317
+
318
+ case 'Od':
319
+ key.name = 'left';
320
+ key.ctrl = true;
321
+ break;
322
+
323
+ case 'Oe':
324
+ key.name = 'clear';
325
+ key.ctrl = true;
326
+ break;
327
+
328
+ case '[2^':
329
+ key.name = 'insert';
330
+ key.ctrl = true;
331
+ break;
332
+
333
+ case '[3^':
334
+ key.name = 'delete';
335
+ key.ctrl = true;
336
+ break;
337
+
338
+ case '[5^':
339
+ key.name = 'pageup';
340
+ key.ctrl = true;
341
+ break;
342
+
343
+ case '[6^':
344
+ key.name = 'pagedown';
345
+ key.ctrl = true;
346
+ break;
347
+
348
+ case '[7^':
349
+ key.name = 'home';
350
+ key.ctrl = true;
351
+ break;
352
+
353
+ case '[8^':
354
+ key.name = 'end';
355
+ key.ctrl = true;
356
+ break;
357
+
358
+ case '[Z':
359
+ key.name = 'tab';
360
+ key.shift = true;
361
+ break;
362
+
363
+ default:
364
+ key.name = 'undefined';
365
+ break;
366
+ }
367
+ } else if (input.length > 1 && !input.startsWith('\x1B')) {
368
+ return Array
369
+ .from(input)
370
+ .flatMap((c) => parse(c, enc));
291
371
  }
292
- } else if (input.length > 1 && !input.startsWith("\x1B")) {
293
- return Array.from(input).map((c) => parse(c, enc)).flat();
294
- }
295
- key.raw = input;
296
- return key;
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+
381
+
382
+
383
+ key.raw = input;
384
+ return key;
297
385
  };
386
+
298
387
  const listenForKeys = (stream, callback) => {
299
- if (!stream || typeof stream.isRaw !== "boolean") {
300
- throw new Error("Invalid stream passed.");
301
- }
302
- if (typeof callback !== "function") {
303
- throw new Error("Invalid callback passed.");
304
- }
305
- const decoder = new StringDecoder("utf8");
306
- const onData = (raw) => {
307
- const data = decoder.write(raw);
308
- const keys = parse(data, "utf8");
309
- if (Array.isArray(keys)) {
310
- keys.forEach((key) => callback(key));
311
- } else {
312
- callback(keys);
388
+ if (!stream || !isBool(stream.isRaw)) {
389
+ throw Error('Invalid stream passed.');
390
+ }
391
+
392
+ if (!isFn(callback)) {
393
+ throw Error('Invalid callback passed.');
313
394
  }
314
- };
315
- const oldRawMode = stream.isRaw;
316
- stream.setRawMode(true);
317
- stream.on("data", onData);
318
- stream.resume();
319
- const stopListening = () => {
320
- stream.setRawMode(oldRawMode);
321
- stream.pause();
322
- stream.removeListener("data", onData);
323
- };
324
- return stopListening;
395
+
396
+ const decoder = new StringDecoder('utf8');
397
+
398
+ const onData = (raw) => {
399
+ const data = decoder.write(raw);
400
+ const keys = parse(data, 'utf8');
401
+
402
+ if (Array.isArray(keys)) {
403
+ for (const key of keys)
404
+ callback(key);
405
+ } else {
406
+ callback(keys);
407
+ }
408
+ };
409
+
410
+ const oldRawMode = stream.isRaw;
411
+
412
+ stream.setRawMode(true);
413
+ stream.on('data', onData);
414
+ stream.resume();
415
+ const stopListening = () => {
416
+ stream.setRawMode(oldRawMode);
417
+ stream.pause();
418
+ stream.removeListener('data', onData);
419
+ };
420
+
421
+ return stopListening;
325
422
  };
423
+
326
424
  listenForKeys.parse = parse;
327
425
  export default listenForKeys;