@adv-ui/boros-tcf
Version:
Adevinta GDPR - Transparency and Consent Framework - API
137 lines (106 loc) • 3.57 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.DomainEventBus = void 0;
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass"));
var _ObservableFactory = require("./ObservableFactory");
var _ioc = require("../../core/ioc/ioc");
var _constants = require("../../core/constants");
var DomainEventBus = /*#__PURE__*/function () {
function DomainEventBus(_temp) {
var _ref = _temp === void 0 ? {} : _temp,
_ref$observableFactor = _ref.observableFactory,
observableFactory = _ref$observableFactor === void 0 ? (0, _ioc.inject)(_ObservableFactory.ObservableFactory) : _ref$observableFactor,
reporter = _ref.reporter;
this._observableFactory = observableFactory;
this._events = new Map();
this._reporter = typeof reporter === 'function' ? reporter : null;
}
var _proto = DomainEventBus.prototype;
_proto.getNumberOfObserversRegisteredForAnEvent = function getNumberOfObserversRegisteredForAnEvent(_ref2) {
var eventName = _ref2.eventName;
if (!this._events.has(eventName)) {
return 0;
}
return this._events.get(eventName).length;
};
_proto.register = function register(_ref3) {
var eventName = _ref3.eventName,
observer = _ref3.observer;
if (typeof observer !== 'function') {
throw new Error('Observer must be a function');
}
if (!this._events.has(eventName)) {
this._events.set(eventName, []);
}
var observable = this._observableFactory.create({
observer: observer
});
this._events.get(eventName).push(observable);
return observable.id;
};
_proto.unregister = function unregister(_ref4) {
var eventName = _ref4.eventName,
reference = _ref4.reference;
if (!this._events.has(eventName)) {
return false;
}
var observers = this._events.get(eventName);
var index = observers.findIndex(function (observer) {
return observer.id === reference;
});
if (index === -1) {
return false;
}
observers.splice(index, 1);
observers.length === 0 && this._events["delete"](eventName);
return true;
};
_proto.raise = function raise(_ref5) {
var _this = this;
var eventName = _ref5.eventName,
_ref5$payload = _ref5.payload,
payload = _ref5$payload === void 0 ? {} : _ref5$payload;
if (this._reporter) {
try {
this._reporter(eventName, payload);
} catch (ignored) {}
}
if (!this._events.has(eventName)) {
return;
}
this._events.get(eventName).forEach(function (observer) {
Promise.resolve().then(function () {
observer.observe({
domainEvent: {
eventName: eventName,
payload: payload
}
});
})["catch"](function (error) {
if (eventName !== _constants.EVENT_LISTENER_ERROR) {
_this.raise({
eventName: _constants.EVENT_LISTENER_ERROR,
payload: {
eventName: eventName,
payload: payload,
error: error
}
});
} else {
console.error('Unhandled error in observer', error);
}
});
});
};
(0, _createClass2["default"])(DomainEventBus, [{
key: "getNumberOfRegisteredEvents",
get: function get() {
return this._events.size;
}
}]);
return DomainEventBus;
}();
exports.DomainEventBus = DomainEventBus;