import type { PlaceholderMapping, VelumSession } from "./types"; export const NEW_SESSION_ID = "__new_session__"; export function markdownCodeBlock(value: string): string { return `\`\`\`text\n${value.replace(/```/g, "`\u200b``")}\n\`\`\``; } function escapeMarkdownTableCell(value: string): string { return value.replace(/\|/g, "\\|").replace(/\r?\n/g, " "); } export function mappingDetailTable(mapping: PlaceholderMapping): string { const rows = Object.entries(mapping) .sort(([a], [b]) => a.localeCompare(b)) .map( ([placeholder, entry]) => `| \`${placeholder}\` | ${escapeMarkdownTableCell(entry.original)} | ${entry.type} |`, ); if (rows.length === 0) { return "Keine Einträge."; } return [ "| Platzhalter | Original | Typ |", "| --- | --- | --- |", ...rows, ].join("\n"); } export function mappingSummary(mapping: PlaceholderMapping): string { const counts = Object.values(mapping).reduce>( (acc, entry) => { acc[entry.type] = (acc[entry.type] ?? 0) + 1; return acc; }, {}, ); const rows = Object.entries(counts) .sort(([a], [b]) => a.localeCompare(b)) .map(([type, count]) => `| ${type} | ${count} |`); if (rows.length === 0) { return "Keine Einträge."; } return ["| Typ | Anzahl |", "| --- | ---: |", ...rows].join("\n"); } export function sessionSubtitle(session: VelumSession): string { const entries = Object.keys(session.mapping).length; return `${entries} ${entries === 1 ? "Zuordnung" : "Zuordnungen"} · aktualisiert ${new Date( session.updatedAt, ).toLocaleString()}`; }