Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 1x 2x 2x 4x 4x 4x 4x 4x 2x 1x 6x 6x | import { GraphQLError } from 'graphql';
import type {
ErrorOptions,
ErrorTypeDefinition,
ZodIssueMinimal,
} from './types';
const buildFieldErrorsFromZodIssues = (issues: ZodIssueMinimal[]) => {
const fieldErrors: Record<string, string[]> = {};
for (const issue of issues) {
// Safely handle path segments (converting symbols to strings if any)
const path =
issue.path
.map((segment) =>
typeof segment === 'symbol' ? segment.toString() : segment,
)
.join('.') || '_root';
Eif (!fieldErrors[path]) {
fieldErrors[path] = [];
}
fieldErrors[path].push(issue.message);
}
return fieldErrors;
};
export const throwCustomError = (
message: string,
errorType: ErrorTypeDefinition,
options?: ErrorOptions,
): never => {
const zodDetails = options?.zodIssues
? buildFieldErrorsFromZodIssues(options.zodIssues)
: undefined;
throw new GraphQLError(message, {
extensions: {
code: errorType.errorCode,
messageKey: options?.messageKey ?? null,
http: {
status: errorType.errorStatus,
},
details: zodDetails ?? options?.details ?? null,
stacktrace: process.env.NODE_ENV === 'development' ? undefined : null,
},
originalError:
options?.originalError instanceof Error
? options.originalError
: undefined,
});
};
|