Array (for table) or object with sections to export.
Base filename (without extension or timestamp).
Export metadata to include in header.
Full filename used for download.
export function exportToMarkdown(
data: Record<string, unknown>[] | Record<string, unknown>,
baseFilename: string,
metadata: ExportMetadata,
): string {
let markdown = formatMetadataHeader(metadata);
// Handle array data (table format)
if (Array.isArray(data)) {
if (data.length === 0) {
markdown += "*No data to export*\n";
} else {
markdown += formatMarkdownTable(data);
}
}
// Handle object data (sections format)
else {
markdown += formatMarkdownSections(data);
}
// Create blob and download
const blob = new Blob([markdown], {
type: "text/markdown;charset=utf-8",
});
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
let appended = false;
try {
const sanitized = sanitizeFilename(baseFilename);
const timestamp = generateExportTimestamp();
const filename = `${sanitized}-${timestamp}.md`;
link.href = url;
link.download = filename;
if (!document.body) {
throw new Error(
"Cannot export: document.body is unavailable. " +
"This export utility requires the Electron renderer process with access to DOM APIs.",
);
}
document.body.appendChild(link);
appended = true;
link.click();
return filename;
} finally {
if (appended) {
link.remove();
}
URL.revokeObjectURL(url);
}
}
Exports data to Markdown format with metadata header; handles tables and sections; triggers browser download.