UNPKG

mira-consciousness

Version:

Memory & Intelligence Retention Archive - Preserving The Spark

299 lines 9.23 kB
/** * Analyzer Configuration System * Provides configurable rules and thresholds for all analyzers */ // Default configuration export const defaultAnalyzerConfig = { enabled: true, severity: { critical: 25, high: 10, medium: 5, low: 1 }, security: { enabled: true, rules: { hardcodedSecrets: { enabled: true, severity: 'critical', excludePatterns: [/test/i, /spec/i, /mock/i] }, vulnerableDependencies: { enabled: true, severity: 'high', checkDevDependencies: true, auditLevel: 'moderate' }, owaspCompliance: { enabled: true, minComplianceScore: 70, categories: ['A01', 'A02', 'A03', 'A04', 'A05', 'A06', 'A07', 'A08', 'A09', 'A10'] }, entropyAnalysis: { enabled: true, minEntropy: 4.5, fileExtensions: ['js', 'ts', 'jsx', 'tsx', 'json', 'env', 'yml', 'yaml'], excludePaths: ['node_modules', '.git', 'dist', 'build'] } }, thresholds: { criticalIssuesMax: 0, highIssuesMax: 5, minSecurityScore: 70, entropyThreshold: 4.5 } }, performance: { enabled: true, rules: { bundleSize: { enabled: true, maxSizeKB: 500, warnSizeKB: 250, checkSourceMaps: true }, complexityAnalysis: { enabled: true, maxCyclomaticComplexity: 10, maxCognitiveComplexity: 15, maxFunctionLength: 50, maxFileLength: 300 }, memoryLeaks: { enabled: true, patterns: ['addEventListener', 'setInterval', 'setTimeout'], severity: 'high' }, caching: { enabled: true, minCacheableResponseTime: 100, recommendedCacheDuration: 3600 } }, thresholds: { maxLoadTimeMs: 3000, maxMemoryUsageMB: 512, minPerformanceScore: 70 } }, documentation: { enabled: true, rules: { readmeQuality: { enabled: true, requiredSections: ['Installation', 'Usage', 'API', 'License'], minWordCount: 200, requireExamples: true, requireBadges: false }, apiDocumentation: { enabled: true, requireJSDoc: true, requireParamDescriptions: true, requireReturnDescriptions: true, requireExamples: false, minCoveragePercent: 80 }, changelog: { enabled: true, requireSemanticVersioning: true, requireDates: true, format: 'keepachangelog' }, codeComments: { enabled: true, minCommentRatio: 10, requireComplexFunctionComments: true, complexityThreshold: 10 } }, thresholds: { minDocumentationScore: 70, minReadmeScore: 75, minAPIDocCoverage: 80 } }, codeQuality: { enabled: true, rules: { duplicateCode: { enabled: true, minTokens: 50, minLines: 5, threshold: 0.9 }, codeSmells: { enabled: true, detectLongMethods: true, detectLargeClasses: true, detectDeepNesting: true, maxNestingDepth: 4 }, namingConventions: { enabled: true, variablePattern: /^[a-z][a-zA-Z0-9]*$/, functionPattern: /^[a-z][a-zA-Z0-9]*$/, classPattern: /^[A-Z][a-zA-Z0-9]*$/, constantPattern: /^[A-Z][A-Z0-9_]*$/ }, testCoverage: { enabled: true, minCoverage: 80, requireUnitTests: true, requireIntegrationTests: false } }, thresholds: { maxDuplicatePercent: 5, maxComplexity: 10, minMaintainabilityIndex: 70, minTestCoverage: 80 } }, crossPlatform: { enabled: true, targetPlatforms: ['windows', 'macOS', 'linux'], rules: { pathHandling: { enabled: true, severity: 'high', requirePathModule: true }, shellCommands: { enabled: true, allowedCommands: [], requireCrossPlatformChecks: true }, filePermissions: { enabled: true, checkSymlinks: true, checkExecutePermissions: true }, environmentVariables: { enabled: true, requireFallbacks: true, platformSpecificVars: { 'HOME': ['linux', 'macOS'], 'USERPROFILE': ['windows'] } } }, thresholds: { minCompatibilityScore: 75, maxPlatformSpecificCode: 10 } }, unusedCode: { enabled: true, rules: { unusedFunctions: { enabled: true, excludePatterns: ['main', 'test*', 'spec*'], checkPrivateMethods: true, checkExports: true }, unusedImports: { enabled: true, checkTypeImports: true, checkSideEffectImports: false }, unusedVariables: { enabled: true, checkGlobalVariables: false, checkParameters: true, allowUnusedCatchErrors: true }, deadCode: { enabled: true, checkUnreachableCode: true, checkEmptyBlocks: true, checkCommentedCode: true } }, thresholds: { maxUnusedPercent: 10, minActiveCodeRatio: 0.85 } } }; // Configuration loader export class AnalyzerConfigLoader { config; constructor(customConfig) { this.config = this.mergeConfig(defaultAnalyzerConfig, customConfig || {}); } mergeConfig(defaults, custom) { return { ...defaults, ...custom, severity: { ...defaults.severity, ...(custom.severity || {}) }, security: this.mergeAnalyzerConfig(defaults.security, custom.security), performance: this.mergeAnalyzerConfig(defaults.performance, custom.performance), documentation: this.mergeAnalyzerConfig(defaults.documentation, custom.documentation), codeQuality: this.mergeAnalyzerConfig(defaults.codeQuality, custom.codeQuality), crossPlatform: this.mergeAnalyzerConfig(defaults.crossPlatform, custom.crossPlatform), unusedCode: this.mergeAnalyzerConfig(defaults.unusedCode, custom.unusedCode) }; } mergeAnalyzerConfig(defaults, custom) { if (!defaults) return custom; if (!custom) return defaults; return { ...defaults, ...custom, rules: { ...defaults.rules, ...custom.rules }, thresholds: { ...defaults.thresholds, ...custom.thresholds } }; } getConfig() { return this.config; } getSecurityConfig() { return this.config.security; } getPerformanceConfig() { return this.config.performance; } getDocumentationConfig() { return this.config.documentation; } getCodeQualityConfig() { return this.config.codeQuality; } getCrossPlatformConfig() { return this.config.crossPlatform; } getUnusedCodeConfig() { return this.config.unusedCode; } // Load configuration from file static async loadFromFile(configPath) { const fs = await import('fs-extra'); try { const configData = await fs.readJson(configPath); return new AnalyzerConfigLoader(configData); } catch (error) { console.warn(`Failed to load config from ${configPath}, using defaults`); return new AnalyzerConfigLoader(); } } // Save configuration to file async saveToFile(configPath) { const fs = await import('fs-extra'); await fs.writeJson(configPath, this.config, { spaces: 2 }); } } //# sourceMappingURL=analyzer-config.js.map