UNPKG

emr-types

Version:

Comprehensive TypeScript Types Library for Electronic Medical Record (EMR) Applications - Domain-Driven Design with Zod Validation

61 lines 1.82 kB
/** * 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