@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
text/typescript
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);
}
};