UNPKG

@telcomdataperu/zeus-vue-model-manager

Version:

Vue 3 Model Manager for Microfrontends with OpenUI5-style API - Part of ZEUS Platform by TelcomdataPeru

107 lines (106 loc) 3.41 kB
import { ComputedRef, WatchStopHandle } from 'vue'; export type ModelPath = string; export type ModelData = Record<string, unknown>; export interface JsonModelOptions { enableLogging?: boolean; enableValidation?: boolean; immutable?: boolean; pathSeparator?: string; defaultValues?: ModelData; } export interface ModelManagerConfig { scope: string; security?: { level: 'basic' | 'standard' | 'enterprise'; }; audit?: { enabled: boolean; }; } export interface ModelConfig { enableLogging?: boolean; enableSecurity?: boolean; namespace?: 'private' | 'shared' | 'global'; } export interface ModelChangeEvent<T = unknown> { path: ModelPath; oldValue: T; newValue: T; timestamp: number; source: 'user' | 'system' | 'api'; } export interface JsonModelBinding<T = unknown> { value: ComputedRef<T>; setValue: (newValue: T) => void; reset: () => void; isValid: ComputedRef<boolean>; errors: ComputedRef<string[]>; } export interface JsonModelEvents { 'property-changed': ModelChangeEvent; 'validation-error': { path: ModelPath; errors: string[]; }; 'model-reset': { timestamp: number; }; 'array-changed': { path: ModelPath; action: 'add' | 'remove' | 'update'; index?: number; item?: unknown; }; } export interface ValidationRule<T = unknown> { validate: (value: T) => boolean | string; message?: string; async?: boolean; } export interface ModelValidator { rules: Record<ModelPath, ValidationRule[]>; validatePath: (path: ModelPath, value: unknown) => string[]; validateAll: () => Record<ModelPath, string[]>; } export interface ModelMetadata { version: string; created: Date; lastModified: Date; changeCount: number; paths: ModelPath[]; size: number; } export interface ModelWatchOptions { immediate?: boolean; deep?: boolean; flush?: 'pre' | 'post' | 'sync'; } export interface IJsonModel<T = ModelData> { getData(): T; getProperty(path: ModelPath): unknown; setProperty(path: ModelPath, value: unknown): void; updateProperties(updates: Record<ModelPath, unknown>): void; createBinding<R = unknown>(path: ModelPath): ComputedRef<R>; addToArray(path: ModelPath, item: unknown): void; removeFromArray(path: ModelPath, index: number): void; updateArrayItem(path: ModelPath, predicate: (item: any, index: number) => boolean, updates: Record<string, unknown>): boolean; hasProperty(path: ModelPath): boolean; getArrayLength(path: ModelPath): number; getObjectKeys(path: ModelPath): string[]; toJSON(): string; fromJSON(jsonString: string): void; clone(): IJsonModel<T>; watch(path: ModelPath, callback: (newValue: unknown, oldValue: unknown) => void, options?: ModelWatchOptions): WatchStopHandle; addValidator(path: ModelPath, rule: ValidationRule): void; removeValidator(path: ModelPath): void; validate(path?: ModelPath): boolean; getErrors(path?: ModelPath): string[]; getMetadata(): ModelMetadata; reset(paths?: ModelPath[]): void; destroy(): void; } export interface ModelFactory<T = ModelData> { create(initialData: T, options?: JsonModelOptions): IJsonModel<T>; createFromSchema(schema: any): IJsonModel<T>; createFromUI5Model(ui5Model: any): IJsonModel<T>; }