UNPKG

@dugongjs/testing

Version:

46 lines (45 loc) 1.66 kB
import { v4 as uuid } from "uuid"; export class MessageBuilder { constructor(options) { this.domainEvents = []; this.outboundMessageMapper = options.outboundMessageMapper; this.initialSequenceNumber = options?.initialSequenceNumber ?? 1; this.autoIncrementSequenceNumber = options?.autoIncrementSequenceNumber ?? true; } setInitialSequenceNumber(initialSequenceNumber) { this.initialSequenceNumber = initialSequenceNumber; return this; } addDomainEvent(...domainEvents) { this.domainEvents.push(...domainEvents); return this; } build() { const domainEvents = this.domainEvents.map((domainEvent) => { if (!domainEvent.getId()) { domainEvent.setId(uuid()); } if (!domainEvent.getTimestamp()) { domainEvent.setTimestamp(new Date()); } return domainEvent; }); if (this.autoIncrementSequenceNumber) { domainEvents.forEach((event, index) => { event.setSequenceNumber(this.initialSequenceNumber + index); }); } return { messages: domainEvents.map((event) => this.outboundMessageMapper.map(event.serialize())), domainEvents, domainEventIds: domainEvents.map((event) => event.getId()) }; } clear() { return new MessageBuilder({ outboundMessageMapper: this.outboundMessageMapper, initialSequenceNumber: this.initialSequenceNumber, autoIncrementSequenceNumber: this.autoIncrementSequenceNumber }); } }