const UMLAUT_MAP: Record = { ä: 'ae', ö: 'oe', ü: 'ue', ß: 'ss', Ä: 'Ae', Ö: 'Oe', Ü: 'Ue', } export function slugify(input: string): string { return ( input // Transliterate German umlauts .replace(/[äöüßÄÖÜ]/g, (ch) => UMLAUT_MAP[ch] ?? ch) .toLowerCase() // Remove non-ASCII characters .replace(/[^\x20-\x7E]/g, '') // Replace non-alphanumeric characters with hyphens .replace(/[^a-z0-9]+/g, '-') // Collapse consecutive hyphens .replace(/-{2,}/g, '-') // Trim leading/trailing hyphens .replace(/^-|-$/g, '') // Truncate to 60 characters .slice(0, 60) ) }