UNPKG

@shockpkg/core

Version:
130 lines (105 loc) 2.53 kB
import _initializerDefineProperty from "@babel/runtime/helpers/initializerDefineProperty.js"; import _applyDecoratedDescriptor from "@babel/runtime/helpers/applyDecoratedDescriptor.js"; import _initializerWarningHelper from "@babel/runtime/helpers/initializerWarningHelper.js"; var _dec, _dec2, _class, _descriptor, _descriptor2, _temp; import { property } from "./decorators.mjs"; /** * Event dispatcher. * * @param context Context object. */ export let Dispatcher = (_dec = property(false), _dec2 = property(false), (_class = (_temp = class Dispatcher extends Object { /** * Event context. */ /** * Event handlers. */ constructor(context) { super(); _initializerDefineProperty(this, "_context", _descriptor, this); _initializerDefineProperty(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 handler Event data. * @return 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 handler Event data. * @return Handler count. */ async triggerAsync(event) { const self = this._context; let i = 0; for (const cb of this._handlers) { await cb.call(self, event); i++; } return i; } /** * Trigger or throw, sync. * * @param handler Event data. * @return Handler count. */ triggerOrThrowSync(event) { if (!this.triggerSync(event)) { throw event; } } /** * Trigger or throw, sync. * * @param handler Event data. * @return Handler count. */ async triggerOrThrowAsync(event) { if (!(await this.triggerAsync(event))) { throw event; } } }, _temp), (_descriptor = _applyDecoratedDescriptor(_class.prototype, "_context", [_dec], { configurable: true, enumerable: true, writable: true, initializer: null }), _descriptor2 = _applyDecoratedDescriptor(_class.prototype, "_handlers", [_dec2], { configurable: true, enumerable: true, writable: true, initializer: function () { return new Set(); } })), _class)); //# sourceMappingURL=dispatcher.mjs.map