UNPKG

micro-event-manager

Version:

A tiny event manager library based on publish-subscribe pattern

54 lines (50 loc) 1.85 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var EventManager = /** @class */ (function () { function EventManager() { this._events = {}; this._publishedEvents = []; this._uniqueId = 0; // use self increasing number to guarantee global uniqueness } EventManager.prototype.subscribe = function (name, callback) { if (!this._events[name]) { this._events[name] = []; } var event = { key: this._uniqueId++, callback: callback }; this._events[name].push(event); return event.key; }; EventManager.prototype.publish = function (name, data) { this._publishedEvents.push({ name: name, data: data }); if (this._events[name]) { this._events[name].forEach(function (_a) { var callback = _a.callback; callback(data); }); } }; EventManager.prototype.unSubscribe = function (name, key) { if (this._events[name]) { for (var i = 0; i < this._events[name].length; i++) { if (key === this._events[name][i].key) { this._events[name].splice(i, 1); break; } } } }; // Make sure published events can be triggered when subscribed EventManager.prototype.ensureTriggeredAndSubscribe = function (name, callback) { var event = this._publishedEvents .slice() .reverse() .find(function (item) { return item.name === name; }); if (event) { callback(event.data); } return this.subscribe(name, callback); }; return EventManager; }()); exports.EventManager = EventManager; //# sourceMappingURL=index.js.map