openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
66 lines (65 loc) • 2.31 kB
JavaScript
import { o as normalizeLowercaseStringOrEmpty } from "./string-coerce-CIXf7egm.js";
import { n as replaceOutsideCodeRegions } from "./directive-tags-Wp1S72ap.js";
//#region src/tts/directive-facts.ts
/** Extract final-text TTS syntax into persisted facts, leaving markdown code spans unchanged. */
function extractTtsDirectiveFacts(text) {
if (!/\[\[\s*\/?\s*tts(?:\s*:|\s*\]\])/iu.test(text)) return { cleanedText: text };
let cleanedText = text;
let facts;
const markTagged = () => {
facts ??= { tagged: true };
return facts;
};
cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*:\s*text\s*\]\]([\s\S]*?)\[\[\s*\/\s*tts\s*:\s*text\s*\]\]/gi, (_match, [inner]) => {
const next = markTagged();
if (next.text == null) next.text = String(inner).trim();
return "";
});
cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*\]\]([\s\S]*?)\[\[\s*\/\s*tts\s*\]\]/gi, (_match, [inner]) => {
const next = markTagged();
const visible = String(inner).trim();
if (next.text == null) next.text = visible;
return visible;
});
cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*:\s*([^\]]+)\]\]/gi, (_match, [body]) => {
const next = markTagged();
const tokens = String(body).split(/\s+/).filter(Boolean);
let provider;
const values = {};
for (const token of tokens) {
const eqIndex = token.indexOf("=");
if (eqIndex === -1) continue;
const rawKey = token.slice(0, eqIndex).trim();
const rawValue = token.slice(eqIndex + 1).trim();
if (!rawKey || !rawValue) continue;
const key = normalizeLowercaseStringOrEmpty(rawKey);
if (key === "provider") {
provider = normalizeLowercaseStringOrEmpty(rawValue) || void 0;
continue;
}
values[key] = rawValue;
}
if (provider || Object.keys(values).length > 0) {
next.directives ??= [];
next.directives.push({
...provider ? { provider } : {},
values
});
}
return "";
});
cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*tts\s*\]\]/gi, () => {
markTagged();
return "";
});
cleanedText = replaceOutsideCodeRegions(cleanedText, /\[\[\s*\/\s*tts(?:\s*:\s*[^\]]*)?\]\]/gi, () => {
markTagged();
return "";
});
return {
cleanedText,
...facts ? { facts } : {}
};
}
//#endregion
export { extractTtsDirectiveFacts as t };