31 lines
952 B
TypeScript
31 lines
952 B
TypeScript
/**
|
||
* Katalog aramasının paylaşılan metin eşleştirme yardımcıları.
|
||
* Hem /api/katalog-ara route'u hem de client'taki rehber araması kullanır —
|
||
* iki taraf aynı normalize kurallarıyla eşleşmeli.
|
||
*/
|
||
|
||
export function aramaNormalize(metin: string): string {
|
||
return metin
|
||
.toLocaleLowerCase("tr-TR")
|
||
.replace(/ı/g, "i")
|
||
.replace(/ş/g, "s")
|
||
.replace(/ğ/g, "g")
|
||
.replace(/ü/g, "u")
|
||
.replace(/ö/g, "o")
|
||
.replace(/ç/g, "c")
|
||
.replace(/â/g, "a")
|
||
.replace(/î/g, "i")
|
||
.replace(/û/g, "u")
|
||
.normalize("NFKD")
|
||
.replace(/[̀-ͯ]/g, "");
|
||
}
|
||
|
||
/** 0 = tam eşleşme, 1 = baş, 2 = kelime başı, 3 = geçiyor */
|
||
export function eslesmePuani(ad: string, sorgu: string): number {
|
||
const normalAd = aramaNormalize(ad);
|
||
if (normalAd === sorgu) return 0;
|
||
if (normalAd.startsWith(sorgu)) return 1;
|
||
if (normalAd.split(/\s+/).some((kelime) => kelime.startsWith(sorgu))) return 2;
|
||
return 3;
|
||
}
|