• Exports data to Markdown format with metadata header; handles tables and sections; triggers browser download.

    Parameters

    • data: Record<string, unknown> | Record<string, unknown>[]

      Array (for table) or object with sections to export.

    • baseFilename: string

      Base filename (without extension or timestamp).

    • metadata: ExportMetadata

      Export metadata to include in header.

    Returns string

    Full filename used for download.

    If Markdown generation fails or document.body unavailable.

    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);
    }
    }