@macrulez/mediatoolz 0.0.0-stage → 0.1.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 (174) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +182 -2
  3. package/dist/cli.d.ts +2 -0
  4. package/dist/cli.js +243 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/commands/image-batch/backup.d.ts +22 -0
  7. package/dist/commands/image-batch/backup.js +55 -0
  8. package/dist/commands/image-batch/backup.js.map +1 -0
  9. package/dist/commands/image-batch/cache.d.ts +15 -0
  10. package/dist/commands/image-batch/cache.js +38 -0
  11. package/dist/commands/image-batch/cache.js.map +1 -0
  12. package/dist/commands/image-batch/cli.d.ts +15 -0
  13. package/dist/commands/image-batch/cli.js +323 -0
  14. package/dist/commands/image-batch/cli.js.map +1 -0
  15. package/dist/commands/image-batch/codecs.d.ts +38 -0
  16. package/dist/commands/image-batch/codecs.js +366 -0
  17. package/dist/commands/image-batch/codecs.js.map +1 -0
  18. package/dist/commands/image-batch/config.d.ts +121 -0
  19. package/dist/commands/image-batch/config.js +690 -0
  20. package/dist/commands/image-batch/config.js.map +1 -0
  21. package/dist/commands/image-batch/errors.d.ts +5 -0
  22. package/dist/commands/image-batch/errors.js +8 -0
  23. package/dist/commands/image-batch/errors.js.map +1 -0
  24. package/dist/commands/image-batch/geometry.d.ts +26 -0
  25. package/dist/commands/image-batch/geometry.js +90 -0
  26. package/dist/commands/image-batch/geometry.js.map +1 -0
  27. package/dist/commands/image-batch/inputs.d.ts +22 -0
  28. package/dist/commands/image-batch/inputs.js +87 -0
  29. package/dist/commands/image-batch/inputs.js.map +1 -0
  30. package/dist/commands/image-batch/manage-cli.d.ts +2 -0
  31. package/dist/commands/image-batch/manage-cli.js +276 -0
  32. package/dist/commands/image-batch/manage-cli.js.map +1 -0
  33. package/dist/commands/image-batch/manage.d.ts +51 -0
  34. package/dist/commands/image-batch/manage.js +1041 -0
  35. package/dist/commands/image-batch/manage.js.map +1 -0
  36. package/dist/commands/image-batch/overwrite.d.ts +14 -0
  37. package/dist/commands/image-batch/overwrite.js +31 -0
  38. package/dist/commands/image-batch/overwrite.js.map +1 -0
  39. package/dist/commands/image-batch/plan.d.ts +86 -0
  40. package/dist/commands/image-batch/plan.js +396 -0
  41. package/dist/commands/image-batch/plan.js.map +1 -0
  42. package/dist/commands/image-batch/process.d.ts +8 -0
  43. package/dist/commands/image-batch/process.js +97 -0
  44. package/dist/commands/image-batch/process.js.map +1 -0
  45. package/dist/commands/image-batch/report.d.ts +6 -0
  46. package/dist/commands/image-batch/report.js +251 -0
  47. package/dist/commands/image-batch/report.js.map +1 -0
  48. package/dist/commands/image-batch/restore.d.ts +29 -0
  49. package/dist/commands/image-batch/restore.js +125 -0
  50. package/dist/commands/image-batch/restore.js.map +1 -0
  51. package/dist/commands/image-batch/run.d.ts +127 -0
  52. package/dist/commands/image-batch/run.js +656 -0
  53. package/dist/commands/image-batch/run.js.map +1 -0
  54. package/dist/commands/image-batch/sharpen-ask.d.ts +6 -0
  55. package/dist/commands/image-batch/sharpen-ask.js +53 -0
  56. package/dist/commands/image-batch/sharpen-ask.js.map +1 -0
  57. package/dist/commands/image-batch/sharpen-manage.d.ts +26 -0
  58. package/dist/commands/image-batch/sharpen-manage.js +238 -0
  59. package/dist/commands/image-batch/sharpen-manage.js.map +1 -0
  60. package/dist/commands/image-batch/sharpen-presets.d.ts +24 -0
  61. package/dist/commands/image-batch/sharpen-presets.js +145 -0
  62. package/dist/commands/image-batch/sharpen-presets.js.map +1 -0
  63. package/dist/commands/image-batch/sharpen.d.ts +46 -0
  64. package/dist/commands/image-batch/sharpen.js +159 -0
  65. package/dist/commands/image-batch/sharpen.js.map +1 -0
  66. package/dist/commands/image-batch/template.d.ts +45 -0
  67. package/dist/commands/image-batch/template.js +142 -0
  68. package/dist/commands/image-batch/template.js.map +1 -0
  69. package/dist/commands/image-hash/cache.d.ts +14 -0
  70. package/dist/commands/image-hash/cache.js +40 -0
  71. package/dist/commands/image-hash/cache.js.map +1 -0
  72. package/dist/commands/image-hash/core.d.ts +61 -0
  73. package/dist/commands/image-hash/core.js +302 -0
  74. package/dist/commands/image-hash/core.js.map +1 -0
  75. package/dist/commands/image-hash/hash.d.ts +21 -0
  76. package/dist/commands/image-hash/hash.js +104 -0
  77. package/dist/commands/image-hash/hash.js.map +1 -0
  78. package/dist/commands/image-hash/report.d.ts +3 -0
  79. package/dist/commands/image-hash/report.js +96 -0
  80. package/dist/commands/image-hash/report.js.map +1 -0
  81. package/dist/commands/image-hash/run.d.ts +61 -0
  82. package/dist/commands/image-hash/run.js +317 -0
  83. package/dist/commands/image-hash/run.js.map +1 -0
  84. package/dist/commands/image-hash/sharp-loader.d.ts +64 -0
  85. package/dist/commands/image-hash/sharp-loader.js +81 -0
  86. package/dist/commands/image-hash/sharp-loader.js.map +1 -0
  87. package/dist/commands/ui/cli.d.ts +2 -0
  88. package/dist/commands/ui/cli.js +78 -0
  89. package/dist/commands/ui/cli.js.map +1 -0
  90. package/dist/commands/ui/fs-routes.d.ts +7 -0
  91. package/dist/commands/ui/fs-routes.js +135 -0
  92. package/dist/commands/ui/fs-routes.js.map +1 -0
  93. package/dist/commands/ui/http.d.ts +41 -0
  94. package/dist/commands/ui/http.js +81 -0
  95. package/dist/commands/ui/http.js.map +1 -0
  96. package/dist/commands/ui/jobs.d.ts +15 -0
  97. package/dist/commands/ui/jobs.js +73 -0
  98. package/dist/commands/ui/jobs.js.map +1 -0
  99. package/dist/commands/ui/modules/image-batch-backups.d.ts +2 -0
  100. package/dist/commands/ui/modules/image-batch-backups.js +116 -0
  101. package/dist/commands/ui/modules/image-batch-backups.js.map +1 -0
  102. package/dist/commands/ui/modules/image-batch-manage.d.ts +2 -0
  103. package/dist/commands/ui/modules/image-batch-manage.js +245 -0
  104. package/dist/commands/ui/modules/image-batch-manage.js.map +1 -0
  105. package/dist/commands/ui/modules/image-batch.d.ts +2 -0
  106. package/dist/commands/ui/modules/image-batch.js +225 -0
  107. package/dist/commands/ui/modules/image-batch.js.map +1 -0
  108. package/dist/commands/ui/modules/image-hash.d.ts +2 -0
  109. package/dist/commands/ui/modules/image-hash.js +158 -0
  110. package/dist/commands/ui/modules/image-hash.js.map +1 -0
  111. package/dist/commands/ui/modules/index.d.ts +2 -0
  112. package/dist/commands/ui/modules/index.js +4 -0
  113. package/dist/commands/ui/modules/index.js.map +1 -0
  114. package/dist/commands/ui/open-browser.d.ts +1 -0
  115. package/dist/commands/ui/open-browser.js +18 -0
  116. package/dist/commands/ui/open-browser.js.map +1 -0
  117. package/dist/commands/ui/scan.d.ts +20 -0
  118. package/dist/commands/ui/scan.js +57 -0
  119. package/dist/commands/ui/scan.js.map +1 -0
  120. package/dist/commands/ui/server.d.ts +18 -0
  121. package/dist/commands/ui/server.js +196 -0
  122. package/dist/commands/ui/server.js.map +1 -0
  123. package/dist/format/bytes.d.ts +2 -0
  124. package/dist/format/bytes.js +17 -0
  125. package/dist/format/bytes.js.map +1 -0
  126. package/dist/format/colors.d.ts +12 -0
  127. package/dist/format/colors.js +15 -0
  128. package/dist/format/colors.js.map +1 -0
  129. package/dist/format/diff-render.d.ts +2 -0
  130. package/dist/format/diff-render.js +35 -0
  131. package/dist/format/diff-render.js.map +1 -0
  132. package/dist/format/file-list.d.ts +6 -0
  133. package/dist/format/file-list.js +15 -0
  134. package/dist/format/file-list.js.map +1 -0
  135. package/dist/format/findings-list.d.ts +7 -0
  136. package/dist/format/findings-list.js +14 -0
  137. package/dist/format/findings-list.js.map +1 -0
  138. package/dist/format/style.d.ts +20 -0
  139. package/dist/format/style.js +36 -0
  140. package/dist/format/style.js.map +1 -0
  141. package/dist/format/table.d.ts +8 -0
  142. package/dist/format/table.js +44 -0
  143. package/dist/format/table.js.map +1 -0
  144. package/dist/format/vibes.d.ts +13 -0
  145. package/dist/format/vibes.js +82 -0
  146. package/dist/format/vibes.js.map +1 -0
  147. package/dist/index.d.ts +9 -0
  148. package/dist/index.js +6 -0
  149. package/dist/index.js.map +1 -0
  150. package/dist/ui/assets/ImageBatchPage-D3f4z6YA.js +4 -0
  151. package/dist/ui/assets/ImageBatchPage-DwaunraE.css +1 -0
  152. package/dist/ui/assets/ImageHashPage-D0xZlLGw.css +1 -0
  153. package/dist/ui/assets/ImageHashPage-DjIlDPu-.js +1 -0
  154. package/dist/ui/assets/SourcePicker-D8aZjDwP.css +1 -0
  155. package/dist/ui/assets/SourcePicker-Db0dG6zc.js +1 -0
  156. package/dist/ui/assets/index-D1s-23_t.css +1 -0
  157. package/dist/ui/assets/index-yiehSw5D.js +3 -0
  158. package/dist/ui/index.html +17 -0
  159. package/dist/utils/closest.d.ts +2 -0
  160. package/dist/utils/closest.js +35 -0
  161. package/dist/utils/closest.js.map +1 -0
  162. package/dist/utils/glob.d.ts +4 -0
  163. package/dist/utils/glob.js +86 -0
  164. package/dist/utils/glob.js.map +1 -0
  165. package/dist/utils/split-list.d.ts +1 -0
  166. package/dist/utils/split-list.js +4 -0
  167. package/dist/utils/split-list.js.map +1 -0
  168. package/dist/utils/tty.d.ts +60 -0
  169. package/dist/utils/tty.js +390 -0
  170. package/dist/utils/tty.js.map +1 -0
  171. package/dist/utils/walk.d.ts +21 -0
  172. package/dist/utils/walk.js +116 -0
  173. package/dist/utils/walk.js.map +1 -0
  174. package/package.json +82 -4
@@ -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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"}
@@ -0,0 +1,21 @@
1
+ export interface WalkOptions {
2
+ cwd: string;
3
+ /** file extensions to include, each with its leading dot, e.g. ['.ts', '.vue'] */
4
+ extensions: string[];
5
+ /** extra gitignore-syntax patterns, on top of DEFAULT_IGNORES and the real .gitignore */
6
+ ignoreGlobs?: string[];
7
+ /** default true — also honor <cwd>/.gitignore, root-level only (see features.md case-check/walk caveats) */
8
+ respectGitignore?: boolean;
9
+ /** default true — descend into subdirectories; false only lists files directly inside each given directory */
10
+ recursive?: boolean;
11
+ }
12
+ /**
13
+ * Resolves `inputPaths` (files and/or directories, as given on the CLI)
14
+ * into a flat, deduplicated list of absolute file paths matching
15
+ * `options.extensions` — directories are walked recursively, honoring
16
+ * DEFAULT_IGNORES + the real `.gitignore` + any extra `--ignore` globs.
17
+ * An explicitly-named file is included even if its extension wouldn't
18
+ * otherwise match (the caller asked for it by name) but is still subject
19
+ * to ignore-matching, so `--ignore` can still exclude it.
20
+ */
21
+ export declare function walk(inputPaths: string[], options: WalkOptions): string[];
@@ -0,0 +1,116 @@
1
+ import { readFileSync, readdirSync, statSync } from 'node:fs';
2
+ import { basename, join, relative, resolve } from 'node:path';
3
+ import { createRequire } from 'node:module';
4
+ // `ignore` is CJS with no "exports" map in its package.json — under
5
+ // `moduleResolution: NodeNext` (which this project uses because it
6
+ // matches Node's actual runtime resolution, unlike "Bundler"), TS's
7
+ // default-export interop for exactly that shape of package breaks: `import
8
+ // ignore from 'ignore'` type-checks as the raw module namespace, not the
9
+ // callable factory (reproduced in isolation, not a config mistake here).
10
+ // Loading it via the real CJS loader sidesteps the broken interop
11
+ // entirely — arguably the more honest way to consume a CJS module from
12
+ // ESM anyway.
13
+ const require = createRequire(import.meta.url);
14
+ const ignore = require('ignore');
15
+ // Every dev-toolz command that scans a tree agrees on this default —
16
+ // listed once here instead of copy-pasted per command. `--ignore` (per
17
+ // command) adds to this, it never has to re-list these.
18
+ //
19
+ // `.nuxt`/`.output`/`.next` — real dogfooding against vue-image-kit's
20
+ // `demo-nuxt/` (2026-09-25, empty-catch) found minified build output
21
+ // getting scanned as real source, producing nonsense findings at
22
+ // column 138282 in a single-line bundle. `.gitignore` support alone
23
+ // doesn't catch this: it only reads the root `<cwd>/.gitignore`, not a
24
+ // nested project's own one (`demo-nuxt` here has its own, several
25
+ // levels down) — so a framework's own well-known build-output
26
+ // directory name needs to be a hardcoded default, the same as
27
+ // `dist`/`build` already are, not left to `.gitignore` to catch.
28
+ const DEFAULT_IGNORES = [
29
+ 'node_modules',
30
+ 'dist',
31
+ 'build',
32
+ '.git',
33
+ 'coverage',
34
+ '.nuxt',
35
+ '.output',
36
+ '.next',
37
+ ];
38
+ function buildMatcher(options) {
39
+ const matcher = ignore();
40
+ matcher.add(DEFAULT_IGNORES);
41
+ if (options.respectGitignore !== false) {
42
+ try {
43
+ const gitignoreText = readFileSync(join(options.cwd, '.gitignore'), 'utf8');
44
+ matcher.add(gitignoreText);
45
+ }
46
+ catch {
47
+ // no .gitignore at cwd root — nothing extra to add, not an error
48
+ }
49
+ }
50
+ if (options.ignoreGlobs?.length)
51
+ matcher.add(options.ignoreGlobs);
52
+ return matcher;
53
+ }
54
+ // `ignore` requires a path that's genuinely relative to its root (no `..`
55
+ // segments) and throws otherwise — true for everything under a normal
56
+ // `--cwd`-rooted scan, but a caller can point `walk()` at a path outside
57
+ // `--cwd` entirely (an unusual invocation, but not one that should crash).
58
+ // There's no `.gitignore`/`--ignore` rule that meaningfully applies
59
+ // outside the root they were read relative to, so falls back to just the
60
+ // hardcoded default-noise-directory names for anything out there.
61
+ function isIgnored(absPath, cwd, matcher) {
62
+ const relPath = relative(cwd, absPath).split('\\').join('/');
63
+ if (relPath === '')
64
+ return false;
65
+ if (relPath.startsWith('..'))
66
+ return DEFAULT_IGNORES.includes(basename(absPath));
67
+ return matcher.ignores(relPath);
68
+ }
69
+ function walkDir(absDir, cwd, matcher, extensions, out, recursive) {
70
+ for (const entry of readdirSync(absDir, { withFileTypes: true })) {
71
+ const absPath = join(absDir, entry.name);
72
+ if (isIgnored(absPath, cwd, matcher))
73
+ continue;
74
+ if (entry.isDirectory()) {
75
+ if (recursive)
76
+ walkDir(absPath, cwd, matcher, extensions, out, recursive);
77
+ }
78
+ else if (entry.isFile()) {
79
+ const dot = entry.name.lastIndexOf('.');
80
+ const ext = dot === -1 ? '' : entry.name.slice(dot);
81
+ if (extensions.has(ext))
82
+ out.push(absPath);
83
+ }
84
+ }
85
+ }
86
+ /**
87
+ * Resolves `inputPaths` (files and/or directories, as given on the CLI)
88
+ * into a flat, deduplicated list of absolute file paths matching
89
+ * `options.extensions` — directories are walked recursively, honoring
90
+ * DEFAULT_IGNORES + the real `.gitignore` + any extra `--ignore` globs.
91
+ * An explicitly-named file is included even if its extension wouldn't
92
+ * otherwise match (the caller asked for it by name) but is still subject
93
+ * to ignore-matching, so `--ignore` can still exclude it.
94
+ */
95
+ export function walk(inputPaths, options) {
96
+ const matcher = buildMatcher(options);
97
+ const extensions = new Set(options.extensions);
98
+ const roots = inputPaths.length > 0 ? inputPaths : ['.'];
99
+ const out = [];
100
+ for (const inputPath of roots) {
101
+ const absPath = resolve(options.cwd, inputPath);
102
+ if (isIgnored(absPath, options.cwd, matcher))
103
+ continue;
104
+ const stat = statSync(absPath, { throwIfNoEntry: false });
105
+ if (!stat)
106
+ continue;
107
+ if (stat.isDirectory()) {
108
+ walkDir(absPath, options.cwd, matcher, extensions, out, options.recursive !== false);
109
+ }
110
+ else if (stat.isFile()) {
111
+ out.push(absPath);
112
+ }
113
+ }
114
+ return [...new Set(out)];
115
+ }
116
+ //# sourceMappingURL=walk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/utils/walk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,84 @@
1
1
  {
2
2
  "name": "@macrulez/mediatoolz",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "A small toolbox of CLI commands for images — resize, convert and recompress them in bulk by rules, and generate hazehash, blurhash and thumbhash placeholders",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "macrulez <macrulezru@gmail.com> (https://macrulez.ru/en)",
8
+ "homepage": "https://github.com/macrulezru/mediatoolz",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/macrulezru/mediatoolz.git"
12
+ },
13
+ "bugs": {
14
+ "url": "https://github.com/macrulezru/mediatoolz/issues"
15
+ },
16
+ "keywords": [
17
+ "images",
18
+ "resize",
19
+ "convert",
20
+ "webp",
21
+ "avif",
22
+ "sharp",
23
+ "blurhash",
24
+ "thumbhash",
25
+ "hazehash",
26
+ "placeholder",
27
+ "cli"
28
+ ],
29
+ "engines": {
30
+ "node": ">=20"
31
+ },
32
+ "publishConfig": {
33
+ "access": "public"
34
+ },
35
+ "bin": {
36
+ "mediatoolz": "dist/cli.js"
37
+ },
38
+ "files": [
39
+ "dist"
40
+ ],
41
+ "exports": {
42
+ ".": "./dist/index.js"
43
+ },
44
+ "scripts": {
45
+ "build": "tsc -p tsconfig.json && vite build --config ui/vite.config.ts",
46
+ "dev:ui": "tsx ui/dev.ts",
47
+ "dev:ui:client": "vite --config ui/vite.config.ts",
48
+ "prepublishOnly": "npm run build",
49
+ "dev": "tsx src/cli.ts",
50
+ "test": "vitest run",
51
+ "test:watch": "vitest",
52
+ "typecheck": "tsc --noEmit && vue-tsc --noEmit -p ui/tsconfig.json",
53
+ "lint": "eslint .",
54
+ "format": "prettier --check .",
55
+ "format:fix": "prettier --write ."
56
+ },
57
+ "dependencies": {
58
+ "blurhash": "^2.0.5",
59
+ "commander": "^13.1.0",
60
+ "hazehash": "^0.1.1",
61
+ "ignore": "^6.0.2",
62
+ "thumbhash": "^0.1.1"
63
+ },
64
+ "devDependencies": {
65
+ "@eslint/js": "^9.20.0",
66
+ "@macrulez/masonry-kit-vue": "^0.1.4",
67
+ "@types/node": "^20.14.0",
68
+ "@vitejs/plugin-vue": "^6.0.9",
69
+ "eslint": "^9.20.0",
70
+ "eslint-plugin-vue": "^10.11.1",
71
+ "globals": "^17.13.0",
72
+ "prettier": "^3.9.8",
73
+ "sass": "^1.105.1",
74
+ "sharp": "^0.35.5",
75
+ "shiki": "^4.5.0",
76
+ "tsx": "^4.19.2",
77
+ "typescript": "^5.7.3",
78
+ "typescript-eslint": "^8.23.0",
79
+ "vite": "^7.3.7",
80
+ "vitest": "^3.0.5",
81
+ "vue": "^3.5.43",
82
+ "vue-tsc": "^3.3.12"
83
+ }
84
+ }