cs-element
Version:
Advanced reactive data management library with state machines, blueprints, persistence, compression, networking, and multithreading support
238 lines • 7.76 kB
TypeScript
/**
* Плагин валидации для 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