@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.
58 lines (52 loc) • 1.5 kB
text/typescript
import z, { ZodError, ZodSchema } from "zod";
import { useErrorAlchemy } from "../../../crafting/useErrorAlchemy/useErrorAlchemy";
import { extractZodErrorValidationDetails } from "../../../utility/PropsValidationError";
const { craftMysticError, craftErrorTransmuter } = useErrorAlchemy(
"ErrorAlchemy",
"assert-function"
);
/**
* Type for AssertFailedError.
*/
export type AssertFailedError = InstanceType<
ReturnType<typeof craftMysticError>
>;
export const AssertFailedError = craftMysticError({
name: "AssertFailedError",
errorCode: "DATA_INTEGRITY_VIOLATION",
severity: "critical",
cause: "Zod validation failed",
});
const assertFailedTransmuter = craftErrorTransmuter(
(err) => err instanceof ZodError,
(err: ZodError) => {
const details = extractZodErrorValidationDetails(err);
return new AssertFailedError({
message: details.map((d) => d.msg).join(" | "),
payload: {
validationErrorDetails: details,
},
origin: err,
});
}
);
/**
* Asserts that a value matches a given Zod schema.
*
* @template T
* @param {unknown} value - The value to assert.
* @param {ZodSchema<T>} [schema] - The Zod schema to validate against.
* @throws {AssertFailedError} If the assertion fails.
*/
export function assert<T>(
value: unknown,
schema?: ZodSchema<T>
): asserts value is T {
if (schema !== undefined) {
try {
schema.parse(value);
} catch (err) {
throw assertFailedTransmuter.execute(err);
}
}
}