function maskAll(str: string) { return "*".repeat(str.length) } function maskAllButFirstChar(str: string) { const first = str[0] const rest = str.substring(1) const restMasked = maskAll(rest) return `${first}${restMasked}` } function maskAllButLastTwoChar(str: string) { const lastTwo = str.slice(-2) const rest = str.substring(0, str.length - 2) const restMasked = maskAll(rest) return `${restMasked}${lastTwo}` } export function email(str: string) { const parts = str.split("@") const aliasMasked = maskAllButFirstChar(parts[0]) if (parts[1]) { const domainParts = parts[1].split(".") if (domainParts.length > 1) { const domainTLD = domainParts.pop() const domainPartsMasked = domainParts .map((domainPart) => { return maskAllButFirstChar(domainPart) }) .join(".") return `${aliasMasked}@${domainPartsMasked}.${domainTLD}` } } return maskAllButFirstChar(str) } export function phone(str: string) { return maskAllButLastTwoChar(str) } export function text(str: string) { return maskAllButFirstChar(str) } export function all(str: string) { return maskAll(str) }