UNPKG

woltage

Version:

A CQRS and Event-Sourcing Framework

44 lines (43 loc) 2.33 kB
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _EventRegistry_handlerMap; import EventCaster from "./EventCaster.js"; class EventRegistry { constructor(obj, proto) { _EventRegistry_handlerMap.set(this, void 0); __classPrivateFieldSet(this, _EventRegistry_handlerMap, Object.getOwnPropertyNames(proto ?? obj) .filter(property => property.startsWith('{') && property.endsWith('}')) .reduce((map, eventIdentity) => { const { type, version } = JSON.parse(eventIdentity); map[type] ??= {}; map[type][version] = obj[eventIdentity].bind(obj); return map; }, {}), "f"); } get types() { return Object.keys(__classPrivateFieldGet(this, _EventRegistry_handlerMap, "f")); } async get(event) { const handlers = __classPrivateFieldGet(this, _EventRegistry_handlerMap, "f")[event.type]; const handler = handlers?.[event.version]; if (handlers && !handler) event = await EventCaster.cast(event, Object.keys(handlers) .map(v => parseInt(v, 10)) .sort((a, b) => b - a)[0]); return { event, handler }; } } _EventRegistry_handlerMap = new WeakMap(); export default EventRegistry;