Skip to content

Commit c463614

Browse files
szuendOrKoN
andauthored
chore: add DevTools connection adapter (#434)
This PR adds a small utility class that allows us to proxy a CDP connection via puppeteer into Chrome DevTools proper. --------- Co-authored-by: Alex Rudenko <[email protected]>
1 parent 9205593 commit c463614

File tree

1 file changed

+41
-0
lines changed

1 file changed

+41
-0
lines changed

src/DevToolsConnectionAdapter.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @license
3+
* Copyright 2025 Google LLC
4+
* SPDX-License-Identifier: Apache-2.0
5+
*/
6+
7+
import {type ConnectionTransport} from 'puppeteer-core';
8+
9+
import {Connection} from '../node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js';
10+
11+
/**
12+
* Allows a puppeteer {@link ConnectionTransport} to act like a DevTools {@link Connection}.
13+
*/
14+
export class DevToolsConnectionAdapter extends Connection {
15+
#transport: ConnectionTransport | null;
16+
#onDisconnect: ((arg0: string) => void) | null = null;
17+
18+
constructor(transport: ConnectionTransport) {
19+
super();
20+
this.#transport = transport;
21+
this.#transport.onclose = () => this.#onDisconnect?.('');
22+
this.#transport.onmessage = msg => this.onMessage?.(msg);
23+
}
24+
25+
override setOnMessage(onMessage: (arg0: object | string) => void): void {
26+
this.onMessage = onMessage;
27+
}
28+
29+
override setOnDisconnect(onDisconnect: (arg0: string) => void): void {
30+
this.#onDisconnect = onDisconnect;
31+
}
32+
33+
override sendRawMessage(message: string): void {
34+
this.#transport?.send(message);
35+
}
36+
37+
override async disconnect(): Promise<void> {
38+
this.#transport?.close();
39+
this.#transport = null;
40+
}
41+
}

0 commit comments

Comments
 (0)