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])) };
});