import { NextResponse } from "next/server"; import type { Block, ProjectConfig } from "@/features/editor/state/editorStore"; import { buildStaticHtml } from "@/app/api/export/route"; // /api/export/preview 라우트는 Export 결과 HTML 을 ZIP 없이 바로 반환하는 // 경량 프리뷰용 엔드포인트이다. 에디터에서 Export 미리보기 UX 를 제공하기 위해 사용한다. type PreviewRequestBody = { blocks: Block[]; projectConfig?: ProjectConfig; }; export async function POST(request: Request) { let body: PreviewRequestBody; try { // JSON 본문을 파싱해서 blocks + projectConfig 를 추출한다. body = (await request.json()) as PreviewRequestBody; } catch { // 잘못된 JSON 요청에 대해서는 400 에러를 반환한다. return NextResponse.json({ message: "잘못된 JSON 요청입니다." }, { status: 400 }); } const blocks = Array.isArray(body.blocks) ? body.blocks : []; const projectConfig = body.projectConfig; // Export 본문 HTML 은 기존 buildStaticHtml 을 재사용해서 생성한다. // 이렇게 하면 /api/export ZIP 라우트와 동일한 정적 HTML 을 얻을 수 있다. const html = buildStaticHtml(blocks, projectConfig); // Export 미리보기는 ZIP 이 아니라 순수 HTML 문자열을 반환한다. return new NextResponse(html, { status: 200, headers: { "Content-Type": "text/html; charset=utf-8", }, }); }