Skip to content

Commit 8664505

Browse files
refactor(core): provider types refactor
1 parent 275a97a commit 8664505

2 files changed

Lines changed: 30 additions & 47 deletions

File tree

packages/common/interfaces/modules/provider.interface.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,6 @@ export interface ValueProvider<T = any> {
2222
export interface FactoryProvider<T = any> {
2323
provide: string | symbol | Type<any> | Abstract<any> | Function;
2424
useFactory: (...args: any[]) => T;
25-
inject?: Array<Type<any> | string | any>;
25+
inject?: Array<Type<any> | string | symbol | Abstract<any> | Function>;
2626
scope?: Scope;
2727
}

packages/core/injector/module.ts

Lines changed: 29 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,14 @@ import { Scope } from '@nestjs/common';
22
import { SCOPE_OPTIONS_METADATA } from '@nestjs/common/constants';
33
import {
44
Abstract,
5+
ClassProvider,
56
Controller,
67
DynamicModule,
8+
FactoryProvider,
79
Injectable,
810
NestModule,
11+
Provider,
12+
ValueProvider,
913
} from '@nestjs/common/interfaces';
1014
import { Type } from '@nestjs/common/interfaces/type.interface';
1115
import { randomStringGenerator } from '@nestjs/common/utils/random-string-generator.util';
@@ -23,32 +27,9 @@ import { NestContainer } from './container';
2327
import { InstanceWrapper } from './instance-wrapper';
2428
import { 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

5334
export 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

Comments
 (0)