@hivecommons/promptargs 0.7.0 → 0.9.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 (81) hide show
  1. package/README.md +106 -20
  2. package/dist/autodetect.js +39 -12
  3. package/dist/autodetect.js.map +1 -1
  4. package/dist/cli.js +78 -147
  5. package/dist/cli.js.map +1 -1
  6. package/dist/commands.d.ts +4 -0
  7. package/dist/commands.js +148 -0
  8. package/dist/commands.js.map +1 -0
  9. package/dist/flags.d.ts +20 -0
  10. package/dist/flags.js +101 -0
  11. package/dist/flags.js.map +1 -0
  12. package/dist/loader.d.ts +2 -0
  13. package/dist/loader.js +84 -11
  14. package/dist/loader.js.map +1 -1
  15. package/dist/log.d.ts +19 -0
  16. package/dist/log.js +41 -0
  17. package/dist/log.js.map +1 -0
  18. package/dist/parser.js +39 -9
  19. package/dist/parser.js.map +1 -1
  20. package/dist/resolver.d.ts +3 -1
  21. package/dist/resolver.js +105 -34
  22. package/dist/resolver.js.map +1 -1
  23. package/dist/status.d.ts +1 -1
  24. package/dist/status.js +5 -4
  25. package/dist/status.js.map +1 -1
  26. package/dist/ui.d.ts +3 -0
  27. package/dist/ui.html +21 -6
  28. package/dist/ui.js +89 -12
  29. package/dist/ui.js.map +1 -1
  30. package/package.json +13 -4
  31. package/dist/autodetect.test.d.ts +0 -1
  32. package/dist/autodetect.test.js +0 -207
  33. package/dist/autodetect.test.js.map +0 -1
  34. package/dist/cli.test.d.ts +0 -1
  35. package/dist/cli.test.js +0 -310
  36. package/dist/cli.test.js.map +0 -1
  37. package/dist/index.test.d.ts +0 -1
  38. package/dist/index.test.js +0 -59
  39. package/dist/index.test.js.map +0 -1
  40. package/dist/iterate.test.d.ts +0 -1
  41. package/dist/iterate.test.js +0 -20
  42. package/dist/iterate.test.js.map +0 -1
  43. package/dist/loader.test.d.ts +0 -1
  44. package/dist/loader.test.js +0 -65
  45. package/dist/loader.test.js.map +0 -1
  46. package/dist/parser.test.d.ts +0 -1
  47. package/dist/parser.test.js +0 -93
  48. package/dist/parser.test.js.map +0 -1
  49. package/dist/resolver.test.d.ts +0 -1
  50. package/dist/resolver.test.js +0 -184
  51. package/dist/resolver.test.js.map +0 -1
  52. package/dist/sanitize.test.d.ts +0 -1
  53. package/dist/sanitize.test.js +0 -38
  54. package/dist/sanitize.test.js.map +0 -1
  55. package/dist/status.test.d.ts +0 -1
  56. package/dist/status.test.js +0 -33
  57. package/dist/status.test.js.map +0 -1
  58. package/dist/ui-bootstrap.test.d.ts +0 -1
  59. package/dist/ui-bootstrap.test.js +0 -479
  60. package/dist/ui-bootstrap.test.js.map +0 -1
  61. package/dist/ui-builder.test.d.ts +0 -1
  62. package/dist/ui-builder.test.js +0 -272
  63. package/dist/ui-builder.test.js.map +0 -1
  64. package/dist/ui-command-quoting.test.d.ts +0 -1
  65. package/dist/ui-command-quoting.test.js +0 -95
  66. package/dist/ui-command-quoting.test.js.map +0 -1
  67. package/dist/ui-harness.d.ts +0 -20
  68. package/dist/ui-harness.js +0 -40
  69. package/dist/ui-harness.js.map +0 -1
  70. package/dist/ui-harness.test.d.ts +0 -1
  71. package/dist/ui-harness.test.js +0 -30
  72. package/dist/ui-harness.test.js.map +0 -1
  73. package/dist/ui-inline.test.d.ts +0 -1
  74. package/dist/ui-inline.test.js +0 -90
  75. package/dist/ui-inline.test.js.map +0 -1
  76. package/dist/ui-interactions.test.d.ts +0 -1
  77. package/dist/ui-interactions.test.js +0 -489
  78. package/dist/ui-interactions.test.js.map +0 -1
  79. package/dist/ui.test.d.ts +0 -1
  80. package/dist/ui.test.js +0 -283
  81. package/dist/ui.test.js.map +0 -1
@@ -1,489 +0,0 @@
1
- import test from 'node:test';
2
- import assert from 'node:assert';
3
- import { readFileSync } from 'node:fs';
4
- import { join, dirname } from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
- import { expand, parseVars, VAR_PATTERN } from './parser.js';
7
- import { cartesian, zip } from './iterate.js';
8
- import { compileInlineScript } from './ui-harness.js';
9
- /**
10
- * Behavior tests for ui.html's variable-table and preset wiring:
11
- * `syncVarsFromTemplate`, `addVarRow`, `insertAtCursor`, `loadPreset`,
12
- * `renderPresets`, `renderEnvChips` and the `scheduleUpdate` debounce.
13
- *
14
- * ui-builder.test.ts covers `update()` (preview + command) against a static
15
- * list of rows. These functions are the ones that *produce* those rows and
16
- * mutate the template, so they are extracted verbatim from the page (same
17
- * brace-matching approach) and run against a small stub DOM: `document`
18
- * creates fake elements, `<tr>.innerHTML` is parsed just far enough to read
19
- * back the `value="..."` attributes the way a browser would (entities decoded,
20
- * attribute terminated at the first `"`), and click handlers are captured so
21
- * tests can fire them.
22
- */
23
- const __dirname = dirname(fileURLToPath(import.meta.url));
24
- const uiHtml = readFileSync(join(__dirname, 'ui.html'), 'utf-8');
25
- function extractFunction(name) {
26
- const start = uiHtml.indexOf(`function ${name}(`);
27
- assert.notEqual(start, -1, `function ${name} not found in ui.html`);
28
- const bodyStart = uiHtml.indexOf('{', start);
29
- let depth = 0;
30
- for (let i = bodyStart; i < uiHtml.length; i++) {
31
- if (uiHtml[i] === '{')
32
- depth++;
33
- else if (uiHtml[i] === '}') {
34
- depth--;
35
- if (depth === 0)
36
- return uiHtml.slice(start, i + 1);
37
- }
38
- }
39
- assert.fail(`unbalanced braces extracting ${name} from ui.html`);
40
- }
41
- function extractPresets() {
42
- const start = uiHtml.indexOf('const PRESETS = [');
43
- assert.notEqual(start, -1, 'PRESETS not found in ui.html');
44
- const end = uiHtml.indexOf('\n ];', start);
45
- assert.notEqual(end, -1, 'PRESETS array is not terminated');
46
- const literal = uiHtml.slice(start + 'const PRESETS = '.length, end + '\n ];'.length);
47
- // eslint-disable-next-line no-new-func
48
- return new Function(`return ${literal}`)();
49
- }
50
- const presets = extractPresets();
51
- class ClassList {
52
- set = new Set();
53
- add(c) { this.set.add(c); }
54
- remove(c) { this.set.delete(c); }
55
- contains(c) { return this.set.has(c); }
56
- toggle(c, force) {
57
- const on = force === undefined ? !this.set.has(c) : force;
58
- if (on)
59
- this.set.add(c);
60
- else
61
- this.set.delete(c);
62
- return on;
63
- }
64
- }
65
- class FakeElement {
66
- tag;
67
- className = '';
68
- type = '';
69
- title = '';
70
- _html = '';
71
- get innerHTML() { return this._html; }
72
- set innerHTML(html) { this._html = html; }
73
- textContent = '';
74
- dataset = {};
75
- classList = new ClassList();
76
- style = {};
77
- children = [];
78
- handlers = new Map();
79
- constructor(tag) {
80
- this.tag = tag;
81
- }
82
- addEventListener(event, fn) {
83
- const list = this.handlers.get(event) ?? [];
84
- list.push(fn);
85
- this.handlers.set(event, list);
86
- }
87
- fire(event) {
88
- for (const fn of this.handlers.get(event) ?? [])
89
- fn();
90
- }
91
- appendChild(child) { this.children.push(child); }
92
- }
93
- function decodeEntities(s) {
94
- return s.replace(/&quot;/g, '"').replace(/&lt;/g, '<').replace(/&amp;/g, '&');
95
- }
96
- /** Reads `value="..."` from the first element whose class list contains `cls`. */
97
- function attrValue(html, cls) {
98
- const re = new RegExp(`class="[^"]*\\b${cls}\\b[^"]*"\\s+value="([^"]*)"`);
99
- const m = html.match(re);
100
- assert.ok(m, `no .${cls} with a value attribute in: ${html}`);
101
- return decodeEntities(m[1]);
102
- }
103
- class FakeInput extends FakeElement {
104
- value;
105
- constructor(value) {
106
- super('input');
107
- this.value = value;
108
- }
109
- }
110
- /**
111
- * A `<tr>` as addVarRow builds it. Setting innerHTML materialises the two
112
- * inputs, the source select and the two buttons from the markup so that the
113
- * page's later querySelector calls see what a browser would have parsed.
114
- */
115
- class FakeRow extends FakeElement {
116
- nameInput;
117
- valuesInput;
118
- sourceSelect;
119
- rmBtn = new FakeElement('button');
120
- insertBtn = new FakeElement('button');
121
- parent = null;
122
- constructor() { super('tr'); }
123
- get innerHTML() { return this._html; }
124
- set innerHTML(html) {
125
- this._html = html;
126
- this.nameInput = new FakeInput(attrValue(html, 'var-name'));
127
- this.valuesInput = new FakeInput(attrValue(html, 'var-values'));
128
- const selected = html.match(/<option value="(\w+)" selected>/);
129
- this.sourceSelect = new FakeInput(selected ? selected[1] : 'manual');
130
- }
131
- querySelector(sel) {
132
- switch (sel) {
133
- case '.var-name': return this.nameInput;
134
- case '.var-values': return this.valuesInput;
135
- case '.var-source': return this.sourceSelect;
136
- case '.rm-btn': return this.rmBtn;
137
- case '.insert-btn': return this.insertBtn;
138
- default: assert.fail(`unexpected row selector ${sel}`);
139
- }
140
- }
141
- querySelectorAll(sel) {
142
- assert.equal(sel, 'input, select');
143
- return [this.nameInput, this.valuesInput, this.sourceSelect];
144
- }
145
- remove() { this.parent?.detach(this); }
146
- }
147
- class FakeTableBody extends FakeElement {
148
- rows = [];
149
- constructor() { super('tbody'); }
150
- get innerHTML() { return ''; }
151
- set innerHTML(html) {
152
- assert.equal(html, '', 'ui.html only ever clears var-body');
153
- this.rows = [];
154
- }
155
- appendChild(child) {
156
- assert.ok(child instanceof FakeRow);
157
- child.parent = this;
158
- this.rows.push(child);
159
- }
160
- querySelectorAll(sel) {
161
- assert.equal(sel, 'tr');
162
- return [...this.rows];
163
- }
164
- detach(row) { this.rows = this.rows.filter(r => r !== row); }
165
- }
166
- class FakeTextarea extends FakeElement {
167
- value = '';
168
- selectionStart = 0;
169
- selectionEnd = 0;
170
- focused = false;
171
- constructor() { super('textarea'); }
172
- setSelectionRange(start, end) {
173
- this.selectionStart = start;
174
- this.selectionEnd = end;
175
- }
176
- focus() { this.focused = true; }
177
- }
178
- class FakeGrid extends FakeElement {
179
- constructor() { super('div'); }
180
- querySelectorAll(sel) {
181
- assert.equal(sel, '.preset-chip');
182
- return [...this.children];
183
- }
184
- }
185
- function makeHarness(debounceMs = 1) {
186
- const tmpl = new FakeTextarea();
187
- const varBody = new FakeTableBody();
188
- const presetGrid = new FakeGrid();
189
- const modeDesc = new FakeElement('span');
190
- const previewBody = new FakeElement('div');
191
- const previewCount = new FakeElement('span');
192
- const cliText = new FakeElement('code');
193
- const modeButtons = ['zip', 'cross'].map(m => {
194
- const b = new FakeElement('button');
195
- b.dataset.mode = m;
196
- if (m === 'zip')
197
- b.classList.add('active');
198
- return b;
199
- });
200
- const document = {
201
- createElement(tag) {
202
- return tag === 'tr' ? new FakeRow() : new FakeElement(tag);
203
- },
204
- querySelectorAll(sel) {
205
- assert.equal(sel, '.mode-btn');
206
- return modeButtons;
207
- },
208
- };
209
- const names = [
210
- 'getRowData', 'syncVarsFromTemplate', 'addVarRow', 'esc', 'escHtml',
211
- 'insertAtCursor', 'splitValues', 'highlightUnfilled', 'update',
212
- 'scheduleUpdate', 'loadPreset', 'renderPresets', 'renderEnvChips',
213
- ];
214
- const src = names.map(extractFunction).join('\n');
215
- const factory = compileInlineScript('ui-interactions', [
216
- 'document', 'tmpl', 'varBody', 'presetGrid', 'modeDesc',
217
- 'previewBody', 'previewCount', 'cliText', 'PRESETS', 'DEBOUNCE_MS',
218
- 'parseVars', 'sharedCartesian', 'sharedZip', 'sharedExpand', 'VAR_PATTERN',
219
- ], `let mode = 'zip';
220
- let debounceTimer = null;
221
- ${src}
222
- return {
223
- get mode() { return mode; },
224
- syncVarsFromTemplate, addVarRow, insertAtCursor, loadPreset,
225
- renderPresets, renderEnvChips, scheduleUpdate,
226
- };`);
227
- const api = factory(document, tmpl, varBody, presetGrid, modeDesc, previewBody, previewCount, cliText, presets, debounceMs, parseVars, cartesian, zip, expand, VAR_PATTERN);
228
- return {
229
- tmpl, varBody, presetGrid, modeDesc, modeButtons, previewBody, previewCount, cliText,
230
- mode: () => api.mode,
231
- syncVarsFromTemplate: api.syncVarsFromTemplate,
232
- addVarRow: api.addVarRow,
233
- insertAtCursor: api.insertAtCursor,
234
- loadPreset: api.loadPreset,
235
- renderPresets: api.renderPresets,
236
- renderEnvChips: api.renderEnvChips,
237
- scheduleUpdate: api.scheduleUpdate,
238
- rowData: () => varBody.rows.map(r => [r.nameInput.value, r.valuesInput.value, r.sourceSelect.value]),
239
- cli: () => cliText.innerHTML.replace(/^<span class="dollar">\$<\/span>/, ''),
240
- };
241
- }
242
- const tick = (ms) => new Promise(r => setTimeout(r, ms));
243
- // --- addVarRow / syncVarsFromTemplate ----------------------------------------
244
- test('addVarRow appends a row with the given name, values and source preselected', () => {
245
- const h = makeHarness();
246
- h.addVarRow('file', 'a.go,b.go', 'glob');
247
- h.addVarRow('', '', 'manual');
248
- h.addVarRow('notes', 'README.md', 'file');
249
- assert.deepEqual(h.rowData(), [
250
- ['file', 'a.go,b.go', 'glob'],
251
- ['', '', 'manual'],
252
- ['notes', 'README.md', 'file'],
253
- ]);
254
- });
255
- test('addVarRow escapes names and values so they cannot break out of the value attribute', () => {
256
- const h = makeHarness();
257
- const hostile = 'x" onfocus="alert(1)';
258
- h.addVarRow(hostile, 'a&b <c>', 'manual');
259
- const [[name, values]] = h.rowData();
260
- // The browser reads the attribute back decoded, i.e. unchanged...
261
- assert.equal(name, hostile);
262
- assert.equal(values, 'a&b <c>');
263
- // ...and the raw markup never contains an un-entitied quote inside the value.
264
- const html = h.varBody.rows[0].innerHTML;
265
- assert.ok(!html.includes('value="x" onfocus'), 'quote in name must be escaped in markup');
266
- assert.ok(html.includes('value="x&quot; onfocus=&quot;alert(1)"'));
267
- assert.ok(html.includes('value="a&amp;b &lt;c>"'));
268
- });
269
- test('syncVarsFromTemplate adds a row per new template variable, seeded with its default', () => {
270
- const h = makeHarness();
271
- h.tmpl.value = 'Review {{file}} for {{focus=security}} and {{file}} again';
272
- h.syncVarsFromTemplate();
273
- assert.deepEqual(h.rowData(), [
274
- ['file', '', 'manual'],
275
- ['focus', 'security', 'manual'],
276
- ]);
277
- });
278
- test('syncVarsFromTemplate leaves existing rows and their values untouched', () => {
279
- const h = makeHarness();
280
- h.addVarRow('file', 'main.go', 'glob');
281
- h.tmpl.value = 'Review {{file}} for {{focus}}';
282
- h.syncVarsFromTemplate();
283
- h.syncVarsFromTemplate();
284
- assert.deepEqual(h.rowData(), [
285
- ['file', 'main.go', 'glob'],
286
- ['focus', '', 'manual'],
287
- ]);
288
- });
289
- test('syncVarsFromTemplate recognises whitespace-padded blanks like the CLI does', () => {
290
- const h = makeHarness();
291
- h.tmpl.value = 'Hello {{ name }} from {{ team=core }}';
292
- h.syncVarsFromTemplate();
293
- assert.deepEqual(h.rowData(), [
294
- ['name', '', 'manual'],
295
- ['team', 'core', 'manual'],
296
- ]);
297
- });
298
- test('a removed row disappears from the table and is re-added only if still in the template', async () => {
299
- const h = makeHarness();
300
- h.tmpl.value = 'Hello {{name}} and {{other}}';
301
- h.syncVarsFromTemplate();
302
- const [nameRow] = h.varBody.rows;
303
- nameRow.rmBtn.fire('click');
304
- assert.deepEqual(h.rowData(), [['other', '', 'manual']]);
305
- // The remove handler schedules a resync, which brings {{name}} back from the template.
306
- await tick(10);
307
- assert.deepEqual(h.rowData(), [['other', '', 'manual'], ['name', '', 'manual']]);
308
- });
309
- // --- insertAtCursor ----------------------------------------------------------
310
- test('insertAtCursor replaces the selection, moves the caret after the insert and refocuses', () => {
311
- const h = makeHarness();
312
- h.tmpl.value = 'Review FILE for bugs';
313
- h.tmpl.setSelectionRange(7, 11);
314
- h.insertAtCursor('{{file}}');
315
- assert.equal(h.tmpl.value, 'Review {{file}} for bugs');
316
- assert.equal(h.tmpl.selectionStart, 15);
317
- assert.equal(h.tmpl.selectionEnd, 15);
318
- assert.ok(h.tmpl.focused);
319
- });
320
- test('insertAtCursor at a collapsed caret inserts without deleting text', () => {
321
- const h = makeHarness();
322
- h.tmpl.value = 'Hello ';
323
- h.tmpl.setSelectionRange(6, 6);
324
- h.insertAtCursor('{{name}}');
325
- assert.equal(h.tmpl.value, 'Hello {{name}}');
326
- });
327
- test('insertAtCursor deactivates the active preset chip and schedules a resync', async () => {
328
- const h = makeHarness();
329
- h.renderPresets();
330
- h.loadPreset(presets[0]);
331
- assert.ok(h.presetGrid.children.some(c => c.classList.contains('active')));
332
- h.tmpl.setSelectionRange(h.tmpl.value.length, h.tmpl.value.length);
333
- h.insertAtCursor(' {{extra}}');
334
- assert.ok(h.presetGrid.children.every(c => !c.classList.contains('active')));
335
- assert.ok(!h.rowData().some(([n]) => n === 'extra'), 'row is added on the debounce, not synchronously');
336
- await tick(10);
337
- assert.ok(h.rowData().some(([n]) => n === 'extra'));
338
- });
339
- test('the row insert button inserts {{name}} for the row it belongs to', () => {
340
- const h = makeHarness();
341
- h.addVarRow('target', '', 'manual');
342
- h.addVarRow('', '', 'manual');
343
- h.tmpl.value = 'Fix ';
344
- h.tmpl.setSelectionRange(4, 4);
345
- h.varBody.rows[0].insertBtn.fire('click');
346
- assert.equal(h.tmpl.value, 'Fix {{target}}');
347
- // A row with no name inserts nothing.
348
- h.varBody.rows[1].insertBtn.fire('click');
349
- assert.equal(h.tmpl.value, 'Fix {{target}}');
350
- });
351
- // --- scheduleUpdate ----------------------------------------------------------
352
- test('scheduleUpdate debounces: many calls in the window produce a single sync and render', async () => {
353
- const h = makeHarness(15);
354
- h.tmpl.value = 'Hello {{name}}';
355
- h.scheduleUpdate();
356
- h.scheduleUpdate();
357
- h.scheduleUpdate();
358
- assert.deepEqual(h.rowData(), []);
359
- assert.equal(h.cliText.innerHTML, '');
360
- await tick(40);
361
- assert.deepEqual(h.rowData(), [['name', '', 'manual']]);
362
- assert.equal(h.cli(), 'promptargs "Hello {{name}}"');
363
- });
364
- test('update zips comma-separated rows in zip mode and renders one iteration per pair', async () => {
365
- const h = makeHarness(5);
366
- h.tmpl.value = 'Review {{file}} for {{focus}}';
367
- h.addVarRow('file', 'a.go,b.go', 'manual');
368
- h.addVarRow('focus', 'x,y', 'manual');
369
- h.scheduleUpdate();
370
- await tick(20);
371
- assert.equal(h.mode(), 'zip');
372
- assert.equal(h.previewCount.textContent, '2 results');
373
- assert.ok(h.previewBody.innerHTML.includes('[1/2] file=a.go focus=x'));
374
- assert.ok(h.previewBody.innerHTML.includes('[2/2] file=b.go focus=y'));
375
- assert.equal(h.cli(), 'promptargs "Review {{file}} for {{focus}}" --file=a.go,b.go --focus=x,y');
376
- });
377
- test('update with a blank template renders the empty state and a bare command', async () => {
378
- const h = makeHarness(5);
379
- h.addVarRow('name', 'World', 'manual');
380
- h.tmpl.value = ' \n ';
381
- h.scheduleUpdate();
382
- await tick(20);
383
- assert.ok(h.previewBody.innerHTML.includes('Type a template above'));
384
- assert.equal(h.previewCount.textContent, '0 results');
385
- assert.equal(h.previewCount.className, 'preview-count empty');
386
- assert.equal(h.cli(), 'promptargs');
387
- });
388
- test('update keeps a glob pattern quoted and prefixes an @file value in the command', async () => {
389
- const h = makeHarness(5);
390
- h.tmpl.value = 'Review {{files}} against {{spec}}';
391
- h.addVarRow('files', 'src/*.go', 'glob');
392
- h.addVarRow('spec', 'docs/spec.md', 'file');
393
- h.scheduleUpdate();
394
- await tick(20);
395
- assert.equal(h.previewCount.textContent, '1 result');
396
- assert.ok(h.previewBody.innerHTML.includes('Review src/*.go against docs/spec.md'));
397
- assert.equal(h.cli(), 'promptargs "Review {{files}} against {{spec}}" --files="src/*.go" --spec=@docs/spec.md');
398
- });
399
- // --- loadPreset / renderPresets ----------------------------------------------
400
- test('renderPresets creates one chip per preset with escaped name and description', () => {
401
- const h = makeHarness();
402
- h.renderPresets();
403
- assert.equal(h.presetGrid.children.length, presets.length);
404
- presets.forEach((p, i) => {
405
- const chip = h.presetGrid.children[i];
406
- assert.equal(chip.tag, 'button');
407
- assert.equal(chip.type, 'button');
408
- assert.equal(chip.className, 'preset-chip');
409
- assert.equal(chip.dataset.preset, p.name);
410
- assert.ok(chip.innerHTML.includes(`<span class="preset-name">${p.name}</span>`));
411
- });
412
- });
413
- test('loadPreset replaces template, rows, mode and active chip, then renders', () => {
414
- const h = makeHarness();
415
- h.renderPresets();
416
- h.addVarRow('stale', 'leftover', 'file');
417
- const cross = presets.find(p => p.mode === 'cross');
418
- assert.ok(cross, 'need a cross-mode preset');
419
- h.loadPreset(cross);
420
- assert.equal(h.tmpl.value, cross.template);
421
- assert.equal(h.mode(), 'cross');
422
- assert.equal(h.modeDesc.textContent, 'Every combination of every value');
423
- assert.deepEqual(h.modeButtons.map(b => b.classList.contains('active')), [false, true]);
424
- assert.ok(!h.rowData().some(([n]) => n === 'stale'), 'previous rows are cleared');
425
- for (const v of parseVars(cross.template)) {
426
- const row = h.rowData().find(([n]) => n === v.name);
427
- assert.ok(row, `row for ${v.name}`);
428
- assert.equal(row[1], cross.vars[v.name]);
429
- }
430
- assert.deepEqual(h.presetGrid.children.map(c => c.classList.contains('active')), presets.map(p => p === cross));
431
- assert.ok(h.cliText.innerHTML.includes('--cross'), 'preview rendered with cross mode');
432
- assert.ok(!h.previewBody.innerHTML.includes('class="unfilled"'), 'every variable is filled');
433
- });
434
- test('clicking a chip loads its preset; a zip preset restores the zip description', () => {
435
- const h = makeHarness();
436
- h.renderPresets();
437
- const zipPreset = presets.find(p => p.mode === 'zip');
438
- const crossPreset = presets.find(p => p.mode === 'cross');
439
- assert.ok(zipPreset && crossPreset);
440
- h.presetGrid.children[presets.indexOf(crossPreset)].fire('click');
441
- assert.equal(h.mode(), 'cross');
442
- h.presetGrid.children[presets.indexOf(zipPreset)].fire('click');
443
- assert.equal(h.mode(), 'zip');
444
- assert.equal(h.modeDesc.textContent, 'Arrays pair up 1:1');
445
- assert.equal(h.tmpl.value, zipPreset.template);
446
- assert.deepEqual(h.modeButtons.map(b => b.classList.contains('active')), [true, false]);
447
- });
448
- test('loadPreset keeps a template variable the preset does not supply a value for', () => {
449
- const h = makeHarness();
450
- const preset = {
451
- name: 'partial',
452
- desc: 'x',
453
- template: 'Do {{task}} on {{file}}',
454
- vars: { file: 'a.ts' },
455
- mode: 'zip',
456
- };
457
- h.loadPreset(preset);
458
- assert.deepEqual(h.rowData(), [['task', '', 'manual'], ['file', 'a.ts', 'manual']]);
459
- assert.ok(h.previewBody.innerHTML.includes('<span class="unfilled">{{task}}</span>'));
460
- });
461
- // --- renderEnvChips ----------------------------------------------------------
462
- test('renderEnvChips renders one clickable chip per entry and HTML-escapes keys and values', () => {
463
- const h = makeHarness();
464
- const container = new FakeElement('div');
465
- container.innerHTML = 'previous';
466
- h.renderEnvChips(container, [
467
- ['branch', 'main'],
468
- ['repo', '<org>/r&d'],
469
- ]);
470
- assert.equal(container.innerHTML, '', 'container is cleared first');
471
- assert.equal(container.children.length, 2);
472
- const [branch, repo] = container.children;
473
- assert.equal(branch.className, 'env-entry');
474
- assert.equal(branch.title, 'Click to insert {{branch}} at cursor');
475
- assert.ok(branch.innerHTML.includes('<span class="env-key">{{branch}}</span>'));
476
- assert.ok(branch.innerHTML.includes('<span class="env-val">main</span>'));
477
- assert.ok(repo.innerHTML.includes('<span class="env-val">&lt;org&gt;/r&amp;d</span>'));
478
- assert.ok(!repo.innerHTML.includes('<org>'));
479
- });
480
- test('clicking an env chip inserts its {{key}} at the cursor', () => {
481
- const h = makeHarness();
482
- const container = new FakeElement('div');
483
- h.renderEnvChips(container, [['branch', 'main']]);
484
- h.tmpl.value = 'On ';
485
- h.tmpl.setSelectionRange(3, 3);
486
- container.children[0].fire('click');
487
- assert.equal(h.tmpl.value, 'On {{branch}}');
488
- });
489
- //# sourceMappingURL=ui-interactions.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-interactions.test.js","sourceRoot":"","sources":["../src/ui-interactions.test.ts"],"names":[],"mappings":"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"}
package/dist/ui.test.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};