chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
import { NextResponse } from "next/server";
|
||||
|
||||
import {
|
||||
LayoutCodeValidationError,
|
||||
validateLayoutCode,
|
||||
} from "@/lib/validate-layout-code";
|
||||
|
||||
export const dynamic = "force-dynamic";
|
||||
|
||||
function invalidResponse(error: string, line?: number, column?: number) {
|
||||
return NextResponse.json(
|
||||
{
|
||||
ok: false,
|
||||
error,
|
||||
...(line === undefined ? {} : { line }),
|
||||
...(column === undefined ? {} : { column }),
|
||||
},
|
||||
{ status: 400 }
|
||||
);
|
||||
}
|
||||
|
||||
export async function POST(request: Request) {
|
||||
let payload: unknown;
|
||||
try {
|
||||
payload = await request.json();
|
||||
} catch {
|
||||
return invalidResponse("Request body must be valid JSON");
|
||||
}
|
||||
|
||||
const layoutCode = (payload as { layout_code?: unknown })?.layout_code;
|
||||
if (typeof layoutCode !== "string") {
|
||||
return invalidResponse("layout_code must be a string");
|
||||
}
|
||||
|
||||
try {
|
||||
const validated = validateLayoutCode(layoutCode);
|
||||
return NextResponse.json({
|
||||
ok: true,
|
||||
layout_code: validated.layout_code,
|
||||
layoutId: validated.layoutId,
|
||||
layoutName: validated.layoutName,
|
||||
layoutDescription: validated.layoutDescription,
|
||||
schemaJSON: validated.schemaJSON,
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof LayoutCodeValidationError) {
|
||||
return invalidResponse(error.message, error.line, error.column);
|
||||
}
|
||||
|
||||
console.error("[validate-layout-code] unexpected error", error);
|
||||
return NextResponse.json(
|
||||
{ ok: false, error: "Failed to validate layout code" },
|
||||
{ status: 500 }
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user