UNPKG

eslint-plugin-obsidian

Version:

ESLint rules for Obsidian

38 lines 1.42 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CircularDependenciesDetector = void 0; class CircularDependenciesDetector { detect(clazz) { const providers = clazz.getDecoratedMethods('Provides'); const visited = new Set(); for (const provider of providers) { const result = this.isCircular(provider, providers, visited); if (result.hasCircularDependency) { return result; } } return { hasCircularDependency: false }; } isCircular(provider, providers, path) { if (path.has(provider.name)) { return { hasCircularDependency: true, path: [...path, provider.name], node: provider.node, }; } const newPath = new Set(path); newPath.add(provider.name); for (const dep of provider.parameters) { const depProvider = providers.find(p => p.name === dep.name); if (depProvider) { const result = this.isCircular(depProvider, providers, newPath); if (result.hasCircularDependency) return result; } } return { hasCircularDependency: false }; } } exports.CircularDependenciesDetector = CircularDependenciesDetector; //# sourceMappingURL=circularDependenciesDetector.js.map