# core/producers/check.producer.ts

> 42 lines of code and 8 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: application
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-producers-check-producer-ts
Source text: https://banes-lab.com/source/build-scripts/core/producers/check.producer.ts.txt

Listed in [core/producers](https://banes-lab.com/api/source/build-scripts/core/producers.md), before [core/producers/concept.producer.ts](https://banes-lab.com/source/build-scripts/core/producers/concept.producer.ts.md).

## Definitions

- `PATH_MARK` (lexical_declaration, line 11)
- `filesOf` (lexical_declaration, line 13)
- `treePathOf` (lexical_declaration, line 17)
- `prefix` (lexical_declaration, line 19)
- `files` (lexical_declaration, line 30, exported)
- `edges` (lexical_declaration, line 31, exported)
- `path` (lexical_declaration, line 33, exported)
- `to` (lexical_declaration, line 37, exported)

## Contained in

- [core/producers](https://banes-lab.com/anatomy/build-scripts/folder-build-scripts-core-producers.md)

## Source

```typescript
import type { AnatomyFile, AnatomyFolder } from "@banes-lab/web/types/anatomy.types.js";
import { DETECTED_BY_RELATION, ENFORCED_BY_RELATION } from "@banes-lab/web/constants/graph.constants";
import { ANATOMY_PREFIX } from "#configuration/constants/graph.constants";
import { ANATOMY_TREE_DECLARATIONS } from "@banes-lab/web/registries/anatomy.tree.registry";
import type { GraphEdge } from "@banes-lab/web/types/graph.types.js";
import { absolutePath } from "@ssot/paths";
import { defineProducer } from "#core/factories/producer.factory";
import { loadDeclaredChecks } from "@govlab/context";
import { qualifiedPath } from "@banes-lab/web/core/converters/folder.converter.ts";

const PATH_MARK = "/";

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

const treePathOf = function treePathOf(check: string): string | null {
    for (const declaration of ANATOMY_TREE_DECLARATIONS) {
        const prefix = declaration.folder + PATH_MARK;
        if (check.startsWith(prefix)) {
            return qualifiedPath(declaration.tab, check.slice(prefix.length));
        }
    }
    return null;
};

export default defineProducer({
    name: "check",
    produce: (context) => {
        const files = new Set(context.trees.flatMap((tree) => filesOf(tree.snapshot.tree)).map((file) => file.path));
        const edges = (loadDeclaredChecks(absolutePath("govlabHost.checks")) ?? []).flatMap(
            (declared): readonly GraphEdge[] => {
                const path = treePathOf(declared.check);
                if (path === null || !files.has(path)) {
                    return [];
                }
                const to = ANATOMY_PREFIX + context.ids.fileId(path);
                return [
                    ...declared.enforces.map((from) => ({ from, relation: ENFORCED_BY_RELATION, to })),
                    ...declared.detects.map((from) => ({ from, relation: DETECTED_BY_RELATION, to })),
                ];
            },
        );
        return { edges, nodes: [] };
    },
});
```
