@shockpkg/core
Version:
shockpkg core
130 lines (105 loc) • 2.53 kB
JavaScript
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