@code-pushup/coverage-plugin 0.96.0 → 0.97.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@code-pushup/coverage-plugin",
3
- "version": "0.96.0",
3
+ "version": "0.97.0",
4
4
  "description": "Code PushUp plugin for tracking code coverage ☂",
5
5
  "license": "MIT",
6
6
  "homepage": "https://github.com/code-pushup/cli/tree/main/packages/plugin-coverage#readme",
@@ -34,10 +34,9 @@
34
34
  },
35
35
  "type": "module",
36
36
  "dependencies": {
37
- "@code-pushup/models": "0.96.0",
38
- "@code-pushup/utils": "0.96.0",
37
+ "@code-pushup/models": "0.97.0",
38
+ "@code-pushup/utils": "0.97.0",
39
39
  "parse-lcov": "^1.0.4",
40
- "yargs": "^17.7.2",
41
40
  "zod": "^4.0.5"
42
41
  },
43
42
  "peerDependencies": {
package/src/lib/config.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import { z } from 'zod';
2
2
  import { pluginScoreTargetsSchema } from '@code-pushup/models';
3
+ import { ALL_COVERAGE_TYPES } from './constants.js';
3
4
  export const coverageTypeSchema = z
4
- .enum(['function', 'branch', 'line'])
5
+ .enum(ALL_COVERAGE_TYPES)
5
6
  .meta({ title: 'CoverageType' });
6
7
  export const coverageResultSchema = z
7
8
  .union([
@@ -41,7 +42,7 @@ export const coveragePluginConfigSchema = z
41
42
  coverageTypes: z
42
43
  .array(coverageTypeSchema)
43
44
  .min(1)
44
- .default(['function', 'branch', 'line'])
45
+ .default([...ALL_COVERAGE_TYPES])
45
46
  .meta({
46
47
  description: 'Coverage types measured. Defaults to all available types.',
47
48
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;KACpC,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;AAGnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,KAAK,CAAC;IACL,CAAC,CAAC,MAAM,CAAC;QACP,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,CAAC,MAAM,CAAC;aAChB,IAAI,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC;QAClE,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,IAAI,CAAC;YACJ,WAAW,EACT,qGAAqG;SACxG,CAAC;aACD,QAAQ,EAAE;KACd,CAAC;IACF,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QAC/B,WAAW,EAAE,sDAAsD;KACpE,CAAC;CACH,CAAC;KACD,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAGrC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,mBAAmB,EAAE,CAAC;SACnB,MAAM,CAAC;QACN,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,IAAI,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;QACzD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;YACxC,WAAW,EAAE,8CAA8C;SAC5D,CAAC;KACH,CAAC;SACD,QAAQ,EAAE;IACb,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACpD,WAAW,EACT,uEAAuE;KAC1E,CAAC;IACF,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,kBAAkB,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;SACvC,IAAI,CAAC;QACJ,WAAW,EACT,2DAA2D;KAC9D,CAAC;IACJ,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,oBAAoB,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,gFAAgF,CACjF;IACH,YAAY,EAAE,wBAAwB;CACvC,CAAC;KACD,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC;KAChC,IAAI,CAAC,kBAAkB,CAAC;KACxB,IAAI,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,CAAC;AAGnC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC;KAClC,KAAK,CAAC;IACL,CAAC,CAAC,MAAM,CAAC;QACP,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,CAAC,MAAM,CAAC;aAChB,IAAI,CAAC,EAAE,WAAW,EAAE,wCAAwC,EAAE,CAAC;QAClE,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,IAAI,CAAC;YACJ,WAAW,EACT,qGAAqG;SACxG,CAAC;aACD,QAAQ,EAAE;KACd,CAAC;IACF,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;QAC/B,WAAW,EAAE,sDAAsD;KACpE,CAAC;CACH,CAAC;KACD,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,CAAC;AAGrC,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC;KACxC,MAAM,CAAC;IACN,mBAAmB,EAAE,CAAC;SACnB,MAAM,CAAC;QACN,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,IAAI,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;QACzD,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,CAAC;YACxC,WAAW,EAAE,8CAA8C;SAC5D,CAAC;KACH,CAAC;SACD,QAAQ,EAAE;IACb,qBAAqB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;QACpD,WAAW,EACT,uEAAuE;KAC1E,CAAC;IACF,aAAa,EAAE,CAAC;SACb,KAAK,CAAC,kBAAkB,CAAC;SACzB,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC;SAChC,IAAI,CAAC;QACJ,WAAW,EACT,2DAA2D;KAC9D,CAAC;IACJ,OAAO,EAAE,CAAC;SACP,KAAK,CAAC,oBAAoB,CAAC;SAC3B,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,CACP,gFAAgF,CACjF;IACH,YAAY,EAAE,wBAAwB;CACvC,CAAC;KACD,IAAI,CAAC,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const COVERAGE_PLUGIN_SLUG = "coverage";
2
+ export declare const COVERAGE_PLUGIN_TITLE = "Code coverage";
3
+ export declare const ALL_COVERAGE_TYPES: readonly ["function", "branch", "line"];
@@ -0,0 +1,4 @@
1
+ export const COVERAGE_PLUGIN_SLUG = 'coverage';
2
+ export const COVERAGE_PLUGIN_TITLE = 'Code coverage';
3
+ export const ALL_COVERAGE_TYPES = ['function', 'branch', 'line'];
4
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;AAC/C,MAAM,CAAC,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAErD,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC"}
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'node:module';
2
- import path from 'node:path';
3
- import { fileURLToPath } from 'node:url';
4
2
  import { validate, } from '@code-pushup/models';
5
- import { capitalize } from '@code-pushup/utils';
3
+ import { logger, pluralizeToken } from '@code-pushup/utils';
6
4
  import { coveragePluginConfigSchema, } from './config.js';
7
- import { createRunnerConfig } from './runner/index.js';
5
+ import { COVERAGE_PLUGIN_SLUG, COVERAGE_PLUGIN_TITLE } from './constants.js';
6
+ import { formatMetaLog, typeToAuditSlug, typeToAuditTitle } from './format.js';
7
+ import { createRunnerFunction } from './runner/runner.js';
8
8
  import { coverageDescription, coverageTypeWeightMapper } from './utils.js';
9
9
  /**
10
10
  * Instantiates Code PushUp code coverage plugin for core config.
@@ -27,8 +27,8 @@ import { coverageDescription, coverageTypeWeightMapper } from './utils.js';
27
27
  export async function coveragePlugin(config) {
28
28
  const coverageConfig = validate(coveragePluginConfigSchema, config);
29
29
  const audits = coverageConfig.coverageTypes.map((type) => ({
30
- slug: `${type}-coverage`,
31
- title: `${capitalize(type)} coverage`,
30
+ slug: typeToAuditSlug(type),
31
+ title: typeToAuditTitle(type),
32
32
  description: coverageDescription[type],
33
33
  }));
34
34
  const group = {
@@ -40,12 +40,12 @@ export async function coveragePlugin(config) {
40
40
  weight: coverageTypeWeightMapper[audit.slug.slice(0, audit.slug.indexOf('-'))],
41
41
  })),
42
42
  };
43
- const runnerScriptPath = path.join(fileURLToPath(path.dirname(import.meta.url)), '..', 'bin.js');
43
+ logger.info(formatMetaLog(`Created ${pluralizeToken('audit', audits.length)} (${coverageConfig.coverageTypes.join('/')} coverage) and 1 group`));
44
44
  const packageJson = createRequire(import.meta.url)('../../package.json');
45
45
  const scoreTargets = coverageConfig.scoreTargets;
46
46
  return {
47
- slug: 'coverage',
48
- title: 'Code coverage',
47
+ slug: COVERAGE_PLUGIN_SLUG,
48
+ title: COVERAGE_PLUGIN_TITLE,
49
49
  icon: 'folder-coverage-open',
50
50
  description: 'Official Code PushUp code coverage plugin.',
51
51
  docsUrl: 'https://www.npmjs.com/package/@code-pushup/coverage-plugin/',
@@ -53,7 +53,7 @@ export async function coveragePlugin(config) {
53
53
  version: packageJson.version,
54
54
  audits,
55
55
  groups: [group],
56
- runner: await createRunnerConfig(runnerScriptPath, coverageConfig),
56
+ runner: createRunnerFunction(coverageConfig),
57
57
  ...(scoreTargets && { scoreTargets }),
58
58
  };
59
59
  }
@@ -1 +1 @@
1
- {"version":3,"file":"coverage-plugin.js","sourceRoot":"","sources":["../../../src/lib/coverage-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAIL,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAGL,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA4B;IAE5B,MAAM,cAAc,GAAG,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,GAAG,CAC7C,CAAC,IAAI,EAAS,EAAE,CAAC,CAAC;QAChB,IAAI,EAAE,GAAG,IAAI,WAAW;QACxB,KAAK,EAAE,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW;QACrC,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC;KACvC,CAAC,CACH,CAAC;IAEF,MAAM,KAAK,GAAU;QACnB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,wDAAwD;QACrE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzB,GAAG,KAAK;YACR,MAAM,EACJ,wBAAwB,CACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAiB,CAC7D;SACJ,CAAC,CAAC;KACJ,CAAC;IAEF,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAChC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAC5C,IAAI,EACJ,QAAQ,CACT,CAAC;IAEF,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;IAEjD,OAAO;QACL,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,eAAe;QACtB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,4CAA4C;QACzD,OAAO,EAAE,6DAA6D;QACtE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,MAAM;QACN,MAAM,EAAE,CAAC,KAAK,CAAC;QACf,MAAM,EAAE,MAAM,kBAAkB,CAAC,gBAAgB,EAAE,cAAc,CAAC;QAClE,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"coverage-plugin.js","sourceRoot":"","sources":["../../../src/lib/coverage-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAIL,QAAQ,GACT,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAGL,0BAA0B,GAC3B,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/E,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE3E;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA4B;IAE5B,MAAM,cAAc,GAAG,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;IAEpE,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,CAAC,GAAG,CAC7C,CAAC,IAAI,EAAS,EAAE,CAAC,CAAC;QAChB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;QAC3B,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC;QAC7B,WAAW,EAAE,mBAAmB,CAAC,IAAI,CAAC;KACvC,CAAC,CACH,CAAC;IAEF,MAAM,KAAK,GAAU;QACnB,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,uBAAuB;QAC9B,WAAW,EAAE,wDAAwD;QACrE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzB,GAAG,KAAK;YACR,MAAM,EACJ,wBAAwB,CACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAiB,CAC7D;SACJ,CAAC,CAAC;KACJ,CAAC;IAEF,MAAM,CAAC,IAAI,CACT,aAAa,CACX,WAAW,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,cAAc,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,wBAAwB,CACrH,CACF,CAAC;IAEF,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAChD,oBAAoB,CACkB,CAAC;IAEzC,MAAM,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC;IAEjD,OAAO;QACL,IAAI,EAAE,oBAAoB;QAC1B,KAAK,EAAE,qBAAqB;QAC5B,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,4CAA4C;QACzD,OAAO,EAAE,6DAA6D;QACtE,WAAW,EAAE,WAAW,CAAC,IAAI;QAC7B,OAAO,EAAE,WAAW,CAAC,OAAO;QAC5B,MAAM;QACN,MAAM,EAAE,CAAC,KAAK,CAAC;QACf,MAAM,EAAE,oBAAoB,CAAC,cAAc,CAAC;QAC5C,GAAG,CAAC,YAAY,IAAI,EAAE,YAAY,EAAE,CAAC;KACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { CoverageType } from './config.js';
2
+ export declare const formatMetaLog: (message: string) => string;
3
+ export declare function typeToAuditSlug(type: CoverageType): string;
4
+ export declare function typeToAuditTitle(type: CoverageType): string;
5
+ export declare function slugToTitle(slug: string): string;
@@ -0,0 +1,13 @@
1
+ import { capitalize, pluginMetaLogFormatter } from '@code-pushup/utils';
2
+ import { COVERAGE_PLUGIN_TITLE } from './constants.js';
3
+ export const formatMetaLog = pluginMetaLogFormatter(COVERAGE_PLUGIN_TITLE);
4
+ export function typeToAuditSlug(type) {
5
+ return `${type}-coverage`;
6
+ }
7
+ export function typeToAuditTitle(type) {
8
+ return `${capitalize(type)} coverage`;
9
+ }
10
+ export function slugToTitle(slug) {
11
+ return capitalize(slug.split('-').join(' '));
12
+ }
13
+ //# sourceMappingURL=format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/lib/format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAExE,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,CAAC,MAAM,aAAa,GAAG,sBAAsB,CAAC,qBAAqB,CAAC,CAAC;AAE3E,MAAM,UAAU,eAAe,CAAC,IAAkB;IAChD,OAAO,GAAG,IAAI,WAAW,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAkB;IACjD,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/C,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import path from 'node:path';
2
- import { importModule, logger, stringifyError } from '@code-pushup/utils';
2
+ import { importModule, logger, pluralize, pluralizeToken, stringifyError, } from '@code-pushup/utils';
3
+ import { formatMetaLog } from '../format.js';
3
4
  /**
4
5
  * Resolves the cached project graph for the current Nx workspace.
5
6
  * First tries to read cache and if not possible, go for the async creation.
@@ -10,8 +11,7 @@ async function resolveCachedProjectGraph() {
10
11
  return readCachedProjectGraph();
11
12
  }
12
13
  catch (error) {
13
- logger.info(`Could not read cached project graph, falling back to async creation.
14
- ${stringifyError(error)}`);
14
+ logger.warn(`Could not read cached project graph, falling back to async creation - ${stringifyError(error)}`);
15
15
  return await createProjectGraphAsync({ exitOnError: false });
16
16
  }
17
17
  }
@@ -20,18 +20,24 @@ async function resolveCachedProjectGraph() {
20
20
  * @returns An array of coverage result information for the coverage plugin.
21
21
  */
22
22
  export async function getNxCoveragePaths(targets = ['test']) {
23
- logger.debug('💡 Gathering coverage from the following nx projects:');
24
23
  const { nodes } = await resolveCachedProjectGraph();
25
- const coverageResults = await Promise.all(targets.map(async (target) => {
24
+ const coverageResultsPerTarget = Object.fromEntries(await Promise.all(targets.map(async (target) => {
26
25
  const relevantNodes = Object.values(nodes).filter(graph => hasNxTarget(graph, target));
27
- return await Promise.all(relevantNodes.map(async ({ name, data }) => {
28
- const coveragePaths = await getCoveragePathsForTarget(data, target);
29
- logger.debug(`- ${name}: ${target}`);
30
- return coveragePaths;
31
- }));
32
- }));
33
- logger.debug('');
34
- return coverageResults.flat();
26
+ return [
27
+ target,
28
+ await Promise.all(relevantNodes.map(({ data }) => getCoveragePathsForTarget(data, target))),
29
+ ];
30
+ })));
31
+ const coverageResults = Object.values(coverageResultsPerTarget).flat();
32
+ logger.info(formatMetaLog(`Inferred ${pluralizeToken('coverage report', coverageResults.length)} from Nx projects with ${pluralize('target', targets.length)} ${targets.length === 1
33
+ ? targets[0]
34
+ : Object.entries(coverageResultsPerTarget)
35
+ .map(([target, results]) => `${target} (${results.length})`)
36
+ .join(' and ')}`));
37
+ logger.debug(formatMetaLog(coverageResults
38
+ .map(result => `• ${typeof result === 'string' ? result : result.resultsPath}`)
39
+ .join('\n')));
40
+ return coverageResults;
35
41
  }
36
42
  function hasNxTarget(project, target) {
37
43
  return project.data.targets != null && target in project.data.targets;
@@ -1 +1 @@
1
- {"version":3,"file":"coverage-paths.js","sourceRoot":"","sources":["../../../../src/lib/nx/coverage-paths.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"coverage-paths.js","sourceRoot":"","sources":["../../../../src/lib/nx/coverage-paths.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import path from 'node:path';
2
- import { exists, getGitRoot, logger, objectFromEntries, objectToEntries, readTextFile, toUnixNewlines, } from '@code-pushup/utils';
2
+ import { capitalize, exists, formatAsciiTable, getGitRoot, logger, objectFromEntries, objectToEntries, pluralize, pluralizeToken, readTextFile, toUnixNewlines, truncatePaths, } from '@code-pushup/utils';
3
+ import { ALL_COVERAGE_TYPES } from '../../constants.js';
3
4
  import { mergeLcovResults } from './merge-lcov.js';
4
5
  import { parseLcov } from './parse-lcov.js';
5
6
  import { lcovCoverageToAuditOutput, recordToStatFunctionMapper, } from './transform.js';
@@ -16,6 +17,7 @@ export async function lcovResultsToAuditOutputs(results, coverageTypes) {
16
17
  const lcovResults = await parseLcovFiles(results);
17
18
  // Merge multiple coverage reports for the same file
18
19
  const mergedResults = mergeLcovResults(lcovResults);
20
+ logMergedRecords({ before: lcovResults.length, after: mergedResults.length });
19
21
  // Calculate code coverage from all coverage results
20
22
  const totalCoverageStats = groupLcovRecordsByCoverageType(mergedResults, coverageTypes);
21
23
  const gitRoot = await getGitRoot();
@@ -35,14 +37,25 @@ export async function lcovResultsToAuditOutputs(results, coverageTypes) {
35
37
  * @returns Array of parsed LCOVRecords.
36
38
  */
37
39
  export async function parseLcovFiles(results) {
38
- const parsedResults = (await Promise.all(results.map(async (result) => {
39
- const resultsPath = typeof result === 'string' ? result : result.resultsPath;
40
- const lcovFileContent = await readTextFile(resultsPath);
41
- if (lcovFileContent.trim() === '') {
42
- logger.warn(`Empty lcov report file detected at ${resultsPath}.`);
43
- }
44
- const parsedRecords = parseLcov(toUnixNewlines(lcovFileContent));
45
- return parsedRecords.map((record) => ({
40
+ const recordsPerReport = Object.fromEntries(await Promise.all(results.map(parseLcovFile)));
41
+ logLcovRecords(recordsPerReport);
42
+ const allRecords = Object.values(recordsPerReport).flat();
43
+ if (allRecords.length === 0) {
44
+ throw new Error('All provided coverage results are empty.');
45
+ }
46
+ return allRecords;
47
+ }
48
+ async function parseLcovFile(result) {
49
+ const resultsPath = typeof result === 'string' ? result : result.resultsPath;
50
+ const lcovFileContent = await readTextFile(resultsPath);
51
+ if (lcovFileContent.trim() === '') {
52
+ logger.warn(`Empty LCOV report file detected at ${resultsPath}.`);
53
+ }
54
+ const parsedRecords = parseLcov(toUnixNewlines(lcovFileContent));
55
+ logger.debug(`Parsed LCOV report file at ${resultsPath}`);
56
+ return [
57
+ resultsPath,
58
+ parsedRecords.map((record) => ({
46
59
  title: record.title,
47
60
  file: typeof result === 'string' || result.pathToProject == null
48
61
  ? record.file
@@ -50,12 +63,8 @@ export async function parseLcovFiles(results) {
50
63
  functions: patchInvalidStats(record, 'functions'),
51
64
  branches: patchInvalidStats(record, 'branches'),
52
65
  lines: patchInvalidStats(record, 'lines'),
53
- }));
54
- }))).flat();
55
- if (parsedResults.length === 0) {
56
- throw new Error('All provided coverage results are empty.');
57
- }
58
- return parsedResults;
66
+ })),
67
+ ];
59
68
  }
60
69
  /**
61
70
  * Filters out invalid `line` numbers, and ensures `hit <= found`.
@@ -91,4 +100,59 @@ function getCoverageStatsFromLcovRecord(record, coverageTypes) {
91
100
  recordToStatFunctionMapper[coverageType](record),
92
101
  ]));
93
102
  }
103
+ function logLcovRecords(recordsPerReport) {
104
+ const reportPaths = Object.keys(recordsPerReport);
105
+ const reportsCount = reportPaths.length;
106
+ const sourceFilesCount = new Set(Object.values(recordsPerReport)
107
+ .flat()
108
+ .map(record => record.file)).size;
109
+ logger.info(`Parsed ${pluralizeToken('LCOV report', reportsCount)}, coverage collected from ${pluralizeToken('source file', sourceFilesCount)}`);
110
+ if (!logger.isVerbose()) {
111
+ return;
112
+ }
113
+ const truncatedPaths = truncatePaths(reportPaths);
114
+ logger.newline();
115
+ logger.debug(formatAsciiTable({
116
+ columns: [
117
+ { key: 'report', label: 'LCOV report', align: 'left' },
118
+ { key: 'filesCount', label: 'Files', align: 'right' },
119
+ ...ALL_COVERAGE_TYPES.map((type) => ({
120
+ key: type,
121
+ label: capitalize(pluralize(type)),
122
+ align: 'right',
123
+ })),
124
+ ],
125
+ rows: Object.entries(recordsPerReport).map(([reportPath, records], idx) => {
126
+ const groups = groupLcovRecordsByCoverageType(records, ALL_COVERAGE_TYPES);
127
+ const stats = objectFromEntries(objectToEntries(groups).map(([type, files = []]) => [
128
+ type,
129
+ formatCoverageSum(files),
130
+ ]));
131
+ const report = truncatedPaths[idx] ?? reportPath;
132
+ return { report, filesCount: records.length, ...stats };
133
+ }),
134
+ }));
135
+ logger.newline();
136
+ }
137
+ function formatCoverageSum(files) {
138
+ const { covered, total } = files.reduce((acc, file) => ({
139
+ covered: acc.covered + file.covered,
140
+ total: acc.total + file.total,
141
+ }), { covered: 0, total: 0 });
142
+ if (total === 0) {
143
+ return 'n/a';
144
+ }
145
+ const percentage = (covered / total) * 100;
146
+ return `${percentage.toFixed(1)}%`;
147
+ }
148
+ function logMergedRecords(counts) {
149
+ if (counts.before === counts.after) {
150
+ logger.debug(counts.after === 1
151
+ ? 'There is only 1 LCOV record' // should be rare
152
+ : `All of ${pluralizeToken('LCOV record', counts.after)} have unique source files`);
153
+ }
154
+ else {
155
+ logger.info(`Merged ${counts.before} into ${pluralizeToken('unique LCOV record', counts.after)} per source file`);
156
+ }
157
+ }
94
158
  //# sourceMappingURL=lcov-runner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lcov-runner.js","sourceRoot":"","sources":["../../../../../src/lib/runner/lcov/lcov-runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lcov-runner.js","sourceRoot":"","sources":["../../../../../src/lib/runner/lcov/lcov-runner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { RunnerFunction } from '@code-pushup/models';
2
+ import type { FinalCoveragePluginConfig } from '../config.js';
3
+ export declare function createRunnerFunction(config: FinalCoveragePluginConfig): RunnerFunction;
@@ -0,0 +1,39 @@
1
+ import { executeProcess, formatAsciiTable, logger, pluralizeToken, } from '@code-pushup/utils';
2
+ import { slugToTitle } from '../format.js';
3
+ import { lcovResultsToAuditOutputs } from './lcov/lcov-runner.js';
4
+ export function createRunnerFunction(config) {
5
+ return async () => {
6
+ const { reports, coverageToolCommand, continueOnCommandFail, coverageTypes, } = config;
7
+ // Run coverage tool if provided
8
+ if (coverageToolCommand == null) {
9
+ logger.info('No test command provided, assuming coverage has already been collected');
10
+ }
11
+ else {
12
+ logger.info('Executing test command to collect coverage ...');
13
+ const { command, args } = coverageToolCommand;
14
+ try {
15
+ await executeProcess({ command, args });
16
+ }
17
+ catch {
18
+ if (!continueOnCommandFail) {
19
+ throw new Error('Running coverage tool failed. Make sure all your tests are passing.');
20
+ }
21
+ }
22
+ }
23
+ // Calculate coverage from LCOV results
24
+ const auditOutputs = await lcovResultsToAuditOutputs(reports, coverageTypes);
25
+ logAuditOutputs(auditOutputs);
26
+ return auditOutputs;
27
+ };
28
+ }
29
+ function logAuditOutputs(auditOutputs) {
30
+ logger.info(`Transformed LCOV reports to ${pluralizeToken('audit output', auditOutputs.length)}`);
31
+ logger.info(formatAsciiTable({
32
+ columns: ['left', 'right'],
33
+ rows: auditOutputs.map(audit => [
34
+ `• ${slugToTitle(audit.slug)}`,
35
+ `${audit.value.toFixed(2)}%`,
36
+ ]),
37
+ }, { borderless: true }));
38
+ }
39
+ //# sourceMappingURL=runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../../src/lib/runner/runner.ts"],"names":[],"mappings":"AACA,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,cAAc,GACf,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,UAAU,oBAAoB,CAClC,MAAiC;IAEjC,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,EACJ,OAAO,EACP,mBAAmB,EACnB,qBAAqB,EACrB,aAAa,GACd,GAAG,MAAM,CAAC;QAEX,gCAAgC;QAChC,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CACT,wEAAwE,CACzE,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;YAC9D,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC;YAC9C,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,IAAI,CAAC,qBAAqB,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,uCAAuC;QACvC,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAClD,OAAO,EACP,aAAa,CACd,CAAC;QAEF,eAAe,CAAC,YAAY,CAAC,CAAC;QAE9B,OAAO,YAAY,CAAC;IACtB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,YAA0B;IACjD,MAAM,CAAC,IAAI,CACT,+BAA+B,cAAc,CAAC,cAAc,EAAE,YAAY,CAAC,MAAM,CAAC,EAAE,CACrF,CAAC;IACF,MAAM,CAAC,IAAI,CACT,gBAAgB,CACd;QACE,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;QAC1B,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,KAAK,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC9B,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;SAC7B,CAAC;KACH,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CACF,CAAC;AACJ,CAAC"}
package/src/bin.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/src/bin.js DELETED
@@ -1,6 +0,0 @@
1
- import process from 'node:process';
2
- import { Parser } from 'yargs/helpers';
3
- import { executeRunner } from './lib/runner/index.js';
4
- const { runnerConfigPath, runnerOutputPath } = Parser(process.argv);
5
- await executeRunner({ runnerConfigPath, runnerOutputPath });
6
- //# sourceMappingURL=bin.js.map
package/src/bin.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/bin.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpE,MAAM,aAAa,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC,CAAC"}
@@ -1,4 +0,0 @@
1
- import type { RunnerConfig, RunnerFilesPaths } from '@code-pushup/models';
2
- import type { FinalCoveragePluginConfig } from '../config.js';
3
- export declare function executeRunner({ runnerConfigPath, runnerOutputPath, }: RunnerFilesPaths): Promise<void>;
4
- export declare function createRunnerConfig(scriptPath: string, config: FinalCoveragePluginConfig): Promise<RunnerConfig>;
@@ -1,37 +0,0 @@
1
- import { writeFile } from 'node:fs/promises';
2
- import path from 'node:path';
3
- import { createRunnerFiles, ensureDirectoryExists, executeProcess, filePathToCliArg, objectToCliArgs, readJsonFile, } from '@code-pushup/utils';
4
- import { lcovResultsToAuditOutputs } from './lcov/lcov-runner.js';
5
- export async function executeRunner({ runnerConfigPath, runnerOutputPath, }) {
6
- const { reports, coverageToolCommand, continueOnCommandFail, coverageTypes } = await readJsonFile(runnerConfigPath);
7
- // Run coverage tool if provided
8
- if (coverageToolCommand != null) {
9
- const { command, args } = coverageToolCommand;
10
- try {
11
- await executeProcess({ command, args });
12
- }
13
- catch {
14
- if (!continueOnCommandFail) {
15
- throw new Error('Coverage plugin: Running coverage tool failed. Make sure all your provided tests are passing.');
16
- }
17
- }
18
- }
19
- // Calculate coverage from LCOV results
20
- const auditOutputs = await lcovResultsToAuditOutputs(reports, coverageTypes);
21
- await ensureDirectoryExists(path.dirname(runnerOutputPath));
22
- await writeFile(runnerOutputPath, JSON.stringify(auditOutputs));
23
- }
24
- export async function createRunnerConfig(scriptPath, config) {
25
- // Create JSON config for executeRunner
26
- const { runnerConfigPath, runnerOutputPath } = await createRunnerFiles('coverage', JSON.stringify(config));
27
- return {
28
- command: 'node',
29
- args: [
30
- filePathToCliArg(scriptPath),
31
- ...objectToCliArgs({ runnerConfigPath, runnerOutputPath }),
32
- ],
33
- configFile: runnerConfigPath,
34
- outputFile: runnerOutputPath,
35
- };
36
- }
37
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/lib/runner/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EACL,iBAAiB,EACjB,qBAAqB,EACrB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAClC,gBAAgB,EAChB,gBAAgB,GACC;IACjB,MAAM,EAAE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,aAAa,EAAE,GAC1E,MAAM,YAAY,CAA4B,gBAAgB,CAAC,CAAC;IAElE,gCAAgC;IAChC,IAAI,mBAAmB,IAAI,IAAI,EAAE,CAAC;QAChC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,mBAAmB,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CACb,+FAA+F,CAChG,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,uCAAuC;IACvC,MAAM,YAAY,GAAG,MAAM,yBAAyB,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE7E,MAAM,qBAAqB,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC5D,MAAM,SAAS,CAAC,gBAAgB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,UAAkB,EAClB,MAAiC;IAEjC,uCAAuC;IACvC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,MAAM,iBAAiB,CACpE,UAAU,EACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CACvB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,MAAM;QACf,IAAI,EAAE;YACJ,gBAAgB,CAAC,UAAU,CAAC;YAC5B,GAAG,eAAe,CAAC,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAC;SAC3D;QACD,UAAU,EAAE,gBAAgB;QAC5B,UAAU,EAAE,gBAAgB;KAC7B,CAAC;AACJ,CAAC"}