@reformer/core 11.0.0-beta.4 → 11.0.0-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/form/create-form.d.ts +6 -4
- package/dist/form/factories/node-factory.d.ts +1 -0
- package/dist/form/nodes/field-node.d.ts +3 -0
- package/dist/form/validators/email.d.ts +5 -6
- package/dist/form/validators/file-type.d.ts +5 -6
- package/dist/form/validators/future-date.d.ts +5 -6
- package/dist/form/validators/index.d.ts +3 -2
- package/dist/form/validators/integer.d.ts +5 -6
- package/dist/form/validators/is-date.d.ts +5 -6
- package/dist/form/validators/is-number.d.ts +5 -6
- package/dist/form/validators/max-age.d.ts +5 -6
- package/dist/form/validators/max-date.d.ts +5 -6
- package/dist/form/validators/max-file-size.d.ts +5 -6
- package/dist/form/validators/max-files.d.ts +5 -6
- package/dist/form/validators/max-length.d.ts +6 -7
- package/dist/form/validators/max-total-file-size.d.ts +5 -6
- package/dist/form/validators/max.d.ts +6 -7
- package/dist/form/validators/min-age.d.ts +5 -6
- package/dist/form/validators/min-date.d.ts +5 -6
- package/dist/form/validators/min-file-size.d.ts +5 -6
- package/dist/form/validators/min-files.d.ts +5 -6
- package/dist/form/validators/min-length.d.ts +6 -7
- package/dist/form/validators/min.d.ts +6 -7
- package/dist/form/validators/multiple-of.d.ts +5 -6
- package/dist/form/validators/non-negative.d.ts +5 -6
- package/dist/form/validators/non-zero.d.ts +5 -6
- package/dist/form/validators/past-date.d.ts +5 -6
- package/dist/form/validators/pattern.d.ts +6 -14
- package/dist/form/validators/phone.d.ts +5 -6
- package/dist/form/validators/required.d.ts +7 -12
- package/dist/form/validators/url.d.ts +7 -12
- package/dist/index.js +423 -376
- package/dist/platforms/react/field-binding/field-adapter.d.ts +87 -0
- package/dist/platforms/react/field-binding/field-handle.d.ts +50 -0
- package/dist/platforms/react/index.d.ts +4 -0
- package/docs/llms/02-quick-start.md +3 -3
- package/docs/llms/03-api-signatures.md +4 -4
- package/docs/llms/09-formschema.md +5 -5
- package/docs/llms/10-arrays.md +2 -2
- package/docs/llms/15-project-structure.md +19 -16
- package/docs/llms/16-ui-components.md +34 -7
- package/docs/llms/17-nonexistent-api.md +14 -0
- package/docs/llms/29-async-preload.md +3 -3
- package/docs/llms/30-type-safety-recipes.md +1 -1
- package/llms-index.json +1 -0
- package/llms.txt +2146 -68
- package/package.json +2 -1
|
@@ -4,7 +4,7 @@ import { FormModel } from '../model/types';
|
|
|
4
4
|
import { FormBehavior } from './behaviors';
|
|
5
5
|
/**
|
|
6
6
|
* Аргументы createForm под архитектуру M1: данные приходят из {@link FormModel},
|
|
7
|
-
* конфиг полей (component/componentProps
|
|
7
|
+
* конфиг полей (component/componentProps) — из единой схемы.
|
|
8
8
|
*
|
|
9
9
|
* @group Utilities
|
|
10
10
|
*/
|
|
@@ -27,7 +27,7 @@ export interface CreateFormFromModelArgs<T> {
|
|
|
27
27
|
*
|
|
28
28
|
* Значения принадлежат модели (источник истины), ноды формы держат UI/валидационное состояние и
|
|
29
29
|
* ссылаются на сигналы модели по идентичности (`node.value === model.$.path`). Обходит структуру
|
|
30
|
-
* модели, привязывает конфиг поля (component/componentProps
|
|
30
|
+
* модели, привязывает конфиг поля (component/componentProps) из схемы, материализует
|
|
31
31
|
* top-level массивы как {@link ModelArrayNode}, заполняет реестр сигнал→нода (для `enableWhen`/
|
|
32
32
|
* роутинга ошибок) и, при наличии, запускает декларативное поведение (cleanup живёт на форме).
|
|
33
33
|
*
|
|
@@ -51,7 +51,8 @@ export interface CreateFormFromModelArgs<T> {
|
|
|
51
51
|
* const schema = {
|
|
52
52
|
* component: Section,
|
|
53
53
|
* children: [
|
|
54
|
-
*
|
|
54
|
+
* // Layout несёт только component/componentProps; правила — в отдельной ValidationSchema.
|
|
55
|
+
* { value: model.$.email, component: Input },
|
|
55
56
|
* // вложенная группа: `model.$.profile.name` (≡ под-модель `model.profile.$.name` — тот же сигнал)
|
|
56
57
|
* { value: model.$.profile.name, component: Input },
|
|
57
58
|
* ],
|
|
@@ -115,7 +116,8 @@ export declare function createForm<T>(config: GroupNodeConfig<T>): FormProxy<T>;
|
|
|
115
116
|
*
|
|
116
117
|
* @deprecated Legacy / back-compat: плоская `FormSchema` с инлайн-значениями (`value: ''`) — путь
|
|
117
118
|
* ДО архитектуры M1. Для нового кода используйте перегрузку `createForm({ model, schema })`
|
|
118
|
-
* (значения принадлежат {@link FormModel},
|
|
119
|
+
* (значения принадлежат {@link FormModel}, а правила — отдельной схеме `defineValidationSchema`,
|
|
120
|
+
* которую прогоняет `validateModel`; поля `validators` у узла layout-схемы нет).
|
|
119
121
|
*
|
|
120
122
|
* @param schema - Схема полей формы
|
|
121
123
|
* @returns Типизированная форма с Proxy-доступом к полям
|
|
@@ -7,6 +7,7 @@ import { FieldConfig, FieldStatus, ValidationError } from '../types/index';
|
|
|
7
7
|
* @group Nodes
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
|
+
* Пример node-level: конфиг УЗЛА, а не layout-схема M1 (в ней поля `validators` нет).
|
|
10
11
|
* ```typescript
|
|
11
12
|
* const field = new FieldNode({
|
|
12
13
|
* value: '',
|
|
@@ -194,6 +195,8 @@ export declare class FieldNode<T> extends FormNode<T> {
|
|
|
194
195
|
* @param updateOn - новый триггер валидации: 'change' | 'blur' | 'submit'
|
|
195
196
|
*
|
|
196
197
|
* @example
|
|
198
|
+
* Пример node-level: плоская схема с инлайн-значениями (back-compat путь до M1). В layout-схеме
|
|
199
|
+
* `createForm({ model, schema })` поля `validators` нет — правила живут в `defineValidationSchema`.
|
|
197
200
|
* ```typescript
|
|
198
201
|
* // Сценарий 1: Instant feedback после submit
|
|
199
202
|
* const form = createForm({
|
|
@@ -10,14 +10,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
10
10
|
*
|
|
11
11
|
* @example Проверка формата email
|
|
12
12
|
* ```typescript
|
|
13
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
13
14
|
* import { required, email } from '@reformer/core/validators';
|
|
14
15
|
*
|
|
15
|
-
* //
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* validators: [required(), email({ message: 'Введите корректный email' })],
|
|
20
|
-
* },
|
|
16
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
17
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
18
|
+
* validate(model.$.email, [required(), email({ message: 'Введите корректный email' })]);
|
|
19
|
+
* });
|
|
21
20
|
* ```
|
|
22
21
|
*/
|
|
23
22
|
export declare function email<TForm = unknown, TField extends string | null | undefined = string>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -18,14 +18,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
18
18
|
*
|
|
19
19
|
* @example Только изображения и PDF
|
|
20
20
|
* ```typescript
|
|
21
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
21
22
|
* import { fileType } from '@reformer/core/validators';
|
|
22
23
|
*
|
|
23
|
-
* //
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* validators: [fileType('image/*,.pdf', { message: 'Только изображения или PDF' })],
|
|
28
|
-
* },
|
|
24
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
25
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
26
|
+
* validate(model.$.documents, [fileType('image/*,.pdf', { message: 'Только изображения или PDF' })]);
|
|
27
|
+
* });
|
|
29
28
|
* ```
|
|
30
29
|
*/
|
|
31
30
|
export declare function fileType<TForm = unknown, TField = unknown>(accept: string, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -10,14 +10,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
10
10
|
*
|
|
11
11
|
* @example Дата не в прошлом
|
|
12
12
|
* ```typescript
|
|
13
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
13
14
|
* import { required, futureDate } from '@reformer/core/validators';
|
|
14
15
|
*
|
|
15
|
-
* //
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* validators: [required(), futureDate({ message: 'Дата записи должна быть в будущем' })],
|
|
20
|
-
* },
|
|
16
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
17
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
18
|
+
* validate(model.$.appointmentDate, [required(), futureDate({ message: 'Дата записи должна быть в будущем' })]);
|
|
19
|
+
* });
|
|
21
20
|
* ```
|
|
22
21
|
*/
|
|
23
22
|
export declare function futureDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Точка входа сабпата `@reformer/core/validators` — все фабрики правил одним импортом.
|
|
3
3
|
*
|
|
4
|
-
* Все примитивы — фабрики, возвращающие чистый `Validator<TForm, TField>`; передаются
|
|
5
|
-
*
|
|
4
|
+
* Все примитивы — фабрики, возвращающие чистый `Validator<TForm, TField>`; передаются вторым
|
|
5
|
+
* аргументом оператора `validate` внутри схемы валидации: `validate(model.$.age, [required(), min(18)])`.
|
|
6
|
+
* В layout-схему формы правила НЕ кладутся — поля `validators` у узла нет (снято в 7.0).
|
|
6
7
|
*
|
|
7
8
|
* Гранулярные сабпаты (`@reformer/core/validators/required` и ещё 20) собираются отдельными
|
|
8
9
|
* entry для tree-shaking; этот модуль отдаёт полный набор для случаев, когда правил много.
|
|
@@ -9,14 +9,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
9
9
|
*
|
|
10
10
|
* @example Проверка целого числа
|
|
11
11
|
* ```typescript
|
|
12
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
12
13
|
* import { required, integer } from '@reformer/core/validators';
|
|
13
14
|
*
|
|
14
|
-
* //
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* validators: [required(), integer({ message: 'Должно быть целым числом' })],
|
|
19
|
-
* },
|
|
15
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
16
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
17
|
+
* validate(model.$.count, [required(), integer({ message: 'Должно быть целым числом' })]);
|
|
18
|
+
* });
|
|
20
19
|
* ```
|
|
21
20
|
*/
|
|
22
21
|
export declare function integer<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -10,14 +10,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
10
10
|
*
|
|
11
11
|
* @example Проверка валидности даты
|
|
12
12
|
* ```typescript
|
|
13
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
13
14
|
* import { required, isDate } from '@reformer/core/validators';
|
|
14
15
|
*
|
|
15
|
-
* //
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* validators: [required(), isDate({ message: 'Введите корректную дату' })],
|
|
20
|
-
* },
|
|
16
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
17
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
18
|
+
* validate(model.$.eventDate, [required(), isDate({ message: 'Введите корректную дату' })]);
|
|
19
|
+
* });
|
|
21
20
|
* ```
|
|
22
21
|
*/
|
|
23
22
|
export declare function isDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -11,14 +11,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
11
11
|
*
|
|
12
12
|
* @example Проверка, что значение — число
|
|
13
13
|
* ```typescript
|
|
14
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
14
15
|
* import { required, isNumber } from '@reformer/core/validators';
|
|
15
16
|
*
|
|
16
|
-
* //
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* validators: [required(), isNumber({ message: 'Введите число' })],
|
|
21
|
-
* },
|
|
17
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
18
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
19
|
+
* validate(model.$.amount, [required(), isNumber({ message: 'Введите число' })]);
|
|
20
|
+
* });
|
|
22
21
|
* ```
|
|
23
22
|
*/
|
|
24
23
|
export declare function isNumber<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
12
12
|
*
|
|
13
13
|
* @example Максимальный возраст
|
|
14
14
|
* ```typescript
|
|
15
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
15
16
|
* import { maxAge } from '@reformer/core/validators';
|
|
16
17
|
*
|
|
17
|
-
* //
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* validators: [maxAge(100, { message: 'Проверьте дату рождения' })],
|
|
22
|
-
* },
|
|
18
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
19
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
20
|
+
* validate(model.$.birthDate, [maxAge(100, { message: 'Проверьте дату рождения' })]);
|
|
21
|
+
* });
|
|
23
22
|
* ```
|
|
24
23
|
*/
|
|
25
24
|
export declare function maxAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
12
12
|
*
|
|
13
13
|
* @example Максимальная дата
|
|
14
14
|
* ```typescript
|
|
15
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
15
16
|
* import { maxDate } from '@reformer/core/validators';
|
|
16
17
|
*
|
|
17
|
-
* //
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* validators: [maxDate(new Date(), { message: 'Дата не может быть в будущем' })],
|
|
22
|
-
* },
|
|
18
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
19
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
20
|
+
* validate(model.$.birthDate, [maxDate(new Date(), { message: 'Дата не может быть в будущем' })]);
|
|
21
|
+
* });
|
|
23
22
|
* ```
|
|
24
23
|
*/
|
|
25
24
|
export declare function maxDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -15,14 +15,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
15
15
|
*
|
|
16
16
|
* @example Ограничение размера вложений
|
|
17
17
|
* ```typescript
|
|
18
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
18
19
|
* import { maxFileSize } from '@reformer/core/validators';
|
|
19
20
|
*
|
|
20
|
-
* //
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* validators: [maxFileSize(5 * 1024 * 1024, { message: 'Файл больше 5 МБ' })],
|
|
25
|
-
* },
|
|
21
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
22
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
23
|
+
* validate(model.$.documents, [maxFileSize(5 * 1024 * 1024, { message: 'Файл больше 5 МБ' })]);
|
|
24
|
+
* });
|
|
26
25
|
* ```
|
|
27
26
|
*/
|
|
28
27
|
export declare function maxFileSize<TForm = unknown, TField = unknown>(maxSize: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -13,14 +13,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
13
13
|
*
|
|
14
14
|
* @example Не более трёх вложений
|
|
15
15
|
* ```typescript
|
|
16
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
16
17
|
* import { maxFiles } from '@reformer/core/validators';
|
|
17
18
|
*
|
|
18
|
-
* //
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* validators: [maxFiles(3, { message: 'Максимум 3 файла' })],
|
|
23
|
-
* },
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.documents, [maxFiles(3, { message: 'Максимум 3 файла' })]);
|
|
22
|
+
* });
|
|
24
23
|
* ```
|
|
25
24
|
*/
|
|
26
25
|
export declare function maxFiles<TForm = unknown, TField = unknown>(max: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -13,15 +13,14 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
13
13
|
*
|
|
14
14
|
* @example Максимальная длина строки
|
|
15
15
|
* ```typescript
|
|
16
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
16
17
|
* import { maxLength } from '@reformer/core/validators';
|
|
17
18
|
*
|
|
18
|
-
* //
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* validators: [maxLength(500, { message: 'Максимум 500 символов' })],
|
|
24
|
-
* },
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.name, [maxLength(50)]);
|
|
22
|
+
* validate(model.$.bio, [maxLength(500, { message: 'Максимум 500 символов' })]);
|
|
23
|
+
* });
|
|
25
24
|
* ```
|
|
26
25
|
*/
|
|
27
26
|
export declare function maxLength<TForm = unknown, TField = unknown>(maxLen: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -13,14 +13,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
13
13
|
*
|
|
14
14
|
* @example Суммарно не более 20 МБ
|
|
15
15
|
* ```typescript
|
|
16
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
16
17
|
* import { maxTotalFileSize } from '@reformer/core/validators';
|
|
17
18
|
*
|
|
18
|
-
* //
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* validators: [maxTotalFileSize(20 * 1024 * 1024, { message: 'Суммарно не более 20 МБ' })],
|
|
23
|
-
* },
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.documents, [maxTotalFileSize(20 * 1024 * 1024, { message: 'Суммарно не более 20 МБ' })]);
|
|
22
|
+
* });
|
|
24
23
|
* ```
|
|
25
24
|
*/
|
|
26
25
|
export declare function maxTotalFileSize<TForm = unknown, TField = unknown>(maxTotal: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -11,15 +11,14 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
11
11
|
*
|
|
12
12
|
* @example Максимальное значение числового поля
|
|
13
13
|
* ```typescript
|
|
14
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
14
15
|
* import { required, max } from '@reformer/core/validators';
|
|
15
16
|
*
|
|
16
|
-
* //
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* validators: [required(), max(50, { message: 'Не более 50%' })],
|
|
22
|
-
* },
|
|
17
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
18
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
19
|
+
* validate(model.$.quantity, [max(100)]);
|
|
20
|
+
* validate(model.$.discount, [required(), max(50, { message: 'Не более 50%' })]);
|
|
21
|
+
* });
|
|
23
22
|
* ```
|
|
24
23
|
*/
|
|
25
24
|
export declare function max<TForm = unknown, TField extends number | null | undefined = number>(maxValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
12
12
|
*
|
|
13
13
|
* @example Минимальный возраст
|
|
14
14
|
* ```typescript
|
|
15
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
15
16
|
* import { required, minAge } from '@reformer/core/validators';
|
|
16
17
|
*
|
|
17
|
-
* //
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* validators: [required(), minAge(18, { message: 'Вам должно быть не менее 18 лет' })],
|
|
22
|
-
* },
|
|
18
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
19
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
20
|
+
* validate(model.$.birthDate, [required(), minAge(18, { message: 'Вам должно быть не менее 18 лет' })]);
|
|
21
|
+
* });
|
|
23
22
|
* ```
|
|
24
23
|
*/
|
|
25
24
|
export declare function minAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
12
12
|
*
|
|
13
13
|
* @example Минимальная дата
|
|
14
14
|
* ```typescript
|
|
15
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
15
16
|
* import { required, minDate } from '@reformer/core/validators';
|
|
16
17
|
*
|
|
17
|
-
* //
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* validators: [required(), minDate(new Date(), { message: 'Дата не раньше сегодня' })],
|
|
22
|
-
* },
|
|
18
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
19
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
20
|
+
* validate(model.$.startDate, [required(), minDate(new Date(), { message: 'Дата не раньше сегодня' })]);
|
|
21
|
+
* });
|
|
23
22
|
* ```
|
|
24
23
|
*/
|
|
25
24
|
export declare function minDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -15,14 +15,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
15
15
|
*
|
|
16
16
|
* @example Отсев пустых файлов
|
|
17
17
|
* ```typescript
|
|
18
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
18
19
|
* import { minFileSize } from '@reformer/core/validators';
|
|
19
20
|
*
|
|
20
|
-
* //
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* validators: [minFileSize(1, { message: 'Файл пустой' })],
|
|
25
|
-
* },
|
|
21
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
22
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
23
|
+
* validate(model.$.documents, [minFileSize(1, { message: 'Файл пустой' })]);
|
|
24
|
+
* });
|
|
26
25
|
* ```
|
|
27
26
|
*/
|
|
28
27
|
export declare function minFileSize<TForm = unknown, TField = unknown>(minSize: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -13,14 +13,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
13
13
|
*
|
|
14
14
|
* @example Не менее двух документов
|
|
15
15
|
* ```typescript
|
|
16
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
16
17
|
* import { required, minFiles } from '@reformer/core/validators';
|
|
17
18
|
*
|
|
18
|
-
* //
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* validators: [required(), minFiles(2, { message: 'Приложите минимум 2 документа' })],
|
|
23
|
-
* },
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.documents, [required(), minFiles(2, { message: 'Приложите минимум 2 документа' })]);
|
|
22
|
+
* });
|
|
24
23
|
* ```
|
|
25
24
|
*/
|
|
26
25
|
export declare function minFiles<TForm = unknown, TField = unknown>(min: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -13,15 +13,14 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
13
13
|
*
|
|
14
14
|
* @example Минимальная длина строки
|
|
15
15
|
* ```typescript
|
|
16
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
16
17
|
* import { required, minLength } from '@reformer/core/validators';
|
|
17
18
|
*
|
|
18
|
-
* //
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* validators: [required(), minLength(8, { message: 'Минимум 8 символов' })],
|
|
24
|
-
* },
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.name, [minLength(2)]);
|
|
22
|
+
* validate(model.$.password, [required(), minLength(8, { message: 'Минимум 8 символов' })]);
|
|
23
|
+
* });
|
|
25
24
|
* ```
|
|
26
25
|
*/
|
|
27
26
|
export declare function minLength<TForm = unknown, TField = unknown>(minLen: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -11,15 +11,14 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
11
11
|
*
|
|
12
12
|
* @example Минимальное значение числового поля
|
|
13
13
|
* ```typescript
|
|
14
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
14
15
|
* import { required, min } from '@reformer/core/validators';
|
|
15
16
|
*
|
|
16
|
-
* //
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
* validators: [required(), min(1, { message: 'Минимум 1' })],
|
|
22
|
-
* },
|
|
17
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
18
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
19
|
+
* validate(model.$.age, [min(18)]);
|
|
20
|
+
* validate(model.$.quantity, [required(), min(1, { message: 'Минимум 1' })]);
|
|
21
|
+
* });
|
|
23
22
|
* ```
|
|
24
23
|
*/
|
|
25
24
|
export declare function min<TForm = unknown, TField extends number | null | undefined = number>(minValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -11,14 +11,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
11
11
|
*
|
|
12
12
|
* @example Проверка кратности
|
|
13
13
|
* ```typescript
|
|
14
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
14
15
|
* import { multipleOf } from '@reformer/core/validators';
|
|
15
16
|
*
|
|
16
|
-
* //
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* validators: [multipleOf(0.5, { message: 'Только шаг 0.5' })],
|
|
21
|
-
* },
|
|
17
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
18
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
19
|
+
* validate(model.$.rating, [multipleOf(0.5, { message: 'Только шаг 0.5' })]);
|
|
20
|
+
* });
|
|
22
21
|
* ```
|
|
23
22
|
*/
|
|
24
23
|
export declare function multipleOf<TForm = unknown, TField extends number | null | undefined = number>(divisor: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -9,14 +9,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
9
9
|
*
|
|
10
10
|
* @example Проверка неотрицательности
|
|
11
11
|
* ```typescript
|
|
12
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
12
13
|
* import { nonNegative } from '@reformer/core/validators';
|
|
13
14
|
*
|
|
14
|
-
* //
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* validators: [nonNegative({ message: 'Баланс не может быть отрицательным' })],
|
|
19
|
-
* },
|
|
15
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
16
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
17
|
+
* validate(model.$.balance, [nonNegative({ message: 'Баланс не может быть отрицательным' })]);
|
|
18
|
+
* });
|
|
20
19
|
* ```
|
|
21
20
|
*/
|
|
22
21
|
export declare function nonNegative<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -9,14 +9,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
9
9
|
*
|
|
10
10
|
* @example Проверка «не ноль»
|
|
11
11
|
* ```typescript
|
|
12
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
12
13
|
* import { nonZero } from '@reformer/core/validators';
|
|
13
14
|
*
|
|
14
|
-
* //
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* validators: [nonZero({ message: 'Не может быть нулём' })],
|
|
19
|
-
* },
|
|
15
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
16
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
17
|
+
* validate(model.$.divisor, [nonZero({ message: 'Не может быть нулём' })]);
|
|
18
|
+
* });
|
|
20
19
|
* ```
|
|
21
20
|
*/
|
|
22
21
|
export declare function nonZero<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -10,14 +10,13 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
10
10
|
*
|
|
11
11
|
* @example Дата не в будущем
|
|
12
12
|
* ```typescript
|
|
13
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
13
14
|
* import { required, pastDate } from '@reformer/core/validators';
|
|
14
15
|
*
|
|
15
|
-
* //
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* validators: [required(), pastDate({ message: 'Дата рождения не может быть в будущем' })],
|
|
20
|
-
* },
|
|
16
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
17
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
18
|
+
* validate(model.$.birthDate, [required(), pastDate({ message: 'Дата рождения не может быть в будущем' })]);
|
|
19
|
+
* });
|
|
21
20
|
* ```
|
|
22
21
|
*/
|
|
23
22
|
export declare function pastDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -12,22 +12,14 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
|
|
|
12
12
|
*
|
|
13
13
|
* @example Проверка по регулярному выражению
|
|
14
14
|
* ```typescript
|
|
15
|
+
* import { defineValidationSchema, validate } from '@reformer/core/validation';
|
|
15
16
|
* import { required, pattern } from '@reformer/core/validators';
|
|
16
17
|
*
|
|
17
|
-
* //
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* },
|
|
23
|
-
* phone: {
|
|
24
|
-
* value: model.$.phone,
|
|
25
|
-
* component: InputMask,
|
|
26
|
-
* validators: [
|
|
27
|
-
* required(),
|
|
28
|
-
* pattern(/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/, { message: 'Формат +7 (999) 123-45-67' }),
|
|
29
|
-
* ],
|
|
30
|
-
* },
|
|
18
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
19
|
+
* const validation = defineValidationSchema<MyForm>(({ model }) => {
|
|
20
|
+
* validate(model.$.name, [pattern(/^[a-zA-Zа-яА-Я]+$/, { message: 'Только буквы' })]);
|
|
21
|
+
* validate(model.$.phone, [required(), pattern(/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/, { message: 'Формат +7 (999) 123-45-67' })]);
|
|
22
|
+
* });
|
|
31
23
|
* ```
|
|
32
24
|
*/
|
|
33
25
|
export declare function pattern<TForm = unknown, TField extends string | null | undefined = string>(regex: RegExp, options?: ValidateOptions): Validator<TForm, TField>;
|