# core/converters/figure.converter.ts

> 32 lines of code and 9 definitions.

Tree: Bane's Lab Build Scripts
Language: typescript
Layer: processing
Canonical: https://banes-lab.com/anatomy/build-scripts#file-build-scripts-core-converters-figure-converter-ts
Source text: https://banes-lab.com/source/build-scripts/core/converters/figure.converter.ts.txt

Listed in [core/converters](https://banes-lab.com/api/source/build-scripts/core/converters.md), after [core/converters/document.converter.ts](https://banes-lab.com/source/build-scripts/core/converters/document.converter.ts.md) and before [core/converters/filter.converter.ts](https://banes-lab.com/source/build-scripts/core/converters/filter.converter.ts.md).

## Definitions

- `chartView` (lexical_declaration, line 8)
- `chartsOf` (lexical_declaration, line 21, exported)
- `EXCLUDED_CHARTS` (lexical_declaration, line 6)
- `parts` (lexical_declaration, line 14)
- `context` (lexical_declaration, line 22, exported)
- `scoped` (lexical_declaration, line 26, exported)
- `member` (lexical_declaration, line 27, exported)
- `relabel` (lexical_declaration, line 28, exported)
- `rendered` (lexical_declaration, line 32, exported)

## Contained in

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

## Linked from

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

## Source

```typescript
import { DIAGRAM_KINDS, diagramContextFor } from "@govlab/docs";
import type { DiagramContext, RenderedDiagram } from "@govlab/docs";
import type { ChartView } from "@banes-lab/web/types/anatomy.types.js";
import { basename } from "node:path";

const EXCLUDED_CHARTS: ReadonlySet<string> = new Set(["dependency", "lifecycle"]);

const chartView = function chartView(
    id: string,
    title: string,
    rendered: RenderedDiagram,
    relabel: (text: string) => string,
): ChartView {
    const parts =
        rendered.parts && rendered.parts.length > 0
            ? rendered.parts.map((part) => ({ caption: relabel(part.caption), text: relabel(part.mermaid) }))
            : [{ caption: title, text: relabel(rendered.mermaid) }];
    return { id, legend: rendered.legend, parts, title };
};

export const chartsOf = async function chartsOf(moduleDir: string, label: string): Promise<ChartView[]> {
    const context = await diagramContextFor(moduleDir, label, label);
    if (context === null) {
        return [];
    }
    const scoped: DiagramContext = { ...context, moduleDeps: [] };
    const member = basename(moduleDir);
    const relabel = function relabel(text: string): string {
        return text.split(member).join(label);
    };
    return DIAGRAM_KINDS.filter((kind) => !EXCLUDED_CHARTS.has(kind.id) && kind.appliesTo(scoped)).flatMap((kind) => {
        const rendered = kind.render(scoped);
        return rendered === null ? [] : [chartView(kind.id, kind.title, rendered, relabel)];
    });
};
```
