mirror of
https://github.com/morluto/rea.git
synced 2026-10-28 18:35:53 +00:00
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
import { z } from "zod";
|
|
|
|
import { AnalysisInputError } from "../domain/analysisErrorCore.js";
|
|
import { analysisInputErrorFromIssues } from "../domain/inputIssueProjection.js";
|
|
|
|
/** Project schema issues of the raw request onto their request paths. */
|
|
export const requestInputError = (
|
|
operation: string,
|
|
cause: z.ZodError,
|
|
input: unknown,
|
|
): AnalysisInputError =>
|
|
analysisInputErrorFromIssues(operation, cause.issues, input, { cause });
|
|
|
|
/**
|
|
* Keep the failed constraint when a parsed request is rejected later. Nested
|
|
* values such as Evidence results are parsed on their own, so their issue
|
|
* paths are relative to that value and are reported in the message, not as
|
|
* request paths.
|
|
*/
|
|
export const workflowInputError = (
|
|
operation: string,
|
|
cause: z.ZodError | TypeError,
|
|
): AnalysisInputError =>
|
|
new AnalysisInputError(
|
|
operation,
|
|
{ cause },
|
|
cause instanceof z.ZodError
|
|
? cause.issues.map((issue) => ({
|
|
path: [],
|
|
reason: "invalid_value" as const,
|
|
message: `A nested value failed validation at ${issue.path.length === 0 ? "its root" : issue.path.map(String).join(".")}: ${issue.message}`,
|
|
}))
|
|
: [{ path: [], reason: "invalid_value", message: cause.message }],
|
|
);
|