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, }; } }