import { Injector } from './injector'; export interface Abstract { prototype: T; } export declare type ServiceIdentifier = string | symbol | Type | Abstract; export declare type Type = new (...args: any[]) => T; export interface ValueProvider extends BaseProvider { useValue: T; } export interface ClassProvider extends BaseProvider { useClass: Type; } export declare type Factory = (injector: Injector) => T; export interface FactoryProvider extends BaseProvider { useFactory: Factory; } export interface BaseProvider extends ProviderOptions { provide: ServiceIdentifier; } export interface TypeProvider extends Type { } export declare type Provider = TypeProvider | ValueProvider | ClassProvider | FactoryProvider; export interface ProviderOptions { overwrite?: boolean; scope?: ProviderScope; } export declare enum ProviderScope { Application = "APPLICATION", Request = "REQUEST", Session = "SESSION" } export declare type Instances>> = { [Key in keyof Dependencies]: Dependencies[Key] extends Type ? InstanceType : any; }; export declare type ExtendedSession = Session & { nameSessionInjectorMap: Map; };