UNPKG

touchdesigner-mcp-server

Version:
63 lines (62 loc) 2.29 kB
import { stringify as toYaml } from "yaml"; import { renderMarkdownTemplate } from "./markdownRenderer.js"; export const DEFAULT_PRESENTER_FORMAT = "yaml"; export function presentStructuredData(payload, format = DEFAULT_PRESENTER_FORMAT) { switch (format) { case "json": return JSON.stringify(resolveStructured(payload), null, 2); case "yaml": return toYaml(resolveStructured(payload)); case "markdown": return formatMarkdown(payload, format); default: return toYaml(resolveStructured(payload)); } } function resolveStructured(payload) { if (payload.structured !== undefined) { return payload.structured; } return { mode: payload.detailLevel, text: payload.text, ...(payload.context ?? {}), }; } function formatMarkdown(payload, requestedFormat) { const context = { ...(payload.context ?? {}) }; const inferredTitle = payload.detailLevel ? `${payload.detailLevel.charAt(0).toUpperCase()}${payload.detailLevel.slice(1)}` : "Response"; const effectiveTemplate = payload.template ?? (payload.detailLevel === "detailed" ? "detailedPayload" : "default"); const payloadFormat = context.payloadFormat ?? (requestedFormat === "markdown" ? DEFAULT_PRESENTER_FORMAT : requestedFormat); const resolveStructuredText = () => { if (typeof payload.structured === "string") return payload.structured; if (payload.structured === undefined) return payload.text ?? ""; return payloadFormat === "json" ? JSON.stringify(payload.structured, null, 2) : toYaml(payload.structured); }; let bodyText = payload.text?.trim() ?? ""; if (!bodyText) { bodyText = resolveStructuredText(); } if (effectiveTemplate === "detailedPayload") { context.title ??= inferredTitle; context.payload ??= resolveStructuredText(); context.payloadFormat ??= payloadFormat; } if (effectiveTemplate === "default" && !("title" in context)) { context.title = inferredTitle; } return renderMarkdownTemplate(effectiveTemplate, { ...context, text: bodyText, }); }