Rocky_Mountain_Vending/.pnpm-store/v10/files/40/d307d0bdd264514f982fb76acab7b50499f0da026eed3c538fe2f957b9fd055574f24b537891a57900e345c0d0af489561130facae47979eaf7d58adbaa27a
DMleadgen 46d973904b
Initial commit: Rocky Mountain Vending website
Next.js website for Rocky Mountain Vending company featuring:
- Product catalog with Stripe integration
- Service areas and parts pages
- Admin dashboard with Clerk authentication
- SEO optimized pages with JSON-LD structured data

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-12 16:22:15 -07:00

76 lines
1.9 KiB
Text

import vine from '@vinejs/vine';
import { Infer } from '@vinejs/vine/build/src/types';
import { Field, InternalFieldName } from 'react-hook-form';
export const schema = vine.compile(
vine.object({
username: vine.string().regex(/^\w+$/).minLength(3).maxLength(30),
password: vine
.string()
.regex(new RegExp('.*[A-Z].*'))
.regex(new RegExp('.*[a-z].*'))
.regex(new RegExp('.*\\d.*'))
.regex(new RegExp('.*[`~<>?,./!@#$%^&*()\\-_+="\'|{}\\[\\];:\\\\].*'))
.minLength(8)
.confirmed({ confirmationField: 'repeatPassword' }),
repeatPassword: vine.string().sameAs('password'),
accessToken: vine.unionOfTypes([vine.string(), vine.number()]),
birthYear: vine.number().min(1900).max(2013),
email: vine.string().email().optional(),
tags: vine.array(vine.string()),
enabled: vine.boolean(),
like: vine.array(
vine.object({
id: vine.number(),
name: vine.string().fixedLength(4),
}),
),
dateStr: vine
.string()
.transform((value: string) => new Date(value).toISOString()),
}),
);
export const validData: Infer<typeof schema> = {
username: 'Doe',
password: 'Password123_',
repeatPassword: 'Password123_',
birthYear: 2000,
email: 'john@doe.com',
tags: ['tag1', 'tag2'],
enabled: true,
accessToken: 'accessToken',
like: [
{
id: 1,
name: 'name',
},
],
dateStr: '2020-01-01T00:00:00.000Z',
};
export const invalidData = {
password: '___',
email: '',
birthYear: 'birthYear',
like: [{ id: 'z' }],
};
export const fields: Record<InternalFieldName, Field['_f']> = {
username: {
ref: { name: 'username' },
name: 'username',
},
password: {
ref: { name: 'password' },
name: 'password',
},
email: {
ref: { name: 'email' },
name: 'email',
},
birthday: {
ref: { name: 'birthday' },
name: 'birthday',
},
};