@cranberry-money/shared-utils
Version:
Shared utility functions for Blueberry platform
64 lines • 2.93 kB
JavaScript
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