run-l2-analysis.tsโข6.71 kB
#!/usr/bin/env tsx
import { executeL2WeightedIssues } from '../src/tools/l2-weighted-issues';
import { executeL2CPUAnalysis } from '../src/tools/l2-cpu-analysis';
import { executeL2ComprehensiveIssues } from '../src/tools/l2-comprehensive-issues';
import { executeL2UnusedCode } from '../src/tools/l2-unused-code';
import { executeL2CriticalChain } from '../src/tools/l2-critical-chain';
import { executeL2DeepAnalysis } from '../src/tools/l2-deep-analysis';
import fs from 'fs/promises';
import path from 'path';
// Get report file from command line or use default
const REPORT_FILE = process.argv[2] || 'latest-report.json';
async function runAllL2Analysis() {
console.log(`๐ L2 Analysis Suite - Analyzing: ${REPORT_FILE}\n`);
// Check if report file exists
try {
await fs.access(REPORT_FILE);
} catch {
console.error(`โ Report file not found: ${REPORT_FILE}`);
console.log('\nUsage: npm run analyze:l2 <report-file.json>');
process.exit(1);
}
// Ensure reports directory exists
try {
await fs.mkdir('reports', { recursive: true });
} catch {}
// 1. l2_weighted_issuesๅๆ
console.log('=== 1. l2_weighted_issuesๅๆ ===');
try {
const weightedResult = await executeL2WeightedIssues({ reportId: REPORT_FILE });
console.log('โ l2_weighted_issuesๅๆๅฎไบ');
// ็ตๆใใใกใคใซใซไฟๅญ
await fs.writeFile(
path.join('reports', 'l2-weighted-issues-result.json'),
JSON.stringify(weightedResult, null, 2)
);
// ็ฐกๅใชใตใใชใผใ่กจ็คบ
console.log(`Total Weighted Impact: ${weightedResult.totalWeightedImpact.toFixed(2)}`);
console.log(`Impact Percentage: ${weightedResult.impactPercentage.toFixed(1)}%`);
console.log(`Top Issue: ${weightedResult.topIssues[0]?.title || 'None'}`);
console.log('');
} catch (error) {
console.error('โ l2_weighted_issuesๅๆใงใจใฉใผ:', error.message);
console.log('');
}
// 2. l2_cpu_analysisๅๆ
console.log('=== 2. l2_cpu_analysisๅๆ ===');
try {
const cpuResult = await executeL2CPUAnalysis({ reportId: REPORT_FILE });
console.log('โ l2_cpu_analysisๅๆๅฎไบ');
await fs.writeFile(
path.join('reports', 'l2-cpu-analysis-result.json'),
JSON.stringify(cpuResult, null, 2)
);
console.log(`Total Blocking Time: ${cpuResult.summary.totalBlockingTime}ms`);
console.log(`Main Thread Busy Time: ${cpuResult.summary.mainThreadBusyTime}ms`);
console.log(`CPU Score: ${cpuResult.summary.cpuScore}`);
console.log(`Severity: ${cpuResult.summary.severity}`);
console.log('');
} catch (error) {
console.error('โ l2_cpu_analysisๅๆใงใจใฉใผ:', error.message);
console.log('');
}
// 3. l2_comprehensive_issuesๅๆ
console.log('=== 3. l2_comprehensive_issuesๅๆ ===');
try {
const comprehensiveResult = await executeL2ComprehensiveIssues({ reportId: REPORT_FILE });
console.log('โ l2_comprehensive_issuesๅๆๅฎไบ');
await fs.writeFile(
path.join('reports', 'l2-comprehensive-issues-result.json'),
JSON.stringify(comprehensiveResult, null, 2)
);
console.log(`Total Issues: ${comprehensiveResult.totalIssues}`);
console.log(`Critical Issues: ${comprehensiveResult.criticalIssues.length}`);
console.log(`Categories with Issues: ${Object.keys(comprehensiveResult.categorySummary).length}`);
console.log('');
} catch (error) {
console.error('โ l2_comprehensive_issuesๅๆใงใจใฉใผ:', error.message);
console.log('');
}
// 4. l2_unused_codeๅๆ
console.log('=== 4. l2_unused_codeๅๆ ===');
try {
const unusedCodeResult = await executeL2UnusedCode({ reportId: REPORT_FILE });
console.log('โ l2_unused_codeๅๆๅฎไบ');
await fs.writeFile(
path.join('reports', 'l2-unused-code-result.json'),
JSON.stringify(unusedCodeResult, null, 2)
);
console.log(`Total Wasted Bytes: ${unusedCodeResult.unusedCode.totalWastedBytes} bytes`);
console.log(`Total Wasted Time: ${unusedCodeResult.unusedCode.totalWastedMs} ms`);
console.log(`Files with unused code: ${unusedCodeResult.unusedCode.files.length}`);
console.log('');
} catch (error) {
console.error('โ l2_unused_codeๅๆใงใจใฉใผ:', error.message);
console.log('');
}
// 5. l2_critical_chainๅๆ
console.log('=== 5. l2_critical_chainๅๆ ===');
try {
const criticalChainResult = await executeL2CriticalChain({ reportId: REPORT_FILE });
console.log('โ l2_critical_chainๅๆๅฎไบ');
await fs.writeFile(
path.join('reports', 'l2-critical-chain-result.json'),
JSON.stringify(criticalChainResult, null, 2)
);
console.log(`Total Critical Chains: ${criticalChainResult.criticalChains.chains.length}`);
console.log(`Max Chain Depth: ${criticalChainResult.criticalChains.longestChain.depth}`);
console.log(`Total Blocking Time: ${criticalChainResult.criticalChains.longestChain.duration}ms`);
console.log('');
} catch (error) {
console.error('โ l2_critical_chainๅๆใงใจใฉใผ:', error.message);
console.log('');
}
// 6. l2_deep_analysisๅๆ
console.log('=== 6. l2_deep_analysisๅๆ ===');
try {
const deepAnalysisResult = await executeL2DeepAnalysis({ reportId: REPORT_FILE });
console.log('โ l2_deep_analysisๅๆๅฎไบ');
await fs.writeFile(
path.join('reports', 'l2-deep-analysis-result.json'),
JSON.stringify(deepAnalysisResult, null, 2)
);
console.log(`Performance Score: ${deepAnalysisResult.analysis.performanceScore}`);
console.log(`Total Issues: ${deepAnalysisResult.analysis.issues.length}`);
console.log(`Critical Issues: ${deepAnalysisResult.analysis.issues.filter(i => i.severity === 'critical').length}`);
console.log('');
} catch (error) {
console.error('โ l2_deep_analysisๅๆใงใจใฉใผ:', error.message);
console.log('');
}
console.log('\nโ
All L2 analyses complete!');
console.log('\n๐ Output files saved to reports/ directory:');
console.log(' โข reports/l2-weighted-issues-result.json');
console.log(' โข reports/l2-cpu-analysis-result.json');
console.log(' โข reports/l2-comprehensive-issues-result.json');
console.log(' โข reports/l2-unused-code-result.json');
console.log(' โข reports/l2-critical-chain-result.json');
console.log(' โข reports/l2-deep-analysis-result.json');
}
if (import.meta.url === `file://${process.argv[1]}`) {
runAllL2Analysis()
.then(() => {
console.log('ๅฎไบ');
process.exit(0);
})
.catch((error) => {
console.error('ใจใฉใผ:', error);
process.exit(1);
});
}
export { runAllL2Analysis };