UNPKG

evtstore

Version:

Event Sourcing with Node.JS

47 lines 4.43 kB
"use strict"; 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