UNPKG

tr-slugify

Version:

Türkçe özel karakterleri doğru çeviren ve URL için mükemmel slug'lar oluşturan npm paketi

99 lines (98 loc) 3.07 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.trSlugify = trSlugify; exports.trSlugifyMultiple = trSlugifyMultiple; exports.trSlugifyUnique = trSlugifyUnique; /** * Türkçe karakterleri İngilizce karşılıklarına çeviren harita */ const TURKISH_CHAR_MAP = { ç: "c", Ç: "C", ğ: "g", Ğ: "G", ı: "i", I: "I", İ: "I", ö: "o", Ö: "O", ş: "s", Ş: "S", ü: "u", Ü: "U", }; /** * Türkçe metni URL-friendly slug'a çevirir * @param text - Çevrilecek metin * @param options - Slugify seçenekleri * @returns URL-friendly slug */ function trSlugify(text, options = {}) { const { separator = "-", lowercase = true, removeSpecialChars = true, collapseSeparators = true, trimSeparators = true, } = options; if (!text || typeof text !== "string") { return ""; } let result = text; // Türkçe karakterleri çevir for (const [turkishChar, englishChar] of Object.entries(TURKISH_CHAR_MAP)) { result = result.replace(new RegExp(turkishChar, "g"), englishChar); } // Küçük harfe çevir if (lowercase) { result = result.toLowerCase(); } // Özel karakterleri kaldır veya ayırıcıya çevir if (removeSpecialChars) { // Alfanumerik olmayan karakterleri ayırıcıya çevir result = result.replace(/[^a-zA-Z0-9\s]/g, separator); } // Boşlukları ayırıcıya çevir result = result.replace(/\s+/g, separator); // Çoklu ayırıcıları tek ayırıcıya çevir if (collapseSeparators) { const separatorRegex = new RegExp(`${escapeRegExp(separator)}+`, "g"); result = result.replace(separatorRegex, separator); } // Başındaki ve sonundaki ayırıcıları kaldır if (trimSeparators) { const separatorRegex = new RegExp(`^${escapeRegExp(separator)}+|${escapeRegExp(separator)}+$`, "g"); result = result.replace(separatorRegex, ""); } return result; } /** * Regex özel karakterlerini escape eder * @param string - Escape edilecek string * @returns Escape edilmiş string */ function escapeRegExp(string) { return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); } /** * Birden fazla metni slug'a çevirir * @param texts - Çevrilecek metinler dizisi * @param options - Slugify seçenekleri * @returns Slug'lar dizisi */ function trSlugifyMultiple(texts, options = {}) { return texts.map((text) => trSlugify(text, options)); } /** * Metni slug'a çevirir ve benzersiz olmasını sağlar * @param text - Çevrilecek metin * @param existingSlugs - Mevcut slug'lar dizisi * @param options - Slugify seçenekleri * @returns Benzersiz slug */ function trSlugifyUnique(text, existingSlugs = [], options = {}) { let slug = trSlugify(text, options); let counter = 1; let uniqueSlug = slug; while (existingSlugs.includes(uniqueSlug)) { uniqueSlug = `${slug}-${counter}`; counter++; } return uniqueSlug; } // Varsayılan export exports.default = trSlugify;