core/loaders/coordination.loader.ts

core/loaders/coordination.loader.ts is a file in Bane's Lab Content. 48 lines of code and 10 definitions.

import {
    BORN_EMPTY_FOLDERS,
    KEEP_FILE,
    SHIP_LIST_KEY,
    SHIP_MANIFEST,
    TEXT_EXTENSIONS,
} from "#configuration/constants/coordination.constants";
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
import { join, relative, sep } from "node:path";

const isText = function isText(name: string): boolean {
    return TEXT_EXTENSIONS.some((extension) => name.endsWith(extension));
};

const listedFiles = function listedFiles(parsed: unknown): string[] {
    if (typeof parsed !== "object" || parsed === null || !(SHIP_LIST_KEY in parsed)) {
        return [];
    }
    const listed: unknown = parsed[SHIP_LIST_KEY];
    return Array.isArray(listed) ? listed.filter((entry): entry is string => typeof entry === "string") : [];
};

export const shippedEntries = function shippedEntries(root: string): string[] {
    const parsed: unknown = JSON.parse(readFileSync(join(root, SHIP_MANIFEST), "utf8"));
    return [SHIP_MANIFEST, ...listedFiles(parsed)].filter((entry) => existsSync(join(root, entry)));
};

const filesUnder = function filesUnder(path: string): string[] {
    if (!statSync(path).isDirectory()) {
        return isText(path) ? [path] : [];
    }
    return readdirSync(path).flatMap((name) => filesUnder(join(path, name)));
};

export const packageFiles = function packageFiles(root: string): string[] {
    return shippedEntries(root)
        .flatMap((entry) => filesUnder(join(root, entry)))
        .sort((a, b) => a.localeCompare(b));
};

export const populatedFolders = function populatedFolders(root: string): string[] {
    return BORN_EMPTY_FOLDERS.flatMap((folder) => {
        const path = join(root, folder);
        if (!existsSync(path)) {
            return [];
        }
        return readdirSync(path)
            .filter((name) => name !== KEEP_FILE)
            .map((name) => `${folder}/${name}`);
    });
};

export const packagePath = function packagePath(root: string, file: string): string {
    return relative(root, file).split(sep).join("/");
};