UNPKG

n4s

Version:

typed schema validation version of enforce

122 lines (118 loc) 5.08 kB
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