49 lines
1.3 KiB
TypeScript
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,
|
|
};
|
|
}
|
|
}
|