refactor(wip): remove core module & change tokens

This commit is contained in:
unknown 2020-12-26 14:54:10 +03:00
parent c85460dc10
commit 80853be80c
26 changed files with 155 additions and 185 deletions

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafUpdateType } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface OnOptions {
*/
export const On = (updateTypes: TelegrafUpdateType): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.On),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.On),
SetMetadata(LISTENER_OPTIONS_METADATA, {
updateTypes,
} as OnOptions),
);

View File

@ -1,8 +1,9 @@
import { SetMetadata } from '@nestjs/common';
import { TELEGRAF_UPDATE } from '../../telegraf.constants';
import { TELEGRAF_UPDATE_METADATA } from '../../telegraf.constants';
/**
* `@Update` decorator, it's like NestJS `@Controller` decorator,
* but for Telegram Bot API updates.
*/
export const Update = (): ClassDecorator => SetMetadata(TELEGRAF_UPDATE, true);
export const Update = (): ClassDecorator =>
SetMetadata(TELEGRAF_UPDATE_METADATA, true);

View File

@ -1,5 +1,5 @@
import { SetMetadata } from '@nestjs/common';
import { TELEGRAF_LISTENER_TYPE } from '../../telegraf.constants';
import { LISTENER_TYPE_METADATA } from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
/**
@ -8,5 +8,5 @@ import { ListenerType } from '../../enums/listener-type.enum';
* @see https://telegraf.js.org/#/?id=use
*/
export const Use = (): MethodDecorator => {
return SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Use);
return SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Use);
};

View File

@ -1,4 +1,4 @@
import { Inject } from '@nestjs/common';
import { TELEGRAF_PROVIDER } from '../telegraf.constants';
import { TelegrafProvider } from '../telegraf.provider';
export const InjectBot = (): ParameterDecorator => Inject(TELEGRAF_PROVIDER);
export const InjectBot = (): ParameterDecorator => Inject(TelegrafProvider);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { TelegrafActionTriggers } from '../../telegraf.types';
import { ListenerType } from '../../enums/listener-type.enum';
@ -17,8 +17,8 @@ export interface ActionOptions {
*/
export const Action = (triggers: TelegrafActionTriggers): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Action),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Action),
SetMetadata(LISTENER_OPTIONS_METADATA, {
triggers,
} as ActionOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { TelegrafCashtag } from '../../telegraf.types';
import { ListenerType } from '../../enums/listener-type.enum';
@ -17,8 +17,8 @@ export interface CashtagOptions {
*/
export const Cashtag = (cashtag: TelegrafCashtag): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Cashtag),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Cashtag),
SetMetadata(LISTENER_OPTIONS_METADATA, {
cashtag,
} as CashtagOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafCommand } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface CommandOptions {
*/
export const Command = (command: TelegrafCommand): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Command),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Command),
SetMetadata(LISTENER_OPTIONS_METADATA, {
command: command,
} as CommandOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafEmail } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface EmailOptions {
*/
export const Email = (email: TelegrafEmail): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Email),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Email),
SetMetadata(LISTENER_OPTIONS_METADATA, {
email,
} as EmailOptions),
);

View File

@ -1,5 +1,5 @@
import { SetMetadata } from '@nestjs/common';
import { TELEGRAF_LISTENER_TYPE } from '../../telegraf.constants';
import { LISTENER_TYPE_METADATA } from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
/**
@ -8,5 +8,5 @@ import { ListenerType } from '../../enums/listener-type.enum';
* @see https://telegraf.js.org/#/?id=inlinequery
*/
export const GameQuery = (): MethodDecorator => {
return SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.GameQuery);
return SetMetadata(LISTENER_TYPE_METADATA, ListenerType.GameQuery);
};

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafHashtag } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface HashtagOptions {
*/
export const Hashtag = (hashtag: TelegrafHashtag): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Hashtag),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Hashtag),
SetMetadata(LISTENER_OPTIONS_METADATA, {
hashtag,
} as HashtagOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafHearsTriggers } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface HearsOptions {
*/
export const Hears = (triggers: TelegrafHearsTriggers): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Hears),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Hears),
SetMetadata(LISTENER_OPTIONS_METADATA, {
triggers,
} as HearsOptions),
);

View File

@ -1,5 +1,5 @@
import { SetMetadata } from '@nestjs/common';
import { TELEGRAF_LISTENER_TYPE } from '../../telegraf.constants';
import { LISTENER_TYPE_METADATA } from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
/**
@ -8,5 +8,5 @@ import { ListenerType } from '../../enums/listener-type.enum';
* @see https://telegraf.js.org/#/?id=help
*/
export const Help = (): MethodDecorator => {
return SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Help);
return SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Help);
};

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafInlineQueryTriggers } from '../../telegraf.types';
@ -19,8 +19,8 @@ export const InlineQuery = (
triggers: TelegrafInlineQueryTriggers,
): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.InlineQuery),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.InlineQuery),
SetMetadata(LISTENER_OPTIONS_METADATA, {
triggers,
} as InlineQueryOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafMention } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface MentionOptions {
*/
export const Mention = (mention: TelegrafMention): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Mention),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Mention),
SetMetadata(LISTENER_OPTIONS_METADATA, {
mention,
} as MentionOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafPhone } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface PhoneOptions {
*/
export const Phone = (phone: TelegrafPhone): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Phone),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Phone),
SetMetadata(LISTENER_OPTIONS_METADATA, {
phone,
} as PhoneOptions),
);

View File

@ -1,5 +1,5 @@
import { SetMetadata } from '@nestjs/common';
import { TELEGRAF_LISTENER_TYPE } from '../../telegraf.constants';
import { LISTENER_TYPE_METADATA } from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
/**
@ -8,5 +8,5 @@ import { ListenerType } from '../../enums/listener-type.enum';
* @see https://telegraf.js.org/#/?id=settings
*/
export const Settings = (): MethodDecorator => {
return SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Settings);
return SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Settings);
};

View File

@ -1,5 +1,5 @@
import { SetMetadata } from '@nestjs/common';
import { TELEGRAF_LISTENER_TYPE } from '../../telegraf.constants';
import { LISTENER_TYPE_METADATA } from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
/**
@ -8,5 +8,5 @@ import { ListenerType } from '../../enums/listener-type.enum';
* @see https://telegraf.js.org/#/?id=start
*/
export const Start = (): MethodDecorator => {
return SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Start);
return SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Start);
};

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafTextLink } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface TextLinkOptions {
*/
export const TetxLink = (link: TelegrafTextLink): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.TextLink),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.TextLink),
SetMetadata(LISTENER_OPTIONS_METADATA, {
link,
} as TextLinkOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafTextMention } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface TextMentionOptions {
*/
export const TetxMention = (mention: TelegrafTextMention): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.TextMention),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.TextMention),
SetMetadata(LISTENER_OPTIONS_METADATA, {
mention,
} as TextMentionOptions),
);

View File

@ -1,7 +1,7 @@
import { applyDecorators, SetMetadata } from '@nestjs/common';
import {
TELEGRAF_LISTENER_OPTIONS,
TELEGRAF_LISTENER_TYPE,
LISTENER_OPTIONS_METADATA,
LISTENER_TYPE_METADATA,
} from '../../telegraf.constants';
import { ListenerType } from '../../enums/listener-type.enum';
import { TelegrafUrl } from '../../telegraf.types';
@ -17,8 +17,8 @@ export interface UrlOptions {
*/
export const Url = (url: TelegrafUrl): MethodDecorator => {
return applyDecorators(
SetMetadata(TELEGRAF_LISTENER_TYPE, ListenerType.Url),
SetMetadata(TELEGRAF_LISTENER_OPTIONS, {
SetMetadata(LISTENER_TYPE_METADATA, ListenerType.Url),
SetMetadata(LISTENER_OPTIONS_METADATA, {
url,
} as UrlOptions),
);

View File

@ -1,11 +1,3 @@
export * as Composer from 'telegraf/composer';
export * as Markup from 'telegraf/markup';
export * as BaseScene from 'telegraf/scenes/base';
export * as session from 'telegraf/session';
export * as Stage from 'telegraf/stage';
export * as WizardScene from 'telegraf/scenes/wizard';
export * as Extra from 'telegraf/extra';
export * from './decorators';
export * from './interfaces';
export * from './telegraf.module';

View File

@ -1,91 +0,0 @@
import { DiscoveryModule } from '@nestjs/core';
import { Module, DynamicModule, Provider, Type } from '@nestjs/common';
import {
TelegrafModuleOptions,
TelegrafModuleAsyncOptions,
TelegrafOptionsFactory,
} from './interfaces';
import {
TELEGRAF_MODULE_OPTIONS,
TELEGRAF_PROVIDER,
} from './telegraf.constants';
import { TelegrafMetadataAccessor } from './telegraf-metadata.accessor';
import { TelegrafExplorer } from './telegraf.explorer';
import { TelegrafProvider } from './telegraf.provider';
@Module({
imports: [DiscoveryModule],
providers: [TelegrafMetadataAccessor, TelegrafExplorer],
})
export class TelegrafCoreModule {
public static forRoot(options: TelegrafModuleOptions): DynamicModule {
const telegrafProvider = {
provide: TELEGRAF_PROVIDER,
useClass: TelegrafProvider,
inject: [TELEGRAF_MODULE_OPTIONS],
};
return {
module: TelegrafCoreModule,
providers: [
{ provide: TELEGRAF_MODULE_OPTIONS, useValue: options },
telegrafProvider,
],
exports: [telegrafProvider],
};
}
public static forRootAsync(
options: TelegrafModuleAsyncOptions,
): DynamicModule {
const telegrafProvider = {
provide: TELEGRAF_PROVIDER,
useClass: TelegrafProvider,
inject: [TELEGRAF_MODULE_OPTIONS],
};
const asyncProviders = this.createAsyncProviders(options);
return {
module: TelegrafCoreModule,
imports: options.imports,
providers: [...asyncProviders, telegrafProvider],
exports: [telegrafProvider],
};
}
private static createAsyncProviders(
options: TelegrafModuleAsyncOptions,
): Provider[] {
if (options.useExisting || options.useFactory) {
return [this.createAsyncOptionsProvider(options)];
}
const useClass = options.useClass as Type<TelegrafOptionsFactory>;
return [
this.createAsyncOptionsProvider(options),
{
provide: useClass,
useClass,
},
];
}
private static createAsyncOptionsProvider(
options: TelegrafModuleAsyncOptions,
): Provider {
if (options.useFactory) {
return {
provide: TELEGRAF_MODULE_OPTIONS,
useFactory: options.useFactory,
inject: options.inject || [],
};
}
// `as Type<TelegrafOptionsFactory>` is a workaround for microsoft/TypeScript#31603
const inject = [
(options.useClass || options.useExisting) as Type<TelegrafOptionsFactory>,
];
return {
provide: TELEGRAF_MODULE_OPTIONS,
useFactory: async (optionsFactory: TelegrafOptionsFactory) =>
await optionsFactory.createTelegrafOptions(),
inject,
};
}
}

View File

@ -1,17 +1,25 @@
import { Injectable } from '@nestjs/common';
import { Reflector } from '@nestjs/core';
import {
TELEGRAF_LISTENER_TYPE,
LISTENER_TYPE_METADATA,
TELEGRAF_MODULE_OPTIONS,
TELEGRAF_UPDATE_METADATA,
} from './telegraf.constants';
import { ListenerType } from './enums/listener-type.enum';
import { ListenerType } from './enums';
@Injectable()
export class TelegrafMetadataAccessor {
constructor(private readonly reflector: Reflector) {}
isUpdate(target: Function): boolean {
return !!this.reflector.get<true | undefined>(
TELEGRAF_UPDATE_METADATA,
target,
);
}
getListenerType(target: Function): ListenerType | undefined {
return this.reflector.get<ListenerType>(TELEGRAF_LISTENER_TYPE, target);
return this.reflector.get<ListenerType>(LISTENER_TYPE_METADATA, target);
}
getListenerOptions<T>(target: Function): unknown | undefined {

View File

@ -1,6 +1,5 @@
export const TELEGRAF_MODULE_OPTIONS = 'TELEGRAF_MODULE_OPTIONS';
export const TELEGRAF_PROVIDER = 'TelegrafProvider';
export const TELEGRAF_UPDATE = 'TELEGRAF_UPDATE';
export const TELEGRAF_LISTENER_TYPE = 'TELEGRAF_LISTENER_TYPE';
export const TELEGRAF_LISTENER_OPTIONS = 'TELEGRAF_LISTENER_OPTIONS';
export const TELEGRAF_UPDATE_METADATA = 'TELEGRAF_UPDATE_METADATA';
export const LISTENER_TYPE_METADATA = 'LISTENER_TYPE_METADATA';
export const LISTENER_OPTIONS_METADATA = 'LISTENER_OPTIONS_METADATA';

View File

@ -3,8 +3,7 @@ import { DiscoveryService, ModuleRef } from '@nestjs/core';
import { MetadataScanner } from '@nestjs/core/metadata-scanner';
import { TelegrafMetadataAccessor } from './telegraf-metadata.accessor';
import { TelegrafProvider } from './telegraf.provider';
import { TELEGRAF_PROVIDER } from './telegraf.constants';
import { ListenerType } from './enums/listener-type.enum';
import { ListenerType } from './enums';
import {
ActionOptions,
CashtagOptions,
@ -33,7 +32,7 @@ export class TelegrafExplorer implements OnModuleInit {
private telegraf: TelegrafProvider;
onModuleInit(): void {
this.telegraf = this.moduleRef.get<TelegrafProvider>(TELEGRAF_PROVIDER, {
this.telegraf = this.moduleRef.get<TelegrafProvider>(TelegrafProvider, {
strict: false,
});
this.explore();
@ -50,13 +49,18 @@ export class TelegrafExplorer implements OnModuleInit {
this.metadataScanner.scanFromPrototype(
instance,
prototype,
(methodKey: string) => {
this.registerIfListener(instance, methodKey);
},
(methodKey: string) => this.registerIfUpdate(instance, methodKey),
);
});
}
private registerIfUpdate(
instance: Record<string, Function>,
methodKey: string,
): void {
const isUpdate = this.metadataAccessor.isUpdate(instance);
}
private registerIfListener(
instance: Record<string, Function>,
methodKey: string,

View File

@ -1,27 +1,84 @@
import { Module, DynamicModule } from '@nestjs/common';
import { TelegrafCoreModule } from './telegraf-core.module';
import { DiscoveryModule } from '@nestjs/core';
import { Module, DynamicModule, Provider } from '@nestjs/common';
import {
TelegrafModuleOptions,
TelegrafModuleAsyncOptions,
TelegrafOptionsFactory,
} from './interfaces';
import { TELEGRAF_MODULE_OPTIONS } from './telegraf.constants';
import { TelegrafMetadataAccessor } from './telegraf-metadata.accessor';
import { TelegrafExplorer } from './telegraf.explorer';
import { TelegrafProvider } from './telegraf.provider';
@Module({})
@Module({
imports: [DiscoveryModule],
providers: [TelegrafMetadataAccessor, TelegrafExplorer],
})
export class TelegrafModule {
public static forRoot(options: TelegrafModuleOptions): DynamicModule {
const providers = [...this.createProviders(options), TelegrafProvider];
return {
module: TelegrafModule,
imports: [TelegrafCoreModule.forRoot(options)],
exports: [TelegrafCoreModule],
providers,
exports: providers,
};
}
private static createProviders(options: TelegrafModuleOptions): Provider[] {
return [
{
provide: TELEGRAF_MODULE_OPTIONS,
useValue: options,
},
];
}
public static forRootAsync(
options: TelegrafModuleAsyncOptions,
): DynamicModule {
const providers = [...this.createAsyncProviders(options), TelegrafProvider];
return {
module: TelegrafModule,
imports: [TelegrafCoreModule.forRootAsync(options)],
exports: [TelegrafCoreModule],
imports: options.imports || [],
providers,
exports: providers,
};
}
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],
};
}
}