UNPKG

eventric

Version:

behavior-first application development

78 lines (68 loc) 2.11 kB
var PubSub, __slice = [].slice; PubSub = (function() { function PubSub() { this._subscribers = []; this._subscriberId = 0; this._nextTick = function() { var args; args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; return setTimeout.apply(null, args); }; } PubSub.prototype.subscribe = function(eventName, subscriberFn) { return new Promise((function(_this) { return function(resolve, reject) { var subscriber; subscriber = { eventName: eventName, subscriberFn: subscriberFn, subscriberId: _this._getNextSubscriberId() }; _this._subscribers.push(subscriber); return resolve(subscriber.subscriberId); }; })(this)); }; PubSub.prototype.publish = function(eventName, payload) { return new Promise((function(_this) { return function(resolve, reject) { var executeNextHandler, subscribers; subscribers = _this._getRelevantSubscribers(eventName); executeNextHandler = function() { if (subscribers.length === 0) { return resolve(); } else { subscribers.shift().subscriberFn(payload, function() {}); return _this._nextTick(executeNextHandler, 0); } }; return _this._nextTick(executeNextHandler, 0); }; })(this)); }; PubSub.prototype._getRelevantSubscribers = function(eventName) { if (eventName) { return this._subscribers.filter(function(x) { return x.eventName === eventName; }); } else { return this._subscribers; } }; PubSub.prototype.unsubscribe = function(subscriberId) { return new Promise((function(_this) { return function(resolve, reject) { _this._subscribers = _this._subscribers.filter(function(x) { return x.subscriberId !== subscriberId; }); return resolve(); }; })(this)); }; PubSub.prototype._getNextSubscriberId = function() { return this._subscriberId++; }; return PubSub; })(); module.exports = PubSub;