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);
});См. также
- Свои правила и схемы — когда хватит
check - Standard Schema