/**
 * Metadata Extractor Factory
 *
 * Factory for creating metadata extractor instances with configuration.
 * Follows the BaseFactory pattern for consistent lifecycle management.
 */
import { BaseFactory } from "../../core/infrastructure/index.js";
import type { MetadataExtractor, MetadataExtractorConfig, MetadataExtractorMetadata, MetadataExtractorType } from "../../types/index.js";
/**
 * Metadata Extractor Factory
 *
 * Creates metadata extractor instances based on type with configuration support.
 * Uses lazy loading via dynamic imports to avoid circular dependencies.
 */
export declare class MetadataExtractorFactory extends BaseFactory<MetadataExtractor, MetadataExtractorConfig> {
    private static instance;
    private metadataMap;
    private constructor();
    /**
     * Get singleton instance
     */
    static getInstance(): MetadataExtractorFactory;
    /**
     * Reset singleton (for testing)
     */
    static resetInstance(): void;
    /**
     * Register all default extractors
     */
    protected registerAll(): Promise<void>;
    /**
     * Wrap LLMMetadataExtractor to conform to MetadataExtractor interface
     */
    private wrapExtractor;
    /**
     * Create specialized extractor that only extracts specific types
     */
    private createSpecializedExtractor;
    /**
     * Register an extractor with metadata and aliases
     */
    registerExtractor(type: MetadataExtractorType, factory: (config?: MetadataExtractorConfig) => Promise<MetadataExtractor>, metadata: MetadataExtractorMetadata): void;
    /**
     * Create an extractor by type or alias
     */
    createExtractor(typeOrAlias: string, config?: MetadataExtractorConfig): Promise<MetadataExtractor>;
    /**
     * Get metadata for an extractor
     */
    getExtractorMetadata(typeOrAlias: string): MetadataExtractorMetadata | undefined;
    /**
     * Get default configuration for an extractor
     */
    getDefaultConfig(typeOrAlias: string): Partial<MetadataExtractorConfig> | undefined;
    /**
     * Get available extractor types (not including aliases)
     */
    getAvailableTypes(): MetadataExtractorType[];
    /**
     * Get all aliases mapped to their types
     */
    getTypeAliases(): Map<string, string>;
    /**
     * Check if a type exists
     */
    hasType(typeOrAlias: string): boolean;
    /**
     * Get extractors suitable for a use case
     */
    getExtractorsForUseCase(useCase: string): MetadataExtractorType[];
    /**
     * Get extractors that can produce a specific extraction type
     */
    getExtractorsForExtractionType(extractionType: string): MetadataExtractorType[];
    /**
     * Get all extractor metadata
     */
    getAllMetadata(): Map<MetadataExtractorType, MetadataExtractorMetadata>;
    /**
     * Clear factory and metadata
     */
    clear(): void;
}
/**
 * Global metadata extractor factory singleton
 */
export declare const metadataExtractorFactory: MetadataExtractorFactory;
/**
 * Convenience function to create a metadata extractor
 */
export declare function createMetadataExtractor(typeOrAlias: string, config?: MetadataExtractorConfig): Promise<MetadataExtractor>;
/**
 * Convenience function to get available extractor types
 */
export declare function getAvailableExtractorTypes(): MetadataExtractorType[];
/**
 * Convenience function to get extractor metadata
 */
export declare function getExtractorMetadata(typeOrAlias: string): MetadataExtractorMetadata | undefined;
/**
 * Convenience function to get default config
 */
export declare function getExtractorDefaultConfig(typeOrAlias: string): Partial<MetadataExtractorConfig> | undefined;
