import { ProxyDiContainer } from './ProxyDiContainer'; export type DependencyId = string | symbol; export type AliasId = string | symbol; export type DependencyClass = new (...args: any[]) => T; export type Setter = (object: unknown, value: unknown) => void; export declare enum ResolveScope { Parent = 1,// 0b001 Current = 2,// 0b010 Children = 4,// 0b100 All = 7 } export type SingleInjection = { property: string | symbol; dependencyId: DependencyId; set: Setter; }; export type AllInjection = SingleInjection & { isAll: true; scope: ResolveScope; }; export type Injection = SingleInjection | AllInjection; /** * Type guard to check if injection is AllInjection */ export declare function isAllInjection(injection: Injection): injection is AllInjection; export type IProxyDiContainer = { id: number; settings: Required; parent?: IProxyDiContainer; isKnown: (dependencyId: DependencyId | DependencyClass, scope?: ResolveScope) => boolean; injectDependenciesTo: (dependency: any) => void; register: (dependency: any, dependencyId?: DependencyId | DependencyClass) => any; resolve: (dependencyId: DependencyId | DependencyClass, scope?: ResolveScope) => T & ContainerizedDependency; resolveAll(dependencyId: DependencyId | DependencyClass, scope?: ResolveScope): (T & ContainerizedDependency)[]; hasOwn: (dependencyId: DependencyId | DependencyClass) => boolean; createChildContainer: () => IProxyDiContainer; children: IProxyDiContainer[]; getChild(id: number): IProxyDiContainer; remove: (dependencyId: DependencyId | ContainerizedDependency) => void; bakeInjections(): void; destroy: () => void; }; export declare const INJECTIONS: unique symbol; /** * This symbol constant defines a property name. * This property is present in each dependency instance that was registered in ProxyDiContainer. * The property stores the dependency identifier that should be used to resolve dependency from the container where it was registered. */ export declare const DEPENDENCY_ID: unique symbol; /** * This symbol constant defines a property name. * This property is present in each dependency instance that was registered in ProxyDiContainer. * The property stores a reference to the ProxyDiContainer in which the dependency was registered. */ export declare const PROXYDI_CONTAINER: unique symbol; export declare const ON_CONTAINERIZED: unique symbol; export type OnContainerizedMethod = (container: ProxyDiContainer) => void; export type Injections = Record; export type Dependency = { [INJECTIONS]: Injections; }; /** * Respresent dependency instance that was registered in ProxyDi container */ export type ContainerizedDependency = Dependency & { /** * Unique identifier that could use to resolve this instance from container where it was registered */ [DEPENDENCY_ID]: DependencyId; /** * ProxyDi container in which this instance was registered */ [PROXYDI_CONTAINER]: IProxyDiContainer; }; export type ContainerSettings = { allowRewriteDependencies?: boolean; resolveInContainerContext?: boolean; }; export declare const IS_INJECTION_PROXY: unique symbol; export declare const INJECTION_OWNER: unique symbol; export declare const IS_INSTANCE_PROXY: unique symbol; export type InjectionProxy = { [IS_INJECTION_PROXY]: true; [INJECTION_OWNER]: ContainerizedDependency; [PROXYDI_CONTAINER]: IProxyDiContainer; };