nestjs-telegraf/lib/telegraf.module.ts

62 lines
1.8 KiB
TypeScript
Raw Normal View History

2020-01-12 02:41:27 +03:00
import { Module, DynamicModule, Provider } from '@nestjs/common'
import { TelegrafBotService } from './telegraf-bot.service'
import {
TelegrafModuleAsyncOptions,
TelegrafOptionsFactory,
} from './interfaces'
2020-01-12 02:41:27 +03:00
import { TELEGRAF_MODULE_OPTIONS, TokenInjectionToken } from './telegraf.constants'
import { TelegrafTelegramClientService } from './telegraf-telegram-client.service'
2019-02-28 11:29:26 +03:00
@Module({})
export class TelegrafModule {
static fromFactory(options: TelegrafModuleAsyncOptions): DynamicModule {
2019-02-28 11:29:26 +03:00
return {
2020-01-12 01:15:32 +03:00
module: TelegrafModule,
imports: options.imports || [],
2019-02-28 11:29:26 +03:00
providers: [
...this.createAsyncProviders(options),
2020-01-12 02:41:27 +03:00
TelegrafBotService,
TelegrafTelegramClientService,
2019-02-28 11:29:26 +03:00
{
provide: TokenInjectionToken,
useClass: options.useClass,
2019-02-28 11:29:26 +03:00
},
],
2020-01-12 02:41:27 +03:00
exports: [TelegrafBotService, TelegrafTelegramClientService],
2019-02-28 11:29:26 +03:00
}
}
private static createAsyncProviders(
options: TelegrafModuleAsyncOptions,
): Provider[] {
if (options.useExisting || options.useFactory) {
return [this.createAsyncOptionsProvider(options)]
}
return [
this.createAsyncOptionsProvider(options),
{
provide: options.useClass,
useClass: options.useClass,
},
]
}
private static createAsyncOptionsProvider(
options: TelegrafModuleAsyncOptions,
): Provider {
if (options.useFactory) {
return {
provide: TELEGRAF_MODULE_OPTIONS,
useFactory: options.useFactory,
inject: options.inject || [],
}
}
return {
provide: TELEGRAF_MODULE_OPTIONS,
useFactory: async (optionsFactory: TelegrafOptionsFactory) =>
await optionsFactory.createTelegrafOptions(),
inject: [options.useExisting || options.useClass],
}
}
2019-02-28 11:29:26 +03:00
}