Standard Schema
Standard Schema — общий стандарт для библиотек валидации. Его поддерживают tRPC, Hono, TanStack Form, React Hook Form, Nuxt UI и другие. Все схемы tinyval реализуют этот стандарт, поэтому их можно передавать в такие библиотеки напрямую — без адаптеров.
Как это работает
У каждой схемы есть свойство ~standard с методом validate и типами входа и выхода:
ts
const result = User['~standard'].validate(input);
// { value: { ... } } or { issues: [{ message: 'Invalid email', path: ['email'] }] }- Если в схеме есть
checkAsync,validateвозвращаетPromise. - Сообщения об ошибках — те же, что в
validate, включаяsetMessages. - Свои схемы, созданные через
createSchema, тоже поддерживают стандарт.
Примеры
tRPC
ts
export const appRouter = t.router({
createUser: t.procedure.input(CreateUser).mutation(({ input }) => db.users.create(input)),
});Hono
ts
import { sValidator } from '@hono/standard-validator';
app.post('/users', sValidator('json', CreateUser), (c) => {
const user = c.req.valid('json'); // typed
return c.json(user, 201);
});TanStack Form
ts
const form = useForm({
defaultValues: { name: '', email: '' },
validators: { onChange: CreateUser },
});React Hook Form
ts
import { standardSchemaResolver } from '@hookform/resolvers/standard-schema';
const form = useForm({ resolver: standardSchemaResolver(CreateUser) });См. также
- createSchema — свои схемы с поддержкой стандарта
- TypeScript