// Shared search normalization: transliterate cyrillic to latin, lowercase, // drop latin y so "Sofia" matches "София" and vice versa. Used by both the // client-side city selector and the server-side office filter. export function toSearch(s: string): string { return s .toLowerCase() .replace(/щ/g, 'sht') .replace(/ш/g, 'sh') .replace(/ч/g, 'ch') .replace(/ж/g, 'zh') .replace(/ц/g, 'ts') .replace(/ю/g, 'yu') .replace(/я/g, 'ya') .replace(/ъ/g, 'a') .replace(/ь/g, 'y') .replace(/й/g, 'i') .replace(/а/g, 'a') .replace(/б/g, 'b') .replace(/в/g, 'v') .replace(/г/g, 'g') .replace(/д/g, 'd') .replace(/е/g, 'e') .replace(/з/g, 'z') .replace(/и/g, 'i') .replace(/к/g, 'k') .replace(/л/g, 'l') .replace(/м/g, 'm') .replace(/н/g, 'n') .replace(/о/g, 'o') .replace(/п/g, 'p') .replace(/р/g, 'r') .replace(/с/g, 's') .replace(/т/g, 't') .replace(/у/g, 'u') .replace(/ф/g, 'f') .replace(/х/g, 'h') .replace(/y/g, '') .replace(/[^a-z0-9 ]/g, ' ') .replace(/\s+/g, ' ') .trim(); }