UNPKG

@adv-ui/boros-tcf

Version:

Adevinta GDPR - Transparency and Consent Framework - API

137 lines (106 loc) 3.57 kB
"use strict"; 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;