UNPKG

cs-element

Version:

Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support

238 lines 7.76 kB
/** * Плагин валидации для CSElement * Обеспечивает проверку данных, схем и ограничений с полной поддержкой JSON Schema */ import Ajv, { ValidateFunction, ErrorObject } from 'ajv'; import { JSONSchema7 } from 'json-schema'; import { CSElementPlugin, LifecycleHooks, PluginOptions } from '../types/plugin-interfaces'; import { ICSElement } from '../types/interfaces'; import { CSElement } from '../core/CSElement'; /** * Типы валидации */ export declare enum ValidationType { REQUIRED = "required", TYPE = "type", RANGE = "range", PATTERN = "pattern", CUSTOM = "custom", SCHEMA = "schema", JSON_SCHEMA = "json_schema" } /** * Правило валидации для плагина */ export interface ValidationRule { type: ValidationType; field: string; message?: string; expectedType?: string; min?: number; max?: number; pattern?: string; validator?: (value: any) => boolean | string; jsonSchema?: JSONSchema7; } /** * Результат валидации плагина */ export interface ValidationResult { valid: boolean; field: string; message: string; value?: any; errors?: ErrorObject[]; schemaPath?: string; } /** * Схема валидации (legacy, для обратной совместимости) */ export interface ValidationSchema { type: string; properties?: Record<string, any>; required?: string[]; [key: string]: any; } /** * Расширенная схема валидации на основе JSON Schema */ export interface JSONSchemaValidation { $id: string; schema: JSONSchema7; compiled?: ValidateFunction; strict?: boolean; removeAdditional?: boolean | 'all' | 'failing'; } /** * Конфигурация валидации */ export interface ValidationConfig { enabled: boolean; strict: boolean; autoValidate: boolean; rules: ValidationRule[]; schemas: { [key: string]: ValidationSchema; }; jsonSchemas: { [key: string]: JSONSchemaValidation; }; ajvOptions?: { allErrors?: boolean; verbose?: boolean; strict?: boolean; removeAdditional?: boolean | 'all' | 'failing'; useDefaults?: boolean; coerceTypes?: boolean; addUsedSchema?: boolean; }; } /** * Результат компиляции схемы */ export interface SchemaCompilationResult { success: boolean; schemaId: string; errors?: string[]; } /** * Плагин валидации с поддержкой JSON Schema */ export declare class ValidationPlugin implements CSElementPlugin { readonly name = "ValidationPlugin"; readonly version = "2.0.0"; readonly description = "\u041F\u043B\u0430\u0433\u0438\u043D \u0434\u043B\u044F \u0432\u0430\u043B\u0438\u0434\u0430\u0446\u0438\u0438 \u0434\u0430\u043D\u043D\u044B\u0445 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u043E\u0432 \u0441 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u043E\u0439 JSON Schema"; private config; private validationResults; private ajv; constructor(options?: PluginOptions); install(CSElementClass: typeof CSElement): void; getLifecycleHooks(): LifecycleHooks; /** * Валидация элемента */ validateElement(element: CSElement): Promise<ValidationResult[]>; /** * Валидация конкретного поля данных */ validateData(_element: ICSElement, key: string, value: any): Promise<ValidationResult[]>; /** * Валидация всего объекта данных элемента по JSON Schema */ validateByJSONSchema(element: CSElement, schemaId: string, jsonSchema: JSONSchemaValidation): Promise<ValidationResult[]>; /** * Валидация отдельного поля по JSON Schema */ validateFieldByJSONSchema(field: string, value: any, schemaId: string, jsonSchema: JSONSchemaValidation): Promise<ValidationResult[]>; private validateField; /** * Валидация по схеме (legacy) */ private validateBySchema; /** * Валидация поля по схеме (legacy) */ private validateFieldBySchema; /** * Извлечение данных элемента для валидации */ private extractElementData; /** * Форматирование ошибки JSON Schema */ private formatJSONSchemaError; /** * Форматирование множественных ошибок JSON Schema */ private formatJSONSchemaErrors; /** * Компиляция всех JSON Schema */ private compileAllSchemas; /** * Компиляция одной JSON Schema */ compileSchema(schemaId: string, jsonSchema: JSONSchemaValidation): SchemaCompilationResult; /** * Получение результатов валидации для элемента */ getValidationResults(elementId: string): ValidationResult[]; /** * Добавление правила валидации */ addRule(rule: ValidationRule): void; /** * Добавление схемы валидации (legacy) */ addSchema(name: string, schema: ValidationSchema): void; /** * Добавление JSON Schema */ addJSONSchema(schemaId: string, schema: JSONSchema7, options?: { strict?: boolean; removeAdditional?: boolean | 'all' | 'failing'; }): SchemaCompilationResult; /** * Удаление JSON Schema */ removeJSONSchema(schemaId: string): boolean; /** * Получение JSON Schema по ID */ getJSONSchema(schemaId: string): JSONSchemaValidation | undefined; /** * Получение всех JSON Schema */ getAllJSONSchemas(): { [key: string]: JSONSchemaValidation; }; /** * Валидация произвольных данных по JSON Schema */ validateDataByJSONSchema(data: any, schemaId: string): ValidationResult[]; /** * Очистка результатов валидации */ clearValidationResults(elementId?: string): void; /** * Обновление конфигурации */ updateConfig(config: Partial<ValidationConfig>): void; /** * Получение конфигурации */ getConfig(): ValidationConfig; /** * Получение всех правил */ getRules(): ValidationRule[]; /** * Получение экземпляра Ajv для расширенного использования */ getAjvInstance(): Ajv; /** * Проверка поддержки JSON Schema Draft версии */ getSupportedJSONSchemaDraft(): string; /** * Получение статистики валидации */ getValidationStats(): { totalElements: number; elementsWithErrors: number; totalErrors: number; totalJSONSchemas: number; totalRules: number; }; } /** * Фабричная функция для создания плагина валидации */ export declare function validationPlugin(config?: Partial<ValidationConfig>): ValidationPlugin; /** * Фабричная функция для создания плагина валидации с JSON Schema */ export declare function jsonSchemaValidationPlugin(schemas: { [schemaId: string]: JSONSchema7; }, config?: Partial<ValidationConfig>): ValidationPlugin; //# sourceMappingURL=ValidationPlugin.d.ts.map