zodValidate.ts 524 B

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