All files / src/lib/schema auth.ts

100% Statements 31/31
100% Branches 0/0
0% Functions 0/2
100% Lines 31/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 321x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x  
import { z } from 'zod';
 
export const loginSchema = z.object({
  email: z
    .email('올바른 이메일 형식이 아닙니다.')
    .max(50, '이메일은 최대 50자까지 입력할 수 있습니다.'),
  password: z.string().min(1, '비밀번호를 입력해주세요'),
});
 
export const signupSchema = loginSchema
  .extend({
    nickname: z
      .string()
      .min(2, '닉네임은 2자 이상이어야 합니다.')
      .max(14, '닉네임은 14자 이하로 입력해주세요.'),
    password: z
      .string()
      .min(8, '비밀번호는 8자 이상이어야 합니다.')
      .regex(/[!@#$%^&*]/, '!, @, #, $, %, ^, &, * 중 1개 이상 포함해야 합니다.')
      .regex(/\d/, '숫자를 1개 이상 포함해야 합니다.'),
    confirmPassword: z.string().min(1, '확인 비밀번호를 입력해주세요.'),
    termsAgreement: z
      .boolean()
      .refine((v) => v === true, { message: '서비스 이용약관에 동의해주세요.' }),
  })
  .refine((data) => data.password === data.confirmPassword, {
    path: ['confirmPassword'],
    message: '비밀번호가 일치하지 않습니다.',
  });
 
export type SignupFormValues = z.infer<typeof signupSchema>;