UNPKG

@shockpkg/core

Version:
140 lines (113 loc) 2.97 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.Dispatcher = void 0; var _initializerDefineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerDefineProperty")); var _applyDecoratedDescriptor2 = _interopRequireDefault(require("@babel/runtime/helpers/applyDecoratedDescriptor")); var _initializerWarningHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/initializerWarningHelper")); var _decorators = require("./decorators"); var _dec, _dec2, _class, _descriptor, _descriptor2, _temp; /** * Event dispatcher. * * @param context Context object. */ let Dispatcher = (_dec = (0, _decorators.property)(false), _dec2 = (0, _decorators.property)(false), (_class = (_temp = class Dispatcher extends Object { /** * Event context. */ /** * Event handlers. */ constructor(context) { super(); (0, _initializerDefineProperty2.default)(this, "_context", _descriptor, this); (0, _initializerDefineProperty2.default)(this, "_handlers", _descriptor2, this); this._context = context; } /** * Add listener. * * @param handler Event handler. */ on(handler) { this._handlers.add(handler); } /** * Remove listener. * * @param handler Event handler. */ off(handler) { this._handlers.delete(handler); } /** * Trigger, sync. * * @param event Event data. * @returns Handler count. */ triggerSync(event) { const self = this._context; let i = 0; for (const cb of this._handlers) { cb.call(self, event); i++; } return i; } /** * Trigger, async. * * @param event Event data. * @returns Handler count. */ async triggerAsync(event) { const self = this._context; let i = 0; for (const cb of this._handlers) { // eslint-disable-next-line no-await-in-loop await cb.call(self, event); i++; } return i; } /** * Trigger or throw, sync. * * @param event Event data. */ triggerOrThrowSync(event) { // eslint-disable-next-line no-sync if (!this.triggerSync(event)) { throw event; } } /** * Trigger or throw, sync. * * @param event Event data. * @returns Handler count. */ async triggerOrThrowAsync(event) { if (!(await this.triggerAsync(event))) { throw event; } } }, _temp), (_descriptor = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "_context", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null }), _descriptor2 = (0, _applyDecoratedDescriptor2.default)(_class.prototype, "_handlers", [_dec2], { configurable: true, enumerable: true, writable: true, initializer: function () { return new Set(); } })), _class)); exports.Dispatcher = Dispatcher; //# sourceMappingURL=dispatcher.js.map