mira-consciousness
Version:
Memory & Intelligence Retention Archive - Preserving The Spark
299 lines • 9.23 kB
JavaScript
/**
* 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