@@ -14,7 +14,7 @@ import {
1414
1515import { FakeIssuesManager } from './DevtoolsUtils.js' ;
1616import { logger } from './logger.js' ;
17- import type { ConsoleMessage , Protocol } from './third_party/index.js' ;
17+ import type { CDPSession , ConsoleMessage } from './third_party/index.js' ;
1818import {
1919 type Browser ,
2020 type Frame ,
@@ -210,23 +210,18 @@ export class PageCollector<T> {
210210export class ConsoleCollector extends PageCollector <
211211 ConsoleMessage | Error | AggregatedIssue
212212> {
213- #seenIssueKeys = new WeakMap < Page , Set < string > > ( ) ;
214- #issuesAggregators = new WeakMap < Page , IssueAggregator > ( ) ;
215- #mockIssuesManagers = new WeakMap < Page , FakeIssuesManager > ( ) ;
216-
217213 override addPage ( page : Page ) : void {
214+ const subscribed = this . storage . has ( page ) ;
218215 super . addPage ( page ) ;
219- void this . subscribeForIssues ( page ) ;
216+ if ( ! subscribed ) {
217+ void this . subscribeForIssues ( page ) ;
218+ }
220219 }
221- async subscribeForIssues ( page : Page ) {
222- if ( this . #seenIssueKeys. has ( page ) ) return ;
223220
224- this . #seenIssueKeys. set ( page , new Set ( ) ) ;
221+ async subscribeForIssues ( page : Page ) {
222+ const seenKeys = new Set < string > ( ) ;
225223 const mockManager = new FakeIssuesManager ( ) ;
226224 const aggregator = new IssueAggregator ( mockManager ) ;
227- this . #mockIssuesManagers. set ( page , mockManager ) ;
228- this . #issuesAggregators. set ( page , aggregator ) ;
229-
230225 aggregator . addEventListener (
231226 IssueAggregatorEvents . AGGREGATED_ISSUE_UPDATED ,
232227 event => {
@@ -238,45 +233,45 @@ export class ConsoleCollector extends PageCollector<
238233 page . emit ( 'issue' , event . data ) ;
239234 } ,
240235 ) ;
236+
241237 try {
242- const session = await page . createCDPSession ( ) ;
238+ // @ts -expect-error use existing CDP client (internal Puppeteer API).
239+ const session = page . _client ( ) as CDPSession ;
243240 session . on ( 'Audits.issueAdded' , data => {
244- const inspectorIssue =
245- data . issue satisfies Protocol . Audits . InspectorIssue ;
246- // @ts -expect-error Types of protocol from Puppeteer and CDP are incomparable for InspectorIssueCode, one is union, other is enum
247- const issue = createIssuesFromProtocolIssue ( null , inspectorIssue ) [ 0 ] ;
248- if ( ! issue ) {
249- logger ( 'No issue mapping for for the issue: ' , inspectorIssue . code ) ;
250- return ;
241+ try {
242+ const inspectorIssue = data . issue ;
243+ // @ts -expect-error Types of protocol from Puppeteer and CDP are
244+ // incomparable for InspectorIssueCode, one is union, other is enum.
245+ const issue = createIssuesFromProtocolIssue ( null , inspectorIssue ) [ 0 ] ;
246+ if ( ! issue ) {
247+ logger ( 'No issue mapping for for the issue: ' , inspectorIssue . code ) ;
248+ return ;
249+ }
250+
251+ const primaryKey = issue . primaryKey ( ) ;
252+ if ( seenKeys . has ( primaryKey ) ) {
253+ return ;
254+ }
255+ seenKeys . add ( primaryKey ) ;
256+
257+ mockManager . dispatchEventToListeners (
258+ IssuesManagerEvents . ISSUE_ADDED ,
259+ {
260+ issue,
261+ // @ts -expect-error We don't care that issues model is null
262+ issuesModel : null ,
263+ } ,
264+ ) ;
265+ } catch ( error ) {
266+ logger ( 'Error creating a new issue' , error ) ;
251267 }
252-
253- const seenKeys = this . #seenIssueKeys. get ( page ) ! ;
254- const primaryKey = issue . primaryKey ( ) ;
255- if ( seenKeys . has ( primaryKey ) ) return ;
256- seenKeys . add ( primaryKey ) ;
257-
258- const mockManager = this . #mockIssuesManagers. get ( page ) ;
259- if ( ! mockManager ) return ;
260-
261- mockManager . dispatchEventToListeners ( IssuesManagerEvents . ISSUE_ADDED , {
262- issue,
263- // @ts -expect-error We don't care that issues model is null
264- issuesModel : null ,
265- } ) ;
266268 } ) ;
267269
268270 await session . send ( 'Audits.enable' ) ;
269- } catch ( e ) {
270- logger ( 'Error subscribing to issues' , e ) ;
271+ } catch ( error ) {
272+ logger ( 'Error subscribing to issues' , error ) ;
271273 }
272274 }
273-
274- override cleanupPageDestroyed ( page : Page ) {
275- super . cleanupPageDestroyed ( page ) ;
276- this . #seenIssueKeys. delete ( page ) ;
277- this . #issuesAggregators. delete ( page ) ;
278- this . #mockIssuesManagers. delete ( page ) ;
279- }
280275}
281276
282277export class NetworkCollector extends PageCollector < HTTPRequest > {
0 commit comments