domain/converters/document.converter.ts

domain/converters/document.converter.ts is a file in Bane's Lab Site. 47 lines of code and 4 definitions.

import {
    BOUNDARY_LABEL,
    CONCERN_LABEL,
    CONSTRUCTS_LABEL,
    DOCUMENT_FINDINGS_LABEL,
    DOCUMENT_LABEL,
    FIELDS_LABEL,
    FORM_LABEL,
    HEADINGS_LABEL,
    LINE_MARK,
    MERMAID_LABEL,
    PATHS_LABEL,
} from "#configuration/strings/folder.strings";
import { glossary, labeled, row } from "#domain/converters/ontology.converter";
import type { Block } from "#types/block.types";
import type { DocumentView } from "#types/anatomy.types";
import { NONE_LABEL } from "#configuration/strings/ontology.strings";
import { STATS_SEPARATOR } from "#configuration/constants/anatomy.constants";

export const documentChips = function documentChips(document: DocumentView | null): (string | null)[] {
    if (document === null) {
        return [];
    }
    return [
        labeled(FORM_LABEL, document.form),
        labeled(CONCERN_LABEL, document.concern),
        document.boundary ? BOUNDARY_LABEL : null,
    ];
};

export const documentBlocks = function documentBlocks(document: DocumentView): Block[] {
    const metrics = [
        { label: HEADINGS_LABEL, value: String(document.headings) },
        { label: MERMAID_LABEL, value: String(document.mermaid) },
        { label: PATHS_LABEL, value: String(document.paths) },
        { label: CONSTRUCTS_LABEL, value: String(document.constructs) },
        { label: FIELDS_LABEL, value: String(document.fields.length) },
    ];
    const rows = document.findings.map((finding) =>
        row(
            finding.code + LINE_MARK + String(finding.line),
            `<strong>${finding.category}</strong>${STATS_SEPARATOR}${finding.text}`,
        ),
    );
    return [
        { caption: DOCUMENT_LABEL, kind: "metric" as const, metrics },
        glossary(rows.length === 0 ? [row(DOCUMENT_FINDINGS_LABEL, NONE_LABEL)] : rows),
    ];
};