@jsprismarine/prismarine
Version:
Dedicated Minecraft Bedrock Edition server written in TypeScript
54 lines (53 loc) • 8.5 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../_virtual/_rolldown/runtime.cjs.cjs");
let evt = require("evt");
//#region src/events/EventEmitterishMixin.ts
function EventEmitterishMixin(Base, getEvt) {
const instanceProperties = /* @__PURE__ */ new WeakMap();
return class extends Base {
constructor(...args) {
super(...args);
evt.Evt.setDefaultMaxHandlers(Number.MAX_SAFE_INTEGER);
instanceProperties.set(this, {
evt: getEvt({
constructorArgs: args,
instance: this
}),
ctx: evt.Evt.newCtx()
});
}
on(id, callback) {
const { evt: evt$1, ctx } = instanceProperties.get(this);
evt$1.$attach((0, evt.to)(id), ctx, callback);
return this;
}
once(id, callback) {
const { evt: evt$2, ctx } = instanceProperties.get(this);
evt$2.$attachOnce((0, evt.to)(id), ctx, callback);
return this;
}
removeListener(id, callback) {
const { ctx } = instanceProperties.get(this);
ctx.getHandlers().filter(({ handler }) => handler.op === (0, evt.to)(id) && handler.callback === callback).forEach(({ handler }) => handler.detach());
return this;
}
removeAllListeners(id) {
const { ctx } = instanceProperties.get(this);
if (id === void 0) ctx.done();
else ctx.getHandlers().filter(({ handler }) => handler.op === (0, evt.to)(id)).forEach(({ handler }) => handler.detach());
return this;
}
/**
* Returns a promise that resolve after
* each async callbacks have resolved.
*/
async emit(id, event) {
const { evt: evt$3 } = instanceProperties.get(this);
return evt$3.postAndWait([id, event]);
}
};
}
//#endregion
exports.EventEmitterishMixin = EventEmitterishMixin;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRFbWl0dGVyaXNoTWl4aW4uY2pzLmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZXZlbnRzL0V2ZW50RW1pdHRlcmlzaE1peGluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgQ3R4LCBFdnQsIHRvIH0gZnJvbSAnZXZ0JztcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEV2ZW50RW1pdHRlcmlzaDxFdmVudFR5cGVzIGV4dGVuZHMgW3N0cmluZywgYW55XT4ge1xuICAgIG9uPFQgZXh0ZW5kcyBFdmVudFR5cGVzLCBLIGV4dGVuZHMgVFswXT4oXG4gICAgICAgIGlkOiBLLFxuICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBUIGV4dGVuZHMgcmVhZG9ubHkgW0ssIGluZmVyIFVdID8gVSA6IG5ldmVyKSA9PiB2b2lkXG4gICAgKTogdGhpcztcblxuICAgIG9uY2U6IEV2ZW50RW1pdHRlcmlzaDxFdmVudFR5cGVzPlsnb24nXTtcblxuICAgIHJlbW92ZUxpc3RlbmVyOiBFdmVudEVtaXR0ZXJpc2g8RXZlbnRUeXBlcz5bJ29uJ107XG5cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoaWQ/OiBFdmVudFR5cGVzWzBdKTogdGhpcztcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZSBhZnRlclxuICAgICAqIGVhY2ggYXN5bmMgY2FsbGJhY2tzIGhhdmUgcmVzb2x2ZWQuXG4gICAgICovXG4gICAgZW1pdDxUIGV4dGVuZHMgRXZlbnRUeXBlcywgSyBleHRlbmRzIFRbMF0+KFxuICAgICAgICBpZDogSyxcbiAgICAgICAgZXZlbnQ6IFQgZXh0ZW5kcyByZWFkb25seSBbSywgaW5mZXIgVV0gPyBVIDogbmV2ZXJcbiAgICApOiBQcm9taXNlPHZvaWQ+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRXZlbnRFbWl0dGVyaXNoTWl4aW48RXZlbnRUeXBlcyBleHRlbmRzIFtzdHJpbmcsIGFueV0sIFRCYXNlIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4ge30+KFxuICAgIEJhc2U6IFRCYXNlLFxuICAgIGdldEV2dDogKHBhcmFtZXRlcnM6IHtcbiAgICAgICAgY29uc3RydWN0b3JBcmdzOiBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VEJhc2U+O1xuICAgICAgICBpbnN0YW5jZTogSW5zdGFuY2VUeXBlPFRCYXNlPjtcbiAgICB9KSA9PiBFdnQ8RXZlbnRUeXBlcz5cbikge1xuICAgIC8vIE5PVEU6IFdlIGNhbid0IHVzZSBwcml2YXRlIHByb3BlcnRpZXMgaW4gYSBtaXhpbiBoZW5jZSB0aGUgdXNlIG9mIGEgd2VhayBtYXAuXG4gICAgY29uc3QgaW5zdGFuY2VQcm9wZXJ0aWVzID0gbmV3IFdlYWtNYXA8XG4gICAgICAgIHt9LFxuICAgICAgICB7XG4gICAgICAgICAgICBldnQ6IEV2dDxFdmVudFR5cGVzPjtcbiAgICAgICAgICAgIGN0eDogQ3R4O1xuICAgICAgICB9XG4gICAgPigpO1xuXG4gICAgcmV0dXJuIGNsYXNzIGV4dGVuZHMgQmFzZSBpbXBsZW1lbnRzIEV2ZW50RW1pdHRlcmlzaDxFdmVudFR5cGVzPiB7XG4gICAgICAgIHB1YmxpYyBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICAgICAgc3VwZXIoLi4uYXJncyk7XG5cbiAgICAgICAgICAgIC8vIEhhY2s/XG4gICAgICAgICAgICBFdnQuc2V0RGVmYXVsdE1heEhhbmRsZXJzKE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTtcblxuICAgICAgICAgICAgaW5zdGFuY2VQcm9wZXJ0aWVzLnNldCh0aGlzLCB7XG4gICAgICAgICAgICAgICAgZXZ0OiBnZXRFdnQoe1xuICAgICAgICAgICAgICAgICAgICBjb25zdHJ1Y3RvckFyZ3M6IGFyZ3MgYXMgQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFRCYXNlPixcbiAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2U6IHRoaXMgYXMgSW5zdGFuY2VUeXBlPFRCYXNlPlxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGN0eDogRXZ0Lm5ld0N0eCgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBvbjxUIGV4dGVuZHMgRXZlbnRUeXBlcywgSyBleHRlbmRzIFRbMF0+KFxuICAgICAgICAgICAgaWQ6IEssXG4gICAgICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBUIGV4dGVuZHMgcmVhZG9ubHkgW0ssIGluZmVyIFVdID8gVSA6IG5ldmVyKSA9PiB2b2lkXG4gICAgICAgICk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCB7IGV2dCwgY3R4IH0gPSBpbnN0YW5jZVByb3BlcnRpZXMuZ2V0KHRoaXMpITtcblxuICAgICAgICAgICAgZXZ0LiRhdHRhY2godG8oaWQpLCBjdHgsIGNhbGxiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgb25jZTxUIGV4dGVuZHMgRXZlbnRUeXBlcywgSyBleHRlbmRzIFRbMF0+KFxuICAgICAgICAgICAgaWQ6IEssXG4gICAgICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBUIGV4dGVuZHMgcmVhZG9ubHkgW0ssIGluZmVyIFVdID8gVSA6IG5ldmVyKSA9PiB2b2lkXG4gICAgICAgICk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCB7IGV2dCwgY3R4IH0gPSBpbnN0YW5jZVByb3BlcnRpZXMuZ2V0KHRoaXMpITtcblxuICAgICAgICAgICAgZXZ0LiRhdHRhY2hPbmNlKHRvKGlkKSwgY3R4LCBjYWxsYmFjayk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHJlbW92ZUxpc3RlbmVyPFQgZXh0ZW5kcyBFdmVudFR5cGVzLCBLIGV4dGVuZHMgVFswXT4oXG4gICAgICAgICAgICBpZDogSyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IFQgZXh0ZW5kcyByZWFkb25seSBbSywgaW5mZXIgVV0gPyBVIDogbmV2ZXIpID0+IHZvaWRcbiAgICAgICAgKTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4IH0gPSBpbnN0YW5jZVByb3BlcnRpZXMuZ2V0KHRoaXMpITtcblxuICAgICAgICAgICAgY3R4LmdldEhhbmRsZXJzKClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IGhhbmRsZXIgfSkgPT4gaGFuZGxlci5vcCA9PT0gdG8oaWQpICYmIGhhbmRsZXIuY2FsbGJhY2sgPT09IGNhbGxiYWNrKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh7IGhhbmRsZXIgfSkgPT4gaGFuZGxlci5kZXRhY2goKSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHJlbW92ZUFsbExpc3RlbmVycyhpZD86IEV2ZW50VHlwZXNbMF0pOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgeyBjdHggfSA9IGluc3RhbmNlUHJvcGVydGllcy5nZXQodGhpcykhO1xuXG4gICAgICAgICAgICBpZiAoaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGN0eC5kb25lKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN0eC5nZXRIYW5kbGVycygpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgaGFuZGxlciB9KSA9PiBoYW5kbGVyLm9wID09PSB0byhpZCkpXG4gICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKCh7IGhhbmRsZXIgfSkgPT4gaGFuZGxlci5kZXRhY2goKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZSBhZnRlclxuICAgICAgICAgKiBlYWNoIGFzeW5jIGNhbGxiYWNrcyBoYXZlIHJlc29sdmVkLlxuICAgICAgICAgKi9cbiAgICAgICAgcHVibGljIGFzeW5jIGVtaXQ8VCBleHRlbmRzIEV2ZW50VHlwZXMsIEsgZXh0ZW5kcyBUWzBdPihcbiAgICAgICAgICAgIGlkOiBLLFxuICAgICAgICAgICAgZXZlbnQ6IFQgZXh0ZW5kcyByZWFkb25seSBbSywgaW5mZXIgVV0gPyBVIDogbmV2ZXJcbiAgICAgICAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgICAgICBjb25zdCB7IGV2dCB9ID0gaW5zdGFuY2VQcm9wZXJ0aWVzLmdldCh0aGlzKSE7XG5cbiAgICAgICAgICAgIHJldHVybiBldnQucG9zdEFuZFdhaXQoW2lkLCBldmVudF0gYXMgYW55KTtcbiAgICAgICAgfVxuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O0FBMkJBLFNBQWdCLHFCQUNaLE1BQ0EsUUFJRjtDQUVFLE1BQU0scUNBQXFCLElBQUksUUFNN0I7Q0FFRixPQUFPLGNBQWMsS0FBNEM7RUFDN0QsWUFBbUIsR0FBRyxNQUFhO0dBQy9CLE1BQU0sR0FBRyxJQUFJO0dBR2IsSUFBQSxJQUFJLHNCQUFzQixPQUFPLGdCQUFnQjtHQUVqRCxtQkFBbUIsSUFBSSxNQUFNO0lBQ3pCLEtBQUssT0FBTztLQUNSLGlCQUFpQjtLQUNqQixVQUFVO0lBQ2QsQ0FBQztJQUNELEtBQUssSUFBQSxJQUFJLE9BQU87R0FDcEIsQ0FBQztFQUNMO0VBRUEsR0FDSSxJQUNBLFVBQ0c7R0FDSCxNQUFNLEVBQUUsS0FBQSxPQUFLLFFBQVEsbUJBQW1CLElBQUksSUFBSTtHQUVoRCxNQUFJLFNBQUEsR0FBQSxJQUFBLElBQVcsRUFBRSxHQUFHLEtBQUssUUFBUTtHQUVqQyxPQUFPO0VBQ1g7RUFFQSxLQUNJLElBQ0EsVUFDRztHQUNILE1BQU0sRUFBRSxLQUFBLE9BQUssUUFBUSxtQkFBbUIsSUFBSSxJQUFJO0dBRWhELE1BQUksYUFBQSxHQUFBLElBQUEsSUFBZSxFQUFFLEdBQUcsS0FBSyxRQUFRO0dBRXJDLE9BQU87RUFDWDtFQUVBLGVBQ0ksSUFDQSxVQUNHO0dBQ0gsTUFBTSxFQUFFLFFBQVEsbUJBQW1CLElBQUksSUFBSTtHQUUzQyxJQUFJLFlBQVksRUFDWCxRQUFRLEVBQUUsY0FBYyxRQUFRLFFBQUEsR0FBQSxJQUFBLElBQVUsRUFBRSxLQUFLLFFBQVEsYUFBYSxRQUFRLEVBQzlFLFNBQVMsRUFBRSxjQUFjLFFBQVEsT0FBTyxDQUFDO0dBRTlDLE9BQU87RUFDWDtFQUVBLG1CQUEwQixJQUF5QjtHQUMvQyxNQUFNLEVBQUUsUUFBUSxtQkFBbUIsSUFBSSxJQUFJO0dBRTNDLElBQUksT0FBTyxLQUFBLEdBQ1AsSUFBSSxLQUFLO1FBRVQsSUFBSSxZQUFZLEVBQ1gsUUFBUSxFQUFFLGNBQWMsUUFBUSxRQUFBLEdBQUEsSUFBQSxJQUFVLEVBQUUsQ0FBQyxFQUM3QyxTQUFTLEVBQUUsY0FBYyxRQUFRLE9BQU8sQ0FBQztHQUdsRCxPQUFPO0VBQ1g7Ozs7O0VBTUEsTUFBYSxLQUNULElBQ0EsT0FDYTtHQUNiLE1BQU0sRUFBRSxLQUFBLFVBQVEsbUJBQW1CLElBQUksSUFBSTtHQUUzQyxPQUFPLE1BQUksWUFBWSxDQUFDLElBQUksS0FBSyxDQUFRO0VBQzdDO0NBQ0o7QUFDSiJ9