UNPKG

@nestjs-cqrs-eventsourcing/core

Version:

Event sourcing for nestjs CQRS

90 lines (89 loc) 3.35 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.EventStream = void 0; const debug_1 = __importDefault(require("debug")); const lodash_1 = __importDefault(require("lodash")); const event_class_1 = require("./event.class"); const core_1 = require("@nestjs-cqrs-eventsourcing/core"); class EventStream { constructor(eventstore, query, events) { this.eventstore = eventstore; this.eventsToDispatch = []; if (!eventstore) { const err = new Error('eventstore not injected!'); (0, debug_1.default)(err.message); throw err; } if (typeof eventstore.commit !== 'function') { const err = new Error('eventstore.commit not injected!'); (0, debug_1.default)(err.message); throw err; } if (!query) { const err = new Error('query not injected!'); (0, debug_1.default)(err.message); throw err; } if (!query.aggregateId) { const err = new Error('query.aggregateId not injected!'); (0, debug_1.default)(err.message); throw err; } this.nonce = (0, core_1.generateRandomNonce)(5); if (events) { if (!lodash_1.default.isArray(events)) { const err = new Error('events should be an array!'); (0, debug_1.default)(err.message); throw err; } for (let i = 0, len = events.length; i < len; i += 1) { const evt = events[i]; if (evt.streamRevision === undefined || evt.streamRevision === null || evt.streamRevision < 0) { const err = new Error('The events passed should all have a streamRevision!'); (0, debug_1.default)(err.message); throw err; } } } this.aggregateId = query.aggregateId; this.aggregate = query.aggregate; this.context = query.context; this.events = events || []; this.uncommittedEvents = []; this.lastRevision = -1; this.events = lodash_1.default.sortBy(this.events, 'streamRevision'); this.currentRevision(); } currentRevision() { for (let i = 0, len = this.events.length; i < len; i += 1) { const revision = this.events[i].streamRevision; if (revision > this.lastRevision) { this.lastRevision = revision; } } return this.lastRevision; } addEvent(event) { const theEvent = new event_class_1.Event(this, event, this.eventstore.eventMappings); this.uncommittedEvents.push(theEvent); } addEvents(events) { if (!lodash_1.default.isArray(events)) { const errEvtsArrMsg = 'events should be an array!'; (0, debug_1.default)(errEvtsArrMsg); throw new Error(errEvtsArrMsg); } for (const e of events) { this.addEvent(e); } } async commit() { return this.eventstore.commit(this); } } exports.EventStream = EventStream;