- JavaScript/TypeScript आधारित schema libraries के लिए डिज़ाइन किया गया एक spec, ताकि वे एक common interface implement कर सकें
- इसका उद्देश्य यह है कि अलग-अलग libraries में user-defined type validation logic को दोबारा इस्तेमाल किया जा सके, जिससे tools बिना अलग adapter के एक-दूसरे के साथ compatible हो सकें
- Zod, Valibot, ArkType जैसी प्रमुख libraries के निर्माताओं ने मिलकर इसे डिज़ाइन किया है
मुख्य interface (StandardSchemaV1)
- सभी specifications को
~standard नाम की object property के ज़रिए implement किया जाता है
~standard के भीतर version, vendor, validate, types जैसी आवश्यक properties होती हैं
validate function सफल होने पर value और असफल होने पर issues array लौटाता है
types property की मदद से TypeScript में schema के input (input) और output (output) types infer किए जा सकते हैं
- major version update न होने तक सभी updates compatibility बनाए रखते हैं
डिज़ाइन के लक्ष्य
- runtime validation support: standard तरीके से error information को standardized रूप में पास किया जाता है
- static type inference support: TypeScript आधारित libraries द्वारा infer की गई type information को स्पष्ट रूप से expose किया जाता है
- सरलता: मौजूदा library functions में सिर्फ कुछ lines जोड़कर इसे implement किया जा सकता है
- API conflict से बचाव: सब कुछ सिर्फ
~standard namespace में रखा गया है ताकि मौजूदा APIs से टकराव न हो
- developer experience बनाए रखना:
~standard की तरह tilde (~) से शुरू करके autocomplete में इसकी priority कम रखी गई है
कौन-सी libraries इसे implement कर रही हैं
- Zod, Valibot, ArkType, Arri Schema, TypeMap आदि में standard schema का support पहले से मौजूद है
- tRPC, TanStack Form, TanStack Router, Hono Middleware आदि भी standard schema के आधार पर user schemas स्वीकार करते हैं
अपनी library में इस spec को implement करने का तरीका
StandardSchemaV1 interface को library में कॉपी करके ~standard property जोड़ें
validate function को मौजूदा validation function से जोड़ें ताकि सफलता पर { value } और विफलता पर { issues } लौटे
- ज़रूरत पड़ने पर async validation भी संभव है, लेकिन sync validation की सिफारिश की जाती है
standard schema के ज़रिए user-defined schema स्वीकार करने का तरीका
- अगर schema library के बिना सीधे इस्तेमाल करना हो, तो
@standard-schema/spec install करें या interface कॉपी करके उपयोग करें
standardValidate जैसे example function की तरह, अगर schema standard interface को follow करता है, तो किसी भी library में उसी तरीके से validation किया जा सकता है
- अगर केवल sync validation की अनुमति देनी हो, तो
validate के return value के Promise होने की जाँच कर exception handle किया जा सकता है
FAQ
- क्या
@standard-schema/spec dependency जोड़नी होगी?: इसे dependency के रूप में जोड़ना अनिवार्य नहीं है, कॉपी करके भी उपयोग किया जा सकता है
- इसे dev dependency के रूप में नहीं जोड़ा जा सकता: क्योंकि यह library की public API का हिस्सा बनता है, इसलिए इसे वास्तविक deploy environment में भी उपलब्ध होना चाहिए
~standard के आगे tilde (~) क्यों इस्तेमाल किया गया?: ताकि autocomplete में यह दूसरी properties के बाद दिखाई दे
- Symbol की जगह string key क्यों चुनी गई?: क्योंकि TypeScript में Symbol keys के साथ autocomplete sorting और type inference में समस्याएँ आती हैं
अभी कोई टिप्पणी नहीं है.