@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.
Files changed (150) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/dist/behaviors.d.ts +2 -0
  4. package/dist/behaviors.js +230 -0
  5. package/dist/core/behavior/behavior-applicator.d.ts +71 -0
  6. package/dist/core/behavior/behavior-applicator.js +92 -0
  7. package/dist/core/behavior/behavior-context.d.ts +29 -0
  8. package/dist/core/behavior/behavior-context.js +38 -0
  9. package/dist/core/behavior/behavior-registry.d.ts +97 -0
  10. package/dist/core/behavior/behavior-registry.js +198 -0
  11. package/dist/core/behavior/behaviors/compute-from.d.ts +41 -0
  12. package/dist/core/behavior/behaviors/compute-from.js +84 -0
  13. package/dist/core/behavior/behaviors/copy-from.d.ts +31 -0
  14. package/dist/core/behavior/behaviors/copy-from.js +64 -0
  15. package/dist/core/behavior/behaviors/enable-when.d.ts +49 -0
  16. package/dist/core/behavior/behaviors/enable-when.js +81 -0
  17. package/dist/core/behavior/behaviors/index.d.ts +11 -0
  18. package/dist/core/behavior/behaviors/index.js +11 -0
  19. package/dist/core/behavior/behaviors/reset-when.d.ts +51 -0
  20. package/dist/core/behavior/behaviors/reset-when.js +63 -0
  21. package/dist/core/behavior/behaviors/revalidate-when.d.ts +30 -0
  22. package/dist/core/behavior/behaviors/revalidate-when.js +51 -0
  23. package/dist/core/behavior/behaviors/sync-fields.d.ts +28 -0
  24. package/dist/core/behavior/behaviors/sync-fields.js +66 -0
  25. package/dist/core/behavior/behaviors/transform-value.d.ts +120 -0
  26. package/dist/core/behavior/behaviors/transform-value.js +110 -0
  27. package/dist/core/behavior/behaviors/watch-field.d.ts +35 -0
  28. package/dist/core/behavior/behaviors/watch-field.js +56 -0
  29. package/dist/core/behavior/compose-behavior.d.ts +106 -0
  30. package/dist/core/behavior/compose-behavior.js +166 -0
  31. package/dist/core/behavior/create-field-path.d.ts +20 -0
  32. package/dist/core/behavior/create-field-path.js +69 -0
  33. package/dist/core/behavior/index.d.ts +12 -0
  34. package/dist/core/behavior/index.js +17 -0
  35. package/dist/core/behavior/types.d.ts +152 -0
  36. package/dist/core/behavior/types.js +7 -0
  37. package/dist/core/context/form-context-impl.d.ts +29 -0
  38. package/dist/core/context/form-context-impl.js +37 -0
  39. package/dist/core/factories/index.d.ts +6 -0
  40. package/dist/core/factories/index.js +6 -0
  41. package/dist/core/factories/node-factory.d.ts +209 -0
  42. package/dist/core/factories/node-factory.js +281 -0
  43. package/dist/core/nodes/array-node.d.ts +308 -0
  44. package/dist/core/nodes/array-node.js +534 -0
  45. package/dist/core/nodes/field-node.d.ts +269 -0
  46. package/dist/core/nodes/field-node.js +510 -0
  47. package/dist/core/nodes/form-node.d.ts +342 -0
  48. package/dist/core/nodes/form-node.js +343 -0
  49. package/dist/core/nodes/group-node/field-registry.d.ts +191 -0
  50. package/dist/core/nodes/group-node/field-registry.js +215 -0
  51. package/dist/core/nodes/group-node/index.d.ts +11 -0
  52. package/dist/core/nodes/group-node/index.js +11 -0
  53. package/dist/core/nodes/group-node/proxy-builder.d.ts +71 -0
  54. package/dist/core/nodes/group-node/proxy-builder.js +161 -0
  55. package/dist/core/nodes/group-node/state-manager.d.ts +184 -0
  56. package/dist/core/nodes/group-node/state-manager.js +265 -0
  57. package/dist/core/nodes/group-node.d.ts +494 -0
  58. package/dist/core/nodes/group-node.js +770 -0
  59. package/dist/core/types/deep-schema.d.ts +78 -0
  60. package/dist/core/types/deep-schema.js +11 -0
  61. package/dist/core/types/field-path.d.ts +42 -0
  62. package/dist/core/types/field-path.js +4 -0
  63. package/dist/core/types/form-context.d.ts +83 -0
  64. package/dist/core/types/form-context.js +25 -0
  65. package/dist/core/types/group-node-proxy.d.ts +135 -0
  66. package/dist/core/types/group-node-proxy.js +31 -0
  67. package/dist/core/types/index.d.ts +163 -0
  68. package/dist/core/types/index.js +4 -0
  69. package/dist/core/types/validation-schema.d.ts +104 -0
  70. package/dist/core/types/validation-schema.js +10 -0
  71. package/dist/core/utils/create-form.d.ts +61 -0
  72. package/dist/core/utils/create-form.js +24 -0
  73. package/dist/core/utils/debounce.d.ts +160 -0
  74. package/dist/core/utils/debounce.js +197 -0
  75. package/dist/core/utils/error-handler.d.ts +180 -0
  76. package/dist/core/utils/error-handler.js +226 -0
  77. package/dist/core/utils/field-path-navigator.d.ts +240 -0
  78. package/dist/core/utils/field-path-navigator.js +374 -0
  79. package/dist/core/utils/index.d.ts +14 -0
  80. package/dist/core/utils/index.js +14 -0
  81. package/dist/core/utils/registry-helpers.d.ts +50 -0
  82. package/dist/core/utils/registry-helpers.js +79 -0
  83. package/dist/core/utils/registry-stack.d.ts +69 -0
  84. package/dist/core/utils/registry-stack.js +86 -0
  85. package/dist/core/utils/resources.d.ts +41 -0
  86. package/dist/core/utils/resources.js +69 -0
  87. package/dist/core/utils/subscription-manager.d.ts +180 -0
  88. package/dist/core/utils/subscription-manager.js +214 -0
  89. package/dist/core/utils/type-guards.d.ts +116 -0
  90. package/dist/core/utils/type-guards.js +169 -0
  91. package/dist/core/validation/core/apply-when.d.ts +28 -0
  92. package/dist/core/validation/core/apply-when.js +41 -0
  93. package/dist/core/validation/core/apply.d.ts +63 -0
  94. package/dist/core/validation/core/apply.js +38 -0
  95. package/dist/core/validation/core/index.d.ts +8 -0
  96. package/dist/core/validation/core/index.js +8 -0
  97. package/dist/core/validation/core/validate-async.d.ts +42 -0
  98. package/dist/core/validation/core/validate-async.js +45 -0
  99. package/dist/core/validation/core/validate-tree.d.ts +35 -0
  100. package/dist/core/validation/core/validate-tree.js +37 -0
  101. package/dist/core/validation/core/validate.d.ts +32 -0
  102. package/dist/core/validation/core/validate.js +38 -0
  103. package/dist/core/validation/field-path.d.ts +43 -0
  104. package/dist/core/validation/field-path.js +147 -0
  105. package/dist/core/validation/index.d.ts +21 -0
  106. package/dist/core/validation/index.js +33 -0
  107. package/dist/core/validation/validate-form.d.ts +85 -0
  108. package/dist/core/validation/validate-form.js +152 -0
  109. package/dist/core/validation/validation-applicator.d.ts +89 -0
  110. package/dist/core/validation/validation-applicator.js +217 -0
  111. package/dist/core/validation/validation-context.d.ts +47 -0
  112. package/dist/core/validation/validation-context.js +75 -0
  113. package/dist/core/validation/validation-registry.d.ts +156 -0
  114. package/dist/core/validation/validation-registry.js +298 -0
  115. package/dist/core/validation/validators/array-validators.d.ts +63 -0
  116. package/dist/core/validation/validators/array-validators.js +86 -0
  117. package/dist/core/validation/validators/date.d.ts +38 -0
  118. package/dist/core/validation/validators/date.js +117 -0
  119. package/dist/core/validation/validators/email.d.ts +44 -0
  120. package/dist/core/validation/validators/email.js +60 -0
  121. package/dist/core/validation/validators/index.d.ts +14 -0
  122. package/dist/core/validation/validators/index.js +14 -0
  123. package/dist/core/validation/validators/max-length.d.ts +45 -0
  124. package/dist/core/validation/validators/max-length.js +60 -0
  125. package/dist/core/validation/validators/max.d.ts +45 -0
  126. package/dist/core/validation/validators/max.js +60 -0
  127. package/dist/core/validation/validators/min-length.d.ts +45 -0
  128. package/dist/core/validation/validators/min-length.js +60 -0
  129. package/dist/core/validation/validators/min.d.ts +45 -0
  130. package/dist/core/validation/validators/min.js +60 -0
  131. package/dist/core/validation/validators/number.d.ts +38 -0
  132. package/dist/core/validation/validators/number.js +90 -0
  133. package/dist/core/validation/validators/pattern.d.ts +47 -0
  134. package/dist/core/validation/validators/pattern.js +62 -0
  135. package/dist/core/validation/validators/phone.d.ts +34 -0
  136. package/dist/core/validation/validators/phone.js +58 -0
  137. package/dist/core/validation/validators/required.d.ts +48 -0
  138. package/dist/core/validation/validators/required.js +69 -0
  139. package/dist/core/validation/validators/url.d.ts +29 -0
  140. package/dist/core/validation/validators/url.js +55 -0
  141. package/dist/create-field-path-CdPF3lIK.js +704 -0
  142. package/dist/hooks/useFormControl.d.ts +48 -0
  143. package/dist/hooks/useFormControl.js +298 -0
  144. package/dist/index.d.ts +10 -0
  145. package/dist/index.js +8 -0
  146. package/dist/node-factory-D7DOnSSN.js +3200 -0
  147. package/dist/validators.d.ts +2 -0
  148. package/dist/validators.js +298 -0
  149. package/llms.txt +847 -0
  150. 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
+ }