| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- import {
- renderToHtml,
- renderToPlainText,
- } from "@json-render/react-email/render";
- import { examples } from "@/lib/examples";
- import type { Spec } from "@json-render/core";
- export async function GET(req: Request) {
- const { searchParams } = new URL(req.url);
- const name = searchParams.get("name") ?? "vercel-invite";
- const plain = searchParams.get("plain") === "1";
- const example = examples.find((e) => e.name === name);
- if (!example) {
- return new Response("Example not found", { status: 404 });
- }
- return emailResponse(example.spec, plain);
- }
- export async function POST(req: Request) {
- const { spec, plain } = (await req.json()) as {
- spec: Spec;
- plain?: boolean;
- };
- if (!spec || !spec.root || !spec.elements) {
- return new Response("Invalid spec", { status: 400 });
- }
- return emailResponse(spec, plain ?? false);
- }
- async function emailResponse(spec: Spec, plain: boolean) {
- const content = plain
- ? await renderToPlainText(spec)
- : await renderToHtml(spec);
- return new Response(content, {
- headers: {
- "Content-Type": plain
- ? "text/plain; charset=utf-8"
- : "text/html; charset=utf-8",
- "Cache-Control": "no-store",
- },
- });
- }
|