UNPKG

@jsprismarine/prismarine

Version:

Dedicated Minecraft Bedrock Edition server written in TypeScript

54 lines (51 loc) 9.21 kB
import { Evt, to } from 'evt'; 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]); } }; } export { EventEmitterishMixin }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXZlbnRFbWl0dGVyaXNoTWl4aW4uZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ldmVudHMvRXZlbnRFbWl0dGVyaXNoTWl4aW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBDdHgsIEV2dCwgdG8gfSBmcm9tICdldnQnO1xuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRXZlbnRFbWl0dGVyaXNoPEV2ZW50VHlwZXMgZXh0ZW5kcyBbc3RyaW5nLCBhbnldPiB7XG4gICAgb248VCBleHRlbmRzIEV2ZW50VHlwZXMsIEsgZXh0ZW5kcyBUWzBdPihcbiAgICAgICAgaWQ6IEssXG4gICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IFQgZXh0ZW5kcyByZWFkb25seSBbSywgaW5mZXIgVV0gPyBVIDogbmV2ZXIpID0+IHZvaWRcbiAgICApOiB0aGlzO1xuXG4gICAgb25jZTogRXZlbnRFbWl0dGVyaXNoPEV2ZW50VHlwZXM+WydvbiddO1xuXG4gICAgcmVtb3ZlTGlzdGVuZXI6IEV2ZW50RW1pdHRlcmlzaDxFdmVudFR5cGVzPlsnb24nXTtcblxuICAgIHJlbW92ZUFsbExpc3RlbmVycyhpZD86IEV2ZW50VHlwZXNbMF0pOiB0aGlzO1xuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlIGFmdGVyXG4gICAgICogZWFjaCBhc3luYyBjYWxsYmFja3MgaGF2ZSByZXNvbHZlZC5cbiAgICAgKi9cbiAgICBlbWl0PFQgZXh0ZW5kcyBFdmVudFR5cGVzLCBLIGV4dGVuZHMgVFswXT4oXG4gICAgICAgIGlkOiBLLFxuICAgICAgICBldmVudDogVCBleHRlbmRzIHJlYWRvbmx5IFtLLCBpbmZlciBVXSA/IFUgOiBuZXZlclxuICAgICk6IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFdmVudEVtaXR0ZXJpc2hNaXhpbjxFdmVudFR5cGVzIGV4dGVuZHMgW3N0cmluZywgYW55XSwgVEJhc2UgZXh0ZW5kcyBuZXcgKC4uLmFyZ3M6IGFueVtdKSA9PiB7fT4oXG4gICAgQmFzZTogVEJhc2UsXG4gICAgZ2V0RXZ0OiAocGFyYW1ldGVyczoge1xuICAgICAgICBjb25zdHJ1Y3RvckFyZ3M6IENvbnN0cnVjdG9yUGFyYW1ldGVyczxUQmFzZT47XG4gICAgICAgIGluc3RhbmNlOiBJbnN0YW5jZVR5cGU8VEJhc2U+O1xuICAgIH0pID0+IEV2dDxFdmVudFR5cGVzPlxuKSB7XG4gICAgLy8gTk9URTogV2UgY2FuJ3QgdXNlIHByaXZhdGUgcHJvcGVydGllcyBpbiBhIG1peGluIGhlbmNlIHRoZSB1c2Ugb2YgYSB3ZWFrIG1hcC5cbiAgICBjb25zdCBpbnN0YW5jZVByb3BlcnRpZXMgPSBuZXcgV2Vha01hcDxcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGV2dDogRXZ0PEV2ZW50VHlwZXM+O1xuICAgICAgICAgICAgY3R4OiBDdHg7XG4gICAgICAgIH1cbiAgICA+KCk7XG5cbiAgICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBCYXNlIGltcGxlbWVudHMgRXZlbnRFbWl0dGVyaXNoPEV2ZW50VHlwZXM+IHtcbiAgICAgICAgcHVibGljIGNvbnN0cnVjdG9yKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgICAgICAgICBzdXBlciguLi5hcmdzKTtcblxuICAgICAgICAgICAgLy8gSGFjaz9cbiAgICAgICAgICAgIEV2dC5zZXREZWZhdWx0TWF4SGFuZGxlcnMoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpO1xuXG4gICAgICAgICAgICBpbnN0YW5jZVByb3BlcnRpZXMuc2V0KHRoaXMsIHtcbiAgICAgICAgICAgICAgICBldnQ6IGdldEV2dCh7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0cnVjdG9yQXJnczogYXJncyBhcyBDb25zdHJ1Y3RvclBhcmFtZXRlcnM8VEJhc2U+LFxuICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZTogdGhpcyBhcyBJbnN0YW5jZVR5cGU8VEJhc2U+XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgY3R4OiBFdnQubmV3Q3R4KClcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIG9uPFQgZXh0ZW5kcyBFdmVudFR5cGVzLCBLIGV4dGVuZHMgVFswXT4oXG4gICAgICAgICAgICBpZDogSyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IFQgZXh0ZW5kcyByZWFkb25seSBbSywgaW5mZXIgVV0gPyBVIDogbmV2ZXIpID0+IHZvaWRcbiAgICAgICAgKTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXZ0LCBjdHggfSA9IGluc3RhbmNlUHJvcGVydGllcy5nZXQodGhpcykhO1xuXG4gICAgICAgICAgICBldnQuJGF0dGFjaCh0byhpZCksIGN0eCwgY2FsbGJhY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBvbmNlPFQgZXh0ZW5kcyBFdmVudFR5cGVzLCBLIGV4dGVuZHMgVFswXT4oXG4gICAgICAgICAgICBpZDogSyxcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoZXZlbnQ6IFQgZXh0ZW5kcyByZWFkb25seSBbSywgaW5mZXIgVV0gPyBVIDogbmV2ZXIpID0+IHZvaWRcbiAgICAgICAgKTogYW55IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXZ0LCBjdHggfSA9IGluc3RhbmNlUHJvcGVydGllcy5nZXQodGhpcykhO1xuXG4gICAgICAgICAgICBldnQuJGF0dGFjaE9uY2UodG8oaWQpLCBjdHgsIGNhbGxiYWNrKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgcmVtb3ZlTGlzdGVuZXI8VCBleHRlbmRzIEV2ZW50VHlwZXMsIEsgZXh0ZW5kcyBUWzBdPihcbiAgICAgICAgICAgIGlkOiBLLFxuICAgICAgICAgICAgY2FsbGJhY2s6IChldmVudDogVCBleHRlbmRzIHJlYWRvbmx5IFtLLCBpbmZlciBVXSA/IFUgOiBuZXZlcikgPT4gdm9pZFxuICAgICAgICApOiBhbnkge1xuICAgICAgICAgICAgY29uc3QgeyBjdHggfSA9IGluc3RhbmNlUHJvcGVydGllcy5nZXQodGhpcykhO1xuXG4gICAgICAgICAgICBjdHguZ2V0SGFuZGxlcnMoKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHsgaGFuZGxlciB9KSA9PiBoYW5kbGVyLm9wID09PSB0byhpZCkgJiYgaGFuZGxlci5jYWxsYmFjayA9PT0gY2FsbGJhY2spXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKHsgaGFuZGxlciB9KSA9PiBoYW5kbGVyLmRldGFjaCgpKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBwdWJsaWMgcmVtb3ZlQWxsTGlzdGVuZXJzKGlkPzogRXZlbnRUeXBlc1swXSk6IGFueSB7XG4gICAgICAgICAgICBjb25zdCB7IGN0eCB9ID0gaW5zdGFuY2VQcm9wZXJ0aWVzLmdldCh0aGlzKSE7XG5cbiAgICAgICAgICAgIGlmIChpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY3R4LmRvbmUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY3R4LmdldEhhbmRsZXJzKClcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoeyBoYW5kbGVyIH0pID0+IGhhbmRsZXIub3AgPT09IHRvKGlkKSlcbiAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKHsgaGFuZGxlciB9KSA9PiBoYW5kbGVyLmRldGFjaCgpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogUmV0dXJucyBhIHByb21pc2UgdGhhdCByZXNvbHZlIGFmdGVyXG4gICAgICAgICAqIGVhY2ggYXN5bmMgY2FsbGJhY2tzIGhhdmUgcmVzb2x2ZWQuXG4gICAgICAgICAqL1xuICAgICAgICBwdWJsaWMgYXN5bmMgZW1pdDxUIGV4dGVuZHMgRXZlbnRUeXBlcywgSyBleHRlbmRzIFRbMF0+KFxuICAgICAgICAgICAgaWQ6IEssXG4gICAgICAgICAgICBldmVudDogVCBleHRlbmRzIHJlYWRvbmx5IFtLLCBpbmZlciBVXSA/IFUgOiBuZXZlclxuICAgICAgICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXZ0IH0gPSBpbnN0YW5jZVByb3BlcnRpZXMuZ2V0KHRoaXMpITtcblxuICAgICAgICAgICAgcmV0dXJuIGV2dC5wb3N0QW5kV2FpdChbaWQsIGV2ZW50XSBhcyBhbnkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTJCZ0IsU0FBQSxvQkFBQSxDQUNaLE1BQ0EsTUFJRixFQUFBO0FBRUUsRUFBTSxNQUFBLGtCQUFBLHVCQUF5QixPQU03QixFQUFBO0FBRUYsRUFBQSxPQUFPLGNBQWMsSUFBNEMsQ0FBQTtBQUFBLElBQ3RELGVBQWUsSUFBYSxFQUFBO0FBQy9CLE1BQUEsS0FBQSxDQUFNLEdBQUcsSUFBSSxDQUFBO0FBR2IsTUFBSSxHQUFBLENBQUEscUJBQUEsQ0FBc0IsT0FBTyxnQkFBZ0IsQ0FBQTtBQUVqRCxNQUFBLGtCQUFBLENBQW1CLElBQUksSUFBTSxFQUFBO0FBQUEsUUFDekIsS0FBSyxNQUFPLENBQUE7QUFBQSxVQUNSLGVBQWlCLEVBQUEsSUFBQTtBQUFBLFVBQ2pCLFFBQVUsRUFBQTtBQUFBLFNBQ2IsQ0FBQTtBQUFBLFFBQ0QsR0FBQSxFQUFLLElBQUksTUFBTztBQUFBLE9BQ25CLENBQUE7QUFBQTtBQUNMLElBRU8sRUFBQSxDQUNILElBQ0EsUUFDRyxFQUFBO0FBQ0gsTUFBQSxNQUFNLEVBQUUsR0FBSyxFQUFBLEdBQUEsRUFBUSxHQUFBLGtCQUFBLENBQW1CLElBQUksSUFBSSxDQUFBO0FBRWhELE1BQUEsR0FBQSxDQUFJLE9BQVEsQ0FBQSxFQUFBLENBQUcsRUFBRSxDQUFBLEVBQUcsS0FBSyxRQUFRLENBQUE7QUFFakMsTUFBTyxPQUFBLElBQUE7QUFBQTtBQUNYLElBRU8sSUFBQSxDQUNILElBQ0EsUUFDRyxFQUFBO0FBQ0gsTUFBQSxNQUFNLEVBQUUsR0FBSyxFQUFBLEdBQUEsRUFBUSxHQUFBLGtCQUFBLENBQW1CLElBQUksSUFBSSxDQUFBO0FBRWhELE1BQUEsR0FBQSxDQUFJLFdBQVksQ0FBQSxFQUFBLENBQUcsRUFBRSxDQUFBLEVBQUcsS0FBSyxRQUFRLENBQUE7QUFFckMsTUFBTyxPQUFBLElBQUE7QUFBQTtBQUNYLElBRU8sY0FBQSxDQUNILElBQ0EsUUFDRyxFQUFBO0FBQ0gsTUFBQSxNQUFNLEVBQUUsR0FBQSxFQUFRLEdBQUEsa0JBQUEsQ0FBbUIsSUFBSSxJQUFJLENBQUE7QUFFM0MsTUFBSSxHQUFBLENBQUEsV0FBQSxHQUNDLE1BQU8sQ0FBQSxDQUFDLEVBQUUsT0FBUSxFQUFBLEtBQU0sT0FBUSxDQUFBLEVBQUEsS0FBTyxFQUFHLENBQUEsRUFBRSxLQUFLLE9BQVEsQ0FBQSxRQUFBLEtBQWEsUUFBUSxDQUFBLENBQzlFLE9BQVEsQ0FBQSxDQUFDLEVBQUUsT0FBUSxFQUFBLEtBQU0sT0FBUSxDQUFBLE1BQUEsRUFBUSxDQUFBO0FBRTlDLE1BQU8sT0FBQSxJQUFBO0FBQUE7QUFDWCxJQUVPLG1CQUFtQixFQUF5QixFQUFBO0FBQy9DLE1BQUEsTUFBTSxFQUFFLEdBQUEsRUFBUSxHQUFBLGtCQUFBLENBQW1CLElBQUksSUFBSSxDQUFBO0FBRTNDLE1BQUEsSUFBSSxPQUFPLEtBQVcsQ0FBQSxFQUFBO0FBQ2xCLFFBQUEsR0FBQSxDQUFJLElBQUssRUFBQTtBQUFBLE9BQ04sTUFBQTtBQUNILFFBQUksR0FBQSxDQUFBLFdBQUEsR0FDQyxNQUFPLENBQUEsQ0FBQyxFQUFFLE9BQVEsRUFBQSxLQUFNLFFBQVEsRUFBTyxLQUFBLEVBQUEsQ0FBRyxFQUFFLENBQUMsQ0FBQSxDQUM3QyxRQUFRLENBQUMsRUFBRSxTQUFjLEtBQUEsT0FBQSxDQUFRLFFBQVEsQ0FBQTtBQUFBO0FBR2xELE1BQU8sT0FBQSxJQUFBO0FBQUE7QUFDWDtBQUFBO0FBQUE7QUFBQTtBQUFBLElBTUEsTUFBYSxJQUNULENBQUEsRUFBQSxFQUNBLEtBQ2EsRUFBQTtBQUNiLE1BQUEsTUFBTSxFQUFFLEdBQUEsRUFBUSxHQUFBLGtCQUFBLENBQW1CLElBQUksSUFBSSxDQUFBO0FBRTNDLE1BQUEsT0FBTyxHQUFJLENBQUEsV0FBQSxDQUFZLENBQUMsRUFBQSxFQUFJLEtBQUssQ0FBUSxDQUFBO0FBQUE7QUFDN0MsR0FDSjtBQUNKOzs7OyJ9