core/converters/system.converter.ts
core/converters/system.converter.ts is a file in GovLab Docs. 47 lines of code and 7 definitions.
import type { DocumentDecl, DocumentSection } from "#types/document.types";
import { SYSTEM_DOC, SYSTEM_HEADINGS, systemTitle } from "#configuration/strings/system.strings";
import type { SystemModel, SystemSection } from "#types/system.types";
import {
dataEntityDiagram,
deploymentDiagram,
dispatchDiagram,
messageContractDiagram,
securityDiagram,
systemContextDiagram,
} from "#core/formatters/system.formatter";
import { bullets } from "#core/formatters/markdown.formatter";
import { mermaidFence } from "#configuration/strings/package.strings";
const SYSTEM_DOC_ID = {
concern: "architecture",
name: "system-architecture",
status: "current",
type: "reference",
} as const;
const SECTIONS: readonly SystemSection[] = [
{ heading: SYSTEM_HEADINGS.context, render: systemContextDiagram },
{ heading: SYSTEM_HEADINGS.messages, render: messageContractDiagram },
{ heading: SYSTEM_HEADINGS.data, render: dataEntityDiagram },
{ heading: SYSTEM_HEADINGS.deployment, render: deploymentDiagram },
{ heading: SYSTEM_HEADINGS.dispatch, render: dispatchDiagram },
{ heading: SYSTEM_HEADINGS.security, render: securityDiagram },
];
const systemBody = function systemBody(model: SystemModel): DocumentSection[] {
const diagrams = SECTIONS.flatMap((section): DocumentSection[] => {
const mermaid = section.render(model);
return mermaid === null ? [] : [{ content: mermaidFence(mermaid), heading: section.heading }];
});
const deferred = model.runtimeDeferred ?? [];
return deferred.length === 0
? diagrams
: [...diagrams, { content: bullets(deferred), heading: SYSTEM_HEADINGS.deferred }];
};
export const systemDoc = function systemDoc(model: SystemModel): DocumentDecl {
return {
...SYSTEM_DOC_ID,
body: systemBody(model),
generated: true,
lead: SYSTEM_DOC.lead,
summary: SYSTEM_DOC.summary,
title: systemTitle(model.name),
};
};