import { InjectionToken } from "../../token/injection-token.mjs"; import { InjectableScope } from "../../enums/injectable-scope.enum.mjs"; import { Registry } from "../../token/registry.mjs"; import { NameResolver } from "./name-resolver.mjs"; import { DIError } from "../../errors/di-error.mjs"; import { IHolderStorage } from "../holder/holder-storage.interface.mjs"; //#region src/internal/core/scope-tracker.d.mts /** * Component for tracking and handling scope upgrades. * * Detects when a Singleton service needs to be upgraded to Request scope * and coordinates the scope upgrade process atomically. */ declare class ScopeTracker { private readonly registry; private readonly nameResolver; private readonly logger; constructor(registry: Registry, nameResolver: NameResolver, logger?: Console | null); /** * Checks if a dependency requires scope upgrade and performs it if needed. * Called during service resolution when a dependency is resolved. * * @param currentServiceName - Name of the service being created * @param currentServiceScope - Current scope of the service being created * @param dependencyName - Name of the dependency being resolved * @param dependencyScope - Scope of the dependency * @param dependencyToken - Token of the dependency * @param singletonStorage - Singleton storage instance * @param requestStorage - Request storage instance (if in request context) * @param requestId - Request ID (if in request context) * @returns [needsUpgrade: boolean, newName?: string] - whether upgrade occurred and new name */ checkAndUpgradeScope(currentServiceName: string, currentServiceScope: InjectableScope, dependencyName: string, dependencyScope: InjectableScope, dependencyToken: InjectionToken, singletonStorage: IHolderStorage, requestStorage?: IHolderStorage, requestId?: string): [boolean, string?]; /** * Performs the actual scope upgrade from Singleton to Request. * This is the core migration logic. * * @param serviceName - Current service name (without requestId) * @param token - Service injection token * @param singletonStorage - Source storage * @param requestStorage - Target storage * @param requestId - Request ID to include in new name * @returns [success: boolean, newName?: string, error?: DIError] */ upgradeScopeToRequest(serviceName: string, token: InjectionToken, singletonStorage: IHolderStorage, requestStorage: IHolderStorage, requestId: string): Promise<[boolean, string?, DIError?]>; /** * Synchronous part of scope upgrade - handles immediate updates. * Async operations (like waiting for holder creation) should be done separately. */ private upgradeScopeToRequestSync; /** * Updates all parent dependencies to reference the new service name. * * @param oldName - Original service name * @param newName - New service name with requestId * @param singletonStorage - Singleton storage to check * @param requestStorage - Request storage to check */ updateParentDependencies(oldName: string, newName: string, singletonStorage: IHolderStorage, requestStorage?: IHolderStorage): void; } //#endregion export { ScopeTracker }; //# sourceMappingURL=scope-tracker.d.mts.map