# core/renderers/baseline.renderer.ts

> 65 lines of code and 11 definitions.

Tree: Build tree
Language: typescript
Layer: product
Canonical: https://banes-lab.com/anatomy/build#file-build-core-renderers-baseline-renderer-ts
Source text: https://banes-lab.com/assets/sources/source.c55ddc98a2cec5f5183e2e5be8662b9749e9671fa9db3278b4dafb3cb4cdb8b0.generated.txt

## Definitions

- `row` (lexical_declaration, line 20)
- `wordsPerSentence` (lexical_declaration, line 24)
- `renderBaseline` (lexical_declaration, line 28, exported)
- `FRONTMATTER` (lexical_declaration, line 12)
- `CELL` (lexical_declaration, line 13)
- `EDGE` (lexical_declaration, line 14)
- `EDGE_END` (lexical_declaration, line 15)
- `RULE` (lexical_declaration, line 16)
- `HEADING` (lexical_declaration, line 17)
- `DECIMALS` (lexical_declaration, line 18)
- `lines` (lexical_declaration, line 29, exported)

## Source

```typescript
import { BASELINE_CONCERN, BASELINE_NAME, DOC_STATUS, DOC_TYPE } from "#configuration/constants/tone.constants";
import {
    BASELINE_HEADERS,
    BASELINE_INTRO,
    BASELINE_SUMMARY,
    BASELINE_TITLE,
    GENERATED_BANNER,
} from "#configuration/strings/baseline.strings";
import { LINE_END } from "#configuration/constants/inventory.constants";
import type { ToneBaseline } from "#types/tone.types";

const FRONTMATTER = "---";
const CELL = " | ";
const EDGE = "| ";
const EDGE_END = " |";
const RULE = "---";
const HEADING = "# ";
const DECIMALS = 1;

const row = function row(cells: readonly string[]): string {
    return EDGE + cells.join(CELL) + EDGE_END;
};

const wordsPerSentence = function wordsPerSentence(words: number, sentences: number): string {
    return sentences === 0 ? String(0) : (words / sentences).toFixed(DECIMALS);
};

export const renderBaseline = function renderBaseline(baseline: ToneBaseline): string {
    const lines = [
        FRONTMATTER,
        `type: ${DOC_TYPE}`,
        `name: ${BASELINE_NAME}`,
        `summary: ${BASELINE_SUMMARY}`,
        `concern: ${BASELINE_CONCERN}`,
        `status: ${DOC_STATUS}`,
        FRONTMATTER,
        "",
        GENERATED_BANNER,
        "",
        HEADING + BASELINE_TITLE,
        "",
        BASELINE_INTRO,
        "",
        row(BASELINE_HEADERS),
        row(BASELINE_HEADERS.map(() => RULE)),
    ];
    for (const metrics of baseline.modules) {
        lines.push(
            row([
                metrics.module,
                String(metrics.literals),
                String(metrics.sentences),
                wordsPerSentence(metrics.words, metrics.sentences),
                String(metrics.longestSentence),
                String(metrics.agentlessPassives),
                String(metrics.chainedSentences),
                String(metrics.longDashes),
                String(metrics.semicolons),
                String(metrics.digitMetrics),
                String(metrics.bannedTerms),
                String(metrics.firstPerson),
                String(metrics.secondPerson),
                String(metrics.collectivePerson),
                String(metrics.labelledItems),
            ]),
        );
    }
    return lines.join(LINE_END) + LINE_END;
};
```
