• 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 में समस्याएँ आती हैं

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.