import { createServerFn } from "@tanstack/react-start"; import { resolveMentions } from "~/server/mentions"; import { requireViewer, viewerMiddleware } from "./middleware"; import { limitHeavy } from "~/server/limits"; import { z } from "zod"; import { renderMarkdown } from "~/server/markdown"; import { markdownBody } from "~/lib/validation"; export const previewMarkdown = createServerFn({ method: "POST" }) .middleware([viewerMiddleware]) .validator(z.object({ owner: z.string().nullable(), repo: z.string().nullable(), body: markdownBody })) .handler(async ({ data, context }) => { await limitHeavy(requireViewer(context.viewer)); const markdownContext = data.owner && data.repo ? { owner: data.owner, repo: data.repo, ref: "HEAD", basePath: "" } : null; return { html: renderMarkdown(data.body, markdownContext, await resolveMentions([data.body])) }; });