UNPKG

@rytass/member-base-nestjs-module

Version:

Rytass Member System NestJS Base Module

118 lines (115 loc) 4.01 kB
import { Global, Module } from '@nestjs/common'; import { MemberBaseModelsModule } from './models/models.module.js'; import { MemberBaseService } from './services/member-base.service.js'; import { MemberBaseAdminService } from './services/member-base-admin.service.js'; import { ResolvedRepoProviders } from './constants/resolved-repo-providers.js'; import { CASBIN_ENFORCER, ACCESS_TOKEN_SECRET, ENABLE_GLOBAL_GUARD, RESOLVED_MEMBER_REPO, MEMBER_BASE_MODULE_OPTIONS } from './typings/member-base.tokens.js'; import { APP_GUARD } from '@nestjs/core'; import { OptionProviders } from './constants/option-providers.js'; import { CasbinGuard } from './guards/casbin.guard.js'; import { PasswordValidatorService } from './services/password-validator.service.js'; import { OAuthService } from './services/oauth.service.js'; import { OAuthCallbacksController } from './controllers/oauth-callbacks.controller.js'; function _ts_decorate(decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; } const providers = [ ...OptionProviders, ...ResolvedRepoProviders, PasswordValidatorService, MemberBaseService, MemberBaseAdminService, OAuthService, { provide: APP_GUARD, useClass: CasbinGuard } ]; const exportInjectable = [ PasswordValidatorService, MemberBaseModelsModule, MemberBaseService, MemberBaseAdminService, OAuthService, CASBIN_ENFORCER, ACCESS_TOKEN_SECRET, ENABLE_GLOBAL_GUARD, RESOLVED_MEMBER_REPO ]; const controllers = [ OAuthCallbacksController ]; class MemberBaseModule { static forRootAsync(options) { return { module: MemberBaseModule, imports: [ ...options?.imports ?? [], MemberBaseModelsModule ], providers: [ ...this.createAsyncProvider(options), ...providers ], controllers, exports: exportInjectable }; } static forRoot(options) { return { module: MemberBaseModule, imports: [ MemberBaseModelsModule ], providers: [ { provide: MEMBER_BASE_MODULE_OPTIONS, useValue: options }, ...providers ], controllers, exports: exportInjectable }; } static createAsyncProvider(options) { if (options.useExisting || options.useFactory) { return [ this.createAsyncOptionsProvider(options) ]; } return [ this.createAsyncOptionsProvider(options), ...options.useClass ? [ { provide: options.useClass, useClass: options.useClass } ] : [] ]; } static createAsyncOptionsProvider(options) { if (options.useFactory) { return { provide: MEMBER_BASE_MODULE_OPTIONS, useFactory: options.useFactory, inject: options.inject || [] }; } return { provide: MEMBER_BASE_MODULE_OPTIONS, useFactory: async (optionsFactory)=>await optionsFactory.createMemberOptions(), inject: [ options.useExisting || options.useClass ] }; } } MemberBaseModule = _ts_decorate([ Global(), Module({}) ], MemberBaseModule); export { MemberBaseModule };