Skip to content

Commit 7bb7397

Browse files
committed
replace rather than mutate channelResponders array when disconnecting
1 parent a3ddfa5 commit 7bb7397

File tree

2 files changed

+5
-36
lines changed

2 files changed

+5
-36
lines changed

main/core/responseBroker.ts

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,15 @@ export class ResponseBroker<T extends IResponseChannels> implements IResponseBro
4343
}
4444

4545
private disconnect<K extends keyof T>(channel: K, id: string): void {
46-
const responders = this.responders[channel];
46+
const channelResponders = this.responders[channel];
4747

48-
if (responders === undefined) {
48+
if (channelResponders === undefined) {
4949
return;
5050
}
5151

52-
const responderIndex = responders.findIndex((responder) => responder.id === id);
53-
responders.splice(responderIndex, 1);
52+
this.responders[channel] = channelResponders.filter((responder) => responder.id !== id);
5453

55-
if (responders.length === 0) {
54+
if (this.responders[channel].length === 0) {
5655
delete this.responders[channel];
5756
}
5857
}

specs/core/responseBroker.spec.ts

Lines changed: 1 addition & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { beforeAll, describe, expect, it, vi } from 'vitest';
1+
import { describe, expect, it, vi } from 'vitest';
22

33
import { IResponseChannels } from '../../main/contracts/contracts.js';
44
import { ResponseBroker } from '../../main/core/responseBroker.js';
@@ -116,34 +116,4 @@ describe('ResponseBroker', () => {
116116
responder1.disconnect();
117117
expect(() => responder1.disconnect()).not.toThrowError();
118118
});
119-
120-
describe('Non matching', () => {
121-
let id = 0;
122-
beforeAll(() => {
123-
vi.doMock('uuid', () => ({ v4: () => ++id }));
124-
});
125-
126-
it('should not disconnect responders when disconnecting', async () => {
127-
const instance = getInstance<MockConfig>();
128-
let responder2Count = 0;
129-
130-
const responder1 = instance.registerResponder('rsvpChannel', () => {
131-
return 'one' as const;
132-
});
133-
134-
instance.registerResponder('rsvpChannel', () => {
135-
responder2Count++;
136-
return 'two' as const;
137-
});
138-
139-
instance.collate('rsvpChannel', { data: 'bar' });
140-
expect(responder2Count).toEqual(1);
141-
142-
responder1.disconnect();
143-
144-
instance.collate('rsvpChannel', { data: 'bar' });
145-
146-
expect(responder2Count).toEqual(2);
147-
});
148-
});
149119
});

0 commit comments

Comments
 (0)