UNPKG

@type-ddd/email

Version:

Library that provides TypeScript type definitions for handling Email in Domain-Driven Design contexts. It facilitates the validation and manipulation of emails.

70 lines (69 loc) 2.35 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Email = void 0; const rich_domain_1 = require("rich-domain"); const email_validator_util_1 = require("./email.validator.util"); class Email extends rich_domain_1.ValueObject { constructor(props) { super(props); } value() { return this.props; } nick() { return this.props.slice(0, this.props.indexOf('@')); } domain() { return this.props .slice(this.props.indexOf('@') + 1); } static isValid(value) { return this.isValidProps(value); } /** * @description validate email value * @param email string * @returns true if email value is valid and returns false if not. * * @requires email not greater than 256 char. * @requires contain symbol @ * @requires contain [domain].[org].[optional country] * @requires contain [nick letters] with [hifen or numbers] * @requires starts [a-z] * @requires ends [a-z] */ static isValidProps(email) { const isValid = (0, email_validator_util_1.default)(email); if (!isValid) return false; const domain = email.slice(email.indexOf('@') + 1).toLowerCase(); const isBlockedDomain = Email.BLOCKED_DOMAINS.map((blockedDomain) => blockedDomain.toLowerCase().includes(domain)).includes(true); if (Email.VALID_DOMAINS.length === 0) { return !isBlockedDomain; } const isAvailable = Email.VALID_DOMAINS.map((freeDomain) => freeDomain.toLowerCase().includes(domain)).includes(true); return isAvailable && !isBlockedDomain; } /** * * @param value value as string * @returns instance of Email or throw an error */ static init(value) { const isValidValue = Email.isValidProps(value); if (!isValidValue) throw new Error(Email.MESSAGE); return new Email(value.toLowerCase()); } static create(value) { if (!Email.isValidProps(value)) { return rich_domain_1.Result.fail(Email.MESSAGE); } return rich_domain_1.Result.Ok(new Email(value.toLowerCase())); } } exports.Email = Email; Email.BLOCKED_DOMAINS = []; Email.VALID_DOMAINS = []; Email.MESSAGE = 'Invalid email'; exports.default = Email;