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() चुने गए एंट्री स्वचालित रूप से स्किप हो जाती हैं।
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 द्वारा अपेक्षित वैल्यू पर ध्यान दें।
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() | ✅ |
| Slugify | slugify() | ✅ |
कई कंस्ट्रेंट को मिलाना भी संभव है:
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 (इंटरसेक्शन टाइप)
सपोर्ट स्थिति: ⚠️ आंशिक सपोर्ट
समान टाइप के बीच इंटरसेक्शन मूल रूप से सपोर्टेड है, लेकिन भिन्न टाइप के बीच इंटरसेक्शन सीमित है।
काम करने वाले उदाहरण
// ऑब्जेक्ट के बीच इंटरसेक्शन
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औरZodRecordZodArrayऔरZodTuple
- एक पक्ष
ZodAny/ZodUnknownहोने पर, दूसरे पक्ष का टाइप उपयोग होता है - Map/Set/Array/Enum/Union के एलिमेंट में कम्पैटिबिलिटी न होने पर एरर
ZodLazy (रिकर्सिव टाइप)
सपोर्ट स्थिति: ⚠️ आंशिक सपोर्ट
रिकर्सिव स्कीमा सपोर्टेड है, लेकिन गहराई सीमा है। गेटर-बेस्ड सर्कुलर रेफरेंस भी समान रूप से सपोर्टेड है।
काम करने वाले उदाहरण
// 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()और गेटर एक ही गहराई तक पहुँचने की गारंटी है
const gen = initGenerator({ recursiveDepthLimit: 3 });
const result = gen.generate(categorySchema);
// 3 स्तर पर रुकता हैrefine() (वैलिडेशन)
सपोर्ट स्थिति: ⚠️ कंस्ट्रेंट अनदेखा
refine() की वैलिडेशन कंडीशन मॉक जनरेशन के समय अनदेखा की जाती है।
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() | अनदेखा किया जाता है (मॉक जनरेशन पर प्रभाव नहीं) | - |
असपोर्टेड स्कीमा का समाधान उदाहरण
// z.custom() का समाधान
const myCustomSchema = z.custom<MyClass>((val) => val instanceof MyClass);
const mock = initGenerator()
.override((schema) => {
if (schema === myCustomSchema) {
return new MyClass();
}
})
.generate(myCustomSchema);// 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);