diff --git a/test/html-validate.mjs b/test/html-validate.mjs index 2ee8627..be61085 100644 --- a/test/html-validate.mjs +++ b/test/html-validate.mjs @@ -69,6 +69,12 @@ async function validateParallel() { const workers = []; const taskQueue = [...targets]; + // Debouncing state + let lastSuccessReportTime = 0; + let pendingSuccessCount = 0; + let lastSuccessFilePath = null; + const DEBOUNCE_INTERVAL = 2000; // 2 seconds + let isDone = false; function completeParallelProcessing() { if (isDone) return; @@ -76,6 +82,12 @@ async function validateParallel() { workers.forEach((worker) => worker.terminate()); + // Report any remaining successful files + if (pendingSuccessCount > 0 && lastSuccessFilePath) { + const relativeFilePath = path.relative(process.cwd(), lastSuccessFilePath); + console.log(`✅ (${completedTasks} of ${targets.length}) ${relativeFilePath}`); + } + const failedResults = results.filter((r) => !r.isValid); const passedCount = results.length - failedResults.length; @@ -108,7 +120,16 @@ async function validateParallel() { console.log(`- ${line}`); }); } else { - console.log(`✅ (${completedTasks} of ${targets.length}) ${relativeFilePath}`); + // Debounce successful file reports + const now = Date.now(); + pendingSuccessCount++; + lastSuccessFilePath = result.filePath; + + if (now - lastSuccessReportTime >= DEBOUNCE_INTERVAL) { + console.log(`✅ (${completedTasks} of ${targets.length}) ${relativeFilePath}`); + lastSuccessReportTime = now; + pendingSuccessCount = 0; + } } if (taskQueue.length > 0) {