This repository has been archived by the owner on Dec 21, 2022. It is now read-only.
/
index.ts
78 lines (65 loc) · 2.25 KB
/
index.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
import { getActualCoverage } from "./utils";
export interface VerifyCoverageSettings {
file: string;
minimum: number;
readFile: ReadFile;
}
export type ReadFile = (filePath: string | number | Buffer) => Promise<string | Buffer>;
export type VerificationResult = FailedVerificationResult | SuccessfulVerificationResult | UnknownVerificationResult;
export enum VerificationStatus {
Failed,
Successful,
Unknown,
}
export interface FailedVerificationResult {
actual: number;
file: string;
fileContents: string;
minimum: number;
status: VerificationStatus.Failed;
}
export interface SuccessfulVerificationResult {
file: string;
fileContents: string;
minimum: number;
status: VerificationStatus.Successful;
}
export interface UnknownVerificationResult {
error: string;
file: string;
status: VerificationStatus.Unknown;
}
export const defaultFilePath = "./coverage/lcov-report/index.html";
export const defaultMinimum = 100;
const fillInSettings = async (settings: Partial<VerifyCoverageSettings>): Promise<VerifyCoverageSettings> => ({
file: settings.file === undefined ? defaultFilePath : settings.file,
minimum: settings.minimum === undefined ? defaultMinimum : settings.minimum,
readFile: settings.readFile === undefined ? (await import("mz/fs")).readFile : settings.readFile,
});
export const verifyCoverage =
async (settings: Partial<VerifyCoverageSettings> = {}): Promise<VerificationResult> => {
const { file, minimum, readFile } = await fillInSettings(settings);
const fileContents = (await readFile(file)).toString();
const actual = getActualCoverage(fileContents);
if (actual === undefined) {
return {
error: "Could not parse coverage percentage from file.",
file,
status: VerificationStatus.Unknown,
};
}
return actual < minimum
? {
actual,
file,
fileContents,
minimum,
status: VerificationStatus.Failed,
}
: {
file,
fileContents,
minimum,
status: VerificationStatus.Successful,
};
};