@nestjs-cqrs-eventsourcing/core
Version:
Event sourcing for nestjs CQRS
90 lines (89 loc) • 3.35 kB
JavaScript
;
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;