core/coordinators/figure.coordinator.ts

core/coordinators/figure.coordinator.ts is a file in GovLab Docs. 42 lines of code and 7 definitions.

import { diagramContextFor, loadPackage, packageName, scriptsOf, shapedContext } from "#core/factories/diagram.factory";
import { moduleDepsOf, workspaceRows } from "#core/converters/dependency.converter";
import type { Charts } from "#types/figure.types";
import type { ManifestModule } from "#types/manifest.types";
import { relativePath } from "@ssot/paths";
import { renderCharts } from "#core/formatters/figure.formatter";
import { resolve } from "node:path";
import { shapeOf } from "#core/classifiers/package.classifier";

const chartsPath = function chartsPath(moduleDir: string): string {
    return resolve(moduleDir, relativePath("moduleInfo.charts"));
};

const chartsAt = function chartsAt(moduleDir: string, content: string | null): Charts | null {
    return content === null ? null : { content, path: chartsPath(moduleDir) };
};

const aggregateCharts = function aggregateCharts(
    moduleDir: string,
    relPath: string,
    members: readonly ManifestModule[],
): Charts | null {
    const pkg = loadPackage(moduleDir);
    const content = renderCharts({
        codeGraph: null,
        keepIsolated: true,
        moduleDeps: moduleDepsOf(workspaceRows(members)),
        moduleName: packageName(pkg, relPath),
        typeGraph: { edges: [], nodes: [] },
        ...shapedContext(shapeOf(moduleDir, pkg)),
        ...scriptsOf(pkg),
    });
    return chartsAt(moduleDir, content);
};

export const renderChartsFor = async function renderChartsFor(
    moduleDir: string,
    relPath: string,
    members: readonly ManifestModule[] = [],
): Promise<Charts | null> {
    if (members.length > 0) {
        return aggregateCharts(moduleDir, relPath, members);
    }
    const context = await diagramContextFor(moduleDir, relPath);
    return context === null ? null : chartsAt(moduleDir, renderCharts(context));
};