UNPKG

legal-markdown-js

Version:

Node.js implementation of LegalMarkdown for processing legal documents with markdown and YAML - Complete feature parity with Ruby version

92 lines 3.25 kB
/** * 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