--- interface Props { email?: string; phone?: string; hrefValue?: string; linkText?: string; obfuscatedText?: string; class?: string; id?: string; } const { email, phone, hrefValue, linkText, obfuscatedText, class: className, id } = Astro.props; if ((email ? 1 : 0) + (phone ? 1 : 0) !== 1) { throw new Error('ContactObfuscation requires exactly one of email or phone.'); } const contactType = email ? 'email' : 'phone'; const sourceValue = email ?? phone ?? ''; const linkValue = linkText ?? sourceValue; const fallbackText = obfuscatedText ?? sourceValue; const protocol = email ? 'mailto' : 'tel'; const telHrefValue = hrefValue ?? sourceValue.replace(/[^\d+]/g, ''); const targetValue = email ? (hrefValue ?? sourceValue) : telHrefValue; const encode = (value: string) => Array.from(value, (character) => character.charCodeAt(0)); const encodedTarget = encode(targetValue); const encodedText = encode(linkValue); const spanId = id ?? `${contactType}-obfuscation-${Math.random().toString(36).slice(2, 10)}`; --- {fallbackText}