apex-code-coverage-transformer 3.1.12 → 4.1.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/CHANGELOG.md CHANGED
@@ -5,6 +5,24 @@
5
5
 
6
6
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
7
7
 
8
+ ## [4.1.0](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v4.0.0...v4.1.0) (2026-11-05)
9
+
10
+
11
+ ### Features
12
+
13
+ * **html:** render full source file with coverage overlay ([#435](https://github.com/mcarvin8/apex-code-coverage-transformer/issues/435)) ([6cdc757](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/6cdc757aeee44dbb58d7fb2546951357626be55b))
14
+
15
+ ## [4.0.0](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v3.1.12...v4.0.0) (2026-11-05)
16
+
17
+
18
+ ### ⚠ BREAKING CHANGES
19
+
20
+ * remove deploy coverage line renumbering ([#429](https://github.com/mcarvin8/apex-code-coverage-transformer/issues/429))
21
+
22
+ ### Features
23
+
24
+ * remove deploy coverage line renumbering ([#429](https://github.com/mcarvin8/apex-code-coverage-transformer/issues/429)) ([0c15717](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/0c157176edb7a9e0513f8558960f47bd97558a4a))
25
+
8
26
  ## [3.1.12](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v3.1.11...v3.1.12) (2026-10-28)
9
27
 
10
28
 
package/README.md CHANGED
@@ -6,11 +6,13 @@
6
6
  [![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://raw.githubusercontent.com/mcarvin8/apex-code-coverage-transformer/main/LICENSE.md)
7
7
  [![codecov](https://codecov.io/gh/mcarvin8/apex-code-coverage-transformer/graph/badge.svg?token=4IQ4NWTPQZ)](https://codecov.io/gh/mcarvin8/apex-code-coverage-transformer)
8
8
  [![Mutation testing badge](https://img.shields.io/endpoint?style=flat&url=https%3A%2F%2Fbadge-api.stryker-mutator.io%2Fgithub.com%2Fmcarvin8%2Fapex-code-coverage-transformer%2Fmain)](https://dashboard.stryker-mutator.io/reports/github.com/mcarvin8/apex-code-coverage-transformer/main)
9
+ <!-- gh-dependents-info-used-by-start -->
10
+ [![Generated by github-dependents-info](https://img.shields.io/static/v1?label=Used%20by&message=2&color=informational&logo=slickpic)](https://github.com/mcarvin8/apex-code-coverage-transformer/blob/main/docs/github-dependents-info.md)<!-- gh-dependents-info-used-by-end -->
9
11
 
10
12
  Transforms (and optionally merges) Apex code coverage JSON from Salesforce deployments or test runs into formats used by SonarQube, Codecov, GitHub, GitLab, Azure DevOps, Bitbucket, and other tools, keeping coverage visible across pull requests, CI/CD pipelines, and code quality platforms. Available as a **Salesforce CLI plugin** for any provider, and as a **native GitHub Action** for GitHub Actions users who want to skip installing the CLI.
11
13
 
12
14
  > [!WARNING]
13
- > **Note:** Salesforce deploy command coverage reports contain a known bug where covered lines can be reported beyond the end of a file. This plugin automatically re-numbers those lines to keep deploy coverage accurate. Salesforce API v68.0 is expected to resolve the bug; the fix is kept in place for API v67.0 and earlier. Test-command coverage is unaffected. See [Troubleshooting](#troubleshooting) for details.
15
+ > **v4 breaking change:** v3 and earlier automatically re-numbered deploy command coverage lines that Salesforce reported beyond the end of a file. Salesforce fixed this bug server-side in Winter '27 (API v68.0), regardless of the `--api-version` used on the deploy, so v4 removes the re-numbering and passes deploy coverage lines through exactly as reported. Test-command coverage is unaffected. See [Troubleshooting](#troubleshooting) for details.
14
16
 
15
17
  <details>
16
18
  <summary>Table of Contents</summary>
@@ -49,7 +51,7 @@ For GitHub Actions, this is also available as a [native Action](https://github.c
49
51
 
50
52
  ```yaml
51
53
  - name: Transform Coverage
52
- uses: mcarvin8/apex-code-coverage-transformer@v3
54
+ uses: mcarvin8/apex-code-coverage-transformer@v4
53
55
  with:
54
56
  coverage-json: coverage/test-result-codecoverage.json
55
57
  output-report: coverage.xml
@@ -128,6 +130,7 @@ Works with [sfdx-hardis](https://github.com/hardisgroupcom/sfdx-hardis):
128
130
 
129
131
  ## Command Reference
130
132
 
133
+ <!-- biome-ignore format: oclif readme writes this list with `*` bullets -->
131
134
  <!-- commands -->
132
135
  * [`sf acc-transformer transform`](#sf-acc-transformer-transform)
133
136
 
@@ -194,7 +197,7 @@ EXAMPLES
194
197
  `sf acc-transformer transform -j "coverage1.json" -j "coverage2.json" -r "coverage.xml" -f "sonar"`
195
198
  ```
196
199
 
197
- _See code: [src/commands/acc-transformer/transform.ts](https://github.com/mcarvin8/apex-code-coverage-transformer/blob/v3.1.12/src/commands/acc-transformer/transform.ts)_
200
+ _See code: [src/commands/acc-transformer/transform.ts](https://github.com/mcarvin8/apex-code-coverage-transformer/blob/v4.1.0/src/commands/acc-transformer/transform.ts)_
198
201
  <!-- commandsstop -->
199
202
 
200
203
  ## Coverage Report Formats
@@ -202,7 +205,7 @@ _See code: [src/commands/acc-transformer/transform.ts](https://github.com/mcarvi
202
205
  Use `-f` / `--format` to choose the output format. Multiple `-f` values produce multiple files with the format in the name (e.g. `coverage-sonar.xml`, `coverage-cobertura.xml`).
203
206
 
204
207
  | Format | Description | Typical use | Example |
205
- |----------------|----------------------------|-----------------------------------------|-----------------------------------------------------------------------------------------|
208
+ | -------------- | -------------------------- | --------------------------------------- | --------------------------------------------------------------------------------------- |
206
209
  | sonar | SonarQube generic coverage | SonarQube, SonarCloud | `sf acc-transformer transform -j "coverage.json" -r "coverage.xml" -f "sonar"` |
207
210
  | cobertura | Cobertura XML | Codecov, Azure, Jenkins, GitLab, GitHub | `sf acc-transformer transform -j "coverage.json" -r "coverage.xml" -f "cobertura"` |
208
211
  | jacoco | JaCoCo XML | Codecov, Jenkins, Maven, Gradle | `sf acc-transformer transform -j "coverage.json" -r "coverage.xml" -f "jacoco"` |
@@ -212,7 +215,7 @@ Use `-f` / `--format` to choose the output format. Multiple `-f` values produce
212
215
  | json-summary | JSON summary | Badges, PR comments | `sf acc-transformer transform -j "coverage.json" -r "coverage.json" -f "json-summary"` |
213
216
  | simplecov | SimpleCov JSON | Codecov, Ruby tools | `sf acc-transformer transform -j "coverage.json" -r "coverage.json" -f "simplecov"` |
214
217
  | opencover | OpenCover XML | Azure DevOps, VS, Codecov | `sf acc-transformer transform -j "coverage.json" -r "coverage.xml" -f "opencover"` |
215
- | html | HTML report | Browsers, CI artifacts | `sf acc-transformer transform -j "coverage.json" -r "coverage.html" -f "html"` |
218
+ | html | Full-source HTML report | Browsers, CI artifacts | `sf acc-transformer transform -j "coverage.json" -r "coverage.html" -f "html"` |
216
219
  | markdown | Markdown summary | PR/MR comments, CI job summaries | `sf acc-transformer transform -j "coverage.json" -r "coverage.md" -f "markdown"` |
217
220
  | github-actions | GitHub Actions annotations | GitHub Actions PR diff annotations | `sf acc-transformer transform -j "coverage.json" -r "coverage.txt" -f "github-actions"` |
218
221
 
@@ -235,7 +238,7 @@ jobs:
235
238
  - name: Set up Node.js
236
239
  uses: actions/setup-node@v4
237
240
  with:
238
- node-version: '20'
241
+ node-version: "20"
239
242
 
240
243
  - name: Install Salesforce CLI
241
244
  run: npm install -g @salesforce/cli@latest
@@ -304,7 +307,7 @@ For GitHub Actions specifically, the transform step can run as a native Action i
304
307
 
305
308
  ```yaml
306
309
  - name: Transform Coverage
307
- uses: mcarvin8/apex-code-coverage-transformer@v3
310
+ uses: mcarvin8/apex-code-coverage-transformer@v4
308
311
  with:
309
312
  coverage-json: coverage/test-result-codecoverage.json
310
313
  output-report: coverage.xml
@@ -316,7 +319,7 @@ Repeatable inputs (`coverage-json`, `format`, `ignore-package-directory`, `exclu
316
319
  ```yaml
317
320
  - name: Transform Coverage
318
321
  id: transform
319
- uses: mcarvin8/apex-code-coverage-transformer@v3
322
+ uses: mcarvin8/apex-code-coverage-transformer@v4
320
323
  with:
321
324
  coverage-json: coverage/test-result-codecoverage.json
322
325
  format: |
@@ -407,7 +410,7 @@ jobs:
407
410
  fetch-depth: 0
408
411
  - uses: actions/setup-node@v4
409
412
  with:
410
- node-version: '20'
413
+ node-version: "20"
411
414
  - run: npm install -g @salesforce/cli@latest
412
415
  - run: echo y | sf plugins install apex-code-coverage-transformer
413
416
  - name: Download Suite A coverage
@@ -491,7 +494,7 @@ pool:
491
494
  steps:
492
495
  - task: NodeTool@0
493
496
  inputs:
494
- versionSpec: '20.x'
497
+ versionSpec: "20.x"
495
498
  displayName: Set up Node.js
496
499
 
497
500
  - script: npm install -g @salesforce/cli@latest
@@ -533,7 +536,7 @@ Create `.apexcodecovtransformer.config.json` in the project root to transform co
533
536
  Sample configs: [Salesforce CLI](https://raw.githubusercontent.com/mcarvin8/apex-code-coverage-transformer/main/defaults/salesforce-cli/.apexcodecovtransformer.config.json), [SFDX Hardis](https://raw.githubusercontent.com/mcarvin8/apex-code-coverage-transformer/main/defaults/sfdx-hardis/.apexcodecovtransformer.config.json).
534
537
 
535
538
  | Key | Required | Description |
536
- |----------------------------|------------|----------------------------------------------------------------------------------------------------------------------------------------------|
539
+ | -------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
537
540
  | `deployCoverageJsonPath` | For deploy | Path to deploy coverage JSON. |
538
541
  | `testCoverageJsonPath` | For test | Path to test coverage JSON. |
539
542
  | `outputReportPath` | No | Output path (default: `coverage.[xml/info/json]` by format). |
@@ -589,17 +592,7 @@ Error (1): sfdx-project.json not found in any parent directory.
589
592
  Error (1): ENOENT: no such file or directory: {packageDir}
590
593
  ```
591
594
 
592
- **Deploy coverage line numbers** — Salesforce deploy command coverage reports contain known out-of-range line numbers, regardless of the coverage format requested from the Salesforce CLI. This plugin corrects them automatically by re-numbering covered lines; uncovered lines are unaffected. Test-command coverage is unaffected. See [forcedotcom/salesforcedx-vscode#5511](https://github.com/forcedotcom/salesforcedx-vscode/issues/5511) and [forcedotcom/cli#1568](https://github.com/forcedotcom/cli/issues/1568).
593
-
594
- Salesforce API v68.0 is expected to resolve the out-of-range line numbers in deploy coverage. The re-numbering logic is kept intact for compatibility with API v67.0 and earlier. It only acts on covered lines beyond the end of a file, so when deploy coverage contains no out-of-range lines, it makes no changes.
595
-
596
- To see each remapping, set `SF_LOG_LEVEL=debug` before running the command - each remapped line prints directly to the terminal:
597
-
598
- ```bash
599
- $ SF_LOG_LEVEL=debug sf acc-transformer transform -j "coverage/coverage/coverage.json" -r "coverage.xml" -f "sonar"
600
- [DEBUG] setCoveredLines: Remapping out-of-range covered line 512 to line 47 in force-app/main/default/classes/AccountHandler.cls (file has 98 lines)
601
- The coverage report has been written to: coverage.xml
602
- ```
595
+ **Deploy coverage line numbers** — Older Salesforce deploy command coverage reports could contain covered lines numbered past the end of a file ([forcedotcom/salesforcedx-vscode#5511](https://github.com/forcedotcom/salesforcedx-vscode/issues/5511), [forcedotcom/cli#1568](https://github.com/forcedotcom/cli/issues/1568)). Salesforce fixed this server-side in Winter '27 (API v68.0), and the fix applies regardless of the `--api-version` requested on the deploy. Versions 3.x and earlier of this plugin re-numbered those lines; starting with v4, deploy coverage lines are passed through as reported by Salesforce. If you still see out-of-range lines in deploy coverage, please [open an issue](https://github.com/mcarvin8/apex-code-coverage-transformer/issues).
603
596
 
604
597
  ## Questions or Issues?
605
598
 
@@ -1,6 +1,37 @@
1
1
  'use strict';
2
2
  import { BaseHandler } from './BaseHandler.js';
3
3
  import { HandlerRegistry } from './HandlerRegistry.js';
4
+ function toExecutableLine(lineNumber, hitCount, content) {
5
+ return { lineNumber, hitCount, covered: hitCount > 0, content, executable: true };
6
+ }
7
+ /** Rows for coverage-data lines only. Used when the source file could not be read. */
8
+ function buildCoverageOnlyLines(lines) {
9
+ return Object.entries(lines)
10
+ .map(([lineNumber, hitCount]) => toExecutableLine(Number(lineNumber), hitCount, ''))
11
+ .sort((a, b) => a.lineNumber - b.lineNumber);
12
+ }
13
+ /**
14
+ * Rows for every line of the source file, with coverage overlaid on executable lines.
15
+ * Coverage lines numbered past the end of the file are still listed (with empty content)
16
+ * so no reported coverage is dropped from the view.
17
+ */
18
+ function buildFullSourceLines(lines, sourceContent) {
19
+ const sourceLines = sourceContent.split(/\r\n|\r|\n/);
20
+ if (sourceLines.at(-1) === '') {
21
+ sourceLines.pop();
22
+ }
23
+ const lastCoverageLine = Object.keys(lines).reduce((max, key) => Math.max(max, Number(key) || 0), 0);
24
+ const lineCount = Math.max(sourceLines.length, lastCoverageLine);
25
+ const rows = [];
26
+ for (let lineNumber = 1; lineNumber <= lineCount; lineNumber++) {
27
+ const content = sourceLines[lineNumber - 1] ?? '';
28
+ const hitCount = lines[String(lineNumber)];
29
+ rows.push(hitCount === undefined
30
+ ? { lineNumber, hitCount: 0, covered: false, content, executable: false }
31
+ : toExecutableLine(lineNumber, hitCount, content));
32
+ }
33
+ return rows;
34
+ }
4
35
  /**
5
36
  * Handler for generating HTML coverage reports.
6
37
  *
@@ -39,19 +70,7 @@ export class HtmlCoverageHandler extends BaseHandler {
39
70
  }
40
71
  processFile(filePath, fileName, lines, sourceContent) {
41
72
  const { totalLines, coveredLines, uncoveredLines, lineRate } = this.calculateCoverage(lines);
42
- const sourceLines = sourceContent ? sourceContent.split(/\r?\n/) : [];
43
- const fileLines = Object.entries(lines)
44
- .map(([lineNumber, hitCount]) => {
45
- const num = Number(lineNumber);
46
- const content = sourceLines[num - 1] ?? '';
47
- return {
48
- lineNumber: num,
49
- hitCount,
50
- covered: hitCount > 0,
51
- content,
52
- };
53
- })
54
- .sort((a, b) => a.lineNumber - b.lineNumber);
73
+ const fileLines = sourceContent === undefined ? buildCoverageOnlyLines(lines) : buildFullSourceLines(lines, sourceContent);
55
74
  const fileCoverage = {
56
75
  filePath,
57
76
  fileName,
@@ -1 +1 @@
1
- {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/handlers/html.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAKvD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IACjC,WAAW,CAAqB;IACzC,qBAAqB,GAAG,CAAC,CAAC;IAC1B,uBAAuB,GAAG,CAAC,CAAC;IACnB,UAAU,GAAG,IAAI,GAAG,EAA8B,CAAC;IAEpE;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,WAAW,GAAG;YACjB,OAAO,EAAE;gBACP,UAAU,EAAE,CAAC;gBACb,YAAY,EAAE,CAAC;gBACf,cAAc,EAAE,CAAC;gBACjB,QAAQ,EAAE,CAAC;aACZ;YACD,gBAAgB,EAAE,EAAE;YACpB,KAAK,EAAE,EAAE;SACV,CAAC;IACJ,CAAC;IAEM,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,KAA6B,EAAE,aAAsB;QAC1G,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE7F,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtE,MAAM,SAAS,GAA8B,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aAC/D,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,EAAE;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/B,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,OAAO;gBACL,UAAU,EAAE,GAAG;gBACf,QAAQ;gBACR,OAAO,EAAE,QAAQ,GAAG,CAAC;gBACrB,OAAO;aACR,CAAC;QACJ,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;QAE/C,MAAM,YAAY,GAAqB;YACrC,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,YAAY;YACZ,cAAc;YACd,QAAQ;YACR,KAAK,EAAE,SAAS;SACjB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAE1C,oBAAoB;QACpB,IAAI,CAAC,qBAAqB,IAAI,UAAU,CAAC;QACzC,IAAI,CAAC,uBAAuB,IAAI,YAAY,CAAC;QAE7C,oDAAoD;QACpD,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,UAAU,IAAI,UAAU,CAAC;YAClC,QAAQ,CAAC,YAAY,IAAI,YAAY,CAAC;YACtC,QAAQ,CAAC,SAAS,IAAI,CAAC,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC;IAEM,QAAQ;QACb,oBAAoB;QACpB,MAAM,cAAc,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,CAAC;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;QAEhH,IAAI,CAAC,WAAW,CAAC,OAAO,GAAG;YACzB,UAAU,EAAE,IAAI,CAAC,qBAAqB;YACtC,YAAY,EAAE,IAAI,CAAC,uBAAuB;YAC1C,cAAc;YACd,QAAQ;SACT,CAAC;QAEF,gFAAgF;QAChF,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,IAAI,KAAK,IAAI;gBAAE,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,qDAAqD;QACrD,IAAI,CAAC,WAAW,CAAC,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;aACtE,GAAG,CAAC,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,EAAsB,EAAE;YAC5C,MAAM,iBAAiB,GAAG,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC;YAC5D,MAAM,WAAW,GAAG,GAAG,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/E,OAAO;gBACL,SAAS;gBACT,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,YAAY,EAAE,GAAG,CAAC,YAAY;gBAC9B,cAAc,EAAE,iBAAiB;gBACjC,QAAQ,EAAE,WAAW;gBACrB,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB,CAAC;QACJ,CAAC,CAAC;aACD,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QAE1D,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,6BAA6B;AAC7B,eAAe,CAAC,QAAQ,CAAC;IACvB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,iDAAiD;IAC9D,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,mBAAmB,EAAE;IACxC,cAAc,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,mBAAmB,CAAC;CACzE,CAAC,CAAC"}
1
+ {"version":3,"file":"html.js","sourceRoot":"","sources":["../../src/handlers/html.ts"],"names":[],"mappings":"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"}
@@ -6,7 +6,6 @@ import { getCoverageHandler } from '../handlers/getHandler.js';
6
6
  import { findFilePath } from '../utils/findFilePath.js';
7
7
  import { matchesGlob } from '../utils/globMatcher.js';
8
8
  import { mapLimit } from '../utils/mapLimit.js';
9
- import { setCoveredLines } from '../utils/setCoveredLines.js';
10
9
  export function createHandlers(formats) {
11
10
  const handlers = new Map();
12
11
  for (const format of formats) {
@@ -14,9 +13,6 @@ export function createHandlers(formats) {
14
13
  }
15
14
  return handlers;
16
15
  }
17
- function hasSourceContent(result) {
18
- return typeof result === 'object' && result !== null && 'sourceContent' in result;
19
- }
20
16
  async function readSourceFile(absolutePath) {
21
17
  try {
22
18
  return await readFile(absolutePath, 'utf-8');
@@ -25,6 +21,16 @@ async function readSourceFile(absolutePath) {
25
21
  return undefined;
26
22
  }
27
23
  }
24
+ async function loadSourceContent(path, context) {
25
+ if (!context.handlers.has('html')) {
26
+ return undefined;
27
+ }
28
+ const content = await readSourceFile(join(context.repoRoot, path));
29
+ if (content === undefined) {
30
+ context.warnings.push(`Could not read source file ${path}; the HTML report will show coverage for this file without line contents.`);
31
+ }
32
+ return content;
33
+ }
28
34
  export function countLines(lines) {
29
35
  const totalLines = Object.keys(lines).length;
30
36
  const coveredLines = Object.values(lines).filter((v) => v === 1).length;
@@ -56,18 +62,15 @@ async function processEntries(items, context, getName, resolveLines) {
56
62
  return { processed, totalLines, coveredLines };
57
63
  }
58
64
  export function processDeployCoverage(data, context) {
59
- return processEntries(Object.keys(data), context, (fileName) => fileName, async (fileName, path) => {
60
- const fileInfo = data[fileName];
61
- const result = await setCoveredLines(path, context.repoRoot, fileInfo.s, context.handlers.has('html'));
62
- const updatedLines = hasSourceContent(result) ? result.updatedLines : result;
63
- fileInfo.s = updatedLines;
64
- return { lines: updatedLines, sourceContent: hasSourceContent(result) ? result.sourceContent : undefined };
65
- });
65
+ return processEntries(Object.keys(data), context, (fileName) => fileName, async (fileName, path) => ({
66
+ lines: data[fileName].s,
67
+ sourceContent: await loadSourceContent(path, context),
68
+ }));
66
69
  }
67
70
  export function processTestCoverage(data, context) {
68
71
  return processEntries(data, context, (entry) => entry.name, async (entry, path) => ({
69
72
  lines: entry.lines,
70
- sourceContent: context.handlers.has('html') ? await readSourceFile(join(context.repoRoot, path)) : undefined,
73
+ sourceContent: await loadSourceContent(path, context),
71
74
  }));
72
75
  }
73
76
  //# sourceMappingURL=coverageProcessor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"coverageProcessor.js","sourceRoot":"","sources":["../../src/transformers/coverageProcessor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coverageProcessor.js","sourceRoot":"","sources":["../../src/transformers/coverageProcessor.ts"],"names":[],"mappings":"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"}
@@ -48,9 +48,16 @@ function groupFilesByDir(files) {
48
48
  return filesByDir;
49
49
  }
50
50
  function buildLineRow(line) {
51
+ const codeContent = line.content !== undefined ? escapeHtml(line.content) : '';
52
+ if (line.executable === false) {
53
+ return `<tr class="neutral">
54
+ <td class="line-number">${line.lineNumber}</td>
55
+ <td class="hit-count"></td>
56
+ <td class="line-content">${codeContent}</td>
57
+ </tr>`;
58
+ }
51
59
  const lineClass = line.covered ? 'covered' : 'uncovered';
52
60
  const lineColor = line.covered ? '#c8e6c9' : '#ffcdd2';
53
- const codeContent = line.content !== undefined ? escapeHtml(line.content) : '';
54
61
  return `<tr class="${lineClass}" style="background-color: ${lineColor}">
55
62
  <td class="line-number">${line.lineNumber}</td>
56
63
  <td class="hit-count">${line.hitCount}</td>
@@ -267,6 +274,9 @@ export function generateHtml(coverageObj) {
267
274
  .uncovered {
268
275
  background-color: #ffcdd2 !important;
269
276
  }
277
+ .neutral .line-content {
278
+ color: #666;
279
+ }
270
280
  .package-summary {
271
281
  margin-bottom: 30px;
272
282
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generateHtml.js","sourceRoot":"","sources":["../../../src/transformers/generators/generateHtml.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generateHtml.js","sourceRoot":"","sources":["../../../src/transformers/generators/generateHtml.ts"],"names":[],"mappings":"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"}
@@ -334,12 +334,20 @@ export type HtmlFileCoverage = {
334
334
  coveredLines: number;
335
335
  uncoveredLines: number;
336
336
  lineRate: number;
337
- lines: Array<{
338
- lineNumber: number;
339
- hitCount: number;
340
- covered: boolean;
341
- content?: string;
342
- }>;
337
+ lines: HtmlLineCoverage[];
338
+ };
339
+ /**
340
+ * One row in the HTML line view. When source content is available, every
341
+ * line of the file is listed; lines absent from the coverage data are marked
342
+ * `executable: false` (comments, signatures, braces, blank lines).
343
+ */
344
+ export type HtmlLineCoverage = {
345
+ lineNumber: number;
346
+ hitCount: number;
347
+ covered: boolean;
348
+ content?: string;
349
+ /** False for non-executable lines. Omitted or true for lines in the coverage data. */
350
+ executable?: boolean;
343
351
  };
344
352
  /** Summary for a package directory (e.g. force-app) in the HTML report */
345
353
  export type HtmlPackageSummary = {
@@ -131,5 +131,5 @@
131
131
  ]
132
132
  }
133
133
  },
134
- "version": "3.1.12"
134
+ "version": "4.1.0"
135
135
  }
package/package.json CHANGED
@@ -1,34 +1,34 @@
1
1
  {
2
2
  "name": "apex-code-coverage-transformer",
3
3
  "description": "Transform Salesforce Apex code coverage JSON for SonarQube, SonarCloud, GitHub, GitLab, Azure, and Bitbucket",
4
- "version": "3.1.12",
4
+ "version": "4.1.0",
5
5
  "dependencies": {
6
- "@oclif/core": "5.1.2",
7
- "@salesforce/core": "9.2.0",
8
- "@salesforce/sf-plugins-core": "13.0.4"
6
+ "@oclif/core": "5.1.10",
7
+ "@salesforce/core": "9.4.4",
8
+ "@salesforce/sf-plugins-core": "13.0.8"
9
9
  },
10
10
  "devDependencies": {
11
11
  "@actions/core": "3.0.1",
12
- "@biomejs/biome": "2.5.14",
13
- "@commitlint/cli": "21.2.3",
14
- "@commitlint/config-conventional": "21.2.3",
15
- "@salesforce/cli-plugins-testkit": "5.3.66",
12
+ "@biomejs/biome": "2.6.5",
13
+ "@commitlint/cli": "21.2.4",
14
+ "@commitlint/config-conventional": "21.2.4",
15
+ "@salesforce/cli-plugins-testkit": "5.3.83",
16
16
  "@salesforce/dev-config": "4.3.3",
17
- "@stryker-mutator/core": "10.0.0",
18
- "@stryker-mutator/vitest-runner": "10.0.0",
19
- "@types/node": "26.6.3",
20
- "@vitest/coverage-v8": "5.0.2",
17
+ "@stryker-mutator/core": "10.1.1",
18
+ "@stryker-mutator/vitest-runner": "10.1.1",
19
+ "@types/node": "26.6.6",
20
+ "@vitest/coverage-v8": "5.0.5",
21
21
  "esbuild": "0.28.2",
22
22
  "husky": "9.1.7",
23
- "knip": "6.38.0",
23
+ "knip": "6.44.1",
24
24
  "lint-staged": "17.6.0",
25
25
  "ls-engines": "0.10.1",
26
- "oclif": "6.0.2",
26
+ "oclif": "6.0.15",
27
27
  "shx": "0.4.0",
28
28
  "tsx": "4.23.15",
29
29
  "typescript": "7.0.2",
30
- "vitest": "5.0.2",
31
- "wireit": "0.14.13"
30
+ "vitest": "5.0.5",
31
+ "wireit": "0.15.0"
32
32
  },
33
33
  "engines": {
34
34
  "node": ">=22.19.0"
@@ -92,6 +92,7 @@
92
92
  "clean:build": "wireit",
93
93
  "clean:package-manager": "wireit",
94
94
  "compile": "wireit",
95
+ "dependencies:upgrade": "npx npm-check-updates -u && npm install && npm audit fix",
95
96
  "format": "wireit",
96
97
  "lint": "wireit",
97
98
  "lint:dependencies": "wireit",
@@ -175,22 +176,24 @@
175
176
  "clean": "if-file-deleted"
176
177
  },
177
178
  "format": {
178
- "command": "biome format --write src test",
179
+ "command": "biome format --write src test README.md CONTRIBUTING.md",
179
180
  "files": [
180
181
  "src/**/*.ts",
181
182
  "test/**/*.ts",
182
- "biome.json"
183
+ "biome.json",
184
+ "*.md"
183
185
  ],
184
186
  "output": []
185
187
  },
186
188
  "lint": {
187
- "command": "biome check src test",
189
+ "command": "biome check src test README.md CONTRIBUTING.md",
188
190
  "files": [
189
191
  "src/**/*.ts",
190
192
  "test/**/*.ts",
191
193
  "messages/**",
192
194
  "biome.json",
193
- "**/tsconfig.json"
195
+ "**/tsconfig.json",
196
+ "*.md"
194
197
  ],
195
198
  "output": []
196
199
  },
@@ -332,6 +335,6 @@
332
335
  "url": "https://github.com/mcarvin8/apex-code-coverage-transformer/issues"
333
336
  },
334
337
  "allowScripts": {
335
- "esbuild@0.28.1": true
338
+ "esbuild@0.28.2": true
336
339
  }
337
340
  }
@@ -1,5 +0,0 @@
1
- export type GetTotalLinesResult = number | {
2
- totalLines: number;
3
- content: string;
4
- };
5
- export declare function getTotalLines(filePath: string, returnContent?: boolean): Promise<GetTotalLinesResult>;
@@ -1,8 +0,0 @@
1
- 'use strict';
2
- import { readFile } from 'node:fs/promises';
3
- export async function getTotalLines(filePath, returnContent = false) {
4
- const content = await readFile(filePath, 'utf8');
5
- const totalLines = content.split(/\r\n|\r|\n/).length;
6
- return returnContent ? { totalLines, content } : totalLines;
7
- }
8
- //# sourceMappingURL=getTotalLines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getTotalLines.js","sourceRoot":"","sources":["../../src/utils/getTotalLines.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAI5C,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,aAAa,GAAG,KAAK;IACzE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC;IACtD,OAAO,aAAa,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AAC9D,CAAC"}
@@ -1,5 +0,0 @@
1
- export type SetCoveredLinesResult = Record<string, number> | {
2
- updatedLines: Record<string, number>;
3
- sourceContent: string;
4
- };
5
- export declare function setCoveredLines(filePath: string, repoRoot: string, lines: Record<string, number>, returnSourceContent?: boolean): Promise<SetCoveredLinesResult>;
@@ -1,38 +0,0 @@
1
- 'use strict';
2
- import { join } from 'node:path';
3
- import { getTotalLines } from './getTotalLines.js';
4
- function debugLog(message) {
5
- if (process.env.SF_LOG_LEVEL === 'debug') {
6
- // eslint-disable-next-line no-console
7
- console.debug(`[DEBUG] setCoveredLines: ${message}`);
8
- }
9
- }
10
- export async function setCoveredLines(filePath, repoRoot, lines, returnSourceContent = false) {
11
- const result = await getTotalLines(join(repoRoot, filePath), returnSourceContent);
12
- const totalLines = typeof result === 'number' ? result : result.totalLines;
13
- const updatedLines = {};
14
- const usedLines = new Set();
15
- const sortedLines = Object.entries(lines).sort(([lineA], [lineB]) => parseInt(lineA, 10) - parseInt(lineB, 10));
16
- for (const [line, status] of sortedLines) {
17
- const lineNumber = parseInt(line, 10);
18
- if (status === 1 && lineNumber > totalLines) {
19
- for (let randomLine = 1; randomLine <= totalLines; randomLine++) {
20
- if (!usedLines.has(randomLine)) {
21
- debugLog(`Remapping out-of-range covered line ${lineNumber} to line ${randomLine} in ${filePath} (file has ${totalLines} lines)`);
22
- updatedLines[randomLine.toString()] = status;
23
- usedLines.add(randomLine);
24
- break;
25
- }
26
- }
27
- }
28
- else {
29
- updatedLines[line] = status;
30
- usedLines.add(lineNumber);
31
- }
32
- }
33
- if (returnSourceContent && typeof result !== 'number') {
34
- return { updatedLines, sourceContent: result.content };
35
- }
36
- return updatedLines;
37
- }
38
- //# sourceMappingURL=setCoveredLines.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setCoveredLines.js","sourceRoot":"","sources":["../../src/utils/setCoveredLines.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAMnD,SAAS,QAAQ,CAAC,OAAe;IAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;QACzC,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;IACvD,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,QAAgB,EAChB,KAA6B,EAC7B,mBAAmB,GAAG,KAAK;IAE3B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,mBAAmB,CAAC,CAAC;IAClF,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IAC3E,MAAM,YAAY,GAA2B,EAAE,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC;IAEhH,KAAK,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAEtC,IAAI,MAAM,KAAK,CAAC,IAAI,UAAU,GAAG,UAAU,EAAE,CAAC;YAC5C,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE,UAAU,IAAI,UAAU,EAAE,UAAU,EAAE,EAAE,CAAC;gBAChE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC/B,QAAQ,CACN,uCAAuC,UAAU,YAAY,UAAU,OAAO,QAAQ,cAAc,UAAU,SAAS,CACxH,CAAC;oBACF,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC;oBAC7C,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC1B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,YAAY,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;YAC5B,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,mBAAmB,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QACtD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IACzD,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}