UNPKG

@notjustcoders/ioc-arise

Version:

Arise type-safe IoC containers from your code. Zero overhead, zero coupling.

46 lines 1.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DependencyResolver = void 0; const topological_sorter_1 = require("../utils/topological-sorter"); class DependencyResolver { constructor(classes) { this.classes = classes; } resolve() { const graph = this.buildDependencyGraph(); return topological_sorter_1.TopologicalSorter.sort(graph); } buildDependencyGraph() { const graph = {}; const classNames = new Set(this.classes.map(c => c.name)); // Create interface-to-class mapping const interfaceToClassMap = new Map(); for (const classInfo of this.classes) { if (classInfo.interfaceName) { interfaceToClassMap.set(classInfo.interfaceName, classInfo.name); } } for (const classInfo of this.classes) { const managedDependencies = []; for (const dep of classInfo.dependencies) { // Check if dependency is a direct class name if (classNames.has(dep.name)) { managedDependencies.push(dep.name); } // Check if dependency is an interface that maps to a managed class else if (interfaceToClassMap.has(dep.name)) { const implementingClass = interfaceToClassMap.get(dep.name); managedDependencies.push(implementingClass); } } graph[classInfo.name] = managedDependencies; } return graph; } detectCircularDependencies() { const result = this.resolve(); return result.cycles; } } exports.DependencyResolver = DependencyResolver; //# sourceMappingURL=dependency-resolver.js.map