n4s
Version:
typed schema validation version of enforce
122 lines (118 loc) • 5.08 kB
JavaScript
const require_n4s = require('../n4s-BTHEz-bJ.cjs');
const require_merge = require('../merge-Co1t_slP.cjs');
const require_isIP = require('../isIP-BBSgBWBl.cjs');
//#region ../../node_modules/validator/es/lib/isByteLength.js
function _typeof(obj) {
"@babel/helpers - typeof";
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") _typeof = function _typeof$1(obj$1) {
return typeof obj$1;
};
else _typeof = function _typeof$1(obj$1) {
return obj$1 && typeof Symbol === "function" && obj$1.constructor === Symbol && obj$1 !== Symbol.prototype ? "symbol" : typeof obj$1;
};
return _typeof(obj);
}
function isByteLength(str, options) {
require_merge.assertString(str);
var min;
var max;
if (_typeof(options) === "object") {
min = options.min || 0;
max = options.max;
} else {
min = arguments[1];
max = arguments[2];
}
var len = encodeURI(str).split(/%..|./).length - 1;
return len >= min && (typeof max === "undefined" || len <= max);
}
//#endregion
//#region ../../node_modules/validator/es/lib/isEmail.js
var default_email_options = {
allow_display_name: false,
require_display_name: false,
allow_utf8_local_part: true,
require_tld: true,
blacklisted_chars: "",
ignore_max_length: false,
host_blacklist: [],
host_whitelist: []
};
var splitNameAddress = /^([^\x00-\x1F\x7F-\x9F\cX]+)</i;
var emailUserPart = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~]+$/i;
var gmailUserPart = /^[a-z\d]+$/;
var quotedEmailUser = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f]))*$/i;
var emailUserUtf8Part = /^[a-z\d!#\$%&'\*\+\-\/=\?\^_`{\|}~\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+$/i;
var quotedEmailUserUtf8 = /^([\s\x01-\x08\x0b\x0c\x0e-\x1f\x7f\x21\x23-\x5b\x5d-\x7e\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]|(\\[\x01-\x09\x0b\x0c\x0d-\x7f\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))*$/i;
var defaultMaxEmailLength = 254;
/**
* Validate display name according to the RFC2822: https://tools.ietf.org/html/rfc2822#appendix-A.1.2
* @param {String} display_name
*/
function validateDisplayName(display_name) {
var display_name_without_quotes = display_name.replace(/^"(.+)"$/, "$1");
if (!display_name_without_quotes.trim()) return false;
if (/[\.";<>]/.test(display_name_without_quotes)) {
if (display_name_without_quotes === display_name) return false;
if (!(display_name_without_quotes.split("\"").length === display_name_without_quotes.split("\\\"").length)) return false;
}
return true;
}
function isEmail(str, options) {
require_merge.assertString(str);
options = require_merge.merge(options, default_email_options);
if (options.require_display_name || options.allow_display_name) {
var display_email = str.match(splitNameAddress);
if (display_email) {
var display_name = display_email[1];
str = str.replace(display_name, "").replace(/(^<|>$)/g, "");
if (display_name.endsWith(" ")) display_name = display_name.slice(0, -1);
if (!validateDisplayName(display_name)) return false;
} else if (options.require_display_name) return false;
}
if (!options.ignore_max_length && str.length > defaultMaxEmailLength) return false;
var parts = str.split("@");
var domain = parts.pop();
var lower_domain = domain.toLowerCase();
if (options.host_blacklist.includes(lower_domain)) return false;
if (options.host_whitelist.length > 0 && !options.host_whitelist.includes(lower_domain)) return false;
var user = parts.join("@");
if (options.domain_specific_validation && (lower_domain === "gmail.com" || lower_domain === "googlemail.com")) {
user = user.toLowerCase();
var username = user.split("+")[0];
if (!isByteLength(username.replace(/\./g, ""), {
min: 6,
max: 30
})) return false;
var _user_parts = username.split(".");
for (var i = 0; i < _user_parts.length; i++) if (!gmailUserPart.test(_user_parts[i])) return false;
}
if (options.ignore_max_length === false && (!isByteLength(user, { max: 64 }) || !isByteLength(domain, { max: 254 }))) return false;
if (!require_isIP.isFQDN(domain, {
require_tld: options.require_tld,
ignore_max_length: options.ignore_max_length
})) {
if (!options.allow_ip_domain) return false;
if (!require_isIP.isIP(domain)) {
if (!domain.startsWith("[") || !domain.endsWith("]")) return false;
var noBracketdomain = domain.slice(1, -1);
if (noBracketdomain.length === 0 || !require_isIP.isIP(noBracketdomain)) return false;
}
}
if (user[0] === "\"") {
user = user.slice(1, user.length - 1);
return options.allow_utf8_local_part ? quotedEmailUserUtf8.test(user) : quotedEmailUser.test(user);
}
var pattern = options.allow_utf8_local_part ? emailUserUtf8Part : emailUserPart;
var user_parts = user.split(".");
for (var _i = 0; _i < user_parts.length; _i++) if (!pattern.test(user_parts[_i])) return false;
if (options.blacklisted_chars) {
if (user.search(new RegExp("[".concat(options.blacklisted_chars, "]+"), "g")) !== -1) return false;
}
return true;
}
//#endregion
//#region src/exports/email.ts
require_n4s.enforce.extend({ isEmail });
//#endregion
//# sourceMappingURL=email.cjs.map