core/renderers/baseline.renderer.ts
core/renderers/baseline.renderer.ts is a file in Bane's Lab Content. 62 lines of code and 11 definitions.
import { BASELINE_CONCERN, BASELINE_NAME, DOC_STATUS, DOC_TYPE } from "#configuration/constants/tone.constants";
import {
BASELINE_HEADERS,
BASELINE_INTRO,
BASELINE_SUMMARY,
BASELINE_TITLE,
} 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,
"",
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.labeledItems),
]),
);
}
return lines.join(LINE_END) + LINE_END;
};