apex-code-coverage-transformer 2.8.3 → 2.8.4
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,13 @@
|
|
|
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.8.4](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.8.3...v2.8.4) (2025-02-08)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* jacoco structuring per package directory ([5efc698](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/5efc69853d6f5498e0a20bb3f94b3e4068b3d528))
|
|
14
|
+
|
|
8
15
|
## [2.8.3](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.8.2...v2.8.3) (2025-02-08)
|
|
9
16
|
|
|
10
17
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { JaCoCoCoverageObject, CoverageHandler } from '../helpers/types.js';
|
|
2
2
|
export declare class JaCoCoCoverageHandler 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(): JaCoCoCoverageObject;
|
|
8
|
+
private getOrCreatePackage;
|
|
8
9
|
}
|
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
export class JaCoCoCoverageHandler {
|
|
3
3
|
coverageObj;
|
|
4
|
-
|
|
4
|
+
packageMap;
|
|
5
5
|
constructor() {
|
|
6
6
|
this.coverageObj = {
|
|
7
7
|
report: {
|
|
8
8
|
'@name': 'JaCoCo Coverage Report',
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
package: [], // List of packages
|
|
10
|
+
counter: [], // Report-level counters
|
|
11
11
|
},
|
|
12
12
|
};
|
|
13
|
-
this.
|
|
14
|
-
'@name': 'main',
|
|
15
|
-
classes: { class: [] },
|
|
16
|
-
};
|
|
17
|
-
this.coverageObj.report.packages.package.push(this.packageObj);
|
|
13
|
+
this.packageMap = {}; // Stores packages by directory
|
|
18
14
|
}
|
|
19
15
|
processFile(filePath, fileName, lines) {
|
|
16
|
+
const packageName = filePath.split('/')[0]; // Extract root directory as package name
|
|
17
|
+
const packageObj = this.getOrCreatePackage(packageName);
|
|
20
18
|
const sourceFileObj = {
|
|
21
19
|
'@name': filePath,
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
line: [],
|
|
21
|
+
counter: [],
|
|
24
22
|
};
|
|
25
23
|
let coveredLines = 0;
|
|
26
24
|
let totalLines = 0;
|
|
@@ -32,39 +30,63 @@ export class JaCoCoCoverageHandler {
|
|
|
32
30
|
'@nr': Number(lineNumber),
|
|
33
31
|
'@mi': isCovered === 0 ? 1 : 0,
|
|
34
32
|
'@ci': isCovered === 1 ? 1 : 0,
|
|
33
|
+
'@mb': 0,
|
|
34
|
+
'@cb': 0,
|
|
35
35
|
};
|
|
36
|
-
sourceFileObj.
|
|
36
|
+
sourceFileObj.line.push(lineObj);
|
|
37
37
|
}
|
|
38
|
-
sourceFileObj.
|
|
38
|
+
sourceFileObj.counter.push({
|
|
39
39
|
'@type': 'LINE',
|
|
40
40
|
'@missed': totalLines - coveredLines,
|
|
41
41
|
'@covered': coveredLines,
|
|
42
|
+
}, {
|
|
43
|
+
'@type': 'CLASS',
|
|
44
|
+
'@missed': coveredLines === 0 ? 1 : 0,
|
|
45
|
+
'@covered': coveredLines > 0 ? 1 : 0,
|
|
42
46
|
});
|
|
47
|
+
packageObj.sourcefile.push(sourceFileObj);
|
|
43
48
|
const classObj = {
|
|
44
|
-
'@name': fileName,
|
|
45
|
-
|
|
49
|
+
'@name': fileName.replace('.cls', ''), // Remove .cls to match SFDX output
|
|
50
|
+
'@sourcefilename': filePath,
|
|
46
51
|
};
|
|
47
|
-
|
|
52
|
+
packageObj.class.push(classObj);
|
|
48
53
|
}
|
|
49
54
|
finalize() {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}],
|
|
65
|
-
};
|
|
55
|
+
for (const packageObj of Object.values(this.packageMap)) {
|
|
56
|
+
packageObj.class.sort((a, b) => a['@name'].localeCompare(b['@name']));
|
|
57
|
+
packageObj.sourcefile.sort((a, b) => a['@name'].localeCompare(b['@name']));
|
|
58
|
+
const totalCovered = packageObj.sourcefile.reduce((acc, sf) => acc + sf.counter[0]['@covered'], 0);
|
|
59
|
+
const totalMissed = packageObj.sourcefile.reduce((acc, sf) => acc + sf.counter[0]['@missed'], 0);
|
|
60
|
+
packageObj.counter.push({
|
|
61
|
+
'@type': 'LINE',
|
|
62
|
+
'@missed': totalMissed,
|
|
63
|
+
'@covered': totalCovered,
|
|
64
|
+
}, {
|
|
65
|
+
'@type': 'CLASS',
|
|
66
|
+
'@missed': totalCovered === 0 ? 1 : 0,
|
|
67
|
+
'@covered': totalCovered > 0 ? 1 : 0,
|
|
68
|
+
});
|
|
66
69
|
}
|
|
70
|
+
const overallCovered = Object.values(this.packageMap).reduce((acc, pkg) => acc + pkg.counter[0]['@covered'], 0);
|
|
71
|
+
const overallMissed = Object.values(this.packageMap).reduce((acc, pkg) => acc + pkg.counter[0]['@missed'], 0);
|
|
72
|
+
this.coverageObj.report.counter.push({
|
|
73
|
+
'@type': 'LINE',
|
|
74
|
+
'@missed': overallMissed,
|
|
75
|
+
'@covered': overallCovered,
|
|
76
|
+
});
|
|
67
77
|
return this.coverageObj;
|
|
68
78
|
}
|
|
79
|
+
getOrCreatePackage(packageName) {
|
|
80
|
+
if (!this.packageMap[packageName]) {
|
|
81
|
+
this.packageMap[packageName] = {
|
|
82
|
+
'@name': packageName,
|
|
83
|
+
class: [],
|
|
84
|
+
sourcefile: [],
|
|
85
|
+
counter: [],
|
|
86
|
+
};
|
|
87
|
+
this.coverageObj.report.package.push(this.packageMap[packageName]);
|
|
88
|
+
}
|
|
89
|
+
return this.packageMap[packageName];
|
|
90
|
+
}
|
|
69
91
|
}
|
|
70
92
|
//# sourceMappingURL=jacocoCoverageHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jacocoCoverageHandler.js","sourceRoot":"","sources":["../../src/handlers/jacocoCoverageHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAIb,MAAM,OAAO,qBAAqB;IACf,WAAW,CAAuB;IAC3C,UAAU,
|
|
1
|
+
{"version":3,"file":"jacocoCoverageHandler.js","sourceRoot":"","sources":["../../src/handlers/jacocoCoverageHandler.ts"],"names":[],"mappings":"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"}
|
package/lib/helpers/types.d.ts
CHANGED
|
@@ -160,50 +160,38 @@ export type LcovFile = {
|
|
|
160
160
|
export type LcovCoverageObject = {
|
|
161
161
|
files: LcovFile[];
|
|
162
162
|
};
|
|
163
|
-
type
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
};
|
|
168
|
-
export type JaCoCoLine = {
|
|
169
|
-
'@nr': number;
|
|
170
|
-
'@mi': number;
|
|
171
|
-
'@ci': number;
|
|
172
|
-
};
|
|
173
|
-
export type JaCoCoSourceFile = {
|
|
174
|
-
'@name': string;
|
|
175
|
-
lines: {
|
|
176
|
-
line: JaCoCoLine[];
|
|
177
|
-
};
|
|
178
|
-
counters: {
|
|
163
|
+
export type JaCoCoCoverageObject = {
|
|
164
|
+
report: {
|
|
165
|
+
'@name': string;
|
|
166
|
+
package: JaCoCoPackage[];
|
|
179
167
|
counter: JaCoCoCounter[];
|
|
180
168
|
};
|
|
181
169
|
};
|
|
170
|
+
export type JaCoCoPackage = {
|
|
171
|
+
'@name': string;
|
|
172
|
+
class: JaCoCoClass[];
|
|
173
|
+
sourcefile: JaCoCoSourceFile[];
|
|
174
|
+
counter: JaCoCoCounter[];
|
|
175
|
+
};
|
|
182
176
|
export type JaCoCoClass = {
|
|
183
177
|
'@name': string;
|
|
184
|
-
|
|
178
|
+
'@sourcefilename': string;
|
|
185
179
|
};
|
|
186
|
-
export type
|
|
180
|
+
export type JaCoCoSourceFile = {
|
|
187
181
|
'@name': string;
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
};
|
|
191
|
-
counters?: {
|
|
192
|
-
counter: JaCoCoCounter[];
|
|
193
|
-
};
|
|
182
|
+
line: JaCoCoLine[];
|
|
183
|
+
counter: JaCoCoCounter[];
|
|
194
184
|
};
|
|
195
|
-
type
|
|
196
|
-
'@
|
|
197
|
-
'@
|
|
198
|
-
'@
|
|
185
|
+
export type JaCoCoLine = {
|
|
186
|
+
'@nr': number;
|
|
187
|
+
'@mi': number;
|
|
188
|
+
'@ci': number;
|
|
189
|
+
'@mb'?: number;
|
|
190
|
+
'@cb'?: number;
|
|
199
191
|
};
|
|
200
|
-
export type
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
packages: {
|
|
205
|
-
package: JaCoCoPackage[];
|
|
206
|
-
};
|
|
207
|
-
};
|
|
192
|
+
export type JaCoCoCounter = {
|
|
193
|
+
'@type': 'INSTRUCTION' | 'BRANCH' | 'LINE' | 'METHOD' | 'CLASS' | 'PACKAGE';
|
|
194
|
+
'@missed': number;
|
|
195
|
+
'@covered': number;
|
|
208
196
|
};
|
|
209
197
|
export {};
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "apex-code-coverage-transformer",
|
|
3
3
|
"description": "Transform Salesforce Apex code coverage JSONs created during deployments and test runs into other formats accepted by SonarQube, GitHub, GitLab, Azure, Bitbucket, etc.",
|
|
4
|
-
"version": "2.8.
|
|
4
|
+
"version": "2.8.4",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@oclif/core": "^4.0.37",
|
|
7
7
|
"@salesforce/core": "^8.8.0",
|