eslint-plugin-obsidian
Version:
ESLint rules for Obsidian
38 lines • 1.42 kB
JavaScript
;
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