create-merged-coverage-reports 0.2.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.2.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": "^12.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": "^19.3.0",
33
- "@commitlint/config-conventional": "^19.2.2",
34
- "@gvrs-nx/ts-package": "0.3.0",
35
- "@jscutlery/semver": "^5.2.2",
36
- "@nx/eslint": "18.3.5",
37
- "@nx/eslint-plugin": "18.3.5",
38
- "@nx/js": "18.3.5",
39
- "@nx/rollup": "18.3.5",
40
- "@nx/vite": "18.3.5",
41
- "@nx/workspace": "18.3.5",
42
- "@swc-node/register": "~1.9.1",
43
- "@swc/cli": "~0.3.12",
44
- "@swc/core": "~1.5.7",
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": "20.12.12",
41
+ "@types/node": "^24.1.0",
50
42
  "@types/tmp": "^0.2.6",
51
- "@typescript-eslint/eslint-plugin": "^7.9.0",
52
- "@typescript-eslint/parser": "^7.9.0",
53
- "@vitest/coverage-v8": "~1.6.0",
54
- "@vitest/ui": "~1.6.0",
55
- "eslint": "~8.57.0",
56
- "eslint-config-prettier": "^9.0.0",
57
- "husky": "^9.0.11",
58
- "is-ci": "^3.0.0",
59
- "nx": "18.3.5",
60
- "prettier": "^3.2.5",
61
- "rollup-plugin-preserve-shebang": "1.0.1",
62
- "tmp": "^0.2.1",
63
- "tslib": "^2.3.0",
64
- "typescript": "~5.4.5",
65
- "verdaccio": "^5.0.4",
66
- "vite": "~5.2.11",
67
- "vitest": "~1.6.0"
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,36 +0,0 @@
1
- # Changelog
2
-
3
- This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
-
5
- ## [0.2.0](https://github.com/alexgavrusev/create-merged-coverage-reports/compare/create-merged-coverage-reports-0.1.0...create-merged-coverage-reports-0.2.0) (2024-05-18)
6
-
7
-
8
- ### Features
9
-
10
- * **deps:** add dependabot ([930cfb3](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/930cfb330c1adbdd3167b297c600a2bb59369e7d))
11
-
12
-
13
- ### Bug Fixes
14
-
15
- * resolve missing dependency error caused by rollup config ([839653d](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/839653d1528a2fd1e7aa184c90c93058cb39d147))
16
-
17
-
18
- ### Miscellaneous Chores
19
-
20
- * bump the github-actions group with 4 updates ([451cf71](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/451cf7112f35f58d82a5e83af5c9eb292b392206))
21
- * **deps:** bump the development group with 27 updates ([3272c64](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/3272c6420caca76b48cb58821128e044d5df65ad))
22
- * **deps:** bump the production group with 4 updates ([69d2cf0](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/69d2cf02c55110621f7c899cba65ae93265f973c))
23
- * **deps:** run nx migrations from 17.1.3 to 18.3.5 ([67ec955](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/67ec95538550d5a8fc0ec7fd4266237f8ab12c7d))
24
- * do not hide chore commits from changelog ([256f6fc](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/256f6fcc16c8635495782b1317aba5629fc5454e))
25
-
26
-
27
- ### Tests
28
-
29
- * update error snapshot ([6cadace](https://github.com/alexgavrusev/create-merged-coverage-reports/commit/6cadace5725d3d3a81e7f7ea564b0e5d45944d2b))
30
-
31
- ## 0.1.0 (2023-12-01)
32
-
33
-
34
- ### Features
35
-
36
- * 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,35 +0,0 @@
1
- #!/usr/bin/env node
2
- 'use strict';
3
-
4
- var commander = require('commander');
5
- var tsimportlib = require('tsimportlib');
6
- var createMergedCoverageReports = require('./create-merged-coverage-reports.cjs.js');
7
- require('path');
8
- require('istanbul-lib-coverage');
9
- require('istanbul-lib-report');
10
- require('istanbul-reports');
11
- require('fs-extra');
12
-
13
- const createProgram = async ({ exitOverride = false } = {})=>{
14
- const program = new commander.Command();
15
- if (exitOverride) {
16
- program.exitOverride();
17
- }
18
- const { readPackageUp } = await tsimportlib.dynamicImport(require.resolve('read-package-up'), module);
19
- const { packageJson: { name, version, description } } = await readPackageUp({
20
- cwd: __dirname
21
- });
22
- 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)=>{
23
- return createMergedCoverageReports.createMergedCoverageReports(options);
24
- });
25
- return program;
26
- };
27
-
28
- const main = async ()=>{
29
- const program = await createProgram();
30
- program.parse();
31
- };
32
- main().catch((e)=>{
33
- console.error(e);
34
- process.exit(1);
35
- });
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.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/bin";
package/bin.esm.js DELETED
@@ -1,33 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import { dynamicImport } from 'tsimportlib';
4
- import { c as createMergedCoverageReports } from './create-merged-coverage-reports.esm.js';
5
- import 'path';
6
- import 'istanbul-lib-coverage';
7
- import 'istanbul-lib-report';
8
- import 'istanbul-reports';
9
- import 'fs-extra';
10
-
11
- const createProgram = async ({ exitOverride = false } = {})=>{
12
- const program = new Command();
13
- if (exitOverride) {
14
- program.exitOverride();
15
- }
16
- const { readPackageUp } = await dynamicImport(require.resolve('read-package-up'), module);
17
- const { packageJson: { name, version, description } } = await readPackageUp({
18
- cwd: __dirname
19
- });
20
- 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)=>{
21
- return createMergedCoverageReports(options);
22
- });
23
- return program;
24
- };
25
-
26
- const main = async ()=>{
27
- const program = await createProgram();
28
- program.parse();
29
- };
30
- main().catch((e)=>{
31
- console.error(e);
32
- process.exit(1);
33
- });
@@ -1,70 +0,0 @@
1
- 'use strict';
2
-
3
- var path = require('path');
4
- var istanbulLibCoverage = require('istanbul-lib-coverage');
5
- var istanbulLibReport = require('istanbul-lib-report');
6
- var istanbulReports = require('istanbul-reports');
7
- var fsExtra = require('fs-extra');
8
- var tsimportlib = require('tsimportlib');
9
-
10
- function _interopNamespace(e) {
11
- if (e && e.__esModule) return e;
12
- var n = Object.create(null);
13
- if (e) {
14
- Object.keys(e).forEach(function (k) {
15
- if (k !== 'default') {
16
- var d = Object.getOwnPropertyDescriptor(e, k);
17
- Object.defineProperty(n, k, d.get ? d : {
18
- enumerable: true,
19
- get: function () { return e[k]; }
20
- });
21
- }
22
- });
23
- }
24
- n["default"] = e;
25
- return Object.freeze(n);
26
- }
27
-
28
- var path__namespace = /*#__PURE__*/_interopNamespace(path);
29
-
30
- const getGlobby = ()=>tsimportlib.dynamicImport(require.resolve('globby'), module);
31
- const normalizeOptions = (options)=>{
32
- const { coverageFileGlob = 'coverage/**/coverage-final.json', outputDirectory = path__namespace.join('coverage', 'merged'), reporters = [
33
- 'json'
34
- ] } = options;
35
- return {
36
- coverageFileGlob,
37
- outputDirectory,
38
- reporters
39
- };
40
- };
41
- const createMergedCoverageReports = async (options = {})=>{
42
- const { coverageFileGlob, outputDirectory, reporters } = normalizeOptions(options);
43
- const { globby } = await getGlobby();
44
- const jsonFilePaths = await globby([
45
- coverageFileGlob,
46
- `!${outputDirectory}/**/*`
47
- ]);
48
- if (jsonFilePaths.length === 0) {
49
- throw new Error(`No coverage reports found with the ${coverageFileGlob} glob`);
50
- }
51
- const mergedMap = istanbulLibCoverage.createCoverageMap();
52
- for (const jsonFilePath of jsonFilePaths){
53
- const coverageJson = await fsExtra.readJson(// ensure absolute path, otherwise ENOENT error happens
54
- path__namespace.resolve(jsonFilePath));
55
- mergedMap.merge(coverageJson);
56
- }
57
- const reportGenerationContext = istanbulLibReport.createContext({
58
- dir: outputDirectory,
59
- defaultSummarizer: 'nested',
60
- coverageMap: mergedMap
61
- });
62
- reporters.forEach((reporter)=>{
63
- const report = istanbulReports.create(// HACK: may be a custom reporter
64
- reporter);
65
- report.execute(reportGenerationContext);
66
- });
67
- console.log(`Generated ${reporters.join(', ')} reports to ${outputDirectory}`);
68
- };
69
-
70
- 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 as c };
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,15 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var createMergedCoverageReports = require('./create-merged-coverage-reports.cjs.js');
6
- require('path');
7
- require('istanbul-lib-coverage');
8
- require('istanbul-lib-report');
9
- require('istanbul-reports');
10
- require('fs-extra');
11
- require('tsimportlib');
12
-
13
-
14
-
15
- 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.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from "./src/index";
package/index.esm.js DELETED
@@ -1,7 +0,0 @@
1
- export { c as createMergedCoverageReports } from './create-merged-coverage-reports.esm.js';
2
- import 'path';
3
- import 'istanbul-lib-coverage';
4
- import 'istanbul-lib-report';
5
- import 'istanbul-reports';
6
- import 'fs-extra';
7
- import 'tsimportlib';
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 {};