منصوبے کے بارے میں

Zod ایک TypeScript-first توثیق لائبریری ہے۔ آپ ایک اسکیما کی تعریف کرتے ہیں، اس کے ساتھ ڈیٹا پارس کرتے ہیں، اور ایک مضبوط قسم کا، توثیق شدہ نتیجہ حاصل کرتے ہیں۔ یہ Node.js اور جدید براؤزرز میں کام کرتا ہے، اس کا کوئی بیرونی انحصار نہیں ہے، اور ایک چھوٹا کور بنڈل بھیجتا ہے (تقریباً 2kb gzipped)۔ API غیر متغیر ہے: طریقے موجودہ اسکیما کو تبدیل کرنے کے بجائے ایک نیا انسٹنس واپس کرتے ہیں۔ اسے TypeScript یا سادہ JavaScript سے استعمال کیا جا سکتا ہے اور اس میں بلٹ ان JSON اسکیما تبدیلی شامل ہے۔ بنیادی استعمال اسکیما کی تعریف سے شروع ہوتا ہے، مثال کے طور پر ایک آبجیکٹ جس میں ایک سٹرنگ اور ایک نمبر فیلڈ ہو۔ اسکیما پر `.parse` کال کرنے سے ان پٹ کی توثیق ہوتی ہے اور ایک مضبوط قسم کا گہرا کلون واپس آتا ہے۔ اگر اسکیما غیر متزامن refinements یا transforms استعمال کرتا ہے، تو اس کے بجائے `.parseAsync()` کی ضرورت ہوتی ہے۔ جب توثیق ناکام ہوتی ہے، `.parse()` ایک `ZodError` پھینکتا ہے جس میں تفصیلی مسئلے کی معلومات ہوتی ہیں جیسے متوقع قسم، ایک ایرر کوڈ، ناقص فیلڈ کا راستہ، اور ایک پیغام۔ try/catch سے بچنے کے لیے، `.safeParse()` ایک ممتاز یونین واپس کرتا ہے جس میں یا تو پارس شدہ ڈیٹا ہوتا ہے یا ایرر؛ `.safeParseAsync()` غیر متزامن اسکیما کا احاطہ کرتا ہے۔ اقسام کو اسکیما سے `z.infer<>` استعمال کرکے اخذ کیا جا سکتا ہے۔ جب ان پٹ اور آؤٹ پٹ کی قسمیں مختلف ہوتی ہیں، مثال کے طور پر `.transform()` کے ذریعے، `z.input<>` اور `z.output<>` انہیں آزادانہ طور پر نکالتے ہیں۔ ایک قابل ذکر خصوصیت پہلے سے وقت کی compilation ہے۔ `z.compile(schema)` ایک اسکیما کلون واپس کرتا ہے جس میں درست ان پٹ کے لیے ایک مرتب شدہ تیز رفتار راستہ ہوتا ہے، جبکہ غلط ان پٹ باقاعدہ پارسر پر واپس آتا ہے تاکہ ایرر رپورٹنگ یکساں رہے۔ README میں 55-اسکیما بینچ مارک میں 2.4x کی اوسط رفتار میں اضافہ بتایا گیا ہے، جو اسکیما کی پیچیدگی کے ساتھ بڑھتا ہے (آبجیکٹس کی بڑی صفیں اور 20-کلیدی آبجیکٹ تقریباً 9x، نیسٹڈ آبجیکٹ تقریباً 4.5x، جبکہ ایک سادہ سٹرنگ اسکیما کو کچھ فائدہ نہیں ہوتا)۔ Compilation کو عالمی طور پر بھی فعال کیا جا سکتا ہے اسکیما کی وضاحت کرنے والے ماڈیولز سے پہلے `zod/compile` درآمد کرکے۔ Compilation `new Function` استعمال کرتا ہے، اور عالمی موڈ خود بخود غیر فعال ہو جاتا ہے جب `z.config({ jitless: true })` سیٹ ہوتا ہے، جیسے CSP ماحول میں؛ `z.compile()` کو براہ راست کال کرنا ایک واضح آپٹ ان ہے۔ غیر متزامن refinements یا transforms والے اسکیما، اور چند دیگر تعمیرات، مرتب نہیں کی جا سکتیں؛ اس صورت میں `z.compile()` اسکیما کو تبدیل شدہ واپس کرتا ہے اور یہ باقاعدہ پارسر استعمال کرتا رہتا ہے، جب تک کہ مخصوص ایرر پھینکنے کے لیے `{ strict: true }` نہ دیا جائے۔ غلط ان پٹ پر، refinements اور transforms دو بار چل سکتے ہیں۔ ایک مرتب شدہ اسکیما سے نیا اسکیما اخذ کرنے سے ایک غیر مرتب شدہ اسکیما ملتا ہے، لہذا حتمی اسکیما کو مرتب کیا جانا چاہیے۔ انسٹالیشن `npm install zod` کے ذریعے ہے۔ پروجیکٹ zod.dev پر دستاویزات، ایک Discord کمیونٹی، اور سوشل چینلز سے منسلک ہے۔ یہ MIT لائسنس یافتہ ہے۔