fennec-be/src/commons/pub-sub/pub-sub.module.ts

49 lines
1.3 KiB
TypeScript

import { DynamicModule, Module } from '@nestjs/common';
import { PubSubService } from './pub-sub.service';
import {
createAsyncPubSubProviders,
createPubSubProvider,
} from './pub-sub.providers';
import { PubSubOptions } from './interfaces/pub-sub-options.interface';
import { PubSubAsyncConfig } from './interfaces/pub-sub-async-config.interface';
import { getPubSubConfigToken } from './utils/token';
@Module({
providers: [PubSubService],
})
export class PubSubModule {
public static forRoot(options: PubSubOptions): DynamicModule {
const providers = [
{
provide: getPubSubConfigToken(options.name),
useValue: options,
},
createPubSubProvider(options.name),
];
return {
global: true,
module: PubSubModule,
providers,
exports: providers,
};
}
public static forRootAsync(...configs: PubSubAsyncConfig[]): DynamicModule {
const providers = createAsyncPubSubProviders(configs);
return {
global: true,
module: PubSubModule,
imports: configs
.map((config) => config.imports)
.flat()
.filter((o, i, a) => a.indexOf(o) === i),
providers,
exports: providers,
};
}
public static forFeature(): DynamicModule {
return {
module: PubSubModule,
};
}
}