Skip to content

createSchema ​

Создаёт свою схему из функции проверки. Такая схема работает везде, где встроенные: в object, pipe, optional, — и поддерживает Standard Schema.

Сигнатура ​

ts
function createSchema<T>(run: (value: unknown, ctx: Ctx, path: Path, parent: unknown) => T | Fail): Schema<T>

function fail(ctx: Ctx, path: Path, code: string, msg?: Message, params?: Record<string, unknown>): Fail
function isEmpty(value: unknown): boolean

Параметры ​

Параметр runОписание
valueПроверяемое значение — может быть чем угодно
ctx, pathПередайте в fail при ошибке и во вложенные схемы
parentОбъект, в котором лежит значение (исходные данные)

run возвращает значение (его можно преобразовать) или результат fail(...).

  • fail(ctx, path, code, msg?, params?) — записывает ошибку с кодом code. Текст берётся из msg или из сообщений setMessages по коду; params подставляются в {параметры}.
  • isEmpty(value) — true для undefined, null и '': так ведут себя встроенные схемы, см. Пустые значения.

Примеры ​

ts
import { createSchema, fail, isEmpty, setMessages, type Message } from 'tinyval';

export const bigint = (msg?: Message) =>
  createSchema<bigint>((value, ctx, path) => {
    if (isEmpty(value)) return fail(ctx, path, 'required', msg);
    if (typeof value !== 'bigint') return fail(ctx, path, 'bigint', msg);
    return value;
  });

setMessages({ bigint: 'Must be a bigint' });
ts
// slug: trims, lowercases and validates
export const slug = (msg?: Message) =>
  createSchema<string>((value, ctx, path) => {
    if (isEmpty(value)) return fail(ctx, path, 'required', msg);
    const s = String(value).trim().toLowerCase();
    return /^[a-z0-9]+(-[a-z0-9]+)*$/.test(s) ? s : fail(ctx, path, 'pattern', msg);
  });

См. также ​