mirror of
https://github.com/samiyev/puaros.git
synced 2025-12-28 07:16:53 +05:00
Refactored three largest detectors to improve maintainability and reduce complexity: - AggregateBoundaryDetector: 381 → 162 lines (57% reduction) - HardcodeDetector: 459 → 89 lines (81% reduction) - RepositoryPatternDetector: 479 → 106 lines (78% reduction) Added 13 new strategy classes: - FolderRegistry - centralized DDD folder name management - AggregatePathAnalyzer - path parsing and aggregate extraction - ImportValidator - import validation logic - BraceTracker - brace and bracket counting - ConstantsFileChecker - constants file detection - ExportConstantAnalyzer - export const analysis - MagicNumberMatcher - magic number detection - MagicStringMatcher - magic string detection - OrmTypeMatcher - ORM type matching - MethodNameValidator - repository method validation - RepositoryFileAnalyzer - file role detection - RepositoryViolationDetector - violation detection logic All 519 tests passing, zero ESLint errors, no breaking changes.
32 lines
921 B
TypeScript
32 lines
921 B
TypeScript
import { LAYERS } from "../../shared/constants/rules"
|
|
|
|
/**
|
|
* Analyzes files to determine their role in the repository pattern
|
|
*
|
|
* Identifies repository interfaces and use cases based on file paths
|
|
* and architectural layer conventions.
|
|
*/
|
|
export class RepositoryFileAnalyzer {
|
|
/**
|
|
* Checks if a file is a repository interface
|
|
*/
|
|
public isRepositoryInterface(filePath: string, layer: string | undefined): boolean {
|
|
if (layer !== LAYERS.DOMAIN) {
|
|
return false
|
|
}
|
|
|
|
return /I[A-Z]\w*Repository\.ts$/.test(filePath) && /repositories?\//.test(filePath)
|
|
}
|
|
|
|
/**
|
|
* Checks if a file is a use case
|
|
*/
|
|
public isUseCase(filePath: string, layer: string | undefined): boolean {
|
|
if (layer !== LAYERS.APPLICATION) {
|
|
return false
|
|
}
|
|
|
|
return /use-cases?\//.test(filePath) && /[A-Z][a-z]+[A-Z]\w*\.ts$/.test(filePath)
|
|
}
|
|
}
|