evtstore
Version:
Event Sourcing with Node.JS
47 lines • 4.43 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createCommands = void 0;
function createCommands(provided, handler) {
const commands = Object.keys(handler);
const wrapped = {};
for (const command of commands) {
wrapped[command] = async (id, body) => {
const agg = await provided.getAggregate(id);
const cmdResult = await handler[command]({ ...body, aggregateId: id, type: command }, agg);
const nextAggregate = await handleCommandResult(cmdResult, agg);
return nextAggregate;
};
}
async function handleCommandResult(cmdResult, aggregate) {
const id = aggregate.aggregateId;
let nextAggregate = { ...aggregate };
if (cmdResult) {
const events = Array.isArray(cmdResult) ? cmdResult : [cmdResult];
const provider = await provided.provider;
let nextVersion = aggregate.version + 1;
const newEvents = patchEvents(provided, provider.createEvents(provided.stream, id, nextVersion, events), aggregate);
const nextAggregate = newEvents.reduce(provided.toNextAggregate, aggregate);
await provider.append(provided.stream, id, nextVersion, newEvents);
return nextAggregate;
}
return nextAggregate;
}
return wrapped;
}
exports.createCommands = createCommands;
function patchEvents(provided, events, prev) {
if (!provided.persistAggregate || !provided.version) {
return events;
}
let curr = prev;
const nextEvents = [];
for (const event of events) {
curr = provided.toNextAggregate(curr, event);
nextEvents.push({
...event,
event: { ...event.event, __persisted: { __pv: provided.version, ...curr } },
});
}
return nextEvents;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWNvbW1hbmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjcmVhdGUtY29tbWFuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFXQSxTQUFnQixjQUFjLENBQzVCLFFBQWlDLEVBQ2pDLE9BQWdDO0lBRWhDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFxQixDQUFBO0lBQ3pELE1BQU0sT0FBTyxHQUFrQyxFQUFTLENBQUE7SUFFeEQsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7UUFDOUIsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEtBQUssRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUU7WUFDcEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBRTNDLE1BQU0sU0FBUyxHQUFHLE1BQU0sT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDMUYsTUFBTSxhQUFhLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUE7WUFDL0QsT0FBTyxhQUFhLENBQUE7UUFDdEIsQ0FBQyxDQUFBO0tBQ0Y7SUFFRCxLQUFLLFVBQVUsbUJBQW1CLENBQUMsU0FBeUIsRUFBRSxTQUE0QjtRQUN4RixNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFBO1FBQ2hDLElBQUksYUFBYSxHQUFHLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQTtRQUVwQyxJQUFJLFNBQVMsRUFBRTtZQUNiLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUNqRSxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUE7WUFDeEMsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUE7WUFFdkMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUMzQixRQUFRLEVBQ1IsUUFBUSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLEVBQy9ELFNBQVMsQ0FDVixDQUFBO1lBQ0QsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBRTNFLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxXQUFXLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFDbEUsT0FBTyxhQUFhLENBQUE7U0FDckI7UUFFRCxPQUFPLGFBQWEsQ0FBQTtJQUN0QixDQUFDO0lBRUQsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQXpDRCx3Q0F5Q0M7QUFFRCxTQUFTLFdBQVcsQ0FDbEIsUUFBc0MsRUFDdEMsTUFBdUIsRUFDdkIsSUFBdUI7SUFFdkIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDbkQsT0FBTyxNQUFNLENBQUE7S0FDZDtJQUNELElBQUksSUFBSSxHQUFzQixJQUFJLENBQUE7SUFFbEMsTUFBTSxVQUFVLEdBQW9CLEVBQUUsQ0FBQTtJQUN0QyxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQixJQUFJLEdBQUcsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDNUMsVUFBVSxDQUFDLElBQUksQ0FBQztZQUNkLEdBQUcsS0FBSztZQUNSLEtBQUssRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxFQUFFO1NBQzVFLENBQUMsQ0FBQTtLQUNIO0lBQ0QsT0FBTyxVQUFVLENBQUE7QUFDbkIsQ0FBQyJ9