runtyp
Version:
Lightning-fast, zero-dependency runtime validation for TS/JS. 25x faster than zod with a cleaner API.
44 lines • 1.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.email = void 0;
const tester = /^[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~](\.?[-!#$%&'*+/0-9=?A-Z^_a-z`{|}~])*@[a-zA-Z0-9](-*\.?[a-zA-Z0-9])*\.[a-zA-Z](-?[a-zA-Z0-9])+$/;
const INVALID_EMAIL_ERROR = {
isValid: false,
errors: { root: 'must be a valid email address' },
};
/**
* Validates an email address.
* Taken from https://github.com/manishsaraan/email-validator/blob/master/index.js
*/
function email() {
return (value) => {
if (typeof value !== 'string') {
return INVALID_EMAIL_ERROR;
}
const emailParts = value.split('@');
if (emailParts.length !== 2) {
return INVALID_EMAIL_ERROR;
}
const account = emailParts[0];
const address = emailParts[1];
if (account.length > 64) {
return INVALID_EMAIL_ERROR;
}
if (address.length > 255) {
return INVALID_EMAIL_ERROR;
}
const domainParts = address.split('.');
if (domainParts.some((part) => part.length > 63)) {
return INVALID_EMAIL_ERROR;
}
if (!tester.test(value)) {
return INVALID_EMAIL_ERROR;
}
return {
isValid: true,
value: value,
};
};
}
exports.email = email;
//# sourceMappingURL=email.js.map