UNPKG

@cranberry-money/shared-utils

Version:

Shared utility functions for Blueberry platform

64 lines 2.93 kB
import { USER_PROFILE_VALIDATION, INVESTMENT_PREFERENCES_VALIDATION } from '@cranberry-money/shared-constants'; export function isNumericOnly(str) { return /^\d+$/.test(str); } export function validatePassword(password, minLength = 8) { const lengthValid = password.length >= minLength; const notNumeric = !isNumericOnly(password); return { isValid: lengthValid && notNumeric, lengthValid, notNumeric, }; } export function isValidTokenFormat(token, exactLength = 6) { const trimmedToken = token.trim(); // Validate for exactly N digits (default 6) const pattern = new RegExp(`^[0-9]{${exactLength}}$`); return pattern.test(trimmedToken); } export function formatVerificationToken(token) { // Only keep digits for numeric tokens return token.trim().replace(/[^0-9]/g, ''); } export function validateEmailConfirmation(token, exactLength = 6) { const formattedToken = formatVerificationToken(token); return { isValid: formattedToken.length === exactLength && isValidTokenFormat(formattedToken, exactLength), isEmpty: formattedToken.length === 0, isValidFormat: isValidTokenFormat(formattedToken, exactLength), }; } export function isValidPhoneFormat(phoneNumber, minLength = 8) { const trimmedPhone = phoneNumber.trim(); return trimmedPhone.length >= minLength && /^[+\-\s\d()]+$/.test(trimmedPhone); } export function isValidFullName(fullName, minParts = USER_PROFILE_VALIDATION.MIN_NAME_PARTS) { const trimmedName = fullName.trim(); const nameParts = trimmedName.split(/\s+/); return nameParts.length >= minParts && nameParts.every(part => part.length > 0); } export function isValidDateOfBirth(dateOfBirth, minAge = USER_PROFILE_VALIDATION.MIN_AGE, maxAge = USER_PROFILE_VALIDATION.MAX_AGE) { if (!dateOfBirth) return false; const birthDate = new Date(dateOfBirth); const today = new Date(); const age = today.getFullYear() - birthDate.getFullYear(); const monthDiff = today.getMonth() - birthDate.getMonth(); const dayDiff = today.getDate() - birthDate.getDate(); const actualAge = monthDiff < 0 || (monthDiff === 0 && dayDiff < 0) ? age - 1 : age; return actualAge >= minAge && actualAge <= maxAge && birthDate <= today; } export function formatPhoneNumber(phoneNumber) { return phoneNumber.trim(); } export function isValidInvestmentAmount(amount, minAmount = INVESTMENT_PREFERENCES_VALIDATION.MIN_INVESTMENT_AMOUNT, maxAmount = INVESTMENT_PREFERENCES_VALIDATION.MAX_INVESTMENT_AMOUNT) { return amount >= minAmount && amount <= maxAmount; } export function isValidSourceOfFunds(sources, minSources = INVESTMENT_PREFERENCES_VALIDATION.MIN_SOURCE_OF_FUNDS) { return sources && sources.length >= minSources; } export function hasMinimumSelection(items, minItems = 1) { return items && items.length >= minItems; } //# sourceMappingURL=validation.js.map