apex-code-coverage-transformer 2.8.7 → 2.10.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 +20 -0
- package/README.md +23 -18
- package/lib/commands/acc-transformer/transform.d.ts +1 -0
- package/lib/commands/acc-transformer/transform.js +9 -2
- package/lib/commands/acc-transformer/transform.js.map +1 -1
- package/lib/handlers/coberturaCoverageHandler.d.ts +1 -1
- package/lib/handlers/coberturaCoverageHandler.js +26 -20
- package/lib/handlers/coberturaCoverageHandler.js.map +1 -1
- package/lib/helpers/getPackageDirectories.d.ts +1 -1
- package/lib/helpers/getPackageDirectories.js +4 -2
- package/lib/helpers/getPackageDirectories.js.map +1 -1
- package/lib/helpers/transformDeployCoverageReport.d.ts +1 -1
- package/lib/helpers/transformDeployCoverageReport.js +2 -2
- package/lib/helpers/transformDeployCoverageReport.js.map +1 -1
- package/lib/helpers/transformTestCoverageReport.d.ts +1 -1
- package/lib/helpers/transformTestCoverageReport.js +2 -2
- package/lib/helpers/transformTestCoverageReport.js.map +1 -1
- package/messages/transformer.transform.md +5 -0
- package/oclif.lock +871 -925
- package/oclif.manifest.json +12 -2
- package/package.json +6 -6
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,26 @@
|
|
|
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
|
+
## [2.10.0](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.9.0...v2.10.0) (2025-02-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* dynamically determine cobertura package names from file paths ([cbf63df](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/cbf63dfc44ec79c9ec4e58bdc68bb9458f925e4f))
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
### Bug Fixes
|
|
17
|
+
|
|
18
|
+
* **deps:** bump @oclif/core from 4.2.6 to 4.2.8 ([b838b3f](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/b838b3f6a47eb8fee04d6d8a1321fc82c949cfe4))
|
|
19
|
+
* **deps:** bump @salesforce/core from 8.8.2 to 8.8.3 ([c395e9c](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/c395e9cf8e38fdd606b594589376b9670e7f220c))
|
|
20
|
+
|
|
21
|
+
## [2.9.0](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.8.7...v2.9.0) (2025-02-16)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Features
|
|
25
|
+
|
|
26
|
+
* add ignore package directories flag ([3666c59](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/3666c59bdd675c1610c2409bddbd11fe4ed03719))
|
|
27
|
+
|
|
8
28
|
## [2.8.7](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.8.6...v2.8.7) (2025-02-13)
|
|
9
29
|
|
|
10
30
|
|
package/README.md
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
<summary>Table of Contents</summary>
|
|
8
8
|
|
|
9
9
|
- [Install](#install)
|
|
10
|
-
- [
|
|
11
|
-
- [
|
|
12
|
-
- [
|
|
13
|
-
- [What
|
|
10
|
+
- [Usage](#usage)
|
|
11
|
+
- [Salesforce CLI](#salesforce-cli)
|
|
12
|
+
- [SFDX Hardis](#sfdx-hardis)
|
|
13
|
+
- [What This Fixes](#what-this-fixes)
|
|
14
14
|
- [Command](#command)
|
|
15
15
|
- [`sf acc-transformer transform`](#sf-acc-transformer-transform)
|
|
16
16
|
- [Coverage Report Formats](#coverage-report-formats)
|
|
@@ -31,17 +31,19 @@ If there's a coverage format not yet supported by this plugin, feel free to prov
|
|
|
31
31
|
sf plugins install apex-code-coverage-transformer@x.y.z
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
##
|
|
34
|
+
## Usage
|
|
35
35
|
|
|
36
|
-
This plugin is intended for users who deploy their Apex
|
|
36
|
+
This plugin is intended for users who deploy their Apex or invoke Apex tests in their orgs from any Salesforce DX project (`sfdx-project.json` file) and would like to import the code coverage reports into external tools. The code coverage reports created by the Salesforce CLI aren't accepted automatically by external tools and needs to be transformed using this plugin.
|
|
37
37
|
|
|
38
38
|
This plugin will work regardless of your testing strategy (running all tests, running specified tests, running all local tests). The files in the original coverage JSON has to be found in one of the package directories to be added to the final report. This ensures external tools like SonarQube can match files in the coverage report to a file in the project.
|
|
39
39
|
|
|
40
40
|
When the plugin is unable to find a matching Apex file in your project (i.e. Apex from managed and unlocked packages), it will print a warning and not add that file's coverage data to the final coverage report. See [Debugging](#debugging) for more information.
|
|
41
41
|
|
|
42
|
-
|
|
42
|
+
You should run this plugin after you deploy or invoke Apex tests in your org either using the Salesforce CLI or sfdx-hardis. See [Hook](#hook) if you'd like to automatically transform the coverage JSON after you run Salesforce CLI or sfdx-hardis commands.
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
### Salesforce CLI
|
|
45
|
+
|
|
46
|
+
**This plugin will only support the "json" coverage format from the Salesforce CLI. Do not use other coverage formats from the Salesforce CLI.**
|
|
45
47
|
|
|
46
48
|
To create the code coverage JSON when deploying or validating, append `--coverage-formatters json --results-dir "coverage"` to the `sf project deploy` command. This will create a coverage JSON in this relative path - `coverage/coverage/coverage.json`.
|
|
47
49
|
|
|
@@ -56,15 +58,13 @@ sf apex run test --code-coverage --output-dir "coverage"
|
|
|
56
58
|
sf apex get test --test-run-id <test run id> --code-coverage --output-dir "coverage"
|
|
57
59
|
```
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
## Creating Code Coverage Files with SFDX Hardis
|
|
61
|
+
### SFDX Hardis
|
|
62
62
|
|
|
63
63
|
This plugin can be used after running [sfdx-hardis](https://github.com/hardisgroupcom/sfdx-hardis) commands `hardis:project:deploy:smart` (only if `COVERAGE_FORMATTER_JSON=true` environment variable is defined) and `hardis:org:test:apex` assuming you have sfdx-hardis and this plugin installed.
|
|
64
64
|
|
|
65
65
|
Both hardis commands will create the code coverage JSON to transform here: `hardis-report/apex-coverage-results.json`. Provide this relative path as the `--coverage-json`/`-j` input for this plugin.
|
|
66
66
|
|
|
67
|
-
## What this
|
|
67
|
+
## What this fixes
|
|
68
68
|
|
|
69
69
|
- The coverage reports created by this plugin will add correct file-paths per your Salesforce DX project. Salesforce CLI coverage reports have the `no-map/` prefix hard-coded into their coverage reports. The coverage report created in this plugin will only contain Apex coverage results against files found in your Salesforce DX project, allowing you to use these reports in external code quality tools like SonarQube.
|
|
70
70
|
- Normalizes the coverage reports created by the Salesforce CLI deploy and test command. The coverage reports created by both CLI commands follow different formats and have different coverage format options. These differences cause issues when trying to have external tools like SonarQube parse the coverage reports. This plugin handles parsing both command coverage reports and converting them into common formats accepted by external tools like SonarQube and GitLab.
|
|
@@ -87,14 +87,17 @@ The `apex-code-coverage-transformer` has 1 command:
|
|
|
87
87
|
|
|
88
88
|
```
|
|
89
89
|
USAGE
|
|
90
|
-
$ sf acc-transformer transform -j <value> -r <value> -f <value> [--json]
|
|
90
|
+
$ sf acc-transformer transform -j <value> -r <value> -f <value> -i <value> [--json]
|
|
91
91
|
|
|
92
92
|
FLAGS
|
|
93
|
-
-j, --coverage-json=<value>
|
|
94
|
-
-r, --output-report=<value>
|
|
95
|
-
|
|
96
|
-
-f, --format=<value>
|
|
97
|
-
|
|
93
|
+
-j, --coverage-json=<value> Path to the code coverage JSON file created by the Salesforce CLI deploy or test command.
|
|
94
|
+
-r, --output-report=<value> Path to the code coverage file that will be created by this plugin.
|
|
95
|
+
[default: "coverage.[xml/info]"]
|
|
96
|
+
-f, --format=<value> Output format for the code coverage format.
|
|
97
|
+
[default: "sonar"]
|
|
98
|
+
-i, --ignore-package-directory=<value> Package directory to ignore when looking for matching files in the coverage report.
|
|
99
|
+
Should be as they appear in the "sfdx-project.json".
|
|
100
|
+
Can be declared multiple times.
|
|
98
101
|
|
|
99
102
|
GLOBAL FLAGS
|
|
100
103
|
--json Format output as json.
|
|
@@ -110,6 +113,8 @@ EXAMPLES
|
|
|
110
113
|
$ sf acc-transformer transform -j "coverage.json" -r "coverage.xml" -f "clover"
|
|
111
114
|
|
|
112
115
|
$ sf acc-transformer transform -j "coverage.json" -r "coverage.info" -f "lcovonly"
|
|
116
|
+
|
|
117
|
+
$ sf acc-transformer transform -j "coverage.json" -i "force-app"
|
|
113
118
|
```
|
|
114
119
|
|
|
115
120
|
## Coverage Report Formats
|
|
@@ -8,6 +8,7 @@ export default class TransformerTransform extends SfCommand<TransformerTransform
|
|
|
8
8
|
'coverage-json': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
9
|
'output-report': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
10
|
format: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
'ignore-package-directory': import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
12
|
};
|
|
12
13
|
run(): Promise<TransformerTransformResult>;
|
|
13
14
|
}
|
|
@@ -33,11 +33,18 @@ export default class TransformerTransform extends SfCommand {
|
|
|
33
33
|
default: 'sonar',
|
|
34
34
|
options: formatOptions,
|
|
35
35
|
}),
|
|
36
|
+
'ignore-package-directory': Flags.directory({
|
|
37
|
+
summary: messages.getMessage('flags.ignore-package-directory.summary'),
|
|
38
|
+
char: 'i',
|
|
39
|
+
required: false,
|
|
40
|
+
multiple: true,
|
|
41
|
+
}),
|
|
36
42
|
};
|
|
37
43
|
async run() {
|
|
38
44
|
const { flags } = await this.parse(TransformerTransform);
|
|
39
45
|
const jsonFilePath = resolve(flags['coverage-json']);
|
|
40
46
|
let outputReportPath = resolve(flags['output-report']);
|
|
47
|
+
const ignoreDirs = flags['ignore-package-directory'] ?? [];
|
|
41
48
|
const format = flags['format'];
|
|
42
49
|
let jsonData;
|
|
43
50
|
try {
|
|
@@ -54,13 +61,13 @@ export default class TransformerTransform extends SfCommand {
|
|
|
54
61
|
const commandType = checkCoverageDataType(parsedData);
|
|
55
62
|
// Determine the type of coverage data using type guards
|
|
56
63
|
if (commandType === 'TestCoverageData') {
|
|
57
|
-
const result = await transformTestCoverageReport(parsedData, format);
|
|
64
|
+
const result = await transformTestCoverageReport(parsedData, format, ignoreDirs);
|
|
58
65
|
xmlData = result.xml;
|
|
59
66
|
warnings = result.warnings;
|
|
60
67
|
filesProcessed = result.filesProcessed;
|
|
61
68
|
}
|
|
62
69
|
else if (commandType === 'DeployCoverageData') {
|
|
63
|
-
const result = await transformDeployCoverageReport(parsedData, format);
|
|
70
|
+
const result = await transformDeployCoverageReport(parsedData, format, ignoreDirs);
|
|
64
71
|
xmlData = result.xml;
|
|
65
72
|
warnings = result.warnings;
|
|
66
73
|
filesProcessed = result.filesProcessed;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/commands/acc-transformer/transform.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,6BAA6B,EAAE,MAAM,gDAAgD,CAAC;AAC/F,OAAO,EAAE,2BAA2B,EAAE,MAAM,8CAA8C,CAAC;AAC3F,OAAO,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAE3D,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,gCAAgC,EAAE,uBAAuB,CAAC,CAAC;AAElG,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,SAAqC;IAC9E,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAU,WAAW,GAAG,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;IACjE,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG;QAC7B,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC;YAC3D,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC;YAC1B,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,6BAA6B,CAAC;YAC3D,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,OAAO,EAAE,cAAc;SACxB,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,sBAAsB,CAAC;YACpD,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE,aAAa;SACvB,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACzD,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QACrD,IAAI,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/B,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,kBAAkB,YAAY,wBAAwB,CAAC,
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/commands/acc-transformer/transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { CoberturaCoverageObject, CoverageHandler } from '../helpers/types.js';
|
|
2
2
|
export declare class CoberturaCoverageHandler implements CoverageHandler {
|
|
3
3
|
private readonly coverageObj;
|
|
4
|
-
private
|
|
4
|
+
private packageMap;
|
|
5
5
|
constructor();
|
|
6
6
|
processFile(filePath: string, fileName: string, lines: Record<string, number>): void;
|
|
7
7
|
finalize(): CoberturaCoverageObject;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
export class CoberturaCoverageHandler {
|
|
3
3
|
coverageObj;
|
|
4
|
-
|
|
4
|
+
packageMap;
|
|
5
5
|
constructor() {
|
|
6
6
|
this.coverageObj = {
|
|
7
7
|
coverage: {
|
|
@@ -18,15 +18,19 @@ export class CoberturaCoverageHandler {
|
|
|
18
18
|
packages: { package: [] },
|
|
19
19
|
},
|
|
20
20
|
};
|
|
21
|
-
this.
|
|
22
|
-
'@name': 'main',
|
|
23
|
-
'@line-rate': 0,
|
|
24
|
-
'@branch-rate': 1,
|
|
25
|
-
classes: { class: [] },
|
|
26
|
-
};
|
|
27
|
-
this.coverageObj.coverage.packages.package.push(this.packageObj);
|
|
21
|
+
this.packageMap = new Map();
|
|
28
22
|
}
|
|
29
23
|
processFile(filePath, fileName, lines) {
|
|
24
|
+
const packageName = filePath.split('/')[0]; // Extract root directory as package name
|
|
25
|
+
if (!this.packageMap.has(packageName)) {
|
|
26
|
+
this.packageMap.set(packageName, {
|
|
27
|
+
'@name': packageName,
|
|
28
|
+
'@line-rate': 0,
|
|
29
|
+
'@branch-rate': 1,
|
|
30
|
+
classes: { class: [] },
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
const packageObj = this.packageMap.get(packageName);
|
|
30
34
|
const classObj = {
|
|
31
35
|
'@name': fileName,
|
|
32
36
|
'@filename': filePath,
|
|
@@ -50,24 +54,26 @@ export class CoberturaCoverageHandler {
|
|
|
50
54
|
'@branch': 'false',
|
|
51
55
|
});
|
|
52
56
|
}
|
|
53
|
-
// Calculate and set the line rate for this class
|
|
54
57
|
if (totalLines > 0) {
|
|
55
|
-
|
|
56
|
-
classObj['@line-rate'] = lineRate;
|
|
58
|
+
classObj['@line-rate'] = (coveredLineCount / totalLines).toFixed(4);
|
|
57
59
|
}
|
|
58
60
|
this.coverageObj.coverage['@lines-valid'] += totalLines;
|
|
59
61
|
this.coverageObj.coverage['@lines-covered'] += coveredLineCount;
|
|
60
|
-
|
|
61
|
-
this.
|
|
62
|
-
this.packageObj.classes.class.push(classObj);
|
|
62
|
+
packageObj.classes.class.push(classObj);
|
|
63
|
+
this.packageMap.set(packageName, packageObj);
|
|
63
64
|
}
|
|
64
65
|
finalize() {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
66
|
+
this.coverageObj.coverage.packages.package = Array.from(this.packageMap.values());
|
|
67
|
+
for (const pkg of this.coverageObj.coverage.packages.package) {
|
|
68
|
+
const totalLines = pkg.classes.class.reduce((sum, cls) => sum + parseFloat(cls['@line-rate']) * cls.lines.line.length, 0);
|
|
69
|
+
const totalClasses = pkg.classes.class.reduce((sum, cls) => sum + cls.lines.line.length, 0);
|
|
70
|
+
pkg['@line-rate'] = totalClasses > 0 ? parseFloat((totalLines / totalClasses).toFixed(4)) : 0;
|
|
71
|
+
}
|
|
72
|
+
this.coverageObj.coverage['@line-rate'] = parseFloat((this.coverageObj.coverage['@lines-covered'] / this.coverageObj.coverage['@lines-valid']).toFixed(4));
|
|
73
|
+
this.coverageObj.coverage.packages.package.sort((a, b) => a['@name'].localeCompare(b['@name']));
|
|
74
|
+
for (const pkg of this.coverageObj.coverage.packages.package) {
|
|
75
|
+
if (pkg.classes?.class) {
|
|
76
|
+
pkg.classes.class.sort((a, b) => a['@filename'].localeCompare(b['@filename']));
|
|
71
77
|
}
|
|
72
78
|
}
|
|
73
79
|
return this.coverageObj;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coberturaCoverageHandler.js","sourceRoot":"","sources":["../../src/handlers/coberturaCoverageHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,MAAM,OAAO,wBAAwB;IAClB,WAAW,CAA0B;IAC9C,UAAU,
|
|
1
|
+
{"version":3,"file":"coberturaCoverageHandler.js","sourceRoot":"","sources":["../../src/handlers/coberturaCoverageHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
import { resolve } from 'node:path';
|
|
4
4
|
import { getRepoRoot } from './getRepoRoot.js';
|
|
5
|
-
export async function getPackageDirectories() {
|
|
5
|
+
export async function getPackageDirectories(ignoreDirectories = []) {
|
|
6
6
|
const { repoRoot, dxConfigFilePath } = await getRepoRoot();
|
|
7
7
|
if (!repoRoot || !dxConfigFilePath) {
|
|
8
8
|
throw new Error('Failed to retrieve repository root or sfdx-project.json path.');
|
|
9
9
|
}
|
|
10
10
|
const sfdxProjectRaw = await readFile(dxConfigFilePath, 'utf-8');
|
|
11
11
|
const sfdxProject = JSON.parse(sfdxProjectRaw);
|
|
12
|
-
const packageDirectories = sfdxProject.packageDirectories
|
|
12
|
+
const packageDirectories = sfdxProject.packageDirectories
|
|
13
|
+
.filter((directory) => !ignoreDirectories.includes(directory.path)) // Ignore exact folder names
|
|
14
|
+
.map((directory) => resolve(repoRoot, directory.path));
|
|
13
15
|
return { repoRoot, packageDirectories };
|
|
14
16
|
}
|
|
15
17
|
//# sourceMappingURL=getPackageDirectories.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/helpers/getPackageDirectories.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,qBAAqB;
|
|
1
|
+
{"version":3,"file":"getPackageDirectories.js","sourceRoot":"","sources":["../../src/helpers/getPackageDirectories.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,oBAA8B,EAAE;IAEhC,MAAM,EAAE,QAAQ,EAAE,gBAAgB,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IAE3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IAED,MAAM,cAAc,GAAW,MAAM,QAAQ,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IACzE,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,cAAc,CAAgB,CAAC;IAE3E,MAAM,kBAAkB,GAAG,WAAW,CAAC,kBAAkB;SACtD,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,4BAA4B;SAC/F,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAEzD,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC;AAC1C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { DeployCoverageData } from './types.js';
|
|
2
|
-
export declare function transformDeployCoverageReport(data: DeployCoverageData, format: string): Promise<{
|
|
2
|
+
export declare function transformDeployCoverageReport(data: DeployCoverageData, format: string, ignoreDirs: string[]): Promise<{
|
|
3
3
|
xml: string;
|
|
4
4
|
warnings: string[];
|
|
5
5
|
filesProcessed: number;
|
|
@@ -6,10 +6,10 @@ import { findFilePath } from './findFilePath.js';
|
|
|
6
6
|
import { generateReport } from './generateReport.js';
|
|
7
7
|
import { setCoveredLines } from './setCoveredLines.js';
|
|
8
8
|
import { getConcurrencyThreshold } from './getConcurrencyThreshold.js';
|
|
9
|
-
export async function transformDeployCoverageReport(data, format) {
|
|
9
|
+
export async function transformDeployCoverageReport(data, format, ignoreDirs) {
|
|
10
10
|
const warnings = [];
|
|
11
11
|
let filesProcessed = 0;
|
|
12
|
-
const { repoRoot, packageDirectories } = await getPackageDirectories();
|
|
12
|
+
const { repoRoot, packageDirectories } = await getPackageDirectories(ignoreDirs);
|
|
13
13
|
const handler = getCoverageHandler(format);
|
|
14
14
|
const processFile = async (fileName) => {
|
|
15
15
|
const fileInfo = data[fileName];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformDeployCoverageReport.js","sourceRoot":"","sources":["../../src/helpers/transformDeployCoverageReport.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAwB,EACxB,MAAc;
|
|
1
|
+
{"version":3,"file":"transformDeployCoverageReport.js","sourceRoot":"","sources":["../../src/helpers/transformDeployCoverageReport.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,IAAwB,EACxB,MAAc,EACd,UAAoB;IAEpB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3C,MAAM,WAAW,GAAG,KAAK,EAAE,QAAgB,EAAoB,EAAE;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAE7F,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,iBAAiB,0CAA0C,CAAC,CAAC;YAC5F,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACnF,QAAQ,CAAC,CAAC,GAAG,YAAY,CAAC;QAE1B,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAC;IACnD,MAAM,QAAQ,CACZ,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,EACrE,gBAAgB,EAChB,KAAK,EAAE,QAAgB,EAAE,EAAE;QACzB,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,EAAE,CAAC;YACX,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAEhD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { TestCoverageData } from './types.js';
|
|
2
|
-
export declare function transformTestCoverageReport(testCoverageData: TestCoverageData[], format: string): Promise<{
|
|
2
|
+
export declare function transformTestCoverageReport(testCoverageData: TestCoverageData[], format: string, ignoreDirs: string[]): Promise<{
|
|
3
3
|
xml: string;
|
|
4
4
|
warnings: string[];
|
|
5
5
|
filesProcessed: number;
|
|
@@ -5,10 +5,10 @@ import { getPackageDirectories } from './getPackageDirectories.js';
|
|
|
5
5
|
import { findFilePath } from './findFilePath.js';
|
|
6
6
|
import { generateReport } from './generateReport.js';
|
|
7
7
|
import { getConcurrencyThreshold } from './getConcurrencyThreshold.js';
|
|
8
|
-
export async function transformTestCoverageReport(testCoverageData, format) {
|
|
8
|
+
export async function transformTestCoverageReport(testCoverageData, format, ignoreDirs) {
|
|
9
9
|
const warnings = [];
|
|
10
10
|
let filesProcessed = 0;
|
|
11
|
-
const { repoRoot, packageDirectories } = await getPackageDirectories();
|
|
11
|
+
const { repoRoot, packageDirectories } = await getPackageDirectories(ignoreDirs);
|
|
12
12
|
const handler = getCoverageHandler(format);
|
|
13
13
|
// Ensure testCoverageData is an array
|
|
14
14
|
const coverageData = Array.isArray(testCoverageData) ? testCoverageData : [testCoverageData];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transformTestCoverageReport.js","sourceRoot":"","sources":["../../src/helpers/transformTestCoverageReport.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,gBAAoC,EACpC,MAAc;
|
|
1
|
+
{"version":3,"file":"transformTestCoverageReport.js","sourceRoot":"","sources":["../../src/helpers/transformTestCoverageReport.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAEvE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,gBAAoC,EACpC,MAAc,EACd,UAAoB;IAEpB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,MAAM,EAAE,QAAQ,EAAE,kBAAkB,EAAE,GAAG,MAAM,qBAAqB,CAAC,UAAU,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE3C,sCAAsC;IACtC,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;IAE7F,MAAM,WAAW,GAAG,KAAK,EAAE,IAAsB,EAAoB,EAAE;QACrE,MAAM,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,CAAC;QAE1B,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,KAAK,CAAC;QAElC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC3D,MAAM,gBAAgB,GAAG,MAAM,YAAY,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,QAAQ,CAAC,CAAC;QAE7F,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,iBAAiB,0CAA0C,CAAC,CAAC;YAC5F,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,CAAC,WAAW,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,uBAAuB,EAAE,CAAC;IACnD,MAAM,QAAQ,CAAC,YAAY,EAAE,gBAAgB,EAAE,KAAK,EAAE,IAAsB,EAAE,EAAE;QAC9E,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,MAAM,EAAE,CAAC;YACX,cAAc,EAAE,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,GAAG,GAAG,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAEhD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -12,6 +12,7 @@ Transform Salesforce Apex code coverage JSONs created during deployments and tes
|
|
|
12
12
|
- `sf acc-transformer transform -j "coverage.json" -r "coverage.xml" -f "cobertura"`
|
|
13
13
|
- `sf acc-transformer transform -j "coverage.json" -r "coverage.xml" -f "clover"`
|
|
14
14
|
- `sf acc-transformer transform -j "coverage.json" -r "coverage.info" -f "lcovonly"`
|
|
15
|
+
- `sf acc-transformer transform -j "coverage.json" -i "force-app"`
|
|
15
16
|
|
|
16
17
|
# flags.coverage-json.summary
|
|
17
18
|
|
|
@@ -24,3 +25,7 @@ Path to the code coverage file that will be created by this plugin.
|
|
|
24
25
|
# flags.format.summary
|
|
25
26
|
|
|
26
27
|
Output format for the coverage report.
|
|
28
|
+
|
|
29
|
+
# flags.ignore-package-directory.summary
|
|
30
|
+
|
|
31
|
+
Ignore a package directory when looking for matching files in the coverage report.
|