/**
 * Plugin Order Validator
 *
 * Validates that remark plugins are executed in the correct order based on
 * their declared dependencies. This prevents runtime bugs caused by incorrect
 * plugin ordering.
 *
 * @module plugins/remark/plugin-order-validator
 */
import type { PluginMetadata, PluginMetadataRegistry, PluginOrderValidationResult, PluginOrderError, PluginOrderValidationOptions } from './types.js';
/**
 * Validator for plugin execution order
 *
 * This class validates that plugins are executed in an order that satisfies
 * all declared dependencies and constraints.
 *
 * @example
 * ```typescript
 * const validator = new PluginOrderValidator(registry);
 * const result = validator.validate(
 *   ['remarkImports', 'remarkTemplateFields', 'remarkLegalHeadersParser']
 * );
 *
 * if (!result.valid) {
 *   console.error('Invalid plugin order:', result.errors);
 *   console.log('Suggested order:', result.suggestedOrder);
 * }
 * ```
 */
export declare class PluginOrderValidator {
    private registry;
    constructor(registry: PluginMetadataRegistry);
    /**
     * Validate plugin execution order
     *
     * @param pluginNames - List of plugin names in execution order
     * @param options - Validation options
     * @returns Validation result with errors and warnings
     */
    validate(pluginNames: string[], options?: PluginOrderValidationOptions): PluginOrderValidationResult;
    /**
     * Detect circular dependencies in plugin metadata
     *
     * @param pluginNames - List of plugin names
     * @returns List of errors for circular dependencies found
     */
    private detectCircularDependencies;
    /**
     * Perform topological sort on plugins to find a valid execution order
     *
     * Uses Kahn's algorithm for topological sorting.
     *
     * @param pluginNames - List of plugin names to sort
     * @returns Sorted list of plugin names
     * @throws Error if plugins have circular dependencies
     */
    topologicalSort(pluginNames: string[]): string[];
    /**
     * Get metadata for a plugin
     *
     * @param pluginName - Name of the plugin
     * @returns Plugin metadata or undefined if not found
     */
    getMetadata(pluginName: string): PluginMetadata | undefined;
    /**
     * Add or update metadata for a plugin
     *
     * @param metadata - Plugin metadata to add/update
     */
    registerPlugin(metadata: PluginMetadata): void;
    /**
     * Validate that all required capabilities are provided
     *
     * Checks that for each plugin's requiresCapabilities, there is at least
     * one earlier plugin in the execution order that provides that capability.
     *
     * @param pluginNames - List of plugin names in execution order
     * @param options - Validation options
     * @returns Array of capability validation errors
     */
    validateCapabilities(pluginNames: string[], options?: {
        debug?: boolean;
    }): PluginOrderError[];
}
/**
 * Create a plugin metadata registry from an array of metadata
 *
 * @param metadataList - Array of plugin metadata
 * @returns Plugin metadata registry
 */
export declare function createPluginRegistry(metadataList: PluginMetadata[]): PluginMetadataRegistry;
//# sourceMappingURL=plugin-order-validator.d.ts.map