import { ComponentMetadata, RegistryConfig } from '../types/index.js';
import { ComponentObject } from '@memberjunction/interactive-component-types';
export declare class ComponentRegistry {
    private registry;
    private config;
    private cleanupTimer?;
    readonly registryId: string;
    constructor(config?: Partial<RegistryConfig>);
    register(name: string, component: ComponentObject, namespace?: string, version?: string, contentHash?: string, tags?: string[]): ComponentMetadata;
    get(name: string, namespace?: string, version?: string, contentHash?: string): ComponentObject | undefined;
    has(name: string, namespace?: string, version?: string, contentHash?: string): boolean;
    unregister(name: string, namespace?: string, version?: string, contentHash?: string): boolean;
    getNamespace(namespace: string): ComponentMetadata[];
    getAll(namespace?: string, version?: string): Record<string, ComponentObject>;
    getNamespaces(): string[];
    getByTags(tags: string[]): ComponentMetadata[];
    release(name: string, namespace?: string, version?: string, contentHash?: string): void;
    clear(): void;
    clearNamespace(namespace?: string): number;
    forceClear(): void;
    size(): number;
    cleanup(force?: boolean): number;
    getStats(): {
        totalComponents: number;
        namespaces: number;
        totalRefCount: number;
        oldestComponent?: Date;
        newestComponent?: Date;
    };
    destroy(): void;
    private generateRegistryKey;
    private resolveLookupKey;
    private findLatestForVersion;
    private findLatestVersion;
    private evictLRU;
    private startCleanupTimer;
    private stopCleanupTimer;
}
//# sourceMappingURL=component-registry.d.ts.map