browser-debugger-cli 0.6.7 → 0.6.9
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/dist/__tests__/telemetry/filterDsl.unit.test.d.ts +12 -0
- package/dist/__tests__/telemetry/filterDsl.unit.test.d.ts.map +1 -0
- package/dist/__tests__/telemetry/filterDsl.unit.test.js +374 -0
- package/dist/__tests__/telemetry/filterDsl.unit.test.js.map +1 -0
- package/dist/__tests__/telemetry/filterPresets.unit.test.d.ts +10 -0
- package/dist/__tests__/telemetry/filterPresets.unit.test.d.ts.map +1 -0
- package/dist/__tests__/telemetry/filterPresets.unit.test.js +89 -0
- package/dist/__tests__/telemetry/filterPresets.unit.test.js.map +1 -0
- package/dist/commands/__tests__/console.contract.test.d.ts +9 -0
- package/dist/commands/__tests__/console.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/console.contract.test.js +118 -0
- package/dist/commands/__tests__/console.contract.test.js.map +1 -0
- package/dist/commands/cleanup.js +1 -1
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/console.d.ts +26 -0
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +195 -57
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/details.js +1 -1
- package/dist/commands/details.js.map +1 -1
- package/dist/commands/dom/DomElementResolver.js +2 -2
- 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 +30 -18
- package/dist/commands/dom/a11y.js.map +1 -1
- package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formFillHelpers.js +64 -2
- package/dist/commands/dom/formFillHelpers.js.map +1 -1
- package/dist/commands/dom/formInteraction.js +4 -4
- package/dist/commands/dom/formInteraction.js.map +1 -1
- package/dist/commands/dom/helpers.d.ts +1 -1
- package/dist/commands/dom/helpers.d.ts.map +1 -1
- package/dist/commands/dom/helpers.js +3 -3
- package/dist/commands/dom/helpers.js.map +1 -1
- package/dist/commands/dom/index.d.ts.map +1 -1
- package/dist/commands/dom/index.js +4 -1
- package/dist/commands/dom/index.js.map +1 -1
- package/dist/commands/network/har.d.ts +14 -0
- package/dist/commands/network/har.d.ts.map +1 -0
- package/dist/commands/network/har.js +97 -0
- package/dist/commands/network/har.js.map +1 -0
- package/dist/commands/network/index.d.ts +18 -0
- package/dist/commands/network/index.d.ts.map +1 -0
- package/dist/commands/network/index.js +27 -0
- package/dist/commands/network/index.js.map +1 -0
- package/dist/commands/network/list.d.ts +14 -0
- package/dist/commands/network/list.d.ts.map +1 -0
- package/dist/commands/network/list.js +273 -0
- package/dist/commands/network/list.js.map +1 -0
- package/dist/commands/network/shared.d.ts +56 -0
- package/dist/commands/network/shared.d.ts.map +1 -0
- package/dist/commands/network/shared.js +174 -0
- package/dist/commands/network/shared.js.map +1 -0
- package/dist/commands/network.js +4 -4
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +7 -2
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts +19 -0
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +30 -0
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/commonOptions.d.ts +8 -24
- package/dist/commands/shared/commonOptions.d.ts.map +1 -1
- package/dist/commands/shared/commonOptions.js +9 -25
- package/dist/commands/shared/commonOptions.js.map +1 -1
- package/dist/commands/shared/optionTypes.d.ts +42 -4
- package/dist/commands/shared/optionTypes.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.d.ts +2 -10
- package/dist/commands/shared/startHelpers.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.js +9 -4
- package/dist/commands/shared/startHelpers.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +3 -1
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/stop.js +1 -1
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.js +1 -1
- package/dist/commands/tail.js.map +1 -1
- package/dist/commands.js +1 -1
- package/dist/commands.js.map +1 -1
- package/dist/constants.d.ts +15 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +18 -0
- package/dist/constants.js.map +1 -1
- package/dist/daemon/__tests__/commandRegistry.contract.test.js +6 -2
- package/dist/daemon/__tests__/commandRegistry.contract.test.js.map +1 -1
- package/dist/daemon/handlers/CommandHandlers.d.ts +5 -0
- package/dist/daemon/handlers/CommandHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/CommandHandlers.js +6 -1
- package/dist/daemon/handlers/CommandHandlers.js.map +1 -1
- package/dist/daemon/handlers/QueryHandlers.d.ts.map +1 -1
- package/dist/daemon/handlers/QueryHandlers.js +3 -1
- package/dist/daemon/handlers/QueryHandlers.js.map +1 -1
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
- package/dist/daemon/worker/commandRegistry.js +150 -53
- package/dist/daemon/worker/commandRegistry.js.map +1 -1
- package/dist/ipc/client.d.ts +10 -1
- package/dist/ipc/client.d.ts.map +1 -1
- package/dist/ipc/client.js +12 -2
- package/dist/ipc/client.js.map +1 -1
- package/dist/ipc/session/queries.d.ts +2 -0
- package/dist/ipc/session/queries.d.ts.map +1 -1
- package/dist/session/QueryCacheManager.d.ts +1 -1
- package/dist/session/QueryCacheManager.d.ts.map +1 -1
- package/dist/telemetry/__tests__/remoteObject.unit.test.d.ts +2 -0
- package/dist/telemetry/__tests__/remoteObject.unit.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/remoteObject.unit.test.js +261 -0
- package/dist/telemetry/__tests__/remoteObject.unit.test.js.map +1 -0
- package/dist/telemetry/console.d.ts +8 -8
- package/dist/telemetry/console.d.ts.map +1 -1
- package/dist/telemetry/console.js +142 -53
- package/dist/telemetry/console.js.map +1 -1
- package/dist/telemetry/filterDsl.d.ts +45 -0
- package/dist/telemetry/filterDsl.d.ts.map +1 -0
- package/dist/telemetry/filterDsl.js +299 -0
- package/dist/telemetry/filterDsl.js.map +1 -0
- package/dist/telemetry/filterPresets.d.ts +35 -0
- package/dist/telemetry/filterPresets.d.ts.map +1 -0
- package/dist/telemetry/filterPresets.js +76 -0
- package/dist/telemetry/filterPresets.js.map +1 -0
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +16 -8
- package/dist/telemetry/network.js.map +1 -1
- package/dist/telemetry/objectExpander.d.ts +35 -0
- package/dist/telemetry/objectExpander.d.ts.map +1 -0
- package/dist/telemetry/objectExpander.js +165 -0
- package/dist/telemetry/objectExpander.js.map +1 -0
- package/dist/telemetry/remoteObject.d.ts +41 -0
- package/dist/telemetry/remoteObject.d.ts.map +1 -0
- package/dist/telemetry/remoteObject.js +193 -0
- package/dist/telemetry/remoteObject.js.map +1 -0
- package/dist/telemetry/remoteObjectUtils.d.ts +40 -0
- package/dist/telemetry/remoteObjectUtils.d.ts.map +1 -0
- package/dist/telemetry/remoteObjectUtils.js +75 -0
- package/dist/telemetry/remoteObjectUtils.js.map +1 -0
- package/dist/telemetry/roleInference.d.ts +1 -1
- package/dist/telemetry/roleInference.d.ts.map +1 -1
- package/dist/types.d.ts +113 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/formatters/a11y.d.ts +1 -1
- package/dist/ui/formatters/a11y.d.ts.map +1 -1
- package/dist/ui/formatters/console.d.ts +143 -0
- package/dist/ui/formatters/console.d.ts.map +1 -0
- package/dist/ui/formatters/console.js +431 -0
- package/dist/ui/formatters/console.js.map +1 -0
- package/dist/ui/formatters/dom.d.ts +4 -4
- package/dist/ui/formatters/dom.d.ts.map +1 -1
- package/dist/ui/formatters/dom.js +5 -5
- package/dist/ui/formatters/dom.js.map +1 -1
- package/dist/ui/formatters/networkList.d.ts +19 -0
- package/dist/ui/formatters/networkList.d.ts.map +1 -0
- package/dist/ui/formatters/networkList.js +86 -0
- package/dist/ui/formatters/networkList.js.map +1 -0
- package/dist/ui/formatters/preview.d.ts +18 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -1
- package/dist/ui/formatters/preview.js +13 -5
- package/dist/ui/formatters/preview.js.map +1 -1
- package/dist/ui/logging/logger.d.ts +1 -1
- package/dist/ui/logging/logger.d.ts.map +1 -1
- package/dist/ui/logging/logger.js.map +1 -1
- package/dist/ui/messages/consoleMessages.d.ts +12 -27
- package/dist/ui/messages/consoleMessages.d.ts.map +1 -1
- package/dist/ui/messages/consoleMessages.js +16 -31
- package/dist/ui/messages/consoleMessages.js.map +1 -1
- package/dist/ui/messages/networkMessages.d.ts +24 -0
- package/dist/ui/messages/networkMessages.d.ts.map +1 -0
- package/dist/ui/messages/networkMessages.js +30 -0
- package/dist/ui/messages/networkMessages.js.map +1 -0
- package/dist/utils/decisionTrees.d.ts.map +1 -1
- package/dist/utils/decisionTrees.js +17 -2
- package/dist/utils/decisionTrees.js.map +1 -1
- package/dist/utils/strings.d.ts +14 -0
- package/dist/utils/strings.d.ts.map +1 -0
- package/dist/utils/strings.js +23 -0
- package/dist/utils/strings.js.map +1 -0
- package/dist/utils/taskMappings.d.ts.map +1 -1
- package/dist/utils/taskMappings.js +18 -3
- package/dist/utils/taskMappings.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Console command formatters.
|
|
3
|
+
*
|
|
4
|
+
* Provides formatting functions for the `bdg console` command output including
|
|
5
|
+
* smart summary view with deduplication, chronological view, and JSON output.
|
|
6
|
+
*/
|
|
7
|
+
import { OutputFormatter, pluralize } from '../../ui/formatting.js';
|
|
8
|
+
import { truncateByLength } from '../../utils/strings.js';
|
|
9
|
+
/**
|
|
10
|
+
* Mapping from console message types to level categories.
|
|
11
|
+
* Exported for use by console command filtering.
|
|
12
|
+
*/
|
|
13
|
+
export const LEVEL_MAP = {
|
|
14
|
+
error: 'error',
|
|
15
|
+
warning: 'warning',
|
|
16
|
+
info: 'info',
|
|
17
|
+
log: 'info',
|
|
18
|
+
debug: 'debug',
|
|
19
|
+
trace: 'debug',
|
|
20
|
+
dir: 'other',
|
|
21
|
+
dirxml: 'other',
|
|
22
|
+
table: 'other',
|
|
23
|
+
clear: 'other',
|
|
24
|
+
startGroup: 'other',
|
|
25
|
+
startGroupCollapsed: 'other',
|
|
26
|
+
endGroup: 'other',
|
|
27
|
+
assert: 'other',
|
|
28
|
+
profile: 'other',
|
|
29
|
+
profileEnd: 'other',
|
|
30
|
+
count: 'other',
|
|
31
|
+
timeEnd: 'other',
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Classify a console message type into a level category.
|
|
35
|
+
*
|
|
36
|
+
* @param type - Console message type from CDP
|
|
37
|
+
* @returns Normalized level category
|
|
38
|
+
*/
|
|
39
|
+
function classifyLevel(type) {
|
|
40
|
+
return LEVEL_MAP[type];
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Format timestamp with milliseconds precision.
|
|
44
|
+
*
|
|
45
|
+
* @param timestamp - Unix timestamp in milliseconds
|
|
46
|
+
* @returns Formatted time string like "12:34:56.789"
|
|
47
|
+
*/
|
|
48
|
+
function formatTimestamp(timestamp) {
|
|
49
|
+
const date = new Date(timestamp);
|
|
50
|
+
const hours = date.getHours().toString().padStart(2, '0');
|
|
51
|
+
const minutes = date.getMinutes().toString().padStart(2, '0');
|
|
52
|
+
const seconds = date.getSeconds().toString().padStart(2, '0');
|
|
53
|
+
const ms = date.getMilliseconds().toString().padStart(3, '0');
|
|
54
|
+
return `${hours}:${minutes}:${seconds}.${ms}`;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Generate a deduplication key for a console message.
|
|
58
|
+
*
|
|
59
|
+
* Messages are considered duplicates if they have the same text and source location.
|
|
60
|
+
*
|
|
61
|
+
* @param message - Console message to generate key for
|
|
62
|
+
* @returns Unique key string for deduplication
|
|
63
|
+
*/
|
|
64
|
+
function getDeduplicationKey(message) {
|
|
65
|
+
const source = message.stackTrace?.[0];
|
|
66
|
+
if (source) {
|
|
67
|
+
return `${message.text}|${source.url}|${source.lineNumber}|${source.columnNumber}`;
|
|
68
|
+
}
|
|
69
|
+
return message.text;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Deduplicate an array of messages, grouping by key and counting occurrences.
|
|
73
|
+
*
|
|
74
|
+
* @param messages - Messages to deduplicate
|
|
75
|
+
* @returns Deduplicated messages with counts
|
|
76
|
+
*/
|
|
77
|
+
function deduplicate(messages) {
|
|
78
|
+
const groups = new Map();
|
|
79
|
+
for (const message of messages) {
|
|
80
|
+
const key = getDeduplicationKey(message);
|
|
81
|
+
const existing = groups.get(key);
|
|
82
|
+
if (existing) {
|
|
83
|
+
existing.count++;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
groups.set(key, { message, count: 1 });
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return Array.from(groups.values());
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Group and process messages in a single pass.
|
|
93
|
+
*
|
|
94
|
+
* Partitions messages by level, deduplicates errors/warnings,
|
|
95
|
+
* and counts all levels efficiently.
|
|
96
|
+
*
|
|
97
|
+
* @param messages - All console messages
|
|
98
|
+
* @returns Grouped and processed message data
|
|
99
|
+
*/
|
|
100
|
+
function groupByLevel(messages) {
|
|
101
|
+
const byLevel = {
|
|
102
|
+
error: [],
|
|
103
|
+
warning: [],
|
|
104
|
+
info: [],
|
|
105
|
+
debug: [],
|
|
106
|
+
other: [],
|
|
107
|
+
};
|
|
108
|
+
for (const msg of messages) {
|
|
109
|
+
byLevel[classifyLevel(msg.type)].push(msg);
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
errors: deduplicate(byLevel.error),
|
|
113
|
+
warnings: deduplicate(byLevel.warning),
|
|
114
|
+
counts: {
|
|
115
|
+
error: byLevel.error.length,
|
|
116
|
+
warning: byLevel.warning.length,
|
|
117
|
+
info: byLevel.info.length,
|
|
118
|
+
debug: byLevel.debug.length,
|
|
119
|
+
other: byLevel.other.length,
|
|
120
|
+
},
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Calculate summary statistics from grouped messages.
|
|
125
|
+
*
|
|
126
|
+
* @param total - Total message count
|
|
127
|
+
* @param grouped - Grouped and deduplicated messages
|
|
128
|
+
* @returns Summary statistics object
|
|
129
|
+
*/
|
|
130
|
+
function buildSummary(total, grouped) {
|
|
131
|
+
const sumCounts = (items) => items.reduce((sum, d) => sum + d.count, 0);
|
|
132
|
+
return {
|
|
133
|
+
total,
|
|
134
|
+
errors: { total: sumCounts(grouped.errors), unique: grouped.errors.length },
|
|
135
|
+
warnings: { total: sumCounts(grouped.warnings), unique: grouped.warnings.length },
|
|
136
|
+
info: grouped.counts.info,
|
|
137
|
+
debug: grouped.counts.debug,
|
|
138
|
+
other: grouped.counts.other,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Analyze console messages: group, deduplicate, and summarize.
|
|
143
|
+
*
|
|
144
|
+
* Single entry point for message analysis used by all formatters.
|
|
145
|
+
*
|
|
146
|
+
* @param messages - All console messages
|
|
147
|
+
* @returns Object with grouped messages and summary
|
|
148
|
+
*/
|
|
149
|
+
function analyzeMessages(messages) {
|
|
150
|
+
const grouped = groupByLevel(messages);
|
|
151
|
+
const summary = buildSummary(messages.length, grouped);
|
|
152
|
+
return { grouped, summary };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Extract filename from URL for display.
|
|
156
|
+
*
|
|
157
|
+
* @param url - Full URL or empty string
|
|
158
|
+
* @param functionName - Optional function name for inline scripts
|
|
159
|
+
* @returns Concise filename representation
|
|
160
|
+
*/
|
|
161
|
+
function getFilenameFromUrl(url, functionName) {
|
|
162
|
+
if (!url || url === '') {
|
|
163
|
+
return functionName ? `<${functionName}>` : '<inline>';
|
|
164
|
+
}
|
|
165
|
+
if (url.startsWith('eval')) {
|
|
166
|
+
return '<eval>';
|
|
167
|
+
}
|
|
168
|
+
if (url.includes('/')) {
|
|
169
|
+
return url.split('/').pop() ?? url;
|
|
170
|
+
}
|
|
171
|
+
return url;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Format source location as "file:line:col".
|
|
175
|
+
*
|
|
176
|
+
* @param stackTrace - Stack trace frames
|
|
177
|
+
* @returns Formatted source location string, or undefined if no source
|
|
178
|
+
*/
|
|
179
|
+
function formatSourceLocation(stackTrace) {
|
|
180
|
+
const frame = stackTrace?.[0];
|
|
181
|
+
if (!frame)
|
|
182
|
+
return undefined;
|
|
183
|
+
const filename = getFilenameFromUrl(frame.url, frame.functionName);
|
|
184
|
+
const line = frame.lineNumber + 1;
|
|
185
|
+
const col = frame.columnNumber + 1;
|
|
186
|
+
return `${filename}:${line}:${col}`;
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Format count prefix for deduplicated messages.
|
|
190
|
+
*
|
|
191
|
+
* @param count - Occurrence count
|
|
192
|
+
* @returns Formatted prefix like "[8x] " or empty string
|
|
193
|
+
*/
|
|
194
|
+
function formatCountPrefix(count) {
|
|
195
|
+
return count > 1 ? `[${count}x] ` : '';
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Format section header with unique/total counts.
|
|
199
|
+
*
|
|
200
|
+
* @param label - Section label (e.g., "Errors", "Warnings")
|
|
201
|
+
* @param unique - Number of unique messages
|
|
202
|
+
* @param total - Total occurrences
|
|
203
|
+
* @returns Formatted header string
|
|
204
|
+
*/
|
|
205
|
+
function formatSectionHeader(label, unique, total) {
|
|
206
|
+
return unique === total ? `${label} (${total})` : `${label} (${unique} unique, ${total} total)`;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Render error section to formatter.
|
|
210
|
+
*
|
|
211
|
+
* @param fmt - OutputFormatter instance
|
|
212
|
+
* @param errors - Deduplicated error messages
|
|
213
|
+
* @param total - Total error count
|
|
214
|
+
*/
|
|
215
|
+
function renderErrorSection(fmt, errors, total) {
|
|
216
|
+
if (errors.length === 0)
|
|
217
|
+
return;
|
|
218
|
+
fmt.text(formatSectionHeader('Errors', errors.length, total));
|
|
219
|
+
fmt.separator('─', 30);
|
|
220
|
+
for (const { message, count } of errors) {
|
|
221
|
+
fmt.text(`${formatCountPrefix(count)}${message.text}`);
|
|
222
|
+
const source = formatSourceLocation(message.stackTrace);
|
|
223
|
+
if (source) {
|
|
224
|
+
fmt.text(` → ${source}`);
|
|
225
|
+
}
|
|
226
|
+
fmt.blank();
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Render warning section to formatter.
|
|
231
|
+
*
|
|
232
|
+
* @param fmt - OutputFormatter instance
|
|
233
|
+
* @param warnings - Deduplicated warning messages
|
|
234
|
+
* @param total - Total warning count
|
|
235
|
+
*/
|
|
236
|
+
function renderWarningSection(fmt, warnings, total) {
|
|
237
|
+
if (warnings.length === 0)
|
|
238
|
+
return;
|
|
239
|
+
fmt.text(formatSectionHeader('Warnings', warnings.length, total));
|
|
240
|
+
fmt.separator('─', 30);
|
|
241
|
+
for (const { message, count } of warnings) {
|
|
242
|
+
fmt.text(`• ${formatCountPrefix(count)}${message.text}`);
|
|
243
|
+
}
|
|
244
|
+
fmt.blank();
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Render other messages summary footer.
|
|
248
|
+
*
|
|
249
|
+
* @param fmt - OutputFormatter instance
|
|
250
|
+
* @param summary - Console summary with counts
|
|
251
|
+
*/
|
|
252
|
+
function renderOtherSummary(fmt, summary) {
|
|
253
|
+
const parts = [
|
|
254
|
+
summary.info > 0 && pluralize(summary.info, 'info message'),
|
|
255
|
+
summary.debug > 0 && pluralize(summary.debug, 'debug message'),
|
|
256
|
+
summary.other > 0 && pluralize(summary.other, 'other message'),
|
|
257
|
+
].filter(Boolean);
|
|
258
|
+
if (parts.length > 0) {
|
|
259
|
+
fmt.separator('─', 30);
|
|
260
|
+
fmt.text(`${parts.join(' · ')} (use --list to see)`);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Format console output as smart summary (default mode).
|
|
265
|
+
*
|
|
266
|
+
* Prioritizes errors and warnings with deduplication and counts.
|
|
267
|
+
* Shows info/debug as summary counts only.
|
|
268
|
+
*
|
|
269
|
+
* @param messages - All console messages
|
|
270
|
+
* @returns Formatted summary string
|
|
271
|
+
*/
|
|
272
|
+
export function formatConsoleSummary(messages) {
|
|
273
|
+
const fmt = new OutputFormatter();
|
|
274
|
+
const { grouped, summary } = analyzeMessages(messages);
|
|
275
|
+
fmt.text('Console Summary');
|
|
276
|
+
fmt.separator('━', 60);
|
|
277
|
+
fmt.blank();
|
|
278
|
+
renderErrorSection(fmt, grouped.errors, summary.errors.total);
|
|
279
|
+
renderWarningSection(fmt, grouped.warnings, summary.warnings.total);
|
|
280
|
+
if (grouped.errors.length === 0 && grouped.warnings.length === 0) {
|
|
281
|
+
fmt.text('No errors or warnings found');
|
|
282
|
+
fmt.blank();
|
|
283
|
+
}
|
|
284
|
+
renderOtherSummary(fmt, summary);
|
|
285
|
+
return fmt.build();
|
|
286
|
+
}
|
|
287
|
+
/** Maximum text length before truncation in list view */
|
|
288
|
+
const MAX_LIST_TEXT_LENGTH = 200;
|
|
289
|
+
/**
|
|
290
|
+
* Format console output as chronological list (--list mode).
|
|
291
|
+
*
|
|
292
|
+
* Shows all messages in order with timestamps and levels.
|
|
293
|
+
* Includes navigation markers when page reloads are detected.
|
|
294
|
+
*
|
|
295
|
+
* @param messages - All console messages
|
|
296
|
+
* @param options - Format options
|
|
297
|
+
* @returns Formatted chronological list string
|
|
298
|
+
*/
|
|
299
|
+
export function formatConsoleChronological(messages, options) {
|
|
300
|
+
const fmt = new OutputFormatter();
|
|
301
|
+
let displayMessages = messages;
|
|
302
|
+
if (options.last && options.last > 0) {
|
|
303
|
+
displayMessages = messages.slice(-options.last);
|
|
304
|
+
}
|
|
305
|
+
const headerSuffix = options.history ? ' (all navigations)' : '';
|
|
306
|
+
const header = displayMessages.length === messages.length
|
|
307
|
+
? `Console Messages (${messages.length} total)${headerSuffix}`
|
|
308
|
+
: `Console Messages (last ${displayMessages.length} of ${messages.length})${headerSuffix}`;
|
|
309
|
+
fmt.text(header);
|
|
310
|
+
fmt.separator('━', 50);
|
|
311
|
+
if (displayMessages.length === 0) {
|
|
312
|
+
fmt.text('No console messages');
|
|
313
|
+
return fmt.build();
|
|
314
|
+
}
|
|
315
|
+
const baseIndex = messages.length - displayMessages.length;
|
|
316
|
+
let lastNavigationId;
|
|
317
|
+
for (const [i, msg] of displayMessages.entries()) {
|
|
318
|
+
const index = baseIndex + i;
|
|
319
|
+
const time = formatTimestamp(msg.timestamp);
|
|
320
|
+
const level = msg.type.padEnd(7);
|
|
321
|
+
// Show navigation marker when page reloads
|
|
322
|
+
if (msg.navigationId !== undefined && msg.navigationId !== lastNavigationId) {
|
|
323
|
+
if (lastNavigationId !== undefined) {
|
|
324
|
+
fmt.blank();
|
|
325
|
+
fmt.text(`─── Page Reload (navigation #${msg.navigationId}) ───`);
|
|
326
|
+
fmt.blank();
|
|
327
|
+
}
|
|
328
|
+
lastNavigationId = msg.navigationId;
|
|
329
|
+
}
|
|
330
|
+
const truncatedText = truncateByLength(msg.text, MAX_LIST_TEXT_LENGTH);
|
|
331
|
+
fmt.text(`[${index}] ${level} ${time} ${truncatedText}`);
|
|
332
|
+
const source = formatSourceLocation(msg.stackTrace);
|
|
333
|
+
if (source) {
|
|
334
|
+
fmt.text(` → ${source}`);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return fmt.build();
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Format console output for follow mode streaming.
|
|
341
|
+
*
|
|
342
|
+
* Compact format optimized for live updates.
|
|
343
|
+
*
|
|
344
|
+
* @param messages - Recent console messages to display
|
|
345
|
+
* @returns Formatted streaming output string
|
|
346
|
+
*/
|
|
347
|
+
export function formatConsoleFollow(messages) {
|
|
348
|
+
const fmt = new OutputFormatter();
|
|
349
|
+
fmt.text('Streaming console... (Ctrl+C to stop)');
|
|
350
|
+
fmt.separator('━', 40);
|
|
351
|
+
if (messages.length === 0) {
|
|
352
|
+
fmt.text('Waiting for messages...');
|
|
353
|
+
return fmt.build();
|
|
354
|
+
}
|
|
355
|
+
for (const msg of messages) {
|
|
356
|
+
const time = formatTimestamp(msg.timestamp);
|
|
357
|
+
const level = msg.type.padEnd(7);
|
|
358
|
+
fmt.text(`${time} ${level} ${msg.text}`);
|
|
359
|
+
const source = formatSourceLocation(msg.stackTrace);
|
|
360
|
+
if (source) {
|
|
361
|
+
fmt.text(` → ${source}`);
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
return fmt.build();
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Convert deduplicated message to JSON error format.
|
|
368
|
+
*
|
|
369
|
+
* @param dedup - Deduplicated message
|
|
370
|
+
* @param includeStackTrace - Whether to include full stack trace
|
|
371
|
+
* @returns JSON-serializable error object
|
|
372
|
+
*/
|
|
373
|
+
function toJsonError(dedup, includeStackTrace) {
|
|
374
|
+
const source = dedup.message.stackTrace?.[0];
|
|
375
|
+
return {
|
|
376
|
+
count: dedup.count,
|
|
377
|
+
level: dedup.message.type,
|
|
378
|
+
text: dedup.message.text,
|
|
379
|
+
...(source && {
|
|
380
|
+
source: {
|
|
381
|
+
url: source.url,
|
|
382
|
+
line: source.lineNumber + 1,
|
|
383
|
+
column: source.columnNumber + 1,
|
|
384
|
+
},
|
|
385
|
+
}),
|
|
386
|
+
...(includeStackTrace && dedup.message.stackTrace && { stackTrace: dedup.message.stackTrace }),
|
|
387
|
+
};
|
|
388
|
+
}
|
|
389
|
+
/**
|
|
390
|
+
* Format console output as JSON.
|
|
391
|
+
*
|
|
392
|
+
* Structured output with summary statistics and deduplicated errors/warnings.
|
|
393
|
+
*
|
|
394
|
+
* @param messages - All console messages
|
|
395
|
+
* @param options - Format options
|
|
396
|
+
* @returns JSON string
|
|
397
|
+
*/
|
|
398
|
+
export function formatConsoleJson(messages, options) {
|
|
399
|
+
const { grouped, summary } = analyzeMessages(messages);
|
|
400
|
+
const output = {
|
|
401
|
+
success: true,
|
|
402
|
+
summary,
|
|
403
|
+
errors: grouped.errors.map((d) => toJsonError(d, true)),
|
|
404
|
+
warnings: grouped.warnings.map((d) => toJsonError(d, false)),
|
|
405
|
+
};
|
|
406
|
+
if (options.list) {
|
|
407
|
+
const displayMessages = options.last && options.last > 0 ? messages.slice(-options.last) : messages;
|
|
408
|
+
output.messages = displayMessages;
|
|
409
|
+
}
|
|
410
|
+
return JSON.stringify(output, null, 2);
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Format console output based on options.
|
|
414
|
+
*
|
|
415
|
+
* Main entry point for console formatting. Routes to appropriate formatter
|
|
416
|
+
* based on options (json, list, follow).
|
|
417
|
+
*
|
|
418
|
+
* @param messages - All console messages
|
|
419
|
+
* @param options - Format options
|
|
420
|
+
* @returns Formatted output string
|
|
421
|
+
*/
|
|
422
|
+
export function formatConsole(messages, options) {
|
|
423
|
+
if (options.json) {
|
|
424
|
+
return formatConsoleJson(messages, options);
|
|
425
|
+
}
|
|
426
|
+
if (options.list) {
|
|
427
|
+
return formatConsoleChronological(messages, options);
|
|
428
|
+
}
|
|
429
|
+
return formatConsoleSummary(messages);
|
|
430
|
+
}
|
|
431
|
+
//# sourceMappingURL=console.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../../src/ui/formatters/console.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { DomQueryResult, DomGetResult } from '../../types
|
|
1
|
+
import type { DomQueryResult, DomGetResult } from '../../types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Format DOM query results for human-readable output.
|
|
4
4
|
*
|
|
5
|
-
* Displays found
|
|
6
|
-
* Shows helpful message when no
|
|
5
|
+
* Displays found nodes with their index, tag, classes, and preview text.
|
|
6
|
+
* Shows helpful message when no nodes are found.
|
|
7
7
|
*
|
|
8
8
|
* @param data - DOM query result containing selector, count, and matching nodes
|
|
9
9
|
* @returns Formatted output string
|
|
@@ -19,7 +19,7 @@ import type { DomQueryResult, DomGetResult } from '../../types/dom.js';
|
|
|
19
19
|
* ]
|
|
20
20
|
* });
|
|
21
21
|
* // Output:
|
|
22
|
-
* // Found 2
|
|
22
|
+
* // Found 2 nodes matching ".error":
|
|
23
23
|
* // [0] <div class="error"> Invalid input
|
|
24
24
|
* // [1] <span class="error"> Required field
|
|
25
25
|
* ```
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAmC3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAcvD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE;IAAE,MAAM,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAE/D;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,QAAQ,EAAE,OAAO,CAAC;CACnB,GAAG,MAAM,CAwBT"}
|
|
@@ -2,8 +2,8 @@ import { OutputFormatter } from '../../ui/formatting.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Format DOM query results for human-readable output.
|
|
4
4
|
*
|
|
5
|
-
* Displays found
|
|
6
|
-
* Shows helpful message when no
|
|
5
|
+
* Displays found nodes with their index, tag, classes, and preview text.
|
|
6
|
+
* Shows helpful message when no nodes are found.
|
|
7
7
|
*
|
|
8
8
|
* @param data - DOM query result containing selector, count, and matching nodes
|
|
9
9
|
* @returns Formatted output string
|
|
@@ -19,7 +19,7 @@ import { OutputFormatter } from '../../ui/formatting.js';
|
|
|
19
19
|
* ]
|
|
20
20
|
* });
|
|
21
21
|
* // Output:
|
|
22
|
-
* // Found 2
|
|
22
|
+
* // Found 2 nodes matching ".error":
|
|
23
23
|
* // [0] <div class="error"> Invalid input
|
|
24
24
|
* // [1] <span class="error"> Required field
|
|
25
25
|
* ```
|
|
@@ -30,7 +30,7 @@ export function formatDomQuery(data) {
|
|
|
30
30
|
if (count === 0) {
|
|
31
31
|
const safeSelector = selector.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
32
32
|
return fmt
|
|
33
|
-
.text(`No
|
|
33
|
+
.text(`No nodes found matching "${selector}"`)
|
|
34
34
|
.blank()
|
|
35
35
|
.section('Suggestions:', [
|
|
36
36
|
`Verify selector: bdg dom eval "document.querySelector('${safeSelector}')"`,
|
|
@@ -45,7 +45,7 @@ export function formatDomQuery(data) {
|
|
|
45
45
|
const hasMultipleResults = count > 1;
|
|
46
46
|
const exampleIndex = hasMultipleResults ? (nodes[0]?.index ?? 0) : 0;
|
|
47
47
|
return fmt
|
|
48
|
-
.text(`Found ${count}
|
|
48
|
+
.text(`Found ${count} node${count === 1 ? '' : 's'} matching "${selector}":`)
|
|
49
49
|
.list(nodeLines)
|
|
50
50
|
.blank()
|
|
51
51
|
.section('Next steps:', [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/ui/formatters/dom.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,MAAM,UAAU,cAAc,CAAC,IAAoB;IACjD,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IACxC,MAAM,GAAG,GAAG,IAAI,eAAe,EAAE,CAAC;IAElC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAE1E,OAAO,GAAG;aACP,IAAI,CAAC
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../../src/ui/formatters/dom.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network list formatter for bdg network list command.
|
|
3
|
+
*
|
|
4
|
+
* Provides human-readable and JSON output formats for network requests
|
|
5
|
+
* with support for filtering results display.
|
|
6
|
+
*/
|
|
7
|
+
import type { NetworkRequest } from '../../types.js';
|
|
8
|
+
export interface NetworkListOptions {
|
|
9
|
+
json?: boolean;
|
|
10
|
+
verbose?: boolean;
|
|
11
|
+
last?: number;
|
|
12
|
+
totalCount?: number;
|
|
13
|
+
follow?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Format network requests for display.
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatNetworkList(requests: NetworkRequest[], options: NetworkListOptions): string;
|
|
19
|
+
//# sourceMappingURL=networkList.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkList.d.ts","sourceRoot":"","sources":["../../../src/ui/formatters/networkList.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAqGD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAIjG"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Network list formatter for bdg network list command.
|
|
3
|
+
*
|
|
4
|
+
* Provides human-readable and JSON output formats for network requests
|
|
5
|
+
* with support for filtering results display.
|
|
6
|
+
*/
|
|
7
|
+
import { getResourceTypeAbbr } from '../../ui/formatters/preview.js';
|
|
8
|
+
import { OutputFormatter, truncateUrl } from '../../ui/formatting.js';
|
|
9
|
+
const SIZE_UNITS = ['B', 'KB', 'MB', 'GB'];
|
|
10
|
+
const SEPARATOR_WIDTH = 80;
|
|
11
|
+
const COLUMN_HEADER = '[ID] STS METH TYP SIZE URL';
|
|
12
|
+
function formatSize(bytes) {
|
|
13
|
+
if (bytes === undefined || bytes === 0)
|
|
14
|
+
return '-';
|
|
15
|
+
let size = bytes;
|
|
16
|
+
let unitIndex = 0;
|
|
17
|
+
while (size >= 1024 && unitIndex < SIZE_UNITS.length - 1) {
|
|
18
|
+
size /= 1024;
|
|
19
|
+
unitIndex++;
|
|
20
|
+
}
|
|
21
|
+
const formatted = size < 10 ? size.toFixed(1) : Math.round(size).toString();
|
|
22
|
+
return `${formatted} ${SIZE_UNITS[unitIndex]}`;
|
|
23
|
+
}
|
|
24
|
+
function formatStatus(status) {
|
|
25
|
+
if (status === undefined || status === 0)
|
|
26
|
+
return 'PND';
|
|
27
|
+
return `${status}`;
|
|
28
|
+
}
|
|
29
|
+
function formatRequestLine(request, verbose) {
|
|
30
|
+
const id = request.requestId.padEnd(4);
|
|
31
|
+
const status = formatStatus(request.status).padEnd(3);
|
|
32
|
+
const method = request.method.padEnd(4);
|
|
33
|
+
const type = getResourceTypeAbbr(request.resourceType, request.mimeType);
|
|
34
|
+
const size = formatSize(request.encodedDataLength).padStart(8);
|
|
35
|
+
const urlMaxLength = verbose ? 120 : 50;
|
|
36
|
+
const url = verbose ? request.url : truncateUrl(request.url, urlMaxLength);
|
|
37
|
+
return `[${id}] ${status} ${method} ${type} ${size} ${url}`;
|
|
38
|
+
}
|
|
39
|
+
function buildHeader(options, showingCount, totalCount) {
|
|
40
|
+
if (options.follow) {
|
|
41
|
+
return `NETWORK REQUESTS (showing ${showingCount} of ${totalCount})`;
|
|
42
|
+
}
|
|
43
|
+
const lastLimit = options.last ?? 0;
|
|
44
|
+
if (lastLimit > 0 && totalCount > showingCount) {
|
|
45
|
+
return `NETWORK REQUESTS (last ${showingCount} of ${totalCount})`;
|
|
46
|
+
}
|
|
47
|
+
return `NETWORK REQUESTS (${totalCount})`;
|
|
48
|
+
}
|
|
49
|
+
function formatNetworkListHuman(requests, options) {
|
|
50
|
+
const fmt = new OutputFormatter();
|
|
51
|
+
const totalCount = options.totalCount ?? requests.length;
|
|
52
|
+
const header = buildHeader(options, requests.length, totalCount);
|
|
53
|
+
fmt.text(header);
|
|
54
|
+
fmt.separator('─', SEPARATOR_WIDTH);
|
|
55
|
+
if (requests.length === 0) {
|
|
56
|
+
fmt.text('No matching requests found.');
|
|
57
|
+
return fmt.build();
|
|
58
|
+
}
|
|
59
|
+
fmt.text(COLUMN_HEADER);
|
|
60
|
+
fmt.separator('─', SEPARATOR_WIDTH);
|
|
61
|
+
const verbose = options.verbose ?? false;
|
|
62
|
+
for (const request of requests) {
|
|
63
|
+
fmt.text(formatRequestLine(request, verbose));
|
|
64
|
+
}
|
|
65
|
+
return fmt.build();
|
|
66
|
+
}
|
|
67
|
+
function formatNetworkListJson(requests, options) {
|
|
68
|
+
const totalCount = options.totalCount ?? requests.length;
|
|
69
|
+
const output = {
|
|
70
|
+
success: true,
|
|
71
|
+
data: requests,
|
|
72
|
+
count: requests.length,
|
|
73
|
+
totalCount,
|
|
74
|
+
filtered: requests.length !== totalCount,
|
|
75
|
+
};
|
|
76
|
+
return JSON.stringify(output, null, 2);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Format network requests for display.
|
|
80
|
+
*/
|
|
81
|
+
export function formatNetworkList(requests, options) {
|
|
82
|
+
return options.json
|
|
83
|
+
? formatNetworkListJson(requests, options)
|
|
84
|
+
: formatNetworkListHuman(requests, options);
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=networkList.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"networkList.js","sourceRoot":"","sources":["../../../src/ui/formatters/networkList.ts"],"names":[],"mappings":"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"}
|