apex-code-coverage-transformer 2.13.3 → 2.14.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 +14 -0
- package/README.md +276 -9
- package/lib/handlers/BaseHandler.d.ts +51 -0
- package/lib/handlers/BaseHandler.js +63 -0
- package/lib/handlers/BaseHandler.js.map +1 -0
- package/lib/handlers/HandlerRegistry.d.ts +90 -0
- package/lib/handlers/HandlerRegistry.js +103 -0
- package/lib/handlers/HandlerRegistry.js.map +1 -0
- package/lib/handlers/clover.d.ts +16 -2
- package/lib/handlers/clover.js +35 -16
- package/lib/handlers/clover.js.map +1 -1
- package/lib/handlers/cobertura.d.ts +11 -2
- package/lib/handlers/cobertura.js +23 -11
- package/lib/handlers/cobertura.js.map +1 -1
- package/lib/handlers/getHandler.d.ts +24 -0
- package/lib/handlers/getHandler.js +27 -19
- package/lib/handlers/getHandler.js.map +1 -1
- package/lib/handlers/istanbulJson.d.ts +18 -2
- package/lib/handlers/istanbulJson.js +28 -1
- package/lib/handlers/istanbulJson.js.map +1 -1
- package/lib/handlers/jacoco.d.ts +18 -2
- package/lib/handlers/jacoco.js +27 -1
- package/lib/handlers/jacoco.js.map +1 -1
- package/lib/handlers/jsonSummary.d.ts +49 -0
- package/lib/handlers/jsonSummary.js +103 -0
- package/lib/handlers/jsonSummary.js.map +1 -0
- package/lib/handlers/lcov.d.ts +17 -2
- package/lib/handlers/lcov.js +29 -9
- package/lib/handlers/lcov.js.map +1 -1
- package/lib/handlers/opencover.d.ts +71 -0
- package/lib/handlers/opencover.js +165 -0
- package/lib/handlers/opencover.js.map +1 -0
- package/lib/handlers/simplecov.d.ts +50 -0
- package/lib/handlers/simplecov.js +83 -0
- package/lib/handlers/simplecov.js.map +1 -0
- package/lib/handlers/sonar.d.ts +10 -2
- package/lib/handlers/sonar.js +20 -2
- package/lib/handlers/sonar.js.map +1 -1
- package/lib/hooks/finally.d.ts +2 -0
- package/lib/hooks/{postrun.js → finally.js} +5 -4
- package/lib/hooks/finally.js.map +1 -0
- package/lib/transformers/reportGenerator.d.ts +2 -2
- package/lib/transformers/reportGenerator.js +7 -8
- package/lib/transformers/reportGenerator.js.map +1 -1
- package/lib/utils/constants.d.ts +5 -0
- package/lib/utils/constants.js +8 -1
- package/lib/utils/constants.js.map +1 -1
- package/lib/utils/types.d.ts +78 -1
- package/oclif.lock +2697 -3086
- package/oclif.manifest.json +8 -5
- package/package.json +2 -2
- package/lib/hooks/postrun.d.ts +0 -2
- package/lib/hooks/postrun.js.map +0 -1
package/lib/handlers/clover.d.ts
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
|
-
import { CloverCoverageObject
|
|
2
|
-
|
|
1
|
+
import { CloverCoverageObject } from '../utils/types.js';
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for generating Clover XML coverage reports.
|
|
5
|
+
*
|
|
6
|
+
* Clover is a code coverage tool commonly used with Atlassian tools.
|
|
7
|
+
*
|
|
8
|
+
* Compatible with:
|
|
9
|
+
* - Bamboo
|
|
10
|
+
* - Bitbucket
|
|
11
|
+
* - Jenkins
|
|
12
|
+
* - Atlassian tools
|
|
13
|
+
*
|
|
14
|
+
* @see https://openclover.org/
|
|
15
|
+
*/
|
|
16
|
+
export declare class CloverCoverageHandler extends BaseHandler {
|
|
3
17
|
private readonly coverageObj;
|
|
4
18
|
constructor();
|
|
5
19
|
processFile(filePath: string, fileName: string, lines: Record<string, number>): void;
|
package/lib/handlers/clover.js
CHANGED
|
@@ -1,7 +1,23 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
import { HandlerRegistry } from './HandlerRegistry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for generating Clover XML coverage reports.
|
|
6
|
+
*
|
|
7
|
+
* Clover is a code coverage tool commonly used with Atlassian tools.
|
|
8
|
+
*
|
|
9
|
+
* Compatible with:
|
|
10
|
+
* - Bamboo
|
|
11
|
+
* - Bitbucket
|
|
12
|
+
* - Jenkins
|
|
13
|
+
* - Atlassian tools
|
|
14
|
+
*
|
|
15
|
+
* @see https://openclover.org/
|
|
16
|
+
*/
|
|
17
|
+
export class CloverCoverageHandler extends BaseHandler {
|
|
3
18
|
coverageObj;
|
|
4
19
|
constructor() {
|
|
20
|
+
super();
|
|
5
21
|
this.coverageObj = {
|
|
6
22
|
coverage: {
|
|
7
23
|
'@generated': Date.now(),
|
|
@@ -31,18 +47,13 @@ export class CloverCoverageHandler {
|
|
|
31
47
|
};
|
|
32
48
|
}
|
|
33
49
|
processFile(filePath, fileName, lines) {
|
|
34
|
-
const
|
|
35
|
-
.filter((lineNumber) => lines[lineNumber] === 0)
|
|
36
|
-
.map(Number);
|
|
37
|
-
const coveredLines = Object.keys(lines)
|
|
38
|
-
.filter((lineNumber) => lines[lineNumber] === 1)
|
|
39
|
-
.map(Number);
|
|
50
|
+
const { totalLines, coveredLines } = this.calculateCoverage(lines);
|
|
40
51
|
const fileObj = {
|
|
41
52
|
'@name': fileName,
|
|
42
53
|
'@path': filePath,
|
|
43
54
|
metrics: {
|
|
44
|
-
'@statements':
|
|
45
|
-
'@coveredstatements': coveredLines
|
|
55
|
+
'@statements': totalLines,
|
|
56
|
+
'@coveredstatements': coveredLines,
|
|
46
57
|
'@conditionals': 0,
|
|
47
58
|
'@coveredconditionals': 0,
|
|
48
59
|
'@methods': 0,
|
|
@@ -59,20 +70,28 @@ export class CloverCoverageHandler {
|
|
|
59
70
|
}
|
|
60
71
|
this.coverageObj.coverage.project.file.push(fileObj);
|
|
61
72
|
const projectMetrics = this.coverageObj.coverage.project.metrics;
|
|
62
|
-
projectMetrics['@statements'] +=
|
|
63
|
-
projectMetrics['@coveredstatements'] += coveredLines
|
|
64
|
-
projectMetrics['@elements'] +=
|
|
65
|
-
projectMetrics['@coveredelements'] += coveredLines
|
|
73
|
+
projectMetrics['@statements'] += totalLines;
|
|
74
|
+
projectMetrics['@coveredstatements'] += coveredLines;
|
|
75
|
+
projectMetrics['@elements'] += totalLines;
|
|
76
|
+
projectMetrics['@coveredelements'] += coveredLines;
|
|
66
77
|
projectMetrics['@files'] += 1;
|
|
67
78
|
projectMetrics['@classes'] += 1;
|
|
68
|
-
projectMetrics['@loc'] +=
|
|
69
|
-
projectMetrics['@ncloc'] +=
|
|
79
|
+
projectMetrics['@loc'] += totalLines;
|
|
80
|
+
projectMetrics['@ncloc'] += totalLines;
|
|
70
81
|
}
|
|
71
82
|
finalize() {
|
|
72
83
|
if (this.coverageObj.coverage?.project?.file) {
|
|
73
|
-
this.coverageObj.coverage.project.file
|
|
84
|
+
this.coverageObj.coverage.project.file = this.sortByPath(this.coverageObj.coverage.project.file);
|
|
74
85
|
}
|
|
75
86
|
return this.coverageObj;
|
|
76
87
|
}
|
|
77
88
|
}
|
|
89
|
+
// Self-register this handler
|
|
90
|
+
HandlerRegistry.register({
|
|
91
|
+
name: 'clover',
|
|
92
|
+
description: 'Clover XML format for Atlassian tools',
|
|
93
|
+
fileExtension: '.xml',
|
|
94
|
+
handler: () => new CloverCoverageHandler(),
|
|
95
|
+
compatibleWith: ['Bamboo', 'Bitbucket', 'Jenkins'],
|
|
96
|
+
});
|
|
78
97
|
//# sourceMappingURL=clover.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clover.js","sourceRoot":"","sources":["../../src/handlers/clover.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"clover.js","sourceRoot":"","sources":["../../src/handlers/clover.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,14 @@
|
|
|
1
|
-
import { CoberturaCoverageObject
|
|
2
|
-
|
|
1
|
+
import { CoberturaCoverageObject } from '../utils/types.js';
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for generating Cobertura XML coverage reports.
|
|
5
|
+
*
|
|
6
|
+
* Cobertura format is widely supported by many CI/CD platforms
|
|
7
|
+
* including Codecov, Azure DevOps, Jenkins, and GitLab.
|
|
8
|
+
*
|
|
9
|
+
* @see http://cobertura.github.io/cobertura/
|
|
10
|
+
*/
|
|
11
|
+
export declare class CoberturaCoverageHandler extends BaseHandler {
|
|
3
12
|
private readonly coverageObj;
|
|
4
13
|
private packageMap;
|
|
5
14
|
constructor();
|
|
@@ -1,8 +1,19 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
import { HandlerRegistry } from './HandlerRegistry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for generating Cobertura XML coverage reports.
|
|
6
|
+
*
|
|
7
|
+
* Cobertura format is widely supported by many CI/CD platforms
|
|
8
|
+
* including Codecov, Azure DevOps, Jenkins, and GitLab.
|
|
9
|
+
*
|
|
10
|
+
* @see http://cobertura.github.io/cobertura/
|
|
11
|
+
*/
|
|
12
|
+
export class CoberturaCoverageHandler extends BaseHandler {
|
|
3
13
|
coverageObj;
|
|
4
14
|
packageMap;
|
|
5
15
|
constructor() {
|
|
16
|
+
super();
|
|
6
17
|
this.coverageObj = {
|
|
7
18
|
coverage: {
|
|
8
19
|
'@lines-valid': 0,
|
|
@@ -31,6 +42,7 @@ export class CoberturaCoverageHandler {
|
|
|
31
42
|
});
|
|
32
43
|
}
|
|
33
44
|
const packageObj = this.packageMap.get(packageName);
|
|
45
|
+
const { totalLines, coveredLines } = this.calculateCoverage(lines);
|
|
34
46
|
const classObj = {
|
|
35
47
|
'@name': fileName,
|
|
36
48
|
'@filename': filePath,
|
|
@@ -39,14 +51,6 @@ export class CoberturaCoverageHandler {
|
|
|
39
51
|
methods: {},
|
|
40
52
|
lines: { line: [] },
|
|
41
53
|
};
|
|
42
|
-
const uncoveredLines = Object.keys(lines)
|
|
43
|
-
.filter((lineNumber) => lines[lineNumber] === 0)
|
|
44
|
-
.map(Number);
|
|
45
|
-
const coveredLines = Object.keys(lines)
|
|
46
|
-
.filter((lineNumber) => lines[lineNumber] === 1)
|
|
47
|
-
.map(Number);
|
|
48
|
-
const totalLines = uncoveredLines.length + coveredLines.length;
|
|
49
|
-
const coveredLineCount = coveredLines.length;
|
|
50
54
|
for (const [lineNumber, isCovered] of Object.entries(lines)) {
|
|
51
55
|
classObj.lines.line.push({
|
|
52
56
|
'@number': Number(lineNumber),
|
|
@@ -55,10 +59,10 @@ export class CoberturaCoverageHandler {
|
|
|
55
59
|
});
|
|
56
60
|
}
|
|
57
61
|
if (totalLines > 0) {
|
|
58
|
-
classObj['@line-rate'] = (
|
|
62
|
+
classObj['@line-rate'] = (coveredLines / totalLines).toFixed(4);
|
|
59
63
|
}
|
|
60
64
|
this.coverageObj.coverage['@lines-valid'] += totalLines;
|
|
61
|
-
this.coverageObj.coverage['@lines-covered'] +=
|
|
65
|
+
this.coverageObj.coverage['@lines-covered'] += coveredLines;
|
|
62
66
|
packageObj.classes.class.push(classObj);
|
|
63
67
|
this.packageMap.set(packageName, packageObj);
|
|
64
68
|
}
|
|
@@ -79,4 +83,12 @@ export class CoberturaCoverageHandler {
|
|
|
79
83
|
return this.coverageObj;
|
|
80
84
|
}
|
|
81
85
|
}
|
|
86
|
+
// Self-register this handler
|
|
87
|
+
HandlerRegistry.register({
|
|
88
|
+
name: 'cobertura',
|
|
89
|
+
description: 'Cobertura XML format for wide CI/CD compatibility',
|
|
90
|
+
fileExtension: '.xml',
|
|
91
|
+
handler: () => new CoberturaCoverageHandler(),
|
|
92
|
+
compatibleWith: ['Codecov', 'Azure DevOps', 'Jenkins', 'GitLab', 'GitHub Actions'],
|
|
93
|
+
});
|
|
82
94
|
//# sourceMappingURL=cobertura.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cobertura.js","sourceRoot":"","sources":["../../src/handlers/cobertura.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"cobertura.js","sourceRoot":"","sources":["../../src/handlers/cobertura.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,26 @@
|
|
|
1
1
|
import { CoverageHandler } from '../utils/types.js';
|
|
2
|
+
import './sonar.js';
|
|
3
|
+
import './cobertura.js';
|
|
4
|
+
import './clover.js';
|
|
5
|
+
import './lcov.js';
|
|
6
|
+
import './jacoco.js';
|
|
7
|
+
import './istanbulJson.js';
|
|
8
|
+
import './jsonSummary.js';
|
|
9
|
+
import './simplecov.js';
|
|
10
|
+
import './opencover.js';
|
|
11
|
+
/**
|
|
12
|
+
* Get a coverage handler for the specified format.
|
|
13
|
+
*
|
|
14
|
+
* This function uses the HandlerRegistry to retrieve the appropriate handler.
|
|
15
|
+
* All handlers are automatically registered when this module is imported.
|
|
16
|
+
*
|
|
17
|
+
* @param format - The coverage format identifier
|
|
18
|
+
* @returns A new instance of the coverage handler
|
|
19
|
+
* @throws Error if the format is not supported
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* const handler = getCoverageHandler('sonar');
|
|
23
|
+
* handler.processFile('path/to/file.cls', 'ClassName', { '1': 1, '2': 0 });
|
|
24
|
+
* const report = handler.finalize();
|
|
25
|
+
*/
|
|
2
26
|
export declare function getCoverageHandler(format: string): CoverageHandler;
|
|
@@ -1,23 +1,31 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import
|
|
2
|
+
import { HandlerRegistry } from './HandlerRegistry.js';
|
|
3
|
+
// Import all handlers to trigger self-registration
|
|
4
|
+
import './sonar.js';
|
|
5
|
+
import './cobertura.js';
|
|
6
|
+
import './clover.js';
|
|
7
|
+
import './lcov.js';
|
|
8
|
+
import './jacoco.js';
|
|
9
|
+
import './istanbulJson.js';
|
|
10
|
+
import './jsonSummary.js';
|
|
11
|
+
import './simplecov.js';
|
|
12
|
+
import './opencover.js';
|
|
13
|
+
/**
|
|
14
|
+
* Get a coverage handler for the specified format.
|
|
15
|
+
*
|
|
16
|
+
* This function uses the HandlerRegistry to retrieve the appropriate handler.
|
|
17
|
+
* All handlers are automatically registered when this module is imported.
|
|
18
|
+
*
|
|
19
|
+
* @param format - The coverage format identifier
|
|
20
|
+
* @returns A new instance of the coverage handler
|
|
21
|
+
* @throws Error if the format is not supported
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* const handler = getCoverageHandler('sonar');
|
|
25
|
+
* handler.processFile('path/to/file.cls', 'ClassName', { '1': 1, '2': 0 });
|
|
26
|
+
* const report = handler.finalize();
|
|
27
|
+
*/
|
|
8
28
|
export function getCoverageHandler(format) {
|
|
9
|
-
|
|
10
|
-
sonar: new SonarCoverageHandler(),
|
|
11
|
-
cobertura: new CoberturaCoverageHandler(),
|
|
12
|
-
clover: new CloverCoverageHandler(),
|
|
13
|
-
lcovonly: new LcovCoverageHandler(),
|
|
14
|
-
jacoco: new JaCoCoCoverageHandler(),
|
|
15
|
-
json: new IstanbulCoverageHandler(),
|
|
16
|
-
};
|
|
17
|
-
const handler = handlers[format];
|
|
18
|
-
if (!handler) {
|
|
19
|
-
throw new Error(`Unsupported format: ${format}`);
|
|
20
|
-
}
|
|
21
|
-
return handler;
|
|
29
|
+
return HandlerRegistry.get(format);
|
|
22
30
|
}
|
|
23
31
|
//# sourceMappingURL=getHandler.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getHandler.js","sourceRoot":"","sources":["../../src/handlers/getHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"getHandler.js","sourceRoot":"","sources":["../../src/handlers/getHandler.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,mDAAmD;AACnD,OAAO,YAAY,CAAC;AACpB,OAAO,gBAAgB,CAAC;AACxB,OAAO,aAAa,CAAC;AACrB,OAAO,WAAW,CAAC;AACnB,OAAO,aAAa,CAAC;AACrB,OAAO,mBAAmB,CAAC;AAC3B,OAAO,kBAAkB,CAAC;AAC1B,OAAO,gBAAgB,CAAC;AACxB,OAAO,gBAAgB,CAAC;AAExB;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC"}
|
|
@@ -1,6 +1,22 @@
|
|
|
1
|
-
import { IstanbulCoverageObject
|
|
2
|
-
|
|
1
|
+
import { IstanbulCoverageObject } from '../utils/types.js';
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for generating Istanbul/NYC JSON coverage reports.
|
|
5
|
+
*
|
|
6
|
+
* Istanbul is the most widely-used JavaScript code coverage tool.
|
|
7
|
+
* This format is compatible with NYC, Codecov, and many other tools.
|
|
8
|
+
*
|
|
9
|
+
* Compatible with:
|
|
10
|
+
* - Istanbul/NYC
|
|
11
|
+
* - Codecov
|
|
12
|
+
* - Coveralls
|
|
13
|
+
* - Node.js coverage tools
|
|
14
|
+
*
|
|
15
|
+
* @see https://istanbul.js.org/
|
|
16
|
+
*/
|
|
17
|
+
export declare class IstanbulCoverageHandler extends BaseHandler {
|
|
3
18
|
private coverageMap;
|
|
19
|
+
constructor();
|
|
4
20
|
processFile(filePath: string, fileName: string, lines: Record<string, number>): void;
|
|
5
21
|
finalize(): IstanbulCoverageObject;
|
|
6
22
|
}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
import { HandlerRegistry } from './HandlerRegistry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for generating Istanbul/NYC JSON coverage reports.
|
|
6
|
+
*
|
|
7
|
+
* Istanbul is the most widely-used JavaScript code coverage tool.
|
|
8
|
+
* This format is compatible with NYC, Codecov, and many other tools.
|
|
9
|
+
*
|
|
10
|
+
* Compatible with:
|
|
11
|
+
* - Istanbul/NYC
|
|
12
|
+
* - Codecov
|
|
13
|
+
* - Coveralls
|
|
14
|
+
* - Node.js coverage tools
|
|
15
|
+
*
|
|
16
|
+
* @see https://istanbul.js.org/
|
|
17
|
+
*/
|
|
18
|
+
export class IstanbulCoverageHandler extends BaseHandler {
|
|
3
19
|
coverageMap = {};
|
|
20
|
+
constructor() {
|
|
21
|
+
super();
|
|
22
|
+
}
|
|
4
23
|
processFile(filePath, fileName, lines) {
|
|
5
24
|
const statementMap = {};
|
|
6
25
|
const s = {};
|
|
@@ -30,4 +49,12 @@ export class IstanbulCoverageHandler {
|
|
|
30
49
|
return this.coverageMap;
|
|
31
50
|
}
|
|
32
51
|
}
|
|
52
|
+
// Self-register this handler
|
|
53
|
+
HandlerRegistry.register({
|
|
54
|
+
name: 'json',
|
|
55
|
+
description: 'Istanbul JSON format for Node.js and JavaScript tools',
|
|
56
|
+
fileExtension: '.json',
|
|
57
|
+
handler: () => new IstanbulCoverageHandler(),
|
|
58
|
+
compatibleWith: ['Istanbul/NYC', 'Codecov', 'Coveralls', 'Node.js Tools'],
|
|
59
|
+
});
|
|
33
60
|
//# sourceMappingURL=istanbulJson.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"istanbulJson.js","sourceRoot":"","sources":["../../src/handlers/istanbulJson.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"istanbulJson.js","sourceRoot":"","sources":["../../src/handlers/istanbulJson.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAGb,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,uBAAwB,SAAQ,WAAW;IAC9C,WAAW,GAAwB,EAAE,CAAC;IAE9C;QACE,KAAK,EAAE,CAAC;IACV,CAAC;IAEM,WAAW,CAAC,QAAgB,EAAE,QAAgB,EAAE,KAA6B;QAClF,MAAM,YAAY,GAAgC,EAAE,CAAC;QACrD,MAAM,CAAC,GAA2B,EAAE,CAAC;QACrC,MAAM,YAAY,GAA2B,EAAE,CAAC;QAEhD,KAAK,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACvD,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;YAChC,YAAY,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;YAChC,YAAY,CAAC,UAAU,CAAC,GAAG;gBACzB,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC1B,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE;aACzB,CAAC;YACF,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACvB,CAAC;QAED,MAAM,YAAY,GAAyB;YACzC,IAAI,EAAE,QAAQ;YACd,YAAY;YACZ,KAAK,EAAE,EAAE;YACT,SAAS,EAAE,EAAE;YACb,CAAC;YACD,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,EAAE;YACL,CAAC,EAAE,YAAY;SAChB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,YAAY,CAAC;IAC5C,CAAC;IAEM,QAAQ;QACb,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,6BAA6B;AAC7B,eAAe,CAAC,QAAQ,CAAC;IACvB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,uDAAuD;IACpE,aAAa,EAAE,OAAO;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,uBAAuB,EAAE;IAC5C,cAAc,EAAE,CAAC,cAAc,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,CAAC;CAC1E,CAAC,CAAC"}
|
package/lib/handlers/jacoco.d.ts
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
|
-
import { JaCoCoCoverageObject
|
|
2
|
-
|
|
1
|
+
import { JaCoCoCoverageObject } from '../utils/types.js';
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for generating JaCoCo XML coverage reports.
|
|
5
|
+
*
|
|
6
|
+
* JaCoCo is the standard code coverage library for Java projects.
|
|
7
|
+
* The format is also accepted by Codecov and other coverage tools.
|
|
8
|
+
*
|
|
9
|
+
* Compatible with:
|
|
10
|
+
* - Codecov
|
|
11
|
+
* - Jenkins
|
|
12
|
+
* - Maven
|
|
13
|
+
* - Gradle
|
|
14
|
+
* - IntelliJ IDEA
|
|
15
|
+
*
|
|
16
|
+
* @see https://www.jacoco.org/
|
|
17
|
+
*/
|
|
18
|
+
export declare class JaCoCoCoverageHandler extends BaseHandler {
|
|
3
19
|
private readonly coverageObj;
|
|
4
20
|
private packageMap;
|
|
5
21
|
constructor();
|
package/lib/handlers/jacoco.js
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
import { HandlerRegistry } from './HandlerRegistry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for generating JaCoCo XML coverage reports.
|
|
6
|
+
*
|
|
7
|
+
* JaCoCo is the standard code coverage library for Java projects.
|
|
8
|
+
* The format is also accepted by Codecov and other coverage tools.
|
|
9
|
+
*
|
|
10
|
+
* Compatible with:
|
|
11
|
+
* - Codecov
|
|
12
|
+
* - Jenkins
|
|
13
|
+
* - Maven
|
|
14
|
+
* - Gradle
|
|
15
|
+
* - IntelliJ IDEA
|
|
16
|
+
*
|
|
17
|
+
* @see https://www.jacoco.org/
|
|
18
|
+
*/
|
|
19
|
+
export class JaCoCoCoverageHandler extends BaseHandler {
|
|
3
20
|
coverageObj;
|
|
4
21
|
packageMap;
|
|
5
22
|
constructor() {
|
|
23
|
+
super();
|
|
6
24
|
this.coverageObj = {
|
|
7
25
|
report: {
|
|
8
26
|
'@name': 'JaCoCo',
|
|
@@ -84,4 +102,12 @@ export class JaCoCoCoverageHandler {
|
|
|
84
102
|
return this.packageMap[packageName];
|
|
85
103
|
}
|
|
86
104
|
}
|
|
105
|
+
// Self-register this handler
|
|
106
|
+
HandlerRegistry.register({
|
|
107
|
+
name: 'jacoco',
|
|
108
|
+
description: 'JaCoCo XML format for Java projects',
|
|
109
|
+
fileExtension: '.xml',
|
|
110
|
+
handler: () => new JaCoCoCoverageHandler(),
|
|
111
|
+
compatibleWith: ['Codecov', 'Jenkins', 'Maven', 'Gradle'],
|
|
112
|
+
});
|
|
87
113
|
//# sourceMappingURL=jacoco.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jacoco.js","sourceRoot":"","sources":["../../src/handlers/jacoco.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"jacoco.js","sourceRoot":"","sources":["../../src/handlers/jacoco.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { JsonSummaryCoverageObject } from '../utils/types.js';
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handler for generating JSON Summary coverage reports.
|
|
5
|
+
*
|
|
6
|
+
* This format provides a concise summary of coverage statistics,
|
|
7
|
+
* ideal for badges, PR comments, and quick analysis.
|
|
8
|
+
*
|
|
9
|
+
* **Format Origin**: Istanbul/NYC coverage tools
|
|
10
|
+
*
|
|
11
|
+
* @see https://istanbul.js.org/
|
|
12
|
+
* @see https://github.com/istanbuljs/nyc
|
|
13
|
+
*
|
|
14
|
+
* **Apex-Specific Adaptations**:
|
|
15
|
+
* - Salesforce Apex only provides line-level coverage data
|
|
16
|
+
* - `statements`, `functions`, and `branches` metrics mirror line coverage
|
|
17
|
+
* - In native JavaScript environments, these would be distinct metrics
|
|
18
|
+
* - `skipped` is always 0 (Apex doesn't report skipped lines)
|
|
19
|
+
*
|
|
20
|
+
* **Limitations**:
|
|
21
|
+
* - No branch coverage (if/else paths) - Apex doesn't provide this data
|
|
22
|
+
* - No function/method coverage separate from lines
|
|
23
|
+
* - No statement coverage distinct from line coverage
|
|
24
|
+
*
|
|
25
|
+
* Compatible with:
|
|
26
|
+
* - GitHub Actions (for badges and PR comments)
|
|
27
|
+
* - GitLab CI (for MR comments)
|
|
28
|
+
* - Custom reporting dashboards
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```json
|
|
32
|
+
* {
|
|
33
|
+
* "total": {
|
|
34
|
+
* "lines": { "total": 100, "covered": 75, "skipped": 0, "pct": 75 }
|
|
35
|
+
* },
|
|
36
|
+
* "files": {
|
|
37
|
+
* "path/to/file.cls": {
|
|
38
|
+
* "lines": { "total": 50, "covered": 40, "skipped": 0, "pct": 80 }
|
|
39
|
+
* }
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class JsonSummaryCoverageHandler extends BaseHandler {
|
|
45
|
+
private readonly coverageObj;
|
|
46
|
+
constructor();
|
|
47
|
+
processFile(filePath: string, _fileName: string, lines: Record<string, number>): void;
|
|
48
|
+
finalize(): JsonSummaryCoverageObject;
|
|
49
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { BaseHandler } from './BaseHandler.js';
|
|
3
|
+
import { HandlerRegistry } from './HandlerRegistry.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handler for generating JSON Summary coverage reports.
|
|
6
|
+
*
|
|
7
|
+
* This format provides a concise summary of coverage statistics,
|
|
8
|
+
* ideal for badges, PR comments, and quick analysis.
|
|
9
|
+
*
|
|
10
|
+
* **Format Origin**: Istanbul/NYC coverage tools
|
|
11
|
+
*
|
|
12
|
+
* @see https://istanbul.js.org/
|
|
13
|
+
* @see https://github.com/istanbuljs/nyc
|
|
14
|
+
*
|
|
15
|
+
* **Apex-Specific Adaptations**:
|
|
16
|
+
* - Salesforce Apex only provides line-level coverage data
|
|
17
|
+
* - `statements`, `functions`, and `branches` metrics mirror line coverage
|
|
18
|
+
* - In native JavaScript environments, these would be distinct metrics
|
|
19
|
+
* - `skipped` is always 0 (Apex doesn't report skipped lines)
|
|
20
|
+
*
|
|
21
|
+
* **Limitations**:
|
|
22
|
+
* - No branch coverage (if/else paths) - Apex doesn't provide this data
|
|
23
|
+
* - No function/method coverage separate from lines
|
|
24
|
+
* - No statement coverage distinct from line coverage
|
|
25
|
+
*
|
|
26
|
+
* Compatible with:
|
|
27
|
+
* - GitHub Actions (for badges and PR comments)
|
|
28
|
+
* - GitLab CI (for MR comments)
|
|
29
|
+
* - Custom reporting dashboards
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```json
|
|
33
|
+
* {
|
|
34
|
+
* "total": {
|
|
35
|
+
* "lines": { "total": 100, "covered": 75, "skipped": 0, "pct": 75 }
|
|
36
|
+
* },
|
|
37
|
+
* "files": {
|
|
38
|
+
* "path/to/file.cls": {
|
|
39
|
+
* "lines": { "total": 50, "covered": 40, "skipped": 0, "pct": 80 }
|
|
40
|
+
* }
|
|
41
|
+
* }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export class JsonSummaryCoverageHandler extends BaseHandler {
|
|
46
|
+
coverageObj;
|
|
47
|
+
constructor() {
|
|
48
|
+
super();
|
|
49
|
+
this.coverageObj = {
|
|
50
|
+
total: {
|
|
51
|
+
lines: { total: 0, covered: 0, skipped: 0, pct: 0 },
|
|
52
|
+
statements: { total: 0, covered: 0, skipped: 0, pct: 0 },
|
|
53
|
+
},
|
|
54
|
+
files: {},
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
processFile(filePath, _fileName, lines) {
|
|
58
|
+
const { totalLines, coveredLines } = this.calculateCoverage(lines);
|
|
59
|
+
const pct = totalLines > 0 ? Number(((coveredLines / totalLines) * 100).toFixed(2)) : 0;
|
|
60
|
+
// NOTE: Apex only provides line coverage, so we use the same values for statements
|
|
61
|
+
// In JavaScript/TypeScript environments, statements would be a distinct metric
|
|
62
|
+
const fileCoverage = {
|
|
63
|
+
lines: {
|
|
64
|
+
total: totalLines,
|
|
65
|
+
covered: coveredLines,
|
|
66
|
+
skipped: 0, // Apex doesn't report skipped lines
|
|
67
|
+
pct,
|
|
68
|
+
},
|
|
69
|
+
statements: {
|
|
70
|
+
total: totalLines, // Using line count as statement count (Apex limitation)
|
|
71
|
+
covered: coveredLines, // Using covered lines as covered statements
|
|
72
|
+
skipped: 0,
|
|
73
|
+
pct,
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
this.coverageObj.files[filePath] = fileCoverage;
|
|
77
|
+
// Update totals
|
|
78
|
+
this.coverageObj.total.lines.total += totalLines;
|
|
79
|
+
this.coverageObj.total.lines.covered += coveredLines;
|
|
80
|
+
this.coverageObj.total.statements.total += totalLines;
|
|
81
|
+
this.coverageObj.total.statements.covered += coveredLines;
|
|
82
|
+
}
|
|
83
|
+
finalize() {
|
|
84
|
+
// Calculate total percentages
|
|
85
|
+
const totalLines = this.coverageObj.total.lines.total;
|
|
86
|
+
const totalCovered = this.coverageObj.total.lines.covered;
|
|
87
|
+
if (totalLines > 0) {
|
|
88
|
+
const pct = Number(((totalCovered / totalLines) * 100).toFixed(2));
|
|
89
|
+
this.coverageObj.total.lines.pct = pct;
|
|
90
|
+
this.coverageObj.total.statements.pct = pct;
|
|
91
|
+
}
|
|
92
|
+
return this.coverageObj;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// Self-register this handler
|
|
96
|
+
HandlerRegistry.register({
|
|
97
|
+
name: 'json-summary',
|
|
98
|
+
description: 'JSON Summary format for badges and quick analysis',
|
|
99
|
+
fileExtension: '.json',
|
|
100
|
+
handler: () => new JsonSummaryCoverageHandler(),
|
|
101
|
+
compatibleWith: ['GitHub Actions', 'GitLab CI', 'Custom Dashboards'],
|
|
102
|
+
});
|
|
103
|
+
//# sourceMappingURL=jsonSummary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsonSummary.js","sourceRoot":"","sources":["../../src/handlers/jsonSummary.ts"],"names":[],"mappings":"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"}
|