packages/utils-test/src/FakeMessageChannel.ts (33 lines of code) (raw):
/* eslint-disable max-classes-per-file, class-methods-use-this */
class FakeMessagePort extends EventTarget implements MessagePort {
#messageChannel: MessageChannel;
#otherPortName: 'port1' | 'port2';
constructor(messageChannel: MessageChannel, otherPortName: 'port1' | 'port2') {
super();
this.onmessage = () => {};
this.onmessageerror = () => {};
this.#messageChannel = messageChannel;
this.#otherPortName = otherPortName;
}
onmessage: (event: MessageEvent) => void;
onmessageerror: (event: MessageEvent) => void;
postMessage(data: unknown) {
const otherPort = this.#messageChannel[this.#otherPortName];
otherPort.dispatchEvent(new MessageEvent('message', { data }));
}
start() {}
close() {}
}
export class FakeMessageChannel implements MessageChannel {
#port1: FakeMessagePort;
#port2: FakeMessagePort;
constructor() {
this.#port1 = new FakeMessagePort(this, 'port2');
this.#port2 = new FakeMessagePort(this, 'port1');
}
get port1() {
return this.#port1;
}
get port2() {
return this.#port2;
}
}