create-merged-coverage-reports 0.1.0 → 0.3.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/README.md CHANGED
@@ -35,7 +35,7 @@ Options:
35
35
  ### API
36
36
 
37
37
  ```ts
38
- import { createMergedCoverageReports } from 'create-merged-coverage-reports';
38
+ import { createMergedCoverageReports } from "create-merged-coverage-reports";
39
39
 
40
40
  async function main() {
41
41
  await createMergedCoverageReports();
@@ -46,11 +46,11 @@ main();
46
46
 
47
47
  ## Building
48
48
 
49
- Run `nx build create-merged-coverage-reports` to build the library.
49
+ Run `pnpm run build` to build the library.
50
50
 
51
51
  ## Running unit tests
52
52
 
53
- Run `nx test create-merged-coverage-reports` to execute the unit tests.
53
+ Run `pnpm run test` to execute the unit tests.
54
54
 
55
55
  ## License
56
56
 
package/dist/bin.d.ts ADDED
@@ -0,0 +1 @@
1
+ export { };
package/dist/bin.js ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import { createMergedCoverageReports } from "./create-merged-coverage-reports-DTw7ouWj.js";
3
+ import { Command } from "commander";
4
+ import { readPackageUp } from "read-package-up";
5
+
6
+ //#region src/lib/cli-program.ts
7
+ const createProgram = async ({ exitOverride = false } = {}) => {
8
+ const program = new Command();
9
+ if (exitOverride) program.exitOverride();
10
+ const packageUpResult = await readPackageUp({ cwd: import.meta.dirname });
11
+ if (!packageUpResult) {
12
+ console.error("Cannot find package.json");
13
+ process.exit(1);
14
+ }
15
+ const { packageJson: { name, version, description } } = packageUpResult;
16
+ program.name(name).description(description ?? "").version(version, "-v, --version").option("-c, --coverageFileGlob <glob>", "Glob to get all json coverage files").option("-o, --outputDirectory <dir>", "Directory where all merged coverage reports").option("-r, --reporters <reporters...>", "Which reporters (either built-in, or custom) to use to generate the merged coverage reports").action((options) => {
17
+ return createMergedCoverageReports(options);
18
+ });
19
+ return program;
20
+ };
21
+
22
+ //#endregion
23
+ //#region src/bin.ts
24
+ const main = async () => {
25
+ const program = await createProgram();
26
+ program.parse();
27
+ };
28
+ main().catch((e) => {
29
+ console.error(e);
30
+ process.exit(1);
31
+ });
32
+
33
+ //#endregion
34
+ //# sourceMappingURL=bin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.js","names":[],"sources":["../src/lib/cli-program.ts","../src/bin.ts"],"sourcesContent":["import { Command } from \"commander\";\nimport { readPackageUp } from \"read-package-up\";\n\nimport { createMergedCoverageReports } from \"./create-merged-coverage-reports\";\n\nexport const createProgram = async ({ exitOverride = false } = {}) => {\n const program = new Command();\n\n if (exitOverride) {\n program.exitOverride();\n }\n\n const packageUpResult = await readPackageUp({ cwd: import.meta.dirname });\n\n if (!packageUpResult) {\n console.error(\"Cannot find package.json\");\n process.exit(1);\n }\n\n const {\n packageJson: { name, version, description },\n } = packageUpResult;\n\n program\n .name(name)\n .description(description ?? \"\")\n .version(version, \"-v, --version\")\n .option(\n \"-c, --coverageFileGlob <glob>\",\n \"Glob to get all json coverage files\",\n )\n .option(\n \"-o, --outputDirectory <dir>\",\n \"Directory where all merged coverage reports\",\n )\n .option(\n \"-r, --reporters <reporters...>\",\n \"Which reporters (either built-in, or custom) to use to generate the merged coverage reports\",\n )\n .action((options) => {\n return createMergedCoverageReports(options);\n });\n\n return program;\n};\n","#!/usr/bin/env node\n\nimport { createProgram } from './lib/cli-program';\n\nconst main = async () => {\n const program = await createProgram();\n\n program.parse();\n};\n\nmain().catch((e) => {\n console.error(e);\n process.exit(1);\n});\n"],"mappings":";;;;;;AAKA,MAAa,gBAAgB,OAAO,EAAE,eAAe,OAAO,GAAG,CAAE,MAAK;CACpE,MAAM,UAAU,IAAI;AAEpB,KAAI,cACF,QAAQ,cAAc;CAGxB,MAAM,kBAAkB,MAAM,cAAc,EAAE,KAAK,OAAO,KAAK,QAAS,EAAC;AAEzE,KAAI,CAAC,iBAAiB;EACpB,QAAQ,MAAM,2BAA2B;EACzC,QAAQ,KAAK,EAAE;CAChB;CAED,MAAM,EACJ,aAAa,EAAE,MAAM,SAAS,aAAa,EAC5C,GAAG;CAEJ,QACG,KAAK,KAAK,CACV,YAAY,eAAe,GAAG,CAC9B,QAAQ,SAAS,gBAAgB,CACjC,OACC,iCACA,sCACD,CACA,OACC,+BACA,8CACD,CACA,OACC,kCACA,8FACD,CACA,OAAO,CAAC,YAAY;AACnB,SAAO,4BAA4B,QAAQ;CAC5C,EAAC;AAEJ,QAAO;AACR;;;;ACxCD,MAAM,OAAO,YAAY;CACvB,MAAM,UAAU,MAAM,eAAe;CAErC,QAAQ,OAAO;AAChB;AAED,MAAM,CAAC,MAAM,CAAC,MAAM;CAClB,QAAQ,MAAM,EAAE;CAChB,QAAQ,KAAK,EAAE;AAChB,EAAC"}
@@ -0,0 +1,41 @@
1
+ import * as path from "path";
2
+ import { readFile } from "fs/promises";
3
+ import libCoverage from "istanbul-lib-coverage";
4
+ import libReport from "istanbul-lib-report";
5
+ import { create } from "istanbul-reports";
6
+ import { glob } from "tinyglobby";
7
+
8
+ //#region src/lib/create-merged-coverage-reports.ts
9
+ const readJson = async (p) => JSON.parse(await readFile(p, "utf-8"));
10
+ const normalizeOptions = (options) => {
11
+ const { coverageFileGlob = "coverage/**/coverage-final.json", outputDirectory = path.join("coverage", "merged"), reporters = ["json"] } = options;
12
+ return {
13
+ coverageFileGlob,
14
+ outputDirectory,
15
+ reporters
16
+ };
17
+ };
18
+ const createMergedCoverageReports = async (options = {}) => {
19
+ const { coverageFileGlob, outputDirectory, reporters } = normalizeOptions(options);
20
+ const jsonFilePaths = await glob([coverageFileGlob, `!${outputDirectory}/**/*`]);
21
+ if (jsonFilePaths.length === 0) throw new Error(`No coverage reports found with the ${coverageFileGlob} glob`);
22
+ const mergedMap = libCoverage.createCoverageMap();
23
+ for (const jsonFilePath of jsonFilePaths) {
24
+ const coverageJson = await readJson(path.resolve(jsonFilePath));
25
+ mergedMap.merge(coverageJson);
26
+ }
27
+ const reportGenerationContext = libReport.createContext({
28
+ dir: outputDirectory,
29
+ defaultSummarizer: "nested",
30
+ coverageMap: mergedMap
31
+ });
32
+ reporters.forEach((reporter) => {
33
+ const report = create(reporter);
34
+ report.execute(reportGenerationContext);
35
+ });
36
+ console.log(`Generated ${reporters.join(", ")} reports to ${outputDirectory}`);
37
+ };
38
+
39
+ //#endregion
40
+ export { createMergedCoverageReports };
41
+ //# sourceMappingURL=create-merged-coverage-reports-DTw7ouWj.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-merged-coverage-reports-DTw7ouWj.js","names":["p: string","options: CreateMergedCoverageReportsOptions","createReport"],"sources":["../src/lib/create-merged-coverage-reports.ts"],"sourcesContent":["import * as path from \"path\";\nimport { readFile } from \"fs/promises\";\nimport { default as libCoverage } from \"istanbul-lib-coverage\";\nimport { default as libReport } from \"istanbul-lib-report\";\nimport { create as createReport, type ReportOptions } from \"istanbul-reports\";\nimport { glob } from \"tinyglobby\";\n\ntype CreateMergedCoverageReportsOptions = {\n /**\n * Glob to get all json coverage files\n *\n * @default 'coverage/** /coverage-final.json'\n */\n coverageFileGlob?: string;\n\n /**\n * Directory where all merged coverage reports\n *\n * Note that this directory will be excluded from the coverage files lookup\n *\n * @default 'coverage/merged'\n */\n outputDirectory?: string;\n\n /**\n * Which reporters (either built-in, or custom) to use to generate the merged coverage reports\n *\n * @see https://istanbul.js.org/docs/advanced/alternative-reporters\n *\n * @default ['json']\n */\n reporters?: string[];\n};\n\nconst readJson = async (p: string) => JSON.parse(await readFile(p, \"utf-8\"));\n\nconst normalizeOptions = (options: CreateMergedCoverageReportsOptions) => {\n const {\n coverageFileGlob = \"coverage/**/coverage-final.json\",\n outputDirectory = path.join(\"coverage\", \"merged\"),\n reporters = [\"json\"],\n } = options;\n\n return {\n coverageFileGlob,\n outputDirectory,\n reporters,\n };\n};\n\nexport const createMergedCoverageReports = async (\n options: CreateMergedCoverageReportsOptions = {},\n): Promise<void> => {\n const { coverageFileGlob, outputDirectory, reporters } =\n normalizeOptions(options);\n\n const jsonFilePaths = await glob([\n coverageFileGlob,\n `!${outputDirectory}/**/*`,\n ]);\n\n if (jsonFilePaths.length === 0) {\n throw new Error(\n `No coverage reports found with the ${coverageFileGlob} glob`,\n );\n }\n\n const mergedMap = libCoverage.createCoverageMap();\n\n for (const jsonFilePath of jsonFilePaths) {\n const coverageJson = await readJson(\n // ensure absolute path, otherwise ENOENT error happens\n path.resolve(jsonFilePath),\n );\n\n mergedMap.merge(coverageJson);\n }\n\n const reportGenerationContext = libReport.createContext({\n dir: outputDirectory,\n defaultSummarizer: \"nested\",\n coverageMap: mergedMap,\n });\n\n reporters.forEach((reporter) => {\n const report = createReport(\n // HACK: may be a custom reporter\n reporter as unknown as keyof ReportOptions,\n );\n\n report.execute(reportGenerationContext);\n });\n\n console.log(\n `Generated ${reporters.join(\", \")} reports to ${outputDirectory}`,\n );\n};\n"],"mappings":";;;;;;;;AAkCA,MAAM,WAAW,OAAOA,MAAc,KAAK,MAAM,MAAM,SAAS,GAAG,QAAQ,CAAC;AAE5E,MAAM,mBAAmB,CAACC,YAAgD;CACxE,MAAM,EACJ,mBAAmB,mCACnB,kBAAkB,KAAK,KAAK,YAAY,SAAS,EACjD,YAAY,CAAC,MAAO,GACrB,GAAG;AAEJ,QAAO;EACL;EACA;EACA;CACD;AACF;AAED,MAAa,8BAA8B,OACzCA,UAA8C,CAAE,MAC9B;CAClB,MAAM,EAAE,kBAAkB,iBAAiB,WAAW,GACpD,iBAAiB,QAAQ;CAE3B,MAAM,gBAAgB,MAAM,KAAK,CAC/B,kBACA,CAAC,CAAC,EAAE,gBAAgB,KAAK,CAAC,AAC3B,EAAC;AAEF,KAAI,cAAc,WAAW,EAC3B,OAAM,IAAI,MACR,CAAC,mCAAmC,EAAE,iBAAiB,KAAK,CAAC;CAIjE,MAAM,YAAY,YAAY,mBAAmB;AAEjD,MAAK,MAAM,gBAAgB,eAAe;EACxC,MAAM,eAAe,MAAM,SAEzB,KAAK,QAAQ,aAAa,CAC3B;EAED,UAAU,MAAM,aAAa;CAC9B;CAED,MAAM,0BAA0B,UAAU,cAAc;EACtD,KAAK;EACL,mBAAmB;EACnB,aAAa;CACd,EAAC;CAEF,UAAU,QAAQ,CAAC,aAAa;EAC9B,MAAM,SAASC,OAEb,SACD;EAED,OAAO,QAAQ,wBAAwB;CACxC,EAAC;CAEF,QAAQ,IACN,CAAC,UAAU,EAAE,UAAU,KAAK,KAAK,CAAC,YAAY,EAAE,iBAAiB,CAClE;AACF"}
@@ -0,0 +1,29 @@
1
+ //#region src/lib/create-merged-coverage-reports.d.ts
2
+ type CreateMergedCoverageReportsOptions = {
3
+ /**
4
+ * Glob to get all json coverage files
5
+ *
6
+ * @default 'coverage/** /coverage-final.json'
7
+ */
8
+ coverageFileGlob?: string;
9
+ /**
10
+ * Directory where all merged coverage reports
11
+ *
12
+ * Note that this directory will be excluded from the coverage files lookup
13
+ *
14
+ * @default 'coverage/merged'
15
+ */
16
+ outputDirectory?: string;
17
+ /**
18
+ * Which reporters (either built-in, or custom) to use to generate the merged coverage reports
19
+ *
20
+ * @see https://istanbul.js.org/docs/advanced/alternative-reporters
21
+ *
22
+ * @default ['json']
23
+ */
24
+ reporters?: string[];
25
+ };
26
+ declare const createMergedCoverageReports: (options?: CreateMergedCoverageReportsOptions) => Promise<void>;
27
+ //#endregion
28
+ export { createMergedCoverageReports };
29
+ //# sourceMappingURL=index.d.ts.map
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ import { createMergedCoverageReports } from "./create-merged-coverage-reports-DTw7ouWj.js";
2
+
3
+ export { createMergedCoverageReports };
package/package.json CHANGED
@@ -1,85 +1,63 @@
1
1
  {
2
2
  "name": "create-merged-coverage-reports",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Create merged coverage reports",
5
5
  "license": "MIT",
6
6
  "private": false,
7
7
  "author": "Alex Gavrusev <alex@gavrusev.dev>",
8
8
  "repository": {
9
9
  "type": "git",
10
- "url": "https://github.com/alexgavrusev/create-merged-coverage-reports.git"
10
+ "url": "git+https://github.com/alexgavrusev/create-merged-coverage-reports.git"
11
11
  },
12
12
  "homepage": "https://github.com/alexgavrusev/create-merged-coverage-reports#readme",
13
13
  "bugs": {
14
14
  "url": "https://github.com/alexgavrusev/create-merged-coverage-reports/issues"
15
15
  },
16
- "bin": "./bin.cjs.js",
17
- "scripts": {
18
- "prepare": "node -e \"if(require('fs').existsSync('.git')){/* proceed only if .git is found */ process.exit(1)}\" || is-ci || husky install"
16
+ "type": "module",
17
+ "bin": "./dist/bin.js",
18
+ "main": "./dist/index.js",
19
+ "module": "./dist/index.js",
20
+ "types": "./dist/index.d.ts",
21
+ "exports": {
22
+ ".": "./dist/index.js",
23
+ "./bin": "./dist/bin.js",
24
+ "./package.json": "./package.json"
19
25
  },
26
+ "files": [
27
+ "dist"
28
+ ],
20
29
  "dependencies": {
21
- "@swc/helpers": "~0.5.2",
22
- "commander": "^11.1.0",
23
- "fs-extra": "^11.2.0",
24
- "globby": "^14.0.0",
30
+ "commander": "^14.0.0",
25
31
  "istanbul-lib-coverage": "^3.2.2",
26
32
  "istanbul-lib-report": "^3.0.1",
27
33
  "istanbul-reports": "^3.1.6",
28
34
  "read-package-up": "^11.0.0",
29
- "tsimportlib": "^0.0.5"
35
+ "tinyglobby": "^0.2.14"
30
36
  },
31
37
  "devDependencies": {
32
- "@commitlint/cli": "^17.0.0",
33
- "@commitlint/config-conventional": "^17.0.0",
34
- "@gvrs-nx/ts-package": "0.3.0",
35
- "@jscutlery/semver": "^4.1.0",
36
- "@nx/eslint": "17.1.3",
37
- "@nx/eslint-plugin": "17.1.3",
38
- "@nx/js": "17.1.3",
39
- "@nx/rollup": "17.1.3",
40
- "@nx/vite": "17.1.3",
41
- "@nx/workspace": "17.1.3",
42
- "@swc-node/register": "~1.6.7",
43
- "@swc/cli": "~0.1.62",
44
- "@swc/core": "~1.3.85",
45
- "@types/fs-extra": "^11.0.4",
46
38
  "@types/istanbul-lib-coverage": "^2.0.6",
47
39
  "@types/istanbul-lib-report": "^3.0.3",
48
40
  "@types/istanbul-reports": "^3.0.4",
49
- "@types/node": "18.7.1",
41
+ "@types/node": "^24.1.0",
50
42
  "@types/tmp": "^0.2.6",
51
- "@typescript-eslint/eslint-plugin": "^6.9.1",
52
- "@typescript-eslint/parser": "^6.9.1",
53
- "@vitest/coverage-v8": "~0.34.6",
54
- "@vitest/ui": "~0.34.6",
55
- "eslint": "~8.46.0",
56
- "eslint-config-prettier": "^9.0.0",
57
- "husky": "^8.0.0",
58
- "is-ci": "^3.0.0",
59
- "nx": "17.1.3",
60
- "prettier": "^2.6.2",
61
- "rollup-plugin-preserve-shebang": "1.0.1",
62
- "tmp": "^0.2.1",
63
- "tslib": "^2.3.0",
64
- "typescript": "~5.2.2",
65
- "verdaccio": "^5.0.4",
66
- "vite": "~4.3.9",
67
- "vitest": "~0.34.6"
43
+ "bumpp": "^10.2.0",
44
+ "changelogithub": "^13.16.0",
45
+ "oxlint": "^1.8.0",
46
+ "pkg-pr-new": "^0.0.54",
47
+ "prettier": "^3.6.2",
48
+ "tmp": "^0.2.3",
49
+ "tsdown": "^0.13.0",
50
+ "typescript": "^5.8.3",
51
+ "vitest": "^3.2.4"
68
52
  },
69
53
  "sideEffects": false,
70
- "exports": {
71
- "./package.json": "./package.json",
72
- ".": {
73
- "module": "./index.esm.js",
74
- "import": "./index.cjs.mjs",
75
- "default": "./index.cjs.js"
76
- },
77
- "./bin": {
78
- "module": "./bin.esm.js",
79
- "import": "./bin.cjs.mjs",
80
- "default": "./bin.cjs.js"
81
- }
82
- },
83
- "module": "./index.esm.js",
84
- "main": "./index.cjs.js"
85
- }
54
+ "scripts": {
55
+ "build": "tsdown",
56
+ "dev": "tsdown --watch",
57
+ "test": "vitest",
58
+ "lint": "oxlint --deny-warnings",
59
+ "lint:fix": "pnpm run lint --fix",
60
+ "format": "prettier --cache --write .",
61
+ "release": "bumpp && pnpm publish"
62
+ }
63
+ }
package/CHANGELOG.md DELETED
@@ -1,10 +0,0 @@
1
- # Changelog
2
-
3
- This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
-
5
- ## 0.1.0 (2023-12-01)
6
-
7
-
8
- ### Features
9
-
10
- * initial commit 842d16c
package/bin.cjs.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/bin";
@@ -1 +0,0 @@
1
- exports._default = require('./bin.cjs.js').default;
package/bin.cjs.js DELETED
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
-
4
- var cliProgram = require('./lib/cli-program.cjs.js');
5
-
6
- const main = async ()=>{
7
- const program = await cliProgram.createProgram();
8
- program.parse();
9
- };
10
- main().catch((e)=>{
11
- console.error(e);
12
- process.exit(1);
13
- });
package/bin.cjs.mjs DELETED
@@ -1,2 +0,0 @@
1
- export * from './bin.cjs.js';
2
- export { _default as default } from './bin.cjs.default.js';
package/bin.esm.js DELETED
@@ -1,11 +0,0 @@
1
- #!/usr/bin/env node
2
- import { createProgram } from './lib/cli-program.esm.js';
3
-
4
- const main = async ()=>{
5
- const program = await createProgram();
6
- program.parse();
7
- };
8
- main().catch((e)=>{
9
- console.error(e);
10
- process.exit(1);
11
- });
package/index.cjs.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";
@@ -1 +0,0 @@
1
- exports._default = require('./index.cjs.js').default;
package/index.cjs.js DELETED
@@ -1,9 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var createMergedCoverageReports = require('./lib/create-merged-coverage-reports.cjs.js');
6
-
7
-
8
-
9
- exports.createMergedCoverageReports = createMergedCoverageReports.createMergedCoverageReports;
package/index.cjs.mjs DELETED
@@ -1,2 +0,0 @@
1
- export * from './index.cjs.js';
2
- export { _default as default } from './index.cjs.default.js';
package/index.esm.js DELETED
@@ -1 +0,0 @@
1
- export { createMergedCoverageReports } from './lib/create-merged-coverage-reports.esm.js';
@@ -1,24 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var commander = require('commander');
6
- var tsimportlib = require('tsimportlib');
7
- var createMergedCoverageReports = require('./create-merged-coverage-reports.cjs.js');
8
-
9
- const createProgram = async ({ exitOverride = false } = {})=>{
10
- const program = new commander.Command();
11
- if (exitOverride) {
12
- program.exitOverride();
13
- }
14
- const { readPackageUp } = await tsimportlib.dynamicImport(require.resolve('read-package-up'), module);
15
- const { packageJson: { name, version, description } } = await readPackageUp({
16
- cwd: __dirname
17
- });
18
- program.name(name).description(description).version(version, '-v, --version').option('-c, --coverageFileGlob <glob>', 'Glob to get all json coverage files').option('-o, --outputDirectory <dir>', 'Directory where all merged coverage reports').option('-r, --reporters <reporters...>', 'Which reporters (either built-in, or custom) to use to generate the merged coverage reports').action((options)=>{
19
- return createMergedCoverageReports.createMergedCoverageReports(options);
20
- });
21
- return program;
22
- };
23
-
24
- exports.createProgram = createProgram;
@@ -1,20 +0,0 @@
1
- import { Command } from 'commander';
2
- import { dynamicImport } from 'tsimportlib';
3
- import { createMergedCoverageReports } from './create-merged-coverage-reports.esm.js';
4
-
5
- const createProgram = async ({ exitOverride = false } = {})=>{
6
- const program = new Command();
7
- if (exitOverride) {
8
- program.exitOverride();
9
- }
10
- const { readPackageUp } = await dynamicImport(require.resolve('read-package-up'), module);
11
- const { packageJson: { name, version, description } } = await readPackageUp({
12
- cwd: __dirname
13
- });
14
- program.name(name).description(description).version(version, '-v, --version').option('-c, --coverageFileGlob <glob>', 'Glob to get all json coverage files').option('-o, --outputDirectory <dir>', 'Directory where all merged coverage reports').option('-r, --reporters <reporters...>', 'Which reporters (either built-in, or custom) to use to generate the merged coverage reports').action((options)=>{
15
- return createMergedCoverageReports(options);
16
- });
17
- return program;
18
- };
19
-
20
- export { createProgram };
@@ -1,72 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var path = require('path');
6
- var istanbulLibCoverage = require('istanbul-lib-coverage');
7
- var istanbulLibReport = require('istanbul-lib-report');
8
- var istanbulReports = require('istanbul-reports');
9
- var fsExtra = require('fs-extra');
10
- var tsimportlib = require('tsimportlib');
11
-
12
- function _interopNamespace(e) {
13
- if (e && e.__esModule) return e;
14
- var n = Object.create(null);
15
- if (e) {
16
- Object.keys(e).forEach(function (k) {
17
- if (k !== 'default') {
18
- var d = Object.getOwnPropertyDescriptor(e, k);
19
- Object.defineProperty(n, k, d.get ? d : {
20
- enumerable: true,
21
- get: function () { return e[k]; }
22
- });
23
- }
24
- });
25
- }
26
- n["default"] = e;
27
- return Object.freeze(n);
28
- }
29
-
30
- var path__namespace = /*#__PURE__*/_interopNamespace(path);
31
-
32
- const getGlobby = ()=>tsimportlib.dynamicImport(require.resolve('globby'), module);
33
- const normalizeOptions = (options)=>{
34
- const { coverageFileGlob = 'coverage/**/coverage-final.json', outputDirectory = path__namespace.join('coverage', 'merged'), reporters = [
35
- 'json'
36
- ] } = options;
37
- return {
38
- coverageFileGlob,
39
- outputDirectory,
40
- reporters
41
- };
42
- };
43
- const createMergedCoverageReports = async (options = {})=>{
44
- const { coverageFileGlob, outputDirectory, reporters } = normalizeOptions(options);
45
- const { globby } = await getGlobby();
46
- const jsonFilePaths = await globby([
47
- coverageFileGlob,
48
- `!${outputDirectory}/**/*`
49
- ]);
50
- if (jsonFilePaths.length === 0) {
51
- throw new Error(`No coverage reports found with the ${coverageFileGlob} glob`);
52
- }
53
- const mergedMap = istanbulLibCoverage.createCoverageMap();
54
- for (const jsonFilePath of jsonFilePaths){
55
- const coverageJson = await fsExtra.readJson(// ensure absolute path, otherwise ENOENT error happens
56
- path__namespace.resolve(jsonFilePath));
57
- mergedMap.merge(coverageJson);
58
- }
59
- const reportGenerationContext = istanbulLibReport.createContext({
60
- dir: outputDirectory,
61
- defaultSummarizer: 'nested',
62
- coverageMap: mergedMap
63
- });
64
- reporters.forEach((reporter)=>{
65
- const report = istanbulReports.create(// HACK: may be a custom reporter
66
- reporter);
67
- report.execute(reportGenerationContext);
68
- });
69
- console.log(`Generated ${reporters.join(', ')} reports to ${outputDirectory}`);
70
- };
71
-
72
- exports.createMergedCoverageReports = createMergedCoverageReports;
@@ -1,48 +0,0 @@
1
- import * as path from 'path';
2
- import { createCoverageMap } from 'istanbul-lib-coverage';
3
- import { createContext } from 'istanbul-lib-report';
4
- import { create } from 'istanbul-reports';
5
- import { readJson } from 'fs-extra';
6
- import { dynamicImport } from 'tsimportlib';
7
-
8
- const getGlobby = ()=>dynamicImport(require.resolve('globby'), module);
9
- const normalizeOptions = (options)=>{
10
- const { coverageFileGlob = 'coverage/**/coverage-final.json', outputDirectory = path.join('coverage', 'merged'), reporters = [
11
- 'json'
12
- ] } = options;
13
- return {
14
- coverageFileGlob,
15
- outputDirectory,
16
- reporters
17
- };
18
- };
19
- const createMergedCoverageReports = async (options = {})=>{
20
- const { coverageFileGlob, outputDirectory, reporters } = normalizeOptions(options);
21
- const { globby } = await getGlobby();
22
- const jsonFilePaths = await globby([
23
- coverageFileGlob,
24
- `!${outputDirectory}/**/*`
25
- ]);
26
- if (jsonFilePaths.length === 0) {
27
- throw new Error(`No coverage reports found with the ${coverageFileGlob} glob`);
28
- }
29
- const mergedMap = createCoverageMap();
30
- for (const jsonFilePath of jsonFilePaths){
31
- const coverageJson = await readJson(// ensure absolute path, otherwise ENOENT error happens
32
- path.resolve(jsonFilePath));
33
- mergedMap.merge(coverageJson);
34
- }
35
- const reportGenerationContext = createContext({
36
- dir: outputDirectory,
37
- defaultSummarizer: 'nested',
38
- coverageMap: mergedMap
39
- });
40
- reporters.forEach((reporter)=>{
41
- const report = create(// HACK: may be a custom reporter
42
- reporter);
43
- report.execute(reportGenerationContext);
44
- });
45
- console.log(`Generated ${reporters.join(', ')} reports to ${outputDirectory}`);
46
- };
47
-
48
- export { createMergedCoverageReports };
package/src/bin.d.ts DELETED
@@ -1,2 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
package/src/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './lib/create-merged-coverage-reports';
@@ -1,4 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare const createProgram: ({ exitOverride }?: {
3
- exitOverride?: boolean;
4
- }) => Promise<Command>;
@@ -1,26 +0,0 @@
1
- type CreateMergedCoverageReportsOptions = {
2
- /**
3
- * Glob to get all json coverage files
4
- *
5
- * @default 'coverage/** /coverage-final.json'
6
- */
7
- coverageFileGlob?: string;
8
- /**
9
- * Directory where all merged coverage reports
10
- *
11
- * Note that this directory will be excluded from the coverage files lookup
12
- *
13
- * @default 'coverage/merged'
14
- */
15
- outputDirectory?: string;
16
- /**
17
- * Which reporters (either built-in, or custom) to use to generate the merged coverage reports
18
- *
19
- * @see https://istanbul.js.org/docs/advanced/alternative-reporters
20
- *
21
- * @default ['json']
22
- */
23
- reporters?: string[];
24
- };
25
- export declare const createMergedCoverageReports: (options?: CreateMergedCoverageReportsOptions) => Promise<void>;
26
- export {};