UNPKG

sicua

Version:

A tool for analyzing project structure and dependencies

481 lines (480 loc) 15 kB
import { ComplexityLevel } from "./contextualSummaries.types"; export interface SemanticAnalysisResult { fileSemantics: FileSemantics; architecturalPatterns: ArchitecturalPatternAnalysis; codeQuality: CodeQualityAnalysis; designPatterns: DesignPatternAnalysis; relationshipAnalysis: RelationshipAnalysis; contextualInsights: ContextualInsight[]; recommendations: Recommendation[]; riskFactors: RiskFactor[]; optimizationOpportunities: OptimizationOpportunity[]; } export interface FileSemantics { primaryPurpose: string; secondaryPurposes: string[]; domainConcepts: DomainConcept[]; technicalConcepts: TechnicalConcept[]; businessValue: BusinessValue; complexity: SemanticComplexity; maintainability: MaintainabilityMetrics; cohesion: CohesionAnalysis; coupling: CouplingAnalysis; } export interface ArchitecturalPatternAnalysis { layerIdentification: LayerInfo; separationOfConcerns: SeparationAnalysis; designPrinciples: DesignPrincipleAdherence; codeSmells: CodeSmell[]; architecturalDebt: ArchitecturalDebt[]; } export interface CodeQualityAnalysis { readability: ReadabilityMetrics; testability: TestabilityMetrics; performance: PerformanceMetrics; security: SecurityMetrics; maintainability: MaintainabilityScore; reliability: ReliabilityMetrics; overallQualityScore: number; } export interface DesignPatternAnalysis { detectedPatterns: DetectedPattern[]; missingPatterns: MissingPatternOpportunity[]; patternMisuse: PatternMisuseWarning[]; patternEvolution: PatternEvolutionSuggestion[]; } export interface RelationshipAnalysis { dependencyStrength: DependencyStrengthAnalysis; coupling: CouplingMetrics; cohesion: CohesionMetrics; fanIn: number; fanOut: number; instability: number; abstractness: number; distance: number; } export interface ContextualInsight { type: InsightType; category: InsightCategory; priority: "low" | "medium" | "high" | "critical"; description: string; evidence: string[]; impact: ImpactAnalysis; actionable: boolean; effort: "low" | "medium" | "high"; } export interface Recommendation { type: RecommendationType; priority: "low" | "medium" | "high" | "critical"; title: string; description: string; rationale: string; benefits: string[]; implementation: ImplementationGuidance; riskLevel: "low" | "medium" | "high"; estimatedEffort: EffortEstimate; } export interface RiskFactor { type: RiskType; severity: "low" | "medium" | "high" | "critical"; probability: "low" | "medium" | "high"; impact: string; description: string; mitigation: MitigationStrategy; indicators: string[]; } export interface OptimizationOpportunity { type: OptimizationType; impact: "low" | "medium" | "high"; effort: "low" | "medium" | "high"; description: string; currentState: string; proposedState: string; benefits: OptimizationBenefit[]; prerequisites: string[]; metrics: OptimizationMetrics; } export interface DomainConcept { name: string; type: "entity" | "value-object" | "service" | "aggregate" | "repository"; confidence: number; context: string; relationships: ConceptRelationship[]; } export interface TechnicalConcept { name: string; type: "framework" | "library" | "pattern" | "architecture" | "tool"; usage: TechnicalUsage; effectiveness: number; alternatives: AlternativeOption[]; } export interface BusinessValue { userImpact: "low" | "medium" | "high"; businessCriticality: "low" | "medium" | "high" | "critical"; frequencyOfUse: "rarely" | "occasionally" | "frequently" | "constantly"; revenueImpact: "none" | "indirect" | "direct" | "critical"; complianceRelevance: boolean; } export interface SemanticComplexity { conceptualComplexity: number; interactionComplexity: number; dataComplexity: number; algorithmicComplexity: number; overallComplexity: ComplexityLevel; complexityTrends: ComplexityTrend[]; } export interface LayerInfo { identifiedLayer: ApplicationLayer; layerPurity: number; crossLayerDependencies: CrossLayerDependency[]; layerViolations: LayerViolation[]; } export interface SeparationAnalysis { concerns: IdentifiedConcern[]; separation: SeparationQuality; violations: SeparationViolation[]; improvements: SeparationImprovement[]; } export interface DesignPrincipleAdherence { solid: SOLIDAnalysis; dry: DRYAnalysis; kiss: KISSAnalysis; yagni: YAGNIAnalysis; overallAdherence: number; } export interface CodeSmell { type: CodeSmellType; severity: "low" | "medium" | "high"; description: string; location: string; refactoringStrategy: RefactoringStrategy; urgency: "low" | "medium" | "high"; } export interface ArchitecturalDebt { type: DebtType; principal: number; interest: number; totalCost: number; payoffStrategy: PayoffStrategy; timeToPayoff: string; } export interface DetectedPattern { name: string; type: PatternType; confidence: number; implementation: PatternImplementation; effectiveness: PatternEffectiveness; variants: PatternVariant[]; } export interface MissingPatternOpportunity { pattern: string; benefit: string; applicability: number; implementationComplexity: "low" | "medium" | "high"; expectedImpact: ExpectedImpact; } export interface PatternMisuseWarning { pattern: string; issue: string; severity: "low" | "medium" | "high"; correction: string; consequences: string[]; } export interface DependencyStrengthAnalysis { strongDependencies: StrongDependency[]; weakDependencies: WeakDependency[]; circularDependencies: CircularDependency[]; dependencyHealth: DependencyHealth; } export type InsightType = "architecture" | "performance" | "maintainability" | "security" | "business-logic" | "design-pattern" | "code-quality" | "dependency"; export type InsightCategory = "opportunity" | "risk" | "improvement" | "warning" | "optimization" | "best-practice"; export type RecommendationType = "refactoring" | "architecture" | "performance" | "security" | "maintainability" | "testing" | "documentation" | "dependency"; export type RiskType = "technical-debt" | "security-vulnerability" | "performance-bottleneck" | "maintainability-issue" | "dependency-risk" | "compliance-risk" | "business-continuity"; export type OptimizationType = "performance" | "memory" | "bundle-size" | "runtime" | "maintainability" | "testability" | "security" | "accessibility"; export type ApplicationLayer = "presentation" | "business" | "data" | "infrastructure" | "domain" | "application" | "utility" | "cross-cutting"; export type CodeSmellType = "long-method" | "large-class" | "duplicate-code" | "dead-code" | "shotgun-surgery" | "feature-envy" | "data-clumps" | "primitive-obsession"; export type PatternType = "creational" | "structural" | "behavioral" | "architectural" | "concurrency" | "enterprise" | "react" | "functional"; export type DebtType = "code-debt" | "design-debt" | "architecture-debt" | "test-debt" | "documentation-debt" | "infrastructure-debt"; export interface ImpactAnalysis { scope: "local" | "module" | "application" | "system"; stakeholders: string[]; timeframe: "immediate" | "short-term" | "medium-term" | "long-term"; riskLevel: "low" | "medium" | "high" | "critical"; } export interface ImplementationGuidance { steps: ImplementationStep[]; prerequisites: string[]; constraints: string[]; alternatives: string[]; successCriteria: string[]; } export interface EffortEstimate { timeInHours: number; complexity: "simple" | "moderate" | "complex" | "very-complex"; skillLevel: "junior" | "intermediate" | "senior" | "expert"; dependencies: string[]; } export interface MitigationStrategy { approach: "prevention" | "detection" | "response" | "recovery"; actions: MitigationAction[]; timeline: string; cost: "low" | "medium" | "high"; effectiveness: number; } export interface TechnicalUsage { frequency: "rare" | "occasional" | "frequent" | "extensive"; depth: "surface" | "moderate" | "deep" | "expert"; appropriateness: number; mastery: number; } export interface AlternativeOption { name: string; advantages: string[]; disadvantages: string[]; migrationPath: string; feasibility: number; } export interface ComplexityTrend { metric: string; direction: "increasing" | "stable" | "decreasing"; rate: number; projection: string; } export interface SOLIDAnalysis { singleResponsibility: ComplianceScore; openClosed: ComplianceScore; liskovSubstitution: ComplianceScore; interfaceSegregation: ComplianceScore; dependencyInversion: ComplianceScore; } export interface ComplianceScore { score: number; violations: string[]; recommendations: string[]; } export interface DRYAnalysis { duplicationLevel: number; duplicatedConcepts: DuplicatedConcept[]; consolidationOpportunities: ConsolidationOpportunity[]; } export interface DuplicatedConcept { concept: string; instances: string[]; similarity: number; consolidationComplexity: "low" | "medium" | "high"; } export interface ConsolidationOpportunity { description: string; effort: "low" | "medium" | "high"; benefit: "low" | "medium" | "high"; riskLevel: "low" | "medium" | "high"; } export interface ConceptRelationship { type: "inheritance" | "composition" | "association" | "dependency"; target: string; strength: "weak" | "medium" | "strong"; } export interface MaintainabilityMetrics { score: number; factors: MaintainabilityFactor[]; trends: string[]; projections: string[]; } export interface MaintainabilityFactor { name: string; impact: number; description: string; } export interface CohesionAnalysis { score: number; type: "functional" | "sequential" | "logical" | "procedural" | "temporal" | "communicational"; strengths: string[]; weaknesses: string[]; improvements: string[]; } export interface CouplingAnalysis { score: number; type: "loose" | "medium" | "tight"; dependencies: number; strengths: string[]; weaknesses: string[]; improvements: string[]; } export interface ReadabilityMetrics { score: number; } export interface TestabilityMetrics { score: number; } export interface PerformanceMetrics { score: number; } export interface SecurityMetrics { score: number; vulnerabilities: SecurityVulnerability[]; complianceLevel: "none" | "basic" | "standard" | "strict"; riskLevel: "low" | "medium" | "high" | "critical"; } export interface MaintainabilityScore { score: number; factors: MaintainabilityFactor[]; codeSmells: number; technicalDebt: number; } export interface ReliabilityMetrics { score: number; errorHandling: number; testCoverage: number; faultTolerance: number; } export interface SecurityVulnerability { type: string; severity: "low" | "medium" | "high" | "critical"; description: string; location: string; } export interface ImplementationStep { order: number; description: string; estimatedTime: string; } export interface MitigationAction { description: string; timeline: string; responsible: string; } export interface OptimizationBenefit { type: string; value: string; quantifiable: boolean; } export interface OptimizationMetrics { baseline: { [key: string]: string; }; target: { [key: string]: string; }; measurement: string; } export interface CrossLayerDependency { from: ApplicationLayer; to: ApplicationLayer; type: "acceptable" | "violation"; description: string; } export interface LayerViolation { description: string; severity: "low" | "medium" | "high"; recommendation: string; } export interface IdentifiedConcern { name: string; type: "business" | "technical" | "infrastructure"; separation: "good" | "poor" | "mixed"; } export interface SeparationQuality { score: number; level: "excellent" | "good" | "fair" | "poor"; } export interface SeparationViolation { concern1: string; concern2: string; description: string; impact: "low" | "medium" | "high"; } export interface SeparationImprovement { description: string; effort: "low" | "medium" | "high"; benefit: "low" | "medium" | "high"; } export interface KISSAnalysis { score: number; complexityViolations: string[]; simplificationOpportunities: string[]; } export interface YAGNIAnalysis { score: number; overEngineering: string[]; unnecessaryFeatures: string[]; } export interface RefactoringStrategy { approach: "extract-method" | "extract-class" | "inline" | "move-method" | "rename"; steps: string[]; effort: "low" | "medium" | "high"; risk: "low" | "medium" | "high"; } export interface PayoffStrategy { approach: "incremental" | "big-bang" | "gradual"; timeline: string; resources: string[]; milestones: string[]; } export interface PatternImplementation { quality: "poor" | "adequate" | "good" | "excellent"; completeness: number; adherence: number; documentation: boolean; } export interface PatternEffectiveness { score: number; benefits: string[]; drawbacks: string[]; appropriateness: number; } export interface PatternVariant { name: string; description: string; usage: "rare" | "occasional" | "common"; } export interface ExpectedImpact { maintainability: number; performance: number; testability: number; reusability: number; } export interface PatternEvolutionSuggestion { currentPattern: string; suggestedPattern: string; rationale: string; migrationPath: string[]; benefits: string[]; risks: string[]; } export interface StrongDependency { from: string; to: string; type: "inheritance" | "composition" | "tight-coupling"; strength: number; reason: string; } export interface WeakDependency { from: string; to: string; type: "interface" | "event" | "loose-coupling"; strength: number; reason: string; } export interface CircularDependency { cycle: string[]; severity: "low" | "medium" | "high"; breakingPoint: string; resolution: string; } export interface DependencyHealth { score: number; issues: string[]; strengths: string[]; recommendations: string[]; } export interface CouplingMetrics { afferentCoupling: number; efferentCoupling: number; instability: number; coupling: "loose" | "medium" | "tight"; } export interface CohesionMetrics { cohesionLevel: number; cohesionType: "functional" | "sequential" | "logical"; score: number; }