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.

56 lines (50 loc) 1.43 kB
import { ZodError, ZodSchema } from "zod"; import { useErrorAlchemy } from "../../../crafting/useErrorAlchemy/useErrorAlchemy"; import { extractZodErrorValidationDetails } from "../../../utility/PropsValidationError"; const { craftMysticError, craftErrorTransmuter } = useErrorAlchemy( "ErrorAlchemy", "parse-function" ); /** * Type for ParseFailedError. */ export type ParseFailedError = InstanceType< ReturnType<typeof craftMysticError> >; export const ParseFailedError = craftMysticError({ name: "ParseFailedError", errorCode: "VALIDATION_ERROR", severity: "unexpected", }); const parseFailedTransmuter = craftErrorTransmuter( (err) => err instanceof ZodError, (err: ZodError) => { const details = extractZodErrorValidationDetails(err); return new ParseFailedError({ message: details.map((d) => d.msg).join(" | "), payload: { validationErrorDetails: details, }, origin: err, }); } ); /** * Synchronously parses a value against a Zod schema. * * @template T * @param {T} value - The value to parse. * @param {ZodSchema<T>} schema - The Zod schema to parse against. * @returns {T} The parsed value. * @throws {ParseFailedError} If parsing fails. */ export const parse: <T>(value: T, schema: ZodSchema<T>) => T = ( value, schema ) => { try { return schema.parse(value); } catch (err) { throw parseFailedTransmuter.execute(err); } };