cyclic-dependency-fixer
Version: 
AI-powered tool to detect and fix circular dependencies in JavaScript/TypeScript projects. Features intelligent refactoring with Claude/GPT-4, codebase pattern learning, and context-aware fix recommendations
57 lines • 2.04 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DetectCyclesUseCase = void 0;
class DetectCyclesUseCase {
    constructor(fileSystem, parser, cycleDetector) {
        this.fileSystem = fileSystem;
        this.parser = parser;
        this.cycleDetector = cycleDetector;
    }
    async execute(config) {
        const startTime = Date.now();
        const files = await this.findFiles(config);
        const modules = await this.parseModules(files);
        const cycles = await this.cycleDetector.detectCycles(modules, config.maxDepth);
        const affectedModules = this.getAffectedModules(cycles);
        const duration = Date.now() - startTime;
        return {
            cycles,
            totalModules: modules.size,
            affectedModules,
            duration,
        };
    }
    async findFiles(config) {
        const patterns = config.extensions.map((ext) => `*${ext}`);
        const exclude = [...config.exclude, 'node_modules', 'dist', 'build', 'coverage', '.git'];
        if (!config.includeNodeModules) {
            exclude.push('node_modules');
        }
        return await this.fileSystem.glob(patterns, exclude);
    }
    async parseModules(files) {
        const modules = new Map();
        await Promise.all(files.map(async (file) => {
            try {
                const content = await this.fileSystem.readFile(file);
                const module = await this.parser.parse(file, content);
                modules.set(file, module);
            }
            catch (error) {
                console.warn(`Failed to parse ${file}:`, error);
            }
        }));
        return modules;
    }
    getAffectedModules(cycles) {
        const affected = new Set();
        for (const cycle of cycles) {
            for (const path of cycle.paths) {
                affected.add(path);
            }
        }
        return Array.from(affected);
    }
}
exports.DetectCyclesUseCase = DetectCyclesUseCase;
//# sourceMappingURL=DetectCyclesUseCase.js.map