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
TypeScript
/**
* 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