apex-code-coverage-transformer 2.19.0 → 2.19.2
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 +2 -0
- package/lib/transformers/coverageTransformer.js +1 -2
- package/lib/transformers/coverageTransformer.js.map +1 -1
- package/lib/utils/mapLimit.d.ts +9 -0
- package/lib/utils/mapLimit.js +22 -0
- package/lib/utils/mapLimit.js.map +1 -0
- package/oclif.manifest.json +1 -1
- package/package.json +21 -23
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@
|
|
|
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.19.2](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.19.1...v2.19.2) (2026-05-26)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **deps:** bump fast-xml-builder ([#288](https://github.com/mcarvin8/apex-code-coverage-transformer/issues/288)) ([7a0d2b3](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/7a0d2b35f812d71a0f236bc8e5cb5ef5c4ad3b89))
|
|
14
|
+
|
|
15
|
+
## [2.19.1](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.19.0...v2.19.1) (2026-05-26)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* **deps:** pin direct dependencies to exact versions ([#286](https://github.com/mcarvin8/apex-code-coverage-transformer/issues/286)) ([2624efc](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/2624efcb0c85a1856238613037ea9462e2c65287))
|
|
21
|
+
|
|
8
22
|
## [2.19.0](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v2.18.3...v2.19.0) (2026-05-01)
|
|
9
23
|
|
|
10
24
|
|
package/README.md
CHANGED
|
@@ -91,6 +91,8 @@ To run transformation automatically after deploy or test commands, use the [Hook
|
|
|
91
91
|
|
|
92
92
|
> **Tip — diff-scoped coverage on PRs.** The Salesforce CLI already scopes `sf project deploy validate`/`start` coverage to whatever is in the deployed manifest. If your PR pipeline builds a manifest from the git diff (for example with [sfdx-git-delta](https://github.com/scolladon/sfdx-git-delta)) and then runs `sf project deploy validate --coverage-formatters json --manifest <delta>`, the resulting coverage JSON only contains the changed Apex. Running this plugin against that JSON gives you per-PR coverage with no extra flags — the diff scoping happens upstream in the deployment, not here.
|
|
93
93
|
|
|
94
|
+
> **Important:** If the generated `package.xml` only contains Apex test classes, the Salesforce CLI deploy coverage report will be empty. The deploy manifest must include actual Apex classes or triggers under test for the CLI to return coverage data in the JSON output.
|
|
95
|
+
|
|
94
96
|
### Salesforce CLI
|
|
95
97
|
|
|
96
98
|
**Deploy/validate** — coverage path: `coverage/coverage/coverage.json`
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
/* eslint-disable no-await-in-loop */
|
|
2
2
|
import { readFile } from 'node:fs/promises';
|
|
3
3
|
import { join } from 'node:path';
|
|
4
|
-
import { mapLimit } from 'async';
|
|
5
4
|
import { getCoverageHandler } from '../handlers/getHandler.js';
|
|
6
5
|
import { getPackageDirectories } from '../utils/getPackageDirectories.js';
|
|
7
6
|
import { findFilePath } from '../utils/findFilePath.js';
|
|
@@ -9,6 +8,7 @@ import { buildFilePathCache } from '../utils/buildFilePathCache.js';
|
|
|
9
8
|
import { setCoveredLines } from '../utils/setCoveredLines.js';
|
|
10
9
|
import { getConcurrencyThreshold } from '../utils/getConcurrencyThreshold.js';
|
|
11
10
|
import { checkCoverageDataType } from '../utils/setCoverageDataType.js';
|
|
11
|
+
import { mapLimit } from '../utils/mapLimit.js';
|
|
12
12
|
import { generateAndWriteReport } from './reportGenerator.js';
|
|
13
13
|
export async function transformCoverageReport(jsonFilePath, outputReportPath, formats, ignoreDirs) {
|
|
14
14
|
const warnings = [];
|
|
@@ -102,7 +102,6 @@ async function processDeployCoverage(data, context) {
|
|
|
102
102
|
}
|
|
103
103
|
async function processTestCoverage(data, context) {
|
|
104
104
|
let processed = 0;
|
|
105
|
-
// eslint-disable-next-line @typescript-eslint/require-await
|
|
106
105
|
await mapLimit(data, context.concurrencyLimit, async (entry) => {
|
|
107
106
|
const formattedName = entry.name.replace(/no-map[\\/]+/, '');
|
|
108
107
|
const path = findFilePath(formattedName, context.filePathCache);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverageTransformer.js","sourceRoot":"","sources":["../../src/transformers/coverageTransformer.ts"],"names":[],"mappings":"AAAA,qCAAqC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"coverageTransformer.js","sourceRoot":"","sources":["../../src/transformers/coverageTransformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Process an array concurrently with a maximum concurrency limit.
|
|
3
|
+
* Drop-in replacement for the `async` package's `mapLimit`.
|
|
4
|
+
*
|
|
5
|
+
* @param items - Items to process
|
|
6
|
+
* @param limit - Max number of concurrent tasks
|
|
7
|
+
* @param iteratee - Async function to run for each item
|
|
8
|
+
*/
|
|
9
|
+
export declare function mapLimit<T>(items: T[], limit: number, iteratee: (item: T) => Promise<void>): Promise<void>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
/**
|
|
3
|
+
* Process an array concurrently with a maximum concurrency limit.
|
|
4
|
+
* Drop-in replacement for the `async` package's `mapLimit`.
|
|
5
|
+
*
|
|
6
|
+
* @param items - Items to process
|
|
7
|
+
* @param limit - Max number of concurrent tasks
|
|
8
|
+
* @param iteratee - Async function to run for each item
|
|
9
|
+
*/
|
|
10
|
+
export async function mapLimit(items, limit, iteratee) {
|
|
11
|
+
const concurrency = Math.max(1, limit);
|
|
12
|
+
const queue = items.slice();
|
|
13
|
+
const workers = Array.from({ length: Math.min(concurrency, queue.length) }, async () => {
|
|
14
|
+
while (queue.length > 0) {
|
|
15
|
+
const item = queue.shift();
|
|
16
|
+
// eslint-disable-next-line no-await-in-loop
|
|
17
|
+
await iteratee(item);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
await Promise.all(workers);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=mapLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mapLimit.js","sourceRoot":"","sources":["../../src/utils/mapLimit.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAI,KAAU,EAAE,KAAa,EAAE,QAAoC;IAC/F,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACvC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE;QACrF,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;YAC5B,4CAA4C;YAC5C,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AAC7B,CAAC"}
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,33 +1,31 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "apex-code-coverage-transformer",
|
|
3
3
|
"description": "Transform Salesforce Apex code coverage JSONs into other formats accepted by SonarQube, GitHub, GitLab, Azure, Bitbucket, etc.",
|
|
4
|
-
"version": "2.19.
|
|
4
|
+
"version": "2.19.2",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@oclif/core": "
|
|
7
|
-
"@salesforce/core": "
|
|
8
|
-
"@salesforce/sf-plugins-core": "
|
|
9
|
-
"
|
|
10
|
-
"fast-xml-builder": "^1.1.4"
|
|
6
|
+
"@oclif/core": "4.8.3",
|
|
7
|
+
"@salesforce/core": "8.26.3",
|
|
8
|
+
"@salesforce/sf-plugins-core": "12.2.6",
|
|
9
|
+
"fast-xml-builder": "1.2.0"
|
|
11
10
|
},
|
|
12
11
|
"devDependencies": {
|
|
13
|
-
"@commitlint/cli": "
|
|
14
|
-
"@commitlint/config-conventional": "
|
|
15
|
-
"@oclif/plugin-command-snapshot": "
|
|
16
|
-
"@salesforce/cli-plugins-testkit": "
|
|
17
|
-
"@salesforce/dev-config": "
|
|
18
|
-
"@salesforce/prettier-config": "
|
|
19
|
-
"@types/
|
|
20
|
-
"@
|
|
21
|
-
"
|
|
22
|
-
"eslint-
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"oclif": "^4.22.81",
|
|
12
|
+
"@commitlint/cli": "19.8.1",
|
|
13
|
+
"@commitlint/config-conventional": "19.8.1",
|
|
14
|
+
"@oclif/plugin-command-snapshot": "5.3.10",
|
|
15
|
+
"@salesforce/cli-plugins-testkit": "5.3.39",
|
|
16
|
+
"@salesforce/dev-config": "4.3.3",
|
|
17
|
+
"@salesforce/prettier-config": "0.0.4",
|
|
18
|
+
"@types/node": "20.19.39",
|
|
19
|
+
"@vitest/coverage-v8": "4.1.5",
|
|
20
|
+
"eslint-config-salesforce-typescript": "4.0.1",
|
|
21
|
+
"eslint-plugin-sf-plugin": "1.20.26",
|
|
22
|
+
"husky": "9.1.7",
|
|
23
|
+
"oclif": "4.22.81",
|
|
26
24
|
"shx": "0.4.0",
|
|
27
|
-
"ts-node": "
|
|
28
|
-
"typescript": "
|
|
29
|
-
"vitest": "
|
|
30
|
-
"wireit": "
|
|
25
|
+
"ts-node": "10.9.2",
|
|
26
|
+
"typescript": "5.8.3",
|
|
27
|
+
"vitest": "4.1.5",
|
|
28
|
+
"wireit": "0.14.12"
|
|
31
29
|
},
|
|
32
30
|
"engines": {
|
|
33
31
|
"node": ">=20.0.0"
|