@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
JavaScript
;
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;