zod vs joi vs yup vs superstruct vs io-ts vs runtypes
"Veri Doğrulama ve Şemalar" npm Paketleri Karşılaştırması
1 Yıl
zodjoiyupsuperstructio-tsruntypesBenzer Paketler:
Veri Doğrulama ve Şemalar Nedir?

Veri doğrulama ve şemalar, uygulamalarda kullanıcıdan veya harici kaynaklardan alınan verilerin belirli bir yapıya, türlere ve kurallara uygun olup olmadığını kontrol etmek için kullanılan yöntemlerdir. Bu, hatalı veya beklenmeyen verilerin işlenmesini önlemek, uygulamanın güvenliğini artırmak ve veri bütünlüğünü sağlamak için önemlidir. JavaScript ve TypeScript gibi dillerde, veri doğrulama kütüphaneleri, geliştiricilerin bu tür kontrolleri kolayca tanımlamasına ve uygulamasına yardımcı olur. io-ts, joi, runtypes, superstruct, yup, ve zod gibi kütüphaneler, farklı yaklaşımlar ve özellikler sunarak veri doğrulama süreçlerini basit ve etkili hale getirir.

npm İndirme Trendi
GitHub Stars Sıralaması
İstatistik Detayı
Paket
İndirmeler
Stars
Boyut
Issues
Yayın Tarihi
Lisans
zod31,580,26138,4131.62 MB596il y a 19 heuresMIT
joi12,287,15321,107531 kB190il y a un anBSD-3-Clause
yup7,573,75123,394260 kB246il y a 6 moisMIT
superstruct2,770,4767,121182 kB98il y a un anMIT
io-ts2,005,7086,779460 kB164il y a 6 moisMIT
runtypes190,0962,654312 kB20il y a 4 moisMIT
Özellik Karşılaştırması: zod vs joi vs yup vs superstruct vs io-ts vs runtypes

TypeScript Desteği

  • zod:

    zod, TypeScript ile mükemmel uyumlu bir doğrulama kütüphanesidir. Tür çıkarımı (type inference) konusunda oldukça güçlüdür ve TypeScript projeleri için ideal bir seçimdir.

  • joi:

    joi, TypeScript desteği sunar, ancak tür çıkarımı (type inference) konusunda io-ts kadar güçlü değildir. Yine de, doğrulama şemaları oluştururken TypeScript ile uyumlu çalışır.

  • yup:

    yup, TypeScript ile uyumlu bir şekilde çalışır ve tür çıkarımı konusunda iyi bir destek sunar. Özellikle nesne ve dizi doğrulama için zincirleme (chainable) bir API sunar.

  • superstruct:

    superstruct, TypeScript ile uyumlu bir şekilde çalışır, ancak tür çıkarımı konusunda sınırlı özellikler sunar. Yine de, basit ve anlaşılır bir API ile TypeScript projelerinde kullanılabilir.

  • io-ts:

    io-ts, TypeScript ile sıkı bir entegrasyon sunar ve runtime (çalışma zamanı) veri doğrulama ile tür güvenliğini birleştirir. Bu, geliştiricilerin hem tür tanımları hem de doğrulama kuralları için aynı yapıyı kullanmalarına olanak tanır.

  • runtypes:

    runtypes, TypeScript tür tanımları ile uyumlu bir şekilde çalışır ve tür güvenliğini artırırken, doğrulama işlemlerini de kolaylaştırır. Bu, geliştiricilerin türleri ve doğrulama kurallarını aynı anda yönetmelerine yardımcı olur.

Doğrulama Şeması Oluşturma

  • zod:

    zod, basit ve hızlı bir şekilde doğrulama şemaları oluşturmayı sağlar. TypeScript ile tam uyumlu çalışır ve minimal bir API sunar.

  • joi:

    joi, nesne tabanlı doğrulama için kapsamlı ve hiyerarşik şemalar oluşturmayı kolaylaştırır. Özellikle, karmaşık nesne yapıları için güçlüdür.

  • yup:

    yup, özellikle nesne ve dizi doğrulama için zincirleme (chainable) bir API sunar. Hata mesajlarını özelleştirme konusunda da güçlüdür.

  • superstruct:

    superstruct, hafif ve esnek bir yapı ile hızlı bir şekilde doğrulama şemaları oluşturmayı sağlar. Basit ve anlaşılır bir API sunar.

  • io-ts:

    io-ts, doğrulama şemalarını TypeScript tür tanımları ile birlikte oluşturur. Bu, tür güvenliğini artırırken, aynı zamanda runtime (çalışma zamanı) doğrulama sağlar.

  • runtypes:

    runtypes, basit ve okunabilir doğrulama şemaları oluşturur. TypeScript tür tanımları ile uyumlu çalışarak, tür güvenliğini artırır.

Hata Mesajları Özelleştirme

  • zod:

    zod, hata mesajlarını özelleştirmek için basit bir yöntem sunar. Ancak, özelleştirme konusunda sınırlı özellikler sunar.

  • joi:

    joi, hata mesajlarını özelleştirme konusunda oldukça güçlüdür. Her bir doğrulama kuralı için özel hata mesajları tanımlamak mümkündür.

  • yup:

    yup, hata mesajlarını özelleştirme konusunda iyi bir destek sunar. Özellikle, her bir doğrulama kuralı için özel mesajlar tanımlamak mümkündür.

  • superstruct:

    superstruct, hata mesajlarını özelleştirmek için basit bir yaklaşım sunar. Ancak, özelleştirme yetenekleri sınırlıdır.

  • io-ts:

    io-ts, hata mesajlarını özelleştirmek için sınırlı destek sunar. Ancak, doğrulama hataları hakkında ayrıntılı bilgi sağlar.

  • runtypes:

    runtypes, hata mesajlarını özelleştirmek için basit bir yöntem sunar. Ancak, özelleştirme konusunda joi kadar kapsamlı değildir.

Asenkron Doğrulama Desteği

  • zod:

    zod, asenkron doğrulama desteği sunar ve Promise tabanlı doğrulama işlemlerini destekler. Bu, özellikle veritabanı doğrulama gibi asenkron işlemler için faydalıdır.

  • joi:

    joi, asenkron doğrulama desteği sunar ve Promise tabanlı doğrulama işlemlerini destekler. Bu, özellikle veritabanı doğrulama gibi asenkron işlemler için faydalıdır.

  • yup:

    yup, asenkron doğrulama desteği sunar ve Promise tabanlı doğrulama işlemlerini destekler. Bu, özellikle veritabanı doğrulama gibi asenkron işlemler için faydalıdır.

  • superstruct:

    superstruct, asenkron doğrulama desteği sunmaz. Ancak, doğrulama işlemleri sırasında Promise (vaat) nesneleri ile çalışmak mümkündür.

  • io-ts:

    io-ts, asenkron doğrulama desteği sunmaz. Ancak, doğrulama işlemleri sırasında Promise (vaat) nesneleri ile çalışmak mümkündür.

  • runtypes:

    runtypes, asenkron doğrulama desteği sunmaz. Ancak, doğrulama işlemleri sırasında Promise (vaat) nesneleri ile çalışmak mümkündür.

Örnek Kod

  • zod:

    zod ile Basit Doğrulama Örneği

    import { z } from 'zod';
    
    const UserSchema = z.object({
      name: z.string(),
      age: z.number().min(0),
    });
    
    const result = UserSchema.safeParse({ name: 'Alice', age: 30 });
    
    if (result.success) {
      console.log('Doğrulama Başarılı:', result.data);
    } else {
      console.error('Doğrulama Hatası:', result.error);
    }
    
  • joi:

    joi ile Basit Doğrulama Örneği

    const Joi = require('joi');
    
    const schema = Joi.object({
      name: Joi.string().required(),
      age: Joi.number().integer().min(0).required(),
    });
    
    const { error, value } = schema.validate({ name: 'Alice', age: 30 });
    
    if (error) {
      console.error('Doğrulama Hatası:', error.details);
    } else {
      console.log('Doğrulama Başarılı:', value);
    }
    
  • yup:

    yup ile Basit Doğrulama Örneği

    import * as yup from 'yup';
    
    const schema = yup.object().shape({
      name: yup.string().required(),
      age: yup.number().integer().min(0).required(),
    });
    
    schema.validate({ name: 'Alice', age: 30 })
      .then((value) => {
        console.log('Doğrulama Başarılı:', value);
      })
      .catch((err) => {
        console.error('Doğrulama Hatası:', err);
      });
    
  • superstruct:

    superstruct ile Basit Doğrulama Örneği

    import { struct } from 'superstruct';
    
    const User = struct({
      name: 'string',
      age: 'number',
    });
    
    const user = { name: 'Alice', age: 30 };
    
    if (User(user)) {
      console.log('Doğrulama Başarılı:', user);
    } else {
      console.error('Doğrulama Hatası');
    }
    
  • io-ts:

    io-ts ile Basit Doğrulama Örneği

    import * as t from 'io-ts';
    
    const User = t.type({
      name: t.string,
      age: t.number,
    });
    
    const result = User.decode({ name: 'Alice', age: 30 });
    
    if (result._tag === 'Right') {
      console.log('Doğrulama Başarılı:', result.right);
    } else {
      console.error('Doğrulama Hatası:', result.left);
    }
    
  • runtypes:

    runtypes ile Basit Doğrulama Örneği

    import { Runtype, String, Number, Record } from 'runtypes';
    
    const User = Record({
      name: String,
      age: Number,
    });
    
    const result = User.check({ name: 'Alice', age: 30 });
    console.log('Doğrulama Başarılı:', result);
    
Nasıl Seçilir: zod vs joi vs yup vs superstruct vs io-ts vs runtypes
  • zod:

    zod kütüphanesini, TypeScript ile tam uyumlu, basit ve hızlı bir doğrulama kütüphanesi arıyorsanız seçin. Özellikle, tür çıkarımı (type inference) konusunda güçlüdür ve minimal bir API sunar.

  • joi:

    joi kütüphanesini, karmaşık ve hiyerarşik veri yapıları için kapsamlı doğrulama şemaları oluşturmak istiyorsanız seçin. Özellikle, nesne tabanlı doğrulama ve hata mesajlarını özelleştirme konusunda güçlüdür.

  • yup:

    yup kütüphanesini, özellikle nesne ve dizi doğrulama için zincirleme (chainable) bir API arıyorsanız tercih edin. Hata mesajlarını özelleştirme ve asenkron doğrulama gibi özellikleri ile dikkat çeker.

  • superstruct:

    superstruct kütüphanesini, hafif ve esnek bir yapı ile hızlı bir şekilde doğrulama şemaları oluşturmak istiyorsanız seçin. Özellikle, basit ve anlaşılır bir API arayanlar için idealdir.

  • io-ts:

    io-ts kütüphanesini, TypeScript ile sıkı bir entegrasyon ve tür güvenliği sağlamak istiyorsanız tercih edin. Özellikle, runtime (çalışma zamanı) veri doğrulama ile TypeScript türlerini birleştirmek istiyorsanız idealdir.

  • runtypes:

    runtypes kütüphanesini, TypeScript tür tanımları ile uyumlu, basit ve okunabilir bir doğrulama yöntemi arıyorsanız tercih edin. Tür güvenliğini artırırken, doğrulama işlemlerini de kolaylaştırır.