/** * ElementValidator - Interface for element-type specific validators * * Defines the contract for all element validators in the ValidationRegistry. * Each element type can have its own validator implementation that provides * specialized validation logic while conforming to this common interface. * * @example * ```typescript * const validator = validationRegistry.getValidator(ElementType.PERSONA); * const result = await validator.validateCreate(personaData); * if (!result.isValid) { * throw new Error(result.errors.join(', ')); * } * ``` */ import { ElementType } from '../../portfolio/types.js'; /** * Result of a validation operation */ export interface ValidationResult { /** Whether the validation passed */ isValid: boolean; /** List of validation errors (if any) */ errors: string[]; /** List of validation warnings (non-fatal issues) */ warnings: string[]; /** Suggestions for improvement (optional) */ suggestions?: string[]; } /** * Detailed validation report for an element */ export interface ValidationReport { /** Overall status of validation */ status: 'pass' | 'fail' | 'warning'; /** Summary description of validation result */ summary: string; /** Detailed validation findings */ details: string[]; /** When the validation was performed */ timestamp: Date; /** Optional element-specific metrics */ metrics?: { /** Content length in characters */ contentLength?: number; /** Number of triggers defined */ triggerCount?: number; /** Estimated quality score (0-100) */ qualityScore?: number; }; } /** * Options for element validation */ export interface ElementValidationOptions { /** Whether to perform strict validation (default: false) */ strict?: boolean; /** Skip content validation (for performance) */ skipContentValidation?: boolean; /** Maximum content length to validate */ maxContentLength?: number; /** Context for validation (e.g., 'create', 'edit', 'import') */ context?: 'create' | 'edit' | 'import' | 'validate'; } /** * Metadata validation options */ export interface MetadataValidationOptions { /** Fields that are required */ requiredFields?: string[]; /** Fields that should be validated for format */ formatFields?: Record; /** Maximum lengths for string fields */ maxLengths?: Record; } /** * Interface for element-type specific validators * * Each element type (persona, skill, template, etc.) can have its own * validator implementation that provides specialized validation logic. */ export interface ElementValidator { /** * The element type this validator handles */ readonly elementType: ElementType; /** * Validate data for element creation * * @param data - Raw data for creating an element * @param options - Validation options * @returns Promise resolving to validation result */ validateCreate(data: unknown, options?: ElementValidationOptions): Promise; /** * Validate changes to an existing element * * @param element - The existing element * @param changes - Proposed changes to the element * @param options - Validation options * @returns Promise resolving to validation result */ validateEdit(element: unknown, changes: unknown, options?: ElementValidationOptions): Promise; /** * Validate element metadata * * @param metadata - Element metadata to validate * @param options - Metadata validation options * @returns Promise resolving to validation result */ validateMetadata(metadata: unknown, options?: MetadataValidationOptions): Promise; /** * Generate a comprehensive validation report for an element * * @param element - Element to generate report for * @returns Promise resolving to validation report */ generateReport(element: unknown): Promise; } /** * Base implementation helpers for validators */ export declare const ValidatorHelpers: { /** * Create a passing validation result */ pass(suggestions?: string[]): ValidationResult; /** * Create a failing validation result */ fail(errors: string[], warnings?: string[]): ValidationResult; /** * Create a result with warnings but still valid */ warn(warnings: string[], suggestions?: string[]): ValidationResult; /** * Merge multiple validation results */ merge(...results: ValidationResult[]): ValidationResult; }; //# sourceMappingURL=ElementValidator.d.ts.map