import type { ServiceDefinition, ServiceInstance, ServiceContext } from './types.js'; export declare class ServiceCircularDependencyError extends Error { readonly cycle: string[]; constructor(cycle: string[]); } export declare class ServiceNotFoundError extends Error { readonly serviceName: string; constructor(serviceName: string); } export declare class DuplicateServiceError extends Error { readonly serviceName: string; constructor(serviceName: string); } /** * Manages service definitions and lazily-created singleton instances. * Services declare dependencies by name; the registry resolves them on first access. */ export declare class ServiceRegistry { /** Registered service blueprints (name -> definition). */ private definitions; /** Cached singleton instances, created on first `get()` call. */ private instances; /** Tracks which services are mid-resolution to detect runtime cycles. */ private resolving; /** Register a service definition. Throws if the name is already taken. */ register(definition: ServiceDefinition): void; /** Check whether a service name has been registered. */ has(name: string): boolean; /** Return the raw definition for a service, or undefined if not registered. */ getDefinition(name: string): ServiceDefinition | undefined; /** Return all registered definitions. */ getAll(): ServiceDefinition[]; /** * Walk the full dependency graph up-front and throw if any cycle exists. * Uses depth-first traversal with a recursion stack to detect back-edges. */ detectCircularDependencies(): void; /** * Resolve a service by name: return the cached instance or create it via its factory. * Dependencies are resolved recursively through the same mechanism. */ get(name: string, baseContext: Omit): ServiceInstance; /** Discard all cached instances (definitions remain registered). */ reset(): void; /** Invoke a service factory with a context that can resolve sibling services. */ private createInstance; } //# sourceMappingURL=registry.d.ts.map