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,261 @@
|
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
3
|
+
import { formatConsoleArgs, formatRemoteObject } from '../../telemetry/remoteObject.js';
|
|
4
|
+
void describe('remoteObject formatting', () => {
|
|
5
|
+
void describe('formatRemoteObject', () => {
|
|
6
|
+
void describe('primitives', () => {
|
|
7
|
+
void it('formats string values', () => {
|
|
8
|
+
const arg = {
|
|
9
|
+
type: 'string',
|
|
10
|
+
value: 'hello world',
|
|
11
|
+
};
|
|
12
|
+
assert.equal(formatRemoteObject(arg), 'hello world');
|
|
13
|
+
});
|
|
14
|
+
void it('formats number values', () => {
|
|
15
|
+
const arg = {
|
|
16
|
+
type: 'number',
|
|
17
|
+
value: 42,
|
|
18
|
+
};
|
|
19
|
+
assert.equal(formatRemoteObject(arg), '42');
|
|
20
|
+
});
|
|
21
|
+
void it('formats boolean values', () => {
|
|
22
|
+
const arg = {
|
|
23
|
+
type: 'boolean',
|
|
24
|
+
value: true,
|
|
25
|
+
};
|
|
26
|
+
assert.equal(formatRemoteObject(arg), 'true');
|
|
27
|
+
});
|
|
28
|
+
void it('formats null values', () => {
|
|
29
|
+
const arg = {
|
|
30
|
+
type: 'object',
|
|
31
|
+
subtype: 'null',
|
|
32
|
+
value: null,
|
|
33
|
+
};
|
|
34
|
+
assert.equal(formatRemoteObject(arg), 'null');
|
|
35
|
+
});
|
|
36
|
+
void it('formats undefined', () => {
|
|
37
|
+
const arg = {
|
|
38
|
+
type: 'undefined',
|
|
39
|
+
};
|
|
40
|
+
assert.equal(formatRemoteObject(arg), 'undefined');
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
void describe('objects with preview', () => {
|
|
44
|
+
void it('formats simple object preview', () => {
|
|
45
|
+
const arg = {
|
|
46
|
+
type: 'object',
|
|
47
|
+
className: 'Object',
|
|
48
|
+
preview: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
overflow: false,
|
|
51
|
+
properties: [
|
|
52
|
+
{ name: 'foo', type: 'string', value: 'bar' },
|
|
53
|
+
{ name: 'num', type: 'number', value: '123' },
|
|
54
|
+
],
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
assert.equal(formatRemoteObject(arg), '{foo: "bar", num: 123}');
|
|
58
|
+
});
|
|
59
|
+
void it('formats array preview', () => {
|
|
60
|
+
const arg = {
|
|
61
|
+
type: 'object',
|
|
62
|
+
subtype: 'array',
|
|
63
|
+
preview: {
|
|
64
|
+
type: 'object',
|
|
65
|
+
subtype: 'array',
|
|
66
|
+
overflow: false,
|
|
67
|
+
properties: [
|
|
68
|
+
{ name: '0', type: 'number', value: '1' },
|
|
69
|
+
{ name: '1', type: 'number', value: '2' },
|
|
70
|
+
{ name: '2', type: 'number', value: '3' },
|
|
71
|
+
],
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
assert.equal(formatRemoteObject(arg), '[1, 2, 3]');
|
|
75
|
+
});
|
|
76
|
+
void it('formats overflow indicator', () => {
|
|
77
|
+
const arg = {
|
|
78
|
+
type: 'object',
|
|
79
|
+
className: 'Object',
|
|
80
|
+
preview: {
|
|
81
|
+
type: 'object',
|
|
82
|
+
overflow: true,
|
|
83
|
+
properties: [
|
|
84
|
+
{ name: 'a', type: 'number', value: '1' },
|
|
85
|
+
{ name: 'b', type: 'number', value: '2' },
|
|
86
|
+
],
|
|
87
|
+
},
|
|
88
|
+
};
|
|
89
|
+
assert.equal(formatRemoteObject(arg), '{a: 1, b: 2, …}');
|
|
90
|
+
});
|
|
91
|
+
void it('formats nested object with valuePreview', () => {
|
|
92
|
+
const arg = {
|
|
93
|
+
type: 'object',
|
|
94
|
+
className: 'Object',
|
|
95
|
+
preview: {
|
|
96
|
+
type: 'object',
|
|
97
|
+
overflow: false,
|
|
98
|
+
properties: [
|
|
99
|
+
{
|
|
100
|
+
name: 'user',
|
|
101
|
+
type: 'object',
|
|
102
|
+
valuePreview: {
|
|
103
|
+
type: 'object',
|
|
104
|
+
overflow: false,
|
|
105
|
+
properties: [
|
|
106
|
+
{ name: 'name', type: 'string', value: 'John' },
|
|
107
|
+
{ name: 'id', type: 'number', value: '123' },
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
},
|
|
113
|
+
};
|
|
114
|
+
assert.equal(formatRemoteObject(arg), '{user: {name: "John", id: 123}}');
|
|
115
|
+
});
|
|
116
|
+
void it('formats deeply nested objects', () => {
|
|
117
|
+
const arg = {
|
|
118
|
+
type: 'object',
|
|
119
|
+
className: 'Object',
|
|
120
|
+
preview: {
|
|
121
|
+
type: 'object',
|
|
122
|
+
overflow: false,
|
|
123
|
+
properties: [
|
|
124
|
+
{
|
|
125
|
+
name: 'level1',
|
|
126
|
+
type: 'object',
|
|
127
|
+
valuePreview: {
|
|
128
|
+
type: 'object',
|
|
129
|
+
overflow: false,
|
|
130
|
+
properties: [
|
|
131
|
+
{
|
|
132
|
+
name: 'level2',
|
|
133
|
+
type: 'object',
|
|
134
|
+
valuePreview: {
|
|
135
|
+
type: 'object',
|
|
136
|
+
overflow: false,
|
|
137
|
+
properties: [{ name: 'value', type: 'string', value: 'deep' }],
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
assert.equal(formatRemoteObject(arg), '{level1: {level2: {value: "deep"}}}');
|
|
147
|
+
});
|
|
148
|
+
void it('formats nested array in object', () => {
|
|
149
|
+
const arg = {
|
|
150
|
+
type: 'object',
|
|
151
|
+
className: 'Object',
|
|
152
|
+
preview: {
|
|
153
|
+
type: 'object',
|
|
154
|
+
overflow: false,
|
|
155
|
+
properties: [
|
|
156
|
+
{
|
|
157
|
+
name: 'items',
|
|
158
|
+
type: 'object',
|
|
159
|
+
subtype: 'array',
|
|
160
|
+
valuePreview: {
|
|
161
|
+
type: 'object',
|
|
162
|
+
subtype: 'array',
|
|
163
|
+
overflow: false,
|
|
164
|
+
properties: [
|
|
165
|
+
{ name: '0', type: 'number', value: '1' },
|
|
166
|
+
{ name: '1', type: 'number', value: '2' },
|
|
167
|
+
],
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
assert.equal(formatRemoteObject(arg), '{items: [1, 2]}');
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
void describe('special types', () => {
|
|
177
|
+
void it('formats Date preview', () => {
|
|
178
|
+
const arg = {
|
|
179
|
+
type: 'object',
|
|
180
|
+
subtype: 'date',
|
|
181
|
+
description: 'Mon Nov 24 2025 12:00:00 GMT+0000',
|
|
182
|
+
preview: {
|
|
183
|
+
type: 'object',
|
|
184
|
+
subtype: 'date',
|
|
185
|
+
description: 'Mon Nov 24 2025 12:00:00 GMT+0000',
|
|
186
|
+
overflow: false,
|
|
187
|
+
properties: [],
|
|
188
|
+
},
|
|
189
|
+
};
|
|
190
|
+
assert.equal(formatRemoteObject(arg), 'Mon Nov 24 2025 12:00:00 GMT+0000');
|
|
191
|
+
});
|
|
192
|
+
void it('formats RegExp preview', () => {
|
|
193
|
+
const arg = {
|
|
194
|
+
type: 'object',
|
|
195
|
+
subtype: 'regexp',
|
|
196
|
+
description: '/test/gi',
|
|
197
|
+
preview: {
|
|
198
|
+
type: 'object',
|
|
199
|
+
subtype: 'regexp',
|
|
200
|
+
description: '/test/gi',
|
|
201
|
+
overflow: false,
|
|
202
|
+
properties: [],
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
assert.equal(formatRemoteObject(arg), '/test/gi');
|
|
206
|
+
});
|
|
207
|
+
void it('formats Error with description', () => {
|
|
208
|
+
const arg = {
|
|
209
|
+
type: 'object',
|
|
210
|
+
subtype: 'error',
|
|
211
|
+
description: 'Error: Something went wrong\n at <anonymous>:1:1',
|
|
212
|
+
};
|
|
213
|
+
assert.equal(formatRemoteObject(arg), 'Error: Something went wrong\n at <anonymous>:1:1');
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
void describe('fallbacks', () => {
|
|
217
|
+
void it('uses description when no preview available', () => {
|
|
218
|
+
const arg = {
|
|
219
|
+
type: 'object',
|
|
220
|
+
className: 'CustomClass',
|
|
221
|
+
description: 'CustomClass {}',
|
|
222
|
+
};
|
|
223
|
+
assert.equal(formatRemoteObject(arg), 'CustomClass {}');
|
|
224
|
+
});
|
|
225
|
+
void it('uses type when nothing else available', () => {
|
|
226
|
+
const arg = {
|
|
227
|
+
type: 'function',
|
|
228
|
+
};
|
|
229
|
+
assert.equal(formatRemoteObject(arg), '[function]');
|
|
230
|
+
});
|
|
231
|
+
});
|
|
232
|
+
});
|
|
233
|
+
void describe('formatConsoleArgs', () => {
|
|
234
|
+
void it('joins multiple arguments with spaces', () => {
|
|
235
|
+
const args = [
|
|
236
|
+
{ type: 'string', value: 'User:' },
|
|
237
|
+
{
|
|
238
|
+
type: 'object',
|
|
239
|
+
preview: {
|
|
240
|
+
type: 'object',
|
|
241
|
+
overflow: false,
|
|
242
|
+
properties: [{ name: 'name', type: 'string', value: 'John' }],
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
];
|
|
246
|
+
assert.equal(formatConsoleArgs(args), 'User: {name: "John"}');
|
|
247
|
+
});
|
|
248
|
+
void it('handles mixed primitive and object arguments', () => {
|
|
249
|
+
const args = [
|
|
250
|
+
{ type: 'string', value: 'Count:' },
|
|
251
|
+
{ type: 'number', value: 42 },
|
|
252
|
+
{ type: 'boolean', value: true },
|
|
253
|
+
];
|
|
254
|
+
assert.equal(formatConsoleArgs(args), 'Count: 42 true');
|
|
255
|
+
});
|
|
256
|
+
void it('handles empty args array', () => {
|
|
257
|
+
assert.equal(formatConsoleArgs([]), '');
|
|
258
|
+
});
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
//# sourceMappingURL=remoteObject.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteObject.unit.test.js","sourceRoot":"","sources":["../../../src/telemetry/__tests__/remoteObject.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Console message collection via CDP Runtime domain.
|
|
3
|
+
*
|
|
4
|
+
* Captures console.log, console.error, etc. and JavaScript exceptions
|
|
5
|
+
* with automatic nested object expansion.
|
|
6
|
+
*/
|
|
1
7
|
import type { CDPConnection } from '../connection/cdp.js';
|
|
2
8
|
import type { ConsoleMessage, CleanupFunction } from '../types';
|
|
3
9
|
/**
|
|
4
10
|
* Start collecting console messages and exceptions via CDP Runtime domain.
|
|
5
11
|
*
|
|
6
|
-
* Captures console.log, console.error, etc. and JavaScript exceptions thrown in the page.
|
|
7
|
-
*
|
|
8
12
|
* @param cdp - CDP connection instance
|
|
9
13
|
* @param messages - Array to populate with console messages
|
|
10
|
-
* @param includeAll - If true, disable default pattern filtering
|
|
14
|
+
* @param includeAll - If true, disable default pattern filtering
|
|
15
|
+
* @param getCurrentNavigationId - Function to get current navigation ID
|
|
11
16
|
* @returns Cleanup function to remove event handlers
|
|
12
|
-
*
|
|
13
|
-
* @remarks
|
|
14
|
-
* - Message limit of 10,000 prevents memory issues in long-running sessions
|
|
15
|
-
* - After limit is reached, new messages are silently dropped (warning logged once)
|
|
16
|
-
* - By default, common dev server noise patterns are filtered out (use includeAll to disable)
|
|
17
17
|
*/
|
|
18
18
|
export declare function startConsoleCollection(cdp: CDPConnection, messages: ConsoleMessage[], includeAll?: boolean, getCurrentNavigationId?: () => number): Promise<CleanupFunction>;
|
|
19
19
|
//# sourceMappingURL=console.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/telemetry/console.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"console.d.ts","sourceRoot":"","sources":["../../src/telemetry/console.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAc,MAAM,SAAS,CAAC;AA+L3E;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,UAAU,GAAE,OAAe,EAC3B,sBAAsB,CAAC,EAAE,MAAM,MAAM,GACpC,OAAO,CAAC,eAAe,CAAC,CAyB1B"}
|
|
@@ -1,78 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Console message collection via CDP Runtime domain.
|
|
3
|
+
*
|
|
4
|
+
* Captures console.log, console.error, etc. and JavaScript exceptions
|
|
5
|
+
* with automatic nested object expansion.
|
|
6
|
+
*/
|
|
1
7
|
import { CDPHandlerRegistry } from '../connection/handlers.js';
|
|
2
8
|
import { TypedCDPConnection } from '../connection/typed-cdp.js';
|
|
3
9
|
import { MAX_CONSOLE_MESSAGES } from '../constants.js';
|
|
4
10
|
import { createLogger } from '../ui/logging/index.js';
|
|
5
11
|
import { shouldExcludeConsoleMessage } from './filters.js';
|
|
6
|
-
import {
|
|
12
|
+
import { expandConsoleArgs } from './objectExpander.js';
|
|
13
|
+
import { formatConsoleArgs } from './remoteObject.js';
|
|
14
|
+
import { needsAsyncExpansion } from './remoteObjectUtils.js';
|
|
7
15
|
const log = createLogger('console');
|
|
8
16
|
/**
|
|
9
|
-
*
|
|
17
|
+
* Convert a CDP call frame to a StackFrame.
|
|
18
|
+
*/
|
|
19
|
+
function convertCallFrame(frame) {
|
|
20
|
+
const stackFrame = {
|
|
21
|
+
url: frame.url,
|
|
22
|
+
lineNumber: frame.lineNumber,
|
|
23
|
+
columnNumber: frame.columnNumber,
|
|
24
|
+
scriptId: frame.scriptId,
|
|
25
|
+
};
|
|
26
|
+
if (frame.functionName) {
|
|
27
|
+
stackFrame.functionName = frame.functionName;
|
|
28
|
+
}
|
|
29
|
+
return stackFrame;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Convert CDP stack trace to StackFrame array.
|
|
10
33
|
*
|
|
11
|
-
*
|
|
34
|
+
* @param stackTrace - CDP stack trace from Runtime events
|
|
35
|
+
* @returns Array of StackFrame objects, or undefined if no stack trace
|
|
36
|
+
*/
|
|
37
|
+
function convertStackTrace(stackTrace) {
|
|
38
|
+
if (!stackTrace?.callFrames?.length) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
return stackTrace.callFrames.map(convertCallFrame);
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if any args need async expansion (missing or truncated preview).
|
|
45
|
+
*
|
|
46
|
+
* @param args - Console message arguments
|
|
47
|
+
* @returns True if any arg needs async expansion
|
|
48
|
+
*/
|
|
49
|
+
function hasArgsNeedingExpansion(args) {
|
|
50
|
+
return args.some(needsAsyncExpansion);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Create a ConsoleMessage object.
|
|
54
|
+
*/
|
|
55
|
+
function createMessage(type, text, timestamp, args, context) {
|
|
56
|
+
return {
|
|
57
|
+
type,
|
|
58
|
+
text,
|
|
59
|
+
timestamp,
|
|
60
|
+
...(args && { args }),
|
|
61
|
+
...(context.navigationId !== undefined && { navigationId: context.navigationId }),
|
|
62
|
+
...(context.stackTrace && { stackTrace: context.stackTrace }),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Insert a message in timestamp order.
|
|
67
|
+
* Messages are kept sorted by timestamp to handle async expansion delays.
|
|
68
|
+
*/
|
|
69
|
+
function insertMessageByTimestamp(messages, message) {
|
|
70
|
+
if (messages.length >= MAX_CONSOLE_MESSAGES) {
|
|
71
|
+
log.debug(`Warning: Console message limit reached (${MAX_CONSOLE_MESSAGES})`);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const insertIndex = findInsertIndex(messages, message.timestamp);
|
|
75
|
+
messages.splice(insertIndex, 0, message);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Find the correct insertion index to maintain timestamp order.
|
|
79
|
+
* Uses binary search for efficiency.
|
|
80
|
+
*/
|
|
81
|
+
function findInsertIndex(messages, timestamp) {
|
|
82
|
+
let low = 0;
|
|
83
|
+
let high = messages.length;
|
|
84
|
+
while (low < high) {
|
|
85
|
+
const mid = Math.floor((low + high) / 2);
|
|
86
|
+
const midMessage = messages[mid];
|
|
87
|
+
if (midMessage && midMessage.timestamp <= timestamp) {
|
|
88
|
+
low = mid + 1;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
high = mid;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return low;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Handle a console API call event with object expansion.
|
|
98
|
+
*/
|
|
99
|
+
function handleConsoleAPICall(cdp, messages, params, context, includeAll) {
|
|
100
|
+
const basicText = formatConsoleArgs(params.args);
|
|
101
|
+
if (shouldExcludeConsoleMessage(basicText, params.type, includeAll)) {
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (hasArgsNeedingExpansion(params.args)) {
|
|
105
|
+
handleExpandableMessage(cdp, messages, params, context, basicText);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
const message = createMessage(params.type, basicText, params.timestamp, params.args, context);
|
|
109
|
+
insertMessageByTimestamp(messages, message);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Handle a message with expandable objects.
|
|
114
|
+
*/
|
|
115
|
+
function handleExpandableMessage(cdp, messages, params, context, fallbackText) {
|
|
116
|
+
void expandConsoleArgs(cdp, params.args)
|
|
117
|
+
.then((expandedText) => {
|
|
118
|
+
const message = createMessage(params.type, expandedText, params.timestamp, params.args, context);
|
|
119
|
+
insertMessageByTimestamp(messages, message);
|
|
120
|
+
})
|
|
121
|
+
.catch((error) => {
|
|
122
|
+
log.debug(`Object expansion failed, using basic text: ${String(error)}`);
|
|
123
|
+
const message = createMessage(params.type, fallbackText, params.timestamp, params.args, context);
|
|
124
|
+
insertMessageByTimestamp(messages, message);
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Handle an exception thrown event.
|
|
129
|
+
*/
|
|
130
|
+
function handleExceptionThrown(messages, params, context, includeAll) {
|
|
131
|
+
const exception = params.exceptionDetails;
|
|
132
|
+
const text = exception.text ?? exception.exception?.description ?? 'Unknown error';
|
|
133
|
+
if (shouldExcludeConsoleMessage(text, 'error', includeAll)) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
const message = createMessage('error', text, params.timestamp, undefined, context);
|
|
137
|
+
insertMessageByTimestamp(messages, message);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Start collecting console messages and exceptions via CDP Runtime domain.
|
|
12
141
|
*
|
|
13
142
|
* @param cdp - CDP connection instance
|
|
14
143
|
* @param messages - Array to populate with console messages
|
|
15
|
-
* @param includeAll - If true, disable default pattern filtering
|
|
144
|
+
* @param includeAll - If true, disable default pattern filtering
|
|
145
|
+
* @param getCurrentNavigationId - Function to get current navigation ID
|
|
16
146
|
* @returns Cleanup function to remove event handlers
|
|
17
|
-
*
|
|
18
|
-
* @remarks
|
|
19
|
-
* - Message limit of 10,000 prevents memory issues in long-running sessions
|
|
20
|
-
* - After limit is reached, new messages are silently dropped (warning logged once)
|
|
21
|
-
* - By default, common dev server noise patterns are filtered out (use includeAll to disable)
|
|
22
147
|
*/
|
|
23
148
|
export async function startConsoleCollection(cdp, messages, includeAll = false, getCurrentNavigationId) {
|
|
24
149
|
const registry = new CDPHandlerRegistry();
|
|
25
150
|
const typed = new TypedCDPConnection(cdp);
|
|
26
151
|
await cdp.send('Runtime.enable');
|
|
27
152
|
registry.registerTyped(typed, 'Runtime.consoleAPICalled', (params) => {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
const value = arg.value;
|
|
32
|
-
if (typeof value === 'string' ||
|
|
33
|
-
typeof value === 'number' ||
|
|
34
|
-
typeof value === 'boolean') {
|
|
35
|
-
return String(value);
|
|
36
|
-
}
|
|
37
|
-
return arg.description ?? '[object]';
|
|
38
|
-
}
|
|
39
|
-
if (arg.description !== undefined) {
|
|
40
|
-
return arg.description;
|
|
41
|
-
}
|
|
42
|
-
return '';
|
|
43
|
-
})
|
|
44
|
-
.join(' ');
|
|
45
|
-
if (shouldExcludeConsoleMessage(text, params.type, includeAll)) {
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
const navigationId = getCurrentNavigationId?.();
|
|
49
|
-
const message = {
|
|
50
|
-
type: params.type,
|
|
51
|
-
text,
|
|
52
|
-
timestamp: params.timestamp,
|
|
53
|
-
args: params.args,
|
|
54
|
-
...(navigationId !== undefined && { navigationId }),
|
|
153
|
+
const context = {
|
|
154
|
+
navigationId: getCurrentNavigationId?.(),
|
|
155
|
+
stackTrace: convertStackTrace(params.stackTrace),
|
|
55
156
|
};
|
|
56
|
-
|
|
57
|
-
log.debug(`Warning: Console message limit reached (${MAX_CONSOLE_MESSAGES})`);
|
|
58
|
-
});
|
|
157
|
+
handleConsoleAPICall(cdp, messages, params, context, includeAll);
|
|
59
158
|
});
|
|
60
159
|
registry.registerTyped(typed, 'Runtime.exceptionThrown', (params) => {
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
return;
|
|
65
|
-
}
|
|
66
|
-
const navigationId = getCurrentNavigationId?.();
|
|
67
|
-
const message = {
|
|
68
|
-
type: 'error',
|
|
69
|
-
text,
|
|
70
|
-
timestamp: params.timestamp,
|
|
71
|
-
...(navigationId !== undefined && { navigationId }),
|
|
160
|
+
const context = {
|
|
161
|
+
navigationId: getCurrentNavigationId?.(),
|
|
162
|
+
stackTrace: convertStackTrace(params.exceptionDetails.stackTrace),
|
|
72
163
|
};
|
|
73
|
-
|
|
74
|
-
log.debug(`Warning: Console message limit reached (${MAX_CONSOLE_MESSAGES})`);
|
|
75
|
-
});
|
|
164
|
+
handleExceptionThrown(messages, params, context, includeAll);
|
|
76
165
|
});
|
|
77
166
|
return () => {
|
|
78
167
|
registry.cleanup();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/telemetry/console.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/telemetry/console.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DevTools-compatible Network Filter DSL parser and evaluator.
|
|
3
|
+
*
|
|
4
|
+
* Provides Chrome DevTools Network panel filter syntax for querying network requests.
|
|
5
|
+
* Supports domain matching, status codes, HTTP methods, MIME types, size thresholds,
|
|
6
|
+
* header inspection, and various state filters.
|
|
7
|
+
*/
|
|
8
|
+
import type { NetworkRequest } from '../types.js';
|
|
9
|
+
export type FilterType = 'domain' | 'status-code' | 'method' | 'mime-type' | 'resource-type' | 'larger-than' | 'has-response-header' | 'is' | 'scheme';
|
|
10
|
+
export type ComparisonOperator = '=' | '>=' | '<=' | '>' | '<';
|
|
11
|
+
export interface ParsedFilter {
|
|
12
|
+
type: FilterType;
|
|
13
|
+
value: string;
|
|
14
|
+
negated: boolean;
|
|
15
|
+
operator: ComparisonOperator;
|
|
16
|
+
}
|
|
17
|
+
export type FilterValidationResult = {
|
|
18
|
+
valid: true;
|
|
19
|
+
filters: ParsedFilter[];
|
|
20
|
+
} | {
|
|
21
|
+
valid: false;
|
|
22
|
+
error: string;
|
|
23
|
+
suggestion?: string;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Parse a size string with units into bytes.
|
|
27
|
+
*/
|
|
28
|
+
export declare function parseSize(value: string): number;
|
|
29
|
+
/**
|
|
30
|
+
* Parse a filter string into an array of ParsedFilter objects.
|
|
31
|
+
*/
|
|
32
|
+
export declare function parseFilterString(input: string): ParsedFilter[];
|
|
33
|
+
/**
|
|
34
|
+
* Validate a filter string and return detailed results.
|
|
35
|
+
*/
|
|
36
|
+
export declare function validateFilterString(input: string): FilterValidationResult;
|
|
37
|
+
/**
|
|
38
|
+
* Apply parsed filters to an array of network requests.
|
|
39
|
+
*/
|
|
40
|
+
export declare function applyFilters(requests: NetworkRequest[], filters: ParsedFilter[]): NetworkRequest[];
|
|
41
|
+
/**
|
|
42
|
+
* Get help text for filter DSL syntax.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getFilterHelpText(): string;
|
|
45
|
+
//# sourceMappingURL=filterDsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterDsl.d.ts","sourceRoot":"","sources":["../../src/telemetry/filterDsl.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAMjD,MAAM,MAAM,UAAU,GAClB,QAAQ,GACR,aAAa,GACb,QAAQ,GACR,WAAW,GACX,eAAe,GACf,aAAa,GACb,qBAAqB,GACrB,IAAI,GACJ,QAAQ,CAAC;AAEb,MAAM,MAAM,kBAAkB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/D,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,YAAY,EAAE,CAAA;CAAE,GACxC;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AA4BzD;;GAEG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW/C;AAuID;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAkB/D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,sBAAsB,CAW1E;AAoFD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,EAAE,YAAY,EAAE,GACtB,cAAc,EAAE,CASlB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAqB1C"}
|