import { z } from "zod"; import { AnalysisReviewError, diagnosticJsonPreflight } from "@actuarial-ts/core"; /** Shared safe JSON boundary: descriptor checks precede all Zod property access. */ export function parseReviewBoundary(schema: z.ZodType, input: unknown): T { const issues = diagnosticJsonPreflight(input, "input"); if (issues.length) throw new AnalysisReviewError(issues.map((issue) => ({ code: "INVALID_REVIEW_INPUT", path: issue.path, message: issue.message, remedies: [] }))); const result = schema.safeParse(input); if (!result.success) throw new AnalysisReviewError(result.error.issues.map((issue) => ({ code: "INVALID_REVIEW_INPUT", path: `$${issue.path.map((part) => `[${JSON.stringify(part)}]`).join("")}`, message: issue.message, remedies: [], }))); return result.data; }