mediasoup
Version:
Cutting Edge WebRTC Video Conferencing
89 lines (88 loc) • 2.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EnhancedEventEmitter = void 0;
exports.enhancedOnce = enhancedOnce;
const node_events_1 = require("node:events");
const Logger_1 = require("./Logger");
const enhancedEventEmitterLogger = new Logger_1.Logger('EnhancedEventEmitter');
class EnhancedEventEmitter extends node_events_1.EventEmitter {
constructor() {
super();
this.setMaxListeners(Infinity);
}
emit(eventName, ...args) {
return super.emit(eventName, ...args);
}
/**
* Special addition to the EventEmitter API.
*/
safeEmit(eventName, ...args) {
try {
return super.emit(eventName, ...args);
}
catch (error) {
enhancedEventEmitterLogger.error('safeEmit() | event listener threw an error [eventName:%s]:%o', eventName, error);
try {
super.emit('listenererror', eventName, error);
}
catch (error2) {
// Ignore it.
}
return Boolean(super.listenerCount(eventName));
}
}
on(eventName, listener) {
super.on(eventName, listener);
return this;
}
off(eventName, listener) {
super.off(eventName, listener);
return this;
}
addListener(eventName, listener) {
super.on(eventName, listener);
return this;
}
prependListener(eventName, listener) {
super.prependListener(eventName, listener);
return this;
}
once(eventName, listener) {
super.once(eventName, listener);
return this;
}
prependOnceListener(eventName, listener) {
super.prependOnceListener(eventName, listener);
return this;
}
removeListener(eventName, listener) {
super.off(eventName, listener);
return this;
}
removeAllListeners(eventName) {
super.removeAllListeners(eventName);
return this;
}
listenerCount(eventName) {
return super.listenerCount(eventName);
}
listeners(eventName) {
return super.listeners(eventName);
}
rawListeners(eventName) {
return super.rawListeners(eventName);
}
}
exports.EnhancedEventEmitter = EnhancedEventEmitter;
/**
* TypeScript version of events.once():
* https://nodejs.org/api/events.html#eventsonceemitter-name-options
*
* Usage example:
* ```ts
* await enhancedOnce<ConsumerEvents>(videoConsumer, 'producerpause');
* ````
*/
async function enhancedOnce(emmiter, eventName, options) {
return (0, node_events_1.once)(emmiter, eventName, options);
}