From c9a4b273d62fa0d7d25ca57e81c78c2d66ad3eb7 Mon Sep 17 00:00:00 2001 From: lucaronin Date: Thu, 14 May 2026 13:43:14 +0200 Subject: [PATCH] refactor: simplify file attachment serialization --- src/utils/fileAttachmentMarkdown.ts | 30 +++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/src/utils/fileAttachmentMarkdown.ts b/src/utils/fileAttachmentMarkdown.ts index 51a885f2..7b05e2dc 100644 --- a/src/utils/fileAttachmentMarkdown.ts +++ b/src/utils/fileAttachmentMarkdown.ts @@ -19,6 +19,12 @@ interface SerializeFileAttachmentBlocksOptions { serializeOrdinaryBlocks: (blocks: unknown[]) => string } +interface FlushOrdinaryBlocksOptions { + chunks: string[] + pending: unknown[] + serializeOrdinaryBlocks: (blocks: unknown[]) => string +} + type FileAttachmentLineTransform = (payload: FileAttachmentPayload) => string | null type MarkdownFence = { character: string; length: number } type AttachmentUrl = string @@ -304,6 +310,18 @@ function readFileAttachmentBlockPayload(block: BlockLike): FileAttachmentPayload }) } +function flushOrdinaryBlocks({ + chunks, + pending, + serializeOrdinaryBlocks, +}: FlushOrdinaryBlocksOptions): unknown[] { + if (pending.length === 0) return pending + + const markdown = serializeOrdinaryBlocks(pending).trimEnd() + if (markdown) chunks.push(markdown) + return [] +} + export function serializeFileAttachmentBlocks({ blocks, serializeOrdinaryBlocks, @@ -311,14 +329,6 @@ export function serializeFileAttachmentBlocks({ const chunks: string[] = [] let pending: unknown[] = [] - const flushPending = () => { - if (pending.length === 0) return - - const markdown = serializeOrdinaryBlocks(pending).trimEnd() - if (markdown) chunks.push(markdown) - pending = [] - } - for (const block of blocks as BlockLike[]) { const payload = readFileAttachmentBlockPayload(block) if (!payload) { @@ -326,11 +336,11 @@ export function serializeFileAttachmentBlocks({ continue } - flushPending() + pending = flushOrdinaryBlocks({ chunks, pending, serializeOrdinaryBlocks }) chunks.push(serializeMarkdownFileLink(payload)) } - flushPending() + flushOrdinaryBlocks({ chunks, pending, serializeOrdinaryBlocks }) return chunks.join('\n\n') }