evtstore
Version:
Event Sourcing with Node.JS
61 lines • 5.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createProvider = void 0;
const error_1 = require("./error");
const util_1 = require("./util");
function createProvider(initEvents, onError = () => { }) {
const events = initEvents || [];
const bms = new Map();
let position = 0;
const getPosition = async (bm) => bms.get(bm) || 0;
const setPosition = async (bm, pos) => {
bms.set(bm, pos);
};
const getEventsFrom = async (stream, pos, limit) => {
const results = events.filter((ev) => (0, util_1.toArray)(stream).includes(ev.stream) && ev.position > pos);
return limit ? results.slice(0, limit) : results;
};
const getLastEventFor = async (stream, id) => {
const streams = (0, util_1.toArray)(stream);
for (let i = events.length - 1; i >= 0; i--) {
const evt = events[i];
if (id && streams.includes(evt.stream) && evt.aggregateId === id)
return evt;
if (streams.includes(evt.stream))
return evt;
}
};
const getEventsFor = async (stream, id, fromPosition) => {
const filter = fromPosition === undefined
? (ev) => ev.stream === stream && ev.aggregateId === id
: (ev) => ev.stream === stream && ev.aggregateId === id && ev.position > fromPosition;
return events.filter(filter);
};
const createEvents = (0, util_1.createEventsMapper)(0);
const append = async (stream, aggregateId, version, newEvents) => {
const aggEvents = await getEventsFor(stream, aggregateId);
for (const ev of aggEvents) {
if (ev.version === version)
throw new error_1.VersionError();
}
const storeEvents = newEvents.map((event) => ({
...event,
position: ++position,
}));
events.push(...storeEvents);
return storeEvents;
};
return {
driver: 'memory',
onError,
getPosition,
setPosition,
getEventsFor,
getEventsFrom,
getLastEventFor,
createEvents,
append,
};
}
exports.createProvider = createProvider;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibWVtb3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1DQUFzQztBQUN0QyxpQ0FBb0Q7QUFFcEQsU0FBZ0IsY0FBYyxDQUM1QixVQUFpQyxFQUNqQyxVQUF5QixHQUFHLEVBQUUsR0FBRSxDQUFDO0lBRWpDLE1BQU0sTUFBTSxHQUF5QixVQUFVLElBQUksRUFBRSxDQUFBO0lBQ3JELE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxFQUFrQixDQUFBO0lBQ3JDLElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQTtJQUVoQixNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFBVSxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUUxRCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFBVSxFQUFFLEdBQVcsRUFBRSxFQUFFO1FBQ3BELEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ2xCLENBQUMsQ0FBQTtJQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssRUFBRSxNQUF5QixFQUFFLEdBQVcsRUFBRSxLQUFhLEVBQUUsRUFBRTtRQUNwRixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFBLGNBQU8sRUFBQyxNQUFNLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLENBQUE7UUFDL0YsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7SUFDbEQsQ0FBQyxDQUFBO0lBRUQsTUFBTSxlQUFlLEdBQUcsS0FBSyxFQUFFLE1BQXlCLEVBQUUsRUFBVyxFQUFFLEVBQUU7UUFDdkUsTUFBTSxPQUFPLEdBQUcsSUFBQSxjQUFPLEVBQUMsTUFBTSxDQUFDLENBQUE7UUFFL0IsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQzNDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNyQixJQUFJLEVBQUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLENBQUMsV0FBVyxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxHQUFHLENBQUE7WUFDNUUsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7Z0JBQUUsT0FBTyxHQUFHLENBQUE7U0FDN0M7SUFDSCxDQUFDLENBQUE7SUFFRCxNQUFNLFlBQVksR0FBRyxLQUFLLEVBQUUsTUFBYyxFQUFFLEVBQVUsRUFBRSxZQUFxQixFQUFFLEVBQUU7UUFDL0UsTUFBTSxNQUFNLEdBQ1YsWUFBWSxLQUFLLFNBQVM7WUFDeEIsQ0FBQyxDQUFDLENBQUMsRUFBaUIsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLE1BQU0sS0FBSyxNQUFNLElBQUksRUFBRSxDQUFDLFdBQVcsS0FBSyxFQUFFO1lBQ3RFLENBQUMsQ0FBQyxDQUFDLEVBQWlCLEVBQUUsRUFBRSxDQUNwQixFQUFFLENBQUMsTUFBTSxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsV0FBVyxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQTtRQUVuRixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUIsQ0FBQyxDQUFBO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBQSx5QkFBa0IsRUFBSSxDQUFDLENBQUMsQ0FBQTtJQUU3QyxNQUFNLE1BQU0sR0FBRyxLQUFLLEVBQ2xCLE1BQWMsRUFDZCxXQUFtQixFQUNuQixPQUFlLEVBQ2YsU0FBMEIsRUFDMUIsRUFBRTtRQUNGLE1BQU0sU0FBUyxHQUFHLE1BQU0sWUFBWSxDQUFDLE1BQU0sRUFBRSxXQUFXLENBQUMsQ0FBQTtRQUN6RCxLQUFLLE1BQU0sRUFBRSxJQUFJLFNBQVMsRUFBRTtZQUMxQixJQUFJLEVBQUUsQ0FBQyxPQUFPLEtBQUssT0FBTztnQkFBRSxNQUFNLElBQUksb0JBQVksRUFBRSxDQUFBO1NBQ3JEO1FBRUQsTUFBTSxXQUFXLEdBQXlCLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDbEUsR0FBRyxLQUFLO1lBQ1IsUUFBUSxFQUFFLEVBQUUsUUFBUTtTQUNyQixDQUFDLENBQUMsQ0FBQTtRQUVILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQTtRQUMzQixPQUFPLFdBQVcsQ0FBQTtJQUNwQixDQUFDLENBQUE7SUFFRCxPQUFPO1FBQ0wsTUFBTSxFQUFFLFFBQVE7UUFDaEIsT0FBTztRQUNQLFdBQVc7UUFDWCxXQUFXO1FBQ1gsWUFBWTtRQUNaLGFBQWE7UUFDYixlQUFlO1FBQ2YsWUFBWTtRQUNaLE1BQU07S0FDUCxDQUFBO0FBQ0gsQ0FBQztBQXhFRCx3Q0F3RUMifQ==