Skip to content

Commit 71d309d

Browse files
authored
Merge pull request #477 from nichtsam/pr/protocol-overwriting-transport-hooks
Pr/protocol overwriting transport hooks
2 parents 909fe5d + 9edb619 commit 71d309d

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

src/shared/protocol.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,22 @@ describe("protocol tests", () => {
6565
expect(oncloseMock).toHaveBeenCalled();
6666
});
6767

68+
test("should not overwrite existing hooks when connecting transports", async () => {
69+
const oncloseMock = jest.fn();
70+
const onerrorMock = jest.fn();
71+
const onmessageMock = jest.fn();
72+
transport.onclose = oncloseMock;
73+
transport.onerror = onerrorMock;
74+
transport.onmessage = onmessageMock;
75+
await protocol.connect(transport);
76+
transport.onclose();
77+
transport.onerror(new Error());
78+
transport.onmessage("");
79+
expect(oncloseMock).toHaveBeenCalled();
80+
expect(onerrorMock).toHaveBeenCalled();
81+
expect(onmessageMock).toHaveBeenCalled();
82+
});
83+
6884
describe("_meta preservation with onprogress", () => {
6985
test("should preserve existing _meta when adding progressToken", async () => {
7086
await protocol.connect(transport);

src/shared/protocol.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,23 +286,31 @@ export abstract class Protocol<
286286
*/
287287
async connect(transport: Transport): Promise<void> {
288288
this._transport = transport;
289+
const _onclose = this.transport?.onclose;
289290
this._transport.onclose = () => {
291+
_onclose?.();
290292
this._onclose();
291293
};
292294

295+
const _onerror = this.transport?.onerror;
293296
this._transport.onerror = (error: Error) => {
297+
_onerror?.(error);
294298
this._onerror(error);
295299
};
296300

301+
const _onmessage = this._transport?.onmessage;
297302
this._transport.onmessage = (message, extra) => {
303+
_onmessage?.(message, extra);
298304
if (isJSONRPCResponse(message) || isJSONRPCError(message)) {
299305
this._onresponse(message);
300306
} else if (isJSONRPCRequest(message)) {
301307
this._onrequest(message, extra);
302308
} else if (isJSONRPCNotification(message)) {
303309
this._onnotification(message);
304310
} else {
305-
this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));
311+
this._onerror(
312+
new Error(`Unknown message type: ${JSON.stringify(message)}`),
313+
);
306314
}
307315
};
308316

0 commit comments

Comments
 (0)