export interface ComposeData { readonly version: string; readonly services: Record; readonly networks: Record; readonly volumes: Record; readonly validation: ComposeValidationResult; } export interface DependsOnCondition { readonly condition?: "service_started" | "service_healthy" | "service_completed_successfully"; readonly restart?: boolean; } export interface ServiceDefinition { readonly image?: string; readonly build?: string | BuildDefinition; readonly ports?: string[]; readonly environment?: Record | string[]; readonly volumes?: string[]; readonly depends_on?: string[] | Record; readonly networks?: string[]; readonly restart?: string; readonly command?: string | string[]; readonly entrypoint?: string | string[]; } export interface BuildDefinition { readonly context: string; readonly dockerfile?: string; readonly args?: Record; } export interface NetworkDefinition { readonly driver?: string; readonly external?: boolean; } export interface VolumeDefinition { readonly driver?: string; readonly external?: boolean; } export interface ServiceInfo { readonly name: string; readonly image?: string; readonly ports: PortMapping[]; readonly environment: Record; readonly volumes: string[]; readonly dependencies: string[]; readonly health: ServiceHealth; } export interface PortMapping { readonly host: number; readonly container: number; readonly protocol: "tcp" | "udp"; } export interface ServiceHealth { readonly name: string; readonly status: "healthy" | "unhealthy" | "starting" | "unknown"; readonly checks: number; readonly failures: number; readonly lastCheck?: Date; } export interface ServiceDependencyGraph { readonly services: string[]; readonly dependencies: Record; } export interface PortConflict { readonly port: number; readonly services: string[]; readonly severity: "error" | "warning"; } export interface EntityAffectedService { readonly name: string; readonly port?: number; } export interface ComposeValidationResult { readonly isValid: boolean; readonly errors: ComposeValidationError[]; } export interface ComposeValidationError { readonly code: string; readonly message: string; readonly service?: string; readonly field?: string; }