UNPKG

rotowire-api-client

Version:

Node and NestJS wrappers for Rotowire feeds

71 lines (64 loc) 2.15 kB
import { DynamicModule, Module, Global, Provider } from '@nestjs/common'; import { HttpModule, HttpService } from '@nestjs/axios'; import { AsyncConfiguration, Configuration, ConfigurationFactory } from './configuration'; import { DefaultRotowireMlbApiService } from './api/default.service'; //@Global() @Module({ imports: [HttpModule], exports: [ DefaultRotowireMlbApiService ], providers: [ DefaultRotowireMlbApiService ] }) export class ApiModule { public static forRoot(configurationFactory: () => Configuration): DynamicModule { return { module: ApiModule, providers: [{ provide: Configuration, useFactory: configurationFactory }] }; } /** * Register the module asynchronously. */ static forRootAsync(options: AsyncConfiguration): DynamicModule { const providers = [...this.createAsyncProviders(options)]; return { module: ApiModule, imports: options.imports || [], providers, exports: providers, }; } private static createAsyncProviders(options: AsyncConfiguration): Provider[] { if (options.useExisting || options.useFactory) { return [this.createAsyncConfigurationProvider(options)]; } return [ this.createAsyncConfigurationProvider(options), { provide: options.useClass, useClass: options.useClass, }, ]; } private static createAsyncConfigurationProvider( options: AsyncConfiguration, ): Provider { if (options.useFactory) { return { provide: Configuration, useFactory: options.useFactory, inject: options.inject || [], }; } return { provide: Configuration, useFactory: async (optionsFactory: ConfigurationFactory) => await optionsFactory.createConfiguration(), inject: [options.useExisting || options.useClass], }; } constructor(httpService: HttpService) { } }