@reformer/core 1.0.0-beta.3
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/LICENSE +21 -0
- package/README.md +53 -0
- package/dist/behaviors.d.ts +2 -0
- package/dist/behaviors.js +230 -0
- package/dist/core/behavior/behavior-applicator.d.ts +71 -0
- package/dist/core/behavior/behavior-applicator.js +92 -0
- package/dist/core/behavior/behavior-context.d.ts +29 -0
- package/dist/core/behavior/behavior-context.js +38 -0
- package/dist/core/behavior/behavior-registry.d.ts +97 -0
- package/dist/core/behavior/behavior-registry.js +198 -0
- package/dist/core/behavior/behaviors/compute-from.d.ts +41 -0
- package/dist/core/behavior/behaviors/compute-from.js +84 -0
- package/dist/core/behavior/behaviors/copy-from.d.ts +31 -0
- package/dist/core/behavior/behaviors/copy-from.js +64 -0
- package/dist/core/behavior/behaviors/enable-when.d.ts +49 -0
- package/dist/core/behavior/behaviors/enable-when.js +81 -0
- package/dist/core/behavior/behaviors/index.d.ts +11 -0
- package/dist/core/behavior/behaviors/index.js +11 -0
- package/dist/core/behavior/behaviors/reset-when.d.ts +51 -0
- package/dist/core/behavior/behaviors/reset-when.js +63 -0
- package/dist/core/behavior/behaviors/revalidate-when.d.ts +30 -0
- package/dist/core/behavior/behaviors/revalidate-when.js +51 -0
- package/dist/core/behavior/behaviors/sync-fields.d.ts +28 -0
- package/dist/core/behavior/behaviors/sync-fields.js +66 -0
- package/dist/core/behavior/behaviors/transform-value.d.ts +120 -0
- package/dist/core/behavior/behaviors/transform-value.js +110 -0
- package/dist/core/behavior/behaviors/watch-field.d.ts +35 -0
- package/dist/core/behavior/behaviors/watch-field.js +56 -0
- package/dist/core/behavior/compose-behavior.d.ts +106 -0
- package/dist/core/behavior/compose-behavior.js +166 -0
- package/dist/core/behavior/create-field-path.d.ts +20 -0
- package/dist/core/behavior/create-field-path.js +69 -0
- package/dist/core/behavior/index.d.ts +12 -0
- package/dist/core/behavior/index.js +17 -0
- package/dist/core/behavior/types.d.ts +152 -0
- package/dist/core/behavior/types.js +7 -0
- package/dist/core/context/form-context-impl.d.ts +29 -0
- package/dist/core/context/form-context-impl.js +37 -0
- package/dist/core/factories/index.d.ts +6 -0
- package/dist/core/factories/index.js +6 -0
- package/dist/core/factories/node-factory.d.ts +209 -0
- package/dist/core/factories/node-factory.js +281 -0
- package/dist/core/nodes/array-node.d.ts +308 -0
- package/dist/core/nodes/array-node.js +534 -0
- package/dist/core/nodes/field-node.d.ts +269 -0
- package/dist/core/nodes/field-node.js +510 -0
- package/dist/core/nodes/form-node.d.ts +342 -0
- package/dist/core/nodes/form-node.js +343 -0
- package/dist/core/nodes/group-node/field-registry.d.ts +191 -0
- package/dist/core/nodes/group-node/field-registry.js +215 -0
- package/dist/core/nodes/group-node/index.d.ts +11 -0
- package/dist/core/nodes/group-node/index.js +11 -0
- package/dist/core/nodes/group-node/proxy-builder.d.ts +71 -0
- package/dist/core/nodes/group-node/proxy-builder.js +161 -0
- package/dist/core/nodes/group-node/state-manager.d.ts +184 -0
- package/dist/core/nodes/group-node/state-manager.js +265 -0
- package/dist/core/nodes/group-node.d.ts +494 -0
- package/dist/core/nodes/group-node.js +770 -0
- package/dist/core/types/deep-schema.d.ts +78 -0
- package/dist/core/types/deep-schema.js +11 -0
- package/dist/core/types/field-path.d.ts +42 -0
- package/dist/core/types/field-path.js +4 -0
- package/dist/core/types/form-context.d.ts +83 -0
- package/dist/core/types/form-context.js +25 -0
- package/dist/core/types/group-node-proxy.d.ts +135 -0
- package/dist/core/types/group-node-proxy.js +31 -0
- package/dist/core/types/index.d.ts +163 -0
- package/dist/core/types/index.js +4 -0
- package/dist/core/types/validation-schema.d.ts +104 -0
- package/dist/core/types/validation-schema.js +10 -0
- package/dist/core/utils/create-form.d.ts +61 -0
- package/dist/core/utils/create-form.js +24 -0
- package/dist/core/utils/debounce.d.ts +160 -0
- package/dist/core/utils/debounce.js +197 -0
- package/dist/core/utils/error-handler.d.ts +180 -0
- package/dist/core/utils/error-handler.js +226 -0
- package/dist/core/utils/field-path-navigator.d.ts +240 -0
- package/dist/core/utils/field-path-navigator.js +374 -0
- package/dist/core/utils/index.d.ts +14 -0
- package/dist/core/utils/index.js +14 -0
- package/dist/core/utils/registry-helpers.d.ts +50 -0
- package/dist/core/utils/registry-helpers.js +79 -0
- package/dist/core/utils/registry-stack.d.ts +69 -0
- package/dist/core/utils/registry-stack.js +86 -0
- package/dist/core/utils/resources.d.ts +41 -0
- package/dist/core/utils/resources.js +69 -0
- package/dist/core/utils/subscription-manager.d.ts +180 -0
- package/dist/core/utils/subscription-manager.js +214 -0
- package/dist/core/utils/type-guards.d.ts +116 -0
- package/dist/core/utils/type-guards.js +169 -0
- package/dist/core/validation/core/apply-when.d.ts +28 -0
- package/dist/core/validation/core/apply-when.js +41 -0
- package/dist/core/validation/core/apply.d.ts +63 -0
- package/dist/core/validation/core/apply.js +38 -0
- package/dist/core/validation/core/index.d.ts +8 -0
- package/dist/core/validation/core/index.js +8 -0
- package/dist/core/validation/core/validate-async.d.ts +42 -0
- package/dist/core/validation/core/validate-async.js +45 -0
- package/dist/core/validation/core/validate-tree.d.ts +35 -0
- package/dist/core/validation/core/validate-tree.js +37 -0
- package/dist/core/validation/core/validate.d.ts +32 -0
- package/dist/core/validation/core/validate.js +38 -0
- package/dist/core/validation/field-path.d.ts +43 -0
- package/dist/core/validation/field-path.js +147 -0
- package/dist/core/validation/index.d.ts +21 -0
- package/dist/core/validation/index.js +33 -0
- package/dist/core/validation/validate-form.d.ts +85 -0
- package/dist/core/validation/validate-form.js +152 -0
- package/dist/core/validation/validation-applicator.d.ts +89 -0
- package/dist/core/validation/validation-applicator.js +217 -0
- package/dist/core/validation/validation-context.d.ts +47 -0
- package/dist/core/validation/validation-context.js +75 -0
- package/dist/core/validation/validation-registry.d.ts +156 -0
- package/dist/core/validation/validation-registry.js +298 -0
- package/dist/core/validation/validators/array-validators.d.ts +63 -0
- package/dist/core/validation/validators/array-validators.js +86 -0
- package/dist/core/validation/validators/date.d.ts +38 -0
- package/dist/core/validation/validators/date.js +117 -0
- package/dist/core/validation/validators/email.d.ts +44 -0
- package/dist/core/validation/validators/email.js +60 -0
- package/dist/core/validation/validators/index.d.ts +14 -0
- package/dist/core/validation/validators/index.js +14 -0
- package/dist/core/validation/validators/max-length.d.ts +45 -0
- package/dist/core/validation/validators/max-length.js +60 -0
- package/dist/core/validation/validators/max.d.ts +45 -0
- package/dist/core/validation/validators/max.js +60 -0
- package/dist/core/validation/validators/min-length.d.ts +45 -0
- package/dist/core/validation/validators/min-length.js +60 -0
- package/dist/core/validation/validators/min.d.ts +45 -0
- package/dist/core/validation/validators/min.js +60 -0
- package/dist/core/validation/validators/number.d.ts +38 -0
- package/dist/core/validation/validators/number.js +90 -0
- package/dist/core/validation/validators/pattern.d.ts +47 -0
- package/dist/core/validation/validators/pattern.js +62 -0
- package/dist/core/validation/validators/phone.d.ts +34 -0
- package/dist/core/validation/validators/phone.js +58 -0
- package/dist/core/validation/validators/required.d.ts +48 -0
- package/dist/core/validation/validators/required.js +69 -0
- package/dist/core/validation/validators/url.d.ts +29 -0
- package/dist/core/validation/validators/url.js +55 -0
- package/dist/create-field-path-CdPF3lIK.js +704 -0
- package/dist/hooks/useFormControl.d.ts +48 -0
- package/dist/hooks/useFormControl.js +298 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +8 -0
- package/dist/node-factory-D7DOnSSN.js +3200 -0
- package/dist/validators.d.ts +2 -0
- package/dist/validators.js +298 -0
- package/llms.txt +847 -0
- package/package.json +86 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Валидатор формата email
|
|
3
|
+
*
|
|
4
|
+
* @group Validation
|
|
5
|
+
* @category Validators
|
|
6
|
+
* @module validators/email
|
|
7
|
+
*/
|
|
8
|
+
import { validate } from '../core/validate';
|
|
9
|
+
/**
|
|
10
|
+
* Валидатор формата email
|
|
11
|
+
*
|
|
12
|
+
* Проверяет, что значение соответствует формату email адреса.
|
|
13
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
14
|
+
*
|
|
15
|
+
* @group Validation
|
|
16
|
+
* @category Validators
|
|
17
|
+
*
|
|
18
|
+
* @param fieldPath - Путь к полю для валидации
|
|
19
|
+
* @param options - Опции валидации (message, params)
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```typescript
|
|
23
|
+
* // Базовое использование
|
|
24
|
+
* validationSchema: (path) => [
|
|
25
|
+
* required(path.email),
|
|
26
|
+
* email(path.email),
|
|
27
|
+
* ]
|
|
28
|
+
*
|
|
29
|
+
* // С кастомным сообщением
|
|
30
|
+
* email(path.email, { message: 'Введите корректный email адрес' })
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* // Ошибка валидации
|
|
36
|
+
* {
|
|
37
|
+
* code: 'email',
|
|
38
|
+
* message: 'Неверный формат email',
|
|
39
|
+
* params: {}
|
|
40
|
+
* }
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export function email(fieldPath, options) {
|
|
44
|
+
if (!fieldPath)
|
|
45
|
+
return; // Защита от undefined fieldPath
|
|
46
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
47
|
+
validate(fieldPath, (value) => {
|
|
48
|
+
if (!value) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (!emailRegex.test(value)) {
|
|
52
|
+
return {
|
|
53
|
+
code: 'email',
|
|
54
|
+
message: options?.message || 'Неверный формат email',
|
|
55
|
+
params: options?.params,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable validators
|
|
3
|
+
*/
|
|
4
|
+
export { required } from './required';
|
|
5
|
+
export { min } from './min';
|
|
6
|
+
export { max } from './max';
|
|
7
|
+
export { minLength } from './min-length';
|
|
8
|
+
export { maxLength } from './max-length';
|
|
9
|
+
export { email } from './email';
|
|
10
|
+
export { pattern } from './pattern';
|
|
11
|
+
export { url } from './url';
|
|
12
|
+
export { phone, type PhoneFormat } from './phone';
|
|
13
|
+
export { number } from './number';
|
|
14
|
+
export { date } from './date';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reusable validators
|
|
3
|
+
*/
|
|
4
|
+
export { required } from './required';
|
|
5
|
+
export { min } from './min';
|
|
6
|
+
export { max } from './max';
|
|
7
|
+
export { minLength } from './min-length';
|
|
8
|
+
export { maxLength } from './max-length';
|
|
9
|
+
export { email } from './email';
|
|
10
|
+
export { pattern } from './pattern';
|
|
11
|
+
export { url } from './url';
|
|
12
|
+
export { phone } from './phone';
|
|
13
|
+
export { number } from './number';
|
|
14
|
+
export { date } from './date';
|
|
@@ -0,0 +1,45 @@
|
|
|
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';
|
|
10
|
+
/**
|
|
11
|
+
* Валидатор максимальной длины строки
|
|
12
|
+
*
|
|
13
|
+
* Проверяет, что длина строки не превышает указанный максимум.
|
|
14
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
15
|
+
*
|
|
16
|
+
* @group Validation
|
|
17
|
+
* @category Validators
|
|
18
|
+
*
|
|
19
|
+
* @param fieldPath - Путь к полю для валидации
|
|
20
|
+
* @param maxLen - Максимальная допустимая длина строки
|
|
21
|
+
* @param options - Опции валидации (message, params)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Базовое использование
|
|
26
|
+
* validationSchema: (path) => [
|
|
27
|
+
* maxLength(path.name, 50),
|
|
28
|
+
* maxLength(path.bio, 500),
|
|
29
|
+
* ]
|
|
30
|
+
*
|
|
31
|
+
* // С кастомным сообщением
|
|
32
|
+
* maxLength(path.bio, 500, { message: 'Максимум 500 символов' })
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // Ошибка валидации
|
|
38
|
+
* {
|
|
39
|
+
* code: 'maxLength',
|
|
40
|
+
* message: 'Максимальная длина: 500 символов',
|
|
41
|
+
* params: { maxLength: 500, actualLength: 512 }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function maxLength<TForm, TField extends string | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxLen: number, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Валидатор максимальной длины строки
|
|
3
|
+
*
|
|
4
|
+
* @group Validation
|
|
5
|
+
* @category Validators
|
|
6
|
+
* @module validators/maxLength
|
|
7
|
+
*/
|
|
8
|
+
import { validate } from '../core/validate';
|
|
9
|
+
/**
|
|
10
|
+
* Валидатор максимальной длины строки
|
|
11
|
+
*
|
|
12
|
+
* Проверяет, что длина строки не превышает указанный максимум.
|
|
13
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
14
|
+
*
|
|
15
|
+
* @group Validation
|
|
16
|
+
* @category Validators
|
|
17
|
+
*
|
|
18
|
+
* @param fieldPath - Путь к полю для валидации
|
|
19
|
+
* @param maxLen - Максимальная допустимая длина строки
|
|
20
|
+
* @param options - Опции валидации (message, params)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Базовое использование
|
|
25
|
+
* validationSchema: (path) => [
|
|
26
|
+
* maxLength(path.name, 50),
|
|
27
|
+
* maxLength(path.bio, 500),
|
|
28
|
+
* ]
|
|
29
|
+
*
|
|
30
|
+
* // С кастомным сообщением
|
|
31
|
+
* maxLength(path.bio, 500, { message: 'Максимум 500 символов' })
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // Ошибка валидации
|
|
37
|
+
* {
|
|
38
|
+
* code: 'maxLength',
|
|
39
|
+
* message: 'Максимальная длина: 500 символов',
|
|
40
|
+
* params: { maxLength: 500, actualLength: 512 }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function maxLength(fieldPath, maxLen, options) {
|
|
45
|
+
if (!fieldPath)
|
|
46
|
+
return; // Защита от undefined fieldPath
|
|
47
|
+
validate(fieldPath, (value) => {
|
|
48
|
+
if (!value) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (value.length > maxLen) {
|
|
52
|
+
return {
|
|
53
|
+
code: 'maxLength',
|
|
54
|
+
message: options?.message || `Максимальная длина: ${maxLen} символов`,
|
|
55
|
+
params: { maxLength: maxLen, actualLength: value.length, ...options?.params },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
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';
|
|
10
|
+
/**
|
|
11
|
+
* Валидатор максимального числового значения
|
|
12
|
+
*
|
|
13
|
+
* Проверяет, что числовое значение не превышает указанный максимум.
|
|
14
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
15
|
+
*
|
|
16
|
+
* @group Validation
|
|
17
|
+
* @category Validators
|
|
18
|
+
*
|
|
19
|
+
* @param fieldPath - Путь к полю для валидации
|
|
20
|
+
* @param maxValue - Максимально допустимое значение
|
|
21
|
+
* @param options - Опции валидации (message, params)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Базовое использование
|
|
26
|
+
* validationSchema: (path) => [
|
|
27
|
+
* max(path.quantity, 100),
|
|
28
|
+
* max(path.discount, 50),
|
|
29
|
+
* ]
|
|
30
|
+
*
|
|
31
|
+
* // С кастомным сообщением
|
|
32
|
+
* max(path.quantity, 100, { message: 'Максимум 100 единиц' })
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // Ошибка валидации
|
|
38
|
+
* {
|
|
39
|
+
* code: 'max',
|
|
40
|
+
* message: 'Максимальное значение: 100',
|
|
41
|
+
* params: { max: 100, actual: 150 }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function max<TForm, TField extends number | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxValue: number, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Валидатор максимального значения
|
|
3
|
+
*
|
|
4
|
+
* @group Validation
|
|
5
|
+
* @category Validators
|
|
6
|
+
* @module validators/max
|
|
7
|
+
*/
|
|
8
|
+
import { validate } from '../core/validate';
|
|
9
|
+
/**
|
|
10
|
+
* Валидатор максимального числового значения
|
|
11
|
+
*
|
|
12
|
+
* Проверяет, что числовое значение не превышает указанный максимум.
|
|
13
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
14
|
+
*
|
|
15
|
+
* @group Validation
|
|
16
|
+
* @category Validators
|
|
17
|
+
*
|
|
18
|
+
* @param fieldPath - Путь к полю для валидации
|
|
19
|
+
* @param maxValue - Максимально допустимое значение
|
|
20
|
+
* @param options - Опции валидации (message, params)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Базовое использование
|
|
25
|
+
* validationSchema: (path) => [
|
|
26
|
+
* max(path.quantity, 100),
|
|
27
|
+
* max(path.discount, 50),
|
|
28
|
+
* ]
|
|
29
|
+
*
|
|
30
|
+
* // С кастомным сообщением
|
|
31
|
+
* max(path.quantity, 100, { message: 'Максимум 100 единиц' })
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // Ошибка валидации
|
|
37
|
+
* {
|
|
38
|
+
* code: 'max',
|
|
39
|
+
* message: 'Максимальное значение: 100',
|
|
40
|
+
* params: { max: 100, actual: 150 }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function max(fieldPath, maxValue, options) {
|
|
45
|
+
if (!fieldPath)
|
|
46
|
+
return; // Защита от undefined fieldPath
|
|
47
|
+
validate(fieldPath, (value) => {
|
|
48
|
+
if (value === null || value === undefined) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (value > maxValue) {
|
|
52
|
+
return {
|
|
53
|
+
code: 'max',
|
|
54
|
+
message: options?.message || `Максимальное значение: ${maxValue}`,
|
|
55
|
+
params: { max: maxValue, actual: value, ...options?.params },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
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';
|
|
10
|
+
/**
|
|
11
|
+
* Валидатор минимальной длины строки
|
|
12
|
+
*
|
|
13
|
+
* Проверяет, что длина строки не меньше указанного минимума.
|
|
14
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
15
|
+
*
|
|
16
|
+
* @group Validation
|
|
17
|
+
* @category Validators
|
|
18
|
+
*
|
|
19
|
+
* @param fieldPath - Путь к полю для валидации
|
|
20
|
+
* @param minLen - Минимальная допустимая длина строки
|
|
21
|
+
* @param options - Опции валидации (message, params)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Базовое использование
|
|
26
|
+
* validationSchema: (path) => [
|
|
27
|
+
* minLength(path.name, 2),
|
|
28
|
+
* minLength(path.password, 8),
|
|
29
|
+
* ]
|
|
30
|
+
*
|
|
31
|
+
* // С кастомным сообщением
|
|
32
|
+
* minLength(path.password, 8, { message: 'Пароль должен быть не менее 8 символов' })
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // Ошибка валидации
|
|
38
|
+
* {
|
|
39
|
+
* code: 'minLength',
|
|
40
|
+
* message: 'Минимальная длина: 8 символов',
|
|
41
|
+
* params: { minLength: 8, actualLength: 3 }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function minLength<TForm, TField extends string | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, minLen: number, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Валидатор минимальной длины строки
|
|
3
|
+
*
|
|
4
|
+
* @group Validation
|
|
5
|
+
* @category Validators
|
|
6
|
+
* @module validators/minLength
|
|
7
|
+
*/
|
|
8
|
+
import { validate } from '../core/validate';
|
|
9
|
+
/**
|
|
10
|
+
* Валидатор минимальной длины строки
|
|
11
|
+
*
|
|
12
|
+
* Проверяет, что длина строки не меньше указанного минимума.
|
|
13
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
14
|
+
*
|
|
15
|
+
* @group Validation
|
|
16
|
+
* @category Validators
|
|
17
|
+
*
|
|
18
|
+
* @param fieldPath - Путь к полю для валидации
|
|
19
|
+
* @param minLen - Минимальная допустимая длина строки
|
|
20
|
+
* @param options - Опции валидации (message, params)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Базовое использование
|
|
25
|
+
* validationSchema: (path) => [
|
|
26
|
+
* minLength(path.name, 2),
|
|
27
|
+
* minLength(path.password, 8),
|
|
28
|
+
* ]
|
|
29
|
+
*
|
|
30
|
+
* // С кастомным сообщением
|
|
31
|
+
* minLength(path.password, 8, { message: 'Пароль должен быть не менее 8 символов' })
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // Ошибка валидации
|
|
37
|
+
* {
|
|
38
|
+
* code: 'minLength',
|
|
39
|
+
* message: 'Минимальная длина: 8 символов',
|
|
40
|
+
* params: { minLength: 8, actualLength: 3 }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function minLength(fieldPath, minLen, options) {
|
|
45
|
+
if (!fieldPath)
|
|
46
|
+
return; // Защита от undefined fieldPath
|
|
47
|
+
validate(fieldPath, (value) => {
|
|
48
|
+
if (!value) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
if (value.length < minLen) {
|
|
52
|
+
return {
|
|
53
|
+
code: 'minLength',
|
|
54
|
+
message: options?.message || `Минимальная длина: ${minLen} символов`,
|
|
55
|
+
params: { minLength: minLen, actualLength: value.length, ...options?.params },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
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';
|
|
10
|
+
/**
|
|
11
|
+
* Валидатор минимального числового значения
|
|
12
|
+
*
|
|
13
|
+
* Проверяет, что числовое значение не меньше указанного минимума.
|
|
14
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
15
|
+
*
|
|
16
|
+
* @group Validation
|
|
17
|
+
* @category Validators
|
|
18
|
+
*
|
|
19
|
+
* @param fieldPath - Путь к полю для валидации
|
|
20
|
+
* @param minValue - Минимально допустимое значение
|
|
21
|
+
* @param options - Опции валидации (message, params)
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Базовое использование
|
|
26
|
+
* validationSchema: (path) => [
|
|
27
|
+
* min(path.age, 18),
|
|
28
|
+
* min(path.quantity, 1),
|
|
29
|
+
* ]
|
|
30
|
+
*
|
|
31
|
+
* // С кастомным сообщением
|
|
32
|
+
* min(path.age, 18, { message: 'Вам должно быть не менее 18 лет' })
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* ```typescript
|
|
37
|
+
* // Ошибка валидации
|
|
38
|
+
* {
|
|
39
|
+
* code: 'min',
|
|
40
|
+
* message: 'Минимальное значение: 18',
|
|
41
|
+
* params: { min: 18, actual: 16 }
|
|
42
|
+
* }
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare function min<TForm, TField extends number | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, minValue: number, options?: ValidateOptions): void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Валидатор минимального значения
|
|
3
|
+
*
|
|
4
|
+
* @group Validation
|
|
5
|
+
* @category Validators
|
|
6
|
+
* @module validators/min
|
|
7
|
+
*/
|
|
8
|
+
import { validate } from '../core/validate';
|
|
9
|
+
/**
|
|
10
|
+
* Валидатор минимального числового значения
|
|
11
|
+
*
|
|
12
|
+
* Проверяет, что числовое значение не меньше указанного минимума.
|
|
13
|
+
* Пустые значения пропускаются (используйте `required` для обязательности).
|
|
14
|
+
*
|
|
15
|
+
* @group Validation
|
|
16
|
+
* @category Validators
|
|
17
|
+
*
|
|
18
|
+
* @param fieldPath - Путь к полю для валидации
|
|
19
|
+
* @param minValue - Минимально допустимое значение
|
|
20
|
+
* @param options - Опции валидации (message, params)
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Базовое использование
|
|
25
|
+
* validationSchema: (path) => [
|
|
26
|
+
* min(path.age, 18),
|
|
27
|
+
* min(path.quantity, 1),
|
|
28
|
+
* ]
|
|
29
|
+
*
|
|
30
|
+
* // С кастомным сообщением
|
|
31
|
+
* min(path.age, 18, { message: 'Вам должно быть не менее 18 лет' })
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```typescript
|
|
36
|
+
* // Ошибка валидации
|
|
37
|
+
* {
|
|
38
|
+
* code: 'min',
|
|
39
|
+
* message: 'Минимальное значение: 18',
|
|
40
|
+
* params: { min: 18, actual: 16 }
|
|
41
|
+
* }
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export function min(fieldPath, minValue, options) {
|
|
45
|
+
if (!fieldPath)
|
|
46
|
+
return; // Защита от undefined fieldPath
|
|
47
|
+
validate(fieldPath, (value) => {
|
|
48
|
+
if (value === null || value === undefined) {
|
|
49
|
+
return null; // Пропускаем, если пусто (используйте required для обязательности)
|
|
50
|
+
}
|
|
51
|
+
if (value < minValue) {
|
|
52
|
+
return {
|
|
53
|
+
code: 'min',
|
|
54
|
+
message: options?.message || `Минимальное значение: ${minValue}`,
|
|
55
|
+
params: { min: minValue, actual: value, ...options?.params },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
return null;
|
|
59
|
+
});
|
|
60
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
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';
|
|
10
|
+
/**
|
|
11
|
+
* Адаптер для number валидатора
|
|
12
|
+
* Проверяет, что значение является числом и соответствует заданным ограничениям
|
|
13
|
+
*
|
|
14
|
+
* @group Validation
|
|
15
|
+
* @category Validators
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```typescript
|
|
19
|
+
* number(path.age);
|
|
20
|
+
* number(path.price, { min: 0, max: 1000000 });
|
|
21
|
+
* number(path.percentage, { min: 0, max: 100, integer: true });
|
|
22
|
+
* number(path.rating, { min: 0, max: 5, multipleOf: 0.5 });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function number<TForm, TField extends number | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions & {
|
|
26
|
+
/** Минимальное значение (включительно) */
|
|
27
|
+
min?: number;
|
|
28
|
+
/** Максимальное значение (включительно) */
|
|
29
|
+
max?: number;
|
|
30
|
+
/** Требовать целое число */
|
|
31
|
+
integer?: boolean;
|
|
32
|
+
/** Значение должно быть кратно этому числу */
|
|
33
|
+
multipleOf?: number;
|
|
34
|
+
/** Разрешить отрицательные числа (по умолчанию true) */
|
|
35
|
+
allowNegative?: boolean;
|
|
36
|
+
/** Разрешить ноль (по умолчанию true) */
|
|
37
|
+
allowZero?: boolean;
|
|
38
|
+
}): void;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Валидатор числовых значений
|
|
3
|
+
*
|
|
4
|
+
* @group Validation
|
|
5
|
+
* @category Validators
|
|
6
|
+
* @module validators/number
|
|
7
|
+
*/
|
|
8
|
+
import { validate } from '../core/validate';
|
|
9
|
+
/**
|
|
10
|
+
* Адаптер для number валидатора
|
|
11
|
+
* Проверяет, что значение является числом и соответствует заданным ограничениям
|
|
12
|
+
*
|
|
13
|
+
* @group Validation
|
|
14
|
+
* @category Validators
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* number(path.age);
|
|
19
|
+
* number(path.price, { min: 0, max: 1000000 });
|
|
20
|
+
* number(path.percentage, { min: 0, max: 100, integer: true });
|
|
21
|
+
* number(path.rating, { min: 0, max: 5, multipleOf: 0.5 });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export function number(fieldPath, options) {
|
|
25
|
+
if (!fieldPath)
|
|
26
|
+
return; // Защита от undefined fieldPath
|
|
27
|
+
validate(fieldPath, (value) => {
|
|
28
|
+
// Пропускаем null/undefined
|
|
29
|
+
if (value === null || value === undefined) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
// Проверка, что значение является числом
|
|
33
|
+
if (typeof value !== 'number' || isNaN(value)) {
|
|
34
|
+
return {
|
|
35
|
+
code: 'number',
|
|
36
|
+
message: options?.message || 'Значение должно быть числом',
|
|
37
|
+
params: options?.params,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// Проверка на целое число
|
|
41
|
+
if (options?.integer && !Number.isInteger(value)) {
|
|
42
|
+
return {
|
|
43
|
+
code: 'number_integer',
|
|
44
|
+
message: options?.message || 'Значение должно быть целым числом',
|
|
45
|
+
params: options?.params,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
// Проверка минимального значения
|
|
49
|
+
if (options?.min !== undefined && value < options.min) {
|
|
50
|
+
return {
|
|
51
|
+
code: 'number_min',
|
|
52
|
+
message: options?.message || `Значение должно быть не менее ${options.min}`,
|
|
53
|
+
params: { min: options.min, ...options?.params },
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
// Проверка максимального значения
|
|
57
|
+
if (options?.max !== undefined && value > options.max) {
|
|
58
|
+
return {
|
|
59
|
+
code: 'number_max',
|
|
60
|
+
message: options?.message || `Значение должно быть не более ${options.max}`,
|
|
61
|
+
params: { max: options.max, ...options?.params },
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
// Проверка кратности
|
|
65
|
+
if (options?.multipleOf !== undefined && value % options.multipleOf !== 0) {
|
|
66
|
+
return {
|
|
67
|
+
code: 'number_multiple',
|
|
68
|
+
message: options?.message || `Значение должно быть кратно ${options.multipleOf}`,
|
|
69
|
+
params: { multipleOf: options.multipleOf, ...options?.params },
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
// Проверка отрицательных чисел
|
|
73
|
+
if (options?.allowNegative === false && value < 0) {
|
|
74
|
+
return {
|
|
75
|
+
code: 'number_negative',
|
|
76
|
+
message: options?.message || 'Отрицательные числа не допускаются',
|
|
77
|
+
params: options?.params,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Проверка нуля
|
|
81
|
+
if (options?.allowZero === false && value === 0) {
|
|
82
|
+
return {
|
|
83
|
+
code: 'number_zero',
|
|
84
|
+
message: options?.message || 'Ноль не допускается',
|
|
85
|
+
params: options?.params,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
return null;
|
|
89
|
+
});
|
|
90
|
+
}
|