| 489 | |
| 490 | // Write JSON output to file |
| 491 | function writeJsonOutput(results: Record<string, ValidationResult>, outputPath: string): void { |
| 492 | const validatedResults = Object.values(results).filter(r => !r.skipped); |
| 493 | const output: JsonOutput = { |
| 494 | timestamp: new Date().toISOString(), |
| 495 | totalSources: Object.keys(results).length, |
| 496 | totalPackages: validatedResults.reduce((sum, r) => sum + r.total, 0), |
| 497 | validPackages: validatedResults.reduce((sum, r) => sum + r.valid, 0), |
| 498 | failedPackages: validatedResults.reduce((sum, r) => sum + r.failed, 0), |
| 499 | skippedSources: Object.values(results).filter(r => r.skipped).length, |
| 500 | results: Object.values(results), |
| 501 | }; |
| 502 | fs.writeFileSync(outputPath, JSON.stringify(output, null, 2)); |
| 503 | } |
| 504 | |
| 505 | // Main function |
| 506 | async function main() { |