nestjs-telegraf/lib/telegraf.module.ts

64 lines
1.7 KiB
TypeScript
Raw Normal View History

import { Module, DynamicModule, Provider } from '@nestjs/common';
import {
TelegrafModuleAsyncOptions,
TelegrafOptionsFactory
} from './interfaces';
import {
TELEGRAF_MODULE_OPTIONS,
TokenInjectionToken
} from './telegraf.constants';
import { TelegrafService, TelegrafTelegramService } from './';
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),
TelegrafService,
TelegrafTelegramService,
2019-02-28 11:29:26 +03:00
{
provide: TokenInjectionToken,
useClass: options.useClass
}
2019-02-28 11:29:26 +03:00
],
exports: [TelegrafService, TelegrafTelegramService]
};
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
}