pipe
Добавляет к схеме правила и преобразования. Они выполняются по порядку после проверки типа.
Сигнатура
ts
function pipe<T>(schema: Schema<T>, ...actions: Action<T>[]): Schema<T>Параметры
| Параметр | Тип | Описание |
|---|---|---|
schema | Schema<T> | Базовая схема: string(), number(), array(...)… |
actions | Action<T>[] | Правила и преобразования |
Порядок выполнения
- Проверяется базовая схема. Если ошибка — правила не выполняются.
- Правила и преобразования выполняются слева направо. Каждое следующее получает результат предыдущего:
pipe(string(), trim(), minLength(2))проверяет длину уже обрезанной строки. - На первой ошибке выполнение останавливается. С опцией
{ all: true }уvalidateпроверяются все правила. - Асинхронные правила (
checkAsync) запускаются в конце и только если остальные прошли.
Что можно передавать
| Тип | Действия |
|---|---|
| Длина | minLength, maxLength, length |
| Числа | min, max, between, integer |
| Формат | pattern, email, url, uuid, startsWith, endsWith, includes |
| Даты | minDate, maxDate, after, before |
| Массивы | unique |
| Контрольные суммы | inn, snils, luhn |
| Сравнение | sameAs |
| Преобразования | trim, toLowerCase, toUpperCase |
| Свои | check, checkAsync |
TypeScript проверяет, что правило подходит к типу схемы: pipe(string(), min(1)) — ошибка компиляции.
Преобразования внутри pipe не меняют тип. Чтобы получить значение другого типа, используйте transform.
Примеры
Логин
ts
const username = pipe(
string(),
trim(),
toLowerCase(),
minLength(3),
maxLength(20),
pattern(/^[a-z0-9_]+$/, 'Только латиница, цифры и _'),
);С optional
ts
// optional снаружи pipe
const phone = optional(pipe(string(), pattern(/^\+7\d{10}$/)));