supernal-coding
Version:
Comprehensive development workflow CLI with kanban task management, project validation, git safety hooks, and cross-project distribution system
106 lines (89 loc) • 3.15 kB
JavaScript
const { execSync } = require('child_process');
const path = require('path');
const fs = require('fs');
// Colors for output
const colors = {
red: '\x1b[31m',
green: '\x1b[32m',
yellow: '\x1b[33m',
blue: '\x1b[34m',
purple: '\x1b[35m',
cyan: '\x1b[36m',
bold: '\x1b[1m',
reset: '\x1b[0m'
};
class DevTools {
constructor() {
this.scriptsDir = path.join(__dirname, 'dev-scripts');
}
async findExcessiveLogs(options = {}) {
const { maxRatio = '0.05', outputFile = 'logs/excessive-console-logs.txt' } = options;
console.log(`${colors.blue}🔍 Finding files with excessive console logs...${colors.reset}`);
console.log(`${colors.cyan}Max ratio: ${maxRatio} (${(parseFloat(maxRatio) * 100).toFixed(1)}%)${colors.reset}`);
console.log(`${colors.cyan}Output file: ${outputFile}${colors.reset}`);
const scriptPath = path.join(this.scriptsDir, 'find-excessive-logs.sh');
if (!fs.existsSync(scriptPath)) {
console.error(`${colors.red}❌ Script not found: ${scriptPath}${colors.reset}`);
process.exit(1);
}
try {
const result = execSync(`bash "${scriptPath}" "${maxRatio}" "${outputFile}"`, {
cwd: process.cwd(),
stdio: 'inherit'
});
console.log(`${colors.green}✅ Log analysis completed${colors.reset}`);
console.log(`${colors.cyan}Results saved to: ${outputFile}${colors.reset}`);
} catch (error) {
console.error(`${colors.red}❌ Log analysis failed${colors.reset}`);
process.exit(1);
}
}
showHelp() {
console.log(`${colors.bold}Supernal Coding Development Tools${colors.reset}`);
console.log('');
console.log(`${colors.cyan}Available commands:${colors.reset}`);
console.log(' find-logs [options] Find files with excessive console logs');
console.log('');
console.log(`${colors.cyan}find-logs options:${colors.reset}`);
console.log(' --max-ratio <ratio> Maximum allowed ratio (default: 0.05)');
console.log(' --output <file> Output file path (default: logs/excessive-console-logs.txt)');
console.log('');
console.log(`${colors.cyan}Examples:${colors.reset}`);
console.log(' sc dev find-logs --max-ratio 0.03 --output reports/logs.txt');
}
}
// Handle command line execution
if (require.main === module) {
const args = process.argv.slice(2);
const devTools = new DevTools();
if (args.length === 0) {
devTools.showHelp();
process.exit(0);
}
const command = args[0];
const options = {};
// Parse command line options
for (let i = 1; i < args.length; i += 2) {
if (args[i].startsWith('--')) {
const key = args[i].substring(2).replace(/-/g, '');
const value = args[i + 1];
options[key] = value;
}
}
switch (command) {
case 'find-logs':
devTools.findExcessiveLogs(options);
break;
case 'help':
case '--help':
case '-h':
devTools.showHelp();
break;
default:
console.error(`${colors.red}❌ Unknown command: ${command}${colors.reset}`);
devTools.showHelp();
process.exit(1);
}
}
module.exports = DevTools;