Skip to content

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) });

См. также ​