flexiblepersistence
Version:
A CQRS and Event Sourcing platform
61 lines • 2.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Write = void 0;
const __1 = require("..");
class Write {
constructor(event, read, options) {
this.options = options;
this._eventDB = event;
this._read = read;
}
getPersistence() {
return this._eventDB;
}
getRead() {
return this._read;
}
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
async resolvePromises(promises, resolve, reject) {
if (this.options?.isInSeries) {
for (let index = 0; index < promises.length; index++) {
const promise = promises[index];
await Promise.resolve(promise)
.then((value) => index === promises.length - 1 ? resolve(value) : undefined)
.catch(reject);
}
}
else {
await Promise.all(promises)
.then((value) => resolve(value[value.length - 1]))
.catch(reject);
}
}
addEvent(event) {
return new Promise(async (resolve, reject) => {
const promises = [];
const operation = __1.Operation[event.getOperation()];
if (!this.options?.drop?.[operation]) {
// console.log('EVENT CREATE', operation, this._eventDB);
promises.push(this._eventDB.create({
scheme: 'events',
item: event,
}));
}
if (this._read)
promises.push(this._read.newEvent(event));
await this.resolvePromises(promises, resolve, reject);
});
}
read(input) {
// console.log('EVENT READ', this._eventDB);
return this._eventDB.read(input ? input : { scheme: 'events' });
}
clear() {
return this._eventDB.delete({
scheme: 'events',
single: false,
});
}
}
exports.Write = Write;
//# sourceMappingURL=write.js.map