@dugongjs/nestjs
Version:
54 lines (53 loc) • 2.26 kB
JavaScript
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
};
}
}