UNPKG

node-event-handler

Version:

A generic Node.js style event handler as a class property

30 lines (25 loc) 999 B
class NodeEventHandler { constructor (ctx, ee) { if (!ctx) throw new Error('NodeEventHandler: A context is required.') this.ctx = ctx this.boundHandlers = {} if (ee) this.addEventListeners(ee) }; get events () { return ( this._events || Object.defineProperty(this, '_events', { value: Object.getOwnPropertyNames(this.ctx.constructor.prototype) .filter(type => /^on/.test(type)) .map(type => type.slice(2)) })._events ) }; handleEvent (eventType) { if (!this.boundHandlers[eventType]) this.boundHandlers[eventType] = (this.ctx['on' + eventType]).bind(this.ctx) return this.boundHandlers[eventType] } addEventListeners (ee) { for (let events = this.events, i = events.length; i--; ee.on(events[i], this.handleEvent(events[i]))); }; removeEventListeners (ee) { for (let events = this.events, i = events.length; i--; ee.off(events[i], this.handleEvent(events[i]))); }; } module.exports = NodeEventHandler