Skip to content

Schema सपोर्ट

zod-v4-mocks द्वारा सपोर्टेड Zod स्कीमा की सूची।

बेसिक टाइप (Primitives)

मेथडसपोर्ट स्थितिनोट
string()✅ पूर्ण सपोर्टmin/max/regex/startsWith/endsWith/includes/trim आदि सपोर्टेड
number()✅ पूर्ण सपोर्टmin/max/int/float सपोर्टेड
bigint()✅ पूर्ण सपोर्टmin/max सपोर्टेड
boolean()✅ पूर्ण सपोर्ट-
date()✅ पूर्ण सपोर्ट-
null()✅ पूर्ण सपोर्ट-
undefined()✅ पूर्ण सपोर्ट-
void()✅ पूर्ण सपोर्ट-
any()✅ सपोर्टेडस्ट्रिंग जनरेट करता है
unknown()✅ सपोर्टेडस्ट्रिंग जनरेट करता है
nan()✅ पूर्ण सपोर्ट-
symbol()✅ पूर्ण सपोर्ट-
never()⚠️ विशेष सपोर्टआंतरिक रूप से स्किप किया जाता है (ऐरे में एलिमेंट को बाहर करता है, ऑब्जेक्ट में कुंजी छोड़ता है)

कलेक्शन टाइप

मेथडसपोर्ट स्थितिनोट
object()✅ पूर्ण सपोर्टनेस्टिंग सपोर्टेड
array()✅ पूर्ण सपोर्टmin/max/nonempty/length सपोर्टेड
tuple()✅ पूर्ण सपोर्टप्रत्येक एलिमेंट का टाइप बरकरार
record()✅ पूर्ण सपोर्टएंट्री संख्या कॉन्फ़िगर करने योग्य
partialRecord()✅ पूर्ण सपोर्टविवरण
map()✅ पूर्ण सपोर्टmin/max/nonempty सपोर्टेड
set()✅ पूर्ण सपोर्टmin/max/nonempty सपोर्टेड

partialRecord और ZodNever

partialRecord() आंतरिक रूप से record() के समान जनरेशन लॉजिक का उपयोग करता है। Zod partialRecord(keys, value) को आंतरिक रूप से वैल्यू टाइप को union([value, never()]) में परिवर्तित करता है, इसलिए जनरेशन के समय never() चुने गए एंट्री स्वचालित रूप से स्किप हो जाती हैं।

ts
const schema = z.partialRecord(z.enum(['id', 'name', 'email']), z.string());

const mock = generator.generate(schema);
// => { id: "subito" } (केवल कुछ कुंजियाँ शामिल)
// => {} (खाली ऑब्जेक्ट भी संभव)

schema.parse(mock); // OK - सभी कुंजियाँ ऑप्शनल हैं

इससे, record() से भिन्न, केवल कुछ कुंजियों वाला ऑब्जेक्ट स्वाभाविक रूप से जनरेट होता है। record की min/max सेटिंग एंट्री जनरेशन प्रयासों की संख्या को प्रभावित करती है, लेकिन ZodNever द्वारा स्किप होने के कारण, वास्तविक कुंजियों की संख्या उससे कम हो सकती है।

यूनियन और इंटरसेक्शन टाइप

मेथडसपोर्ट स्थितिनोट
union()✅ पूर्ण सपोर्टसमान रूप से चयन
discriminatedUnion()✅ सपोर्टेडसमान रूप से चयन
xor()✅ पूर्ण सपोर्टएक्सक्लूसिव यूनियन
intersection()⚠️ आंशिक सपोर्टविवरण

लिटरल और एनम टाइप

मेथडसपोर्ट स्थितिनोट
literal()✅ पूर्ण सपोर्ट-
enum()✅ पूर्ण सपोर्ट-
templateLiteral()✅ पूर्ण सपोर्टstring/number/boolean/literal/union/null/undefined/nullable/optional सपोर्टेड

templateLiteral के बारे में नोट

z.undefined() शामिल templateLiteral में, Zod द्वारा अपेक्षित वैल्यू पर ध्यान दें।

ts
const schema = z.templateLiteral(['Value: ', z.undefined()]);
type Schema = z.infer<typeof schema>;
// TypeScript `"Value: "` इन्फर करता है, लेकिन
// Zod `"Value: undefined"` की अपेक्षा करता है

const mock = generator.generate(schema);
// => "Value: undefined" (Zod के व्यवहार के अनुसार)

दिनांक-समय फॉर्मेट

मेथडसपोर्ट स्थितिफॉर्मेट
datetime()✅ पूर्ण सपोर्टISO 8601
isodate()✅ पूर्ण सपोर्टYYYY-MM-DD
isotime()✅ पूर्ण सपोर्टHH:MM:SS
isoduration()✅ पूर्ण सपोर्टISO 8601 Duration

स्ट्रिंग फॉर्मेट

मेथडसपोर्ट स्थिति
email()✅ पूर्ण सपोर्ट
url()✅ पूर्ण सपोर्ट
uuid()✅ पूर्ण सपोर्ट (v1~v8)
guid()✅ पूर्ण सपोर्ट
nanoid()✅ पूर्ण सपोर्ट
ulid()✅ पूर्ण सपोर्ट
cuid() / cuid2()✅ पूर्ण सपोर्ट
xid() / ksuid()✅ पूर्ण सपोर्ट
jwt()✅ पूर्ण सपोर्ट
emoji()✅ पूर्ण सपोर्ट
ipv4() / ipv6()✅ पूर्ण सपोर्ट
cidrv4() / cidrv6()✅ पूर्ण सपोर्ट
base64() / base64url()✅ पूर्ण सपोर्ट
e164()✅ पूर्ण सपोर्ट
hostname()✅ पूर्ण सपोर्ट

स्ट्रिंग कंस्ट्रेंट सपोर्ट

स्ट्रिंग स्कीमा में, मेथड फॉर्म की कंस्ट्रेंट व्यापक रूप से सपोर्टेड हैं।

कंस्ट्रेंटउदाहरणसपोर्ट
लंबाईlength(10), min(5), max(20)
रेगुलर एक्सप्रेशनregex(/^[A-Z]+$/)
प्रिफिक्स मैचstartsWith('PREFIX')
सफिक्स मैचendsWith('SUFFIX')
शामिलincludes('KEYWORD')
अपरकेस रूपांतरणtoUpperCase(), uppercase()
लोअरकेस रूपांतरणtoLowerCase(), lowercase()
ट्रिमtrim()
नॉर्मलाइज़normalize()
Slugifyslugify()

कई कंस्ट्रेंट को मिलाना भी संभव है:

ts
const schema = z
  .string()
  .min(10)
  .max(30)
  .startsWith('PRE')
  .includes('X')
  .toLowerCase();

const mock = generator.generate(schema);
// => "prexqwerty..." (10-30 अक्षर, "PRE" से शुरू, "X" शामिल, लोअरकेस)

कंस्ट्रेंट के संयोजन के बारे में चेतावनी

कुछ संयोजन विरोधाभासी हो सकते हैं (उदाहरण: regex(/^[a-z]+$/) और toUpperCase())। विरोधाभासी कंस्ट्रेंट निर्दिष्ट करने पर, वैलिडेशन में विफल होने वाली वैल्यू जनरेट हो सकती है।

Effects और Pipeline

मेथडसपोर्ट स्थितिनोट
transform()✅ पूर्ण सपोर्टtransform लागू होता है
preprocess()✅ पूर्ण सपोर्ट-
pipe()✅ पूर्ण सपोर्टout स्कीमा से जनरेट
codec()✅ सपोर्टेडstringbool आदि सपोर्टेड
brand()✅ सपोर्टेडकेवल टाइप लेवल (रनटाइम पर प्रभाव नहीं)
refine()⚠️ कंस्ट्रेंट अनदेखाविवरण
check()⚠️ आंशिक सपोर्टविवरण

विशेष टाइप

मेथडसपोर्ट स्थितिनोट
lazy()⚠️ आंशिक सपोर्टविवरण
success()✅ सपोर्टेड-
catch()✅ सपोर्टेड-
file()✅ सपोर्टेडखाली test.txt फ़ाइल जनरेट करता है
apply()✅ सपोर्टेडस्कीमा ट्रांसफॉर्मेशन हेल्पर

मॉडिफायर

मेथडसपोर्ट स्थितिनोट
optional()✅ पूर्ण सपोर्टoptionalProbability से कंट्रोल
exactOptional()✅ पूर्ण सपोर्टकुंजी सहित छोड़ता है (undefined नहीं)
nullable()✅ पूर्ण सपोर्टnullableProbability से कंट्रोल
default()✅ पूर्ण सपोर्टdefaultProbability से कंट्रोल
prefault()✅ पूर्ण सपोर्टdefaultProbability से कंट्रोल
nonoptional()✅ पूर्ण सपोर्टoptional हटाता है
readonly()✅ पूर्ण सपोर्टकेवल टाइप लेवल

आंशिक सपोर्ट का विवरण

ZodIntersection (इंटरसेक्शन टाइप)

सपोर्ट स्थिति: ⚠️ आंशिक सपोर्ट

समान टाइप के बीच इंटरसेक्शन मूल रूप से सपोर्टेड है, लेकिन भिन्न टाइप के बीच इंटरसेक्शन सीमित है।

काम करने वाले उदाहरण

ts
// ऑब्जेक्ट के बीच इंटरसेक्शन
const schema = z.intersection(
  z.object({ a: z.string() }),
  z.object({ b: z.number() }),
);
// => { a: "subito", b: 123 }

// संख्या रेंज का इंटरसेक्शन
const rangeSchema = z.intersection(
  z.number().min(0).max(100),
  z.number().min(50).max(150),
);
// => 50~100 की संख्या

सीमाएँ

  • समान टाइप के बीच इंटरसेक्शन मूल रूप से सपोर्टेड
  • भिन्न टाइप के बीच सिद्धांत रूप से असपोर्टेड (निम्नलिखित अपवाद रूप से सपोर्टेड):
    • ZodObject और ZodRecord
    • ZodArray और ZodTuple
  • एक पक्ष ZodAny / ZodUnknown होने पर, दूसरे पक्ष का टाइप उपयोग होता है
  • Map/Set/Array/Enum/Union के एलिमेंट में कम्पैटिबिलिटी न होने पर एरर

ZodLazy (रिकर्सिव टाइप)

सपोर्ट स्थिति: ⚠️ आंशिक सपोर्ट

रिकर्सिव स्कीमा सपोर्टेड है, लेकिन गहराई सीमा है। गेटर-बेस्ड सर्कुलर रेफरेंस भी समान रूप से सपोर्टेड है।

काम करने वाले उदाहरण

ts
// z.lazy() द्वारा सेल्फ-रेफरेंस
type Category = {
  name: string;
  subcategories: Category[];
};

const categorySchema: z.ZodType<Category> = z.lazy(() =>
  z.object({
    name: z.string(),
    subcategories: z.array(categorySchema),
  }),
);

// गेटर द्वारा सेल्फ-रेफरेंस (Zod v4 अनुशंसित पैटर्न)
const Node = z.object({
  value: z.number(),
  get next() {
    return Node.optional();
  },
});

// म्यूचुअल रेफरेंस
const User = z.object({
  email: z.email(),
  get posts() {
    return z.array(Post);
  },
});

const Post = z.object({
  title: z.string(),
  get author() {
    return User;
  },
});

सीमाएँ

  • गहराई सीमा सहित (डिफ़ॉल्ट: 5 स्तर, recursiveDepthLimit से बदला जा सकता है)
  • गहराई सीमा पर पहुँचने पर खाली ऑब्जेक्ट {} लौटाया जाता है
  • टॉप-लेवल पर union होने पर एरर की संभावना
  • z.lazy() और गेटर एक ही गहराई तक पहुँचने की गारंटी है
ts
const gen = initGenerator({ recursiveDepthLimit: 3 });
const result = gen.generate(categorySchema);
// 3 स्तर पर रुकता है

refine() (वैलिडेशन)

सपोर्ट स्थिति: ⚠️ कंस्ट्रेंट अनदेखा

refine() की वैलिडेशन कंडीशन मॉक जनरेशन के समय अनदेखा की जाती है।

ts
const schema = z.number().refine((val) => val > 0, {
  message: 'Must be positive',
});

const mock = generator.generate(schema);
// => संख्या जनरेट होती है, लेकिन > 0 गारंटीड नहीं

समाधान के रूप में override से कंडीशन पूरी करने वाली वैल्यू जनरेट कर सकते हैं।

check() (वैलिडेशन चेक)

सपोर्ट स्थिति: ⚠️ आंशिक सपोर्ट

check() फंक्शन के माध्यम से वैलिडेशन में केवल z.overwrite() / z.trim() / z.toLowerCase() / z.toUpperCase() आदि ट्रांसफॉर्मेशन टाइप चेक ही सपोर्टेड हैं।

APIसपोर्ट स्थितिविवरण
regex(/pattern/)✅ सपोर्टेडमेथड फॉर्म (अनुशंसित)
check(z.regex(/pattern/))❌ असपोर्टेडcheck() फंक्शन के माध्यम से
trim()✅ सपोर्टेडमेथड फॉर्म (अनुशंसित)
check(z.trim())✅ सपोर्टेडoverwrite हेल्पर
check(z.overwrite(...))✅ सपोर्टेडट्रांसफॉर्मेशन लागू होता है
check(z.minLength(...))❌ असपोर्टेड-
with(z.minLength(5), z.toLowerCase())✅ सपोर्टेडcheck() के समतुल्य

अनुशंसा

वैलिडेशन संबंधी मेथड फॉर्म (regex(), min(), max() आदि) का उपयोग करें। मेथड फॉर्म सभी सपोर्टेड हैं।


असपोर्टेड

स्कीमाकारणसमाधान
custom() / instanceof()कस्टम वैलिडेशन पार्सिंग संभव नहींoverride से वैल्यू प्रदान
function()फंक्शन का मॉक जनरेशन जटिलoverride से मॉक फंक्शन प्रदान
nativeEnum()Zod v4 में डेप्रिकेटेडenum() का उपयोग
catchall()अनदेखा किया जाता है (मॉक जनरेशन पर प्रभाव नहीं)-

असपोर्टेड स्कीमा का समाधान उदाहरण

ts
// z.custom() का समाधान
const myCustomSchema = z.custom<MyClass>((val) => val instanceof MyClass);

const mock = initGenerator()
  .override((schema) => {
    if (schema === myCustomSchema) {
      return new MyClass();
    }
  })
  .generate(myCustomSchema);
ts
// z.function() का समाधान
const fnSchema = z.function().args(z.string()).returns(z.boolean());

const mock = initGenerator()
  .override((schema) => {
    if (schema instanceof z.ZodFunction) {
      return (str: string) => str.length > 0;
    }
  })
  .generate(fnSchema);