A common interface for TypeScript validation libraries
Cíle a popis
Standard Schéma je společné rozhraní navržené pro implementaci v JavaScriptových a TypeScriptových validačních knihovnách. Jde o snahu normalizace způsobu implementace validačních knihoven, ať se devs nemusí učit 10 různých schémat a příručku pravidel k nim.
Specifikace Standard Schema má několik cílů:
- Podpora runtime validace
- Podpora statické inference typů
- Minimalismus
- Vyhnutí se konfliktům API (vše je zabaleno do jediné vlastnosti
~standard) - Bez negativního dopadu na DX (prefix
~standardminimalizuje rušení v autokompletaci)
Specifikace sestává z jediného TS interface StandardSchemaV1, které by měla implementovat každá knihovna schémat, jež chce být v souladu se standardem. Toto rozhraní je dostupné jako balíček na npm, ale doporučuje se ho zkopírovat do vlastního repozitáře (dohromady to má 70 řádků, z toho 30 jsou komentáře). Celý interface je k dispozici na Githubu nebo na oficiální webovce
Příklad
Vytvoření jednoduchého standardního validátoru (např. utils/helpers/schema-validator.ts) v jakékoliv aplikaci vypadá až příliš jednoduše:
import type {StandardSchemaV1} from '@standard-schema/spec';
export async function standardValidate<T extends StandardSchemaV1>(
schema: T,
input: StandardSchemaV1.InferInput<T>
): Promise<StandardSchemaV1.InferOutput<T>> {
let result = schema['~standard'].validate(input);
if (result instanceof Promise) result = await result;
// if the `issues` field exists, the validation failed
if (result.issues) {
throw new Error(JSON.stringify(result.issues, null, 2));
}
return result.value;
}A následně lze použít univerzálně:
import * as z from 'zod';
import * as v from 'valibot';
import {type} from 'arktype';
const zodResult = await standardValidate(z.string(), 'hello');
const valibotResult = await standardValidate(v.string(), 'hello');
const arktypeResult = await standardValidate(type('string'), 'hello');Tvůrci a uživatelé
Vytvořeno v spolupráci mezi tvůrci nástrojů Zod, Valibot a ArkType.
V čase napsaní tohoto článku specifikaci implementují knihovny jako
- Zod
- Valibot
- ArkType
- TypeMap
- FormGator
Tím pádem je možné používat při tvorbě schémat v rámci knihoven jako
- tRPC
- Tanstack Form
- Qwik
- OpenAuth
- formwerk
- upfetch
- Hono Middleware
- a další…