import type { FactoryProvider } from './types/factory-provider.js'; import type { InjectableClass } from './types/injectable-class.js'; import type { Token } from './types/tokens.js'; import { ScopeBuilder } from './scope-builder.js'; import { ScopedContainer } from './scoped-container.js'; /** * Data for a scoped class registration. */ export interface ScopedClassData { Class: InjectableClass[]>; deps: readonly Token[]; } /** * Data required to construct a Container. * This is the "state" that ContainerBuilder prepares. */ export interface ContainerState { instances: Map, unknown>; factoryProviders: Map, FactoryProvider>; valueProviders: Set>; initOrder: Token[]; scopedClassProviders: Map, ScopedClassData>; scopedFactoryProviders: Map, FactoryProvider>; scopedValueTokens: Set>; } export declare class Container { private readonly instances; private readonly factoryProviders; private readonly valueProviders; private readonly initOrder; private readonly scopedClassProviders; private readonly scopedFactoryProviders; private readonly scopedValueTokens; private isInitialized; constructor(state: ContainerState); /** * Get an instance by its token. */ get(token: Token): T; /** * Create a new scoped container for scoped instances. * Scoped instances are created on-demand within the container and destroyed when the scoped container is destroyed. */ createScope(): ScopedContainer; /** * Create a ScopeBuilder for constructing a scoped container with provided values. * Use this when you have scoped value tokens that need to be supplied per-scope. */ createScopeBuilder(): ScopeBuilder; /** * Initialize all instances - calls onInit() in topological order (dependencies before dependents). * Only class-registered instances have onInit called (not values or factories). */ init(): Promise; /** * Destroy all instances - calls onDestroy() in reverse topological order (dependents before dependencies). */ destroy(): Promise; } //# sourceMappingURL=container.d.ts.map