@reformer/core 1.1.0 → 2.0.0-beta.10
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/behaviors/compute-from.d.ts +2 -0
- package/dist/behaviors/compute-from.js +31 -0
- package/dist/behaviors/copy-from.d.ts +2 -0
- package/dist/behaviors/copy-from.js +29 -0
- package/dist/behaviors/enable-when.d.ts +2 -0
- package/dist/behaviors/enable-when.js +25 -0
- package/dist/behaviors/reset-when.d.ts +2 -0
- package/dist/behaviors/reset-when.js +24 -0
- package/dist/behaviors/revalidate-when.d.ts +2 -0
- package/dist/behaviors/revalidate-when.js +18 -0
- package/dist/behaviors/sync-fields.d.ts +2 -0
- package/dist/behaviors/sync-fields.js +41 -0
- package/dist/behaviors/transform-value.d.ts +2 -0
- package/dist/behaviors/transform-value.js +45 -0
- package/dist/behaviors/watch-field.d.ts +2 -0
- package/dist/behaviors/watch-field.js +21 -0
- package/dist/behaviors.d.ts +6 -2
- package/dist/behaviors.js +27 -228
- package/dist/core/behavior/behavior-context.d.ts +32 -14
- package/dist/core/behavior/behavior-registry.d.ts +15 -27
- package/dist/core/behavior/behaviors/compute-from.d.ts +50 -21
- package/dist/core/behavior/behaviors/copy-from.d.ts +39 -14
- package/dist/core/behavior/behaviors/enable-when.d.ts +88 -19
- package/dist/core/behavior/behaviors/reset-when.d.ts +31 -18
- package/dist/core/behavior/behaviors/revalidate-when.d.ts +40 -17
- package/dist/core/behavior/behaviors/sync-fields.d.ts +34 -14
- package/dist/core/behavior/behaviors/transform-value.d.ts +116 -44
- package/dist/core/behavior/behaviors/watch-field.d.ts +66 -21
- package/dist/core/behavior/compose-behavior.d.ts +2 -12
- package/dist/core/behavior/index.d.ts +0 -1
- package/dist/core/behavior/types.d.ts +2 -8
- package/dist/core/factories/node-factory.d.ts +6 -29
- package/dist/core/nodes/array-node.d.ts +42 -22
- package/dist/core/nodes/field-node.d.ts +51 -26
- package/dist/core/nodes/form-node.d.ts +18 -20
- package/dist/core/nodes/group-node.d.ts +37 -212
- package/dist/core/types/deep-schema.d.ts +2 -12
- package/dist/core/types/field-path.d.ts +1 -1
- package/dist/core/types/form-context.d.ts +36 -30
- package/dist/core/types/{group-node-proxy.d.ts → form-proxy.d.ts} +12 -42
- package/dist/core/types/index.d.ts +52 -6
- package/dist/core/types/validation-schema.d.ts +3 -12
- package/dist/core/utils/abstract-registry.d.ts +74 -0
- package/dist/core/utils/aggregate-signals.d.ts +71 -0
- package/dist/core/utils/create-form.d.ts +3 -20
- package/dist/core/utils/error-handler.d.ts +1 -18
- package/dist/core/utils/field-path-navigator.d.ts +1 -1
- package/dist/core/{validation → utils}/field-path.d.ts +23 -6
- package/dist/core/utils/form-observer.d.ts +176 -0
- package/dist/core/utils/form-proxy-builder.d.ts +25 -0
- package/dist/core/utils/form-submitter.d.ts +121 -0
- package/dist/core/utils/index.d.ts +10 -2
- package/dist/core/utils/registry-helpers.d.ts +0 -7
- package/dist/core/utils/safe-effect.d.ts +73 -0
- package/dist/core/utils/status-machine.d.ts +153 -0
- package/dist/core/utils/type-guards.d.ts +5 -23
- package/dist/core/utils/unique-id.d.ts +53 -0
- package/dist/core/validation/core/apply-when.d.ts +3 -9
- package/dist/core/validation/core/apply.d.ts +2 -13
- package/dist/core/validation/core/validate-async.d.ts +2 -8
- package/dist/core/validation/core/validate-tree.d.ts +10 -10
- package/dist/core/validation/core/validate.d.ts +1 -7
- package/dist/core/validation/index.d.ts +8 -2
- package/dist/core/validation/validate-form.d.ts +1 -38
- package/dist/core/validation/validation-applicator.d.ts +2 -21
- package/dist/core/validation/validation-context.d.ts +67 -28
- package/dist/core/validation/validation-registry.d.ts +11 -25
- package/dist/core/validation/validators/array-validators.d.ts +2 -12
- package/dist/core/validation/validators/date-utils.d.ts +26 -0
- package/dist/core/validation/validators/email.d.ts +2 -9
- package/dist/core/validation/validators/future-date.d.ts +35 -0
- package/dist/core/validation/validators/index.d.ts +7 -1
- package/dist/core/validation/validators/is-date.d.ts +36 -0
- package/dist/core/validation/validators/max-age.d.ts +36 -0
- package/dist/core/validation/validators/max-date.d.ts +36 -0
- package/dist/core/validation/validators/max-length.d.ts +3 -10
- package/dist/core/validation/validators/max.d.ts +3 -10
- package/dist/core/validation/validators/min-age.d.ts +36 -0
- package/dist/core/validation/validators/min-date.d.ts +36 -0
- package/dist/core/validation/validators/min-length.d.ts +3 -10
- package/dist/core/validation/validators/min.d.ts +3 -10
- package/dist/core/validation/validators/number.d.ts +2 -9
- package/dist/core/validation/validators/past-date.d.ts +35 -0
- package/dist/core/validation/validators/pattern.d.ts +2 -9
- package/dist/core/validation/validators/phone.d.ts +2 -9
- package/dist/core/validation/validators/required.d.ts +2 -9
- package/dist/core/validation/validators/url.d.ts +2 -9
- package/dist/date-utils-xUWFslTj.js +29 -0
- package/dist/field-path-DuKdGcIE.js +66 -0
- package/dist/hooks/types.d.ts +328 -0
- package/dist/hooks/useArrayLength.d.ts +31 -0
- package/dist/hooks/useFormControl.d.ts +15 -39
- package/dist/hooks/useFormControlValue.d.ts +167 -0
- package/dist/hooks/useHiddenCondition.d.ts +25 -0
- package/dist/hooks/useSignalSubscription.d.ts +17 -0
- package/dist/index-D25LsbRm.js +73 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.js +3271 -8
- package/dist/registry-helpers-Bv_BJ1s-.js +615 -0
- package/dist/safe-effect-Dh8uw81c.js +20 -0
- package/dist/validate-C3XiA_zf.js +10 -0
- package/dist/validators/email.d.ts +2 -0
- package/dist/validators/email.js +13 -0
- package/dist/validators/future-date.d.ts +2 -0
- package/dist/validators/future-date.js +20 -0
- package/dist/validators/is-date.d.ts +2 -0
- package/dist/validators/is-date.js +12 -0
- package/dist/validators/max-age.d.ts +2 -0
- package/dist/validators/max-age.js +20 -0
- package/dist/validators/max-date.d.ts +2 -0
- package/dist/validators/max-date.js +20 -0
- package/dist/validators/max-length.d.ts +2 -0
- package/dist/validators/max-length.js +11 -0
- package/dist/validators/max.d.ts +2 -0
- package/dist/validators/max.js +11 -0
- package/dist/validators/min-age.d.ts +2 -0
- package/dist/validators/min-age.js +20 -0
- package/dist/validators/min-date.d.ts +2 -0
- package/dist/validators/min-date.js +20 -0
- package/dist/validators/min-length.d.ts +2 -0
- package/dist/validators/min-length.js +11 -0
- package/dist/validators/min.d.ts +2 -0
- package/dist/validators/min.js +11 -0
- package/dist/validators/number.d.ts +2 -0
- package/dist/validators/number.js +35 -0
- package/dist/validators/past-date.d.ts +2 -0
- package/dist/validators/past-date.js +20 -0
- package/dist/validators/pattern.d.ts +2 -0
- package/dist/validators/pattern.js +11 -0
- package/dist/validators/phone.d.ts +2 -0
- package/dist/validators/phone.js +35 -0
- package/dist/validators/required.d.ts +2 -0
- package/dist/validators/required.js +15 -0
- package/dist/validators/url.d.ts +2 -0
- package/dist/validators/url.js +19 -0
- package/dist/validators-BGsNOgT1.js +207 -0
- package/dist/validators.d.ts +6 -2
- package/dist/validators.js +54 -296
- package/llms.txt +8887 -59
- package/package.json +87 -8
- package/dist/core/behavior/behavior-applicator.d.ts +0 -71
- package/dist/core/behavior/behavior-applicator.js +0 -92
- package/dist/core/behavior/behavior-context.js +0 -38
- package/dist/core/behavior/behavior-registry.js +0 -198
- package/dist/core/behavior/behaviors/compute-from.js +0 -84
- package/dist/core/behavior/behaviors/copy-from.js +0 -64
- package/dist/core/behavior/behaviors/enable-when.js +0 -81
- package/dist/core/behavior/behaviors/index.js +0 -11
- package/dist/core/behavior/behaviors/reset-when.js +0 -63
- package/dist/core/behavior/behaviors/revalidate-when.js +0 -51
- package/dist/core/behavior/behaviors/sync-fields.js +0 -66
- package/dist/core/behavior/behaviors/transform-value.js +0 -110
- package/dist/core/behavior/behaviors/watch-field.js +0 -56
- package/dist/core/behavior/compose-behavior.js +0 -166
- package/dist/core/behavior/create-field-path.d.ts +0 -20
- package/dist/core/behavior/create-field-path.js +0 -69
- package/dist/core/behavior/index.js +0 -17
- package/dist/core/behavior/types.js +0 -7
- package/dist/core/context/form-context-impl.d.ts +0 -29
- package/dist/core/context/form-context-impl.js +0 -37
- package/dist/core/factories/index.js +0 -6
- package/dist/core/factories/node-factory.js +0 -281
- package/dist/core/nodes/array-node.js +0 -534
- package/dist/core/nodes/field-node.js +0 -510
- package/dist/core/nodes/form-node.js +0 -343
- package/dist/core/nodes/group-node/field-registry.d.ts +0 -191
- package/dist/core/nodes/group-node/field-registry.js +0 -215
- package/dist/core/nodes/group-node/index.d.ts +0 -11
- package/dist/core/nodes/group-node/index.js +0 -11
- package/dist/core/nodes/group-node/proxy-builder.d.ts +0 -71
- package/dist/core/nodes/group-node/proxy-builder.js +0 -161
- package/dist/core/nodes/group-node/state-manager.d.ts +0 -184
- package/dist/core/nodes/group-node/state-manager.js +0 -265
- package/dist/core/nodes/group-node.js +0 -770
- package/dist/core/types/deep-schema.js +0 -11
- package/dist/core/types/field-path.js +0 -4
- package/dist/core/types/form-context.js +0 -25
- package/dist/core/types/group-node-proxy.js +0 -31
- package/dist/core/types/index.js +0 -4
- package/dist/core/types/validation-schema.js +0 -10
- package/dist/core/utils/create-form.js +0 -24
- package/dist/core/utils/debounce.d.ts +0 -160
- package/dist/core/utils/debounce.js +0 -197
- package/dist/core/utils/error-handler.js +0 -226
- package/dist/core/utils/field-path-navigator.js +0 -374
- package/dist/core/utils/index.js +0 -14
- package/dist/core/utils/registry-helpers.js +0 -79
- package/dist/core/utils/registry-stack.js +0 -86
- package/dist/core/utils/resources.d.ts +0 -41
- package/dist/core/utils/resources.js +0 -69
- package/dist/core/utils/subscription-manager.js +0 -214
- package/dist/core/utils/type-guards.js +0 -169
- package/dist/core/validation/core/apply-when.js +0 -41
- package/dist/core/validation/core/apply.js +0 -38
- package/dist/core/validation/core/index.js +0 -8
- package/dist/core/validation/core/validate-async.js +0 -45
- package/dist/core/validation/core/validate-tree.js +0 -37
- package/dist/core/validation/core/validate.js +0 -38
- package/dist/core/validation/field-path.js +0 -147
- package/dist/core/validation/index.js +0 -33
- package/dist/core/validation/validate-form.js +0 -152
- package/dist/core/validation/validation-applicator.js +0 -217
- package/dist/core/validation/validation-context.js +0 -75
- package/dist/core/validation/validation-registry.js +0 -298
- package/dist/core/validation/validators/array-validators.js +0 -86
- package/dist/core/validation/validators/date.d.ts +0 -38
- package/dist/core/validation/validators/date.js +0 -117
- package/dist/core/validation/validators/email.js +0 -60
- package/dist/core/validation/validators/index.js +0 -14
- package/dist/core/validation/validators/max-length.js +0 -60
- package/dist/core/validation/validators/max.js +0 -60
- package/dist/core/validation/validators/min-length.js +0 -60
- package/dist/core/validation/validators/min.js +0 -60
- package/dist/core/validation/validators/number.js +0 -90
- package/dist/core/validation/validators/pattern.js +0 -62
- package/dist/core/validation/validators/phone.js +0 -58
- package/dist/core/validation/validators/required.js +0 -69
- package/dist/core/validation/validators/url.js +0 -55
- package/dist/create-field-path-CdPF3lIK.js +0 -704
- package/dist/hooks/useFormControl.js +0 -298
- package/dist/node-factory-D7DOnSSN.js +0 -3200
|
@@ -1,47 +1,86 @@
|
|
|
1
|
+
import { GroupNode } from '../nodes/group-node';
|
|
2
|
+
import { FieldNode } from '../nodes/field-node';
|
|
3
|
+
import { FormProxy } from '../types/form-proxy';
|
|
4
|
+
import { FormContext } from '../types/form-context';
|
|
1
5
|
/**
|
|
2
|
-
*
|
|
6
|
+
* Базовый класс контекста валидации
|
|
7
|
+
* Содержит общую логику для всех типов контекстов
|
|
8
|
+
* @internal
|
|
3
9
|
*/
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import type { GroupNodeWithControls } from '../types/group-node-proxy';
|
|
7
|
-
import type { FormContext } from '../types/form-context';
|
|
8
|
-
/**
|
|
9
|
-
* Реализация контекста валидации для отдельного поля
|
|
10
|
-
* Реализует FormContext
|
|
11
|
-
*/
|
|
12
|
-
export declare class ValidationContextImpl<TForm, TField> implements FormContext<TForm> {
|
|
13
|
-
private _form;
|
|
14
|
-
private control;
|
|
10
|
+
declare abstract class BaseValidationContext<TForm> implements FormContext<TForm> {
|
|
11
|
+
protected readonly _form: GroupNode<TForm>;
|
|
15
12
|
/**
|
|
16
13
|
* Форма с типизированным Proxy-доступом к полям
|
|
17
14
|
*/
|
|
18
|
-
readonly form:
|
|
19
|
-
constructor(form: GroupNode<TForm
|
|
20
|
-
/**
|
|
21
|
-
* Получить текущее значение поля (внутренний метод для validation-applicator)
|
|
22
|
-
* @internal
|
|
23
|
-
*/
|
|
24
|
-
value(): TField;
|
|
15
|
+
readonly form: FormProxy<TForm>;
|
|
16
|
+
constructor(form: GroupNode<TForm>);
|
|
25
17
|
/**
|
|
26
18
|
* Безопасно установить значение поля по строковому пути
|
|
27
19
|
* Автоматически использует emitEvent: false для предотвращения циклов
|
|
28
20
|
*/
|
|
29
21
|
setFieldValue(path: string, value: unknown): void;
|
|
22
|
+
/**
|
|
23
|
+
* Получить поле формы по строковому пути
|
|
24
|
+
*/
|
|
25
|
+
getFieldByPath(path: string): import('../..').FormNode<import('../types').FormValue> | undefined;
|
|
30
26
|
}
|
|
31
27
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
28
|
+
* Контекст валидации одного поля. Создаётся фреймворком и передаётся в валидаторы
|
|
29
|
+
* (`required`, `validate`, …) — напрямую инстанцировать не нужно.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* import { validate } from '@reformer/core/validators';
|
|
34
|
+
*
|
|
35
|
+
* validate(path.password, (value, ctx) => {
|
|
36
|
+
* // ctx — экземпляр ValidationContextImpl, доступ к ctx.form для cross-field логики
|
|
37
|
+
* if (value !== ctx.form.confirmPassword.value) {
|
|
38
|
+
* return { code: 'mismatch', message: 'Пароли не совпадают' };
|
|
39
|
+
* }
|
|
40
|
+
* return null;
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
34
43
|
*/
|
|
35
|
-
export declare class
|
|
36
|
-
private
|
|
44
|
+
export declare class ValidationContextImpl<TForm, TField> extends BaseValidationContext<TForm> {
|
|
45
|
+
private control;
|
|
46
|
+
constructor(form: GroupNode<TForm>, _fieldKey: keyof TForm, control: FieldNode<TField>);
|
|
37
47
|
/**
|
|
38
|
-
*
|
|
48
|
+
* Получить текущее значение поля (внутренний метод для validation-applicator)
|
|
49
|
+
* @internal
|
|
39
50
|
*/
|
|
40
|
-
|
|
51
|
+
value(): TField;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Контекст cross-field валидации. Передаётся в `validateTree`/`validateForm`
|
|
55
|
+
* callback'и — напрямую инстанцировать не нужно.
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* import { validateForm } from '@reformer/core';
|
|
60
|
+
*
|
|
61
|
+
* validateForm(form, (ctx) => {
|
|
62
|
+
* // ctx — экземпляр TreeValidationContextImpl
|
|
63
|
+
* if (ctx.form.startDate.value > ctx.form.endDate.value) {
|
|
64
|
+
* return [{ code: 'date-range', message: 'Дата начала позже даты окончания' }];
|
|
65
|
+
* }
|
|
66
|
+
* return [];
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare class TreeValidationContextImpl<TForm> extends BaseValidationContext<TForm> {
|
|
41
71
|
constructor(form: GroupNode<TForm>);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Контекст валидации для ArrayNode
|
|
75
|
+
* Предоставляет доступ к значению массива
|
|
76
|
+
*/
|
|
77
|
+
export declare class ArrayValidationContextImpl<TForm, TItem> extends BaseValidationContext<TForm> {
|
|
78
|
+
private arrayValue;
|
|
79
|
+
constructor(form: GroupNode<TForm>, _fieldKey: keyof TForm, arrayValue: TItem[]);
|
|
42
80
|
/**
|
|
43
|
-
*
|
|
44
|
-
*
|
|
81
|
+
* Получить текущее значение массива (для валидатора)
|
|
82
|
+
* @internal
|
|
45
83
|
*/
|
|
46
|
-
|
|
84
|
+
value(): TItem[];
|
|
47
85
|
}
|
|
86
|
+
export {};
|
|
@@ -1,16 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
* ValidationRegistry - система регистрации и применения валидаторов
|
|
3
|
-
*
|
|
4
|
-
* Работает как стек контекстов:
|
|
5
|
-
* 1. При вызове validation schema функции создается новый контекст
|
|
6
|
-
* 2. Все вызовы validate(), applyWhen() и т.д. регистрируют валидаторы в текущем контексте
|
|
7
|
-
* 3. После завершения схемы валидаторы применяются к GroupNode
|
|
8
|
-
*/
|
|
9
|
-
import type { GroupNode } from '../nodes/group-node';
|
|
1
|
+
import { GroupNode } from '../nodes/group-node';
|
|
10
2
|
import { FormFields } from '../types';
|
|
11
|
-
import
|
|
3
|
+
import { AbstractRegistry } from '../utils/abstract-registry';
|
|
4
|
+
import { ValidatorRegistration, ContextualValidatorFn, ContextualAsyncValidatorFn, TreeValidatorFn, ConditionFn, ValidateOptions, ValidateAsyncOptions, ValidateTreeOptions } from '../types/validation-schema';
|
|
12
5
|
/**
|
|
13
6
|
* Контекст регистрации валидаторов
|
|
7
|
+
* Управляет condition stack для условных валидаторов
|
|
14
8
|
*/
|
|
15
9
|
declare class RegistrationContext {
|
|
16
10
|
private validators;
|
|
@@ -38,10 +32,9 @@ declare class RegistrationContext {
|
|
|
38
32
|
* Каждый экземпляр GroupNode создает собственный реестр (композиция).
|
|
39
33
|
* Устраняет race conditions и изолирует формы друг от друга.
|
|
40
34
|
*
|
|
41
|
-
*
|
|
42
|
-
* -
|
|
43
|
-
* -
|
|
44
|
-
* - getCurrent() возвращает текущий активный реестр
|
|
35
|
+
* Наследует AbstractRegistry для унификации:
|
|
36
|
+
* - Управления global stack
|
|
37
|
+
* - Template methods begin/end registration
|
|
45
38
|
*
|
|
46
39
|
* @example
|
|
47
40
|
* ```typescript
|
|
@@ -56,13 +49,10 @@ declare class RegistrationContext {
|
|
|
56
49
|
* }
|
|
57
50
|
* ```
|
|
58
51
|
*/
|
|
59
|
-
export declare class ValidationRegistry {
|
|
60
|
-
/**
|
|
61
|
-
* Global stack активных реестров
|
|
62
|
-
* Используется для изоляции форм друг от друга
|
|
63
|
-
*/
|
|
64
|
-
private static registryStack;
|
|
52
|
+
export declare class ValidationRegistry extends AbstractRegistry<ValidatorRegistration> {
|
|
53
|
+
/** Внутренний стек контекстов для управления condition blocks */
|
|
65
54
|
private contextStack;
|
|
55
|
+
/** Финальные валидаторы после завершения регистрации */
|
|
66
56
|
private validators;
|
|
67
57
|
/**
|
|
68
58
|
* Получить текущий активный реестр из global stack
|
|
@@ -85,6 +75,7 @@ export declare class ValidationRegistry {
|
|
|
85
75
|
* Начать регистрацию валидаторов для формы
|
|
86
76
|
*
|
|
87
77
|
* Помещает this в global stack для изоляции форм
|
|
78
|
+
* Создает новый RegistrationContext для condition management
|
|
88
79
|
*/
|
|
89
80
|
beginRegistration(): RegistrationContext;
|
|
90
81
|
/**
|
|
@@ -142,11 +133,6 @@ export declare class ValidationRegistry {
|
|
|
142
133
|
* Возвращает локальный массив валидаторов (без аргумента form).
|
|
143
134
|
*/
|
|
144
135
|
getValidators(): ValidatorRegistration[];
|
|
145
|
-
/**
|
|
146
|
-
* Применить зарегистрированные валидаторы к GroupNode
|
|
147
|
-
* @private
|
|
148
|
-
*/
|
|
149
|
-
private applyValidators;
|
|
150
136
|
/**
|
|
151
137
|
* Применить array-items validators к ArrayNode элементам
|
|
152
138
|
* @private
|
|
@@ -1,15 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* Предоставляет специализированные функции для валидации ArrayNode:
|
|
5
|
-
* - notEmpty: проверка что массив не пустой
|
|
6
|
-
* - validateItems: применение validation schema к каждому элементу
|
|
7
|
-
*
|
|
8
|
-
* @group Validation
|
|
9
|
-
* @category Validators
|
|
10
|
-
*/
|
|
11
|
-
import type { ValidateOptions, ValidationSchemaFn } from '../../types/validation-schema';
|
|
12
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions, ValidationSchemaFn } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
13
3
|
/**
|
|
14
4
|
* Проверить что массив содержит хотя бы один элемент
|
|
15
5
|
*
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Утилиты для работы с датами в валидаторах
|
|
3
|
+
*
|
|
4
|
+
* @group Validation
|
|
5
|
+
* @category Validators
|
|
6
|
+
* @module validators/date-utils
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Парсит значение в объект Date
|
|
10
|
+
*
|
|
11
|
+
* @param value - Значение для парсинга (Date, string или undefined)
|
|
12
|
+
* @returns Date объект или null если парсинг не удался
|
|
13
|
+
*/
|
|
14
|
+
export declare function parseDate(value: string | Date | null | undefined): Date | null;
|
|
15
|
+
/**
|
|
16
|
+
* Возвращает сегодняшнюю дату с обнулённым временем
|
|
17
|
+
*/
|
|
18
|
+
export declare function getToday(): Date;
|
|
19
|
+
/**
|
|
20
|
+
* Нормализует дату, обнуляя время
|
|
21
|
+
*/
|
|
22
|
+
export declare function normalizeDate(date: Date): Date;
|
|
23
|
+
/**
|
|
24
|
+
* Вычисляет возраст на основе даты рождения
|
|
25
|
+
*/
|
|
26
|
+
export declare function calculateAge(birthDate: Date): number;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/email
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Валидатор формата email
|
|
12
5
|
*
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Проверяет, что дата находится в будущем (не в прошлом)
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и невалидные даты пропускаются (используйте `required` и `isDate`).
|
|
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
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Ошибка валидации
|
|
28
|
+
* {
|
|
29
|
+
* code: 'date_past',
|
|
30
|
+
* message: 'Дата не может быть в прошлом',
|
|
31
|
+
* params: {}
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function futureDate<TForm, TField extends string | Date | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions): void;
|
|
@@ -11,4 +11,10 @@ export { pattern } from './pattern';
|
|
|
11
11
|
export { url } from './url';
|
|
12
12
|
export { phone, type PhoneFormat } from './phone';
|
|
13
13
|
export { number } from './number';
|
|
14
|
-
export {
|
|
14
|
+
export { isDate } from './is-date';
|
|
15
|
+
export { minDate } from './min-date';
|
|
16
|
+
export { maxDate } from './max-date';
|
|
17
|
+
export { pastDate } from './past-date';
|
|
18
|
+
export { futureDate } from './future-date';
|
|
19
|
+
export { minAge } from './min-age';
|
|
20
|
+
export { maxAge } from './max-age';
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Проверяет, что значение является валидной датой
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
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
|
+
* isDate(path.birthDate),
|
|
19
|
+
* isDate(path.eventDate),
|
|
20
|
+
* ]
|
|
21
|
+
*
|
|
22
|
+
* // С кастомным сообщением
|
|
23
|
+
* isDate(path.birthDate, { message: 'Введите корректную дату' })
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Ошибка валидации
|
|
29
|
+
* {
|
|
30
|
+
* code: 'date_invalid',
|
|
31
|
+
* message: 'Неверный формат даты',
|
|
32
|
+
* params: {}
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function isDate<TForm, TField extends string | Date | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Проверяет, что возраст (вычисленный из даты рождения) не больше указанного
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и невалидные даты пропускаются (используйте `required` и `isDate`).
|
|
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
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Ошибка валидации
|
|
29
|
+
* {
|
|
30
|
+
* code: 'date_max_age',
|
|
31
|
+
* message: 'Максимальный возраст: 65 лет',
|
|
32
|
+
* params: { maxAge: 65, currentAge: 70 }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function maxAge<TForm, TField extends string | Date | null | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxAgeValue: number, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Проверяет, что дата не позже указанной максимальной
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и невалидные даты пропускаются (используйте `required` и `isDate`).
|
|
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
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Ошибка валидации
|
|
29
|
+
* {
|
|
30
|
+
* code: 'date_max',
|
|
31
|
+
* message: 'Дата должна быть не позднее 31.12.2025',
|
|
32
|
+
* params: { maxDate: Date }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function maxDate<TForm, TField extends string | Date | null | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxDateValue: Date, options?: ValidateOptions): void;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/maxLength
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Валидатор максимальной длины строки
|
|
12
5
|
*
|
|
@@ -42,4 +35,4 @@ import type { FieldPathNode } from '../../types';
|
|
|
42
35
|
* }
|
|
43
36
|
* ```
|
|
44
37
|
*/
|
|
45
|
-
export declare function maxLength<TForm, TField extends string | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxLen: number, options?: ValidateOptions): void;
|
|
38
|
+
export declare function maxLength<TForm, TField extends string | null | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxLen: number, options?: ValidateOptions): void;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/max
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Валидатор максимального числового значения
|
|
12
5
|
*
|
|
@@ -42,4 +35,4 @@ import type { FieldPathNode } from '../../types';
|
|
|
42
35
|
* }
|
|
43
36
|
* ```
|
|
44
37
|
*/
|
|
45
|
-
export declare function max<TForm, TField extends number | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxValue: number, options?: ValidateOptions): void;
|
|
38
|
+
export declare function max<TForm, TField extends number | null | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxValue: number, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Проверяет, что возраст (вычисленный из даты рождения) не меньше указанного
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и невалидные даты пропускаются (используйте `required` и `isDate`).
|
|
7
|
+
*
|
|
8
|
+
* @group Validation
|
|
9
|
+
* @category Validators
|
|
10
|
+
*
|
|
11
|
+
* @param fieldPath - Путь к полю для валидации (дата рождения)
|
|
12
|
+
* @param minAgeValue - Минимально допустимый возраст в годах
|
|
13
|
+
* @param options - Опции валидации (message, params)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Базовое использование - минимум 18 лет
|
|
18
|
+
* validationSchema: (path) => [
|
|
19
|
+
* minAge(path.birthDate, 18),
|
|
20
|
+
* ]
|
|
21
|
+
*
|
|
22
|
+
* // С кастомным сообщением
|
|
23
|
+
* minAge(path.birthDate, 21, { message: 'Вам должно быть не менее 21 года' })
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Ошибка валидации
|
|
29
|
+
* {
|
|
30
|
+
* code: 'date_min_age',
|
|
31
|
+
* message: 'Минимальный возраст: 18 лет',
|
|
32
|
+
* params: { minAge: 18, currentAge: 16 }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function minAge<TForm, TField extends string | Date | null | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, minAgeValue: number, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Проверяет, что дата не раньше указанной минимальной
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и невалидные даты пропускаются (используйте `required` и `isDate`).
|
|
7
|
+
*
|
|
8
|
+
* @group Validation
|
|
9
|
+
* @category Validators
|
|
10
|
+
*
|
|
11
|
+
* @param fieldPath - Путь к полю для валидации
|
|
12
|
+
* @param minDateValue - Минимально допустимая дата (включительно)
|
|
13
|
+
* @param options - Опции валидации (message, params)
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* // Базовое использование
|
|
18
|
+
* validationSchema: (path) => [
|
|
19
|
+
* minDate(path.eventDate, new Date('2024-01-01')),
|
|
20
|
+
* ]
|
|
21
|
+
*
|
|
22
|
+
* // С кастомным сообщением
|
|
23
|
+
* minDate(path.startDate, new Date(), { message: 'Дата должна быть не раньше сегодня' })
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // Ошибка валидации
|
|
29
|
+
* {
|
|
30
|
+
* code: 'date_min',
|
|
31
|
+
* message: 'Дата должна быть не ранее 01.01.2024',
|
|
32
|
+
* params: { minDate: Date }
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function minDate<TForm, TField extends string | Date | null | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, minDateValue: Date, options?: ValidateOptions): void;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/minLength
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Валидатор минимальной длины строки
|
|
12
5
|
*
|
|
@@ -42,4 +35,4 @@ import type { FieldPathNode } from '../../types';
|
|
|
42
35
|
* }
|
|
43
36
|
* ```
|
|
44
37
|
*/
|
|
45
|
-
export declare function minLength<TForm, TField extends string | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, minLen: number, options?: ValidateOptions): void;
|
|
38
|
+
export declare function minLength<TForm, TField extends string | null | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, minLen: number, options?: ValidateOptions): void;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/min
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Валидатор минимального числового значения
|
|
12
5
|
*
|
|
@@ -42,4 +35,4 @@ import type { FieldPathNode } from '../../types';
|
|
|
42
35
|
* }
|
|
43
36
|
* ```
|
|
44
37
|
*/
|
|
45
|
-
export declare function min<TForm, TField extends number | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, minValue: number, options?: ValidateOptions): void;
|
|
38
|
+
export declare function min<TForm, TField extends number | null | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, minValue: number, options?: ValidateOptions): void;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/number
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Адаптер для number валидатора
|
|
12
5
|
* Проверяет, что значение является числом и соответствует заданным ограничениям
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
3
|
+
/**
|
|
4
|
+
* Проверяет, что дата находится в прошлом (не в будущем)
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и невалидные даты пропускаются (используйте `required` и `isDate`).
|
|
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
|
+
* pastDate(path.birthDate),
|
|
19
|
+
* ]
|
|
20
|
+
*
|
|
21
|
+
* // С кастомным сообщением
|
|
22
|
+
* pastDate(path.birthDate, { message: 'Дата рождения не может быть в будущем' })
|
|
23
|
+
* ```
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* // Ошибка валидации
|
|
28
|
+
* {
|
|
29
|
+
* code: 'date_future',
|
|
30
|
+
* message: 'Дата не может быть в будущем',
|
|
31
|
+
* params: {}
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function pastDate<TForm, TField extends string | Date | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions): void;
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/pattern
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Валидатор паттерна (регулярного выражения)
|
|
12
5
|
*
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/phone
|
|
7
|
-
*/
|
|
8
|
-
import type { ValidateOptions } from '../../types/validation-schema';
|
|
9
|
-
import type { FieldPathNode } from '../../types';
|
|
1
|
+
import { ValidateOptions } from '../../types/validation-schema';
|
|
2
|
+
import { FieldPathNode } from '../../types';
|
|
10
3
|
/**
|
|
11
4
|
* Формат телефона для валидации
|
|
12
5
|
*
|