UNPKG

@ocubist/error-alchemy

Version:

A powerful Node.js error-handling-framework with custom error types for easy debugging, enhanced error management, strong zod-support and useful quality-of-life-functionality for asserting and validating values.

67 lines (61 loc) 1.65 kB
import { ZodError, z } from "zod"; /** * ZodErrorValidationDetails schema. */ export const ZodErrorValidationDetails = z.object({ path: z.string(), msg: z.string(), }); export type ZodErrorValidationDetails = z.infer< typeof ZodErrorValidationDetails >; /** * Extracts validation details from a ZodError. * * @param {ZodError} zod - The ZodError to extract details from. * @returns {ZodErrorValidationDetails[]} An array of validation details. */ export const extractZodErrorValidationDetails = ( zod: ZodError ): ZodErrorValidationDetails[] => { return zod.errors.map((e) => { return { path: e.path.join("."), msg: e.message, }; }); }; /** * Converts an array of ZodErrorValidationDetails to a string. * * @param {ZodErrorValidationDetails[]} validationDetails - The validation details to stringify. * @returns {string} The stringified validation details. */ export const stringifyZodErrorValidationDetails = ( validationDetails: ZodErrorValidationDetails[] ): string => { return validationDetails .map((vd) => { return `${vd.path}: ${vd.msg}`; }) .join(" | "); }; /** * Error class for property validation errors using Zod. */ export class AlchemyPropsValidationError extends Error { zodError: ZodError; /** * Constructs a new AlchemyPropsValidationError. * * @param {ZodError} zodError - The ZodError that caused the validation error. */ constructor(zodError: ZodError) { super( `Props failed to validate: '${stringifyZodErrorValidationDetails( extractZodErrorValidationDetails(zodError) )}'` ); this.zodError = zodError; } }