@reformer/core 5.0.2 → 7.0.0-beta.1

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 (131) hide show
  1. package/README.md +7 -5
  2. package/dist/behaviors-O9a1Djj9.js +147 -0
  3. package/dist/behaviors.d.ts +131 -4
  4. package/dist/behaviors.js +298 -27
  5. package/dist/core/model/behaviors.d.ts +123 -0
  6. package/dist/core/model/form-model.d.ts +18 -0
  7. package/dist/core/model/index.d.ts +12 -0
  8. package/dist/core/model/types.d.ts +112 -0
  9. package/dist/core/model/validate-model.d.ts +46 -0
  10. package/dist/core/nodes/array-node.d.ts +34 -2
  11. package/dist/core/nodes/group-node.d.ts +19 -71
  12. package/dist/core/nodes/model-array-node.d.ts +71 -0
  13. package/dist/core/types/deep-schema.d.ts +16 -2
  14. package/dist/core/types/form-proxy.d.ts +17 -6
  15. package/dist/core/types/index.d.ts +5 -23
  16. package/dist/core/types/validation-schema.d.ts +15 -66
  17. package/dist/core/utils/create-form.d.ts +24 -0
  18. package/dist/core/utils/derived-registry.d.ts +5 -0
  19. package/dist/core/utils/index.d.ts +4 -4
  20. package/dist/core/utils/signal-node-registry.d.ts +12 -0
  21. package/dist/core/utils/type-guards.d.ts +2 -3
  22. package/dist/core/validation/index.d.ts +5 -11
  23. package/dist/core/validation/validators/email.d.ts +5 -29
  24. package/dist/core/validation/validators/future-date.d.ts +6 -28
  25. package/dist/core/validation/validators/index.d.ts +11 -4
  26. package/dist/core/validation/validators/integer.d.ts +13 -0
  27. package/dist/core/validation/validators/is-date.d.ts +5 -28
  28. package/dist/core/validation/validators/is-number.d.ts +14 -0
  29. package/dist/core/validation/validators/max-age.d.ts +6 -29
  30. package/dist/core/validation/validators/max-date.d.ts +6 -29
  31. package/dist/core/validation/validators/max-length.d.ts +5 -30
  32. package/dist/core/validation/validators/max.d.ts +7 -29
  33. package/dist/core/validation/validators/min-age.d.ts +6 -29
  34. package/dist/core/validation/validators/min-date.d.ts +6 -29
  35. package/dist/core/validation/validators/min-length.d.ts +5 -30
  36. package/dist/core/validation/validators/min.d.ts +7 -29
  37. package/dist/core/validation/validators/multiple-of.d.ts +13 -0
  38. package/dist/core/validation/validators/non-negative.d.ts +13 -0
  39. package/dist/core/validation/validators/non-zero.d.ts +13 -0
  40. package/dist/core/validation/validators/past-date.d.ts +5 -28
  41. package/dist/core/validation/validators/pattern.d.ts +5 -32
  42. package/dist/core/validation/validators/phone.d.ts +9 -19
  43. package/dist/core/validation/validators/required.d.ts +10 -31
  44. package/dist/core/validation/validators/url.d.ts +13 -15
  45. package/dist/index.d.ts +3 -4
  46. package/dist/index.js +1299 -875
  47. package/dist/validators/email.js +7 -9
  48. package/dist/validators/future-date.js +11 -12
  49. package/dist/validators/integer.d.ts +2 -0
  50. package/dist/validators/integer.js +10 -0
  51. package/dist/validators/is-date.js +6 -7
  52. package/dist/validators/is-number.d.ts +2 -0
  53. package/dist/validators/is-number.js +10 -0
  54. package/dist/validators/max-age.js +11 -12
  55. package/dist/validators/max-date.js +11 -12
  56. package/dist/validators/max-length.js +12 -8
  57. package/dist/validators/max.js +5 -6
  58. package/dist/validators/min-age.js +10 -11
  59. package/dist/validators/min-date.js +12 -13
  60. package/dist/validators/min-length.js +12 -8
  61. package/dist/validators/min.js +6 -7
  62. package/dist/validators/multiple-of.d.ts +2 -0
  63. package/dist/validators/multiple-of.js +10 -0
  64. package/dist/validators/non-negative.d.ts +2 -0
  65. package/dist/validators/non-negative.js +10 -0
  66. package/dist/validators/non-zero.d.ts +2 -0
  67. package/dist/validators/non-zero.js +10 -0
  68. package/dist/validators/past-date.js +11 -12
  69. package/dist/validators/pattern.js +6 -7
  70. package/dist/validators/phone.js +14 -32
  71. package/dist/validators/required.js +9 -10
  72. package/dist/validators/url.js +19 -16
  73. package/dist/validators.js +67 -54
  74. package/llms.txt +959 -2584
  75. package/package.json +19 -35
  76. package/dist/behaviors/compute-from.d.ts +0 -2
  77. package/dist/behaviors/compute-from.js +0 -31
  78. package/dist/behaviors/copy-from.d.ts +0 -2
  79. package/dist/behaviors/copy-from.js +0 -29
  80. package/dist/behaviors/enable-when.d.ts +0 -2
  81. package/dist/behaviors/enable-when.js +0 -25
  82. package/dist/behaviors/reset-when.d.ts +0 -2
  83. package/dist/behaviors/reset-when.js +0 -24
  84. package/dist/behaviors/revalidate-when.d.ts +0 -2
  85. package/dist/behaviors/revalidate-when.js +0 -18
  86. package/dist/behaviors/sync-fields.d.ts +0 -2
  87. package/dist/behaviors/sync-fields.js +0 -41
  88. package/dist/behaviors/transform-value.d.ts +0 -2
  89. package/dist/behaviors/transform-value.js +0 -45
  90. package/dist/behaviors/watch-field.d.ts +0 -2
  91. package/dist/behaviors/watch-field.js +0 -21
  92. package/dist/core/behavior/behavior-context.d.ts +0 -47
  93. package/dist/core/behavior/behavior-registry.d.ts +0 -85
  94. package/dist/core/behavior/behaviors/compute-from.d.ts +0 -70
  95. package/dist/core/behavior/behaviors/copy-from.d.ts +0 -56
  96. package/dist/core/behavior/behaviors/enable-when.d.ts +0 -118
  97. package/dist/core/behavior/behaviors/index.d.ts +0 -11
  98. package/dist/core/behavior/behaviors/reset-when.d.ts +0 -64
  99. package/dist/core/behavior/behaviors/revalidate-when.d.ts +0 -53
  100. package/dist/core/behavior/behaviors/sync-fields.d.ts +0 -48
  101. package/dist/core/behavior/behaviors/transform-value.d.ts +0 -192
  102. package/dist/core/behavior/behaviors/watch-field.d.ts +0 -80
  103. package/dist/core/behavior/compose-behavior.d.ts +0 -96
  104. package/dist/core/behavior/index.d.ts +0 -11
  105. package/dist/core/behavior/types.d.ts +0 -146
  106. package/dist/core/types/field-path.d.ts +0 -42
  107. package/dist/core/types/form-context.d.ts +0 -89
  108. package/dist/core/utils/field-path-navigator.d.ts +0 -240
  109. package/dist/core/utils/field-path.d.ts +0 -60
  110. package/dist/core/utils/registry-helpers.d.ts +0 -43
  111. package/dist/core/validation/core/apply-when.d.ts +0 -22
  112. package/dist/core/validation/core/apply.d.ts +0 -52
  113. package/dist/core/validation/core/index.d.ts +0 -8
  114. package/dist/core/validation/core/validate-async.d.ts +0 -36
  115. package/dist/core/validation/core/validate-tree.d.ts +0 -35
  116. package/dist/core/validation/core/validate.d.ts +0 -26
  117. package/dist/core/validation/validate-form.d.ts +0 -48
  118. package/dist/core/validation/validation-applicator.d.ts +0 -70
  119. package/dist/core/validation/validation-context.d.ts +0 -86
  120. package/dist/core/validation/validation-registry.d.ts +0 -142
  121. package/dist/core/validation/validators/array-validators.d.ts +0 -53
  122. package/dist/core/validation/validators/number.d.ts +0 -31
  123. package/dist/field-path-DuKdGcIE.js +0 -66
  124. package/dist/hooks/useHiddenCondition.d.ts +0 -25
  125. package/dist/index-D25LsbRm.js +0 -73
  126. package/dist/registry-helpers-Bv_BJ1s-.js +0 -615
  127. package/dist/safe-effect-Dh8uw81c.js +0 -20
  128. package/dist/validate-C3XiA_zf.js +0 -10
  129. package/dist/validators/number.d.ts +0 -2
  130. package/dist/validators/number.js +0 -35
  131. package/dist/validators-BGsNOgT1.js +0 -207
@@ -1,38 +1,16 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Валидатор максимального числового значения
3
+ * Фабрика валидатора максимального числового значения.
5
4
  *
6
- * Проверяет, что числовое значение не превышает указанный максимум.
7
5
  * Пустые значения пропускаются (используйте `required` для обязательности).
8
6
  *
9
- * @group Validation
10
- * @category Validators
11
- *
12
- * @param fieldPath - Путь к полю для валидации
13
- * @param maxValue - Максимально допустимое значение
14
- * @param options - Опции валидации (message, params)
15
- *
16
7
  * @example
17
8
  * ```typescript
18
- * // Базовое использование
19
- * validationSchema: (path) => [
20
- * max(path.quantity, 100),
21
- * max(path.discount, 50),
22
- * ]
23
- *
24
- * // С кастомным сообщением
25
- * max(path.quantity, 100, { message: 'Максимум 100 единиц' })
26
- * ```
9
+ * import { validate } from '@reformer/core';
10
+ * import { max } from '@reformer/core/validators';
27
11
  *
28
- * @example
29
- * ```typescript
30
- * // Ошибка валидации
31
- * {
32
- * code: 'max',
33
- * message: 'Максимальное значение: 100',
34
- * params: { max: 100, actual: 150 }
35
- * }
12
+ * validate(path.quantity, max(100));
13
+ * validate(path.discount, max(50, { message: 'Не более 50%' }));
36
14
  * ```
37
15
  */
38
- export declare function max<TForm, TField extends number | null | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, maxValue: number, options?: ValidateOptions): void;
16
+ export declare function max<TForm = unknown, TField extends number | undefined = number>(maxValue: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,36 +1,13 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Проверяет, что возраст (вычисленный из даты рождения) не меньше указанного
3
+ * Фабрика валидатора минимального возраста (по дате рождения).
5
4
  *
6
- * Пустые значения и невалидные даты пропускаются (используйте `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
- * ```
5
+ * Пустые и невалидные даты пропускаются.
25
6
  *
26
7
  * @example
27
8
  * ```typescript
28
- * // Ошибка валидации
29
- * {
30
- * code: 'date_min_age',
31
- * message: 'Минимальный возраст: 18 лет',
32
- * params: { minAge: 18, currentAge: 16 }
33
- * }
9
+ * validate(path.birthDate, minAge(18));
10
+ * validate(path.birthDate, minAge(21, { message: 'Вам должно быть не менее 21 года' }));
34
11
  * ```
35
12
  */
36
- export declare function minAge<TForm, TField extends string | Date | null | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, minAgeValue: number, options?: ValidateOptions): void;
13
+ export declare function minAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,36 +1,13 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Проверяет, что дата не раньше указанной минимальной
3
+ * Фабрика валидатора минимальной даты (включительно).
5
4
  *
6
- * Пустые значения и невалидные даты пропускаются (используйте `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
- * ```
5
+ * Пустые и невалидные даты пропускаются (используйте `required` и `isDate`).
25
6
  *
26
7
  * @example
27
8
  * ```typescript
28
- * // Ошибка валидации
29
- * {
30
- * code: 'date_min',
31
- * message: 'Дата должна быть не ранее 01.01.2024',
32
- * params: { minDate: Date }
33
- * }
9
+ * validate(path.eventDate, minDate(new Date('2024-01-01')));
10
+ * validate(path.startDate, minDate(new Date(), { message: 'Дата должна быть не раньше сегодня' }));
34
11
  * ```
35
12
  */
36
- export declare function minDate<TForm, TField extends string | Date | null | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, minDateValue: Date, options?: ValidateOptions): void;
13
+ export declare function minDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,38 +1,13 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Валидатор минимальной длины строки
3
+ * Фабрика валидатора минимальной длины строки или массива.
5
4
  *
6
- * Проверяет, что длина строки не меньше указанного минимума.
7
5
  * Пустые значения пропускаются (используйте `required` для обязательности).
8
6
  *
9
- * @group Validation
10
- * @category Validators
11
- *
12
- * @param fieldPath - Путь к полю для валидации
13
- * @param minLen - Минимальная допустимая длина строки
14
- * @param options - Опции валидации (message, params)
15
- *
16
- * @example
17
- * ```typescript
18
- * // Базовое использование
19
- * validationSchema: (path) => [
20
- * minLength(path.name, 2),
21
- * minLength(path.password, 8),
22
- * ]
23
- *
24
- * // С кастомным сообщением
25
- * minLength(path.password, 8, { message: 'Пароль должен быть не менее 8 символов' })
26
- * ```
27
- *
28
7
  * @example
29
8
  * ```typescript
30
- * // Ошибка валидации
31
- * {
32
- * code: 'minLength',
33
- * message: 'Минимальная длина: 8 символов',
34
- * params: { minLength: 8, actualLength: 3 }
35
- * }
9
+ * validate(path.name, minLength(2));
10
+ * validate(path.password, minLength(8, { message: 'Min 8 символов' }));
36
11
  * ```
37
12
  */
38
- export declare function minLength<TForm, TField extends string | null | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, minLen: number, options?: ValidateOptions): void;
13
+ export declare function minLength<TForm = unknown, TField = unknown>(minLen: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,38 +1,16 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Валидатор минимального числового значения
3
+ * Фабрика валидатора минимального числового значения.
5
4
  *
6
- * Проверяет, что числовое значение не меньше указанного минимума.
7
5
  * Пустые значения пропускаются (используйте `required` для обязательности).
8
6
  *
9
- * @group Validation
10
- * @category Validators
11
- *
12
- * @param fieldPath - Путь к полю для валидации
13
- * @param minValue - Минимально допустимое значение
14
- * @param options - Опции валидации (message, params)
15
- *
16
7
  * @example
17
8
  * ```typescript
18
- * // Базовое использование
19
- * validationSchema: (path) => [
20
- * min(path.age, 18),
21
- * min(path.quantity, 1),
22
- * ]
23
- *
24
- * // С кастомным сообщением
25
- * min(path.age, 18, { message: 'Вам должно быть не менее 18 лет' })
26
- * ```
9
+ * import { validate } from '@reformer/core';
10
+ * import { min } from '@reformer/core/validators';
27
11
  *
28
- * @example
29
- * ```typescript
30
- * // Ошибка валидации
31
- * {
32
- * code: 'min',
33
- * message: 'Минимальное значение: 18',
34
- * params: { min: 18, actual: 16 }
35
- * }
12
+ * validate(path.age, min(18));
13
+ * validate(path.quantity, min(1, { message: 'Минимум 1' }));
36
14
  * ```
37
15
  */
38
- export declare function min<TForm, TField extends number | null | undefined = number>(fieldPath: FieldPathNode<TForm, TField> | undefined, minValue: number, options?: ValidateOptions): void;
16
+ export declare function min<TForm = unknown, TField extends number | undefined = number>(minValue: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -0,0 +1,13 @@
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
2
+ /**
3
+ * Фабрика валидатора, проверяющего что число кратно заданному.
4
+ *
5
+ * Пустые значения и не-числа пропускаются (используйте `required` и `isNumber`).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * validate(path.price, multipleOf(0.01));
10
+ * validate(path.rating, multipleOf(0.5, { message: 'Только шаг 0.5' }));
11
+ * ```
12
+ */
13
+ export declare function multipleOf<TForm = unknown, TField extends number | undefined = number>(divisor: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -0,0 +1,13 @@
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
2
+ /**
3
+ * Фабрика валидатора, проверяющего что число неотрицательное (`≥ 0`).
4
+ *
5
+ * Пустые значения и не-числа пропускаются (используйте `required` и `isNumber`).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * validate(path.quantity, nonNegative());
10
+ * validate(path.balance, nonNegative({ message: 'Баланс не может быть отрицательным' }));
11
+ * ```
12
+ */
13
+ export declare function nonNegative<TForm = unknown, TField extends number | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -0,0 +1,13 @@
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
2
+ /**
3
+ * Фабрика валидатора, проверяющего что число не равно нулю.
4
+ *
5
+ * Пустые значения и не-числа пропускаются (используйте `required` и `isNumber`).
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * validate(path.quantity, nonZero());
10
+ * validate(path.divisor, nonZero({ message: 'Не может быть нулём' }));
11
+ * ```
12
+ */
13
+ export declare function nonZero<TForm = unknown, TField extends number | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,35 +1,12 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Проверяет, что дата находится в прошлом (не в будущем)
3
+ * Фабрика валидатора, проверяющего что дата не в будущем.
5
4
  *
6
- * Пустые значения и невалидные даты пропускаются (используйте `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
- * ```
5
+ * Пустые и невалидные даты пропускаются.
24
6
  *
25
7
  * @example
26
8
  * ```typescript
27
- * // Ошибка валидации
28
- * {
29
- * code: 'date_future',
30
- * message: 'Дата не может быть в будущем',
31
- * params: {}
32
- * }
9
+ * validate(path.birthDate, pastDate({ message: 'Дата рождения не может быть в будущем' }));
33
10
  * ```
34
11
  */
35
- export declare function pastDate<TForm, TField extends string | Date | undefined = string | Date>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions): void;
12
+ export declare function pastDate<TForm = unknown, TField extends string | Date | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,40 +1,13 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Валидатор паттерна (регулярного выражения)
3
+ * Фабрика валидатора регулярного выражения.
5
4
  *
6
- * Проверяет, что значение соответствует указанному регулярному выражению.
7
5
  * Пустые значения пропускаются (используйте `required` для обязательности).
8
6
  *
9
- * @group Validation
10
- * @category Validators
11
- *
12
- * @param fieldPath - Путь к полю для валидации
13
- * @param regex - Регулярное выражение для проверки
14
- * @param options - Опции валидации (message, params)
15
- *
16
- * @example
17
- * ```typescript
18
- * // Только буквы
19
- * pattern(path.name, /^[а-яА-Яa-zA-Z]+$/)
20
- *
21
- * // Только цифры
22
- * pattern(path.code, /^\d+$/)
23
- *
24
- * // С кастомным сообщением
25
- * pattern(path.username, /^[a-z0-9_]+$/i, {
26
- * message: 'Только латинские буквы, цифры и подчёркивание'
27
- * })
28
- * ```
29
- *
30
7
  * @example
31
8
  * ```typescript
32
- * // Ошибка валидации
33
- * {
34
- * code: 'pattern',
35
- * message: 'Значение не соответствует требуемому формату',
36
- * params: { pattern: '^[a-z]+$' }
37
- * }
9
+ * validate(path.name, pattern(/^[а-яА-Яa-zA-Z]+$/));
10
+ * validate(path.code, pattern(/^\d+$/, { message: 'Только цифры' }));
38
11
  * ```
39
12
  */
40
- export declare function pattern<TForm, TField extends string | null | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, regex: RegExp, options?: ValidateOptions): void;
13
+ export declare function pattern<TForm = unknown, TField extends string | undefined = string>(regex: RegExp, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,27 +1,17 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
3
- /**
4
- * Формат телефона для валидации
5
- *
6
- * @group Validation
7
- * @category Validators
8
- */
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
9
2
  export type PhoneFormat = 'international' | 'ru' | 'us' | 'any';
3
+ export interface PhoneValidatorOptions extends ValidateOptions {
4
+ format?: PhoneFormat;
5
+ }
10
6
  /**
11
- * Адаптер для phone валидатора
12
- * Поддерживает опциональные поля (string | undefined)
7
+ * Фабрика валидатора номера телефона.
13
8
  *
14
- * @group Validation
15
- * @category Validators
9
+ * Пустые значения пропускаются (используйте `required` для обязательности).
16
10
  *
17
11
  * @example
18
12
  * ```typescript
19
- * phone(path.phoneNumber);
20
- * phone(path.phoneNumber, { format: 'ru' });
21
- * phone(path.phoneNumber, { format: 'international', message: 'Неверный формат телефона' });
13
+ * validate(path.phone, phone());
14
+ * validate(path.phone, phone({ format: 'ru' }));
22
15
  * ```
23
16
  */
24
- export declare function phone<TForm, TField extends string | null | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions & {
25
- /** Формат телефона */
26
- format?: PhoneFormat;
27
- }): void;
17
+ export declare function phone<TForm = unknown, TField extends string | undefined = string>(options?: PhoneValidatorOptions): Validator<TForm, TField>;
@@ -1,41 +1,20 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
3
2
  /**
4
- * Валидатор обязательного поля
3
+ * Фабрика валидатора обязательного поля.
4
+ *
5
+ * Возвращает чистую функцию-валидатор `(value, control, root)`. Передаётся в `validate()`.
5
6
  *
6
- * Проверяет, что поле имеет непустое значение.
7
7
  * Пустыми считаются: `null`, `undefined`, `''` (пустая строка).
8
8
  * Для boolean полей требуется значение `true`.
9
9
  *
10
- * @group Validation
11
- * @category Validators
12
- *
13
- * @param fieldPath - Путь к полю для валидации
14
- * @param options - Опции валидации (message, params)
15
- *
16
10
  * @example
17
11
  * ```typescript
18
- * // Базовое использование
19
- * validationSchema: (path, { validate }) => [
20
- * required(path.name),
21
- * required(path.email),
22
- * ]
23
- *
24
- * // С кастомным сообщением
25
- * required(path.phone, { message: 'Укажите номер телефона' })
12
+ * import { validate } from '@reformer/core';
13
+ * import { required } from '@reformer/core/validators';
26
14
  *
27
- * // Для checkbox (требует true)
28
- * required(path.agreeToTerms, { message: 'Необходимо принять условия' })
29
- * ```
30
- *
31
- * @example
32
- * ```typescript
33
- * // Ошибка валидации
34
- * {
35
- * code: 'required',
36
- * message: 'Поле обязательно для заполнения',
37
- * params: {}
38
- * }
15
+ * validate(path.email, required());
16
+ * validate(path.phone, required({ message: 'Укажите номер телефона' }));
17
+ * validate(path.agreeToTerms, required({ message: 'Необходимо принять условия' }));
39
18
  * ```
40
19
  */
41
- export declare function required<TForm, TField>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions): void;
20
+ export declare function required<TForm = unknown, TField = unknown>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,22 +1,20 @@
1
- import { ValidateOptions } from '../../types/validation-schema';
2
- import { FieldPathNode } from '../../types';
1
+ import { Validator, ValidateOptions } from '../../types/validation-schema';
2
+ export interface UrlValidatorOptions extends ValidateOptions {
3
+ /** Требовать наличие протокола (http:// или https://) */
4
+ requireProtocol?: boolean;
5
+ /** Разрешенные протоколы */
6
+ allowedProtocols?: string[];
7
+ }
3
8
  /**
4
- * Адаптер для URL валидатора
5
- * Поддерживает опциональные поля (string | undefined)
9
+ * Фабрика валидатора URL.
6
10
  *
7
- * @group Validation
8
- * @category Validators
11
+ * Пустые значения пропускаются (используйте `required` для обязательности).
9
12
  *
10
13
  * @example
11
14
  * ```typescript
12
- * url(path.website);
13
- * url(path.website, { message: 'Введите корректный URL' });
14
- * url(path.website, { requireProtocol: true });
15
+ * validate(path.website, url());
16
+ * validate(path.website, url({ requireProtocol: true }));
17
+ * validate(path.website, url({ allowedProtocols: ['https'] }));
15
18
  * ```
16
19
  */
17
- export declare function url<TForm, TField extends string | null | undefined = string>(fieldPath: FieldPathNode<TForm, TField> | undefined, options?: ValidateOptions & {
18
- /** Требовать наличие протокола (http:// или https://) */
19
- requireProtocol?: boolean;
20
- /** Разрешенные протоколы */
21
- allowedProtocols?: string[];
22
- }): void;
20
+ export declare function url<TForm = unknown, TField extends string | undefined = string>(options?: UrlValidatorOptions): Validator<TForm, TField>;
package/dist/index.d.ts CHANGED
@@ -1,17 +1,16 @@
1
1
  export * from './core/types';
2
2
  export * from './core/factories';
3
3
  export * from './core/utils';
4
+ export * from './core/model';
4
5
  export { FormNode } from './core/nodes/form-node';
5
6
  export { FieldNode } from './core/nodes/field-node';
6
7
  export { GroupNode } from './core/nodes/group-node';
7
8
  export { ArrayNode } from './core/nodes/array-node';
9
+ export { ModelArrayNode } from './core/nodes/model-array-node';
10
+ export type { ModelArrayControl } from './core/nodes/model-array-node';
8
11
  export type { SetValueOptions } from './core/nodes/form-node';
9
12
  export { useFormControl } from './hooks/useFormControl';
10
13
  export { useFormControlValue } from './hooks/useFormControlValue';
11
14
  export { useArrayLength } from './hooks/useArrayLength';
12
- export { useHiddenCondition } from './hooks/useHiddenCondition';
13
15
  export type { FieldControlState, ArrayControlState } from './hooks/types';
14
- export type { BehaviorSchemaFn } from './core/behavior/types';
15
- export { validateForm } from './core/validation/validate-form';
16
- export * as behaviors from './core/behavior';
17
16
  export * as validators from './core/validation';