diff --git a/src/DevToolsConnectionAdapter.ts b/src/DevToolsConnectionAdapter.ts new file mode 100644 index 00000000..814dc7f6 --- /dev/null +++ b/src/DevToolsConnectionAdapter.ts @@ -0,0 +1,41 @@ +/** + * @license + * Copyright 2025 Google LLC + * SPDX-License-Identifier: Apache-2.0 + */ + +import {type ConnectionTransport} from 'puppeteer-core'; + +import {Connection} from '../node_modules/chrome-devtools-frontend/front_end/core/protocol_client/InspectorBackend.js'; + +/** + * Allows a puppeteer {@link ConnectionTransport} to act like a DevTools {@link Connection}. + */ +export class DevToolsConnectionAdapter extends Connection { + #transport: ConnectionTransport | null; + #onDisconnect: ((arg0: string) => void) | null = null; + + constructor(transport: ConnectionTransport) { + super(); + this.#transport = transport; + this.#transport.onclose = () => this.#onDisconnect?.(''); + this.#transport.onmessage = msg => this.onMessage?.(msg); + } + + override setOnMessage(onMessage: (arg0: object | string) => void): void { + this.onMessage = onMessage; + } + + override setOnDisconnect(onDisconnect: (arg0: string) => void): void { + this.#onDisconnect = onDisconnect; + } + + override sendRawMessage(message: string): void { + this.#transport?.send(message); + } + + override async disconnect(): Promise { + this.#transport?.close(); + this.#transport = null; + } +}