63 lines
2.7 KiB
TypeScript
63 lines
2.7 KiB
TypeScript
import * as v from 'valibot'
|
|
|
|
export const loginSchema = v.object({
|
|
login: v.pipe(v.string('Email or username is required'), v.nonEmpty('Email or username is required')),
|
|
password: v.pipe(v.string('Password is required'), v.nonEmpty('Password is required')),
|
|
remember: v.optional(v.boolean()),
|
|
})
|
|
|
|
export const registerSchema = v.pipe(
|
|
v.object({
|
|
username: v.pipe(
|
|
v.string('Username is required'),
|
|
v.nonEmpty('Username is required'),
|
|
v.minLength(3, 'Username must be at least 3 characters'),
|
|
v.regex(/^[\w-]+$/, 'Username can only contain letters, numbers, dashes and underscores'),
|
|
),
|
|
first_name: v.pipe(v.string('First name is required'), v.nonEmpty('First name is required')),
|
|
last_name: v.pipe(v.string('Last name is required'), v.nonEmpty('Last name is required')),
|
|
email: v.pipe(v.string('Email is required'), v.nonEmpty('Email is required'), v.email('Please enter a valid email')),
|
|
password: v.pipe(v.string('Password is required'), v.nonEmpty('Password is required'), v.minLength(8, 'Password must be at least 8 characters')),
|
|
password_confirmation: v.pipe(v.string('Please confirm your password'), v.nonEmpty('Please confirm your password')),
|
|
}),
|
|
v.forward(
|
|
v.partialCheck(
|
|
[['password'], ['password_confirmation']],
|
|
input => input.password === input.password_confirmation,
|
|
'Passwords do not match',
|
|
),
|
|
['password_confirmation'],
|
|
),
|
|
)
|
|
|
|
export const forgotPasswordSchema = v.object({
|
|
email: v.pipe(v.string('Email is required'), v.nonEmpty('Email is required'), v.email('Please enter a valid email')),
|
|
})
|
|
|
|
export const resetPasswordSchema = v.pipe(
|
|
v.object({
|
|
email: v.pipe(v.string('Email is required'), v.nonEmpty('Email is required'), v.email('Please enter a valid email')),
|
|
password: v.pipe(v.string('Password is required'), v.nonEmpty('Password is required'), v.minLength(8, 'Password must be at least 8 characters')),
|
|
password_confirmation: v.pipe(v.string('Please confirm your password'), v.nonEmpty('Please confirm your password')),
|
|
}),
|
|
v.forward(
|
|
v.partialCheck(
|
|
[['password'], ['password_confirmation']],
|
|
input => input.password === input.password_confirmation,
|
|
'Passwords do not match',
|
|
),
|
|
['password_confirmation'],
|
|
),
|
|
)
|
|
|
|
export const completeProfileSchema = v.object({
|
|
username: v.pipe(
|
|
v.string('Username is required'),
|
|
v.nonEmpty('Username is required'),
|
|
v.minLength(3, 'Username must be at least 3 characters'),
|
|
v.regex(/^[\w-]+$/, 'Username can only contain letters, numbers, dashes and underscores'),
|
|
),
|
|
first_name: v.pipe(v.string('First name is required'), v.nonEmpty('First name is required')),
|
|
last_name: v.pipe(v.string('Last name is required'), v.nonEmpty('Last name is required')),
|
|
})
|