vitest-coverage-merge 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # vitest-coverage-merge
2
2
 
3
- Merge Vitest coverage from unit tests (jsdom) and browser component tests with automatic normalization.
3
+ Merge Vitest coverage from unit tests (jsdom) and browser component tests.
4
+
5
+ > **📝 UPDATE (January 2025):**
6
+ >
7
+ > As of v0.2.0, **normalization is now OFF by default**. Use `--normalize` if you need to strip import statements and directives.
4
8
 
5
9
  ## The Problem
6
10
 
@@ -15,7 +19,7 @@ This makes it impossible to accurately merge coverage without normalization.
15
19
 
16
20
  ## The Solution
17
21
 
18
- `vitest-coverage-merge` automatically strips import statements and Next.js directives (`'use client'`, `'use server'`) from coverage data before merging, ensuring consistent statement counts across all sources.
22
+ `vitest-coverage-merge` provides smart merging of coverage data. When you encounter statement count mismatches, you can use the `--normalize` flag to strip import statements and Next.js directives (`'use client'`, `'use server'`) before merging.
19
23
 
20
24
  ## Installation
21
25
 
@@ -33,6 +37,9 @@ npx vitest-coverage-merge coverage/unit coverage/component -o coverage/merged
33
37
 
34
38
  # Merge multiple sources
35
39
  npx vitest-coverage-merge coverage/unit coverage/component coverage/e2e -o coverage/all
40
+
41
+ # Merge with normalization (strips imports/directives)
42
+ npx vitest-coverage-merge coverage/unit coverage/component -o coverage/merged --normalize
36
43
  ```
37
44
 
38
45
  ### Options
@@ -46,7 +53,7 @@ Arguments:
46
53
 
47
54
  Options:
48
55
  -o, --output Output directory for merged coverage (required)
49
- --no-normalize Skip import/directive stripping (not recommended)
56
+ --normalize Strip import statements and directives before merging
50
57
  -h, --help Show help
51
58
  -v, --version Show version
52
59
  ```
@@ -60,7 +67,7 @@ import { mergeCoverage, normalizeCoverage } from 'vitest-coverage-merge'
60
67
  const result = await mergeCoverage({
61
68
  inputDirs: ['coverage/unit', 'coverage/component'],
62
69
  outputDir: 'coverage/merged',
63
- normalize: true, // default
70
+ normalize: false, // default (set to true to strip imports/directives)
64
71
  reporters: ['json', 'lcov', 'html'], // default
65
72
  })
66
73
 
@@ -136,13 +143,16 @@ The tool generates:
136
143
  ## How It Works
137
144
 
138
145
  1. **Load** coverage-final.json from each input directory
139
- 2. **Normalize** by stripping:
146
+ 2. **Normalize** (optional, with `--normalize` flag) by stripping:
140
147
  - ESM import statements (`import ... from '...'`)
141
148
  - React/Next.js directives (`'use client'`, `'use server'`) - if present
142
- 3. **Smart merge** - selects the best coverage structure (browser tests preferred) and merges execution counts
143
- 4. **Generate** reports (JSON, LCOV, HTML)
149
+ 3. **Smart merge** using one of two strategies:
150
+ - **Default (no `--normalize`)**: "More items wins" - prefers source with more coverage items, giving you the union of all structures
151
+ - **With `--normalize`**: "Fewer items wins" - prefers sources without directive statements (browser-style coverage)
152
+ 4. **Merge execution counts** using max strategy (takes highest count for each item)
153
+ 5. **Generate** reports (JSON, LCOV, HTML)
144
154
 
145
- > **Note**: This tool works with any ESM-based Vitest project (React, Vue, Svelte, vanilla JS/TS, etc.). The React/Next.js directive stripping only applies if those directives are present in your codebase - for non-React projects, it simply has no effect. CommonJS `require()` statements are not stripped because V8 treats them consistently in both jsdom and browser environments.
155
+ > **Note**: This tool works with any ESM-based Vitest project (React, Vue, Svelte, vanilla JS/TS, etc.). The React/Next.js directive stripping only applies if those directives are present in your codebase - for non-React projects, it simply has no effect.
146
156
 
147
157
  ## Why Not Use Vitest's Built-in Merge?
148
158
 
package/dist/cli.js CHANGED
@@ -15,28 +15,28 @@ Arguments:
15
15
 
16
16
  Options:
17
17
  -o, --output Output directory for merged coverage (required)
18
- --no-normalize Skip import/directive stripping (not recommended)
18
+ --normalize Strip import statements and directives before merging
19
19
  -h, --help Show this help message
20
20
  -v, --version Show version
21
21
 
22
22
  Examples:
23
23
  vitest-coverage-merge coverage/unit coverage/component -o coverage/merged
24
24
  vitest-coverage-merge coverage/unit coverage/browser coverage/e2e -o coverage/all
25
+ vitest-coverage-merge coverage/unit coverage/component -o coverage/merged --normalize
25
26
 
26
- The tool automatically normalizes coverage by:
27
- - Stripping import statements (counted differently in jsdom vs browser)
28
- - Stripping 'use client'/'use server' directives
29
- - Merging statement, branch, and function coverage
27
+ The --normalize option strips:
28
+ - ESM import statements (counted differently in jsdom vs browser)
29
+ - 'use client'/'use server' directives
30
30
  `);
31
31
  }
32
32
  function printVersion() {
33
- console.log('vitest-coverage-merge v0.1.0');
33
+ console.log('vitest-coverage-merge v0.2.0');
34
34
  }
35
35
  function parseArgs(args) {
36
36
  const result = {
37
37
  inputDirs: [],
38
38
  outputDir: null,
39
- normalize: true,
39
+ normalize: false,
40
40
  help: false,
41
41
  version: false,
42
42
  error: null,
@@ -60,8 +60,8 @@ function parseArgs(args) {
60
60
  }
61
61
  result.outputDir = args[i];
62
62
  }
63
- else if (arg === '--no-normalize') {
64
- result.normalize = false;
63
+ else if (arg === '--normalize') {
64
+ result.normalize = true;
65
65
  }
66
66
  else if (arg.startsWith('-')) {
67
67
  result.error = `Unknown option: ${arg}`;
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3D,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1D,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CACvD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA2G/E;AAGD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3D,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IACzD,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAC1D,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;CACvD;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA8G/E;AAGD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
package/dist/index.js CHANGED
@@ -12,7 +12,7 @@ import { smartMergeCoverage } from './smart-merge.js';
12
12
  * normalizing (stripping imports/directives) before merging.
13
13
  */
14
14
  export async function mergeCoverage(options) {
15
- const { inputDirs, outputDir, normalize = true, reporters = ['json', 'lcov', 'html'], } = options;
15
+ const { inputDirs, outputDir, normalize = false, reporters = ['json', 'lcov', 'html'], } = options;
16
16
  // Load all coverage data
17
17
  const coverageMaps = [];
18
18
  let totalImportsRemoved = 0;
@@ -37,8 +37,11 @@ export async function mergeCoverage(options) {
37
37
  if (normalize && (totalImportsRemoved > 0 || totalDirectivesRemoved > 0)) {
38
38
  console.log(`Normalized: removed ${totalImportsRemoved} import(s), ${totalDirectivesRemoved} directive(s)`);
39
39
  }
40
- // Smart merge: use source with fewer items as baseline
41
- const mergedData = smartMergeCoverage(coverageMaps);
40
+ // Smart merge coverage maps
41
+ // When normalize is false (default): preferUnion=true, use "more items wins" strategy
42
+ // When normalize is true: preferUnion=false, use "fewer items wins" strategy (no directive inflation)
43
+ const preferUnion = !normalize;
44
+ const mergedData = smartMergeCoverage(coverageMaps, preferUnion);
42
45
  const mergedMap = libCoverage.createCoverageMap(mergedData);
43
46
  // Create output directory
44
47
  if (!existsSync(outputDir)) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -2,9 +2,14 @@ import type { CoverageMapData } from 'istanbul-lib-coverage';
2
2
  /**
3
3
  * Smart merge multiple coverage maps.
4
4
  *
5
- * This uses a "fewer items wins" strategy for structure selection,
6
- * which preserves the statement counts from the source without
7
- * import statement inflation.
5
+ * By default (preferUnion: true), uses "more items wins" strategy for structure selection,
6
+ * which gives you the union of all statement structures.
7
+ *
8
+ * When preferUnion is false (--normalize mode), uses "fewer items wins" strategy,
9
+ * which preserves the statement counts from the source without import statement inflation.
10
+ *
11
+ * @param coverageMaps - Array of coverage maps to merge
12
+ * @param preferUnion - If true (default), prefer source with more items; if false, prefer source without directives
8
13
  */
9
- export declare function smartMergeCoverage(coverageMaps: CoverageMapData[]): CoverageMapData;
14
+ export declare function smartMergeCoverage(coverageMaps: CoverageMapData[], preferUnion?: boolean): CoverageMapData;
10
15
  //# sourceMappingURL=smart-merge.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"smart-merge.d.ts","sourceRoot":"","sources":["../src/smart-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,uBAAuB,CAAA;AAuN9E;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,GAAG,eAAe,CAgCnF"}
1
+ {"version":3,"file":"smart-merge.d.ts","sourceRoot":"","sources":["../src/smart-merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAoB,MAAM,uBAAuB,CAAA;AA+O9E;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,YAAY,EAAE,eAAe,EAAE,EAAE,WAAW,GAAE,OAAc,GAAG,eAAe,CAgChH"}
@@ -50,16 +50,22 @@ function buildLookups(data) {
50
50
  }
51
51
  /**
52
52
  * Select the best source coverage for structure.
53
- * Prefers coverage WITHOUT L1:0 directive statements (browser/E2E-style).
54
- * Browser coverage is more accurate because it doesn't count non-executable directives.
53
+ *
54
+ * When preferUnion is true (default):
55
+ * - Prefer coverage WITH MORE items (includes imports and directives)
56
+ * - This gives you the union of all statement structures
57
+ *
58
+ * When preferUnion is false (--normalize mode):
59
+ * - Prefer coverage WITHOUT L1:0 directive statements (browser/E2E-style)
60
+ * - Browser coverage is more accurate because it doesn't count non-executable directives
55
61
  *
56
62
  * Rules:
57
63
  * 1. Filter out sources with no coverage data (0 items)
58
- * 2. Among remaining sources, prefer those without L1:0 directives
59
- * 3. Among sources without directives, prefer the LAST one (component tests by convention)
64
+ * 2. If preferUnion: prefer source with MORE items, prefer LAST when equal
65
+ * 3. If !preferUnion: prefer source without L1:0 directives, then prefer LAST one
60
66
  * 4. If all sources have directives, pick the one with fewer items
61
67
  */
62
- function selectBestSource(coverages) {
68
+ function selectBestSource(coverages, preferUnion = true) {
63
69
  const getTotalItems = (cov) => {
64
70
  return (Object.keys(cov.statementMap || {}).length +
65
71
  Object.keys(cov.branchMap || {}).length +
@@ -76,6 +82,21 @@ function selectBestSource(coverages) {
76
82
  if (nonEmptyWithIndex.length === 1) {
77
83
  return nonEmptyWithIndex[0].cov;
78
84
  }
85
+ // If preferUnion is true (default), pick the source with MORE items
86
+ // This includes imports and directives from all sources
87
+ // When item counts are equal, prefer the LAST source
88
+ if (preferUnion) {
89
+ return nonEmptyWithIndex.reduce((best, current) => {
90
+ const currentItems = getTotalItems(current.cov);
91
+ const bestItems = getTotalItems(best.cov);
92
+ // Prefer more items, or if equal, prefer later source (higher index)
93
+ if (currentItems > bestItems || (currentItems === bestItems && current.idx > best.idx)) {
94
+ return current;
95
+ }
96
+ return best;
97
+ }).cov;
98
+ }
99
+ // preferUnion is false (--normalize mode): prefer source without directives
79
100
  // Check which coverages have L1:0 directive statements
80
101
  const withDirective = [];
81
102
  const withoutDirective = [];
@@ -103,18 +124,20 @@ function selectBestSource(coverages) {
103
124
  }
104
125
  /**
105
126
  * Smart merge of multiple file coverages.
106
- * Uses the source with fewer items as the baseline structure,
107
- * then merges execution counts from all sources.
127
+ * Uses the best source as baseline structure, then merges execution counts from all sources.
128
+ *
129
+ * @param coverages - Array of file coverages to merge
130
+ * @param preferUnion - If true (default), prefer source with more items; if false, prefer source without directives
108
131
  */
109
- function mergeFileCoverages(coverages) {
132
+ function mergeFileCoverages(coverages, preferUnion = true) {
110
133
  if (coverages.length === 0) {
111
134
  throw new Error('No coverages to merge');
112
135
  }
113
136
  if (coverages.length === 1) {
114
137
  return JSON.parse(JSON.stringify(coverages[0]));
115
138
  }
116
- // Select best structure (fewer items)
117
- const bestSource = selectBestSource(coverages);
139
+ // Select best structure based on preferUnion setting
140
+ const bestSource = selectBestSource(coverages, preferUnion);
118
141
  // Build lookup maps for all coverages
119
142
  const allLookups = coverages.map(buildLookups);
120
143
  // Start with best structure (deep copy)
@@ -157,11 +180,11 @@ function mergeFileCoverages(coverages) {
157
180
  for (const [key, branch] of Object.entries(merged.branchMap)) {
158
181
  const locKey = locationKey(branch.loc);
159
182
  const line = lineKey(branch.loc);
160
- const baseCounts = merged.b[key] || [];
161
183
  for (const lookup of allLookups) {
162
184
  const counts = lookup.branches.get(locKey) ?? lookup.branchesByLine.get(line);
163
185
  if (counts !== undefined) {
164
- merged.b[key] = baseCounts.map((c, i) => Math.max(c, counts[i] || 0));
186
+ const currentCounts = merged.b[key] || [];
187
+ merged.b[key] = currentCounts.map((c, i) => Math.max(c, counts[i] || 0));
165
188
  }
166
189
  }
167
190
  }
@@ -170,11 +193,16 @@ function mergeFileCoverages(coverages) {
170
193
  /**
171
194
  * Smart merge multiple coverage maps.
172
195
  *
173
- * This uses a "fewer items wins" strategy for structure selection,
174
- * which preserves the statement counts from the source without
175
- * import statement inflation.
196
+ * By default (preferUnion: true), uses "more items wins" strategy for structure selection,
197
+ * which gives you the union of all statement structures.
198
+ *
199
+ * When preferUnion is false (--normalize mode), uses "fewer items wins" strategy,
200
+ * which preserves the statement counts from the source without import statement inflation.
201
+ *
202
+ * @param coverageMaps - Array of coverage maps to merge
203
+ * @param preferUnion - If true (default), prefer source with more items; if false, prefer source without directives
176
204
  */
177
- export function smartMergeCoverage(coverageMaps) {
205
+ export function smartMergeCoverage(coverageMaps, preferUnion = true) {
178
206
  if (coverageMaps.length === 0) {
179
207
  return {};
180
208
  }
@@ -197,7 +225,7 @@ export function smartMergeCoverage(coverageMaps) {
197
225
  merged[file] = JSON.parse(JSON.stringify(fileCoverages[0]));
198
226
  }
199
227
  else {
200
- merged[file] = mergeFileCoverages(fileCoverages);
228
+ merged[file] = mergeFileCoverages(fileCoverages, preferUnion);
201
229
  }
202
230
  }
203
231
  return merged;
@@ -1 +1 @@
1
- {"version":3,"file":"smart-merge.js","sourceRoot":"","sources":["../src/smart-merge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"smart-merge.js","sourceRoot":"","sources":["../src/smart-merge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vitest-coverage-merge",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Merge Vitest unit and browser component test coverage with automatic normalization",
5
5
  "author": "Steve Zhang",
6
6
  "license": "MIT",
@@ -50,7 +50,7 @@
50
50
  "@types/node": "^22.10.0",
51
51
  "@vitest/coverage-v8": "^4.0.16",
52
52
  "typescript": "^5.7.0",
53
- "vitest": "^4.0.15"
53
+ "vitest": "^4.0.16"
54
54
  },
55
55
  "repository": {
56
56
  "type": "git",