77 lines
2.9 KiB
TypeScript
77 lines
2.9 KiB
TypeScript
import { CustomDecorator } from '@nestjs/common';
|
|
import { InstanceWrapper } from '../injector/instance-wrapper';
|
|
import { Module } from '../injector/module';
|
|
import { ModulesContainer } from '../injector/modules-container';
|
|
/**
|
|
* @publicApi
|
|
*/
|
|
export interface FilterByInclude {
|
|
/**
|
|
* List of modules to include (whitelist) into the discovery process.
|
|
*/
|
|
include?: Function[];
|
|
}
|
|
/**
|
|
* @publicApi
|
|
*/
|
|
export interface FilterByMetadataKey {
|
|
/**
|
|
* A key to filter controllers and providers by.
|
|
* Only instance wrappers with the specified metadata key will be returned.
|
|
*/
|
|
metadataKey?: string;
|
|
}
|
|
/**
|
|
* @publicApi
|
|
*/
|
|
export type DiscoveryOptions = FilterByInclude | FilterByMetadataKey;
|
|
/**
|
|
* @publicApi
|
|
*/
|
|
export type DiscoverableDecorator<T> = ((opts?: T) => CustomDecorator) & {
|
|
KEY: string;
|
|
};
|
|
/**
|
|
* @publicApi
|
|
*/
|
|
export declare class DiscoveryService {
|
|
private readonly modulesContainer;
|
|
constructor(modulesContainer: ModulesContainer);
|
|
/**
|
|
* Creates a decorator that can be used to decorate classes and methods with metadata.
|
|
* The decorator will also add the class to the collection of discoverable classes (by metadata key).
|
|
* Decorated classes can be discovered using the `getProviders` and `getControllers` methods.
|
|
* @returns A decorator function.
|
|
*/
|
|
static createDecorator<T>(): DiscoverableDecorator<T>;
|
|
/**
|
|
* Returns an array of instance wrappers (providers).
|
|
* Depending on the options, the array will contain either all providers or only providers with the specified metadata key.
|
|
* @param options Discovery options.
|
|
* @param modules A list of modules to filter by.
|
|
* @returns An array of instance wrappers (providers).
|
|
*/
|
|
getProviders(options?: DiscoveryOptions, modules?: Module[]): InstanceWrapper[];
|
|
/**
|
|
* Returns an array of instance wrappers (controllers).
|
|
* Depending on the options, the array will contain either all controllers or only controllers with the specified metadata key.
|
|
* @param options Discovery options.
|
|
* @param modules A list of modules to filter by.
|
|
* @returns An array of instance wrappers (controllers).
|
|
*/
|
|
getControllers(options?: DiscoveryOptions, modules?: Module[]): InstanceWrapper[];
|
|
/**
|
|
* Retrieves metadata from the specified instance wrapper.
|
|
* @param decorator The decorator to retrieve metadata of.
|
|
* @param instanceWrapper Reference to the instance wrapper.
|
|
* @param methodKey An optional method key to retrieve metadata from.
|
|
* @returns Discovered metadata.
|
|
*/
|
|
getMetadataByDecorator<T extends DiscoverableDecorator<any>>(decorator: T, instanceWrapper: InstanceWrapper, methodKey?: string): T extends DiscoverableDecorator<infer R> ? R | undefined : T | undefined;
|
|
/**
|
|
* Returns a list of modules to be used for discovery.
|
|
*/
|
|
protected getModules(options?: DiscoveryOptions): Module[];
|
|
private includeWhitelisted;
|
|
}
|