import { Constructor, Token } from './tokens.js'; import { OnDestroy, OnInit } from './lifecycle.js'; export declare enum Scope { SINGLETON = "singleton", REQUEST = "request", TRANSIENT = "transient", SESSION = "session" } export interface ParamFlags { optional?: boolean; self?: boolean; skipSelf?: boolean; lazy?: boolean; multiple?: boolean; } export interface ResolveOptions { request?: ResolutionContext; flags?: ParamFlags; scope?: Scope; } export declare class ResolutionContext { readonly requestId: `${string}-${string}-${string}-${string}-${string}`; requestCache: Map; depth: number; maxDepth: number; circularCheck: Set; constructor(requestId?: `${string}-${string}-${string}-${string}-${string}`); enter(token: any): boolean; exit(token: any): void; clear(): void; } export interface ProviderRecord { provider: AnyProvider; scope?: Scope | undefined; priority?: number | undefined; condition?: ((container: any) => boolean) | undefined; } export interface ValueProvider { provide: Token; useValue: T; scope?: Scope; priority?: number; condition?: (container: any) => boolean; } export interface ClassProvider { provide: Token; useClass: Constructor; scope?: Scope; priority?: number | undefined; condition?: ((container: any) => boolean) | undefined; } export interface FactoryProvider { provide: Token; useFactory: (container: any, ...args: any[]) => T | Promise; inject?: Token[]; scope?: Scope; priority?: number; condition?: (container: any) => boolean; } export interface ExistingProvider { provide: Token; useExisting: Token; scope?: Scope; priority?: number; condition?: (container: any) => boolean; } export type AnyProvider = ValueProvider | ClassProvider | FactoryProvider | ExistingProvider; export interface ContainerOptions { parent?: any; autoRegisterInjectable?: boolean; strictMode?: boolean; enableCircularDetection?: boolean; maxResolutionDepth?: number; } export interface RegistrationOptions { scope?: Scope; priority?: number; condition?: (container: any) => boolean; override?: boolean; } export interface Resolver { resolve(container: any, context: ResolutionContext): T | Promise; canResolve(token: Token): boolean; } export interface LifecycleManager { onInit(instance: OnInit): void; onDestroy(instance: OnDestroy): void; destroyAll(): Promise; } export interface Container extends LifecycleManager { register(providers: AnyProvider | AnyProvider[], options?: RegistrationOptions): void; registerSingleton(token: Token, factory: () => T | Promise): void; registerTransient(token: Token, factory: () => T | Promise): void; registerRequest(token: Token, factory: () => T | Promise): void; get(token: Token, options?: ResolveOptions): Promise; getAll(token: Token, options?: ResolveOptions): Promise; has(token: Token): boolean; createChild(options?: ContainerOptions): any; dispose(): Promise; } export interface ModuleMetadata { imports?: any[]; providers?: AnyProvider[]; exports?: Token[]; controllers?: Constructor[]; } export interface InjectableMetadata { scope?: Scope; priority?: number; condition?: (container: any) => boolean; autoRegister?: boolean; interfaces?: Token[]; } export interface InjectionMetadata { token?: any; optional?: boolean; self?: boolean; skipSelf?: boolean; lazy?: boolean; multiple?: boolean; transform?: (value: any) => any; } export type DependencyGraph = Map>; export interface ContainerStats { totalProviders: number; singletons: number; requestScoped: number; transient: number; circularDependencies: number; resolutionTime: number; } export interface ValidationResult { isValid: boolean; errors: string[]; warnings: string[]; circularDependencies: Token[][]; missingDependencies: { token: Token; missing: Token[]; }[]; } //# sourceMappingURL=types.d.ts.map