UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

51 lines (50 loc) 8.19 kB
import { Evt, to } from "evt"; //#region src/events/EventEmitterishMixin.ts function EventEmitterishMixin(Base, getEvt) { const instanceProperties = /* @__PURE__ */ new WeakMap(); return class extends Base { constructor(...args) { super(...args); Evt.setDefaultMaxHandlers(Number.MAX_SAFE_INTEGER); instanceProperties.set(this, { evt: getEvt({ constructorArgs: args, instance: this }), ctx: Evt.newCtx() }); } on(id, callback) { const { evt, ctx } = instanceProperties.get(this); evt.$attach(to(id), ctx, callback); return this; } once(id, callback) { const { evt, ctx } = instanceProperties.get(this); evt.$attachOnce(to(id), ctx, callback); return this; } removeListener(id, callback) { const { ctx } = instanceProperties.get(this); ctx.getHandlers().filter(({ handler }) => handler.op === 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 === 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 } = instanceProperties.get(this); return evt.postAndWait([id, event]); } }; } //#endregion export { EventEmitterishMixin }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRFbWl0dGVyaXNoTWl4aW4uZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V2ZW50cy9FdmVudEVtaXR0ZXJpc2hNaXhpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEN0eCwgRXZ0LCB0byB9IGZyb20gJ2V2dCc7XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFdmVudEVtaXR0ZXJpc2g8RXZlbnRUeXBlcyBleHRlbmRzIFtzdHJpbmcsIGFueV0+IHtcbiAgICBvbjxUIGV4dGVuZHMgRXZlbnRUeXBlcywgSyBleHRlbmRzIFRbMF0+KFxuICAgICAgICBpZDogSyxcbiAgICAgICAgY2FsbGJhY2s6IChldmVudDogVCBleHRlbmRzIHJlYWRvbmx5IFtLLCBpbmZlciBVXSA/IFUgOiBuZXZlcikgPT4gdm9pZFxuICAgICk6IHRoaXM7XG5cbiAgICBvbmNlOiBFdmVudEVtaXR0ZXJpc2g8RXZlbnRUeXBlcz5bJ29uJ107XG5cbiAgICByZW1vdmVMaXN0ZW5lcjogRXZlbnRFbWl0dGVyaXNoPEV2ZW50VHlwZXM+WydvbiddO1xuXG4gICAgcmVtb3ZlQWxsTGlzdGVuZXJzKGlkPzogRXZlbnRUeXBlc1swXSk6IHRoaXM7XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmUgYWZ0ZXJcbiAgICAgKiBlYWNoIGFzeW5jIGNhbGxiYWNrcyBoYXZlIHJlc29sdmVkLlxuICAgICAqL1xuICAgIGVtaXQ8VCBleHRlbmRzIEV2ZW50VHlwZXMsIEsgZXh0ZW5kcyBUWzBdPihcbiAgICAgICAgaWQ6IEssXG4gICAgICAgIGV2ZW50OiBUIGV4dGVuZHMgcmVhZG9ubHkgW0ssIGluZmVyIFVdID8gVSA6IG5ldmVyXG4gICAgKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEV2ZW50RW1pdHRlcmlzaE1peGluPEV2ZW50VHlwZXMgZXh0ZW5kcyBbc3RyaW5nLCBhbnldLCBUQmFzZSBleHRlbmRzIG5ldyAoLi4uYXJnczogYW55W10pID0+IHt9PihcbiAgICBCYXNlOiBUQmFzZSxcbiAgICBnZXRFdnQ6IChwYXJhbWV0ZXJzOiB7XG4gICAgICAgIGNvbnN0cnVjdG9yQXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPFRCYXNlPjtcbiAgICAgICAgaW5zdGFuY2U6IEluc3RhbmNlVHlwZTxUQmFzZT47XG4gICAgfSkgPT4gRXZ0PEV2ZW50VHlwZXM+XG4pIHtcbiAgICAvLyBOT1RFOiBXZSBjYW4ndCB1c2UgcHJpdmF0ZSBwcm9wZXJ0aWVzIGluIGEgbWl4aW4gaGVuY2UgdGhlIHVzZSBvZiBhIHdlYWsgbWFwLlxuICAgIGNvbnN0IGluc3RhbmNlUHJvcGVydGllcyA9IG5ldyBXZWFrTWFwPFxuICAgICAgICB7fSxcbiAgICAgICAge1xuICAgICAgICAgICAgZXZ0OiBFdnQ8RXZlbnRUeXBlcz47XG4gICAgICAgICAgICBjdHg6IEN0eDtcbiAgICAgICAgfVxuICAgID4oKTtcblxuICAgIHJldHVybiBjbGFzcyBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBFdmVudEVtaXR0ZXJpc2g8RXZlbnRUeXBlcz4ge1xuICAgICAgICBwdWJsaWMgY29uc3RydWN0b3IoLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgICAgIHN1cGVyKC4uLmFyZ3MpO1xuXG4gICAgICAgICAgICAvLyBIYWNrP1xuICAgICAgICAgICAgRXZ0LnNldERlZmF1bHRNYXhIYW5kbGVycyhOdW1iZXIuTUFYX1NBRkVfSU5URUdFUik7XG5cbiAgICAgICAgICAgIGluc3RhbmNlUHJvcGVydGllcy5zZXQodGhpcywge1xuICAgICAgICAgICAgICAgIGV2dDogZ2V0RXZ0KHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3JBcmdzOiBhcmdzIGFzIENvbnN0cnVjdG9yUGFyYW1ldGVyczxUQmFzZT4sXG4gICAgICAgICAgICAgICAgICAgIGluc3RhbmNlOiB0aGlzIGFzIEluc3RhbmNlVHlwZTxUQmFzZT5cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBjdHg6IEV2dC5uZXdDdHgoKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgb248VCBleHRlbmRzIEV2ZW50VHlwZXMsIEsgZXh0ZW5kcyBUWzBdPihcbiAgICAgICAgICAgIGlkOiBLLFxuICAgICAgICAgICAgY2FsbGJhY2s6IChldmVudDogVCBleHRlbmRzIHJlYWRvbmx5IFtLLCBpbmZlciBVXSA/IFUgOiBuZXZlcikgPT4gdm9pZFxuICAgICAgICApOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgeyBldnQsIGN0eCB9ID0gaW5zdGFuY2VQcm9wZXJ0aWVzLmdldCh0aGlzKSE7XG5cbiAgICAgICAgICAgIGV2dC4kYXR0YWNoKHRvKGlkKSwgY3R4LCBjYWxsYmFjayk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIG9uY2U8VCBleHRlbmRzIEV2ZW50VHlwZXMsIEsgZXh0ZW5kcyBUWzBdPihcbiAgICAgICAgICAgIGlkOiBLLFxuICAgICAgICAgICAgY2FsbGJhY2s6IChldmVudDogVCBleHRlbmRzIHJlYWRvbmx5IFtLLCBpbmZlciBVXSA/IFUgOiBuZXZlcikgPT4gdm9pZFxuICAgICAgICApOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgeyBldnQsIGN0eCB9ID0gaW5zdGFuY2VQcm9wZXJ0aWVzLmdldCh0aGlzKSE7XG5cbiAgICAgICAgICAgIGV2dC4kYXR0YWNoT25jZSh0byhpZCksIGN0eCwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyByZW1vdmVMaXN0ZW5lcjxUIGV4dGVuZHMgRXZlbnRUeXBlcywgSyBleHRlbmRzIFRbMF0+KFxuICAgICAgICAgICAgaWQ6IEssXG4gICAgICAgICAgICBjYWxsYmFjazogKGV2ZW50OiBUIGV4dGVuZHMgcmVhZG9ubHkgW0ssIGluZmVyIFVdID8gVSA6IG5ldmVyKSA9PiB2b2lkXG4gICAgICAgICk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCB9ID0gaW5zdGFuY2VQcm9wZXJ0aWVzLmdldCh0aGlzKSE7XG5cbiAgICAgICAgICAgIGN0eC5nZXRIYW5kbGVycygpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeyBoYW5kbGVyIH0pID0+IGhhbmRsZXIub3AgPT09IHRvKGlkKSAmJiBoYW5kbGVyLmNhbGxiYWNrID09PSBjYWxsYmFjaylcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoeyBoYW5kbGVyIH0pID0+IGhhbmRsZXIuZGV0YWNoKCkpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyByZW1vdmVBbGxMaXN0ZW5lcnMoaWQ/OiBFdmVudFR5cGVzWzBdKTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY3R4IH0gPSBpbnN0YW5jZVByb3BlcnRpZXMuZ2V0KHRoaXMpITtcblxuICAgICAgICAgICAgaWYgKGlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBjdHguZG9uZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjdHguZ2V0SGFuZGxlcnMoKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKCh7IGhhbmRsZXIgfSkgPT4gaGFuZGxlci5vcCA9PT0gdG8oaWQpKVxuICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaCgoeyBoYW5kbGVyIH0pID0+IGhhbmRsZXIuZGV0YWNoKCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmUgYWZ0ZXJcbiAgICAgICAgICogZWFjaCBhc3luYyBjYWxsYmFja3MgaGF2ZSByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIHB1YmxpYyBhc3luYyBlbWl0PFQgZXh0ZW5kcyBFdmVudFR5cGVzLCBLIGV4dGVuZHMgVFswXT4oXG4gICAgICAgICAgICBpZDogSyxcbiAgICAgICAgICAgIGV2ZW50OiBUIGV4dGVuZHMgcmVhZG9ubHkgW0ssIGluZmVyIFVdID8gVSA6IG5ldmVyXG4gICAgICAgICk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICAgICAgY29uc3QgeyBldnQgfSA9IGluc3RhbmNlUHJvcGVydGllcy5nZXQodGhpcykhO1xuXG4gICAgICAgICAgICByZXR1cm4gZXZ0LnBvc3RBbmRXYWl0KFtpZCwgZXZlbnRdIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOztBQTJCQSxTQUFnQixxQkFDWixNQUNBLFFBSUY7Q0FFRSxNQUFNLHFDQUFxQixJQUFJLFFBTTdCO0NBRUYsT0FBTyxjQUFjLEtBQTRDO0VBQzdELFlBQW1CLEdBQUcsTUFBYTtHQUMvQixNQUFNLEdBQUcsSUFBSTtHQUdiLElBQUksc0JBQXNCLE9BQU8sZ0JBQWdCO0dBRWpELG1CQUFtQixJQUFJLE1BQU07SUFDekIsS0FBSyxPQUFPO0tBQ1IsaUJBQWlCO0tBQ2pCLFVBQVU7SUFDZCxDQUFDO0lBQ0QsS0FBSyxJQUFJLE9BQU87R0FDcEIsQ0FBQztFQUNMO0VBRUEsR0FDSSxJQUNBLFVBQ0c7R0FDSCxNQUFNLEVBQUUsS0FBSyxRQUFRLG1CQUFtQixJQUFJLElBQUk7R0FFaEQsSUFBSSxRQUFRLEdBQUcsRUFBRSxHQUFHLEtBQUssUUFBUTtHQUVqQyxPQUFPO0VBQ1g7RUFFQSxLQUNJLElBQ0EsVUFDRztHQUNILE1BQU0sRUFBRSxLQUFLLFFBQVEsbUJBQW1CLElBQUksSUFBSTtHQUVoRCxJQUFJLFlBQVksR0FBRyxFQUFFLEdBQUcsS0FBSyxRQUFRO0dBRXJDLE9BQU87RUFDWDtFQUVBLGVBQ0ksSUFDQSxVQUNHO0dBQ0gsTUFBTSxFQUFFLFFBQVEsbUJBQW1CLElBQUksSUFBSTtHQUUzQyxJQUFJLFlBQVksRUFDWCxRQUFRLEVBQUUsY0FBYyxRQUFRLE9BQU8sR0FBRyxFQUFFLEtBQUssUUFBUSxhQUFhLFFBQVEsRUFDOUUsU0FBUyxFQUFFLGNBQWMsUUFBUSxPQUFPLENBQUM7R0FFOUMsT0FBTztFQUNYO0VBRUEsbUJBQTBCLElBQXlCO0dBQy9DLE1BQU0sRUFBRSxRQUFRLG1CQUFtQixJQUFJLElBQUk7R0FFM0MsSUFBSSxPQUFPLEtBQUEsR0FDUCxJQUFJLEtBQUs7UUFFVCxJQUFJLFlBQVksRUFDWCxRQUFRLEVBQUUsY0FBYyxRQUFRLE9BQU8sR0FBRyxFQUFFLENBQUMsRUFDN0MsU0FBUyxFQUFFLGNBQWMsUUFBUSxPQUFPLENBQUM7R0FHbEQsT0FBTztFQUNYOzs7OztFQU1BLE1BQWEsS0FDVCxJQUNBLE9BQ2E7R0FDYixNQUFNLEVBQUUsUUFBUSxtQkFBbUIsSUFBSSxJQUFJO0dBRTNDLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxLQUFLLENBQVE7RUFDN0M7Q0FDSjtBQUNKIn0=