{"version":3,"sources":["../src/helpers/index.ts","../src/validators/generics.ts"],"sourcesContent":["\r\n// Helper function to check for banned words\r\nexport const containsBannedWords = (\r\n    value: string,\r\n    bannedWords?: string[]\r\n  ): boolean => {\r\n    if (!bannedWords || bannedWords.length === 0) return false;\r\n    return bannedWords.some((word) =>\r\n      value.toLowerCase().includes(word.toLowerCase())\r\n    );\r\n  };","import { ValidationResult, UsernameValidationOptions, UserValidationOptions, EmailValidationOptions, PasswordValidationOptions, AgeValidationOptions } from \"../types\";\r\nimport { containsBannedWords } from \"../helpers\";\r\n\r\nexport const validateUsername = (\r\n  username: string,\r\n  options: UsernameValidationOptions = {}\r\n): ValidationResult => {\r\n  const errors: string[] = [];\r\n  \r\n  const min = options.min ?? 3;\r\n  const max = options.max ?? 20;\r\n  const specialChars = options.allowSpecialChars ?? \"_\";\r\n\r\n  if (username.length < min) {\r\n    errors.push(options.messages?.min || `Username must be at least ${min} characters`);\r\n  }\r\n\r\n  if (username.length > max) {\r\n    errors.push(options.messages?.max || `Username must be at most ${max} characters`);\r\n  }\r\n\r\n  if (containsBannedWords(username, options.bannedWords)) {\r\n    errors.push(options.messages?.bannedWords || \"Username contains banned words\");\r\n  }\r\n\r\n  if (/^\\d+$/.test(username)) {\r\n    errors.push(options.messages?.onlyNumbers || \"Username cannot contain only numbers\");\r\n  }\r\n\r\n  const regex = new RegExp(`^[a-zA-Z0-9${specialChars}]+$`);\r\n  if (!regex.test(username)) {\r\n    errors.push(options.messages?.invalidFormat || `Username can only contain letters, numbers and ${specialChars}`);\r\n  }\r\n\r\n  return {\r\n    valid: errors.length === 0,\r\n    errors: errors.length > 0 ? errors : undefined\r\n  };\r\n};\r\n\r\nexport const validateUser = (\r\n  user: string,\r\n  options: UserValidationOptions = {}\r\n): ValidationResult => {\r\n  const errors: string[] = [];\r\n  \r\n  const min = options.min ?? 3;\r\n  const max = options.max ?? 30;\r\n  const specialChars = options.allowSpecialChars ?? \"''\\\\s\";\r\n\r\n  if (user.length < min) {\r\n    errors.push(options.messages?.min || `Name must be at least ${min} characters`);\r\n  }\r\n\r\n  if (user.length > max) {\r\n    errors.push(options.messages?.max || `Name must be at most ${max} characters`);\r\n  }\r\n\r\n  if (containsBannedWords(user, options.bannedWords)) {\r\n    errors.push(options.messages?.bannedWords || \"Name contains banned words\");\r\n  }\r\n\r\n  if (/^\\s*$/.test(user)) {\r\n    errors.push(options.messages?.emptySpace || \"Name cannot be empty or contain only spaces\");\r\n  }\r\n\r\n  const regex = new RegExp(`^[a-zA-ZÀ-ÖØ-öø-ÿ${specialChars}]+$`);\r\n  if (!regex.test(user)) {\r\n    errors.push(options.messages?.invalidFormat || `Name can only contain letters and ${specialChars}`);\r\n  }\r\n\r\n  return {\r\n    valid: errors.length === 0,\r\n    errors: errors.length > 0 ? errors : undefined\r\n  };\r\n};\r\n\r\nexport const validateEmail = (\r\n  email: string,\r\n  options: EmailValidationOptions = {}\r\n): ValidationResult => {\r\n  const errors: string[] = [];\r\n  \r\n  const emailRegex = /^[a-zA-Z0-9._%+-]+@([a-zA-Z0-9.-]+\\.[a-zA-Z]{2,})$/;\r\n  const match = email.match(emailRegex);\r\n\r\n  if (!match) {\r\n    errors.push(options.messages?.invalidFormat || \"Invalid email format\");\r\n  } else if (options.allowedDomains && !options.allowedDomains.includes(match[1])) {\r\n    errors.push(options.messages?.allowedDomains || `Email domain must be one of: ${options.allowedDomains.join(', ')}`);\r\n  }\r\n\r\n  return {\r\n    valid: errors.length === 0,\r\n    errors: errors.length > 0 ? errors : undefined\r\n  };\r\n};\r\n\r\nexport const validatePassword = (\r\n  password: string,\r\n  options: PasswordValidationOptions = {}\r\n): ValidationResult => {\r\n  const errors: string[] = [];\r\n  \r\n  const min = options.min ?? 8;\r\n  const max = options.max ?? 100;\r\n  const specialChars = options.allowSpecialChars ?? \"!@#$%^&*()_+\";\r\n\r\n  if (password.length < min) {\r\n    errors.push(options.messages?.min || `Password must be at least ${min} characters`);\r\n  }\r\n\r\n  if (password.length > max) {\r\n    errors.push(options.messages?.max || `Password must be at most ${max} characters`);\r\n  }\r\n\r\n  if (containsBannedWords(password, options.bannedWords)) {\r\n    errors.push(options.messages?.bannedWords || \"Password contains banned words\");\r\n  }\r\n\r\n  const regex = new RegExp(\r\n    `^(?=.*[A-Z])(?=.*[a-z])(?=.*\\\\d)(?=.*[${specialChars}])[A-Za-z\\\\d${specialChars}]+$`\r\n  );\r\n  \r\n  if (!regex.test(password)) {\r\n    errors.push(options.messages?.invalidFormat || \"Password must contain at least one uppercase letter, one lowercase letter, one number and one special character\");\r\n  }\r\n\r\n  return {\r\n    valid: errors.length === 0,\r\n    errors: errors.length > 0 ? errors : undefined\r\n  };\r\n};\r\n\r\nexport const validateBirthDate = (\r\n  date: string,\r\n  options: { messages?: { invalidFormat?: string } } = {}\r\n): ValidationResult => {\r\n  const errors: string[] = [];\r\n  \r\n  const dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\r\n  if (!dateRegex.test(date)) {\r\n    errors.push(options.messages?.invalidFormat || \"Date must be in YYYY-MM-DD format\");\r\n  }\r\n\r\n  const birthDate = new Date(date);\r\n  if (isNaN(birthDate.getTime())) {\r\n    errors.push(options.messages?.invalidFormat || \"Invalid date\");\r\n  } else if (birthDate >= new Date()) {\r\n    errors.push(options.messages?.invalidFormat || \"Birth date must be in the past\");\r\n  }\r\n\r\n  return {\r\n    valid: errors.length === 0,\r\n    errors: errors.length > 0 ? errors : undefined\r\n  };\r\n};\r\n\r\nexport const validateAge = (\r\n  age: number,\r\n  options: AgeValidationOptions = {}\r\n): ValidationResult => {\r\n  const errors: string[] = [];\r\n  \r\n  const min = options.min ?? 18;\r\n  const max = options.max ?? 120;\r\n\r\n  if (!Number.isInteger(age)) {\r\n    errors.push(options.messages?.invalidFormat || \"Age must be an integer\");\r\n  }\r\n\r\n  if (age < min) {\r\n    errors.push(options.messages?.min || `Age must be at least ${min} years`);\r\n  }\r\n\r\n  if (age > max) {\r\n    errors.push(options.messages?.max || `Age must be at most ${max} years`);\r\n  }\r\n\r\n  return {\r\n    valid: errors.length === 0,\r\n    errors: errors.length > 0 ? errors : undefined\r\n  };\r\n};"],"mappings":"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","names":[]}