mcp-ai-agent-guidelines
Version:
A comprehensive Model Context Protocol server providing advanced tools, resources, and prompts for implementing AI agent best practices
74 lines • 2.86 kB
JavaScript
/**
* Base parser class with common issue detection logic
*/
/**
* Common regex patterns used across parsers
*/
export const PATTERNS = {
// Matches bare package name with optional extras: package[extra] or just package
BARE_PACKAGE: /^[a-zA-Z0-9_-]+(\[[^\]]+\])?\s*$/,
// Matches package with version constraint: package>=1.0 or package[extra]==1.2
PACKAGE_WITH_VERSION: /^[a-zA-Z0-9_-]+(\[[^\]]+\])?\s*[<>=!~]+/,
};
/**
* Base analyzer with common issue detection logic
*/
export class BaseParser {
analyze(parseResult, options) {
const issues = [];
const recommendations = [];
// Analyze each package for common patterns
for (const pkg of parseResult.packages) {
this.analyzePackage(pkg, options, issues);
}
// Add ecosystem-specific analysis
this.analyzeEcosystemSpecific(parseResult, options, issues);
// Generate recommendations
this.generateRecommendations(issues, recommendations);
return {
packages: parseResult.packages,
issues,
recommendations,
ecosystem: parseResult.ecosystem,
fileType: parseResult.fileType,
projectName: parseResult.projectName,
projectVersion: parseResult.projectVersion,
};
}
analyzeEcosystemSpecific(_parseResult, _options, _issues) {
// Override in subclasses for ecosystem-specific analysis
}
generateRecommendations(issues, recommendations) {
if (issues.length === 0) {
recommendations.push("No immediate issues detected in dependency versions");
recommendations.push("Continue monitoring dependencies regularly");
return;
}
const criticalCount = issues.filter((i) => i.severity === "critical").length;
const highCount = issues.filter((i) => i.severity === "high").length;
const moderateCount = issues.filter((i) => i.severity === "moderate").length;
if (criticalCount > 0) {
recommendations.push(`Address ${criticalCount} critical issue(s) immediately`);
}
if (highCount > 0) {
recommendations.push(`Update ${highCount} high-priority package(s) as soon as possible`);
}
if (moderateCount > 0) {
recommendations.push(`Review ${moderateCount} moderate concern(s)`);
}
// Add ecosystem-specific recommendations
this.addEcosystemRecommendations(recommendations);
}
addIssue(issues, pkg, type, severity, description, recommendation) {
issues.push({
package: pkg.name,
version: pkg.version,
type,
severity,
description,
recommendation,
ecosystem: pkg.ecosystem,
});
}
}
//# sourceMappingURL=base.js.map