rjweb-server
Version:
Easy and Robust Way to create a Web Server with Many Easy-to-use Features in NodeJS
275 lines (274 loc) • 6.13 kB
JavaScript
import { EventEmitter } from "events";
class SafeServerEventEmitter {
constructor() {
this.instance = new EventEmitter();
}
/**
* Listen to an event
* @example
* ```
* // We will log every time a request is made
* const controller = new Server({ })
*
* controller.addListener('httpRequest', (ctr) => {
* console.log(`${ctr.url.method} Request made to ${ctr.url.path}`)
* })
* ```
* @since 6.0.0
*/
addListener(event, listener) {
this.instance.addListener(event, listener);
return this;
}
/**
* Listen to an event
* @example
* ```
* // We will log every time a request is made
* const controller = new Server({ })
*
* controller.on('httpRequest', (ctr) => {
* console.log(`${ctr.url.method} Request made to ${ctr.url.path}`)
* })
* ```
* @since 6.0.0
*/
on(event, listener) {
this.instance.on(event, listener);
return this;
}
/**
* Listen to an event once
* @example
* ```
* // We will log when a request is made once
* const controller = new Server({ })
*
* controller.once('httpRequest', (ctr) => {
* console.log(`${ctr.url.method} Request made to ${ctr.url.path}`)
* })
* ```
* @since 6.0.0
*/
once(event, listener) {
this.instance.once(event, listener);
return this;
}
/**
* Listen to an event
* @example
* ```
* // We will log every time a request is made
* const controller = new Server({ })
*
* controller.prependListener('httpRequest', (ctr) => {
* console.log(`${ctr.url.method} Request made to ${ctr.url.path}`)
* })
* ```
* @since 6.0.0
*/
prependListener(event, listener) {
this.instance.prependListener(event, listener);
return this;
}
/**
* Listen to an event once
* @example
* ```
* // We will log when a request is made once
* const controller = new Server({ })
*
* controller.prependOnceListener('httpRequest', (ctr) => {
* console.log(`${ctr.url.method} Request made to ${ctr.url.path}`)
* })
* ```
* @since 6.0.0
*/
prependOnceListener(event, listener) {
this.instance.prependOnceListener(event, listener);
return this;
}
/**
* Remove a Listener
* @example
* ```
* // We will remove the first http request listener
* const controller = new Server({ })
*
* controller.off('httpRequest')
* ```
* @since 6.0.0
*/
off(event, listener) {
this.instance.off(event, listener);
return this;
}
/**
* Remove all listeners for a given event
* @example
* ```
* // We will remove all http request listeners
* const controller = new Server({ })
*
* controller.removeAllListeners('httpRequest')
* ```
* @since 6.0.0
*/
removeAllListeners(event) {
this.instance.removeAllListeners(event);
return this;
}
/**
* Remove a Listener
* @example
* ```
* // We will remove the first http request listener
* const controller = new Server({ })
*
* controller.removeListener('httpRequest')
* ```
* @since 6.0.0
*/
removeListener(event, listener) {
this.instance.removeListener(event, listener);
return this;
}
/**
* Emit an Event manually
* @example
* ```
* // We will emit a custom event
* const controller = new Server({ })
*
* controller.emit('httpRequest', ctr)
* ```
* @since 6.0.0
*/
emit(event, ...args) {
return this.instance.emit(event, ...args);
}
/**
* Emit an Event manually (with Error handling & Async Await)
* @example
* ```
* // We will emit a custom event
* const controller = new Server({ })
*
* await controller.emitSafe('httpRequest', ctr)
* ```
* @since 6.0.0
*/
emitSafe(event, ...args) {
return new Promise(async (resolve, reject) => {
const callback = this.instance._events[event];
if (!callback)
return resolve(false);
if (Array.isArray(callback)) {
for (const cb of callback) {
try {
await Promise.resolve(cb(...args));
} catch (err) {
return reject(err);
}
}
return resolve(true);
} else {
try {
await Promise.resolve(callback(...args));
} catch (err) {
return reject(err);
}
return resolve(true);
}
});
}
/**
* Get the Registered Event Listeners
* @example
* ```
* const controller = new Server({ })
*
* controller
* .on('test')
* .on('ok')
*
* controller.eventNames() // [ 'test', 'ok' ]
* ```
* @since 6.0.0
*/
eventNames() {
return this.instance.eventNames();
}
/**
* Get the Raw listeners for an Event
* @example
* ```
* const controller = new Server({ })
*
* controller.rawListeners('httpRequest')
* ```
* @since 6.0.0
*/
rawListeners(event) {
return this.instance.rawListeners(event);
}
/**
* Get the listeners for an Event
* @example
* ```
* const controller = new Server({ })
*
* controller.listeners()
* ```
* @since 6.0.0
*/
listeners(event) {
return this.instance.listeners(event);
}
/**
* Get the amount of registered listeners
* @example
* ```
* const controller = new Server({ })
*
* controller.on('test')
*
* controller.listenerCount() // 1
* ```
* @since 6.0.0
*/
listenerCount(event) {
return this.instance.listenerCount(event);
}
/**
* Get the maximum amount of listeners
* @example
* ```
* const controller = new Server({ })
*
* controller.getMaxListeners() // 0
* ```
* @since 6.0.0
*/
getMaxListeners() {
return this.instance.getMaxListeners();
}
/**
* Set the maximum amount of listeners
* @example
* ```
* const controller = new Server({ })
*
* controller.getMaxListeners(10)
* controller.getMaxListeners() // 10
* ```
* @since 6.0.0
*/
setMaxListeners(maxListeners) {
this.instance.setMaxListeners(maxListeners);
return this;
}
}
export {
SafeServerEventEmitter as default
};