browser-debugger-cli 0.6.6 → 0.6.8
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 +48 -269
- 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/__tests__/helpJson.contract.test.d.ts +12 -0
- package/dist/commands/__tests__/helpJson.contract.test.d.ts.map +1 -0
- package/dist/commands/__tests__/helpJson.contract.test.js +121 -0
- package/dist/commands/__tests__/helpJson.contract.test.js.map +1 -0
- package/dist/commands/__tests__/machineReadableHelp.contract.test.js +26 -7
- package/dist/commands/__tests__/machineReadableHelp.contract.test.js.map +1 -1
- package/dist/commands/cdp.d.ts.map +1 -1
- package/dist/commands/cdp.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +17 -91
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/console.d.ts +17 -0
- package/dist/commands/console.d.ts.map +1 -1
- package/dist/commands/console.js +158 -56
- package/dist/commands/console.js.map +1 -1
- package/dist/commands/details.d.ts.map +1 -1
- package/dist/commands/details.js +3 -1
- package/dist/commands/details.js.map +1 -1
- package/dist/commands/dom/DomElementResolver.d.ts +138 -0
- package/dist/commands/dom/DomElementResolver.d.ts.map +1 -0
- package/dist/commands/dom/DomElementResolver.js +173 -0
- package/dist/commands/dom/DomElementResolver.js.map +1 -0
- package/dist/commands/dom/a11y.d.ts.map +1 -1
- package/dist/commands/dom/a11y.js +4 -28
- package/dist/commands/dom/a11y.js.map +1 -1
- package/dist/commands/dom/evalHelpers.d.ts.map +1 -1
- package/dist/commands/dom/evalHelpers.js +1 -1
- package/dist/commands/dom/evalHelpers.js.map +1 -1
- package/dist/commands/dom/formFillHelpers.d.ts.map +1 -1
- package/dist/commands/dom/formFillHelpers.js +11 -11
- 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 +5 -5
- package/dist/commands/dom/formInteraction.js.map +1 -1
- package/dist/commands/dom/helpers.d.ts +0 -50
- package/dist/commands/dom/helpers.d.ts.map +1 -1
- package/dist/commands/dom/helpers.js +2 -56
- 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 +50 -44
- package/dist/commands/dom/index.js.map +1 -1
- package/dist/commands/dom/keyMapping.d.ts +0 -6
- package/dist/commands/dom/keyMapping.d.ts.map +1 -1
- package/dist/commands/dom/keyMapping.js +0 -8
- package/dist/commands/dom/keyMapping.js.map +1 -1
- package/dist/commands/dom/reactEventHelpers.d.ts +12 -18
- package/dist/commands/dom/reactEventHelpers.d.ts.map +1 -1
- package/dist/commands/dom/reactEventHelpers.js +21 -70
- package/dist/commands/dom/reactEventHelpers.js.map +1 -1
- package/dist/commands/helpJson.d.ts +165 -0
- package/dist/commands/helpJson.d.ts.map +1 -0
- package/dist/commands/helpJson.js +252 -0
- package/dist/commands/helpJson.js.map +1 -0
- package/dist/commands/machineReadableHelp.d.ts +21 -2
- package/dist/commands/machineReadableHelp.d.ts.map +1 -1
- package/dist/commands/machineReadableHelp.js +95 -60
- package/dist/commands/machineReadableHelp.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/peek.d.ts.map +1 -1
- package/dist/commands/peek.js +5 -7
- package/dist/commands/peek.js.map +1 -1
- package/dist/commands/shared/CommandRunner.d.ts +4 -10
- package/dist/commands/shared/CommandRunner.d.ts.map +1 -1
- package/dist/commands/shared/CommandRunner.js +2 -2
- package/dist/commands/shared/CommandRunner.js.map +1 -1
- package/dist/commands/shared/commonOptions.d.ts +0 -15
- package/dist/commands/shared/commonOptions.d.ts.map +1 -1
- package/dist/commands/shared/commonOptions.js +0 -32
- package/dist/commands/shared/commonOptions.js.map +1 -1
- package/dist/commands/shared/optionTypes.d.ts +247 -0
- package/dist/commands/shared/optionTypes.d.ts.map +1 -0
- package/dist/commands/shared/optionTypes.js +20 -0
- package/dist/commands/shared/optionTypes.js.map +1 -0
- package/dist/commands/shared/startHelpers.d.ts.map +1 -1
- package/dist/commands/shared/startHelpers.js +3 -3
- package/dist/commands/shared/startHelpers.js.map +1 -1
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +8 -6
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/stop.d.ts.map +1 -1
- package/dist/commands/stop.js +17 -43
- package/dist/commands/stop.js.map +1 -1
- package/dist/commands/tail.d.ts.map +1 -1
- package/dist/commands/tail.js +49 -59
- package/dist/commands/tail.js.map +1 -1
- package/dist/connection/types.d.ts +2 -1
- package/dist/connection/types.d.ts.map +1 -1
- package/dist/constants.d.ts +14 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +39 -0
- package/dist/constants.js.map +1 -1
- package/dist/daemon/handlers/responseHandler.d.ts.map +1 -1
- package/dist/daemon/handlers/responseHandler.js +1 -0
- package/dist/daemon/handlers/responseHandler.js.map +1 -1
- package/dist/daemon/ipcServer.js +8 -8
- package/dist/daemon/ipcServer.js.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.d.ts.map +1 -1
- package/dist/daemon/lifecycle/signalHandlers.js +19 -3
- package/dist/daemon/lifecycle/signalHandlers.js.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.d.ts.map +1 -1
- package/dist/daemon/lifecycle/workerCleanup.js +5 -2
- package/dist/daemon/lifecycle/workerCleanup.js.map +1 -1
- package/dist/daemon/patternDefinitions.d.ts +0 -13
- package/dist/daemon/patternDefinitions.d.ts.map +1 -1
- package/dist/daemon/patternDefinitions.js +0 -17
- package/dist/daemon/patternDefinitions.js.map +1 -1
- package/dist/daemon/worker/commandRegistry.d.ts.map +1 -1
- package/dist/daemon/worker/commandRegistry.js +3 -0
- package/dist/daemon/worker/commandRegistry.js.map +1 -1
- package/dist/index.js +34 -2
- package/dist/index.js.map +1 -1
- package/dist/ipc/protocol/commands.d.ts +2 -0
- package/dist/ipc/protocol/commands.d.ts.map +1 -1
- package/dist/ipc/protocol/commands.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/ipc/utils/responseValidator.d.ts +7 -1
- package/dist/ipc/utils/responseValidator.d.ts.map +1 -1
- package/dist/ipc/utils/responseValidator.js +6 -1
- package/dist/ipc/utils/responseValidator.js.map +1 -1
- package/dist/session/QueryCacheManager.d.ts +140 -0
- package/dist/session/QueryCacheManager.d.ts.map +1 -0
- package/dist/session/QueryCacheManager.js +233 -0
- package/dist/session/QueryCacheManager.js.map +1 -0
- package/dist/session/cleanup.d.ts +63 -1
- package/dist/session/cleanup.d.ts.map +1 -1
- package/dist/session/cleanup.js +191 -65
- package/dist/session/cleanup.js.map +1 -1
- package/dist/session/queryCache.d.ts +25 -14
- package/dist/session/queryCache.d.ts.map +1 -1
- package/dist/session/queryCache.js +31 -60
- package/dist/session/queryCache.js.map +1 -1
- package/dist/telemetry/__tests__/roleInference.unit.test.d.ts +9 -0
- package/dist/telemetry/__tests__/roleInference.unit.test.d.ts.map +1 -0
- package/dist/telemetry/__tests__/roleInference.unit.test.js +138 -0
- package/dist/telemetry/__tests__/roleInference.unit.test.js.map +1 -0
- package/dist/telemetry/console.d.ts.map +1 -1
- package/dist/telemetry/console.js +29 -17
- package/dist/telemetry/console.js.map +1 -1
- package/dist/telemetry/dom.d.ts +1 -0
- package/dist/telemetry/dom.d.ts.map +1 -1
- package/dist/telemetry/dom.js +9 -4
- package/dist/telemetry/dom.js.map +1 -1
- package/dist/telemetry/filters.d.ts +3 -0
- package/dist/telemetry/filters.d.ts.map +1 -1
- package/dist/telemetry/filters.js +25 -3
- package/dist/telemetry/filters.js.map +1 -1
- package/dist/telemetry/network.d.ts.map +1 -1
- package/dist/telemetry/network.js +35 -6
- package/dist/telemetry/network.js.map +1 -1
- package/dist/telemetry/remoteObject.d.ts +58 -0
- package/dist/telemetry/remoteObject.d.ts.map +1 -0
- package/dist/telemetry/remoteObject.js +134 -0
- package/dist/telemetry/remoteObject.js.map +1 -0
- package/dist/telemetry/roleInference.d.ts +50 -0
- package/dist/telemetry/roleInference.d.ts.map +1 -0
- package/dist/telemetry/roleInference.js +163 -0
- package/dist/telemetry/roleInference.js.map +1 -0
- package/dist/telemetry/utils.d.ts +0 -57
- package/dist/telemetry/utils.d.ts.map +1 -1
- package/dist/telemetry/utils.js +0 -71
- package/dist/telemetry/utils.js.map +1 -1
- package/dist/types/dom.d.ts +2 -0
- package/dist/types/dom.d.ts.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/ui/formatters/a11y.d.ts +0 -9
- package/dist/ui/formatters/a11y.d.ts.map +1 -1
- package/dist/ui/formatters/a11y.js +0 -45
- package/dist/ui/formatters/a11y.js.map +1 -1
- package/dist/ui/formatters/console.d.ts +131 -0
- package/dist/ui/formatters/console.d.ts.map +1 -0
- package/dist/ui/formatters/console.js +400 -0
- package/dist/ui/formatters/console.js.map +1 -0
- package/dist/ui/formatters/preview.d.ts.map +1 -1
- package/dist/ui/formatters/preview.js +2 -39
- package/dist/ui/formatters/preview.js.map +1 -1
- package/dist/ui/logging/index.d.ts +1 -1
- package/dist/ui/logging/index.d.ts.map +1 -1
- package/dist/ui/logging/index.js +1 -1
- package/dist/ui/logging/index.js.map +1 -1
- package/dist/ui/logging/logger.d.ts +21 -0
- package/dist/ui/logging/logger.d.ts.map +1 -1
- package/dist/ui/logging/logger.js +24 -6
- package/dist/ui/logging/logger.js.map +1 -1
- package/dist/ui/messages/commands.d.ts +0 -14
- package/dist/ui/messages/commands.d.ts.map +1 -1
- package/dist/ui/messages/commands.js +0 -18
- package/dist/ui/messages/commands.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/errors.d.ts +0 -16
- package/dist/ui/messages/errors.d.ts.map +1 -1
- package/dist/ui/messages/errors.js +0 -18
- package/dist/ui/messages/errors.js.map +1 -1
- package/dist/ui/messages/hints.d.ts +0 -10
- package/dist/ui/messages/hints.d.ts.map +1 -1
- package/dist/ui/messages/hints.js +0 -12
- package/dist/ui/messages/hints.js.map +1 -1
- package/dist/utils/decisionTrees.d.ts +0 -17
- package/dist/utils/decisionTrees.d.ts.map +1 -1
- package/dist/utils/decisionTrees.js +17 -23
- package/dist/utils/decisionTrees.js.map +1 -1
- package/dist/utils/errorMapping.d.ts +60 -0
- package/dist/utils/errorMapping.d.ts.map +1 -0
- package/dist/utils/errorMapping.js +97 -0
- package/dist/utils/errorMapping.js.map +1 -0
- package/dist/utils/file.d.ts +27 -0
- package/dist/utils/file.d.ts.map +1 -0
- package/dist/utils/file.js +37 -0
- package/dist/utils/file.js.map +1 -0
- package/dist/utils/levenshtein.d.ts +0 -17
- package/dist/utils/levenshtein.d.ts.map +1 -1
- package/dist/utils/levenshtein.js +0 -31
- package/dist/utils/levenshtein.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 +0 -17
- package/dist/utils/taskMappings.d.ts.map +1 -1
- package/dist/utils/taskMappings.js +18 -24
- package/dist/utils/taskMappings.js.map +1 -1
- package/dist/utils/typeGuards.d.ts +62 -0
- package/dist/utils/typeGuards.d.ts.map +1 -0
- package/dist/utils/typeGuards.js +94 -0
- package/dist/utils/typeGuards.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for role inference utilities.
|
|
3
|
+
*
|
|
4
|
+
* Tests the contract of pure functions:
|
|
5
|
+
* - inferRoleFromTag: HTML tag to ARIA role mapping
|
|
6
|
+
* - synthesizeA11yNode: A11yNode synthesis from DOM context
|
|
7
|
+
*/
|
|
8
|
+
import { strict as assert } from 'node:assert';
|
|
9
|
+
import { describe, test } from 'node:test';
|
|
10
|
+
import { inferRoleFromTag, synthesizeA11yNode } from '../../telemetry/roleInference.js';
|
|
11
|
+
describe('inferRoleFromTag', () => {
|
|
12
|
+
test('maps interactive elements correctly', () => {
|
|
13
|
+
assert.equal(inferRoleFromTag('a'), 'link');
|
|
14
|
+
assert.equal(inferRoleFromTag('button'), 'button');
|
|
15
|
+
assert.equal(inferRoleFromTag('input'), 'textbox');
|
|
16
|
+
assert.equal(inferRoleFromTag('select'), 'combobox');
|
|
17
|
+
assert.equal(inferRoleFromTag('textarea'), 'textbox');
|
|
18
|
+
assert.equal(inferRoleFromTag('option'), 'option');
|
|
19
|
+
});
|
|
20
|
+
test('maps heading elements correctly', () => {
|
|
21
|
+
assert.equal(inferRoleFromTag('h1'), 'heading');
|
|
22
|
+
assert.equal(inferRoleFromTag('h2'), 'heading');
|
|
23
|
+
assert.equal(inferRoleFromTag('h3'), 'heading');
|
|
24
|
+
assert.equal(inferRoleFromTag('h4'), 'heading');
|
|
25
|
+
assert.equal(inferRoleFromTag('h5'), 'heading');
|
|
26
|
+
assert.equal(inferRoleFromTag('h6'), 'heading');
|
|
27
|
+
});
|
|
28
|
+
test('maps landmark elements correctly', () => {
|
|
29
|
+
assert.equal(inferRoleFromTag('nav'), 'navigation');
|
|
30
|
+
assert.equal(inferRoleFromTag('main'), 'main');
|
|
31
|
+
assert.equal(inferRoleFromTag('header'), 'banner');
|
|
32
|
+
assert.equal(inferRoleFromTag('footer'), 'contentinfo');
|
|
33
|
+
assert.equal(inferRoleFromTag('aside'), 'complementary');
|
|
34
|
+
assert.equal(inferRoleFromTag('section'), 'region');
|
|
35
|
+
assert.equal(inferRoleFromTag('article'), 'article');
|
|
36
|
+
assert.equal(inferRoleFromTag('form'), 'form');
|
|
37
|
+
});
|
|
38
|
+
test('maps media elements correctly', () => {
|
|
39
|
+
assert.equal(inferRoleFromTag('img'), 'image');
|
|
40
|
+
assert.equal(inferRoleFromTag('figure'), 'figure');
|
|
41
|
+
assert.equal(inferRoleFromTag('video'), 'video');
|
|
42
|
+
assert.equal(inferRoleFromTag('audio'), 'audio');
|
|
43
|
+
});
|
|
44
|
+
test('maps list elements correctly', () => {
|
|
45
|
+
assert.equal(inferRoleFromTag('ul'), 'list');
|
|
46
|
+
assert.equal(inferRoleFromTag('ol'), 'list');
|
|
47
|
+
assert.equal(inferRoleFromTag('li'), 'listitem');
|
|
48
|
+
assert.equal(inferRoleFromTag('dl'), 'list');
|
|
49
|
+
assert.equal(inferRoleFromTag('dt'), 'term');
|
|
50
|
+
assert.equal(inferRoleFromTag('dd'), 'definition');
|
|
51
|
+
});
|
|
52
|
+
test('maps table elements correctly', () => {
|
|
53
|
+
assert.equal(inferRoleFromTag('table'), 'table');
|
|
54
|
+
assert.equal(inferRoleFromTag('tr'), 'row');
|
|
55
|
+
assert.equal(inferRoleFromTag('th'), 'columnheader');
|
|
56
|
+
assert.equal(inferRoleFromTag('td'), 'cell');
|
|
57
|
+
});
|
|
58
|
+
test('is case-insensitive', () => {
|
|
59
|
+
assert.equal(inferRoleFromTag('BUTTON'), 'button');
|
|
60
|
+
assert.equal(inferRoleFromTag('Button'), 'button');
|
|
61
|
+
assert.equal(inferRoleFromTag('H1'), 'heading');
|
|
62
|
+
assert.equal(inferRoleFromTag('NAV'), 'navigation');
|
|
63
|
+
});
|
|
64
|
+
test('returns generic for unknown tags', () => {
|
|
65
|
+
assert.equal(inferRoleFromTag('div'), 'generic');
|
|
66
|
+
assert.equal(inferRoleFromTag('span'), 'generic');
|
|
67
|
+
assert.equal(inferRoleFromTag('custom-element'), 'generic');
|
|
68
|
+
assert.equal(inferRoleFromTag('unknown'), 'generic');
|
|
69
|
+
});
|
|
70
|
+
test('returns generic for empty string', () => {
|
|
71
|
+
assert.equal(inferRoleFromTag(''), 'generic');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
describe('synthesizeA11yNode', () => {
|
|
75
|
+
test('creates node with inferred flag set', () => {
|
|
76
|
+
const node = synthesizeA11yNode({ tag: 'button' }, 123);
|
|
77
|
+
assert.equal(node.inferred, true, 'Should have inferred flag');
|
|
78
|
+
});
|
|
79
|
+
test('infers role from tag', () => {
|
|
80
|
+
const buttonNode = synthesizeA11yNode({ tag: 'button' }, 1);
|
|
81
|
+
const linkNode = synthesizeA11yNode({ tag: 'a' }, 2);
|
|
82
|
+
const divNode = synthesizeA11yNode({ tag: 'div' }, 3);
|
|
83
|
+
assert.equal(buttonNode.role, 'button');
|
|
84
|
+
assert.equal(linkNode.role, 'link');
|
|
85
|
+
assert.equal(divNode.role, 'generic');
|
|
86
|
+
});
|
|
87
|
+
test('uses text preview as name', () => {
|
|
88
|
+
const node = synthesizeA11yNode({ tag: 'a', preview: 'Click here' }, 123);
|
|
89
|
+
assert.equal(node.name, 'Click here');
|
|
90
|
+
});
|
|
91
|
+
test('truncates long names', () => {
|
|
92
|
+
const longText = 'A'.repeat(150);
|
|
93
|
+
const node = synthesizeA11yNode({ tag: 'a', preview: longText }, 123);
|
|
94
|
+
assert.ok(node.name, 'Should have name');
|
|
95
|
+
assert.ok(node.name.length <= 100, 'Name should be truncated to 100 chars');
|
|
96
|
+
assert.ok(node.name.endsWith('...'), 'Truncated name should end with ellipsis');
|
|
97
|
+
});
|
|
98
|
+
test('sets nodeId as string', () => {
|
|
99
|
+
const node = synthesizeA11yNode({ tag: 'button' }, 456);
|
|
100
|
+
assert.equal(node.nodeId, '456');
|
|
101
|
+
});
|
|
102
|
+
test('sets backendDOMNodeId', () => {
|
|
103
|
+
const node = synthesizeA11yNode({ tag: 'button' }, 789);
|
|
104
|
+
assert.equal(node.backendDOMNodeId, 789);
|
|
105
|
+
});
|
|
106
|
+
test('adds heading level for h1-h6 tags', () => {
|
|
107
|
+
const h1 = synthesizeA11yNode({ tag: 'h1' }, 1);
|
|
108
|
+
const h2 = synthesizeA11yNode({ tag: 'h2' }, 2);
|
|
109
|
+
const h6 = synthesizeA11yNode({ tag: 'h6' }, 6);
|
|
110
|
+
assert.ok(h1.properties, 'h1 should have properties');
|
|
111
|
+
assert.equal(h1.properties['level'], 1);
|
|
112
|
+
assert.ok(h2.properties, 'h2 should have properties');
|
|
113
|
+
assert.equal(h2.properties['level'], 2);
|
|
114
|
+
assert.ok(h6.properties, 'h6 should have properties');
|
|
115
|
+
assert.equal(h6.properties['level'], 6);
|
|
116
|
+
});
|
|
117
|
+
test('does not add level for non-heading tags', () => {
|
|
118
|
+
const button = synthesizeA11yNode({ tag: 'button' }, 1);
|
|
119
|
+
const div = synthesizeA11yNode({ tag: 'div' }, 2);
|
|
120
|
+
assert.equal(button.properties, undefined);
|
|
121
|
+
assert.equal(div.properties, undefined);
|
|
122
|
+
});
|
|
123
|
+
test('handles missing preview', () => {
|
|
124
|
+
const node = synthesizeA11yNode({ tag: 'button' }, 123);
|
|
125
|
+
assert.equal(node.name, undefined);
|
|
126
|
+
});
|
|
127
|
+
test('handles empty preview', () => {
|
|
128
|
+
const node = synthesizeA11yNode({ tag: 'button', preview: '' }, 123);
|
|
129
|
+
assert.equal(node.name, undefined);
|
|
130
|
+
});
|
|
131
|
+
test('preserves classes in domContext but does not use in node', () => {
|
|
132
|
+
const node = synthesizeA11yNode({ tag: 'button', classes: ['btn', 'btn-primary'], preview: 'Submit' }, 123);
|
|
133
|
+
// Classes are not copied to A11yNode - they remain in domContext
|
|
134
|
+
assert.equal(node.role, 'button');
|
|
135
|
+
assert.equal(node.name, 'Submit');
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
//# sourceMappingURL=roleInference.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roleInference.unit.test.js","sourceRoot":"","sources":["../../../src/telemetry/__tests__/roleInference.unit.test.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE3C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAEpF,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC/C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,UAAU,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;QAC3C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;QACxD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;QACzD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,QAAQ,CAAC,CAAC;QACpD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;QAC/C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACxC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IACrD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;QACrD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,EAAE,SAAS,CAAC,CAAC;QAC5D,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,2BAA2B,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChC,MAAM,UAAU,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAEtD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,CAAC,CAAC;QAE1E,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChC,MAAM,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAEtE,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;QACzC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,GAAG,EAAE,uCAAuC,CAAC,CAAC;QAC5E,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,yCAAyC,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAChD,MAAM,EAAE,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QAEhD,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAExC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;QAExC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,2BAA2B,CAAC,CAAC;QACtD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yCAAyC,EAAE,GAAG,EAAE;QACnD,MAAM,MAAM,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QACxD,MAAM,GAAG,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;QAElD,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QAC3C,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,CAAC,CAAC;QAExD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAErE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,0DAA0D,EAAE,GAAG,EAAE;QACpE,MAAM,IAAI,GAAG,kBAAkB,CAC7B,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EACrE,GAAG,CACJ,CAAC;QAEF,iEAAiE;QACjE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAClC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -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,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAKzD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAc,MAAM,SAAS,CAAC;AAkC3E;;;;;;;;;;;;;;GAcG;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,CAqD1B"}
|
|
@@ -3,7 +3,31 @@ import { TypedCDPConnection } from '../connection/typed-cdp.js';
|
|
|
3
3
|
import { MAX_CONSOLE_MESSAGES } from '../constants.js';
|
|
4
4
|
import { createLogger } from '../ui/logging/index.js';
|
|
5
5
|
import { shouldExcludeConsoleMessage } from './filters.js';
|
|
6
|
+
import { formatConsoleArgs } from './remoteObject.js';
|
|
6
7
|
import { pushWithLimit } from './utils.js';
|
|
8
|
+
/**
|
|
9
|
+
* Convert CDP stack trace to StackFrame array.
|
|
10
|
+
*
|
|
11
|
+
* @param stackTrace - CDP stack trace from Runtime events
|
|
12
|
+
* @returns Array of StackFrame objects, or undefined if no stack trace
|
|
13
|
+
*/
|
|
14
|
+
function convertStackTrace(stackTrace) {
|
|
15
|
+
if (!stackTrace?.callFrames?.length) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
return stackTrace.callFrames.map((frame) => {
|
|
19
|
+
const stackFrame = {
|
|
20
|
+
url: frame.url,
|
|
21
|
+
lineNumber: frame.lineNumber,
|
|
22
|
+
columnNumber: frame.columnNumber,
|
|
23
|
+
scriptId: frame.scriptId,
|
|
24
|
+
};
|
|
25
|
+
if (frame.functionName) {
|
|
26
|
+
stackFrame.functionName = frame.functionName;
|
|
27
|
+
}
|
|
28
|
+
return stackFrame;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
7
31
|
const log = createLogger('console');
|
|
8
32
|
/**
|
|
9
33
|
* Start collecting console messages and exceptions via CDP Runtime domain.
|
|
@@ -25,33 +49,19 @@ export async function startConsoleCollection(cdp, messages, includeAll = false,
|
|
|
25
49
|
const typed = new TypedCDPConnection(cdp);
|
|
26
50
|
await cdp.send('Runtime.enable');
|
|
27
51
|
registry.registerTyped(typed, 'Runtime.consoleAPICalled', (params) => {
|
|
28
|
-
const text = params.args
|
|
29
|
-
.map((arg) => {
|
|
30
|
-
if (arg.value !== undefined) {
|
|
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(' ');
|
|
52
|
+
const text = formatConsoleArgs(params.args);
|
|
45
53
|
if (shouldExcludeConsoleMessage(text, params.type, includeAll)) {
|
|
46
54
|
return;
|
|
47
55
|
}
|
|
48
56
|
const navigationId = getCurrentNavigationId?.();
|
|
57
|
+
const stackTrace = convertStackTrace(params.stackTrace);
|
|
49
58
|
const message = {
|
|
50
59
|
type: params.type,
|
|
51
60
|
text,
|
|
52
61
|
timestamp: params.timestamp,
|
|
53
62
|
args: params.args,
|
|
54
63
|
...(navigationId !== undefined && { navigationId }),
|
|
64
|
+
...(stackTrace && { stackTrace }),
|
|
55
65
|
};
|
|
56
66
|
pushWithLimit(messages, message, MAX_CONSOLE_MESSAGES, () => {
|
|
57
67
|
log.debug(`Warning: Console message limit reached (${MAX_CONSOLE_MESSAGES})`);
|
|
@@ -64,11 +74,13 @@ export async function startConsoleCollection(cdp, messages, includeAll = false,
|
|
|
64
74
|
return;
|
|
65
75
|
}
|
|
66
76
|
const navigationId = getCurrentNavigationId?.();
|
|
77
|
+
const stackTrace = convertStackTrace(exception.stackTrace);
|
|
67
78
|
const message = {
|
|
68
79
|
type: 'error',
|
|
69
80
|
text,
|
|
70
81
|
timestamp: params.timestamp,
|
|
71
82
|
...(navigationId !== undefined && { navigationId }),
|
|
83
|
+
...(stackTrace && { stackTrace }),
|
|
72
84
|
};
|
|
73
85
|
pushWithLimit(messages, message, MAX_CONSOLE_MESSAGES, () => {
|
|
74
86
|
log.debug(`Warning: Console message limit reached (${MAX_CONSOLE_MESSAGES})`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/telemetry/console.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"console.js","sourceRoot":"","sources":["../../src/telemetry/console.ts"],"names":[],"mappings":"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"}
|
package/dist/telemetry/dom.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare function prepareDOMCollection(cdp: CDPConnection): Promise<Cleanu
|
|
|
13
13
|
* Capture a complete DOM snapshot of the current page.
|
|
14
14
|
*
|
|
15
15
|
* Called during session shutdown to get the final state of the page.
|
|
16
|
+
* Parallelizes independent CDP calls for better performance.
|
|
16
17
|
*
|
|
17
18
|
* @param cdp - CDP connection instance
|
|
18
19
|
* @returns DOM data including URL, title, full HTML, and A11y tree
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/telemetry/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAY,MAAM,SAAS,CAAC;AASlE;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAcvF;AAmGD
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../src/telemetry/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGzD,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAY,MAAM,SAAS,CAAC;AASlE;;;;;;;GAOG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,CAAC,CAcvF;AAmGD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBrE"}
|
package/dist/telemetry/dom.js
CHANGED
|
@@ -98,17 +98,22 @@ async function collectA11yTree(cdp) {
|
|
|
98
98
|
* Capture a complete DOM snapshot of the current page.
|
|
99
99
|
*
|
|
100
100
|
* Called during session shutdown to get the final state of the page.
|
|
101
|
+
* Parallelizes independent CDP calls for better performance.
|
|
101
102
|
*
|
|
102
103
|
* @param cdp - CDP connection instance
|
|
103
104
|
* @returns DOM data including URL, title, full HTML, and A11y tree
|
|
104
105
|
*/
|
|
105
106
|
export async function collectDOM(cdp) {
|
|
106
107
|
try {
|
|
107
|
-
|
|
108
|
+
// Run independent CDP calls in parallel for better performance
|
|
109
|
+
const [root, frame, title, a11yTree] = await Promise.all([
|
|
110
|
+
getDocumentRoot(cdp),
|
|
111
|
+
getMainFrame(cdp),
|
|
112
|
+
getDocumentTitle(cdp),
|
|
113
|
+
collectA11yTree(cdp),
|
|
114
|
+
]);
|
|
115
|
+
// getOuterHTML depends on root.nodeId, so it must be sequential
|
|
108
116
|
const outerHTML = await getOuterHTML(cdp, root.nodeId);
|
|
109
|
-
const frame = await getMainFrame(cdp);
|
|
110
|
-
const title = await getDocumentTitle(cdp);
|
|
111
|
-
const a11yTree = await collectA11yTree(cdp);
|
|
112
117
|
return {
|
|
113
118
|
url: frame.url,
|
|
114
119
|
title,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/telemetry/dom.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"dom.js","sourceRoot":"","sources":["../../src/telemetry/dom.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,6 +38,9 @@ export declare const DEFAULT_SKIP_BODY_MIME_TYPES: readonly ["text/css", "image/
|
|
|
38
38
|
/**
|
|
39
39
|
* Check if a URL should be excluded based on domain filtering.
|
|
40
40
|
*
|
|
41
|
+
* Uses pre-compiled Set for O(1) exact match, with O(n) fallback for subdomain matching.
|
|
42
|
+
* Optimized to check exact match first (most common case) before iterating.
|
|
43
|
+
*
|
|
41
44
|
* @param url - URL to check against exclusion list
|
|
42
45
|
* @param includeAll - If true, disables all filtering
|
|
43
46
|
* @returns True if the URL's domain matches an excluded domain
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/telemetry/filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,ohBAgC3B,CAAC;
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/telemetry/filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,yCAAyC;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,eAAO,MAAM,wBAAwB,ohBAgC3B,CAAC;AAQX;;GAEG;AACH,eAAO,MAAM,8BAA8B,4DAIjC,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,iCAAiC,4IASpC,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,0BAA0B,6QA4B7B,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,4BAA4B,+SAqB/B,CAAC;AAOX;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAe,GAAG,OAAO,CAqBrF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,OAAe,GAC1B,OAAO,CAcT;AAoDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAKrE;AAoBD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GACL,OAAO,CAqCT;AAED;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,EACX,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,iBAAiB,EAAE,MAAM,EACzB,OAAO,GAAE;IACP,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACjB,GACL,iBAAiB,CAgCnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IACP,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,GACL,OAAO,CAQT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EAAE,EAC1B,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,GACrC,cAAc,EAAE,CAWlB"}
|
|
@@ -39,6 +39,11 @@ export const DEFAULT_EXCLUDED_DOMAINS = [
|
|
|
39
39
|
'datadoghq.com',
|
|
40
40
|
'sentry.io',
|
|
41
41
|
];
|
|
42
|
+
/**
|
|
43
|
+
* Pre-compiled Set of excluded domains for O(1) exact match lookup.
|
|
44
|
+
* Lowercase for case-insensitive matching.
|
|
45
|
+
*/
|
|
46
|
+
const EXCLUDED_DOMAINS_SET = new Set(DEFAULT_EXCLUDED_DOMAINS.map((d) => d.toLowerCase()));
|
|
42
47
|
/**
|
|
43
48
|
* Console message types to exclude by default (Redux/React DevTools noise)
|
|
44
49
|
*/
|
|
@@ -119,9 +124,16 @@ export const DEFAULT_SKIP_BODY_MIME_TYPES = [
|
|
|
119
124
|
'audio/mpeg',
|
|
120
125
|
'audio/wav',
|
|
121
126
|
];
|
|
127
|
+
/**
|
|
128
|
+
* Pre-compiled Set of MIME types to skip for O(1) lookup.
|
|
129
|
+
*/
|
|
130
|
+
const SKIP_BODY_MIME_TYPES_SET = new Set(DEFAULT_SKIP_BODY_MIME_TYPES.map((m) => m.toLowerCase()));
|
|
122
131
|
/**
|
|
123
132
|
* Check if a URL should be excluded based on domain filtering.
|
|
124
133
|
*
|
|
134
|
+
* Uses pre-compiled Set for O(1) exact match, with O(n) fallback for subdomain matching.
|
|
135
|
+
* Optimized to check exact match first (most common case) before iterating.
|
|
136
|
+
*
|
|
125
137
|
* @param url - URL to check against exclusion list
|
|
126
138
|
* @param includeAll - If true, disables all filtering
|
|
127
139
|
* @returns True if the URL's domain matches an excluded domain
|
|
@@ -131,7 +143,18 @@ export function shouldExcludeDomain(url, includeAll = false) {
|
|
|
131
143
|
return false;
|
|
132
144
|
}
|
|
133
145
|
const hostname = extractHostname(url).toLowerCase();
|
|
134
|
-
|
|
146
|
+
// O(1) exact match check (most common case)
|
|
147
|
+
if (EXCLUDED_DOMAINS_SET.has(hostname)) {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
// O(n) subdomain check - hostname ends with excluded domain
|
|
151
|
+
// e.g., "www.googletagmanager.com" matches "googletagmanager.com"
|
|
152
|
+
for (const domain of EXCLUDED_DOMAINS_SET) {
|
|
153
|
+
if (hostname.endsWith(`.${domain}`)) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return false;
|
|
135
158
|
}
|
|
136
159
|
/**
|
|
137
160
|
* Check if a console message should be excluded based on type and pattern filtering
|
|
@@ -249,8 +272,7 @@ export function shouldFetchBody(url, mimeType, options = {}) {
|
|
|
249
272
|
}
|
|
250
273
|
if (mimeType) {
|
|
251
274
|
const normalizedMimeType = mimeType.toLowerCase().split(';')[0]?.trim() ?? '';
|
|
252
|
-
if (normalizedMimeType &&
|
|
253
|
-
DEFAULT_SKIP_BODY_MIME_TYPES.some((skipType) => normalizedMimeType === skipType.toLowerCase())) {
|
|
275
|
+
if (normalizedMimeType && SKIP_BODY_MIME_TYPES_SET.has(normalizedMimeType)) {
|
|
254
276
|
return false;
|
|
255
277
|
}
|
|
256
278
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/telemetry/filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAY1E;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,sBAAsB;IACtB,sBAAsB;IACtB,sBAAsB;IACtB,iBAAiB;IACjB,sBAAsB;IACtB,YAAY;IACZ,cAAc;IACd,cAAc;IACd,sBAAsB;IACtB,YAAY;IACZ,cAAc;IACd,aAAa;IACb,cAAc;IACd,cAAc;IACd,aAAa;IACb,YAAY;IACZ,eAAe;IACf,SAAS;IACT,eAAe;IACf,YAAY;IACZ,eAAe;IACf,eAAe;IACf,aAAa;IACb,YAAY;IACZ,YAAY;IACZ,cAAc;IACd,aAAa;IACb,eAAe;IACf,cAAc;IACd,eAAe;IACf,WAAW;CACH,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,YAAY;IACZ,qBAAqB;IACrB,UAAU;CACF,CAAC;AAEX;;GAEG;AACH,MAAM,CAAC,MAAM,iCAAiC,GAAG;IAC/C,oBAAoB;IACpB,OAAO;IACP,OAAO;IACP,6BAA6B;IAC7B,SAAS;IACT,eAAe;IACf,WAAW;IACX,eAAe;CACP,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG;IACxC,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,WAAW;IACX,OAAO;IACP,QAAQ;IACR,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;IACP,QAAQ;IACR,OAAO;CACC,CAAC;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,UAAU;IACV,eAAe;IACf,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,UAAU;IACV,UAAU;IACV,UAAU;IACV,uBAAuB;IACvB,wBAAwB;IACxB,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,WAAW;CACH,CAAC;AAEX
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/telemetry/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAczD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAczD,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAoH/D,MAAM,WAAW,wBAAwB;IACvC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,GAAG,SAAS,CAAC;CACrD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,sBAAsB,CAC1C,GAAG,EAAE,aAAa,EAClB,QAAQ,EAAE,cAAc,EAAE,EAC1B,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,eAAe,CAAC,CA0L1B"}
|
|
@@ -18,12 +18,22 @@ function shouldFilterRequest(url, includeAll, networkInclude, networkExclude) {
|
|
|
18
18
|
return false;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
* Fetch response body for a request.
|
|
21
|
+
* Fetch response body for a request with cancellation support.
|
|
22
|
+
*
|
|
23
|
+
* @param cdp - CDP connection instance
|
|
24
|
+
* @param requestId - Request ID to fetch body for
|
|
25
|
+
* @param request - Network request object to populate with body
|
|
26
|
+
* @param pendingFetches - Set to track pending fetch operations for cleanup
|
|
22
27
|
*/
|
|
23
|
-
function fetchResponseBody(cdp, requestId, request) {
|
|
28
|
+
function fetchResponseBody(cdp, requestId, request, pendingFetches) {
|
|
29
|
+
pendingFetches.add(requestId);
|
|
24
30
|
void cdp
|
|
25
31
|
.send('Network.getResponseBody', { requestId })
|
|
26
32
|
.then((response) => {
|
|
33
|
+
// Skip if cleanup has already removed this from pending
|
|
34
|
+
if (!pendingFetches.has(requestId)) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
27
37
|
const typedResponse = response;
|
|
28
38
|
request.responseBody = typedResponse.body;
|
|
29
39
|
if (typedResponse.body) {
|
|
@@ -32,6 +42,9 @@ function fetchResponseBody(cdp, requestId, request) {
|
|
|
32
42
|
})
|
|
33
43
|
.catch((error) => {
|
|
34
44
|
log.debug(`Failed to fetch response body for request ${requestId}: ${getErrorMessage(error)}`);
|
|
45
|
+
})
|
|
46
|
+
.finally(() => {
|
|
47
|
+
pendingFetches.delete(requestId);
|
|
35
48
|
});
|
|
36
49
|
}
|
|
37
50
|
/**
|
|
@@ -52,18 +65,29 @@ function createNetworkRequest(params, getCurrentNavigationId) {
|
|
|
52
65
|
}
|
|
53
66
|
/**
|
|
54
67
|
* Clean up stale requests from the request map.
|
|
68
|
+
*
|
|
69
|
+
* Optimized to leverage Map insertion order - iterates from oldest entries
|
|
70
|
+
* and exits early once a non-stale request is found, avoiding O(n) full scan.
|
|
55
71
|
*/
|
|
56
72
|
function cleanupStaleRequests(requestMap) {
|
|
57
73
|
const now = Date.now();
|
|
58
74
|
const staleRequests = [];
|
|
59
|
-
|
|
75
|
+
// Maps maintain insertion order, so oldest entries come first.
|
|
76
|
+
// Exit early once we find a non-stale request since newer ones won't be stale either.
|
|
77
|
+
for (const [requestId, value] of requestMap) {
|
|
60
78
|
if (now - value.timestamp > STALE_REQUEST_TIMEOUT) {
|
|
61
79
|
staleRequests.push(requestId);
|
|
62
80
|
}
|
|
63
|
-
|
|
81
|
+
else {
|
|
82
|
+
// Found first non-stale request, stop iterating
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
64
86
|
if (staleRequests.length > 0) {
|
|
65
87
|
log.debug(`Cleaning up ${staleRequests.length} stale network requests`);
|
|
66
|
-
|
|
88
|
+
for (const requestId of staleRequests) {
|
|
89
|
+
requestMap.delete(requestId);
|
|
90
|
+
}
|
|
67
91
|
}
|
|
68
92
|
}
|
|
69
93
|
/**
|
|
@@ -89,6 +113,7 @@ function cleanupStaleRequests(requestMap) {
|
|
|
89
113
|
export async function startNetworkCollection(cdp, requests, options = {}) {
|
|
90
114
|
const { includeAll = false, fetchAllBodies = false, fetchBodiesInclude = [], fetchBodiesExclude = [], networkInclude = [], networkExclude = [], maxBodySize = MAX_RESPONSE_SIZE, getCurrentNavigationId, } = options;
|
|
91
115
|
const requestMap = new Map();
|
|
116
|
+
const pendingFetches = new Set();
|
|
92
117
|
const registry = new CDPHandlerRegistry();
|
|
93
118
|
const typed = new TypedCDPConnection(cdp);
|
|
94
119
|
let bodiesFetched = 0;
|
|
@@ -175,7 +200,7 @@ export async function startNetworkCollection(cdp, requests, options = {}) {
|
|
|
175
200
|
});
|
|
176
201
|
if (decision.should) {
|
|
177
202
|
bodiesFetched++;
|
|
178
|
-
fetchResponseBody(cdp, params.requestId, request);
|
|
203
|
+
fetchResponseBody(cdp, params.requestId, request, pendingFetches);
|
|
179
204
|
}
|
|
180
205
|
else {
|
|
181
206
|
bodiesSkipped++;
|
|
@@ -206,9 +231,13 @@ export async function startNetworkCollection(cdp, requests, options = {}) {
|
|
|
206
231
|
const percentageSkipped = ((bodiesSkipped / totalBodyDecisions) * 100).toFixed(1);
|
|
207
232
|
log.debug(`[PERF] Network bodies: ${bodiesFetched} fetched, ${bodiesSkipped} skipped (${percentageSkipped}% reduction)`);
|
|
208
233
|
}
|
|
234
|
+
if (pendingFetches.size > 0) {
|
|
235
|
+
log.debug(`[PERF] Cancelling ${pendingFetches.size} pending body fetches`);
|
|
236
|
+
}
|
|
209
237
|
clearInterval(cleanupInterval);
|
|
210
238
|
registry.cleanup();
|
|
211
239
|
requestMap.clear();
|
|
240
|
+
pendingFetches.clear();
|
|
212
241
|
};
|
|
213
242
|
}
|
|
214
243
|
//# sourceMappingURL=network.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,8BAA8B,EAC9B,iBAAiB,EACjB,2BAA2B,EAC3B,kCAAkC,EAClC,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEhG,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;AAEpC;;GAEG;AACH,SAAS,mBAAmB,CAC1B,GAAW,EACX,UAAmB,EACnB,cAAwB,EACxB,cAAwB;IAExB,IAAI,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,gBAAgB,CAAC,GAAG,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,cAAc,EAAE,CAAC,EAAE,CAAC;QAChG,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"network.js","sourceRoot":"","sources":["../../src/telemetry/network.ts"],"names":[],"mappings":"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"}
|