@reformer/core 11.0.0-beta.3 → 11.0.0-beta.5

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 (130) hide show
  1. package/dist/behaviors.d.ts +1 -1
  2. package/dist/behaviors.js +37 -37
  3. package/dist/create-model-Dxh9cfLp.js +97 -0
  4. package/dist/form/behaviors/collections.d.ts +50 -0
  5. package/dist/form/behaviors/context.d.ts +23 -0
  6. package/dist/form/behaviors/index.d.ts +28 -0
  7. package/dist/form/behaviors/internals.d.ts +26 -0
  8. package/dist/form/{behaviors-node.d.ts → behaviors/node.d.ts} +3 -3
  9. package/dist/form/behaviors/operators.d.ts +51 -0
  10. package/dist/form/behaviors/types.d.ts +17 -0
  11. package/dist/form/create-core-form.d.ts +3 -3
  12. package/dist/form/create-form.d.ts +12 -10
  13. package/dist/form/factories/node-factory.d.ts +17 -16
  14. package/dist/form/index.d.ts +10 -16
  15. package/dist/form/nodes/array-node.d.ts +3 -3
  16. package/dist/form/nodes/field-node.d.ts +6 -3
  17. package/dist/form/nodes/group-node.d.ts +7 -7
  18. package/dist/form/nodes/model-array-node.d.ts +3 -3
  19. package/dist/form/types/contracts.d.ts +9 -6
  20. package/dist/form/types/deep-schema.d.ts +5 -5
  21. package/dist/form/types/validation-schema.d.ts +1 -1
  22. package/dist/form/{validation-config.d.ts → validation/config.d.ts} +3 -3
  23. package/dist/form/validation/context.d.ts +27 -0
  24. package/dist/form/{error-handler.d.ts → validation/error-handler.d.ts} +1 -1
  25. package/dist/form/validation/index.d.ts +23 -28
  26. package/dist/form/validation/operators.d.ts +42 -0
  27. package/dist/form/validation/run.d.ts +45 -0
  28. package/dist/form/{validation-strategy.d.ts → validation/strategy.d.ts} +2 -2
  29. package/dist/form/validation/types.d.ts +28 -0
  30. package/dist/form/{validation/validators → validators}/date-utils.d.ts +1 -1
  31. package/dist/form/{validation/validators → validators}/email.d.ts +6 -7
  32. package/dist/form/{validation/validators → validators}/file-type.d.ts +6 -7
  33. package/dist/form/{validation/validators → validators}/file-utils.d.ts +1 -1
  34. package/dist/form/{validation/validators → validators}/future-date.d.ts +6 -7
  35. package/dist/form/{validation/validators → validators}/index.d.ts +7 -4
  36. package/dist/form/{validation/validators → validators}/integer.d.ts +6 -7
  37. package/dist/form/{validation/validators → validators}/is-date.d.ts +6 -7
  38. package/dist/form/{validation/validators → validators}/is-number.d.ts +6 -7
  39. package/dist/form/{validation/validators → validators}/max-age.d.ts +6 -7
  40. package/dist/form/{validation/validators → validators}/max-date.d.ts +6 -7
  41. package/dist/form/{validation/validators → validators}/max-file-size.d.ts +6 -7
  42. package/dist/form/{validation/validators → validators}/max-files.d.ts +6 -7
  43. package/dist/form/{validation/validators → validators}/max-length.d.ts +7 -8
  44. package/dist/form/{validation/validators → validators}/max-total-file-size.d.ts +6 -7
  45. package/dist/form/{validation/validators → validators}/max.d.ts +7 -8
  46. package/dist/form/{validation/validators → validators}/min-age.d.ts +6 -7
  47. package/dist/form/{validation/validators → validators}/min-date.d.ts +6 -7
  48. package/dist/form/{validation/validators → validators}/min-file-size.d.ts +6 -7
  49. package/dist/form/{validation/validators → validators}/min-files.d.ts +6 -7
  50. package/dist/form/{validation/validators → validators}/min-length.d.ts +7 -8
  51. package/dist/form/{validation/validators → validators}/min.d.ts +7 -8
  52. package/dist/form/{validation/validators → validators}/multiple-of.d.ts +6 -7
  53. package/dist/form/{validation/validators → validators}/non-negative.d.ts +6 -7
  54. package/dist/form/{validation/validators → validators}/non-zero.d.ts +6 -7
  55. package/dist/form/{validation/validators → validators}/past-date.d.ts +6 -7
  56. package/dist/form/{validation/validators → validators}/pattern.d.ts +7 -15
  57. package/dist/form/{validation/validators → validators}/phone.d.ts +6 -7
  58. package/dist/form/{validation/validators → validators}/required.d.ts +8 -13
  59. package/dist/form/{validation/validators → validators}/url.d.ts +8 -13
  60. package/dist/index.d.ts +7 -4
  61. package/dist/index.js +272 -94
  62. package/dist/{state/form-model.d.ts → model/create-model.d.ts} +0 -14
  63. package/dist/{state → model}/index.d.ts +10 -11
  64. package/dist/model/model-nodes.d.ts +60 -0
  65. package/dist/model/model-signals-proxy.d.ts +32 -0
  66. package/dist/model/model-value-proxy.d.ts +3 -0
  67. package/dist/{state → model}/safe-effect.d.ts +1 -1
  68. package/dist/model-signals-proxy-mV3WGdlO.js +233 -0
  69. package/dist/model.d.ts +2 -0
  70. package/dist/model.js +21 -0
  71. package/dist/{form → platforms/react}/hooks/types.d.ts +1 -1
  72. package/dist/{form → platforms/react}/hooks/use-form-bundle.d.ts +1 -1
  73. package/dist/{form → platforms/react}/hooks/use-form-validation.d.ts +3 -3
  74. package/dist/{form → platforms/react}/hooks/useArrayLength.d.ts +1 -1
  75. package/dist/{form → platforms/react}/hooks/useFormControl.d.ts +3 -3
  76. package/dist/{form → platforms/react}/hooks/useFormControlValue.d.ts +2 -2
  77. package/dist/platforms/react/index.d.ts +23 -0
  78. package/dist/signals.d.ts +1 -1
  79. package/dist/strategy-DA3JwxsR.js +170 -0
  80. package/dist/validation.d.ts +1 -1
  81. package/dist/validation.js +10 -165
  82. package/dist/validators/email.d.ts +1 -1
  83. package/dist/validators/future-date.d.ts +1 -1
  84. package/dist/validators/integer.d.ts +1 -1
  85. package/dist/validators/is-date.d.ts +1 -1
  86. package/dist/validators/is-number.d.ts +1 -1
  87. package/dist/validators/max-age.d.ts +1 -1
  88. package/dist/validators/max-date.d.ts +1 -1
  89. package/dist/validators/max-length.d.ts +1 -1
  90. package/dist/validators/max.d.ts +1 -1
  91. package/dist/validators/min-age.d.ts +1 -1
  92. package/dist/validators/min-date.d.ts +1 -1
  93. package/dist/validators/min-length.d.ts +1 -1
  94. package/dist/validators/min.d.ts +1 -1
  95. package/dist/validators/multiple-of.d.ts +1 -1
  96. package/dist/validators/non-negative.d.ts +1 -1
  97. package/dist/validators/non-zero.d.ts +1 -1
  98. package/dist/validators/past-date.d.ts +1 -1
  99. package/dist/validators/pattern.d.ts +1 -1
  100. package/dist/validators/phone.d.ts +1 -1
  101. package/dist/validators/required.d.ts +1 -1
  102. package/dist/validators/url.d.ts +1 -1
  103. package/dist/validators.d.ts +1 -1
  104. package/docs/llms/02-quick-start.md +6 -6
  105. package/docs/llms/03-api-signatures.md +3 -3
  106. package/docs/llms/05-common-mistakes.md +1 -1
  107. package/docs/llms/09-formschema.md +11 -11
  108. package/docs/llms/10-arrays.md +4 -4
  109. package/docs/llms/14-extended-mistakes.md +1 -1
  110. package/docs/llms/15-project-structure.md +8 -7
  111. package/docs/llms/16-ui-components.md +6 -6
  112. package/docs/llms/17-nonexistent-api.md +2 -2
  113. package/docs/llms/29-async-preload.md +4 -4
  114. package/docs/llms/30-type-safety-recipes.md +1 -1
  115. package/llms-index.json +1 -0
  116. package/llms.txt +2102 -262
  117. package/package.json +5 -4
  118. package/dist/form/behaviors.d.ts +0 -133
  119. package/dist/form/validation-schema.d.ts +0 -106
  120. package/dist/form/validators.d.ts +0 -11
  121. package/dist/form-model-DhW2HZOB.js +0 -323
  122. package/dist/state.d.ts +0 -2
  123. package/dist/state.js +0 -21
  124. package/dist/subscription-manager-705bls97.js +0 -171
  125. /package/dist/{state → form/nodes}/subscription-manager.d.ts +0 -0
  126. /package/dist/{state → model}/behaviors-value.d.ts +0 -0
  127. /package/dist/{state → model}/derived-registry.d.ts +0 -0
  128. /package/dist/{state → model}/types.d.ts +0 -0
  129. /package/dist/{behaviors-node-DGEFMTQu.js → node-DGEFMTQu.js} +0 -0
  130. /package/dist/{form → platforms/react}/hooks/useSignalSubscription.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что дата не в прошлом.
4
4
  *
@@ -10,14 +10,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
10
10
  *
11
11
  * @example Дата не в прошлом
12
12
  * ```typescript
13
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
13
14
  * import { required, futureDate } from '@reformer/core/validators';
14
15
  *
15
- * // Внутри FieldConfig схемы формы:
16
- * appointmentDate: {
17
- * value: model.$.appointmentDate,
18
- * component: DatePicker,
19
- * validators: [required(), futureDate({ message: 'Дата записи должна быть в будущем' })],
20
- * },
16
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
17
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
18
+ * validate(model.$.appointmentDate, [required(), futureDate({ message: 'Дата записи должна быть в будущем' })]);
19
+ * });
21
20
  * ```
22
21
  */
23
22
  export declare function futureDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,9 +1,12 @@
1
1
  /**
2
- * Reusable validator factories.
2
+ * Точка входа сабпата `@reformer/core/validators` — все фабрики правил одним импортом.
3
3
  *
4
- * Все примитивы — фабрики, возвращающие чистый Validator<TForm, TField>.
5
- * Импортируются из `@reformer/core/validators` и передаются в массив `validators`
6
- * поля схемы формы: `validators: [required(), min(18)]`.
4
+ * Все примитивы — фабрики, возвращающие чистый `Validator<TForm, TField>`; передаются вторым
5
+ * аргументом оператора `validate` внутри схемы валидации: `validate(model.$.age, [required(), min(18)])`.
6
+ * В layout-схему формы правила НЕ кладутся — поля `validators` у узла нет (снято в 7.0).
7
+ *
8
+ * Гранулярные сабпаты (`@reformer/core/validators/required` и ещё 20) собираются отдельными
9
+ * entry для tree-shaking; этот модуль отдаёт полный набор для случаев, когда правил много.
7
10
  */
8
11
  export { required } from './required';
9
12
  export { min } from './min';
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что число — целое.
4
4
  *
@@ -9,14 +9,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
9
9
  *
10
10
  * @example Проверка целого числа
11
11
  * ```typescript
12
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
12
13
  * import { required, integer } from '@reformer/core/validators';
13
14
  *
14
- * // Внутри FieldConfig схемы формы:
15
- * count: {
16
- * value: model.$.count,
17
- * component: Input,
18
- * validators: [required(), integer({ message: 'Должно быть целым числом' })],
19
- * },
15
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
16
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
17
+ * validate(model.$.count, [required(), integer({ message: 'Должно быть целым числом' })]);
18
+ * });
20
19
  * ```
21
20
  */
22
21
  export declare function integer<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что значение — валидная дата.
4
4
  *
@@ -10,14 +10,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
10
10
  *
11
11
  * @example Проверка валидности даты
12
12
  * ```typescript
13
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
13
14
  * import { required, isDate } from '@reformer/core/validators';
14
15
  *
15
- * // Внутри FieldConfig схемы формы:
16
- * eventDate: {
17
- * value: model.$.eventDate,
18
- * component: DatePicker,
19
- * validators: [required(), isDate({ message: 'Введите корректную дату' })],
20
- * },
16
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
17
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
18
+ * validate(model.$.eventDate, [required(), isDate({ message: 'Введите корректную дату' })]);
19
+ * });
21
20
  * ```
22
21
  */
23
22
  export declare function isDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что значение — конечное число (не NaN, не строка).
4
4
  *
@@ -11,14 +11,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
11
11
  *
12
12
  * @example Проверка, что значение — число
13
13
  * ```typescript
14
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
14
15
  * import { required, isNumber } from '@reformer/core/validators';
15
16
  *
16
- * // Внутри FieldConfig схемы формы:
17
- * amount: {
18
- * value: model.$.amount,
19
- * component: Input,
20
- * validators: [required(), isNumber({ message: 'Введите число' })],
21
- * },
17
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
18
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
19
+ * validate(model.$.amount, [required(), isNumber({ message: 'Введите число' })]);
20
+ * });
22
21
  * ```
23
22
  */
24
23
  export declare function isNumber<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора максимального возраста (по дате рождения).
4
4
  *
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
12
12
  *
13
13
  * @example Максимальный возраст
14
14
  * ```typescript
15
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
15
16
  * import { maxAge } from '@reformer/core/validators';
16
17
  *
17
- * // Внутри FieldConfig схемы формы:
18
- * birthDate: {
19
- * value: model.$.birthDate,
20
- * component: DatePicker,
21
- * validators: [maxAge(100, { message: 'Проверьте дату рождения' })],
22
- * },
18
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
+ * validate(model.$.birthDate, [maxAge(100, { message: 'Проверьте дату рождения' })]);
21
+ * });
23
22
  * ```
24
23
  */
25
24
  export declare function maxAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора максимальной даты (включительно).
4
4
  *
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
12
12
  *
13
13
  * @example Максимальная дата
14
14
  * ```typescript
15
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
15
16
  * import { maxDate } from '@reformer/core/validators';
16
17
  *
17
- * // Внутри FieldConfig схемы формы:
18
- * birthDate: {
19
- * value: model.$.birthDate,
20
- * component: DatePicker,
21
- * validators: [maxDate(new Date(), { message: 'Дата не может быть в будущем' })],
22
- * },
18
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
+ * validate(model.$.birthDate, [maxDate(new Date(), { message: 'Дата не может быть в будущем' })]);
21
+ * });
23
22
  * ```
24
23
  */
25
24
  export declare function maxDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора максимального размера файла.
4
4
  *
@@ -15,14 +15,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
15
15
  *
16
16
  * @example Ограничение размера вложений
17
17
  * ```typescript
18
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
18
19
  * import { maxFileSize } from '@reformer/core/validators';
19
20
  *
20
- * // Внутри FieldConfig схемы формы:
21
- * documents: {
22
- * value: model.$.documents,
23
- * component: FileUploadField,
24
- * validators: [maxFileSize(5 * 1024 * 1024, { message: 'Файл больше 5 МБ' })],
25
- * },
21
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
22
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
23
+ * validate(model.$.documents, [maxFileSize(5 * 1024 * 1024, { message: 'Файл больше 5 МБ' })]);
24
+ * });
26
25
  * ```
27
26
  */
28
27
  export declare function maxFileSize<TForm = unknown, TField = unknown>(maxSize: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора максимального количества файлов.
4
4
  *
@@ -13,14 +13,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
13
13
  *
14
14
  * @example Не более трёх вложений
15
15
  * ```typescript
16
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
17
  * import { maxFiles } from '@reformer/core/validators';
17
18
  *
18
- * // Внутри FieldConfig схемы формы:
19
- * documents: {
20
- * value: model.$.documents,
21
- * component: FileUploadField,
22
- * validators: [maxFiles(3, { message: 'Максимум 3 файла' })],
23
- * },
19
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
+ * validate(model.$.documents, [maxFiles(3, { message: 'Максимум 3 файла' })]);
22
+ * });
24
23
  * ```
25
24
  */
26
25
  export declare function maxFiles<TForm = unknown, TField = unknown>(max: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора максимальной длины строки или массива.
4
4
  *
@@ -13,15 +13,14 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
13
13
  *
14
14
  * @example Максимальная длина строки
15
15
  * ```typescript
16
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
17
  * import { maxLength } from '@reformer/core/validators';
17
18
  *
18
- * // Внутри FieldConfig схемы формы:
19
- * name: { value: model.$.name, component: Input, validators: [maxLength(50)] },
20
- * bio: {
21
- * value: model.$.bio,
22
- * component: Textarea,
23
- * validators: [maxLength(500, { message: 'Максимум 500 символов' })],
24
- * },
19
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
+ * validate(model.$.name, [maxLength(50)]);
22
+ * validate(model.$.bio, [maxLength(500, { message: 'Максимум 500 символов' })]);
23
+ * });
25
24
  * ```
26
25
  */
27
26
  export declare function maxLength<TForm = unknown, TField = unknown>(maxLen: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора суммарного размера всех файлов.
4
4
  *
@@ -13,14 +13,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
13
13
  *
14
14
  * @example Суммарно не более 20 МБ
15
15
  * ```typescript
16
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
17
  * import { maxTotalFileSize } from '@reformer/core/validators';
17
18
  *
18
- * // Внутри FieldConfig схемы формы:
19
- * documents: {
20
- * value: model.$.documents,
21
- * component: FileUploadField,
22
- * validators: [maxTotalFileSize(20 * 1024 * 1024, { message: 'Суммарно не более 20 МБ' })],
23
- * },
19
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
+ * validate(model.$.documents, [maxTotalFileSize(20 * 1024 * 1024, { message: 'Суммарно не более 20 МБ' })]);
22
+ * });
24
23
  * ```
25
24
  */
26
25
  export declare function maxTotalFileSize<TForm = unknown, TField = unknown>(maxTotal: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора максимального числового значения.
4
4
  *
@@ -11,15 +11,14 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
11
11
  *
12
12
  * @example Максимальное значение числового поля
13
13
  * ```typescript
14
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
14
15
  * import { required, max } from '@reformer/core/validators';
15
16
  *
16
- * // Внутри FieldConfig схемы формы:
17
- * quantity: { value: model.$.quantity, component: Input, validators: [max(100)] },
18
- * discount: {
19
- * value: model.$.discount,
20
- * component: Input,
21
- * validators: [required(), max(50, { message: 'Не более 50%' })],
22
- * },
17
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
18
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
19
+ * validate(model.$.quantity, [max(100)]);
20
+ * validate(model.$.discount, [required(), max(50, { message: 'Не более 50%' })]);
21
+ * });
23
22
  * ```
24
23
  */
25
24
  export declare function max<TForm = unknown, TField extends number | null | undefined = number>(maxValue: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора минимального возраста (по дате рождения).
4
4
  *
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
12
12
  *
13
13
  * @example Минимальный возраст
14
14
  * ```typescript
15
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
15
16
  * import { required, minAge } from '@reformer/core/validators';
16
17
  *
17
- * // Внутри FieldConfig схемы формы:
18
- * birthDate: {
19
- * value: model.$.birthDate,
20
- * component: DatePicker,
21
- * validators: [required(), minAge(18, { message: 'Вам должно быть не менее 18 лет' })],
22
- * },
18
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
+ * validate(model.$.birthDate, [required(), minAge(18, { message: 'Вам должно быть не менее 18 лет' })]);
21
+ * });
23
22
  * ```
24
23
  */
25
24
  export declare function minAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора минимальной даты (включительно).
4
4
  *
@@ -12,14 +12,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
12
12
  *
13
13
  * @example Минимальная дата
14
14
  * ```typescript
15
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
15
16
  * import { required, minDate } from '@reformer/core/validators';
16
17
  *
17
- * // Внутри FieldConfig схемы формы:
18
- * startDate: {
19
- * value: model.$.startDate,
20
- * component: DatePicker,
21
- * validators: [required(), minDate(new Date(), { message: 'Дата не раньше сегодня' })],
22
- * },
18
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
+ * validate(model.$.startDate, [required(), minDate(new Date(), { message: 'Дата не раньше сегодня' })]);
21
+ * });
23
22
  * ```
24
23
  */
25
24
  export declare function minDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора минимального размера файла.
4
4
  *
@@ -15,14 +15,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
15
15
  *
16
16
  * @example Отсев пустых файлов
17
17
  * ```typescript
18
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
18
19
  * import { minFileSize } from '@reformer/core/validators';
19
20
  *
20
- * // Внутри FieldConfig схемы формы:
21
- * documents: {
22
- * value: model.$.documents,
23
- * component: FileUploadField,
24
- * validators: [minFileSize(1, { message: 'Файл пустой' })],
25
- * },
21
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
22
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
23
+ * validate(model.$.documents, [minFileSize(1, { message: 'Файл пустой' })]);
24
+ * });
26
25
  * ```
27
26
  */
28
27
  export declare function minFileSize<TForm = unknown, TField = unknown>(minSize: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора минимального количества файлов.
4
4
  *
@@ -13,14 +13,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
13
13
  *
14
14
  * @example Не менее двух документов
15
15
  * ```typescript
16
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
17
  * import { required, minFiles } from '@reformer/core/validators';
17
18
  *
18
- * // Внутри FieldConfig схемы формы:
19
- * documents: {
20
- * value: model.$.documents,
21
- * component: FileUploadField,
22
- * validators: [required(), minFiles(2, { message: 'Приложите минимум 2 документа' })],
23
- * },
19
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
+ * validate(model.$.documents, [required(), minFiles(2, { message: 'Приложите минимум 2 документа' })]);
22
+ * });
24
23
  * ```
25
24
  */
26
25
  export declare function minFiles<TForm = unknown, TField = unknown>(min: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора минимальной длины строки или массива.
4
4
  *
@@ -13,15 +13,14 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
13
13
  *
14
14
  * @example Минимальная длина строки
15
15
  * ```typescript
16
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
17
  * import { required, minLength } from '@reformer/core/validators';
17
18
  *
18
- * // Внутри FieldConfig схемы формы:
19
- * name: { value: model.$.name, component: Input, validators: [minLength(2)] },
20
- * password: {
21
- * value: model.$.password,
22
- * component: Input,
23
- * validators: [required(), minLength(8, { message: 'Минимум 8 символов' })],
24
- * },
19
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
+ * validate(model.$.name, [minLength(2)]);
22
+ * validate(model.$.password, [required(), minLength(8, { message: 'Минимум 8 символов' })]);
23
+ * });
25
24
  * ```
26
25
  */
27
26
  export declare function minLength<TForm = unknown, TField = unknown>(minLen: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора минимального числового значения.
4
4
  *
@@ -11,15 +11,14 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
11
11
  *
12
12
  * @example Минимальное значение числового поля
13
13
  * ```typescript
14
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
14
15
  * import { required, min } from '@reformer/core/validators';
15
16
  *
16
- * // Внутри FieldConfig схемы формы:
17
- * age: { value: model.$.age, component: Input, validators: [min(18)] },
18
- * quantity: {
19
- * value: model.$.quantity,
20
- * component: Input,
21
- * validators: [required(), min(1, { message: 'Минимум 1' })],
22
- * },
17
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
18
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
19
+ * validate(model.$.age, [min(18)]);
20
+ * validate(model.$.quantity, [required(), min(1, { message: 'Минимум 1' })]);
21
+ * });
23
22
  * ```
24
23
  */
25
24
  export declare function min<TForm = unknown, TField extends number | null | undefined = number>(minValue: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что число кратно заданному.
4
4
  *
@@ -11,14 +11,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
11
11
  *
12
12
  * @example Проверка кратности
13
13
  * ```typescript
14
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
14
15
  * import { multipleOf } from '@reformer/core/validators';
15
16
  *
16
- * // Внутри FieldConfig схемы формы:
17
- * rating: {
18
- * value: model.$.rating,
19
- * component: Input,
20
- * validators: [multipleOf(0.5, { message: 'Только шаг 0.5' })],
21
- * },
17
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
18
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
19
+ * validate(model.$.rating, [multipleOf(0.5, { message: 'Только шаг 0.5' })]);
20
+ * });
22
21
  * ```
23
22
  */
24
23
  export declare function multipleOf<TForm = unknown, TField extends number | null | undefined = number>(divisor: number, options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что число неотрицательное (`≥ 0`).
4
4
  *
@@ -9,14 +9,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
9
9
  *
10
10
  * @example Проверка неотрицательности
11
11
  * ```typescript
12
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
12
13
  * import { nonNegative } from '@reformer/core/validators';
13
14
  *
14
- * // Внутри FieldConfig схемы формы:
15
- * balance: {
16
- * value: model.$.balance,
17
- * component: Input,
18
- * validators: [nonNegative({ message: 'Баланс не может быть отрицательным' })],
19
- * },
15
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
16
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
17
+ * validate(model.$.balance, [nonNegative({ message: 'Баланс не может быть отрицательным' })]);
18
+ * });
20
19
  * ```
21
20
  */
22
21
  export declare function nonNegative<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что число не равно нулю.
4
4
  *
@@ -9,14 +9,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
9
9
  *
10
10
  * @example Проверка «не ноль»
11
11
  * ```typescript
12
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
12
13
  * import { nonZero } from '@reformer/core/validators';
13
14
  *
14
- * // Внутри FieldConfig схемы формы:
15
- * divisor: {
16
- * value: model.$.divisor,
17
- * component: Input,
18
- * validators: [nonZero({ message: 'Не может быть нулём' })],
19
- * },
15
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
16
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
17
+ * validate(model.$.divisor, [nonZero({ message: 'Не может быть нулём' })]);
18
+ * });
20
19
  * ```
21
20
  */
22
21
  export declare function nonZero<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора, проверяющего что дата не в будущем.
4
4
  *
@@ -10,14 +10,13 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
10
10
  *
11
11
  * @example Дата не в будущем
12
12
  * ```typescript
13
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
13
14
  * import { required, pastDate } from '@reformer/core/validators';
14
15
  *
15
- * // Внутри FieldConfig схемы формы:
16
- * birthDate: {
17
- * value: model.$.birthDate,
18
- * component: DatePicker,
19
- * validators: [required(), pastDate({ message: 'Дата рождения не может быть в будущем' })],
20
- * },
16
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
17
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
18
+ * validate(model.$.birthDate, [required(), pastDate({ message: 'Дата рождения не может быть в будущем' })]);
19
+ * });
21
20
  * ```
22
21
  */
23
22
  export declare function pastDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
@@ -1,4 +1,4 @@
1
- import { Validator, ValidateOptions } from '../../types/validation-schema';
1
+ import { Validator, ValidateOptions } from '../types/validation-schema';
2
2
  /**
3
3
  * Фабрика валидатора регулярного выражения.
4
4
  *
@@ -12,22 +12,14 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
12
12
  *
13
13
  * @example Проверка по регулярному выражению
14
14
  * ```typescript
15
+ * import { defineValidationSchema, validate } from '@reformer/core/validation';
15
16
  * import { required, pattern } from '@reformer/core/validators';
16
17
  *
17
- * // Внутри FieldConfig схемы формы:
18
- * name: {
19
- * value: model.$.name,
20
- * component: Input,
21
- * validators: [pattern(/^[a-zA-Zа-яА-Я]+$/, { message: 'Только буквы' })],
22
- * },
23
- * phone: {
24
- * value: model.$.phone,
25
- * component: InputMask,
26
- * validators: [
27
- * required(),
28
- * pattern(/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/, { message: 'Формат +7 (999) 123-45-67' }),
29
- * ],
30
- * },
18
+ * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
+ * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
+ * validate(model.$.name, [pattern(/^[a-zA-Zа-яА-Я]+$/, { message: 'Только буквы' })]);
21
+ * validate(model.$.phone, [required(), pattern(/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/, { message: 'Формат +7 (999) 123-45-67' })]);
22
+ * });
31
23
  * ```
32
24
  */
33
25
  export declare function pattern<TForm = unknown, TField extends string | null | undefined = string>(regex: RegExp, options?: ValidateOptions): Validator<TForm, TField>;