/** * F5 CLI - Document Validator * Validate requirements against customizable rules * * @module @f5/cli/core/doc-validator * @version 1.0.0 */ import type { Requirement } from './excel-processor.js'; export type ValidationSeverity = 'error' | 'warning' | 'info'; export interface ValidationRule { id: string; name: string; description: string; severity: ValidationSeverity; field?: string; condition: RuleCondition; message: string; enabled?: boolean; } export type RuleCondition = { type: 'required'; } | { type: 'minLength'; value: number; } | { type: 'maxLength'; value: number; } | { type: 'pattern'; value: string; } | { type: 'enum'; values: string[]; } | { type: 'unique'; } | { type: 'custom'; validator: string; }; export interface ValidationIssue { ruleId: string; ruleName: string; severity: ValidationSeverity; message: string; requirementId?: string; field?: string; value?: unknown; suggestion?: string; } export interface ValidationResult { valid: boolean; totalRequirements: number; issues: ValidationIssue[]; summary: { errors: number; warnings: number; info: number; }; passedRules: string[]; failedRules: string[]; } export interface ValidationConfig { rules: ValidationRule[]; customValidators?: Record ValidationIssue | null>; } export declare const DEFAULT_RULES: ValidationRule[]; export declare class DocumentValidator { private rules; private customValidators; constructor(config?: Partial); /** * Load rules from a YAML file */ loadRulesFromFile(filePath: string): Promise; /** * Validate requirements against all rules */ validate(requirements: Requirement[]): ValidationResult; /** * Validate a single requirement against a rule */ private validateRequirement; /** * Add a custom validator */ addCustomValidator(name: string, validator: (req: Requirement, all: Requirement[]) => ValidationIssue | null): void; /** * Enable or disable a rule */ setRuleEnabled(ruleId: string, enabled: boolean): void; /** * Get all rules */ getRules(): ValidationRule[]; /** * Print validation result */ printResult(result: ValidationResult): void; } /** * Create default rules YAML template */ export declare function generateRulesTemplate(): string;