UNPKG

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
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 };