mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-07 20:11:23 +00:00
refactor(shared): dedupe chat content text extraction
This commit is contained in:
37
src/shared/chat-content.ts
Normal file
37
src/shared/chat-content.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
export function extractTextFromChatContent(
|
||||
content: unknown,
|
||||
opts?: { sanitizeText?: (text: string) => string },
|
||||
): string | null {
|
||||
const normalize = (text: string) => text.replace(/\s+/g, " ").trim();
|
||||
|
||||
if (typeof content === "string") {
|
||||
const value = opts?.sanitizeText ? opts.sanitizeText(content) : content;
|
||||
const normalized = normalize(value);
|
||||
return normalized ? normalized : null;
|
||||
}
|
||||
|
||||
if (!Array.isArray(content)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
const chunks: string[] = [];
|
||||
for (const block of content) {
|
||||
if (!block || typeof block !== "object") {
|
||||
continue;
|
||||
}
|
||||
if ((block as { type?: unknown }).type !== "text") {
|
||||
continue;
|
||||
}
|
||||
const text = (block as { text?: unknown }).text;
|
||||
if (typeof text !== "string") {
|
||||
continue;
|
||||
}
|
||||
const value = opts?.sanitizeText ? opts.sanitizeText(text) : text;
|
||||
if (value.trim()) {
|
||||
chunks.push(value);
|
||||
}
|
||||
}
|
||||
|
||||
const joined = normalize(chunks.join(" "));
|
||||
return joined ? joined : null;
|
||||
}
|
||||
Reference in New Issue
Block a user