/** * Circular Reference Detector * * Detects circular references in FHIR resources to prevent infinite loops during validation. * Tracks reference chains and identifies cycles using graph traversal algorithms. * * Task 6.5: Add circular reference detection to prevent infinite loops */ import { type ReferenceNode, type ReferenceGraph } from './reference-graph-builder'; export interface CircularReferenceDetectionResult { /** Whether a circular reference was detected */ hasCircularReference: boolean; /** The circular reference chain if detected */ circularChain?: string[]; /** Total references checked */ totalReferences: number; /** Maximum depth reached */ maxDepth: number; /** All reference chains found */ referenceChains?: string[][]; } export type { ReferenceNode, ReferenceGraph }; export declare class CircularReferenceDetector { private visitedNodes; private currentPath; private maxDepthLimit; private visitedObjects; constructor(maxDepthLimit?: number); /** * Detect circular references in a resource or Bundle */ detectCircularReferences(resource: any, _startingReferences?: string[]): CircularReferenceDetectionResult; /** * Check if adding a reference would create a circular reference */ wouldCreateCircularReference(currentPath: string[], newReference: string): boolean; /** * Find circular reference chains from a starting node */ private findCircularChainsFromNode; /** * DFS traversal to detect cycles */ private dfsDetectCycle; /** * Reset detector state */ private reset; /** * Check if a reference chain exceeds depth limit */ isDepthLimitExceeded(chain: string[]): boolean; /** * Get maximum depth limit */ getMaxDepthLimit(): number; /** * Set maximum depth limit */ setMaxDepthLimit(limit: number): void; /** * Validate a reference chain for circular references */ validateReferenceChain(chain: string[]): { isValid: boolean; circularAt?: number; circularReference?: string; }; /** * Format circular reference chain for display */ formatCircularChain(chain: string[]): string; /** * Get reference chain statistics */ getChainStatistics(chains: string[][]): { totalChains: number; averageLength: number; maxLength: number; minLength: number; circularChains: number; }; } export declare function getCircularReferenceDetector(maxDepth?: number): CircularReferenceDetector; export declare function resetCircularReferenceDetector(): void; //# sourceMappingURL=circular-reference-detector.d.ts.map