UNPKG

@ivandt/json-rules

Version:

Rule parsing engine for JSON rules

61 lines (60 loc) 2.41 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.validateEmail = validateEmail; const isEmail_1 = __importDefault(require("validator/lib/isEmail")); /** * Validates email addresses with configurable options */ function validateEmail(value, config = null) { // Must be a string if (typeof value !== "string") { return false; } // Use default config if none provided const validationConfig = config || {}; // Convert our config to validator.js options const options = { allow_display_name: validationConfig.allowDisplayName || false, require_display_name: validationConfig.requireDisplayName || false, allow_utf8_local_part: validationConfig.allowUtf8LocalPart || true, require_tld: validationConfig.requireTld !== false, // Default true allow_ip_domain: validationConfig.allowIpDomain || false, allow_underscores: validationConfig.allowUnderscores || false, domain_specific_validation: validationConfig.domainSpecificValidation || false, }; // Add blacklisted characters if specified if (validationConfig.blacklistedChars) { options.blacklisted_chars = validationConfig.blacklistedChars; } // Validate email format first const isValidFormat = (0, isEmail_1.default)(value, options); if (!isValidFormat) { return false; } // Extract domain for whitelist/blacklist checking const emailParts = value.split("@"); if (emailParts.length !== 2) { return false; } const domain = emailParts[1].toLowerCase(); // Check domain blacklist if (validationConfig.hostBlacklist && validationConfig.hostBlacklist.length > 0) { const blacklist = validationConfig.hostBlacklist.map((host) => host.toLowerCase()); if (blacklist.includes(domain)) { return false; } } // Check domain whitelist (if provided, only allow whitelisted domains) if (validationConfig.hostWhitelist && validationConfig.hostWhitelist.length > 0) { const whitelist = validationConfig.hostWhitelist.map((host) => host.toLowerCase()); if (!whitelist.includes(domain)) { return false; } } return true; }