UNPKG

ppurio

Version:

뿌리오 비공식 메세지 전송 API 라이브러리

78 lines (72 loc) 1.95 kB
import { Module, Global, DynamicModule, Provider } from '@nestjs/common'; import { PpurioService } from './ppurio.service'; import { PpurioModuleOptions, PpurioModuleAsyncOptions, PpurioModuleOptionsFactory, } from './ppurio.interfaces'; @Global() @Module({}) export class PpurioModule { static forRoot(options: PpurioModuleOptions): DynamicModule { return { module: PpurioModule, providers: [ { provide: 'PPURIO_OPTIONS', useValue: options, }, { provide: 'PPURIO_USER_ID', useValue: options.userId, }, PpurioService, ], exports: [PpurioService], }; } static forRootAsync(options: PpurioModuleAsyncOptions): DynamicModule { return { module: PpurioModule, imports: options.imports, providers: [...this.createAsyncProviders(options), PpurioService], exports: [PpurioService], }; } private static createAsyncProviders( options: PpurioModuleAsyncOptions, ): Provider[] { if (options.useFactory) { return [ { provide: 'PPURIO_OPTIONS', useFactory: options.useFactory, inject: options.inject || [], }, { provide: 'PPURIO_USER_ID', useFactory: (ppurioOptions: PpurioModuleOptions) => ppurioOptions.userId, inject: ['PPURIO_OPTIONS'], }, ]; } if (options.useClass) { return [ { provide: options.useClass, useClass: options.useClass, }, { provide: 'PPURIO_USER_ID', useFactory: async (factory: PpurioModuleOptionsFactory) => { const ppurioOptions = await factory.createPpurioOptions(); return ppurioOptions.userId; }, inject: [options.useClass], }, ]; } throw new Error('Invalid PpurioModuleAsyncOptions configuration'); } }