UNPKG

legal-markdown-js

Version:

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

223 lines 7.24 kB
/** * Pipeline Manager for Legal Markdown Processing * * This module provides the core pipeline management system for Legal Markdown * processing. It orchestrates the execution of multiple processing steps in a * configurable, observable, and fault-tolerant manner. * * Features: * - Step-by-step processing with dependency management * - Comprehensive error handling and recovery * - Performance monitoring and metrics collection * - Field tracking integration * - Event-driven architecture with listeners * - Configurable execution strategies * - Fallback mechanisms for reliability * - Debug and profiling capabilities * * @example * ```typescript * import { PipelineManager } from './pipeline-manager'; * import { ConsolePipelineLogger } from './pipeline-logger'; * * const logger = new ConsolePipelineLogger({ level: 'debug' }); * const pipeline = new PipelineManager(logger); * * // Register steps * pipeline.registerStep({ * name: 'mixins', * processor: new MixinProcessor(), * order: 7, * enabled: true * }); * * // Execute pipeline * const result = await pipeline.execute(content, metadata, options); * ``` * * @module */ import { PipelineStep, PipelineResult, ProcessingError, PipelineConfig, PipelineState, PipelineExecutionOptions, PipelineEventListener } from './types'; import { PipelineLogger } from './pipeline-logger'; /** * Central pipeline manager for orchestrating Legal Markdown processing * * The PipelineManager coordinates the execution of multiple processing steps, * providing comprehensive monitoring, error handling, and performance tracking. * It serves as the backbone for the new Legal Markdown processing architecture. * * @class PipelineManager * @example * ```typescript * const pipeline = new PipelineManager(); * * // Configure steps * pipeline.registerStep({ * name: 'yaml-parsing', * processor: new YamlProcessor(), * order: 1, * enabled: true * }); * * pipeline.registerStep({ * name: 'mixins', * processor: new MixinProcessor(), * order: 7, * enabled: true, * dependencies: ['yaml-parsing'] * }); * * // Execute with options * const result = await pipeline.execute(content, metadata, { * legalMarkdownOptions: { enableFieldTracking: true }, * enableStepProfiling: true * }); * * console.log(`Processed ${result.content.length} characters`); * console.log(`Tracked ${result.fieldReport?.total} fields`); * ``` */ export declare class PipelineManager { private steps; private logger; private listeners; private state; /** * Creates a new PipelineManager instance * * @param logger - Optional logger for pipeline events (defaults to console logger in development) * @param config - Optional initial configuration */ constructor(logger?: PipelineLogger, config?: Partial<PipelineConfig>); /** * Register a processing step with the pipeline * * @param step - The pipeline step configuration * @throws {Error} If step name is already registered or invalid * @example * ```typescript * pipeline.registerStep({ * name: 'custom-processor', * processor: new CustomProcessor(), * order: 10, * enabled: true, * dependencies: ['mixins'], * timeout: 5000, * description: 'Custom document processing' * }); * ``` */ registerStep(step: PipelineStep): void; /** * Unregister a processing step from the pipeline * * @param stepName - Name of the step to remove * @returns True if step was found and removed */ unregisterStep(stepName: string): boolean; /** * Get information about a registered step * * @param stepName - Name of the step to query * @returns Step configuration or undefined if not found */ getStep(stepName: string): PipelineStep | undefined; /** * Get all registered steps ordered by execution order * * @returns Array of steps sorted by order */ getSteps(): PipelineStep[]; /** * Add an event listener for pipeline events * * @param listener - Event listener implementation * @example * ```typescript * pipeline.addListener({ * onStepStart: (stepName) => console.log(`Starting ${stepName}`), * onStepComplete: (result) => console.log(`Completed ${result.stepName}`), * onPipelineComplete: (result) => console.log('Pipeline finished') * }); * ``` */ addListener(listener: PipelineEventListener): void; /** * Remove an event listener * * @param listener - Listener to remove * @returns True if listener was found and removed */ removeListener(listener: PipelineEventListener): boolean; /** * Execute the complete processing pipeline * * This is the main entry point for pipeline execution. It processes the content * through all registered steps in the correct order, handling dependencies, * errors, and performance tracking. * * @param content - The document content to process * @param metadata - Document metadata (YAML front matter, etc.) * @param options - Execution options and Legal Markdown options * @returns Promise resolving to complete pipeline result * @throws {Error} For critical pipeline failures * @example * ```typescript * const result = await pipeline.execute( * '# Document\n\n{{client.name}} agreement...', * { client: { name: 'Acme Corp' } }, * { * legalMarkdownOptions: { * enableFieldTracking: true, * enableFieldTrackingInMarkdown: true * }, * enableStepProfiling: true * } * ); * * if (result.success) { * console.log('Processing completed successfully'); * console.log(`Final content: ${result.content.length} characters`); * } else { * console.error('Processing failed:', result.errors); * } * ``` */ execute(content: string, metadata: Record<string, any>, options: PipelineExecutionOptions): Promise<PipelineResult>; /** * Abort pipeline execution * * @param reason - Reason for aborting */ abort(reason?: string): void; /** * Get current pipeline state * * @returns Current pipeline state */ getState(): Readonly<PipelineState>; /** * Validate pipeline configuration * * @param options - Execution options to validate * @returns Array of validation errors (empty if valid) */ validateConfiguration(options: PipelineExecutionOptions): ProcessingError[]; private createDefaultLogger; private initializeState; private buildPipelineConfig; private getExecutionOrder; private shouldExecuteStep; private executeStep; private executeWithTimeout; private checkDependencies; private topologicalSort; private detectCircularDependencies; private generateFieldReport; private collectExportedFiles; private updateContentHistory; private createProcessingError; private createGenericError; private emitEvent; } //# sourceMappingURL=pipeline-manager.d.ts.map