@@ -2,10 +2,14 @@ import { Scope } from '@nestjs/common';
22import { SCOPE_OPTIONS_METADATA } from '@nestjs/common/constants' ;
33import {
44 Abstract ,
5+ ClassProvider ,
56 Controller ,
67 DynamicModule ,
8+ FactoryProvider ,
79 Injectable ,
810 NestModule ,
11+ Provider ,
12+ ValueProvider ,
913} from '@nestjs/common/interfaces' ;
1014import { Type } from '@nestjs/common/interfaces/type.interface' ;
1115import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util' ;
@@ -23,32 +27,9 @@ import { NestContainer } from './container';
2327import { InstanceWrapper } from './instance-wrapper' ;
2428import { ModuleRef } from './module-ref' ;
2529
26- export interface CustomProvider {
27- provide : any ;
28- name : string ;
30+ interface ProviderName {
31+ name ?: string | symbol ;
2932}
30- export type OpaqueToken =
31- | string
32- | symbol
33- | Type < any >
34- | Function
35- | Abstract < any > ;
36-
37- export type CustomClass = CustomProvider & {
38- useClass : Type < any > ;
39- scope ?: Scope ;
40- } ;
41- export type CustomFactory = CustomProvider & {
42- useFactory : ( ...args : any [ ] ) => any ;
43- inject ?: OpaqueToken [ ] ;
44- scope ?: Scope ;
45- } ;
46- export type CustomValue = CustomProvider & { useValue : any } ;
47- export type ProviderMetatype =
48- | Type < Injectable >
49- | CustomFactory
50- | CustomValue
51- | CustomClass ;
5233
5334export class Module {
5435 private readonly _id : string ;
@@ -186,7 +167,7 @@ export class Module {
186167 }
187168 }
188169
189- public addProvider ( provider : ProviderMetatype ) : string {
170+ public addProvider ( provider : Provider ) : string {
190171 if ( this . isCustomProvider ( provider ) ) {
191172 return this . addCustomProvider ( provider , this . _providers ) ;
192173 }
@@ -205,13 +186,15 @@ export class Module {
205186 }
206187
207188 public isCustomProvider (
208- provider : ProviderMetatype ,
209- ) : provider is CustomClass | CustomFactory | CustomValue {
210- return ! isNil ( ( provider as CustomProvider ) . provide ) ;
189+ provider : Provider ,
190+ ) : provider is ClassProvider | FactoryProvider | ValueProvider {
191+ return ! isNil (
192+ ( provider as ClassProvider | FactoryProvider | ValueProvider ) . provide ,
193+ ) ;
211194 }
212195
213196 public addCustomProvider (
214- provider : CustomFactory | CustomValue | CustomClass ,
197+ provider : ( ClassProvider | FactoryProvider | ValueProvider ) & ProviderName ,
215198 collection : Map < string , any > ,
216199 ) : string {
217200 const name = this . getProviderStaticToken ( provider . provide ) as string ;
@@ -229,29 +212,29 @@ export class Module {
229212 return name ;
230213 }
231214
232- public isCustomClass ( provider : any ) : provider is CustomClass {
233- return ! isUndefined ( ( provider as CustomClass ) . useClass ) ;
215+ public isCustomClass ( provider : any ) : provider is ClassProvider {
216+ return ! isUndefined ( ( provider as ClassProvider ) . useClass ) ;
234217 }
235218
236- public isCustomValue ( provider : any ) : provider is CustomValue {
237- return ! isUndefined ( ( provider as CustomValue ) . useValue ) ;
219+ public isCustomValue ( provider : any ) : provider is ValueProvider {
220+ return ! isUndefined ( ( provider as ValueProvider ) . useValue ) ;
238221 }
239222
240- public isCustomFactory ( provider : any ) : provider is CustomFactory {
241- return ! isUndefined ( ( provider as CustomFactory ) . useFactory ) ;
223+ public isCustomFactory ( provider : any ) : provider is FactoryProvider {
224+ return ! isUndefined ( ( provider as FactoryProvider ) . useFactory ) ;
242225 }
243226
244227 public isDynamicModule ( exported : any ) : exported is DynamicModule {
245228 return exported && exported . module ;
246229 }
247230
248231 public addCustomClass (
249- provider : CustomClass ,
232+ provider : ClassProvider & ProviderName ,
250233 collection : Map < string , InstanceWrapper > ,
251234 ) {
252235 const { name, useClass, scope } = provider ;
253236 collection . set (
254- name ,
237+ name as string ,
255238 new InstanceWrapper ( {
256239 name,
257240 metatype : useClass ,
@@ -264,12 +247,12 @@ export class Module {
264247 }
265248
266249 public addCustomValue (
267- provider : CustomValue ,
250+ provider : ValueProvider & ProviderName ,
268251 collection : Map < string , InstanceWrapper > ,
269252 ) {
270253 const { name, useValue : value } = provider ;
271254 collection . set (
272- name ,
255+ name as string ,
273256 new InstanceWrapper ( {
274257 name,
275258 metatype : null ,
@@ -282,12 +265,12 @@ export class Module {
282265 }
283266
284267 public addCustomFactory (
285- provider : CustomFactory ,
268+ provider : FactoryProvider & ProviderName ,
286269 collection : Map < string , InstanceWrapper > ,
287270 ) {
288271 const { name, useFactory : factory , inject, scope } = provider ;
289272 collection . set (
290- name ,
273+ name as string ,
291274 new InstanceWrapper ( {
292275 name,
293276 metatype : factory as any ,
@@ -301,7 +284,7 @@ export class Module {
301284 }
302285
303286 public addExportedProvider (
304- provider : ProviderMetatype | string | symbol | DynamicModule ,
287+ provider : Provider & ProviderName | string | symbol | DynamicModule ,
305288 ) {
306289 const addExportedUnit = ( token : string | symbol ) =>
307290 this . _exports . add ( this . validateExportedProvider ( token ) ) ;
@@ -318,7 +301,7 @@ export class Module {
318301 }
319302
320303 public addCustomExportedProvider (
321- provider : CustomFactory | CustomValue | CustomClass ,
304+ provider : FactoryProvider | ValueProvider | ClassProvider ,
322305 ) {
323306 const provide = provider . provide ;
324307 if ( isString ( provide ) || isSymbol ( provide ) ) {
@@ -389,7 +372,7 @@ export class Module {
389372 }
390373
391374 public getProviderStaticToken (
392- provider : string | symbol | Type < any > ,
375+ provider : string | symbol | Type < any > | Abstract < any > ,
393376 ) : string | symbol {
394377 return isFunction ( provider )
395378 ? ( provider as Function ) . name
@@ -429,7 +412,7 @@ export class Module {
429412 } ;
430413 }
431414
432- private getClassScope ( provider : ProviderMetatype ) : Scope {
415+ private getClassScope ( provider : Provider ) : Scope {
433416 const metadata = Reflect . getMetadata ( SCOPE_OPTIONS_METADATA , provider ) ;
434417 return metadata && metadata . scope ;
435418 }
0 commit comments