woaru
Version:
Universal Project Setup Autopilot - Analyze and automatically configure development tools for ANY programming language
58 lines • 2.42 kB
JavaScript
import { NextJsPlugin } from './NextJsPlugin.js';
import { PythonPlugin } from './PythonPlugin.js';
import { CSharpPlugin } from './CSharpPlugin.js';
import { JavaPlugin } from './JavaPlugin.js';
import { GoPlugin } from './GoPlugin.js';
import { RustPlugin } from './RustPlugin.js';
export class PluginManager {
plugins = [];
constructor() {
this.registerPlugin(new NextJsPlugin());
this.registerPlugin(new PythonPlugin());
this.registerPlugin(new CSharpPlugin());
this.registerPlugin(new JavaPlugin());
this.registerPlugin(new GoPlugin());
this.registerPlugin(new RustPlugin());
// Add more plugins here as they're created
}
registerPlugin(plugin) {
this.plugins.push(plugin);
}
getApplicablePlugins(analysis) {
return this.plugins.filter(plugin => plugin.canHandle(analysis));
}
getAllRecommendations(analysis) {
const applicablePlugins = this.getApplicablePlugins(analysis);
const allRecommendations = [];
applicablePlugins.forEach(plugin => {
const recommendations = plugin.getRecommendations(analysis);
allRecommendations.push(...recommendations);
});
// Remove duplicates based on tool name
const uniqueRecommendations = allRecommendations.filter((rec, index, self) => index === self.findIndex(r => r.tool === rec.tool));
// Sort by priority
return uniqueRecommendations.sort((a, b) => {
const priorityOrder = { high: 3, medium: 2, low: 1 };
return priorityOrder[b.priority] - priorityOrder[a.priority];
});
}
getAllRefactorSuggestions(analysis) {
const applicablePlugins = this.getApplicablePlugins(analysis);
const allSuggestions = [];
applicablePlugins.forEach(plugin => {
const suggestions = plugin.getRefactorSuggestions(analysis);
allSuggestions.push(...suggestions);
});
return allSuggestions;
}
getAllSpecificPackages(analysis) {
const applicablePlugins = this.getApplicablePlugins(analysis);
const allPackages = [];
applicablePlugins.forEach(plugin => {
const packages = plugin.getSpecificPackages();
allPackages.push(...packages);
});
return [...new Set(allPackages)]; // Remove duplicates
}
}
//# sourceMappingURL=PluginManager.js.map