/** * Интерфейсы для системы типизированных элементов */ import { ICSElement, ValidationRule, ValidationResult } from './interfaces'; /** * Схема типизированного элемента */ export interface TypedElementSchema { name: string; version: string; description?: string; fields: TypedFieldSchema[]; validationRules?: ValidationRule[]; inheritFrom?: string; abstract?: boolean; sealed?: boolean; metadata?: Record; } /** * Схема поля типизированного элемента */ export interface TypedFieldSchema { name: keyof T; type: FieldType; required?: boolean; defaultValue?: any; description?: string; validation?: FieldValidation; metadata?: Record; } /** * Типы полей */ export type FieldType = 'string' | 'number' | 'boolean' | 'date' | 'array' | 'object' | 'reference' | 'computed' | 'enum' | 'union' | 'generic'; /** * Валидация поля */ export interface FieldValidation { min?: number; max?: number; pattern?: string; enum?: any[]; custom?: (value: any) => boolean | string; required?: boolean; nullable?: boolean; } /** * Интерфейс типизированного элемента */ export interface ITypedElement extends ICSElement { readonly typeName: string; readonly schema: TypedElementSchema; readonly isAbstract: boolean; readonly isSealed: boolean; readonly inheritanceChain: string[]; getTypedData(): Partial; setTypedData(data: Partial): Promise; getField(fieldName: K): T[K] | undefined; setField(fieldName: K, value: T[K]): Promise; validateType(): Promise; validateField(fieldName: K, value: T[K]): Promise; canInheritFrom(typeName: string): boolean; getInheritedFields(): TypedFieldSchema[]; isInstanceOf(typeName: string): boolean; implementsInterface(interfaceName: string): boolean; getInheritanceMetadata(): { parentType: string | null; implementedInterfaces: string[]; inheritanceDepth: number; isComposite: boolean; sourceSchemas?: string[]; }; serializeTyped(): SerializedTypedElement; cloneTyped(): Promise>; } /** * Результат валидации типизированного элемента */ export interface TypedValidationResult extends ValidationResult { fieldErrors: Map; schemaErrors: string[]; inheritanceErrors: string[]; } /** * Результат валидации поля */ export interface FieldValidationResult { isValid: boolean; errors: string[]; warnings: string[]; fieldName: string; value: any; expectedType: FieldType; actualType: string; } /** * Сериализованный типизированный элемент */ export interface SerializedTypedElement { id: string; name: string; typeName: string; schema: TypedElementSchema; typedData: Partial; rawData: Record; metadata: { createdAt: number; updatedAt: number; version: string; inheritanceChain: string[]; }; } /** * Менеджер типизированных элементов */ export interface ITypedElementManager { registerSchema(schema: TypedElementSchema): void; unregisterSchema(typeName: string): void; getSchema(typeName: string): TypedElementSchema | null; getAllSchemas(): Map; createElement(typeName: string, data?: Partial): Promise>; createFromSchema(schema: TypedElementSchema, data?: Partial): Promise>; validateSchema(schema: TypedElementSchema): SchemaValidationResult; validateInheritance(typeName: string, parentTypeName: string): boolean; findElementsByType(typeName: string): ITypedElement[]; findElementsByField(fieldName: keyof T, value: T[keyof T]): ITypedElement[]; buildInheritanceChain(typeName: string): string[]; canInherit(childType: string, parentType: string): boolean; getTypeStats(): TypeStats; } /** * Результат валидации схемы */ export interface SchemaValidationResult { isValid: boolean; errors: string[]; warnings: string[]; conflictingFields: string[]; missingDependencies: string[]; } /** * Статистика типов */ export interface TypeStats { totalTypes: number; totalElements: number; typeDistribution: Map; inheritanceDepth: Map; validationErrors: number; mostUsedTypes: Array<{ typeName: string; count: number; }>; } /** * Конфигурация типизированных элементов */ export interface TypedElementConfig { strictMode: boolean; autoValidation: boolean; allowDynamicFields: boolean; inheritanceEnabled: boolean; maxInheritanceDepth: number; cacheSchemas: boolean; defaultFieldValidation: FieldValidation; } /** * Фабрика типизированных элементов */ export interface ITypedElementFactory { create(typeName: string, data?: Partial): Promise>; createBatch(typeName: string, dataArray: Partial[]): Promise[]>; createFromTemplate(templateName: string, data?: Partial): Promise>; clone(element: ITypedElement): Promise>; } /** * Декоратор для типизированных элементов */ export interface TypedElementDecorator { name: string; apply(element: ITypedElement): Promise; remove(element: ITypedElement): Promise; canApply(element: ITypedElement): boolean; } /** * Событие типизированного элемента */ export interface TypedElementEvent { type: TypedElementEventType; element: ITypedElement; fieldName?: keyof T; oldValue?: any; newValue?: any; validationResult?: TypedValidationResult; timestamp: number; } /** * Типы событий типизированных элементов */ export declare enum TypedElementEventType { TypedDataChanged = "typed:data:changed", FieldChanged = "typed:field:changed", ValidationFailed = "typed:validation:failed", ValidationPassed = "typed:validation:passed", SchemaChanged = "typed:schema:changed", InheritanceChanged = "typed:inheritance:changed" } /** * Миксин для расширения функциональности */ export interface TypedElementMixin { name: string; methods: Record; properties: Record; lifecycle?: { beforeCreate?: (element: ITypedElement) => Promise; afterCreate?: (element: ITypedElement) => Promise; beforeValidate?: (element: ITypedElement) => Promise; afterValidate?: (element: ITypedElement, result: TypedValidationResult) => Promise; }; } //# sourceMappingURL=typed-elements-interfaces.d.ts.map