emr-types
Version:
Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation
61 lines • 1.82 kB
JavaScript
/**
* Email Factory Functions
*/
export const EmailFactory = {
/**
* Create an email from string
*/
create: (value) => {
const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
const isValid = emailRegex.test(value);
if (!isValid) {
throw new Error(`Invalid email address: ${value}`);
}
const parts = value.split('@');
const localPart = parts[0] || '';
const domain = parts[1] || '';
return {
value,
isValid: true,
localPart,
domain,
validatedAt: new Date()
};
},
/**
* Create an email from parts
*/
fromParts: (localPart, domain) => {
const value = `${localPart}@${domain}`;
return EmailFactory.create(value);
}
};
/**
* Email Validation Functions
*/
export const EmailValidator = {
/**
* Check if a string is a valid email
*/
isValid: (value) => {
const emailRegex = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/;
return emailRegex.test(value);
},
/**
* Check if email is from a common provider
*/
isCommonProvider: (email) => {
const commonProviders = [
'gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com',
'icloud.com', 'protonmail.com', 'mail.com'
];
return commonProviders.includes(email.domain.toLowerCase());
},
/**
* Check if email is from a business domain
*/
isBusinessEmail: (email) => {
return !EmailValidator.isCommonProvider(email);
}
};
//# sourceMappingURL=Email.js.map