UNPKG

chrome-debugging-client

Version:

An async/await friendly Chrome debugging client with TypeScript support

69 lines 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const events_1 = require("events"); class DebuggingProtocolFactory { create() { return new DebuggingProtocol(); } } exports.default = DebuggingProtocolFactory; class DebuggingProtocol extends events_1.EventEmitter { constructor() { super(); this.seq = 0; this.pendingRequests = new Map(); } onMessage(data) { try { let msg = JSON.parse(data); if (msg.id !== undefined) { let req = this.pendingRequests.get(msg.id); this.pendingRequests.delete(msg.id); req.resolve(msg); } else { this.emit(msg.method, msg.params); } } catch (err) { this.onError(err); this.socket.close(); } } onClose() { this.clearPending(new Error("socket disconnect")); this.emit("close"); } onError(err) { this.clearPending(err); this.socket.close(); this.emit("error", err); } clearPending(err) { if (this.pendingRequests.size) { this.pendingRequests.forEach((req) => { req.reject(err); }); this.pendingRequests.clear(); } } send(method, params) { return new Promise((resolve, reject) => { let id = this.seq++; this.socket.send(JSON.stringify({ id, method, params })); this.pendingRequests.set(id, { id, method, params, resolve, reject }); }).then((res) => { if (res.error) { throw new ProtocolError(res.error); } return res.result; }); } } class ProtocolError extends Error { constructor(err) { super(err.message); this.code = err.code; } } //# sourceMappingURL=debugging-protocol-client-factory.js.map