UNPKG

@dugongjs/nestjs

Version:

54 lines (53 loc) 2.26 kB
import { IConsumedMessageRepository, IDomainEventRepository, IInboundMessageMapper, IMessageConsumer, IMessageProducer, IOutboundMessageMapper, ISnapshotRepository, ITransactionManager } from "@dugongjs/core"; export class DugongAdapterBuilder { constructor() { this.adapters = []; } register(adapter) { this.adapters.push(typeof adapter === "function" ? adapter() : adapter); return this; } registerMany(...adapters) { adapters.forEach((adapter) => this.register(adapter)); return this; } build() { const imports = this.adapters.flatMap((adapter) => adapter.imports ?? []); const providers = this.adapters.flatMap((adapter) => adapter.providers ?? []); const mergedAdapters = this.adapters.reduce((acc, adapter) => { if (adapter.loggerFactory !== undefined) { acc.loggerFactory = adapter.loggerFactory; } if (adapter.transactionManager !== undefined) { acc.transactionManager = adapter.transactionManager; } if (adapter.domainEventRepository !== undefined) { acc.domainEventRepository = adapter.domainEventRepository; } if (adapter.snapshotRepository !== undefined) { acc.snapshotRepository = adapter.snapshotRepository; } if (adapter.consumedMessageRepository !== undefined) { acc.consumedMessageRepository = adapter.consumedMessageRepository; } if (adapter.messageConsumer !== undefined) { acc.messageConsumer = adapter.messageConsumer; } if (adapter.inboundMessageMapper !== undefined) { acc.inboundMessageMapper = adapter.inboundMessageMapper; } if (adapter.messageProducer !== undefined) { acc.messageProducer = adapter.messageProducer; } if (adapter.outboundMessageMapper !== undefined) { acc.outboundMessageMapper = adapter.outboundMessageMapper; } return acc; }, {}); return { ...mergedAdapters, imports, providers }; } }