core/persistence/asset.persistence.ts

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

import { join, resolve } from "node:path";
import { mkdirSync, readdirSync, rmSync, statSync } from "node:fs";
import { unreferencedFiles } from "#core/analyzers/asset.analyzer";
import { writeVerbatim } from "@govlab/canonical-write";

export const replaceFolderFiles = function replaceFolderFiles(
    folder: string,
    files: ReadonlyMap<string, string>,
): void {
    mkdirSync(folder, { recursive: true });
    for (const name of readdirSync(folder)) {
        if (!files.has(name)) {
            rmSync(join(folder, name), { force: true, recursive: true });
        }
    }
    for (const [name, content] of files) {
        writeVerbatim(join(folder, name), content);
    }
};

export const pruneOutput = function pruneOutput(outDir: string): { count: number; bytes: number } {
    const unreferenced = unreferencedFiles(outDir);
    let bytes = 0;
    for (const file of unreferenced) {
        const target = resolve(outDir, file);
        bytes += statSync(target).size;
        rmSync(target, { force: true });
    }
    return { bytes, count: unreferenced.length };
};