/**
 * Format Handler Registry
 *
 * Central registry for all format handlers with factory pattern
 */
import { EventEmitter } from "node:events";
import type { IFormatHandler, SupportedFormat } from "../types/porter-types";
export interface FormatHandlerFactory {
    create(): IFormatHandler;
    supports: ("read" | "write" | "stream")[];
    description: string;
    defaultOptions?: unknown;
}
export declare class FormatHandlerRegistry extends EventEmitter {
    private readonly handlers;
    private readonly instances;
    constructor();
    /**
     * Register built-in format handlers
     */
    private registerBuiltInHandlers;
    /**
     * Register a format handler factory
     */
    register(format: SupportedFormat, factory: FormatHandlerFactory): void;
    /**
     * Get format handler instance
     */
    get(format: SupportedFormat, options?: unknown): IFormatHandler;
    /**
     * Check if format is supported
     */
    isSupported(format: SupportedFormat): boolean;
    /**
     * Check if format supports specific operation
     */
    supportsOperation(format: SupportedFormat, operation: "read" | "write" | "stream"): boolean;
    /**
     * List all supported formats
     */
    listFormats(): Array<{
        format: SupportedFormat;
        supports: ("read" | "write" | "stream")[];
        description: string;
        defaultOptions?: unknown;
    }>;
    /**
     * List formats that support specific operation
     */
    listFormatsByOperation(operation: "read" | "write" | "stream"): SupportedFormat[];
    /**
     * Get format information
     */
    getFormatInfo(format: SupportedFormat): {
        format: SupportedFormat;
        supports: ("read" | "write" | "stream")[];
        description: string;
        defaultOptions?: unknown;
    } | null;
    /**
     * Validate format with data
     */
    validate(format: SupportedFormat, data: unknown, schema?: unknown): Promise<unknown>;
    /**
     * Clear handler instance cache
     */
    clearCache(): void;
    /**
     * Clear cache for specific format
     */
    clearFormatCache(format: SupportedFormat): void;
    /**
     * Get registry statistics
     */
    getStats(): {
        registeredFormats: number;
        cachedInstances: number;
        formatsByOperation: {
            read: number;
            write: number;
            stream: number;
        };
    };
    /**
     * Unregister format handler
     */
    unregister(format: SupportedFormat): boolean;
    /**
     * Get registry health status
     */
    getHealthStatus(): {
        status: "healthy" | "degraded" | "unhealthy";
        details: unknown;
    };
    /**
     * Test format handler creation
     */
    testFormat(format: SupportedFormat, testData?: unknown): Promise<{
        success: boolean;
        error?: string;
        operations: {
            create: boolean;
            validate: boolean;
            serialize?: boolean;
            deserialize?: boolean;
        };
    }>;
}
