@plugjs/cov8 0.3.5 → 0.4.1
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/dist/cli.d.mts +2 -0
- package/dist/cli.mjs +169 -0
- package/dist/cli.mjs.map +6 -0
- package/dist/coverage.cjs +4 -2
- package/dist/coverage.cjs.map +1 -1
- package/dist/coverage.mjs +4 -2
- package/dist/coverage.mjs.map +1 -1
- package/package.json +5 -2
- package/src/cli.mts +199 -0
- package/src/coverage.ts +6 -2
package/dist/cli.d.mts
ADDED
package/dist/cli.mjs
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// cli.mts
|
|
4
|
+
import { async, find, paths, pipe, logging, mkdtemp, rmrf, utils } from "@plugjs/plug";
|
|
5
|
+
import { main, yargsParser } from "@plugjs/tsrun";
|
|
6
|
+
import { Coverage } from "./coverage.mjs";
|
|
7
|
+
var { $blu, $und, $gry, $wht, $p } = logging;
|
|
8
|
+
var $gnd = (s) => $gry($und(s));
|
|
9
|
+
var $bnd = (s) => $blu($und(s));
|
|
10
|
+
var $wnd = (s) => $wht($und(s));
|
|
11
|
+
var version = true ? "0.4.1" : "0.0.0-dev";
|
|
12
|
+
function help() {
|
|
13
|
+
console.log(`${$blu($und("Usage:"))}
|
|
14
|
+
|
|
15
|
+
${$wht("cov8")} ${$gry("[")}--options${$gry("] [--] [...")}command${$gry("...]")}
|
|
16
|
+
|
|
17
|
+
${$bnd("Options:")}
|
|
18
|
+
|
|
19
|
+
${$wht("-c --coverage-dir")} ${$gnd("dir")} The directory containing all coverage data files
|
|
20
|
+
${$wht("-r --report-dir")} ${$gnd("dir")} Write an HTML report to this directory
|
|
21
|
+
${$wht("-d --source-dir")} ${$gnd("dir")} The directory where source files are located
|
|
22
|
+
${$wht("-s --sources")} ${$gnd("glob")} A glob for the sources to be reported upon
|
|
23
|
+
${$wht("-m --minimum")} ${$gnd("num")} The desired minimum coverage level to achieve
|
|
24
|
+
${$wht("-o --optimal")} ${$gnd("num")} The desired optimal coverage level to achieve
|
|
25
|
+
${$wht("-h --help ")} Help! You're reading it now!
|
|
26
|
+
${$wht(" --version")} Version! This one: ${version}!
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
${$bnd("Usave:")}
|
|
30
|
+
|
|
31
|
+
This utility can process and create reports for ${$und("existing")} Node.js coverage
|
|
32
|
+
data, or execute a command and verify the execution's coverage.
|
|
33
|
+
|
|
34
|
+
When a command is not specified, the ${$wht("--coverage-dir")} option must be
|
|
35
|
+
specified, and point to a directory containing one or more Node.js JSON
|
|
36
|
+
coverage files. Those can be generated running node and specifying the
|
|
37
|
+
${$wnd("NODE_V8_COVERAGE")} environment variable.
|
|
38
|
+
|
|
39
|
+
When a command is specified, the command will be executed, and coverage
|
|
40
|
+
will be collected automatically in a temporary directory (or in the
|
|
41
|
+
directory specified by ${$wht("--coverage-dir")}).
|
|
42
|
+
|
|
43
|
+
The sources to report upon can be specified with the ${$wht("--source-dir")} option,
|
|
44
|
+
indicating the directory where sources can be found (defailts to the current
|
|
45
|
+
directory) and the ${$wht("--sources")} option (can be specified multiple times)
|
|
46
|
+
indicating the globs matching the source files to report upon.
|
|
47
|
+
|
|
48
|
+
The default is to report upon all JavaScript and TypeScript files in the
|
|
49
|
+
${$wnd("./src")} directory.
|
|
50
|
+
|
|
51
|
+
${$bnd("Environment Variables:")}
|
|
52
|
+
|
|
53
|
+
${$wht("LOG_LEVEL$ ")} The default ${$wnd("notice")}, or ${$gnd("debug")}, ${$gnd("info")}, ${$gnd("warn")} or ${$gnd("error")}.
|
|
54
|
+
|
|
55
|
+
${$bnd("TypeScript module format:")}
|
|
56
|
+
|
|
57
|
+
Normally our TypeScript loader will transpile ${$wnd(".ts")} files to the type
|
|
58
|
+
specified in ${$wnd("package.json")}, either ${$wnd("commonjs")} (the default) or ${$wnd("module")}.
|
|
59
|
+
|
|
60
|
+
To force a specific module format use one of the following flags:
|
|
61
|
+
|
|
62
|
+
${$wht("--force-esm")} Force transpilation of ${$wnd(".ts")} files to EcmaScript modules
|
|
63
|
+
${$wht("--force-cjs")} Force transpilation of ${$wnd(".ts")} files to CommonJS modules
|
|
64
|
+
`);
|
|
65
|
+
process.exit(0);
|
|
66
|
+
}
|
|
67
|
+
main(import.meta.url, async (args) => {
|
|
68
|
+
logging.logOptions.spinner = false;
|
|
69
|
+
const filename = paths.requireFilename(import.meta.url);
|
|
70
|
+
const context = new pipe.Context(filename, "");
|
|
71
|
+
const command = [];
|
|
72
|
+
const globs = [];
|
|
73
|
+
let minimumCoverage = void 0;
|
|
74
|
+
let optimalCoverage = void 0;
|
|
75
|
+
let coverageDir;
|
|
76
|
+
let reportDir;
|
|
77
|
+
let sourceDir;
|
|
78
|
+
const parsed = yargsParser(args, {
|
|
79
|
+
configuration: {
|
|
80
|
+
"camel-case-expansion": false,
|
|
81
|
+
"halt-at-non-option": true,
|
|
82
|
+
"strip-aliased": true,
|
|
83
|
+
"strip-dashed": true
|
|
84
|
+
},
|
|
85
|
+
alias: {
|
|
86
|
+
"coverage-dir": ["c"],
|
|
87
|
+
"report-dir": ["r"],
|
|
88
|
+
"source-dir": ["d"],
|
|
89
|
+
"minimum": ["m"],
|
|
90
|
+
"optimal": ["o"],
|
|
91
|
+
"sources": ["s"],
|
|
92
|
+
"help": ["h"]
|
|
93
|
+
},
|
|
94
|
+
string: ["coverage-dir", "report-dir", "source-dir", "sources"],
|
|
95
|
+
number: ["minimum", "optimal"],
|
|
96
|
+
boolean: ["help", "version"]
|
|
97
|
+
});
|
|
98
|
+
for (const [key, value] of Object.entries(parsed)) {
|
|
99
|
+
switch (key) {
|
|
100
|
+
case "_":
|
|
101
|
+
command.push(...value);
|
|
102
|
+
break;
|
|
103
|
+
case "coverage-dir":
|
|
104
|
+
coverageDir = value;
|
|
105
|
+
break;
|
|
106
|
+
case "report-dir":
|
|
107
|
+
reportDir = value;
|
|
108
|
+
break;
|
|
109
|
+
case "source-dir":
|
|
110
|
+
sourceDir = value;
|
|
111
|
+
break;
|
|
112
|
+
case "sources":
|
|
113
|
+
globs.push(value);
|
|
114
|
+
break;
|
|
115
|
+
case "minimum":
|
|
116
|
+
minimumCoverage = value;
|
|
117
|
+
break;
|
|
118
|
+
case "optimal":
|
|
119
|
+
optimalCoverage = value;
|
|
120
|
+
break;
|
|
121
|
+
case "help":
|
|
122
|
+
return help();
|
|
123
|
+
case "version":
|
|
124
|
+
return context.log.notice(`Cov8 ${$gry("ver.")} ${$wnd(version)}`);
|
|
125
|
+
default:
|
|
126
|
+
context.log.error(`Unsupported option ${$wnd(key)} (try ${$wnd("--help")})`);
|
|
127
|
+
process.exit(1);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if (command.length === 0 && !coverageDir) {
|
|
131
|
+
context.log.error(`Either ${$wnd("--coverage-dir")} or a command must me specified`);
|
|
132
|
+
process.exit(1);
|
|
133
|
+
}
|
|
134
|
+
const glob = globs.shift() || "**/*.([cm])?[jt]s";
|
|
135
|
+
const ignore = "**/*.d.([cm])?ts";
|
|
136
|
+
try {
|
|
137
|
+
process.exitCode = 0;
|
|
138
|
+
await async.runAsync(context, "", async () => {
|
|
139
|
+
let tempDir = void 0;
|
|
140
|
+
if (!coverageDir) {
|
|
141
|
+
const directory = mkdtemp();
|
|
142
|
+
context.log.notice(`Writing coverage data in ${$p(directory)}`);
|
|
143
|
+
coverageDir = tempDir = directory;
|
|
144
|
+
}
|
|
145
|
+
try {
|
|
146
|
+
const [cmd, ...args2] = command;
|
|
147
|
+
if (cmd) {
|
|
148
|
+
const env = {
|
|
149
|
+
...process.env,
|
|
150
|
+
...logging.logOptions.forkEnv()
|
|
151
|
+
};
|
|
152
|
+
await utils.execChild(cmd, args2, { coverageDir, env }, context);
|
|
153
|
+
}
|
|
154
|
+
await find(glob, ...globs, { directory: sourceDir || "src", ignore }).plug(new Coverage(coverageDir, {
|
|
155
|
+
reportDir,
|
|
156
|
+
minimumCoverage,
|
|
157
|
+
optimalCoverage
|
|
158
|
+
}));
|
|
159
|
+
} finally {
|
|
160
|
+
if (tempDir)
|
|
161
|
+
await rmrf(tempDir);
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
} catch (error) {
|
|
165
|
+
context.log.error(error);
|
|
166
|
+
process.exitCode = 1;
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=cli.mjs.map
|
package/dist/cli.mjs.map
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/cli.mts"],
|
|
4
|
+
"mappings": "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",
|
|
5
|
+
"names": ["args"]
|
|
6
|
+
}
|
package/dist/coverage.cjs
CHANGED
|
@@ -103,11 +103,13 @@ var Coverage = class {
|
|
|
103
103
|
_report.add({ level: import_logging.WARN, message });
|
|
104
104
|
}
|
|
105
105
|
if (fileErrors) {
|
|
106
|
-
const
|
|
106
|
+
const f = fileErrors === 1 ? "file does" : "files do";
|
|
107
|
+
const message = `${(0, import_logging.$red)(fileErrors)} ${f} not meet minimum file coverage ${(0, import_logging.$gry)(`(${minimumFileCoverage}%)`)}`;
|
|
107
108
|
_report.add({ level: import_logging.ERROR, message });
|
|
108
109
|
}
|
|
109
110
|
if (fileWarnings) {
|
|
110
|
-
const
|
|
111
|
+
const f = fileErrors === 1 ? "file does" : "files do";
|
|
112
|
+
const message = `${(0, import_logging.$ylw)(fileWarnings)} ${f} not meet optimal file coverage ${(0, import_logging.$gry)(`(${optimalFileCoverage}%)`)}`;
|
|
111
113
|
_report.add({ level: import_logging.WARN, message });
|
|
112
114
|
}
|
|
113
115
|
if (this._options.reportDir == null)
|
package/dist/coverage.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/coverage.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/coverage.mjs
CHANGED
|
@@ -79,11 +79,13 @@ var Coverage = class {
|
|
|
79
79
|
_report.add({ level: WARN, message });
|
|
80
80
|
}
|
|
81
81
|
if (fileErrors) {
|
|
82
|
-
const
|
|
82
|
+
const f = fileErrors === 1 ? "file does" : "files do";
|
|
83
|
+
const message = `${$red(fileErrors)} ${f} not meet minimum file coverage ${$gry(`(${minimumFileCoverage}%)`)}`;
|
|
83
84
|
_report.add({ level: ERROR, message });
|
|
84
85
|
}
|
|
85
86
|
if (fileWarnings) {
|
|
86
|
-
const
|
|
87
|
+
const f = fileErrors === 1 ? "file does" : "files do";
|
|
88
|
+
const message = `${$ylw(fileWarnings)} ${f} not meet optimal file coverage ${$gry(`(${optimalFileCoverage}%)`)}`;
|
|
87
89
|
_report.add({ level: WARN, message });
|
|
88
90
|
}
|
|
89
91
|
if (this._options.reportDir == null)
|
package/dist/coverage.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/coverage.ts"],
|
|
4
|
-
"mappings": "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
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plugjs/cov8",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"cov8": "./dist/cli.mjs"
|
|
10
|
+
},
|
|
8
11
|
"exports": {
|
|
9
12
|
".": {
|
|
10
13
|
"require": {
|
|
@@ -36,7 +39,7 @@
|
|
|
36
39
|
"source-map": "^0.7.4"
|
|
37
40
|
},
|
|
38
41
|
"peerDependencies": {
|
|
39
|
-
"@plugjs/plug": "0.
|
|
42
|
+
"@plugjs/plug": "0.4.1"
|
|
40
43
|
},
|
|
41
44
|
"files": [
|
|
42
45
|
"*.md",
|
package/src/cli.mts
ADDED
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
import { async, find, paths, pipe, logging, mkdtemp, rmrf, utils } from '@plugjs/plug'
|
|
4
|
+
import { main, yargsParser } from '@plugjs/tsrun'
|
|
5
|
+
|
|
6
|
+
import { Coverage } from './coverage'
|
|
7
|
+
|
|
8
|
+
const { $blu, $und, $gry, $wht, $p } = logging
|
|
9
|
+
const $gnd = (s: string): string => $gry($und(s))
|
|
10
|
+
const $bnd = (s: string): string => $blu($und(s))
|
|
11
|
+
const $wnd = (s: string): string => $wht($und(s))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
/** Version injected by esbuild, defaulted in case of dynamic transpilation */
|
|
15
|
+
const version = typeof __version === 'string' ? __version : '0.0.0-dev'
|
|
16
|
+
declare const __version: string | undefined
|
|
17
|
+
|
|
18
|
+
/* ========================================================================== *
|
|
19
|
+
* HELP SCREEN *
|
|
20
|
+
* ========================================================================== */
|
|
21
|
+
|
|
22
|
+
/** Show help screen */
|
|
23
|
+
function help(): void {
|
|
24
|
+
// eslint-disable-next-line no-console
|
|
25
|
+
console.log(`${$blu($und('Usage:'))}
|
|
26
|
+
|
|
27
|
+
${$wht('cov8')} ${$gry('[')}--options${$gry('] [--] [...')}command${$gry('...]')}
|
|
28
|
+
|
|
29
|
+
${$bnd('Options:')}
|
|
30
|
+
|
|
31
|
+
${$wht('-c --coverage-dir')} ${$gnd('dir')} The directory containing all coverage data files
|
|
32
|
+
${$wht('-r --report-dir')} ${$gnd('dir')} Write an HTML report to this directory
|
|
33
|
+
${$wht('-d --source-dir')} ${$gnd('dir')} The directory where source files are located
|
|
34
|
+
${$wht('-s --sources')} ${$gnd('glob')} A glob for the sources to be reported upon
|
|
35
|
+
${$wht('-m --minimum')} ${$gnd('num')} The desired minimum coverage level to achieve
|
|
36
|
+
${$wht('-o --optimal')} ${$gnd('num')} The desired optimal coverage level to achieve
|
|
37
|
+
${$wht('-h --help ')} Help! You're reading it now!
|
|
38
|
+
${$wht(' --version')} Version! This one: ${version}!
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
${$bnd('Usave:')}
|
|
42
|
+
|
|
43
|
+
This utility can process and create reports for ${$und('existing')} Node.js coverage
|
|
44
|
+
data, or execute a command and verify the execution's coverage.
|
|
45
|
+
|
|
46
|
+
When a command is not specified, the ${$wht('--coverage-dir')} option must be
|
|
47
|
+
specified, and point to a directory containing one or more Node.js JSON
|
|
48
|
+
coverage files. Those can be generated running node and specifying the
|
|
49
|
+
${$wnd('NODE_V8_COVERAGE')} environment variable.
|
|
50
|
+
|
|
51
|
+
When a command is specified, the command will be executed, and coverage
|
|
52
|
+
will be collected automatically in a temporary directory (or in the
|
|
53
|
+
directory specified by ${$wht('--coverage-dir')}).
|
|
54
|
+
|
|
55
|
+
The sources to report upon can be specified with the ${$wht('--source-dir')} option,
|
|
56
|
+
indicating the directory where sources can be found (defailts to the current
|
|
57
|
+
directory) and the ${$wht('--sources')} option (can be specified multiple times)
|
|
58
|
+
indicating the globs matching the source files to report upon.
|
|
59
|
+
|
|
60
|
+
The default is to report upon all JavaScript and TypeScript files in the
|
|
61
|
+
${$wnd('./src')} directory.
|
|
62
|
+
|
|
63
|
+
${$bnd('Environment Variables:')}
|
|
64
|
+
|
|
65
|
+
${$wht('LOG_LEVEL$ ')} The default ${$wnd('notice')}, or ${$gnd('debug')}, ${$gnd('info')}, ${$gnd('warn')} or ${$gnd('error')}.
|
|
66
|
+
|
|
67
|
+
${$bnd('TypeScript module format:')}
|
|
68
|
+
|
|
69
|
+
Normally our TypeScript loader will transpile ${$wnd('.ts')} files to the type
|
|
70
|
+
specified in ${$wnd('package.json')}, either ${$wnd('commonjs')} (the default) or ${$wnd('module')}.
|
|
71
|
+
|
|
72
|
+
To force a specific module format use one of the following flags:
|
|
73
|
+
|
|
74
|
+
${$wht('--force-esm')} Force transpilation of ${$wnd('.ts')} files to EcmaScript modules
|
|
75
|
+
${$wht('--force-cjs')} Force transpilation of ${$wnd('.ts')} files to CommonJS modules
|
|
76
|
+
`)
|
|
77
|
+
process.exit(0)
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* ========================================================================== *
|
|
81
|
+
* MAIN TEST RUNNER *
|
|
82
|
+
* ========================================================================== */
|
|
83
|
+
|
|
84
|
+
/** Parse command line and run tests */
|
|
85
|
+
main(import.meta.url, async (args): Promise<void> => {
|
|
86
|
+
logging.logOptions.spinner = false
|
|
87
|
+
|
|
88
|
+
const filename = paths.requireFilename(import.meta.url) // self, for context
|
|
89
|
+
const context = new pipe.Context(filename, '') // context for pipes
|
|
90
|
+
const command: string[] = [] // empty command line
|
|
91
|
+
const globs: string[] = [] // empty globs list
|
|
92
|
+
let minimumCoverage: number | undefined = undefined
|
|
93
|
+
let optimalCoverage: number | undefined = undefined
|
|
94
|
+
let coverageDir: string | undefined
|
|
95
|
+
let reportDir: string | undefined
|
|
96
|
+
let sourceDir: string | undefined
|
|
97
|
+
|
|
98
|
+
const parsed = yargsParser(args, {
|
|
99
|
+
configuration: {
|
|
100
|
+
'camel-case-expansion': false,
|
|
101
|
+
'halt-at-non-option': true,
|
|
102
|
+
'strip-aliased': true,
|
|
103
|
+
'strip-dashed': true,
|
|
104
|
+
},
|
|
105
|
+
|
|
106
|
+
alias: {
|
|
107
|
+
'coverage-dir': [ 'c' ],
|
|
108
|
+
'report-dir': [ 'r' ],
|
|
109
|
+
'source-dir': [ 'd' ],
|
|
110
|
+
'minimum': [ 'm' ],
|
|
111
|
+
'optimal': [ 'o' ],
|
|
112
|
+
'sources': [ 's' ],
|
|
113
|
+
'help': [ 'h' ],
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
string: [ 'coverage-dir', 'report-dir', 'source-dir', 'sources' ],
|
|
117
|
+
number: [ 'minimum', 'optimal' ],
|
|
118
|
+
boolean: [ 'help', 'version' ],
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
for (const [ key, value ] of Object.entries(parsed)) {
|
|
122
|
+
switch (key) {
|
|
123
|
+
case '_': // extra command line as args
|
|
124
|
+
command.push(...value)
|
|
125
|
+
break
|
|
126
|
+
case 'coverage-dir':
|
|
127
|
+
coverageDir = value
|
|
128
|
+
break
|
|
129
|
+
case 'report-dir':
|
|
130
|
+
reportDir = value
|
|
131
|
+
break
|
|
132
|
+
case 'source-dir':
|
|
133
|
+
sourceDir = value
|
|
134
|
+
break
|
|
135
|
+
case 'sources':
|
|
136
|
+
globs.push(value)
|
|
137
|
+
break
|
|
138
|
+
case 'minimum':
|
|
139
|
+
minimumCoverage = value
|
|
140
|
+
break
|
|
141
|
+
case 'optimal':
|
|
142
|
+
optimalCoverage = value
|
|
143
|
+
break
|
|
144
|
+
case 'help':
|
|
145
|
+
return help()
|
|
146
|
+
case 'version':
|
|
147
|
+
return context.log.notice(`Cov8 ${$gry('ver.')} ${$wnd(version)}`)
|
|
148
|
+
default:
|
|
149
|
+
context.log.error(`Unsupported option ${$wnd(key)} (try ${$wnd('--help')})`)
|
|
150
|
+
process.exit(1)
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
// Extra check for command or coverage dir requirement
|
|
155
|
+
if ((command.length === 0) && (! coverageDir)) {
|
|
156
|
+
context.log.error(`Either ${$wnd('--coverage-dir')} or a command must me specified`)
|
|
157
|
+
process.exit(1)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Default glob (all JS/TS in the 'src' directory)
|
|
161
|
+
const glob = globs.shift() || '**/*.([cm])?[jt]s'
|
|
162
|
+
const ignore = '**/*.d.([cm])?ts' // ignore .d.ts!
|
|
163
|
+
|
|
164
|
+
// Simply create the Test plug and pass everything to it
|
|
165
|
+
try {
|
|
166
|
+
process.exitCode = 0
|
|
167
|
+
await async.runAsync(context, '', async () => {
|
|
168
|
+
let tempDir: string | undefined = undefined
|
|
169
|
+
if (! coverageDir) {
|
|
170
|
+
const directory = mkdtemp()
|
|
171
|
+
context.log.notice(`Writing coverage data in ${$p(directory)}`)
|
|
172
|
+
coverageDir = tempDir = directory
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
try {
|
|
176
|
+
const [ cmd, ...args ] = command
|
|
177
|
+
if (cmd) {
|
|
178
|
+
const env = {
|
|
179
|
+
...process.env,
|
|
180
|
+
...logging.logOptions.forkEnv(),
|
|
181
|
+
}
|
|
182
|
+
await utils.execChild(cmd, args, { coverageDir, env }, context)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
await find(glob, ...globs, { directory: sourceDir || 'src', ignore })
|
|
186
|
+
.plug(new Coverage(coverageDir, {
|
|
187
|
+
reportDir: reportDir as string,
|
|
188
|
+
minimumCoverage,
|
|
189
|
+
optimalCoverage,
|
|
190
|
+
}))
|
|
191
|
+
} finally {
|
|
192
|
+
if (tempDir) await rmrf(tempDir)
|
|
193
|
+
}
|
|
194
|
+
})
|
|
195
|
+
} catch (error) {
|
|
196
|
+
context.log.error(error)
|
|
197
|
+
process.exitCode = 1
|
|
198
|
+
}
|
|
199
|
+
})
|
package/src/coverage.ts
CHANGED
|
@@ -103,11 +103,15 @@ export class Coverage implements Plug<Files | undefined> {
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
if (fileErrors) {
|
|
106
|
-
|
|
106
|
+
/* coverage ignore next */
|
|
107
|
+
const f = fileErrors === 1 ? 'file does' : 'files do'
|
|
108
|
+
const message = `${$red(fileErrors)} ${f} not meet minimum file coverage ${$gry(`(${minimumFileCoverage}%)`)}`
|
|
107
109
|
_report.add({ level: ERROR, message })
|
|
108
110
|
}
|
|
109
111
|
if (fileWarnings) {
|
|
110
|
-
|
|
112
|
+
/* coverage ignore next */
|
|
113
|
+
const f = fileErrors === 1 ? 'file does' : 'files do'
|
|
114
|
+
const message = `${$ylw(fileWarnings)} ${f} not meet optimal file coverage ${$gry(`(${optimalFileCoverage}%)`)}`
|
|
111
115
|
_report.add({ level: WARN, message })
|
|
112
116
|
}
|
|
113
117
|
|