From 7462034a4fad0d203fd8c11b6cc88b770fc2c098 Mon Sep 17 00:00:00 2001 From: Ally Founder Date: Sun, 16 Aug 2026 10:24:04 -0400 Subject: [PATCH] Split Messages: hard-slice overlong single code lines --- plugins/split-messages/src/lib/split.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/plugins/split-messages/src/lib/split.ts b/plugins/split-messages/src/lib/split.ts index ab038d4..d8d82e5 100644 --- a/plugins/split-messages/src/lib/split.ts +++ b/plugins/split-messages/src/lib/split.ts @@ -42,6 +42,12 @@ function splitText(text: string, maxLength: number, splitOnWords: boolean): stri return packByLine(text.split(" "), maxLength, " "); } +function hardSlice(text: string, maxLength: number): string[] { + const slices: string[] = []; + for (let i = 0; i < text.length; i += maxLength) slices.push(text.slice(i, i + maxLength)); + return slices; +} + function splitCodeBlock(block: string, maxLength: number): string[] { if (block.length <= maxLength) return [block]; @@ -50,10 +56,12 @@ function splitCodeBlock(block: string, maxLength: number): string[] { const innerStart = fenceMatch ? fenceMatch[0].length : 3; const inner = block.slice(innerStart, block.length - 3); const fenceOverhead = lang.length + 8; + const innerMax = maxLength - fenceOverhead; - return packByLine(inner.split("\n"), maxLength - fenceOverhead, "\n").map( - (c) => "```" + lang + "\n" + c + "\n```" - ); + const lineChunks = packByLine(inner.split("\n"), innerMax, "\n"); + const safeChunks = lineChunks.flatMap((c) => (c.length > innerMax ? hardSlice(c, innerMax) : [c])); + + return safeChunks.map((c) => "```" + lang + "\n" + c + "\n```"); } export function intoChunks(content: string, maxLength: number, splitOnWords: boolean): string[] | false {