import { ApplicationConfig } from './application-config';
import { EnhancerSubtype } from '../helpers';
import { InstanceWrapper, Module, ContainerIoC } from '../core';
import { MetadataScanner } from './metadata-scanner';
import { ClassProvider, DynamicModuleInterface, ExistingProvider, FactoryProvider, ForwardReferenceInterface, Type, ValueProvider } from '../contracts';
import { ControllerType, InjectableType, ProviderType } from '../types';
import { GraphInspector } from '../inspector';
export declare class DependenciesScanner {
    private readonly container;
    private readonly metadataScanner;
    private readonly graphInspector;
    private readonly applicationConfig;
    private readonly applicationProvidersApplyMap;
    constructor(container: ContainerIoC, metadataScanner: MetadataScanner, graphInspector: GraphInspector, applicationConfig?: ApplicationConfig);
    scan(module: Type<any>): Promise<void>;
    scanForModules(moduleDefinition: ForwardReferenceInterface | Type<unknown> | DynamicModuleInterface | Promise<DynamicModuleInterface>, scope?: Type<unknown>[], ctxRegistry?: (ForwardReferenceInterface | DynamicModuleInterface | Type<unknown>)[]): Promise<Module[]>;
    insertModule(module: any, scope: Type<unknown>[]): Promise<Module | undefined>;
    scanModulesForDependencies(modules?: Map<string, Module>): Promise<void>;
    reflectImports(module: Type<unknown>, token: string, context: string): Promise<void>;
    reflectProviders(module: Type<any>, token: string): void;
    reflectControllers(module: Type<any>, token: string): void;
    reflectDynamicMetadata(obj: Type<InjectableType>, token: string): void;
    reflectExports(module: Type<unknown>, token: string): void;
    reflectInjectables(component: Type<InjectableType>, token: string, metadataKey: string): void;
    reflectParamInjectables(component: Type<InjectableType>, token: string, metadataKey: string): void;
    reflectKeyMetadata(component: Type<InjectableType>, key: string, method: string): any;
    calculateModulesDistance(): Promise<void>;
    insertImport(related: any, token: string, context: string): Promise<void>;
    isCustomProvider(provider: ProviderType): provider is ClassProvider | ValueProvider | FactoryProvider | ExistingProvider;
    insertProvider(provider: ProviderType, token: string): string | symbol | Function;
    insertInjectable(injectable: Type<InjectableType> | Object, token: string, host: Type<InjectableType>, subtype: EnhancerSubtype, methodKey?: string): InstanceWrapper<any>;
    insertExportedProvider(exportedProvider: Type<InjectableType>, token: string): void;
    insertController(controller: Type<ControllerType>, token: string): void;
    reflectMetadata(metaType: Type<any>, metadataKey: string): any;
    registerCoreModule(): Promise<void>;
    addScopedEnhancersMetadata(): void;
    applyApplicationProviders(): void;
    getApplyProvidersMap(): {
        [type: string]: Function;
    };
    getApplyRequestProvidersMap(): {
        [type: string]: Function;
    };
    isDynamicModule(module: Type<any> | DynamicModuleInterface): module is DynamicModuleInterface;
    isForwardReference(module: Type<any> | DynamicModuleInterface | ForwardReferenceInterface): module is ForwardReferenceInterface;
    private static flatten;
    private static isRequestOrTransient;
}
//# sourceMappingURL=scanner.d.ts.map