/**
 * Dependency Injection Error Classes
 *
 * This module provides error classes for DI-related failures.
 * These errors are thrown during dependency resolution, binding, or scope management.
 *
 * @module declarative-api/errors/di-errors
 */
import type { BindingId, DIScope } from '../../../lib/runtime-web/types/declarative-api/di-container.types';
import { InfrastructureError } from './infrastructure-error';
/**
 * Error thrown when dependency resolution fails.
 *
 * @example
 * ```typescript
 * try {
 *   container.resolve(BINDING_ID);
 * } catch (error) {
 *   if (isDependencyResolutionError(error)) {
 *     console.log(`Failed to resolve: ${error.bindingIdString}`);
 *   }
 * }
 * ```
 */
export declare class DependencyResolutionError extends InfrastructureError {
    readonly bindingId: BindingId;
    readonly name: string;
    /** String representation of the binding ID */
    readonly bindingIdString: string;
    constructor(bindingId: BindingId, message: string, options?: {
        component?: string;
        operation?: string;
        cause?: Error;
    });
}
/**
 * Type guard for DependencyResolutionError.
 */
export declare function isDependencyResolutionError(error: unknown): error is DependencyResolutionError;
/**
 * Error thrown when a binding is not found.
 */
export declare class BindingNotFoundError extends InfrastructureError {
    readonly bindingId: BindingId;
    readonly name: string;
    /** String representation of the binding ID */
    readonly bindingIdString: string;
    constructor(bindingId: BindingId, options?: {
        component?: string;
        operation?: string;
        availableBindings?: readonly BindingId[];
    });
}
/**
 * Type guard for BindingNotFoundError.
 */
export declare function isBindingNotFoundError(error: unknown): error is BindingNotFoundError;
/**
 * Error thrown when a binding already exists and cannot be overridden.
 */
export declare class DuplicateBindingError extends InfrastructureError {
    readonly bindingId: BindingId;
    readonly name: string;
    /** String representation of the binding ID */
    readonly bindingIdString: string;
    constructor(bindingId: BindingId, options?: {
        component?: string;
        operation?: string;
        isOverridable?: boolean;
    });
}
/**
 * Type guard for DuplicateBindingError.
 */
export declare function isDuplicateBindingError(error: unknown): error is DuplicateBindingError;
/**
 * Error thrown when a scope operation fails.
 */
export declare class ScopeError extends InfrastructureError {
    readonly scopeId: string;
    readonly scope: DIScope;
    readonly name: string;
    constructor(scopeId: string, scope: DIScope, message: string, options?: {
        component?: string;
        operation?: string;
        cause?: Error;
    });
}
/**
 * Type guard for ScopeError.
 */
export declare function isScopeError(error: unknown): error is ScopeError;
/**
 * Error thrown when the container has been disposed.
 */
export declare class ContainerDisposedError extends InfrastructureError {
    readonly operation: string;
    readonly name: string;
    constructor(operation: string, options?: {
        component?: string;
    });
}
/**
 * Type guard for ContainerDisposedError.
 */
export declare function isContainerDisposedError(error: unknown): error is ContainerDisposedError;
/**
 * Error thrown when circular dependency is detected.
 */
export declare class CircularDependencyError extends InfrastructureError {
    readonly dependencyChain: readonly string[];
    readonly name: string;
    constructor(dependencyChain: readonly string[], options?: {
        component?: string;
        operation?: string;
    });
}
/**
 * Type guard for CircularDependencyError.
 */
export declare function isCircularDependencyError(error: unknown): error is CircularDependencyError;
