From def56ace1f28e01cc83da25b18f9d380478e2d2d Mon Sep 17 00:00:00 2001 From: Koen Van Geert Date: Thu, 7 Dec 2023 17:01:08 +0100 Subject: [PATCH 1/2] feat: improve performance combining coverage on large codebases --- task.js | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/task.js b/task.js index fc505155..a783df6a 100644 --- a/task.js +++ b/task.js @@ -12,7 +12,6 @@ const { includeAllFiles } = require('./task-utils') const { fixSourcePaths } = require('./support-utils') -const { removePlaceholders } = require('./common-utils') const debug = require('debug')('code-coverage') @@ -59,6 +58,13 @@ const nycReportOptions = (function getNycOption() { const nycFilename = join(nycReportOptions['temp-dir'], 'out.json') +let coverageMap = (() => { + const previousCoverage = existsSync(nycFilename) + ? JSON.parse(readFileSync(nycFilename, 'utf8')) + : {} + return istanbul.createCoverageMap(previousCoverage) +})() + function saveCoverage(coverage) { if (!existsSync(nycReportOptions.tempDir)) { mkdirSync(nycReportOptions.tempDir, { recursive: true }) @@ -122,7 +128,7 @@ const tasks = { resetCoverage({ isInteractive }) { if (isInteractive) { debug('reset code coverage in interactive mode') - const coverageMap = istanbul.createCoverageMap({}) + coverageMap = istanbul.createCoverageMap({}) saveCoverage(coverageMap) } /* @@ -148,21 +154,7 @@ const tasks = { fixSourcePaths(coverage) - const previousCoverage = existsSync(nycFilename) - ? JSON.parse(readFileSync(nycFilename, 'utf8')) - : {} - - // previous code coverage object might have placeholder entries - // for files that we have not seen yet, - // but the user expects to include in the coverage report - // the merge function messes up, so we should remove any placeholder entries - // and re-insert them again when creating the report - removePlaceholders(previousCoverage) - - const coverageMap = istanbul.createCoverageMap(previousCoverage) coverageMap.merge(coverage) - saveCoverage(coverageMap) - debug('wrote coverage file %s', nycFilename) return null }, @@ -172,6 +164,7 @@ const tasks = { * NPM script to generate HTML report */ coverageReport() { + saveCoverage(coverageMap) if (!existsSync(nycFilename)) { console.warn('Cannot find coverage file %s', nycFilename) console.warn('Skipping coverage report') From 55b05c0c5292a28db86dba5c85531c1b4537bcbb Mon Sep 17 00:00:00 2001 From: Jennifer Shehane Date: Fri, 27 Sep 2024 13:16:13 -0400 Subject: [PATCH 2/2] fix: improve perf