TypeScript 61.9%
HTML 37.2%
SQL 0.7%
1import { z } from 'zod';2import { passwordStrength } from './password-strength';34export const emailSchema = z.string().trim().toLowerCase().email('Enter a valid e-mail address').max(254);56export const passwordSchema = z7 .string()8 .min(10, 'Use at least 10 characters')9 .max(200, 'Password is too long')10 .refine((p) => passwordStrength(p).score >= 1, 'That password is too common or too simple');1112export const codeSchema = z13 .string()14 .transform((s) => s.replace(/\D/g, ''))15 .pipe(z.string().length(6, 'Enter the 6-digit code'));1617export const handleSchema = z18 .string()19 .trim()20 .toLowerCase()21 .min(3, 'At least 3 characters')22 .max(24, 'At most 24 characters')23 .regex(/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/, 'Letters, numbers and hyphens only');2425const RESERVED = new Set(['admin', 'rareindex', 'api', 'support', 'help', 'about', 'login', 'signup', 'account', 'collections', 'watchlist', 'root', 'system', 'null', 'undefined']);26export function isReservedHandle(h: string): boolean {27 return RESERVED.has(h);28}2930export const signupSchema = z.object({ email: emailSchema, password: passwordSchema, name: z.string().trim().max(80).optional().or(z.literal('')) });31export const loginSchema = z.object({ email: emailSchema, password: z.string().min(1, 'Enter your password').max(200), remember: z.boolean().optional() });32