core/persistence/report.persistence.ts

core/persistence/report.persistence.ts is a file in Bane's Lab Content. 28 lines of code and 5 definitions.

import { existsSync, mkdirSync, readFileSync } from "node:fs";
import { writeCanonicalJson, writeCanonicalText, writeGeneratedMarkdown } from "@govlab/canonical-write";
import { UTF8 } from "#configuration/constants/source.constants";
import { dirname } from "node:path";

const ensureFolder = function ensureFolder(target: string): void {
    mkdirSync(dirname(target), { recursive: true });
};

export const persistJson = async function persistJson(target: string, data: unknown): Promise<void> {
    ensureFolder(target);
    await writeCanonicalJson(target, data);
};

export const persistText = async function persistText(target: string, text: string): Promise<void> {
    ensureFolder(target);
    await writeCanonicalText(target, text);
};

export const persistGeneratedMarkdown = async function persistGeneratedMarkdown(
    target: string,
    text: string,
): Promise<void> {
    ensureFolder(target);
    await writeGeneratedMarkdown(target, text);
};

export const readJsonOrNull = function readJsonOrNull(target: string): unknown {
    if (!existsSync(target)) {
        return null;
    }
    return JSON.parse(readFileSync(target, UTF8));
};