UNPKG

@stacksjs/ts-validation

Version:

A simple TypeScript starter kit using Bun.

95 lines (90 loc) 3.9 kB
declare const default_normalize_email_options: { all_lowercase: true; gmail_lowercase: true; gmail_remove_dots: true; gmail_remove_subaddress: true; gmail_convert_googlemaildotcom: true; outlookdotcom_lowercase: true; outlookdotcom_remove_subaddress: true; yahoo_lowercase: true; yahoo_remove_subaddress: true; yandex_lowercase: true; yandex_convert_yandexru: true; icloud_lowercase: true; icloud_remove_subaddress: true }; declare const icloud_domains: Array<unknown | unknown>; declare const outlookdotcom_domains: Array<unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown>; declare const yahoo_domains: Array<unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown | unknown>; declare const yandex_domains: Array<unknown | unknown | unknown | unknown | unknown | unknown>; declare function dotsReplacer(match: string): void; export default function normalizeEmail(email: string, options: Partial<NormalizeEmailOptions> = {}): string | false { options = merge(options, default_normalize_email_options) const raw_parts = email.split('@') const domain = raw_parts.pop() const user = raw_parts.join('@') const parts = [user, domain] if (!parts[0] || !parts[1]) { return false } parts[1] = parts[1].toLowerCase() if (parts[1] === 'gmail.com' || parts[1] === 'googlemail.com') { if (options.gmail_remove_subaddress) { parts[0] = parts[0].split('+')[0] } if (options.gmail_remove_dots) { parts[0] = parts[0].replace(/\.+/g, dotsReplacer) } if (!parts[0].length) { return false } if (options.all_lowercase || options.gmail_lowercase) { parts[0] = parts[0].toLowerCase() } parts[1] = options.gmail_convert_googlemaildotcom ? 'gmail.com' : parts[1] } else if (icloud_domains.includes(parts[1])) { if (options.icloud_remove_subaddress) { parts[0] = parts[0].split('+')[0] } if (!parts[0].length) { return false } if (options.all_lowercase || options.icloud_lowercase) { parts[0] = parts[0].toLowerCase() } } else if (outlookdotcom_domains.includes(parts[1])) { if (options.outlookdotcom_remove_subaddress) { parts[0] = parts[0].split('+')[0] } if (!parts[0].length) { return false } if (options.all_lowercase || options.outlookdotcom_lowercase) { parts[0] = parts[0].toLowerCase() } } else if (yahoo_domains.includes(parts[1])) { if (options.yahoo_remove_subaddress) { const components = parts[0].split('-') parts[0] = (components.length > 1) ? components.slice(0, -1).join('-') : components[0] } if (!parts[0].length) { return false } if (options.all_lowercase || options.yahoo_lowercase) { parts[0] = parts[0].toLowerCase() } } else if (yandex_domains.includes(parts[1])) { if (options.all_lowercase || options.yandex_lowercase) { parts[0] = parts[0].toLowerCase() } parts[1] = options.yandex_convert_yandexru ? 'yandex.ru' : parts[1] } else if (options.all_lowercase) { parts[0] = parts[0].toLowerCase() } return parts.join('@') };