/** * Element manager interface for handling element operations. * Each element type should have a corresponding manager implementation. */ import { IElement, ElementValidationResult } from './IElement.js'; import { ElementType } from '../../portfolio/types.js'; export interface IElementManager { load(path: string): Promise; save(element: T, path: string): Promise; delete(path: string): Promise; exists(path: string): Promise; list(): Promise; find(predicate: (element: T) => boolean): Promise; findMany(predicate: (element: T) => boolean): Promise; validate(element: T): ElementValidationResult; validatePath(path: string): boolean; getElementType(): ElementType; getFileExtension(): string; importElement(data: string, format?: 'json' | 'yaml' | 'markdown'): Promise; exportElement(element: T, format?: 'json' | 'yaml' | 'markdown'): Promise; } export interface IElementFactory { create(metadata: Partial): T; createFromTemplate(templateId: string, overrides?: Partial): Promise; getDefaultMetadata(): T['metadata']; } export interface IElementLifecycleManager { activate(element: T): Promise; deactivate(element: T): Promise; isActive(element: T): boolean; getActiveElements(): T[]; suspend(element: T): Promise; resume(element: T): Promise; onActivate(handler: (element: T) => void): void; onDeactivate(handler: (element: T) => void): void; onStatusChange(handler: (element: T, oldStatus: string, newStatus: string) => void): void; } export interface IBatchOperations { loadMany(paths: string[]): Promise; saveMany(elements: Map): Promise; deleteMany(paths: string[]): Promise; validateMany(elements: T[]): Map; } export interface IElementSearch { search(query: string): Promise; searchByTag(tag: string): Promise; searchByAuthor(author: string): Promise; filter(criteria: FilterCriteria): Promise; } export interface FilterCriteria { type?: ElementType; tags?: string[]; author?: string; minRating?: number; maxRating?: number; hasReferences?: boolean; custom?: (element: T) => boolean; } export interface IElementVersioning { getVersion(element: T): string; incrementVersion(element: T, type: 'major' | 'minor' | 'patch'): T; compareVersions(v1: string, v2: string): -1 | 0 | 1; isCompatible(element: T, constraint: string): boolean; } //# sourceMappingURL=IElementManager.d.ts.map