İçeriğe geç
edumintsBlog
Backend3 dk okuma

Reylo: Kod Üretimine İhtiyaç Duymadan Tam Tip Çıkarımıyla .sql Dosyalarını TypeScript'e Aktarın

Kaynak: GitHub

Paylaş
İçindekiler 3 başlık

TypeScript ekosisteminde veritabanı işlemleri yaparken geliştiricilerin yaşadığı en büyük ikilemlerden biri, ham SQL sorgularının esnekliği ile ORM araçlarının sunduğu tip güvenliği (type safety) arasında seçim yapmaktır. Zod kütüphanesinin yaratıcısı Colin McDonnell (colinhacks) tarafından geliştirilen Reylo, bu ikilemi ortadan kaldıran yenilikçi bir araçtır. GitHub üzerinde kısa sürede 1.273 yıldız toplayan ve çekirdeği Rust diliyle yazılan bu proje, .sql dosyalarını doğrudan TypeScript projelerine aktarmanıza (import) ve hiçbir kod üretimi (zero codegen) adımı olmadan tam tip çıkarımı elde etmenize olanak tanır.

Reylo Nedir ve Geliştiriciler İçin Neden Değerlidir?#

Modern web geliştirmede veritabanı şeması ile uygulama kodu arasındaki senkronizasyonu korumak kritik bir süreçtir. Çoğu geliştirici karmaşık sorgularda ORM'lerin yetersiz kaldığı durumlarda ham SQL yazmayı tercih eder; ancak bu durum genellikle TypeScript'in sağladığı otomatik tamamlama ve derleme zamanı hata kontrolü avantajlarının kaybedilmesiyle sonuçlanır.

Reylo, bu sorunu şu temel özelliklerle çözer:

  • Sıfır Kod Üretimi (Zero Codegen): Arka planda sürekli çalışması gereken dosya izleyicilere (watchers), CLI komutlarına veya versiyon kontrolünü kirleten otomatik üretilmiş .ts dosyalarına ihtiyaç duymaz.
  • Tam Tip Çıkarımı (Full Type Inference): SQL sorgularınızdaki girdi parametrelerini ve dönüş tiplerini doğrudan analiz ederek TypeScript dil sunucusuna (LSP) bildirir.
  • Rust Performansı: Alt yapısında Rust kullanılması sayesinde SQL ayrıştırma (parsing) ve tip analizi işlemleri milisaniyeler içinde gerçekleşir, böylece IDE performansını olumsuz etkilemez.

Pratik Kullanım Senaryoları ve Örnekler#

Reylo ile çalışmak, standart bir JavaScript modülünü içe aktarmak kadar basittir. İş akışı genellikle şu adımlardan oluşur:

  • 1. SQL Dosyasını Oluşturma: Projenizde standart bir .sql dosyası (örneğin getUsersByRole.sql) oluşturup parametreli sorgunuzu yazarsınız.
  • 2. Doğrudan İçe Aktarma: TypeScript dosyanızda import getUsersByRole from './getUsersByRole.sql' şeklinde dosyayı çağırırsınız.
  • 3. Tip Güvenli Çalıştırma: İçe aktardığınız sorguyu veritabanı istemcinizle çalıştırdığınızda, Reylo sorgunun beklediği parametre tiplerini ve dönecek satırların (rows) yapısını otomatik olarak bilir.

Bu yaklaşım özellikle karmaşık analitik sorgular, CTE (Common Table Expressions) yapıları ve performans odaklı mikroservisler geliştiren ekipler için büyük bir zaman tasarrufu sağlar. SQL dosyalarını değiştirdiğiniz anda TypeScript derleyicisi olası tip uyuşmazlıklarını anında yakalar.

Benzer Araçlarla Karşılaştırma#

TypeScript dünyasında veritabanı etkileşimi için kullanılan mevcut araçlarla karşılaştırıldığında Reylo benzersiz bir konumda yer alır:

  • Prisma ve Drizzle ORM: Bu araçlar kendi özel DSL'lerini veya şema tanımlarını kullanır. Çok güçlü olsalar da geliştiriciyi saf SQL yazmaktan uzaklaştırırlar veya Prisma örneğinde olduğu gibi ağır bir prisma generate adımına ihtiyaç duyarlar.
  • PgTyped ve SQLc: Ham SQL dosyalarından tip güvenli kod üreten harika araçlardır. Ancak her SQL değişikliğinde bir CLI komutu çalıştırarak yeni TypeScript dosyaları üretmeyi (codegen) zorunlu kılarlar. Reylo, bu ek derleme adımını tamamen ortadan kaldırarak doğrudan import deneyimi sunar.
  • Kysely: TypeScript içinde tip güvenli sorgu oluşturucusu (query builder) sunar ancak sorguları .sql dosyalarında tutmak yerine TypeScript sözdizimi ile yazmanızı gerektirir.

Sonuç olarak Reylo, saf SQL'in gücünden ödün vermek istemeyen ancak TypeScript'in katı tip güvenliğini ve geliştirici deneyimini arayan yazılımcılar için modern, hızlı ve zahmetsiz bir köprü kurmaktadır.

Kaynak ve atıf

Bu yazı, GitHub üzerinde yayımlanan içerikten yararlanılarak Edumints tarafından yapay zekâ desteğiyle Türkçe hazırlandı. Ayrıntılar ve yazarların kendi anlatımı için orijinaline bakabilirsin:

  • github.com/colinhacks/reylo