zodValidate.ts 690 B

123456789101112131415161718192021222324
  1. import type { z } from 'zod';
  2. import { Msg } from '@/utils';
  3. interface ParseMsgOptions {
  4. strict?: boolean;
  5. }
  6. export function parseMsg<T extends z.ZodType>(
  7. msg: Msg<unknown>,
  8. schema: T,
  9. context: string,
  10. options: ParseMsgOptions = {},
  11. ): Msg<z.infer<T>> {
  12. if (!msg.success || msg.obj == null) {
  13. return msg as Msg<z.infer<T>>;
  14. }
  15. const result = schema.safeParse(msg.obj);
  16. if (!result.success) {
  17. console.warn(`[zod] ${context} response failed validation`, result.error.issues);
  18. if (options.strict) throw new Error(`${context} response failed validation`);
  19. return msg as Msg<z.infer<T>>;
  20. }
  21. return new Msg<z.infer<T>>(msg.success, msg.msg, result.data);
  22. }