core/producers/governance.producer.ts

core/producers/governance.producer.ts is a file in Bane's Lab Build Scripts. 31 lines of code and 6 definitions.

import type { AnatomyFile, AnatomyFolder } from "@banes-lab/web/types/anatomy.types.js";
import { ANATOMY_PREFIX } from "#configuration/constants/graph.constants";
import { ARCH_FACE } from "@govlab/constants";
import { GOVERNED_BY_RELATION } from "@banes-lab/web/constants/graph.constants";
import type { GraphEdge } from "@banes-lab/web/types/graph.types.js";
import { MODULE_MANIFEST_NAME } from "#configuration/constants/loader.constants";
import { absolutePath } from "@ssot/paths";
import { defineProducer } from "#core/factories/producer.factory";
import { principlesOf } from "#core/loaders/manifest.loader";

const FACE_MARK = ":";

const filesOf = function filesOf(folder: AnatomyFolder): readonly AnatomyFile[] {
    return [...folder.files, ...folder.folders.flatMap(filesOf)];
};

export default defineProducer({
    name: "governance",
    produce: (context) => {
        const records = new Set(context.ontology.nodes.map((node) => node.ref));
        const folder = absolutePath("app.sources");
        const edges = context.trees
            .flatMap((tree) => filesOf(tree.snapshot.tree))
            .filter((file) => file.name === MODULE_MANIFEST_NAME && file.source !== null)
            .flatMap((file): readonly GraphEdge[] => {
                const from = ANATOMY_PREFIX + context.ids.fileId(file.path);
                return principlesOf(folder, file.source ?? "")
                    .map((id) => ARCH_FACE + FACE_MARK + id)
                    .filter((to) => records.has(to))
                    .map((to) => ({ from, relation: GOVERNED_BY_RELATION, to }));
            });
        return { edges, nodes: [] };
    },
});