browser-debugger-cli 0.6.11 → 0.7.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.
- package/README.md +2 -0
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js +90 -15
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/dom/DomElementResolver.d.ts.map +1 -1
- package/dist/commands/dom/DomElementResolver.js +28 -7
- package/dist/commands/dom/DomElementResolver.js.map +1 -1
- package/dist/commands/dom/a11y.d.ts.map +1 -1
- package/dist/commands/dom/a11y.js +5 -1
- package/dist/commands/dom/a11y.js.map +1 -1
- package/dist/commands/dom/evalHelpers.js +1 -1
- package/dist/commands/dom/evalHelpers.js.map +1 -1
- package/dist/commands/dom/form.d.ts +14 -0
- package/dist/commands/dom/form.d.ts.map +1 -0
- package/dist/commands/dom/form.js +441 -0
- package/dist/commands/dom/form.js.map +1 -0
- package/dist/commands/dom/formDiscovery.d.ts +26 -0
- package/dist/commands/dom/formDiscovery.d.ts.map +1 -0
- package/dist/commands/dom/formDiscovery.js +476 -0
- package/dist/commands/dom/formDiscovery.js.map +1 -0
- package/dist/commands/dom/formFillHelpers.d.ts +72 -0
- package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formFillHelpers.js +241 -5
- package/dist/commands/dom/formFillHelpers.js.map +1 -1
- package/dist/commands/dom/formInteraction.d.ts.map +1 -1
- package/dist/commands/dom/formInteraction.js +119 -3
- package/dist/commands/dom/formInteraction.js.map +1 -1
- package/dist/commands/dom/formTypes.d.ts +75 -0
- package/dist/commands/dom/formTypes.d.ts.map +1 -0
- package/dist/commands/dom/formTypes.js +7 -0
- package/dist/commands/dom/formTypes.js.map +1 -0
- package/dist/commands/dom/helpers.d.ts +1 -1
- package/dist/commands/dom/helpers.js +1 -1
- package/dist/commands/dom/index.d.ts.map +1 -1
- package/dist/commands/dom/index.js +7 -2
- package/dist/commands/dom/index.js.map +1 -1
- package/dist/commands/dom/screenshotResize.d.ts +1 -1
- package/dist/commands/dom/screenshotResize.js +1 -1
- package/dist/commands/optionBehaviors.d.ts.map +1 -1
- package/dist/commands/optionBehaviors.js +37 -0
- package/dist/commands/optionBehaviors.js.map +1 -1
- package/dist/commands/shared/optionTypes.d.ts +22 -0
- package/dist/commands/shared/optionTypes.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.js +1 -0
- package/dist/commands/shared/startHelpers.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +25 -6
- package/dist/commands/start.js.map +1 -1
- package/dist/connection/__tests__/flagsBuilder.unit.test.d.ts +9 -0
- package/dist/connection/__tests__/flagsBuilder.unit.test.d.ts.map +1 -0
- package/dist/connection/__tests__/flagsBuilder.unit.test.js +94 -0
- package/dist/connection/__tests__/flagsBuilder.unit.test.js.map +1 -0
- package/dist/connection/cdp.js.map +1 -1
- package/dist/connection/launcher/flagsBuilder.d.ts +26 -0
- package/dist/connection/launcher/flagsBuilder.d.ts.map +1 -1
- package/dist/connection/launcher/flagsBuilder.js +36 -8
- package/dist/connection/launcher/flagsBuilder.js.map +1 -1
- package/dist/connection/launcher.d.ts.map +1 -1
- package/dist/connection/launcher.js +20 -9
- package/dist/connection/launcher.js.map +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -0
- package/dist/constants.js.map +1 -1
- package/dist/daemon/handlers/SessionHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/SessionHandlers.js +1 -0
- package/dist/daemon/handlers/SessionHandlers.js.map +1 -1
- package/dist/daemon/launcher.d.ts.map +1 -1
- package/dist/daemon/launcher.js +8 -2
- package/dist/daemon/launcher.js.map +1 -1
- package/dist/daemon/lifecycle/chromeConnection.js +1 -1
- package/dist/daemon/lifecycle/chromeConnection.js.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.js +3 -1
- package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
- package/dist/daemon/lifecycle/workerConfig.d.ts.map +1 -1
- package/dist/daemon/lifecycle/workerConfig.js +3 -0
- package/dist/daemon/lifecycle/workerConfig.js.map +1 -1
- package/dist/daemon/startSession.d.ts +2 -0
- package/dist/daemon/startSession.d.ts.map +1 -1
- package/dist/daemon/startSession.js +7 -1
- package/dist/daemon/startSession.js.map +1 -1
- package/dist/daemon/worker/types.d.ts +2 -0
- package/dist/daemon/worker/types.d.ts.map +1 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +1 -0
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/protocol/messages.d.ts +2 -2
- package/dist/ipc/protocol/messages.d.ts.map +1 -1
- package/dist/ipc/session/lifecycle.d.ts +4 -0
- package/dist/ipc/session/lifecycle.d.ts.map +1 -1
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +50 -4
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/paths.d.ts +1 -0
- package/dist/session/paths.d.ts.map +1 -1
- package/dist/session/paths.js +1 -0
- package/dist/session/paths.js.map +1 -1
- package/dist/session/port.d.ts +41 -0
- package/dist/session/port.d.ts.map +1 -0
- package/dist/session/port.js +134 -0
- package/dist/session/port.js.map +1 -0
- package/dist/types.d.ts +120 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/formatters/form.d.ts +15 -0
- package/dist/ui/formatters/form.d.ts.map +1 -0
- package/dist/ui/formatters/form.js +314 -0
- package/dist/ui/formatters/form.js.map +1 -0
- package/dist/ui/messages/errors.d.ts +41 -12
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +113 -15
- package/dist/ui/messages/errors.js.map +1 -1
- package/dist/utils/__tests__/shellDetection.unit.test.d.ts +12 -0
- package/dist/utils/__tests__/shellDetection.unit.test.d.ts.map +1 -0
- package/dist/utils/__tests__/shellDetection.unit.test.js +220 -0
- package/dist/utils/__tests__/shellDetection.unit.test.js.map +1 -0
- package/dist/utils/decisionTrees.d.ts.map +1 -1
- package/dist/utils/decisionTrees.js +5 -0
- package/dist/utils/decisionTrees.js.map +1 -1
- package/dist/utils/exitCodes.d.ts +2 -0
- package/dist/utils/exitCodes.d.ts.map +1 -1
- package/dist/utils/exitCodes.js +12 -0
- package/dist/utils/exitCodes.js.map +1 -1
- package/dist/utils/shellDetection.d.ts +34 -0
- package/dist/utils/shellDetection.d.ts.map +1 -0
- package/dist/utils/shellDetection.js +94 -0
- package/dist/utils/shellDetection.js.map +1 -0
- package/dist/utils/taskMappings.d.ts.map +1 -1
- package/dist/utils/taskMappings.js +5 -0
- package/dist/utils/taskMappings.js.map +1 -1
- package/dist/utils/url.d.ts.map +1 -1
- package/dist/utils/url.js +14 -0
- package/dist/utils/url.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Human-readable formatter for form discovery output.
|
|
3
|
+
*
|
|
4
|
+
* Formats discovered forms with semantic tables showing fields,
|
|
5
|
+
* values, validation state, and suggested commands.
|
|
6
|
+
*/
|
|
7
|
+
import { OutputFormatter } from '../../ui/formatting.js';
|
|
8
|
+
const COLUMN_WIDTHS = {
|
|
9
|
+
index: 4,
|
|
10
|
+
type: 12,
|
|
11
|
+
label: 24,
|
|
12
|
+
value: 20,
|
|
13
|
+
status: 10,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Format field type for display.
|
|
17
|
+
*
|
|
18
|
+
* @param field - Form field
|
|
19
|
+
* @returns Formatted type string
|
|
20
|
+
*/
|
|
21
|
+
function formatFieldType(field) {
|
|
22
|
+
const type = field.inputType ?? field.type;
|
|
23
|
+
return type.slice(0, COLUMN_WIDTHS.type - 1);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Format field value for display.
|
|
27
|
+
*
|
|
28
|
+
* @param field - Form field
|
|
29
|
+
* @returns Formatted value string
|
|
30
|
+
*/
|
|
31
|
+
function formatFieldValue(field) {
|
|
32
|
+
if (field.state === 'checked') {
|
|
33
|
+
return 'checked';
|
|
34
|
+
}
|
|
35
|
+
if (field.state === 'unchecked') {
|
|
36
|
+
return 'unchecked';
|
|
37
|
+
}
|
|
38
|
+
if (field.maskedValue) {
|
|
39
|
+
return `"${field.maskedValue}"`;
|
|
40
|
+
}
|
|
41
|
+
if (typeof field.value === 'string' && field.value.length > 0) {
|
|
42
|
+
const truncated = field.value.slice(0, COLUMN_WIDTHS.value - 3);
|
|
43
|
+
return `"${truncated}${field.value.length > COLUMN_WIDTHS.value - 3 ? '...' : ''}"`;
|
|
44
|
+
}
|
|
45
|
+
if (Array.isArray(field.value) && field.value.length > 0) {
|
|
46
|
+
return `[${field.value.length} selected]`;
|
|
47
|
+
}
|
|
48
|
+
return 'empty';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Format field status with icon.
|
|
52
|
+
*
|
|
53
|
+
* @param field - Form field
|
|
54
|
+
* @returns Status string with icon
|
|
55
|
+
*/
|
|
56
|
+
function formatFieldStatus(field) {
|
|
57
|
+
if (field.disabled) {
|
|
58
|
+
return 'disabled';
|
|
59
|
+
}
|
|
60
|
+
if (!field.validation.valid) {
|
|
61
|
+
return 'invalid';
|
|
62
|
+
}
|
|
63
|
+
if (field.required && (field.state === 'empty' || field.state === 'unchecked')) {
|
|
64
|
+
return 'required';
|
|
65
|
+
}
|
|
66
|
+
return 'ok';
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format required marker.
|
|
70
|
+
*
|
|
71
|
+
* @param field - Form field
|
|
72
|
+
* @returns Asterisk if required, empty string otherwise
|
|
73
|
+
*/
|
|
74
|
+
function formatRequiredMarker(field) {
|
|
75
|
+
return field.required ? '*' : '';
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Format field row for table.
|
|
79
|
+
*
|
|
80
|
+
* @param field - Form field
|
|
81
|
+
* @returns Formatted row string
|
|
82
|
+
*/
|
|
83
|
+
function formatFieldRow(field) {
|
|
84
|
+
const idx = String(field.index).padStart(COLUMN_WIDTHS.index);
|
|
85
|
+
const type = formatFieldType(field).padEnd(COLUMN_WIDTHS.type);
|
|
86
|
+
const label = (field.label + formatRequiredMarker(field))
|
|
87
|
+
.slice(0, COLUMN_WIDTHS.label)
|
|
88
|
+
.padEnd(COLUMN_WIDTHS.label);
|
|
89
|
+
const value = formatFieldValue(field).padEnd(COLUMN_WIDTHS.value);
|
|
90
|
+
const status = formatFieldStatus(field);
|
|
91
|
+
let warning = '';
|
|
92
|
+
if (field.interactionWarning) {
|
|
93
|
+
warning = ` [custom]`;
|
|
94
|
+
}
|
|
95
|
+
return `${idx} ${type} ${label} ${value} ${status}${warning}`;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Format button row for table.
|
|
99
|
+
*
|
|
100
|
+
* @param button - Form button
|
|
101
|
+
* @returns Formatted row string
|
|
102
|
+
*/
|
|
103
|
+
function formatButtonRow(button) {
|
|
104
|
+
const idx = String(button.index).padStart(COLUMN_WIDTHS.index);
|
|
105
|
+
const type = 'button'.padEnd(COLUMN_WIDTHS.type);
|
|
106
|
+
const label = button.label.slice(0, COLUMN_WIDTHS.label).padEnd(COLUMN_WIDTHS.label);
|
|
107
|
+
const primary = button.primary ? '(primary)' : '(secondary)';
|
|
108
|
+
const enabled = button.enabled ? 'enabled' : 'disabled';
|
|
109
|
+
return `${idx} ${type} ${label} ${primary.padEnd(COLUMN_WIDTHS.value)} ${enabled}`;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Format form header with name and step indicator.
|
|
113
|
+
*
|
|
114
|
+
* @param form - Discovered form
|
|
115
|
+
* @returns Header string
|
|
116
|
+
*/
|
|
117
|
+
function formatFormHeader(form) {
|
|
118
|
+
let header = `Form: "${form.name ?? 'Unnamed'}"`;
|
|
119
|
+
if (form.step) {
|
|
120
|
+
header += ` (step ${form.step.current} of ${form.step.total})`;
|
|
121
|
+
}
|
|
122
|
+
return header;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Format table header row.
|
|
126
|
+
*
|
|
127
|
+
* @returns Header row string
|
|
128
|
+
*/
|
|
129
|
+
function formatTableHeader() {
|
|
130
|
+
const idx = '#'.padStart(COLUMN_WIDTHS.index);
|
|
131
|
+
const type = 'Type'.padEnd(COLUMN_WIDTHS.type);
|
|
132
|
+
const label = 'Label'.padEnd(COLUMN_WIDTHS.label);
|
|
133
|
+
const value = 'Value'.padEnd(COLUMN_WIDTHS.value);
|
|
134
|
+
const status = 'Status';
|
|
135
|
+
return `${idx} ${type} ${label} ${value} ${status}`;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Format summary line.
|
|
139
|
+
*
|
|
140
|
+
* @param summary - Form summary
|
|
141
|
+
* @returns Summary string
|
|
142
|
+
*/
|
|
143
|
+
function formatSummaryLine(summary) {
|
|
144
|
+
const parts = [];
|
|
145
|
+
parts.push(`${summary.filledFields}/${summary.totalFields} fields filled`);
|
|
146
|
+
if (summary.invalidFields > 0) {
|
|
147
|
+
parts.push(`${summary.invalidFields} invalid`);
|
|
148
|
+
}
|
|
149
|
+
if (summary.requiredRemaining > 0) {
|
|
150
|
+
parts.push(`${summary.requiredRemaining} required remaining`);
|
|
151
|
+
}
|
|
152
|
+
if (summary.readyToSubmit) {
|
|
153
|
+
parts.push('READY to submit');
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
parts.push('NOT ready');
|
|
157
|
+
}
|
|
158
|
+
return `Summary: ${parts.join(' | ')}`;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Format remaining actions section.
|
|
162
|
+
*
|
|
163
|
+
* @param summary - Form summary
|
|
164
|
+
* @returns Array of command strings
|
|
165
|
+
*/
|
|
166
|
+
function formatRemainingActions(summary) {
|
|
167
|
+
if (summary.blockers.length === 0) {
|
|
168
|
+
return [];
|
|
169
|
+
}
|
|
170
|
+
return summary.blockers.slice(0, 5).map((b) => ` ${b.command.padEnd(35)} # ${b.label}`);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Format single form for display.
|
|
174
|
+
*
|
|
175
|
+
* @param form - Discovered form
|
|
176
|
+
* @param fmt - Output formatter
|
|
177
|
+
*/
|
|
178
|
+
function formatSingleForm(form, fmt, brief = false) {
|
|
179
|
+
fmt.text(formatFormHeader(form));
|
|
180
|
+
fmt.text('─'.repeat(70));
|
|
181
|
+
if (brief) {
|
|
182
|
+
formatBriefFields(form, fmt);
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
fmt.text(formatTableHeader());
|
|
186
|
+
fmt.text('─'.repeat(70));
|
|
187
|
+
for (const field of form.fields) {
|
|
188
|
+
if (!field.hidden) {
|
|
189
|
+
fmt.text(formatFieldRow(field));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (form.buttons.length > 0) {
|
|
193
|
+
fmt.text('─'.repeat(70));
|
|
194
|
+
for (const button of form.buttons) {
|
|
195
|
+
fmt.text(formatButtonRow(button));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
fmt.text('═'.repeat(70));
|
|
199
|
+
fmt.text(formatSummaryLine(form.summary));
|
|
200
|
+
const remaining = formatRemainingActions(form.summary);
|
|
201
|
+
if (remaining.length > 0) {
|
|
202
|
+
fmt.blank();
|
|
203
|
+
fmt.text('Remaining:');
|
|
204
|
+
for (const action of remaining) {
|
|
205
|
+
fmt.text(action);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Format brief field listing.
|
|
211
|
+
*
|
|
212
|
+
* @param form - Discovered form
|
|
213
|
+
* @param fmt - Output formatter
|
|
214
|
+
*/
|
|
215
|
+
function formatBriefFields(form, fmt) {
|
|
216
|
+
fmt.text('IDX TYPE LABEL REQ');
|
|
217
|
+
fmt.text('─'.repeat(50));
|
|
218
|
+
for (const field of form.fields) {
|
|
219
|
+
if (field.hidden)
|
|
220
|
+
continue;
|
|
221
|
+
const idx = `[${field.index}]`.padEnd(4);
|
|
222
|
+
const type = (field.inputType ?? field.type).slice(0, 11).padEnd(12);
|
|
223
|
+
const label = (field.label ?? field.name ?? '(no label)').slice(0, 23).padEnd(24);
|
|
224
|
+
const req = field.required ? '*' : '';
|
|
225
|
+
fmt.text(`${idx} ${type} ${label} ${req}`);
|
|
226
|
+
}
|
|
227
|
+
if (form.buttons.length > 0) {
|
|
228
|
+
fmt.text('─'.repeat(50));
|
|
229
|
+
for (const button of form.buttons) {
|
|
230
|
+
const idx = `[${button.index}]`.padEnd(4);
|
|
231
|
+
const type = 'button'.padEnd(12);
|
|
232
|
+
const label = (button.label || button.type).slice(0, 23).padEnd(24);
|
|
233
|
+
fmt.text(`${idx} ${type} ${label}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Format other forms summary.
|
|
239
|
+
*
|
|
240
|
+
* @param forms - All forms
|
|
241
|
+
* @param selectedIndex - Index of selected form
|
|
242
|
+
* @param fmt - Output formatter
|
|
243
|
+
*/
|
|
244
|
+
function formatOtherForms(forms, selectedIndex, fmt) {
|
|
245
|
+
const others = forms.filter((_, i) => i !== selectedIndex);
|
|
246
|
+
if (others.length === 0) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
fmt.blank();
|
|
250
|
+
fmt.text('Other forms on page:');
|
|
251
|
+
for (const form of others) {
|
|
252
|
+
const fieldCount = form.fields.filter((f) => !f.hidden).length;
|
|
253
|
+
fmt.text(` Form ${form.index}: "${form.name ?? 'Unnamed'}" - ${fieldCount} field(s)`);
|
|
254
|
+
}
|
|
255
|
+
fmt.blank();
|
|
256
|
+
fmt.text('Use --all to see all forms');
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* Format form discovery result for human-readable display.
|
|
260
|
+
*
|
|
261
|
+
* @param result - Form discovery result
|
|
262
|
+
* @returns Formatted output string
|
|
263
|
+
*/
|
|
264
|
+
export function formatFormDiscovery(result) {
|
|
265
|
+
const fmt = new OutputFormatter();
|
|
266
|
+
fmt.text(`FORMS DISCOVERED: ${result.formCount}`);
|
|
267
|
+
fmt.text('═'.repeat(70));
|
|
268
|
+
fmt.blank();
|
|
269
|
+
for (const form of result.forms) {
|
|
270
|
+
formatSingleForm(form, fmt, result.brief);
|
|
271
|
+
fmt.blank();
|
|
272
|
+
}
|
|
273
|
+
if (result.forms.length === 1 && result.formCount > 1) {
|
|
274
|
+
const allForms = [];
|
|
275
|
+
for (let i = 0; i < result.formCount; i++) {
|
|
276
|
+
if (i === result.selectedForm) {
|
|
277
|
+
allForms.push(result.forms[0]);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
allForms.push({
|
|
281
|
+
index: i,
|
|
282
|
+
name: `Form ${i}`,
|
|
283
|
+
action: null,
|
|
284
|
+
method: 'GET',
|
|
285
|
+
relevanceScore: 0,
|
|
286
|
+
fields: [],
|
|
287
|
+
buttons: [],
|
|
288
|
+
summary: {
|
|
289
|
+
totalFields: 0,
|
|
290
|
+
filledFields: 0,
|
|
291
|
+
emptyFields: 0,
|
|
292
|
+
validFields: 0,
|
|
293
|
+
invalidFields: 0,
|
|
294
|
+
requiredTotal: 0,
|
|
295
|
+
requiredFilled: 0,
|
|
296
|
+
requiredRemaining: 0,
|
|
297
|
+
readyToSubmit: true,
|
|
298
|
+
blockers: [],
|
|
299
|
+
},
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
formatOtherForms(allForms, result.selectedForm, fmt);
|
|
304
|
+
}
|
|
305
|
+
fmt.blank();
|
|
306
|
+
fmt.text('Suggested commands:');
|
|
307
|
+
fmt.text(' bdg dom fill <index> "<value>" Fill a field');
|
|
308
|
+
fmt.text(' bdg dom click <index> Click/check a field or button');
|
|
309
|
+
fmt.text(' bdg dom form Refresh to see current state');
|
|
310
|
+
fmt.blank();
|
|
311
|
+
fmt.text('Tip: Re-run "bdg dom form" after clicks that may reveal hidden fields');
|
|
312
|
+
return fmt.build();
|
|
313
|
+
}
|
|
314
|
+
//# sourceMappingURL=form.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.js","sourceRoot":"","sources":["../../../src/ui/formatters/form.ts"],"names":[],"mappings":"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"}
|
|
@@ -100,21 +100,23 @@ export declare function invalidResponseError(reason: string): string;
|
|
|
100
100
|
*/
|
|
101
101
|
export declare function sessionNotActiveError(operation: string): string;
|
|
102
102
|
/**
|
|
103
|
-
* Generate element not found error with CDP fallback.
|
|
103
|
+
* Generate element not found error with shell quote detection and CDP fallback.
|
|
104
104
|
*
|
|
105
|
-
* Provides guidance for when high-level DOM commands fail to find elements
|
|
106
|
-
*
|
|
105
|
+
* Provides guidance for when high-level DOM commands fail to find elements.
|
|
106
|
+
* Detects shell quote damage for attribute selectors and provides specific
|
|
107
|
+
* recovery suggestions including the two-step query-then-inspect pattern.
|
|
107
108
|
*
|
|
108
|
-
* @param selector - CSS selector that failed
|
|
109
|
-
* @returns Formatted error message with
|
|
109
|
+
* @param selector - CSS selector that failed (as received by the command)
|
|
110
|
+
* @returns Formatted error message with context-aware suggestions
|
|
110
111
|
*
|
|
111
112
|
* @example
|
|
112
113
|
* ```typescript
|
|
113
|
-
*
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* )
|
|
114
|
+
* // Simple selector - standard suggestions
|
|
115
|
+
* elementNotFoundError('#missing-element')
|
|
116
|
+
*
|
|
117
|
+
* // Attribute selector with shell damage detected
|
|
118
|
+
* elementNotFoundError('[data-test-id=value]')
|
|
119
|
+
* // Shows: "Shell quote handling detected. Selector received without quotes."
|
|
118
120
|
* ```
|
|
119
121
|
*/
|
|
120
122
|
export declare function elementNotFoundError(selector: string): string;
|
|
@@ -186,9 +188,16 @@ export declare function sessionTargetNotFoundError(): ErrorWithSuggestion;
|
|
|
186
188
|
*/
|
|
187
189
|
export declare function sessionMetadataMissingError(field: string): ErrorWithSuggestion;
|
|
188
190
|
/**
|
|
189
|
-
* Script execution error.
|
|
191
|
+
* Script execution error with shell quote detection.
|
|
192
|
+
*
|
|
193
|
+
* Shows the script as received to help diagnose shell quote stripping issues.
|
|
194
|
+
* Detects common patterns like `querySelector(input)` that indicate shell damage.
|
|
195
|
+
*
|
|
196
|
+
* @param errorMessage - The JavaScript error message
|
|
197
|
+
* @param receivedScript - The script as received by the command (optional for backwards compat)
|
|
198
|
+
* @returns Error with context-aware suggestions
|
|
190
199
|
*/
|
|
191
|
-
export declare function scriptExecutionError(
|
|
200
|
+
export declare function scriptExecutionError(errorMessage: string, receivedScript?: string): ErrorWithSuggestion;
|
|
192
201
|
/**
|
|
193
202
|
* Unexpected CDP response format.
|
|
194
203
|
*/
|
|
@@ -201,4 +210,24 @@ export declare function operationFailedError(operation: string, errorMessage: st
|
|
|
201
210
|
* Internal error (should not happen in normal usage).
|
|
202
211
|
*/
|
|
203
212
|
export declare function internalError(context: string): ErrorWithSuggestion;
|
|
213
|
+
/**
|
|
214
|
+
* No forms found on page.
|
|
215
|
+
*/
|
|
216
|
+
export declare function noFormsFoundError(): ErrorWithSuggestion;
|
|
217
|
+
/**
|
|
218
|
+
* Form selection out of range.
|
|
219
|
+
*/
|
|
220
|
+
export declare function formSelectionOutOfRangeError(index: number, count: number): ErrorWithSuggestion;
|
|
221
|
+
/**
|
|
222
|
+
* Form selection by name not found.
|
|
223
|
+
*/
|
|
224
|
+
export declare function formSelectionByNameNotFoundError(name: string, availableNames: string[]): ErrorWithSuggestion;
|
|
225
|
+
/**
|
|
226
|
+
* Form in iframe (cross-origin or same-origin).
|
|
227
|
+
*/
|
|
228
|
+
export declare function formInIframeError(iframeUrl: string, crossOrigin: boolean): ErrorWithSuggestion;
|
|
229
|
+
/**
|
|
230
|
+
* Custom component interaction warning.
|
|
231
|
+
*/
|
|
232
|
+
export declare function customComponentWarning(elementType: string, suggestedAction: string): ErrorWithSuggestion;
|
|
204
233
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Centralized location for reusable error messages with consistent formatting.
|
|
5
5
|
*/
|
|
6
6
|
import { formatDuration, joinLines } from '../../ui/formatting.js';
|
|
7
|
+
import { detectSelectorQuoteDamage, detectScriptQuoteDamage, hasAttributeSelector, } from '../../utils/shellDetection.js';
|
|
7
8
|
/**
|
|
8
9
|
* Generate "session already running" error message.
|
|
9
10
|
*
|
|
@@ -103,25 +104,34 @@ export function sessionNotActiveError(operation) {
|
|
|
103
104
|
return joinLines(`Error: Cannot ${operation} - no active session`, '', 'Start a session first:', ' bdg <url>', '', 'Example:', ' bdg https://example.com', ` bdg ${operation}`);
|
|
104
105
|
}
|
|
105
106
|
/**
|
|
106
|
-
* Generate element not found error with CDP fallback.
|
|
107
|
+
* Generate element not found error with shell quote detection and CDP fallback.
|
|
107
108
|
*
|
|
108
|
-
* Provides guidance for when high-level DOM commands fail to find elements
|
|
109
|
-
*
|
|
109
|
+
* Provides guidance for when high-level DOM commands fail to find elements.
|
|
110
|
+
* Detects shell quote damage for attribute selectors and provides specific
|
|
111
|
+
* recovery suggestions including the two-step query-then-inspect pattern.
|
|
110
112
|
*
|
|
111
|
-
* @param selector - CSS selector that failed
|
|
112
|
-
* @returns Formatted error message with
|
|
113
|
+
* @param selector - CSS selector that failed (as received by the command)
|
|
114
|
+
* @returns Formatted error message with context-aware suggestions
|
|
113
115
|
*
|
|
114
116
|
* @example
|
|
115
117
|
* ```typescript
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
* )
|
|
118
|
+
* // Simple selector - standard suggestions
|
|
119
|
+
* elementNotFoundError('#missing-element')
|
|
120
|
+
*
|
|
121
|
+
* // Attribute selector with shell damage detected
|
|
122
|
+
* elementNotFoundError('[data-test-id=value]')
|
|
123
|
+
* // Shows: "Shell quote handling detected. Selector received without quotes."
|
|
121
124
|
* ```
|
|
122
125
|
*/
|
|
123
126
|
export function elementNotFoundError(selector) {
|
|
124
|
-
|
|
127
|
+
const quoteCheck = detectSelectorQuoteDamage(selector);
|
|
128
|
+
if (quoteCheck.damaged) {
|
|
129
|
+
return joinLines(`Error: Element not found: ${selector}`, '', 'Shell quote handling detected. Selector received without quotes.', quoteCheck.details && ` ${quoteCheck.details}`, '', 'Discovery path (recommended):', ` 1. Query first: bdg dom query '${selector}'`, ' 2. Then inspect: bdg dom a11y describe 0', '', 'Or escape quotes for direct use:', ` bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\\"${selector.replace(/=/g, '=\\\\\\"')}\\\\\\"\\")"}'`);
|
|
130
|
+
}
|
|
131
|
+
if (hasAttributeSelector(selector)) {
|
|
132
|
+
return joinLines(`Error: Element not found: ${selector}`, '', 'Attribute selector detected. If quotes were stripped by shell:', '', 'Discovery path (recommended):', ` 1. Query first: bdg dom query '${selector}'`, ' 2. Then inspect: bdg dom a11y describe 0', '', 'Or verify element exists:', ' - Use bdg peek --dom to see page structure', ' - Check if element loads asynchronously');
|
|
133
|
+
}
|
|
134
|
+
return joinLines(`Error: Element not found: ${selector}`, '', 'Suggestions:', ' - Check the selector syntax', ' - Wait for the element to load (page might still be loading)', ' - Use bdg peek to see if page loaded correctly', '', 'Advanced: Use CDP for complex queries:', ` bdg cdp Runtime.evaluate --params '{"expression":"document.querySelector(\\"${selector}\\")"}'`);
|
|
125
135
|
}
|
|
126
136
|
/**
|
|
127
137
|
* Index out of range error.
|
|
@@ -259,12 +269,47 @@ export function sessionMetadataMissingError(field) {
|
|
|
259
269
|
};
|
|
260
270
|
}
|
|
261
271
|
/**
|
|
262
|
-
* Script execution error.
|
|
272
|
+
* Script execution error with shell quote detection.
|
|
273
|
+
*
|
|
274
|
+
* Shows the script as received to help diagnose shell quote stripping issues.
|
|
275
|
+
* Detects common patterns like `querySelector(input)` that indicate shell damage.
|
|
276
|
+
*
|
|
277
|
+
* @param errorMessage - The JavaScript error message
|
|
278
|
+
* @param receivedScript - The script as received by the command (optional for backwards compat)
|
|
279
|
+
* @returns Error with context-aware suggestions
|
|
263
280
|
*/
|
|
264
|
-
export function scriptExecutionError(
|
|
281
|
+
export function scriptExecutionError(errorMessage, receivedScript) {
|
|
282
|
+
if (!receivedScript) {
|
|
283
|
+
return {
|
|
284
|
+
message: errorMessage,
|
|
285
|
+
suggestion: 'Check JavaScript syntax and ensure the expression is valid',
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
const quoteCheck = detectScriptQuoteDamage(receivedScript);
|
|
289
|
+
const truncatedScript = receivedScript.length > 100 ? receivedScript.slice(0, 100) + '...' : receivedScript;
|
|
290
|
+
const lines = [];
|
|
291
|
+
lines.push(`Script received: ${truncatedScript}`);
|
|
292
|
+
if (quoteCheck.damaged) {
|
|
293
|
+
lines.push('');
|
|
294
|
+
lines.push('Shell quote damage detected:');
|
|
295
|
+
if (quoteCheck.details) {
|
|
296
|
+
lines.push(` ${quoteCheck.details}`);
|
|
297
|
+
}
|
|
298
|
+
if (quoteCheck.suggestion) {
|
|
299
|
+
lines.push('');
|
|
300
|
+
lines.push(quoteCheck.suggestion);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
lines.push('');
|
|
305
|
+
lines.push('Tips:');
|
|
306
|
+
lines.push(" - Use single quotes around script: bdg dom eval '...'");
|
|
307
|
+
lines.push(' - For complex scripts, use heredoc or --file option');
|
|
308
|
+
lines.push(' - Escape inner quotes: \\" or use opposite quote style');
|
|
309
|
+
}
|
|
265
310
|
return {
|
|
266
|
-
message:
|
|
267
|
-
suggestion: '
|
|
311
|
+
message: errorMessage,
|
|
312
|
+
suggestion: lines.join('\n'),
|
|
268
313
|
};
|
|
269
314
|
}
|
|
270
315
|
/**
|
|
@@ -294,4 +339,57 @@ export function internalError(context) {
|
|
|
294
339
|
suggestion: 'This is an internal error - please report this issue',
|
|
295
340
|
};
|
|
296
341
|
}
|
|
342
|
+
/**
|
|
343
|
+
* No forms found on page.
|
|
344
|
+
*/
|
|
345
|
+
export function noFormsFoundError() {
|
|
346
|
+
return {
|
|
347
|
+
message: 'No forms discovered on the page',
|
|
348
|
+
suggestion: 'Check if forms exist with: bdg dom query "form, input, [role=textbox]" or inspect the page manually',
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Form selection out of range.
|
|
353
|
+
*/
|
|
354
|
+
export function formSelectionOutOfRangeError(index, count) {
|
|
355
|
+
return {
|
|
356
|
+
message: `Form index ${index} out of range (found ${count} form${count === 1 ? '' : 's'})`,
|
|
357
|
+
suggestion: count > 0 ? `Use an index between 0 and ${count - 1}` : 'No forms found on page',
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Form selection by name not found.
|
|
362
|
+
*/
|
|
363
|
+
export function formSelectionByNameNotFoundError(name, availableNames) {
|
|
364
|
+
const nameList = availableNames.length > 0
|
|
365
|
+
? `Available forms: ${availableNames.join(', ')}`
|
|
366
|
+
: 'No named forms found';
|
|
367
|
+
return {
|
|
368
|
+
message: `No form found matching "${name}"`,
|
|
369
|
+
suggestion: `${nameList}. Use --all to see all forms.`,
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Form in iframe (cross-origin or same-origin).
|
|
374
|
+
*/
|
|
375
|
+
export function formInIframeError(iframeUrl, crossOrigin) {
|
|
376
|
+
const originNote = crossOrigin
|
|
377
|
+
? 'Cross-origin iframe - cannot inspect directly'
|
|
378
|
+
: 'Same-origin iframe - use frame commands to access';
|
|
379
|
+
return {
|
|
380
|
+
message: `Form is inside an iframe: ${iframeUrl}`,
|
|
381
|
+
suggestion: crossOrigin
|
|
382
|
+
? `${originNote}. Manual interaction required for cross-origin frames.`
|
|
383
|
+
: `${originNote}. Try: bdg dom frame list, then bdg dom frame attach <id>`,
|
|
384
|
+
};
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Custom component interaction warning.
|
|
388
|
+
*/
|
|
389
|
+
export function customComponentWarning(elementType, suggestedAction) {
|
|
390
|
+
return {
|
|
391
|
+
message: `Custom component detected: ${elementType}`,
|
|
392
|
+
suggestion: `Standard fill may not work. Try: ${suggestedAction}`,
|
|
393
|
+
};
|
|
394
|
+
}
|
|
297
395
|
//# sourceMappingURL=errors.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/ui/messages/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shell Detection Unit Tests
|
|
3
|
+
*
|
|
4
|
+
* Tests shell quote damage detection for selectors and scripts.
|
|
5
|
+
*
|
|
6
|
+
* Following testing philosophy:
|
|
7
|
+
* - Test the BEHAVIOR: "Detects damaged input, provides actionable suggestions"
|
|
8
|
+
* - Test the PROPERTY: "Never throws, always returns valid result"
|
|
9
|
+
* - No mocking needed - pure utility functions
|
|
10
|
+
*/
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=shellDetection.unit.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shellDetection.unit.test.d.ts","sourceRoot":"","sources":["../../../src/utils/__tests__/shellDetection.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|