From 6ab820f172b56957ef5a32835f0c25f9d2cd2751 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Sat, 22 Mar 2025 15:20:58 +0200 Subject: [PATCH] refactor(export/single): make note type mapping testable --- src/services/export/single.ts | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/src/services/export/single.ts b/src/services/export/single.ts index 6f355c61a..18ea83036 100644 --- a/src/services/export/single.ts +++ b/src/services/export/single.ts @@ -8,6 +8,7 @@ import becca from "../../becca/becca.js"; import type TaskContext from "../task_context.js"; import type BBranch from "../../becca/entities/bbranch.js"; import type { Response } from "express"; +import type BNote from "../../becca/entities/bnote.js"; function exportSingleNote(taskContext: TaskContext, branch: BBranch, format: "html" | "markdown", res: Response) { const note = branch.getNote(); @@ -20,9 +21,21 @@ function exportSingleNote(taskContext: TaskContext, branch: BBranch, format: "ht return [400, `Unrecognized format '${format}'`]; } + const { payload, extension, mime } = mapByNoteType(note, note.getContent(), format); + const fileName = `${note.title}.${extension}`; + + res.setHeader("Content-Disposition", getContentDisposition(fileName)); + res.setHeader("Content-Type", `${mime}; charset=UTF-8`); + + res.send(payload); + + taskContext.increaseProgressCount(); + taskContext.taskSucceeded(); +} + +export function mapByNoteType(note: BNote, content: string | Buffer, format: "html" | "markdown") { let payload, extension, mime; - let content = note.getContent(); if (typeof content !== "string") { throw new Error("Unsupported content type for export."); } @@ -58,15 +71,7 @@ function exportSingleNote(taskContext: TaskContext, branch: BBranch, format: "ht mime = "application/json"; } - const fileName = `${note.title}.${extension}`; - - res.setHeader("Content-Disposition", getContentDisposition(fileName)); - res.setHeader("Content-Type", `${mime}; charset=UTF-8`); - - res.send(payload); - - taskContext.increaseProgressCount(); - taskContext.taskSucceeded(); + return { payload, extension, mime }; } function inlineAttachments(content: string) {