amocrm-client
Version:
JS Library for AmoCRM
45 lines • 1.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventEmitter = void 0;
const events_1 = require("events");
/**
* Расширяет функционал работы с событиями в NodeJS.
* Добавляет возможность подписки на собыития объекта
* */
class EventEmitter extends events_1.EventEmitter {
constructor() {
super(...arguments);
this.subscribers = [];
}
/**
* Подписывает на все события сторонний объект
* */
subscribe(subscriber) {
this.subscribers.push(subscriber);
return this;
}
/**
* Отписка от событий
* */
unsubscribe(subscriber) {
this.subscribers = this.subscribers.filter(s => s !== subscriber);
return this;
}
/**
* Формирует событие у целевого объекта и у подписчиков
* */
emit(eventName, ...args) {
const result = super.emit(eventName, ...args);
const context = args[0];
if (context instanceof EventEmitter) {
return result;
}
const { name } = this.constructor;
const id = name[0].toLowerCase() + name.substring(1);
const subscriberEventName = id + ':' + eventName.toString();
this.subscribers.forEach(subscriber => subscriber.emit(subscriberEventName, this, ...args));
return result;
}
}
exports.EventEmitter = EventEmitter;
//# sourceMappingURL=EventEmitter.js.map