@macrulez/devtoolz 0.3.3 → 0.4.1

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 (85) hide show
  1. package/README.md +79 -3
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/image-batch/backup.d.ts +22 -0
  5. package/dist/commands/image-batch/backup.js +55 -0
  6. package/dist/commands/image-batch/backup.js.map +1 -0
  7. package/dist/commands/image-batch/cache.d.ts +15 -0
  8. package/dist/commands/image-batch/cache.js +38 -0
  9. package/dist/commands/image-batch/cache.js.map +1 -0
  10. package/dist/commands/image-batch/cli.d.ts +15 -0
  11. package/dist/commands/image-batch/cli.js +307 -0
  12. package/dist/commands/image-batch/cli.js.map +1 -0
  13. package/dist/commands/image-batch/codecs.d.ts +38 -0
  14. package/dist/commands/image-batch/codecs.js +366 -0
  15. package/dist/commands/image-batch/codecs.js.map +1 -0
  16. package/dist/commands/image-batch/config.d.ts +120 -0
  17. package/dist/commands/image-batch/config.js +679 -0
  18. package/dist/commands/image-batch/config.js.map +1 -0
  19. package/dist/commands/image-batch/errors.d.ts +5 -0
  20. package/dist/commands/image-batch/errors.js +8 -0
  21. package/dist/commands/image-batch/errors.js.map +1 -0
  22. package/dist/commands/image-batch/geometry.d.ts +26 -0
  23. package/dist/commands/image-batch/geometry.js +90 -0
  24. package/dist/commands/image-batch/geometry.js.map +1 -0
  25. package/dist/commands/image-batch/inputs.d.ts +22 -0
  26. package/dist/commands/image-batch/inputs.js +87 -0
  27. package/dist/commands/image-batch/inputs.js.map +1 -0
  28. package/dist/commands/image-batch/manage-cli.d.ts +2 -0
  29. package/dist/commands/image-batch/manage-cli.js +276 -0
  30. package/dist/commands/image-batch/manage-cli.js.map +1 -0
  31. package/dist/commands/image-batch/manage.d.ts +51 -0
  32. package/dist/commands/image-batch/manage.js +1041 -0
  33. package/dist/commands/image-batch/manage.js.map +1 -0
  34. package/dist/commands/image-batch/overwrite.d.ts +14 -0
  35. package/dist/commands/image-batch/overwrite.js +31 -0
  36. package/dist/commands/image-batch/overwrite.js.map +1 -0
  37. package/dist/commands/image-batch/plan.d.ts +86 -0
  38. package/dist/commands/image-batch/plan.js +396 -0
  39. package/dist/commands/image-batch/plan.js.map +1 -0
  40. package/dist/commands/image-batch/process.d.ts +8 -0
  41. package/dist/commands/image-batch/process.js +97 -0
  42. package/dist/commands/image-batch/process.js.map +1 -0
  43. package/dist/commands/image-batch/report.d.ts +6 -0
  44. package/dist/commands/image-batch/report.js +251 -0
  45. package/dist/commands/image-batch/report.js.map +1 -0
  46. package/dist/commands/image-batch/restore.d.ts +29 -0
  47. package/dist/commands/image-batch/restore.js +125 -0
  48. package/dist/commands/image-batch/restore.js.map +1 -0
  49. package/dist/commands/image-batch/run.d.ts +123 -0
  50. package/dist/commands/image-batch/run.js +649 -0
  51. package/dist/commands/image-batch/run.js.map +1 -0
  52. package/dist/commands/image-batch/sharpen-ask.d.ts +6 -0
  53. package/dist/commands/image-batch/sharpen-ask.js +53 -0
  54. package/dist/commands/image-batch/sharpen-ask.js.map +1 -0
  55. package/dist/commands/image-batch/sharpen-manage.d.ts +26 -0
  56. package/dist/commands/image-batch/sharpen-manage.js +238 -0
  57. package/dist/commands/image-batch/sharpen-manage.js.map +1 -0
  58. package/dist/commands/image-batch/sharpen-presets.d.ts +24 -0
  59. package/dist/commands/image-batch/sharpen-presets.js +145 -0
  60. package/dist/commands/image-batch/sharpen-presets.js.map +1 -0
  61. package/dist/commands/image-batch/sharpen.d.ts +46 -0
  62. package/dist/commands/image-batch/sharpen.js +159 -0
  63. package/dist/commands/image-batch/sharpen.js.map +1 -0
  64. package/dist/commands/image-batch/template.d.ts +45 -0
  65. package/dist/commands/image-batch/template.js +142 -0
  66. package/dist/commands/image-batch/template.js.map +1 -0
  67. package/dist/commands/image-hash/sharp-loader.d.ts +2 -0
  68. package/dist/commands/image-hash/sharp-loader.js +7 -5
  69. package/dist/commands/image-hash/sharp-loader.js.map +1 -1
  70. package/dist/format/bytes.d.ts +2 -0
  71. package/dist/format/bytes.js +17 -0
  72. package/dist/format/bytes.js.map +1 -0
  73. package/dist/index.d.ts +5 -0
  74. package/dist/index.js +3 -0
  75. package/dist/index.js.map +1 -1
  76. package/dist/utils/closest.d.ts +2 -0
  77. package/dist/utils/closest.js +35 -0
  78. package/dist/utils/closest.js.map +1 -0
  79. package/dist/utils/glob.d.ts +4 -0
  80. package/dist/utils/glob.js +86 -0
  81. package/dist/utils/glob.js.map +1 -0
  82. package/dist/utils/tty.d.ts +60 -0
  83. package/dist/utils/tty.js +390 -0
  84. package/dist/utils/tty.js.map +1 -0
  85. package/package.json +1 -1
@@ -0,0 +1,86 @@
1
+ const SPECIAL = /[.+^$()|\\]/g;
2
+ function convert(pattern) {
3
+ let out = '';
4
+ let i = 0;
5
+ let braceDepth = 0;
6
+ while (i < pattern.length) {
7
+ const ch = pattern[i];
8
+ if (ch === '*') {
9
+ if (pattern[i + 1] === '*') {
10
+ if (pattern[i + 2] === '/') {
11
+ out += '(?:.*/)?';
12
+ i += 3;
13
+ }
14
+ else {
15
+ out += '.*';
16
+ i += 2;
17
+ }
18
+ }
19
+ else {
20
+ out += '[^/]*';
21
+ i += 1;
22
+ }
23
+ }
24
+ else if (ch === '?') {
25
+ out += '[^/]';
26
+ i += 1;
27
+ }
28
+ else if (ch === '{') {
29
+ braceDepth += 1;
30
+ out += '(?:';
31
+ i += 1;
32
+ }
33
+ else if (ch === '}' && braceDepth > 0) {
34
+ braceDepth -= 1;
35
+ out += ')';
36
+ i += 1;
37
+ }
38
+ else if (ch === ',' && braceDepth > 0) {
39
+ out += '|';
40
+ i += 1;
41
+ }
42
+ else if (ch === '[') {
43
+ const end = pattern.indexOf(']', i + 1);
44
+ if (end === -1) {
45
+ out += '\\[';
46
+ i += 1;
47
+ }
48
+ else {
49
+ const body = pattern.slice(i + 1, end).replace(/^!/, '^');
50
+ out += `[${body}]`;
51
+ i = end + 1;
52
+ }
53
+ }
54
+ else {
55
+ out += ch.replace(SPECIAL, '\\$&');
56
+ i += 1;
57
+ }
58
+ }
59
+ return out;
60
+ }
61
+ export function hasGlobChars(text) {
62
+ return /[*?[\]{}]/.test(text);
63
+ }
64
+ function normalizePattern(pattern) {
65
+ return pattern.replace(/\\/g, '/').replace(/^\.\//, '');
66
+ }
67
+ export function globToRegExp(pattern) {
68
+ const normalized = normalizePattern(pattern);
69
+ const body = convert(normalized);
70
+ const anywhere = normalized.includes('/') ? '' : '(?:.*/)?';
71
+ return new RegExp(`^${anywhere}${body}$`, 'i');
72
+ }
73
+ export function matchGlob(pattern, path) {
74
+ return globToRegExp(pattern).test(path.replace(/\\/g, '/'));
75
+ }
76
+ export function literalPrefix(pattern) {
77
+ const segments = pattern.replace(/\\/g, '/').split('/');
78
+ const literal = [];
79
+ for (const segment of segments) {
80
+ if (hasGlobChars(segment))
81
+ break;
82
+ literal.push(segment);
83
+ }
84
+ return literal.join('/');
85
+ }
86
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/utils/glob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { Style } from '../format/style.js';
2
+ export interface TerminalInput {
3
+ isTTY?: boolean;
4
+ setRawMode?: (mode: boolean) => unknown;
5
+ resume: () => unknown;
6
+ pause: () => unknown;
7
+ setEncoding?: (encoding: BufferEncoding) => unknown;
8
+ on: (event: 'data', listener: (chunk: string | Buffer) => void) => unknown;
9
+ off: (event: 'data', listener: (chunk: string | Buffer) => void) => unknown;
10
+ }
11
+ export interface TerminalOutput {
12
+ isTTY?: boolean;
13
+ columns?: number;
14
+ rows?: number;
15
+ write: (text: string) => unknown;
16
+ }
17
+ export interface TerminalIO {
18
+ input: TerminalInput;
19
+ output: TerminalOutput;
20
+ }
21
+ export interface Key {
22
+ name: string;
23
+ ch?: string;
24
+ ctrl?: boolean;
25
+ }
26
+ export declare function parseKeys(data: string): Key[];
27
+ export declare class KeyReader {
28
+ private readonly input;
29
+ private readonly queue;
30
+ private waiting;
31
+ private readonly listener;
32
+ constructor(input: TerminalInput);
33
+ next(): Promise<Key>;
34
+ close(): void;
35
+ }
36
+ export declare function isInteractive(io: TerminalIO): boolean;
37
+ export declare function defaultTerminal(): TerminalIO;
38
+ export interface Choice<T extends string = string> {
39
+ key: T;
40
+ label: string;
41
+ }
42
+ export declare function promptChoice<T extends string>(io: TerminalIO, question: string, choices: Choice<T>[], style: Style, fallback?: T): Promise<T>;
43
+ export interface SelectItem<T> {
44
+ label: string;
45
+ hint?: string;
46
+ value: T;
47
+ selected?: boolean;
48
+ }
49
+ export interface SelectOptions {
50
+ title: string;
51
+ help?: string;
52
+ multi: boolean;
53
+ filterable?: boolean;
54
+ pageSize?: number;
55
+ emptyMessage?: string;
56
+ }
57
+ export declare function runSelect<T>(io: TerminalIO, items: SelectItem<T>[], options: SelectOptions, style: Style): Promise<T[] | null>;
58
+ export declare function multiSelect<T>(io: TerminalIO, items: SelectItem<T>[], options: Omit<SelectOptions, 'multi'>, style: Style): Promise<T[] | null>;
59
+ export declare function singleSelect<T>(io: TerminalIO, items: SelectItem<T>[], options: Omit<SelectOptions, 'multi'>, style: Style): Promise<T | null>;
60
+ export declare function askText(io: TerminalIO, question: string, style: Style, initial?: string): Promise<string | null>;
@@ -0,0 +1,390 @@
1
+ const ESCAPES = {
2
+ '[A': 'up',
3
+ '[B': 'down',
4
+ '[C': 'right',
5
+ '[D': 'left',
6
+ OA: 'up',
7
+ OB: 'down',
8
+ OC: 'right',
9
+ OD: 'left',
10
+ '[H': 'home',
11
+ '[F': 'end',
12
+ OH: 'home',
13
+ OF: 'end',
14
+ '[1~': 'home',
15
+ '[4~': 'end',
16
+ '[5~': 'pageup',
17
+ '[6~': 'pagedown',
18
+ '[3~': 'delete',
19
+ };
20
+ export function parseKeys(data) {
21
+ const keys = [];
22
+ let i = 0;
23
+ while (i < data.length) {
24
+ const ch = data[i];
25
+ if (ch === '\x1b') {
26
+ let matched = false;
27
+ for (const length of [4, 3, 2]) {
28
+ const name = ESCAPES[data.slice(i + 1, i + length)];
29
+ if (name !== undefined) {
30
+ keys.push({ name });
31
+ i += length;
32
+ matched = true;
33
+ break;
34
+ }
35
+ }
36
+ if (!matched) {
37
+ keys.push({ name: 'escape' });
38
+ i += 1;
39
+ }
40
+ }
41
+ else if (ch === '\x03') {
42
+ keys.push({ name: 'c', ctrl: true });
43
+ i += 1;
44
+ }
45
+ else if (ch === '\r' || ch === '\n') {
46
+ keys.push({ name: 'enter' });
47
+ i += ch === '\r' && data[i + 1] === '\n' ? 2 : 1;
48
+ }
49
+ else if (ch === '\x7f' || ch === '\b') {
50
+ keys.push({ name: 'backspace' });
51
+ i += 1;
52
+ }
53
+ else if (ch === ' ') {
54
+ keys.push({ name: 'space', ch });
55
+ i += 1;
56
+ }
57
+ else if (ch === '\t') {
58
+ keys.push({ name: 'tab' });
59
+ i += 1;
60
+ }
61
+ else if (ch >= ' ') {
62
+ keys.push({ name: ch, ch });
63
+ i += 1;
64
+ }
65
+ else {
66
+ i += 1;
67
+ }
68
+ }
69
+ return keys;
70
+ }
71
+ export class KeyReader {
72
+ input;
73
+ queue = [];
74
+ waiting = null;
75
+ listener = (chunk) => {
76
+ for (const key of parseKeys(typeof chunk === 'string' ? chunk : chunk.toString('utf8'))) {
77
+ if (this.waiting) {
78
+ const resolve = this.waiting;
79
+ this.waiting = null;
80
+ resolve(key);
81
+ }
82
+ else {
83
+ this.queue.push(key);
84
+ }
85
+ }
86
+ };
87
+ constructor(input) {
88
+ this.input = input;
89
+ input.setEncoding?.('utf8');
90
+ input.setRawMode?.(true);
91
+ input.resume();
92
+ input.on('data', this.listener);
93
+ }
94
+ next() {
95
+ const queued = this.queue.shift();
96
+ if (queued)
97
+ return Promise.resolve(queued);
98
+ return new Promise((resolve) => {
99
+ this.waiting = resolve;
100
+ });
101
+ }
102
+ close() {
103
+ this.input.off('data', this.listener);
104
+ this.input.setRawMode?.(false);
105
+ this.input.pause();
106
+ }
107
+ }
108
+ export function isInteractive(io) {
109
+ return Boolean(io.input.isTTY) && Boolean(io.output.isTTY);
110
+ }
111
+ export function defaultTerminal() {
112
+ return {
113
+ input: process.stdin,
114
+ output: process.stderr,
115
+ };
116
+ }
117
+ const HIDE_CURSOR = '\x1b[?25l';
118
+ const SHOW_CURSOR = '\x1b[?25h';
119
+ function fit(text, width) {
120
+ if (width <= 1 || text.length <= width)
121
+ return text;
122
+ return `${text.slice(0, width - 1)}…`;
123
+ }
124
+ export async function promptChoice(io, question, choices, style, fallback) {
125
+ const labels = choices
126
+ .map((choice) => `${style.accent(`[${choice.key}]`)} ${style.value(choice.label)}`)
127
+ .join(' ');
128
+ io.output.write(`${question}\n ${labels}\n`);
129
+ const reader = new KeyReader(io.input);
130
+ try {
131
+ for (;;) {
132
+ const key = await reader.next();
133
+ if (key.ctrl && key.name === 'c') {
134
+ const cancel = choices.find((c) => c.key === 'q') ?? choices[choices.length - 1];
135
+ if (cancel)
136
+ return cancel.key;
137
+ }
138
+ const hit = choices.find((choice) => choice.key === key.name.toLowerCase());
139
+ if (hit)
140
+ return hit.key;
141
+ if ((key.name === 'enter' || key.name === 'escape') && fallback !== undefined) {
142
+ return fallback;
143
+ }
144
+ }
145
+ }
146
+ finally {
147
+ reader.close();
148
+ }
149
+ }
150
+ function visibleIndexes(items, filter) {
151
+ const needle = filter.toLowerCase();
152
+ const result = [];
153
+ items.forEach((item, index) => {
154
+ if (needle === '' || item.label.toLowerCase().includes(needle))
155
+ result.push(index);
156
+ });
157
+ return result;
158
+ }
159
+ function computePageSize(io, requested) {
160
+ const rows = io.output.rows ?? 24;
161
+ const available = Math.max(5, rows - 6);
162
+ return Math.max(3, Math.min(requested ?? 20, available));
163
+ }
164
+ function renderList(io, items, options, state, style, pageSize) {
165
+ const width = (io.output.columns ?? 100) - 1;
166
+ const visible = visibleIndexes(items, state.filter);
167
+ const lines = [style.heading(fit(options.title, width))];
168
+ if (options.help)
169
+ lines.push(style.muted(fit(options.help, width)));
170
+ if (options.filterable && (state.filtering || state.filter !== '')) {
171
+ lines.push(`${style.accent('filter')} ${style.value(state.filter)}${state.filtering ? style.muted('▏') : ''}`);
172
+ }
173
+ if (visible.length === 0) {
174
+ lines.push(style.warn(options.emptyMessage ?? ' nothing matches'));
175
+ }
176
+ const slice = visible.slice(state.offset, state.offset + pageSize);
177
+ slice.forEach((itemIndex, row) => {
178
+ const item = items[itemIndex];
179
+ const isCursor = state.offset + row === state.cursor;
180
+ const marker = isCursor ? style.accent('❯') : ' ';
181
+ const box = options.multi
182
+ ? `${state.selected.has(itemIndex) ? style.success('◉') : style.muted('○')} `
183
+ : '';
184
+ const reserved = 4 + (options.multi ? 2 : 0);
185
+ const hint = item.hint ?? '';
186
+ const labelRoom = Math.max(10, width - reserved - (hint ? Math.min(hint.length, 40) + 2 : 0));
187
+ const label = fit(item.label, labelRoom);
188
+ const text = isCursor ? style.bold(style.path(label)) : style.path(label);
189
+ lines.push(`${marker} ${box}${text}${hint ? ` ${style.muted(fit(hint, 40))}` : ''}`);
190
+ });
191
+ if (visible.length > pageSize) {
192
+ const from = state.offset + 1;
193
+ const to = Math.min(visible.length, state.offset + pageSize);
194
+ lines.push(style.muted(` ${from}–${to} of ${visible.length}`));
195
+ }
196
+ if (options.multi) {
197
+ lines.push(style.info(` ${state.selected.size} selected of ${items.length}`));
198
+ }
199
+ return lines;
200
+ }
201
+ export async function runSelect(io, items, options, style) {
202
+ const pageSize = computePageSize(io, options.pageSize);
203
+ const state = {
204
+ cursor: 0,
205
+ offset: 0,
206
+ selected: new Set(items.flatMap((item, i) => (item.selected ? [i] : []))),
207
+ filter: '',
208
+ filtering: false,
209
+ };
210
+ const reader = new KeyReader(io.input);
211
+ let drawn = 0;
212
+ const draw = () => {
213
+ const visible = visibleIndexes(items, state.filter);
214
+ state.cursor = Math.max(0, Math.min(state.cursor, visible.length - 1));
215
+ if (state.cursor < state.offset)
216
+ state.offset = state.cursor;
217
+ if (state.cursor >= state.offset + pageSize)
218
+ state.offset = state.cursor - pageSize + 1;
219
+ const lines = renderList(io, items, options, state, style, pageSize);
220
+ const clear = drawn > 0 ? `\x1b[${drawn}A\r\x1b[J` : '';
221
+ io.output.write(`${clear}${lines.join('\n')}\n`);
222
+ drawn = lines.length;
223
+ };
224
+ const erase = () => {
225
+ if (drawn > 0)
226
+ io.output.write(`\x1b[${drawn}A\r\x1b[J`);
227
+ drawn = 0;
228
+ };
229
+ io.output.write(HIDE_CURSOR);
230
+ try {
231
+ draw();
232
+ for (;;) {
233
+ const key = await reader.next();
234
+ const visible = visibleIndexes(items, state.filter);
235
+ if (key.ctrl && key.name === 'c')
236
+ return finish(null);
237
+ if (state.filtering) {
238
+ if (key.name === 'enter')
239
+ state.filtering = false;
240
+ else if (key.name === 'escape') {
241
+ state.filtering = false;
242
+ state.filter = '';
243
+ state.cursor = 0;
244
+ state.offset = 0;
245
+ }
246
+ else if (key.name === 'backspace') {
247
+ state.filter = state.filter.slice(0, -1);
248
+ state.cursor = 0;
249
+ state.offset = 0;
250
+ }
251
+ else if (key.ch !== undefined) {
252
+ state.filter += key.ch;
253
+ state.cursor = 0;
254
+ state.offset = 0;
255
+ }
256
+ else if (key.name === 'up')
257
+ state.cursor -= 1;
258
+ else if (key.name === 'down')
259
+ state.cursor += 1;
260
+ draw();
261
+ continue;
262
+ }
263
+ switch (key.name) {
264
+ case 'up':
265
+ case 'k':
266
+ state.cursor = state.cursor <= 0 ? visible.length - 1 : state.cursor - 1;
267
+ break;
268
+ case 'down':
269
+ case 'j':
270
+ state.cursor = state.cursor >= visible.length - 1 ? 0 : state.cursor + 1;
271
+ break;
272
+ case 'pageup':
273
+ state.cursor = Math.max(0, state.cursor - pageSize);
274
+ break;
275
+ case 'pagedown':
276
+ state.cursor = Math.min(visible.length - 1, state.cursor + pageSize);
277
+ break;
278
+ case 'home':
279
+ state.cursor = 0;
280
+ break;
281
+ case 'end':
282
+ state.cursor = visible.length - 1;
283
+ break;
284
+ case 'space':
285
+ if (options.multi) {
286
+ const index = visible[state.cursor];
287
+ if (index !== undefined) {
288
+ if (state.selected.has(index))
289
+ state.selected.delete(index);
290
+ else
291
+ state.selected.add(index);
292
+ }
293
+ state.cursor = Math.min(visible.length - 1, state.cursor + 1);
294
+ }
295
+ break;
296
+ case 'a':
297
+ if (options.multi)
298
+ for (const index of visible)
299
+ state.selected.add(index);
300
+ break;
301
+ case 'n':
302
+ if (options.multi)
303
+ for (const index of visible)
304
+ state.selected.delete(index);
305
+ break;
306
+ case 'i':
307
+ if (options.multi) {
308
+ for (const index of visible) {
309
+ if (state.selected.has(index))
310
+ state.selected.delete(index);
311
+ else
312
+ state.selected.add(index);
313
+ }
314
+ }
315
+ break;
316
+ case '/':
317
+ if (options.filterable)
318
+ state.filtering = true;
319
+ break;
320
+ case 'enter': {
321
+ if (options.multi) {
322
+ const picked = [...state.selected].sort((a, b) => a - b);
323
+ return finish(picked.map((index) => items[index].value));
324
+ }
325
+ const index = visible[state.cursor];
326
+ if (index === undefined)
327
+ break;
328
+ return finish([items[index].value]);
329
+ }
330
+ case 'q':
331
+ case 'escape':
332
+ if (state.filter !== '') {
333
+ state.filter = '';
334
+ state.cursor = 0;
335
+ state.offset = 0;
336
+ break;
337
+ }
338
+ return finish(null);
339
+ }
340
+ draw();
341
+ }
342
+ }
343
+ finally {
344
+ reader.close();
345
+ io.output.write(SHOW_CURSOR);
346
+ }
347
+ function finish(result) {
348
+ erase();
349
+ return result;
350
+ }
351
+ }
352
+ export async function multiSelect(io, items, options, style) {
353
+ return runSelect(io, items, { ...options, multi: true }, style);
354
+ }
355
+ export async function singleSelect(io, items, options, style) {
356
+ const result = await runSelect(io, items, { ...options, multi: false }, style);
357
+ return result === null ? null : result[0];
358
+ }
359
+ export async function askText(io, question, style, initial = '') {
360
+ const reader = new KeyReader(io.input);
361
+ let value = initial;
362
+ const render = () => io.output.write(`\r\x1b[K${style.accent('?')} ${question} ${style.value(value)}`);
363
+ try {
364
+ render();
365
+ for (;;) {
366
+ const key = await reader.next();
367
+ if (key.ctrl && key.name === 'c') {
368
+ io.output.write('\n');
369
+ return null;
370
+ }
371
+ if (key.name === 'escape') {
372
+ io.output.write('\n');
373
+ return null;
374
+ }
375
+ if (key.name === 'enter') {
376
+ io.output.write('\n');
377
+ return value;
378
+ }
379
+ if (key.name === 'backspace')
380
+ value = value.slice(0, -1);
381
+ else if (key.ch !== undefined)
382
+ value += key.ch;
383
+ render();
384
+ }
385
+ }
386
+ finally {
387
+ reader.close();
388
+ }
389
+ }
390
+ //# sourceMappingURL=tty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tty.js","sourceRoot":"","sources":["../../src/utils/tty.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@macrulez/devtoolz",
3
- "version": "0.3.3",
3
+ "version": "0.4.1",
4
4
  "description": "A small toolbox of CLI commands that automate routine dev chores — strip comments/console.log, find dead exports, catch case-sensitivity import bugs before Linux CI does",
5
5
  "type": "module",
6
6
  "license": "MIT",