import { createServerFn } from "@tanstack/react-start"; import { viewerMiddleware } from "./middleware"; import { limitBrowse } from "~/server/limits"; import { requireRepoAccess } from "~/server/repos"; import { loadIssueTemplates } from "~/server/issue-templates"; import { renderMarkdown } from "~/server/markdown"; import { repoRef } from "~/lib/validation"; export const listIssueTemplates = createServerFn({ method: "GET" }) .middleware([viewerMiddleware]) .validator(repoRef) .handler(async ({ data, context }) => { await limitBrowse(context.viewer); const { repo } = await requireRepoAccess(data.owner, data.repo, context.viewer, "read"); const { templates, config } = await loadIssueTemplates(repo); const mdContext = { owner: repo.owner_name, repo: repo.name, ref: repo.default_branch, basePath: "" }; return { config, templates: templates.map((template) => ({ ...template, markdownHtml: template.kind === "form" ? template.fields.flatMap((field) => field.type === "markdown" ? [renderMarkdown(field.attributes.value, mdContext)] : [], ) : [], })), }; });