import type { InfraRegistryEntry } from "../../types/index.js";
/**
 * Local alias: the canonical type was renamed to InfraRegistryEntry to avoid
 * collision with other RegistryEntry types in the codebase.
 */
export type RegistryEntry<TItem, TMetadata = unknown> = InfraRegistryEntry<TItem, TMetadata>;
export declare abstract class BaseRegistry<TItem, TMetadata = unknown> {
    protected items: Map<string, RegistryEntry<TItem, TMetadata>>;
    protected initialized: boolean;
    protected initPromise: Promise<void> | null;
    protected abstract registerAll(): Promise<void>;
    ensureInitialized(): Promise<void>;
    register(id: string, factory: () => Promise<TItem>, aliases?: string[], options?: {
        metadata: TMetadata;
    }): void;
    get(id: string): Promise<TItem | undefined>;
    has(id: string): boolean;
    list(): Array<{
        id: string;
        metadata: TMetadata;
    }>;
    clear(): void;
    isInitialized(): boolean;
}
