core/loaders/report.loader.ts
core/loaders/report.loader.ts is a file in GovLab Stats. 53 lines of code and 7 definitions.
import type { VerifyReportStats, VerifyStageStat, VerifyStepStat } from "#types/report.types";
import { arrayField, field, numberField, stringField } from "#core/selectors/field.selector";
import { VERIFY_REPORT_FILE } from "@govlab/pipeline/configuration/constants/report.constants.ts";
import { isRecord } from "#core/predicates/record.predicate";
import path from "node:path";
import { readJson } from "#core/loaders/data.loader";
const emptyVerify = function emptyVerify(): VerifyReportStats {
return {
available: false,
generatedAt: "",
label: "",
ok: false,
stages: [],
totals: { failed: 0, passed: 0, steps: 0, violations: 0 },
};
};
const toStep = function toStep(raw: unknown): VerifyStepStat {
const violations = field(raw, "violations");
return {
label: stringField(raw, "label"),
ok: field(raw, "ok") === true,
violations: typeof violations === "number" ? violations : null,
};
};
const toStage = function toStage(raw: unknown): VerifyStageStat {
return {
failed: numberField(raw, "failed", 0),
passed: numberField(raw, "passed", 0),
stage: stringField(raw, "stage"),
steps: arrayField(raw, "steps").map(toStep),
violations: numberField(raw, "violations", 0),
};
};
export const collectVerifyReport = function collectVerifyReport(root: string): VerifyReportStats {
const raw = readJson(path.join(root, VERIFY_REPORT_FILE));
if (!isRecord(raw)) {
return emptyVerify();
}
const totals = field(raw, "totals");
return {
available: true,
generatedAt: stringField(raw, "generatedAt"),
label: stringField(raw, "label"),
ok: field(raw, "ok") === true,
stages: arrayField(raw, "stages").map(toStage),
totals: {
failed: numberField(totals, "failed", 0),
passed: numberField(totals, "passed", 0),
steps: numberField(totals, "steps", 0),
violations: numberField(totals, "violations", 0),
},
};
};