mirror of
https://github.com/openclaw/openclaw.git
synced 2026-03-19 14:00:51 +00:00
38 lines
1004 B
TypeScript
38 lines
1004 B
TypeScript
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;
|
|
}
|