@shockpkg/core
Version:
shockpkg core
140 lines (113 loc) • 2.97 kB
JavaScript
;
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