@reformer/core 5.0.2 → 6.0.0
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/README.md +7 -5
- package/dist/behaviors-O9a1Djj9.js +147 -0
- package/dist/behaviors.d.ts +131 -4
- package/dist/behaviors.js +298 -27
- package/dist/core/model/behaviors.d.ts +123 -0
- package/dist/core/model/form-model.d.ts +18 -0
- package/dist/core/model/index.d.ts +12 -0
- package/dist/core/model/types.d.ts +112 -0
- package/dist/core/model/validate-model.d.ts +46 -0
- package/dist/core/nodes/array-node.d.ts +34 -2
- package/dist/core/nodes/group-node.d.ts +19 -71
- package/dist/core/nodes/model-array-node.d.ts +71 -0
- package/dist/core/types/deep-schema.d.ts +16 -2
- package/dist/core/types/form-proxy.d.ts +17 -6
- package/dist/core/types/index.d.ts +5 -23
- package/dist/core/types/validation-schema.d.ts +15 -66
- package/dist/core/utils/create-form.d.ts +24 -0
- package/dist/core/utils/derived-registry.d.ts +5 -0
- package/dist/core/utils/index.d.ts +4 -4
- package/dist/core/utils/signal-node-registry.d.ts +12 -0
- package/dist/core/utils/type-guards.d.ts +2 -3
- package/dist/core/validation/index.d.ts +5 -11
- package/dist/core/validation/validators/email.d.ts +5 -29
- package/dist/core/validation/validators/future-date.d.ts +6 -28
- package/dist/core/validation/validators/index.d.ts +11 -4
- package/dist/core/validation/validators/integer.d.ts +13 -0
- package/dist/core/validation/validators/is-date.d.ts +5 -28
- package/dist/core/validation/validators/is-number.d.ts +14 -0
- package/dist/core/validation/validators/max-age.d.ts +6 -29
- package/dist/core/validation/validators/max-date.d.ts +6 -29
- package/dist/core/validation/validators/max-length.d.ts +5 -30
- package/dist/core/validation/validators/max.d.ts +7 -29
- package/dist/core/validation/validators/min-age.d.ts +6 -29
- package/dist/core/validation/validators/min-date.d.ts +6 -29
- package/dist/core/validation/validators/min-length.d.ts +5 -30
- package/dist/core/validation/validators/min.d.ts +7 -29
- package/dist/core/validation/validators/multiple-of.d.ts +13 -0
- package/dist/core/validation/validators/non-negative.d.ts +13 -0
- package/dist/core/validation/validators/non-zero.d.ts +13 -0
- package/dist/core/validation/validators/past-date.d.ts +5 -28
- package/dist/core/validation/validators/pattern.d.ts +5 -32
- package/dist/core/validation/validators/phone.d.ts +9 -19
- package/dist/core/validation/validators/required.d.ts +10 -31
- package/dist/core/validation/validators/url.d.ts +13 -15
- package/dist/index.d.ts +3 -4
- package/dist/index.js +1299 -875
- package/dist/validators/email.js +7 -9
- package/dist/validators/future-date.js +11 -12
- package/dist/validators/integer.d.ts +2 -0
- package/dist/validators/integer.js +10 -0
- package/dist/validators/is-date.js +6 -7
- package/dist/validators/is-number.d.ts +2 -0
- package/dist/validators/is-number.js +10 -0
- package/dist/validators/max-age.js +11 -12
- package/dist/validators/max-date.js +11 -12
- package/dist/validators/max-length.js +12 -8
- package/dist/validators/max.js +5 -6
- package/dist/validators/min-age.js +10 -11
- package/dist/validators/min-date.js +12 -13
- package/dist/validators/min-length.js +12 -8
- package/dist/validators/min.js +6 -7
- package/dist/validators/multiple-of.d.ts +2 -0
- package/dist/validators/multiple-of.js +10 -0
- package/dist/validators/non-negative.d.ts +2 -0
- package/dist/validators/non-negative.js +10 -0
- package/dist/validators/non-zero.d.ts +2 -0
- package/dist/validators/non-zero.js +10 -0
- package/dist/validators/past-date.js +11 -12
- package/dist/validators/pattern.js +6 -7
- package/dist/validators/phone.js +14 -32
- package/dist/validators/required.js +9 -10
- package/dist/validators/url.js +19 -16
- package/dist/validators.js +67 -54
- package/llms.txt +959 -2584
- package/package.json +19 -35
- package/dist/behaviors/compute-from.d.ts +0 -2
- package/dist/behaviors/compute-from.js +0 -31
- package/dist/behaviors/copy-from.d.ts +0 -2
- package/dist/behaviors/copy-from.js +0 -29
- package/dist/behaviors/enable-when.d.ts +0 -2
- package/dist/behaviors/enable-when.js +0 -25
- package/dist/behaviors/reset-when.d.ts +0 -2
- package/dist/behaviors/reset-when.js +0 -24
- package/dist/behaviors/revalidate-when.d.ts +0 -2
- package/dist/behaviors/revalidate-when.js +0 -18
- package/dist/behaviors/sync-fields.d.ts +0 -2
- package/dist/behaviors/sync-fields.js +0 -41
- package/dist/behaviors/transform-value.d.ts +0 -2
- package/dist/behaviors/transform-value.js +0 -45
- package/dist/behaviors/watch-field.d.ts +0 -2
- package/dist/behaviors/watch-field.js +0 -21
- package/dist/core/behavior/behavior-context.d.ts +0 -47
- package/dist/core/behavior/behavior-registry.d.ts +0 -85
- package/dist/core/behavior/behaviors/compute-from.d.ts +0 -70
- package/dist/core/behavior/behaviors/copy-from.d.ts +0 -56
- package/dist/core/behavior/behaviors/enable-when.d.ts +0 -118
- package/dist/core/behavior/behaviors/index.d.ts +0 -11
- package/dist/core/behavior/behaviors/reset-when.d.ts +0 -64
- package/dist/core/behavior/behaviors/revalidate-when.d.ts +0 -53
- package/dist/core/behavior/behaviors/sync-fields.d.ts +0 -48
- package/dist/core/behavior/behaviors/transform-value.d.ts +0 -192
- package/dist/core/behavior/behaviors/watch-field.d.ts +0 -80
- package/dist/core/behavior/compose-behavior.d.ts +0 -96
- package/dist/core/behavior/index.d.ts +0 -11
- package/dist/core/behavior/types.d.ts +0 -146
- package/dist/core/types/field-path.d.ts +0 -42
- package/dist/core/types/form-context.d.ts +0 -89
- package/dist/core/utils/field-path-navigator.d.ts +0 -240
- package/dist/core/utils/field-path.d.ts +0 -60
- package/dist/core/utils/registry-helpers.d.ts +0 -43
- package/dist/core/validation/core/apply-when.d.ts +0 -22
- package/dist/core/validation/core/apply.d.ts +0 -52
- package/dist/core/validation/core/index.d.ts +0 -8
- package/dist/core/validation/core/validate-async.d.ts +0 -36
- package/dist/core/validation/core/validate-tree.d.ts +0 -35
- package/dist/core/validation/core/validate.d.ts +0 -26
- package/dist/core/validation/validate-form.d.ts +0 -48
- package/dist/core/validation/validation-applicator.d.ts +0 -70
- package/dist/core/validation/validation-context.d.ts +0 -86
- package/dist/core/validation/validation-registry.d.ts +0 -142
- package/dist/core/validation/validators/array-validators.d.ts +0 -53
- package/dist/core/validation/validators/number.d.ts +0 -31
- package/dist/field-path-DuKdGcIE.js +0 -66
- package/dist/hooks/useHiddenCondition.d.ts +0 -25
- package/dist/index-D25LsbRm.js +0 -73
- package/dist/registry-helpers-Bv_BJ1s-.js +0 -615
- package/dist/safe-effect-Dh8uw81c.js +0 -20
- package/dist/validate-C3XiA_zf.js +0 -10
- package/dist/validators/number.d.ts +0 -2
- package/dist/validators/number.js +0 -35
- package/dist/validators-BGsNOgT1.js +0 -207
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import { BehaviorSchemaFn } from '../behavior/types';
|
|
2
1
|
import { FormSchema } from './deep-schema';
|
|
3
|
-
import { ValidationSchemaFn } from './validation-schema';
|
|
4
2
|
import { FormNode } from '../nodes/form-node';
|
|
5
3
|
/**
|
|
6
4
|
* Represents any valid form value type
|
|
@@ -98,14 +96,14 @@ export interface ErrorFilterOptions {
|
|
|
98
96
|
*/
|
|
99
97
|
export type FieldStatus = 'valid' | 'invalid' | 'pending' | 'disabled';
|
|
100
98
|
export type { FieldConfig } from './deep-schema';
|
|
101
|
-
export type {
|
|
102
|
-
export type { ContextualValidatorFn, ContextualAsyncValidatorFn, TreeValidatorFn, ConditionFn, ValidateOptions, ValidateAsyncOptions, ValidateTreeOptions, ValidationSchemaFn, ValidatorRegistration, } from './validation-schema';
|
|
99
|
+
export type { Validator, AsyncValidator, ConditionFn, ValidateOptions, ValidateAsyncOptions, } from './validation-schema';
|
|
103
100
|
export type { FormSchema, ArrayConfig } from './deep-schema';
|
|
104
|
-
export type { FormContext } from './form-context';
|
|
105
101
|
export type { FormControlsProxy, FormProxy, FormArrayProxy } from './form-proxy';
|
|
106
102
|
/**
|
|
107
|
-
* Конфигурация GroupNode
|
|
108
|
-
*
|
|
103
|
+
* Конфигурация GroupNode.
|
|
104
|
+
*
|
|
105
|
+
* Под M1 группа создаётся из плоской {@link FormSchema} (дерево field-конфигов). Обёртка
|
|
106
|
+
* `{ form }` сохранена для совместимости вызова, legacy behavior/validation-схемы удалены (Ф7).
|
|
109
107
|
*
|
|
110
108
|
* @group Types
|
|
111
109
|
* @category Configuration Types
|
|
@@ -113,22 +111,6 @@ export type { FormControlsProxy, FormProxy, FormArrayProxy } from './form-proxy'
|
|
|
113
111
|
export interface GroupNodeConfig<T> {
|
|
114
112
|
/** Схема структуры формы (поля и их конфигурация) */
|
|
115
113
|
form: FormSchema<T>;
|
|
116
|
-
/** Схема реактивного поведения (copyFrom, enableWhen, computeFrom и т.д.) */
|
|
117
|
-
behavior?: BehaviorSchemaFn<T>;
|
|
118
|
-
/** Схема валидации (required, email, minLength и т.д.) */
|
|
119
|
-
validation?: ValidationSchemaFn<T>;
|
|
120
|
-
/**
|
|
121
|
-
* Опциональный ValidationRegistry для dependency injection
|
|
122
|
-
* Используется для тестирования с mock-реестрами
|
|
123
|
-
* @internal
|
|
124
|
-
*/
|
|
125
|
-
_validationRegistry?: unknown;
|
|
126
|
-
/**
|
|
127
|
-
* Опциональный BehaviorRegistry для dependency injection
|
|
128
|
-
* Используется для тестирования с mock-реестрами
|
|
129
|
-
* @internal
|
|
130
|
-
*/
|
|
131
|
-
_behaviorRegistry?: unknown;
|
|
132
114
|
}
|
|
133
115
|
/**
|
|
134
116
|
* Тип для Record с unknown значениями
|
|
@@ -1,57 +1,33 @@
|
|
|
1
1
|
import { FormFields, ValidationError } from './index';
|
|
2
|
-
import {
|
|
3
|
-
import { FormContext } from './form-context';
|
|
2
|
+
import { FormProxy } from './form-proxy';
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
4
|
+
* Чистый синхронный валидатор поля.
|
|
6
5
|
*
|
|
7
|
-
*
|
|
6
|
+
* Принимает значение поля, прокси текущего поля (control) и прокси корня формы (root).
|
|
7
|
+
* Возвращает ValidationError либо null. Не знает про реестр валидации.
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
|
-
*
|
|
12
|
-
* if (
|
|
13
|
-
* const confirm = ctx.form.confirmEmail.value.value;
|
|
14
|
-
* if (value !== confirm) return { code: 'mismatch', message: 'Must match' };
|
|
11
|
+
* const isAdult: Validator<MyForm, number> = (value, control, root) => {
|
|
12
|
+
* if (value < 18) return { code: 'tooYoung', message: '18+' };
|
|
15
13
|
* return null;
|
|
16
|
-
* }
|
|
14
|
+
* };
|
|
15
|
+
* validate(path.age, isAdult);
|
|
17
16
|
* ```
|
|
18
17
|
*/
|
|
19
|
-
export type
|
|
18
|
+
export type Validator<TForm, TField> = (value: TField, control: FormProxy<TField>, root: FormProxy<TForm>) => ValidationError | null;
|
|
20
19
|
/**
|
|
21
|
-
*
|
|
20
|
+
* Чистый асинхронный валидатор поля.
|
|
22
21
|
*
|
|
23
|
-
*
|
|
24
|
-
* ```typescript
|
|
25
|
-
* validateAsync(path.email, async (value, ctx) => {
|
|
26
|
-
* const exists = await checkEmailExists(value);
|
|
27
|
-
* if (exists) return { code: 'exists', message: 'Email already taken' };
|
|
28
|
-
* return null;
|
|
29
|
-
* });
|
|
30
|
-
* ```
|
|
31
|
-
*/
|
|
32
|
-
export type ContextualAsyncValidatorFn<TForm, TField> = (value: TField, ctx: FormContext<TForm>) => Promise<ValidationError | null>;
|
|
33
|
-
/**
|
|
34
|
-
* Функция cross-field валидации
|
|
35
|
-
*
|
|
36
|
-
* @example
|
|
37
|
-
* ```typescript
|
|
38
|
-
* validateTree((ctx) => {
|
|
39
|
-
* const password = ctx.form.password.value.value;
|
|
40
|
-
* const confirm = ctx.form.confirmPassword.value.value;
|
|
41
|
-
* if (password !== confirm) {
|
|
42
|
-
* return { code: 'mismatch', message: 'Passwords must match' };
|
|
43
|
-
* }
|
|
44
|
-
* return null;
|
|
45
|
-
* });
|
|
46
|
-
* ```
|
|
22
|
+
* Регистрируется через `validateAsync(path, validator, { debounce })`.
|
|
47
23
|
*/
|
|
48
|
-
export type
|
|
24
|
+
export type AsyncValidator<TForm, TField> = (value: TField, control: FormProxy<TField>, root: FormProxy<TForm>) => Promise<ValidationError | null>;
|
|
49
25
|
/**
|
|
50
|
-
* Функция условия для applyWhen
|
|
26
|
+
* Функция условия для applyWhen.
|
|
51
27
|
*/
|
|
52
28
|
export type ConditionFn<T> = (value: T) => boolean;
|
|
53
29
|
/**
|
|
54
|
-
* Опции для функции validate
|
|
30
|
+
* Опции для функции validate.
|
|
55
31
|
*/
|
|
56
32
|
export interface ValidateOptions {
|
|
57
33
|
/** Сообщение об ошибке */
|
|
@@ -60,36 +36,9 @@ export interface ValidateOptions {
|
|
|
60
36
|
params?: FormFields;
|
|
61
37
|
}
|
|
62
38
|
/**
|
|
63
|
-
* Опции для функции validateAsync
|
|
39
|
+
* Опции для функции validateAsync.
|
|
64
40
|
*/
|
|
65
41
|
export interface ValidateAsyncOptions extends ValidateOptions {
|
|
66
42
|
/** Задержка перед выполнением валидации (в мс) */
|
|
67
43
|
debounce?: number;
|
|
68
44
|
}
|
|
69
|
-
/**
|
|
70
|
-
* Опции для функции validateTree
|
|
71
|
-
*/
|
|
72
|
-
export interface ValidateTreeOptions {
|
|
73
|
-
/** Поле, к которому привязать ошибку */
|
|
74
|
-
targetField?: string;
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Функция validation schema
|
|
78
|
-
*
|
|
79
|
-
* Принимает FieldPath и определяет все правила валидации для формы
|
|
80
|
-
*/
|
|
81
|
-
export type ValidationSchemaFn<T> = (path: FieldPath<T>) => void;
|
|
82
|
-
/**
|
|
83
|
-
* Регистрация валидатора в системе
|
|
84
|
-
* @internal
|
|
85
|
-
*/
|
|
86
|
-
export interface ValidatorRegistration {
|
|
87
|
-
fieldPath: string;
|
|
88
|
-
type: 'sync' | 'async' | 'tree';
|
|
89
|
-
validator: ContextualValidatorFn<unknown, unknown> | ContextualAsyncValidatorFn<unknown, unknown> | TreeValidatorFn<unknown>;
|
|
90
|
-
options?: ValidateOptions | ValidateAsyncOptions | ValidateTreeOptions;
|
|
91
|
-
condition?: {
|
|
92
|
-
fieldPath: string;
|
|
93
|
-
conditionFn: ConditionFn<unknown>;
|
|
94
|
-
};
|
|
95
|
-
}
|
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
import { FormProxy, GroupNodeConfig, FormSchema } from '../types';
|
|
2
|
+
import { FormModel } from '../model/types';
|
|
3
|
+
import { FormBehavior } from '../../behaviors';
|
|
4
|
+
/**
|
|
5
|
+
* Аргументы createForm под архитектуру M1: данные приходят из {@link FormModel},
|
|
6
|
+
* конфиг полей (component/componentProps/validators) — из единой схемы.
|
|
7
|
+
*
|
|
8
|
+
* @group Utilities
|
|
9
|
+
*/
|
|
10
|
+
export interface CreateFormFromModelArgs<T> {
|
|
11
|
+
/** Реактивная модель данных (источник истины значений). */
|
|
12
|
+
model: FormModel<T>;
|
|
13
|
+
/**
|
|
14
|
+
* Единая Schema (дерево узлов). createForm обходит её и привязывает конфиг поля к ноде
|
|
15
|
+
* по идентичности сигнала (`node.value === model.$.path`). Опциональна.
|
|
16
|
+
*/
|
|
17
|
+
schema?: unknown;
|
|
18
|
+
/**
|
|
19
|
+
* Декларативная схема поведения ({@link defineFormBehavior}). Запускается ПОСЛЕ построения нод и
|
|
20
|
+
* заполнения реестра сигнал→нода; cleanup живёт на форме и вызывается в `form.dispose()`.
|
|
21
|
+
*/
|
|
22
|
+
behavior?: FormBehavior<T>;
|
|
23
|
+
}
|
|
24
|
+
export declare function createFormFromModel<T>(args: CreateFormFromModelArgs<T>): FormProxy<T>;
|
|
2
25
|
/**
|
|
3
26
|
* Создать форму с полной конфигурацией (form, behavior, validation)
|
|
4
27
|
*
|
|
@@ -26,6 +49,7 @@ import { FormProxy, GroupNodeConfig, FormSchema } from '../types';
|
|
|
26
49
|
* form.email.setValue('test@mail.com');
|
|
27
50
|
* ```
|
|
28
51
|
*/
|
|
52
|
+
export declare function createForm<T>(args: CreateFormFromModelArgs<T>): FormProxy<T>;
|
|
29
53
|
export declare function createForm<T>(config: GroupNodeConfig<T>): FormProxy<T>;
|
|
30
54
|
/**
|
|
31
55
|
* Создать форму только со схемой полей (обратная совместимость)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Signal } from '@preact/signals-core';
|
|
2
|
+
/** Пометить сигнал производным (вызывают compute/computeFrom). */
|
|
3
|
+
export declare function markDerived(signal: Signal<any>): void;
|
|
4
|
+
/** Производный ли сигнал (читают bulk-сеттеры, чтобы не затирать вычисляемые поля). */
|
|
5
|
+
export declare function isDerived(signal: Signal<any>): boolean;
|
|
@@ -3,14 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Централизованные вспомогательные классы и функции.
|
|
5
5
|
*/
|
|
6
|
-
export { FieldPathNavigator, type PathSegment } from './field-path-navigator';
|
|
7
|
-
export { createFieldPath, extractPath, extractKey, toFieldPath } from './field-path';
|
|
8
6
|
export { SubscriptionManager } from './subscription-manager';
|
|
9
|
-
export { getCurrentValidationRegistry, getCurrentBehaviorRegistry } from './registry-helpers';
|
|
10
7
|
export { RegistryStack } from './registry-stack';
|
|
11
8
|
export { isFormNode, isFieldNode, isGroupNode, isArrayNode, getNodeType } from './type-guards';
|
|
12
9
|
export { FormErrorHandler, ErrorStrategy } from './error-handler';
|
|
13
|
-
export { createForm } from './create-form';
|
|
10
|
+
export { createForm, createFormFromModel } from './create-form';
|
|
11
|
+
export type { CreateFormFromModelArgs } from './create-form';
|
|
12
|
+
export { registerSignalNode, getNodeForSignal } from './signal-node-registry';
|
|
13
|
+
export { markDerived, isDerived } from './derived-registry';
|
|
14
14
|
export { uniqueId } from './unique-id';
|
|
15
15
|
export { safeCallback, runOutsideEffect, safeDebouncedCallback } from './safe-effect';
|
|
16
16
|
export { AbstractRegistry } from './abstract-registry';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Signal } from '@preact/signals-core';
|
|
2
|
+
import { FormNode } from '../nodes/form-node';
|
|
3
|
+
/**
|
|
4
|
+
* Связать сигнал модели с его FieldNode.
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare function registerSignalNode(signal: Signal<any>, node: FormNode<any>): void;
|
|
8
|
+
/**
|
|
9
|
+
* Получить FieldNode по сигналу модели (или undefined, если форма не построена/поле не материализовано,
|
|
10
|
+
* например элемент массива в родительской форме).
|
|
11
|
+
*/
|
|
12
|
+
export declare function getNodeForSignal(signal: Signal<any>): FormNode<any> | undefined;
|
|
@@ -48,8 +48,8 @@ export declare function isFieldNode(value: unknown): value is FieldNode<FormValu
|
|
|
48
48
|
/**
|
|
49
49
|
* Проверить, является ли значение GroupNode (объект с вложенными полями)
|
|
50
50
|
*
|
|
51
|
-
* GroupNode представляет объект с вложенными полями
|
|
52
|
-
* и имеет
|
|
51
|
+
* GroupNode представляет объект с вложенными полями формы: имеет навигацию по полям
|
|
52
|
+
* (`getFieldByPath`/`fields`) и НЕ имеет array-методов (`items`/`push`/`removeAt`).
|
|
53
53
|
*
|
|
54
54
|
* @param value - Значение для проверки
|
|
55
55
|
* @returns true если value является GroupNode
|
|
@@ -57,7 +57,6 @@ export declare function isFieldNode(value: unknown): value is FieldNode<FormValu
|
|
|
57
57
|
* @example
|
|
58
58
|
* ```typescript
|
|
59
59
|
* if (isGroupNode(node)) {
|
|
60
|
-
* node.applyValidationSchema(schema); // OK
|
|
61
60
|
* node.getFieldByPath('user.email'); // OK
|
|
62
61
|
* }
|
|
63
62
|
* ```
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
export { validate } from './core/validate';
|
|
2
|
-
export { validateAsync } from './core/validate-async';
|
|
3
|
-
export { validateTree } from './core/validate-tree';
|
|
4
|
-
export { apply } from './core/apply';
|
|
5
|
-
export { applyWhen } from './core/apply-when';
|
|
6
1
|
export { required } from './validators/required';
|
|
7
2
|
export { min } from './validators/min';
|
|
8
3
|
export { max } from './validators/max';
|
|
@@ -12,7 +7,11 @@ export { email } from './validators/email';
|
|
|
12
7
|
export { pattern } from './validators/pattern';
|
|
13
8
|
export { url } from './validators/url';
|
|
14
9
|
export { phone, type PhoneFormat } from './validators/phone';
|
|
15
|
-
export {
|
|
10
|
+
export { isNumber } from './validators/is-number';
|
|
11
|
+
export { integer } from './validators/integer';
|
|
12
|
+
export { multipleOf } from './validators/multiple-of';
|
|
13
|
+
export { nonNegative } from './validators/non-negative';
|
|
14
|
+
export { nonZero } from './validators/non-zero';
|
|
16
15
|
export { isDate } from './validators/is-date';
|
|
17
16
|
export { minDate } from './validators/min-date';
|
|
18
17
|
export { maxDate } from './validators/max-date';
|
|
@@ -20,8 +19,3 @@ export { pastDate } from './validators/past-date';
|
|
|
20
19
|
export { futureDate } from './validators/future-date';
|
|
21
20
|
export { minAge } from './validators/min-age';
|
|
22
21
|
export { maxAge } from './validators/max-age';
|
|
23
|
-
export { notEmpty, validateItems } from './validators/array-validators';
|
|
24
|
-
export { createFieldPath, extractPath, extractKey, toFieldPath } from '../utils/field-path';
|
|
25
|
-
export { validateForm } from './validate-form';
|
|
26
|
-
export { ValidationRegistry } from './validation-registry';
|
|
27
|
-
export { ValidationContextImpl, TreeValidationContextImpl } from './validation-context';
|
|
@@ -1,37 +1,13 @@
|
|
|
1
|
-
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
import { FieldPathNode } from '../../types';
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
* Фабрика валидатора формата email.
|
|
5
4
|
*
|
|
6
|
-
* Проверяет, что значение соответствует формату email адреса.
|
|
7
5
|
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
8
6
|
*
|
|
9
|
-
* @group Validation
|
|
10
|
-
* @category Validators
|
|
11
|
-
*
|
|
12
|
-
* @param fieldPath - Путь к полю для валидации
|
|
13
|
-
* @param options - Опции валидации (message, params)
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* // Базовое использование
|
|
18
|
-
* validationSchema: (path) => [
|
|
19
|
-
* required(path.email),
|
|
20
|
-
* email(path.email),
|
|
21
|
-
* ]
|
|
22
|
-
*
|
|
23
|
-
* // С кастомным сообщением
|
|
24
|
-
* email(path.email, { message: 'Введите корректный email адрес' })
|
|
25
|
-
* ```
|
|
26
|
-
*
|
|
27
7
|
* @example
|
|
28
8
|
* ```typescript
|
|
29
|
-
*
|
|
30
|
-
* {
|
|
31
|
-
* code: 'email',
|
|
32
|
-
* message: 'Неверный формат email',
|
|
33
|
-
* params: {}
|
|
34
|
-
* }
|
|
9
|
+
* validate(path.email, email());
|
|
10
|
+
* validate(path.email, email({ message: 'Введите корректный email' }));
|
|
35
11
|
* ```
|
|
36
12
|
*/
|
|
37
|
-
export declare function email<TForm, TField extends string |
|
|
13
|
+
export declare function email<TForm = unknown, TField extends string | undefined = string>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,35 +1,13 @@
|
|
|
1
|
-
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
import { FieldPathNode } from '../../types';
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
* Фабрика валидатора, проверяющего что дата не в прошлом.
|
|
5
4
|
*
|
|
6
|
-
* Пустые
|
|
7
|
-
*
|
|
8
|
-
* @group Validation
|
|
9
|
-
* @category Validators
|
|
10
|
-
*
|
|
11
|
-
* @param fieldPath - Путь к полю для валидации
|
|
12
|
-
* @param options - Опции валидации (message, params)
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* // Базовое использование - дата события должна быть в будущем
|
|
17
|
-
* validationSchema: (path) => [
|
|
18
|
-
* futureDate(path.eventDate),
|
|
19
|
-
* ]
|
|
20
|
-
*
|
|
21
|
-
* // С кастомным сообщением
|
|
22
|
-
* futureDate(path.appointmentDate, { message: 'Дата записи должна быть в будущем' })
|
|
23
|
-
* ```
|
|
5
|
+
* Пустые и невалидные даты пропускаются.
|
|
24
6
|
*
|
|
25
7
|
* @example
|
|
26
8
|
* ```typescript
|
|
27
|
-
*
|
|
28
|
-
* {
|
|
29
|
-
* code: 'date_past',
|
|
30
|
-
* message: 'Дата не может быть в прошлом',
|
|
31
|
-
* params: {}
|
|
32
|
-
* }
|
|
9
|
+
* validate(path.eventDate, futureDate());
|
|
10
|
+
* validate(path.appointmentDate, futureDate({ message: 'Дата записи должна быть в будущем' }));
|
|
33
11
|
* ```
|
|
34
12
|
*/
|
|
35
|
-
export declare function futureDate<TForm, TField extends string | Date | undefined = string | Date>(
|
|
13
|
+
export declare function futureDate<TForm = unknown, TField extends string | Date | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Reusable
|
|
2
|
+
* Reusable validator factories.
|
|
3
|
+
*
|
|
4
|
+
* Все примитивы — фабрики, возвращающие чистый Validator<TForm, TField>.
|
|
5
|
+
* Использование: `validate(path.x, required())`, `validate(path.y, min(18))`.
|
|
3
6
|
*/
|
|
4
7
|
export { required } from './required';
|
|
5
8
|
export { min } from './min';
|
|
@@ -8,9 +11,13 @@ export { minLength } from './min-length';
|
|
|
8
11
|
export { maxLength } from './max-length';
|
|
9
12
|
export { email } from './email';
|
|
10
13
|
export { pattern } from './pattern';
|
|
11
|
-
export { url } from './url';
|
|
12
|
-
export { phone, type PhoneFormat } from './phone';
|
|
13
|
-
export {
|
|
14
|
+
export { url, type UrlValidatorOptions } from './url';
|
|
15
|
+
export { phone, type PhoneFormat, type PhoneValidatorOptions } from './phone';
|
|
16
|
+
export { isNumber } from './is-number';
|
|
17
|
+
export { integer } from './integer';
|
|
18
|
+
export { multipleOf } from './multiple-of';
|
|
19
|
+
export { nonNegative } from './non-negative';
|
|
20
|
+
export { nonZero } from './non-zero';
|
|
14
21
|
export { isDate } from './is-date';
|
|
15
22
|
export { minDate } from './min-date';
|
|
16
23
|
export { maxDate } from './max-date';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
/**
|
|
3
|
+
* Фабрика валидатора, проверяющего что число — целое.
|
|
4
|
+
*
|
|
5
|
+
* Пустые значения и не-числа пропускаются (используйте `required` и `isNumber`).
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* validate(path.age, integer());
|
|
10
|
+
* validate(path.count, integer({ message: 'Должно быть целым числом' }));
|
|
11
|
+
* ```
|
|
12
|
+
*/
|
|
13
|
+
export declare function integer<TForm = unknown, TField extends number | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,36 +1,13 @@
|
|
|
1
|
-
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
import { FieldPathNode } from '../../types';
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
* Фабрика валидатора, проверяющего что значение — валидная дата.
|
|
5
4
|
*
|
|
6
5
|
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
7
6
|
*
|
|
8
|
-
* @group Validation
|
|
9
|
-
* @category Validators
|
|
10
|
-
*
|
|
11
|
-
* @param fieldPath - Путь к полю для валидации
|
|
12
|
-
* @param options - Опции валидации (message, params)
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```typescript
|
|
16
|
-
* // Базовое использование
|
|
17
|
-
* validationSchema: (path) => [
|
|
18
|
-
* isDate(path.birthDate),
|
|
19
|
-
* isDate(path.eventDate),
|
|
20
|
-
* ]
|
|
21
|
-
*
|
|
22
|
-
* // С кастомным сообщением
|
|
23
|
-
* isDate(path.birthDate, { message: 'Введите корректную дату' })
|
|
24
|
-
* ```
|
|
25
|
-
*
|
|
26
7
|
* @example
|
|
27
8
|
* ```typescript
|
|
28
|
-
*
|
|
29
|
-
* {
|
|
30
|
-
* code: 'date_invalid',
|
|
31
|
-
* message: 'Неверный формат даты',
|
|
32
|
-
* params: {}
|
|
33
|
-
* }
|
|
9
|
+
* validate(path.birthDate, isDate());
|
|
10
|
+
* validate(path.eventDate, isDate({ message: 'Введите корректную дату' }));
|
|
34
11
|
* ```
|
|
35
12
|
*/
|
|
36
|
-
export declare function isDate<TForm, TField extends string | Date | undefined = string | Date>(
|
|
13
|
+
export declare function isDate<TForm = unknown, TField extends string | Date | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
/**
|
|
3
|
+
* Фабрика валидатора, проверяющего что значение — конечное число (не NaN, не строка).
|
|
4
|
+
*
|
|
5
|
+
* Пустые значения (`null`/`undefined`) пропускаются (используйте `required` для обязательности).
|
|
6
|
+
* В отличие от других number-валидаторов, **не** пропускает не-числа — это его задача.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* validate(path.amount, isNumber());
|
|
11
|
+
* validate(path.amount, isNumber({ message: 'Введите число' }));
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export declare function isNumber<TForm = unknown, TField extends number | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,36 +1,13 @@
|
|
|
1
|
-
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
import { FieldPathNode } from '../../types';
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
* Фабрика валидатора максимального возраста (по дате рождения).
|
|
5
4
|
*
|
|
6
|
-
* Пустые
|
|
7
|
-
*
|
|
8
|
-
* @group Validation
|
|
9
|
-
* @category Validators
|
|
10
|
-
*
|
|
11
|
-
* @param fieldPath - Путь к полю для валидации (дата рождения)
|
|
12
|
-
* @param maxAgeValue - Максимально допустимый возраст в годах
|
|
13
|
-
* @param options - Опции валидации (message, params)
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* // Базовое использование - максимум 65 лет
|
|
18
|
-
* validationSchema: (path) => [
|
|
19
|
-
* maxAge(path.birthDate, 65),
|
|
20
|
-
* ]
|
|
21
|
-
*
|
|
22
|
-
* // С кастомным сообщением
|
|
23
|
-
* maxAge(path.birthDate, 100, { message: 'Проверьте правильность даты рождения' })
|
|
24
|
-
* ```
|
|
5
|
+
* Пустые и невалидные даты пропускаются.
|
|
25
6
|
*
|
|
26
7
|
* @example
|
|
27
8
|
* ```typescript
|
|
28
|
-
*
|
|
29
|
-
* {
|
|
30
|
-
* code: 'date_max_age',
|
|
31
|
-
* message: 'Максимальный возраст: 65 лет',
|
|
32
|
-
* params: { maxAge: 65, currentAge: 70 }
|
|
33
|
-
* }
|
|
9
|
+
* validate(path.birthDate, maxAge(65));
|
|
10
|
+
* validate(path.birthDate, maxAge(100, { message: 'Проверьте дату рождения' }));
|
|
34
11
|
* ```
|
|
35
12
|
*/
|
|
36
|
-
export declare function maxAge<TForm, TField extends string | Date | null | undefined = string | Date>(
|
|
13
|
+
export declare function maxAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,36 +1,13 @@
|
|
|
1
|
-
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
import { FieldPathNode } from '../../types';
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
* Фабрика валидатора максимальной даты (включительно).
|
|
5
4
|
*
|
|
6
|
-
* Пустые
|
|
7
|
-
*
|
|
8
|
-
* @group Validation
|
|
9
|
-
* @category Validators
|
|
10
|
-
*
|
|
11
|
-
* @param fieldPath - Путь к полю для валидации
|
|
12
|
-
* @param maxDateValue - Максимально допустимая дата (включительно)
|
|
13
|
-
* @param options - Опции валидации (message, params)
|
|
14
|
-
*
|
|
15
|
-
* @example
|
|
16
|
-
* ```typescript
|
|
17
|
-
* // Базовое использование
|
|
18
|
-
* validationSchema: (path) => [
|
|
19
|
-
* maxDate(path.birthDate, new Date()), // Не позже сегодня
|
|
20
|
-
* ]
|
|
21
|
-
*
|
|
22
|
-
* // С кастомным сообщением
|
|
23
|
-
* maxDate(path.endDate, new Date('2025-12-31'), { message: 'Дата не может быть позже конца года' })
|
|
24
|
-
* ```
|
|
5
|
+
* Пустые и невалидные даты пропускаются.
|
|
25
6
|
*
|
|
26
7
|
* @example
|
|
27
8
|
* ```typescript
|
|
28
|
-
* //
|
|
29
|
-
*
|
|
30
|
-
* code: 'date_max',
|
|
31
|
-
* message: 'Дата должна быть не позднее 31.12.2025',
|
|
32
|
-
* params: { maxDate: Date }
|
|
33
|
-
* }
|
|
9
|
+
* validate(path.birthDate, maxDate(new Date())); // не позже сегодня
|
|
10
|
+
* validate(path.endDate, maxDate(new Date('2025-12-31')));
|
|
34
11
|
* ```
|
|
35
12
|
*/
|
|
36
|
-
export declare function maxDate<TForm, TField extends string | Date | null | undefined = string | Date>(
|
|
13
|
+
export declare function maxDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,38 +1,13 @@
|
|
|
1
|
-
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
import { FieldPathNode } from '../../types';
|
|
1
|
+
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
3
2
|
/**
|
|
4
|
-
*
|
|
3
|
+
* Фабрика валидатора максимальной длины строки или массива.
|
|
5
4
|
*
|
|
6
|
-
* Проверяет, что длина строки не превышает указанный максимум.
|
|
7
5
|
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
8
6
|
*
|
|
9
|
-
* @group Validation
|
|
10
|
-
* @category Validators
|
|
11
|
-
*
|
|
12
|
-
* @param fieldPath - Путь к полю для валидации
|
|
13
|
-
* @param maxLen - Максимальная допустимая длина строки
|
|
14
|
-
* @param options - Опции валидации (message, params)
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* // Базовое использование
|
|
19
|
-
* validationSchema: (path) => [
|
|
20
|
-
* maxLength(path.name, 50),
|
|
21
|
-
* maxLength(path.bio, 500),
|
|
22
|
-
* ]
|
|
23
|
-
*
|
|
24
|
-
* // С кастомным сообщением
|
|
25
|
-
* maxLength(path.bio, 500, { message: 'Максимум 500 символов' })
|
|
26
|
-
* ```
|
|
27
|
-
*
|
|
28
7
|
* @example
|
|
29
8
|
* ```typescript
|
|
30
|
-
*
|
|
31
|
-
* {
|
|
32
|
-
* code: 'maxLength',
|
|
33
|
-
* message: 'Максимальная длина: 500 символов',
|
|
34
|
-
* params: { maxLength: 500, actualLength: 512 }
|
|
35
|
-
* }
|
|
9
|
+
* validate(path.name, maxLength(50));
|
|
10
|
+
* validate(path.bio, maxLength(500, { message: 'Max 500 символов' }));
|
|
36
11
|
* ```
|
|
37
12
|
*/
|
|
38
|
-
export declare function maxLength<TForm, TField
|
|
13
|
+
export declare function maxLength<TForm = unknown, TField = unknown>(maxLen: number, options?: ValidateOptions): Validator<TForm, TField>;
|