@reformer/core 11.0.0-beta.7 → 11.0.0-beta.9

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 (226) hide show
  1. package/README.md +90 -68
  2. package/dist/behaviors-value-HA_Q03hc.js +108 -0
  3. package/dist/behaviors.js +382 -217
  4. package/dist/create-model-BvcbNPgL.js +30 -0
  5. package/dist/date-utils-90-qZbse.js +43 -0
  6. package/dist/{en-CjAqn7h0.js → en-HP8XEych.js} +6 -3
  7. package/dist/form/aggregate-signals.d.ts +21 -63
  8. package/dist/form/behaviors/collections.d.ts +42 -8
  9. package/dist/form/behaviors/context.d.ts +37 -4
  10. package/dist/form/behaviors/index.d.ts +6 -4
  11. package/dist/form/behaviors/internals.d.ts +9 -3
  12. package/dist/form/behaviors/node.d.ts +25 -2
  13. package/dist/form/behaviors/operators.d.ts +17 -9
  14. package/dist/form/behaviors/schema-operators.d.ts +78 -0
  15. package/dist/form/behaviors/types.d.ts +25 -5
  16. package/dist/form/create-form.d.ts +57 -70
  17. package/dist/form/flow/flow.d.ts +87 -0
  18. package/dist/form/form-bundle.d.ts +153 -0
  19. package/dist/form/form-config-base.d.ts +46 -0
  20. package/dist/form/form-level.d.ts +121 -0
  21. package/dist/form/form-proxy-builder.d.ts +6 -22
  22. package/dist/form/index.d.ts +20 -20
  23. package/dist/form/nodes/form-array-node.d.ts +100 -0
  24. package/dist/form/nodes/form-control-node.d.ts +73 -0
  25. package/dist/form/nodes/form-group-node.d.ts +66 -0
  26. package/dist/form/nodes/node-kind.d.ts +29 -0
  27. package/dist/form/nodes/state/availability.d.ts +6 -0
  28. package/dist/form/nodes/state/component.d.ts +6 -0
  29. package/dist/form/nodes/state/index.d.ts +12 -0
  30. package/dist/form/nodes/state/interaction.d.ts +13 -0
  31. package/dist/form/nodes/state/issues.d.ts +9 -0
  32. package/dist/form/nodes/state/pending.d.ts +6 -0
  33. package/dist/form/schema/compile.d.ts +59 -0
  34. package/dist/form/schema/compiled.d.ts +143 -0
  35. package/dist/form/schema/row-key.d.ts +11 -0
  36. package/dist/form/schema-controller.d.ts +153 -0
  37. package/dist/form/schema-subtree.d.ts +28 -0
  38. package/dist/form/signal-node-registry.d.ts +27 -22
  39. package/dist/form/submission.d.ts +93 -0
  40. package/dist/form/type-guards.d.ts +14 -73
  41. package/dist/form/types/contracts.d.ts +19 -92
  42. package/dist/form/types/field-config.d.ts +27 -0
  43. package/dist/form/types/index.d.ts +5 -57
  44. package/dist/form/types/nodes.d.ts +159 -0
  45. package/dist/form/types/schema-node.d.ts +147 -46
  46. package/dist/form/types/validation-schema.d.ts +23 -27
  47. package/dist/form/validation/context.d.ts +46 -6
  48. package/dist/form/validation/index.d.ts +9 -8
  49. package/dist/form/validation/operators.d.ts +71 -17
  50. package/dist/form/validation/run.d.ts +93 -18
  51. package/dist/form/validation/strategy.d.ts +41 -13
  52. package/dist/form/validation/types.d.ts +74 -19
  53. package/dist/form/validators/date-utils.d.ts +13 -1
  54. package/dist/form/validators/email.d.ts +8 -7
  55. package/dist/form/validators/file-type.d.ts +8 -7
  56. package/dist/form/validators/file-utils.d.ts +2 -1
  57. package/dist/form/validators/future-date.d.ts +8 -7
  58. package/dist/form/validators/index.d.ts +1 -1
  59. package/dist/form/validators/integer.d.ts +8 -7
  60. package/dist/form/validators/is-date.d.ts +11 -9
  61. package/dist/form/validators/is-number.d.ts +11 -9
  62. package/dist/form/validators/max-age.d.ts +13 -9
  63. package/dist/form/validators/max-date.d.ts +8 -7
  64. package/dist/form/validators/max-file-size.d.ts +8 -7
  65. package/dist/form/validators/max-files.d.ts +8 -7
  66. package/dist/form/validators/max-length.d.ts +14 -7
  67. package/dist/form/validators/max-total-file-size.d.ts +8 -7
  68. package/dist/form/validators/max.d.ts +10 -8
  69. package/dist/form/validators/min-age.d.ts +12 -9
  70. package/dist/form/validators/min-date.d.ts +8 -7
  71. package/dist/form/validators/min-file-size.d.ts +8 -7
  72. package/dist/form/validators/min-files.d.ts +11 -9
  73. package/dist/form/validators/min-length.d.ts +14 -7
  74. package/dist/form/validators/min.d.ts +10 -8
  75. package/dist/form/validators/multiple-of.d.ts +10 -8
  76. package/dist/form/validators/non-negative.d.ts +8 -7
  77. package/dist/form/validators/non-zero.d.ts +8 -7
  78. package/dist/form/validators/past-date.d.ts +8 -7
  79. package/dist/form/validators/pattern.d.ts +9 -8
  80. package/dist/form/validators/phone.d.ts +8 -7
  81. package/dist/form/validators/required.d.ts +11 -9
  82. package/dist/form/validators/url.d.ts +20 -13
  83. package/dist/form/validators/validation-issue.d.ts +8 -0
  84. package/dist/i18n/descriptor.d.ts +1 -1
  85. package/dist/i18n/en.json.d.ts +5 -1
  86. package/dist/i18n/locale-store.d.ts +7 -0
  87. package/dist/i18n/message-format.d.ts +24 -4
  88. package/dist/i18n/ru.json.d.ts +5 -1
  89. package/dist/i18n/translator.d.ts +11 -0
  90. package/dist/i18n/validation-message.d.ts +42 -7
  91. package/dist/i18n.d.ts +7 -12
  92. package/dist/i18n.js +66 -283
  93. package/dist/index.d.ts +16 -7
  94. package/dist/index.js +958 -2798
  95. package/dist/loader-BWkigpVe.js +52 -0
  96. package/dist/locale/en.js +1 -1
  97. package/dist/locale/en.json +4 -1
  98. package/dist/locale/ru.js +4 -1
  99. package/dist/locale/ru.json +4 -1
  100. package/dist/locale-CG54AU2Q.js +219 -0
  101. package/dist/locale.js +1 -1
  102. package/dist/model/behaviors-value.d.ts +24 -6
  103. package/dist/model/create-model.d.ts +2 -2
  104. package/dist/model/derived-registry.d.ts +1 -1
  105. package/dist/model/index.d.ts +16 -5
  106. package/dist/model/model-nodes.d.ts +138 -8
  107. package/dist/model/model-signals-proxy.d.ts +11 -5
  108. package/dist/model/model-value-proxy.d.ts +84 -3
  109. package/dist/model/safe-effect.d.ts +33 -1
  110. package/dist/model/types.d.ts +70 -17
  111. package/dist/model.js +21 -17
  112. package/dist/node-kind-C-r6ZMdo.js +15 -0
  113. package/dist/platforms/react/field-binding/field-adapter.d.ts +1 -1
  114. package/dist/platforms/react/field-binding/field-handle.d.ts +5 -2
  115. package/dist/platforms/react/form-bundle-context.d.ts +27 -0
  116. package/dist/platforms/react/hooks/types.d.ts +57 -38
  117. package/dist/platforms/react/hooks/use-form-bundle.d.ts +19 -4
  118. package/dist/platforms/react/hooks/use-form-flow.d.ts +40 -0
  119. package/dist/platforms/react/hooks/use-form-validation.d.ts +12 -6
  120. package/dist/platforms/react/hooks/useArrayLength.d.ts +6 -6
  121. package/dist/platforms/react/hooks/useFormControl.d.ts +7 -9
  122. package/dist/platforms/react/hooks/useFormControlValue.d.ts +18 -19
  123. package/dist/platforms/react/hooks/useSignalSubscription.d.ts +9 -1
  124. package/dist/platforms/react/i18n/context.d.ts +6 -1
  125. package/dist/platforms/react/i18n/hooks.d.ts +16 -10
  126. package/dist/platforms/react/i18n/provider.d.ts +9 -2
  127. package/dist/platforms/react/index.d.ts +7 -4
  128. package/dist/react.d.ts +22 -0
  129. package/dist/react.js +505 -0
  130. package/dist/runtime-token.d.ts +1 -2
  131. package/dist/safe-effect-BbtX3KuN.js +643 -0
  132. package/dist/schema-controller-CpiO2JoK.js +143 -0
  133. package/dist/signals.d.ts +15 -9
  134. package/dist/signals.js +11 -6
  135. package/dist/strategy-CoFSemuP.js +375 -0
  136. package/dist/type-guards-D-N_5Ddh.js +19 -0
  137. package/dist/validation-issue-B9mjI8jz.js +7 -0
  138. package/dist/validation-message-Ced9MGxs.js +194 -0
  139. package/dist/validation.js +9 -8
  140. package/dist/validators/email.js +5 -5
  141. package/dist/validators/future-date.js +8 -8
  142. package/dist/validators/integer.js +3 -3
  143. package/dist/validators/is-date.js +4 -4
  144. package/dist/validators/is-number.js +4 -4
  145. package/dist/validators/max-age.js +8 -9
  146. package/dist/validators/max-date.js +8 -8
  147. package/dist/validators/max-length.js +7 -7
  148. package/dist/validators/max.js +4 -4
  149. package/dist/validators/min-age.js +10 -8
  150. package/dist/validators/min-date.js +3 -3
  151. package/dist/validators/min-length.js +5 -5
  152. package/dist/validators/min.js +4 -4
  153. package/dist/validators/multiple-of.js +11 -7
  154. package/dist/validators/non-negative.js +3 -3
  155. package/dist/validators/non-zero.js +3 -3
  156. package/dist/validators/past-date.js +8 -8
  157. package/dist/validators/pattern.js +5 -5
  158. package/dist/validators/phone.js +11 -9
  159. package/dist/validators/required.js +2 -2
  160. package/dist/validators/url.js +48 -12
  161. package/dist/validators.js +17 -17
  162. package/docs/llms/01-api-reference.md +60 -34
  163. package/docs/llms/02-quick-start.md +111 -80
  164. package/docs/llms/03-api-signatures.md +368 -153
  165. package/docs/llms/04-common-patterns.md +58 -56
  166. package/docs/llms/05-common-mistakes.md +69 -44
  167. package/docs/llms/06-troubleshooting.md +14 -9
  168. package/docs/llms/07-complete-import.md +74 -43
  169. package/docs/llms/08-form-types.md +11 -4
  170. package/docs/llms/09-formschema.md +131 -83
  171. package/docs/llms/10-arrays.md +119 -69
  172. package/docs/llms/11-async-watchfield.md +2 -2
  173. package/docs/llms/13-multi-step.md +134 -63
  174. package/docs/llms/14-extended-mistakes.md +20 -17
  175. package/docs/llms/15-project-structure.md +221 -74
  176. package/docs/llms/16-ui-components.md +55 -42
  177. package/docs/llms/17-nonexistent-api.md +199 -32
  178. package/docs/llms/18-conditional-fields.md +66 -32
  179. package/docs/llms/19-reading-values.md +15 -3
  180. package/docs/llms/20-compute-vs-watch.md +16 -10
  181. package/docs/llms/21-array-operations.md +76 -26
  182. package/docs/llms/22-cycle-detection.md +1 -1
  183. package/docs/llms/23-copy-from.md +2 -2
  184. package/docs/llms/24-sync-fields.md +6 -5
  185. package/docs/llms/25-reset-when.md +14 -7
  186. package/docs/llms/26-transform-value.md +4 -4
  187. package/docs/llms/27-revalidate-when.md +16 -15
  188. package/docs/llms/28-submit-and-reset.md +276 -128
  189. package/docs/llms/29-async-preload.md +40 -30
  190. package/docs/llms/30-type-safety-recipes.md +105 -51
  191. package/docs/llms/31-async-validator-debounce.md +96 -53
  192. package/docs/llms/33-validation-strategy.md +178 -66
  193. package/docs/llms/34-i18n.md +69 -43
  194. package/docs/llms/35-unified-contract.md +307 -0
  195. package/docs/llms/36-issue-messages.md +284 -0
  196. package/docs/llms/37-compiled-schema.md +332 -0
  197. package/docs/llms/38-form-flow.md +397 -0
  198. package/llms-index.json +1 -1
  199. package/llms.txt +6968 -3278
  200. package/package.json +23 -4
  201. package/dist/behaviors-value-C7dSEhCc.js +0 -134
  202. package/dist/create-model-B8U-COv-.js +0 -103
  203. package/dist/date-utils-dTT_x_Be.js +0 -31
  204. package/dist/form/create-core-form.d.ts +0 -70
  205. package/dist/form/factories/index.d.ts +0 -6
  206. package/dist/form/factories/node-factory.d.ts +0 -189
  207. package/dist/form/form-submitter.d.ts +0 -121
  208. package/dist/form/nodes/array-node.d.ts +0 -276
  209. package/dist/form/nodes/field-node.d.ts +0 -297
  210. package/dist/form/nodes/form-node.d.ts +0 -326
  211. package/dist/form/nodes/group-node.d.ts +0 -284
  212. package/dist/form/nodes/model-array-node.d.ts +0 -121
  213. package/dist/form/nodes/subscription-manager.d.ts +0 -180
  214. package/dist/form/status-machine.d.ts +0 -115
  215. package/dist/form/types/deep-schema.d.ts +0 -107
  216. package/dist/form/types/form-proxy.d.ts +0 -141
  217. package/dist/form/unique-id.d.ts +0 -45
  218. package/dist/form/validation/config.d.ts +0 -73
  219. package/dist/form/validation/error-handler.d.ts +0 -166
  220. package/dist/form/validators/validation-error.d.ts +0 -8
  221. package/dist/index-BrNkQj1y.js +0 -105
  222. package/dist/loader-Dv_Hl7JC.js +0 -216
  223. package/dist/model-signals-proxy-2vqS243J.js +0 -250
  224. package/dist/node-DGEFMTQu.js +0 -18
  225. package/dist/strategy-BXS_gBfz.js +0 -170
  226. package/dist/validation-error-B-U3RsV0.js +0 -11
@@ -1,21 +1,22 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора, проверяющего что число — целое.
4
5
  *
5
6
  * Пустые значения и не-числа пропускаются (используйте {@link required} и {@link isNumber}).
6
7
  *
7
- * @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
8
- * @returns Чистый валидатор {@link Validator} для числового поля
8
+ * @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
9
+ * @returns Правило {@link Rule} для числового поля
9
10
  *
10
11
  * @example Проверка целого числа
11
12
  * ```typescript
12
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
13
+ * import { defineValidation, validate } from '@reformer/core/validation';
13
14
  * import { required, integer } from '@reformer/core/validators';
14
15
  *
15
16
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
16
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
17
- * validate(model.$.count, [required(), integer({ message: 'Должно быть целым числом' })]);
17
+ * const validation = defineValidation<MyForm>(({ model }) => {
18
+ * validate(model.$.count, [required(), integer({ code: 'count.integer' })]);
18
19
  * });
19
20
  * ```
20
21
  */
21
- export declare function integer<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
22
+ export declare function integer(options?: RuleOptions): Rule<number | null | undefined>;
@@ -1,22 +1,24 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора, проверяющего что значение — валидная дата.
4
5
  *
5
- * Принимает `Date` или строку, парсимую в дату. Пустые значения (`''`/`null`/`undefined`)
6
- * пропускаются (используйте {@link required} для обязательности).
6
+ * Строгий формат: `Date` либо строка `YYYY-MM-DD` с существующим днём календаря. Строки в иных
7
+ * форматах (`'31.12.2024'`, `'March 7'`, дата со временем) — `date_invalid`. Пустые значения
8
+ * (`''`/`null`/`undefined`) пропускаются (используйте {@link required} для обязательности).
7
9
  *
8
- * @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
9
- * @returns Чистый валидатор {@link Validator} для поля даты (`string | Date`)
10
+ * @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
11
+ * @returns Правило {@link Rule} для поля даты (`string | Date`)
10
12
  *
11
13
  * @example Проверка валидности даты
12
14
  * ```typescript
13
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
15
+ * import { defineValidation, validate } from '@reformer/core/validation';
14
16
  * import { required, isDate } from '@reformer/core/validators';
15
17
  *
16
18
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
17
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
18
- * validate(model.$.eventDate, [required(), isDate({ message: 'Введите корректную дату' })]);
19
+ * const validation = defineValidation<MyForm>(({ model }) => {
20
+ * validate(model.$.eventDate, [required(), isDate({ code: 'eventDate.isDate' })]);
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>;
24
+ export declare function isDate(options?: RuleOptions): Rule<string | Date | null | undefined>;
@@ -1,23 +1,25 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
- * Фабрика валидатора, проверяющего что значение — конечное число (не NaN, не строка).
4
+ * Фабрика валидатора, проверяющего что значение — конечное число (не `NaN`, не `±Infinity`,
5
+ * не строка).
4
6
  *
5
- * Пустые значения (`null`/`undefined`) пропускаются (используйте {@link required} для
7
+ * Пустые значения (`''`/`null`/`undefined`) пропускаются (используйте {@link required} для
6
8
  * обязательности). В отличие от других number-валидаторов, **не** пропускает не-числа
7
9
  * и `NaN` — это его задача.
8
10
  *
9
- * @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
10
- * @returns Чистый валидатор {@link Validator} для числового поля
11
+ * @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
12
+ * @returns Правило {@link Rule} для числового поля
11
13
  *
12
14
  * @example Проверка, что значение — число
13
15
  * ```typescript
14
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
+ * import { defineValidation, validate } from '@reformer/core/validation';
15
17
  * import { required, isNumber } from '@reformer/core/validators';
16
18
  *
17
19
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
18
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
19
- * validate(model.$.amount, [required(), isNumber({ message: 'Введите число' })]);
20
+ * const validation = defineValidation<MyForm>(({ model }) => {
21
+ * validate(model.$.amount, [required(), isNumber({ code: 'amount.isNumber' })]);
20
22
  * });
21
23
  * ```
22
24
  */
23
- export declare function isNumber<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
25
+ export declare function isNumber(options?: RuleOptions): Rule<number | null | undefined>;
@@ -1,24 +1,28 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора максимального возраста (по дате рождения).
4
5
  *
5
- * Возраст вычисляется по дате рождения относительно сегодняшнего дня. Пустые и невалидные
6
- * даты пропускаются (используйте {@link required} и {@link isDate}).
6
+ * Возраст вычисляется по дате рождения относительно сегодняшнего дня; родившийся 29 февраля в
7
+ * невисокосный год взрослеет 28 февраля. Дату рождения в будущем правило не оценивает — её
8
+ * отклоняет {@link minAge} (или {@link pastDate}); иначе пара правил на поле дала бы два
9
+ * одинаковых замечания. Пустые и невалидные даты пропускаются (используйте {@link required} и
10
+ * {@link isDate}).
7
11
  *
8
12
  * @param maxAgeValue - Максимально допустимый возраст (в полных годах)
9
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
13
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
10
14
  * попадают `maxAge` и `currentAge`.
11
- * @returns Чистый валидатор {@link Validator} для поля даты рождения (`string | Date`)
15
+ * @returns Правило {@link Rule} для поля даты рождения (`string | Date`)
12
16
  *
13
17
  * @example Максимальный возраст
14
18
  * ```typescript
15
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
19
+ * import { defineValidation, validate } from '@reformer/core/validation';
16
20
  * import { maxAge } from '@reformer/core/validators';
17
21
  *
18
22
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
- * validate(model.$.birthDate, [maxAge(100, { message: 'Проверьте дату рождения' })]);
23
+ * const validation = defineValidation<MyForm>(({ model }) => {
24
+ * validate(model.$.birthDate, [maxAge(100, { code: 'birthDate.maxAge' })]);
21
25
  * });
22
26
  * ```
23
27
  */
24
- export declare function maxAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
28
+ export declare function maxAge(maxAgeValue: number, options?: RuleOptions): Rule<string | Date | null | undefined>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора максимальной даты (включительно).
4
5
  *
@@ -6,19 +7,19 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
6
7
  * пропускаются (используйте {@link required} и {@link isDate}).
7
8
  *
8
9
  * @param maxDateValue - Максимально допустимая дата (включительно)
9
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
10
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
10
11
  * попадает `maxDate`.
11
- * @returns Чистый валидатор {@link Validator} для поля даты (`string | Date`)
12
+ * @returns Правило {@link Rule} для поля даты (`string | Date`)
12
13
  *
13
14
  * @example Максимальная дата
14
15
  * ```typescript
15
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
+ * import { defineValidation, validate } from '@reformer/core/validation';
16
17
  * import { maxDate } from '@reformer/core/validators';
17
18
  *
18
19
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
- * validate(model.$.birthDate, [maxDate(new Date(), { message: 'Дата не может быть в будущем' })]);
20
+ * const validation = defineValidation<MyForm>(({ model }) => {
21
+ * validate(model.$.birthDate, [maxDate(new Date(), { code: 'birthDate.maxDate' })]);
21
22
  * });
22
23
  * ```
23
24
  */
24
- export declare function maxDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
25
+ export declare function maxDate(maxDateValue: Date, options?: RuleOptions): Rule<string | Date | null | undefined>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора максимального размера файла.
4
5
  *
@@ -9,19 +10,19 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
9
10
  * (используйте {@link required} для обязательности).
10
11
  *
11
12
  * @param maxSize - Максимально допустимый размер файла в байтах (включительно)
12
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
13
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
13
14
  * попадают `maxFileSize`, `fileName` и `actualSize`.
14
- * @returns Чистый валидатор {@link Validator} для файла или массива файлов
15
+ * @returns Правило {@link Rule} для файла или массива файлов
15
16
  *
16
17
  * @example Ограничение размера вложений
17
18
  * ```typescript
18
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
19
+ * import { defineValidation, validate } from '@reformer/core/validation';
19
20
  * import { maxFileSize } from '@reformer/core/validators';
20
21
  *
21
22
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
22
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
23
- * validate(model.$.documents, [maxFileSize(5 * 1024 * 1024, { message: 'Файл больше 5 МБ' })]);
23
+ * const validation = defineValidation<MyForm>(({ model }) => {
24
+ * validate(model.$.documents, [maxFileSize(5 * 1024 * 1024, { code: 'documents.maxFileSize' })]);
24
25
  * });
25
26
  * ```
26
27
  */
27
- export declare function maxFileSize<TForm = unknown, TField = unknown>(maxSize: number, options?: ValidateOptions): Validator<TForm, TField>;
28
+ export declare function maxFileSize(maxSize: number, options?: RuleOptions): Rule<unknown>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора максимального количества файлов.
4
5
  *
@@ -7,19 +8,19 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
7
8
  * для обязательности).
8
9
  *
9
10
  * @param max - Максимально допустимое количество файлов (включительно)
10
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
11
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
11
12
  * попадают `maxFiles` и `actualCount`.
12
- * @returns Чистый валидатор {@link Validator} для файла или массива файлов
13
+ * @returns Правило {@link Rule} для файла или массива файлов
13
14
  *
14
15
  * @example Не более трёх вложений
15
16
  * ```typescript
16
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
17
+ * import { defineValidation, validate } from '@reformer/core/validation';
17
18
  * import { maxFiles } from '@reformer/core/validators';
18
19
  *
19
20
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
- * validate(model.$.documents, [maxFiles(3, { message: 'Максимум 3 файла' })]);
21
+ * const validation = defineValidation<MyForm>(({ model }) => {
22
+ * validate(model.$.documents, [maxFiles(3, { code: 'documents.maxFiles' })]);
22
23
  * });
23
24
  * ```
24
25
  */
25
- export declare function maxFiles<TForm = unknown, TField = unknown>(max: number, options?: ValidateOptions): Validator<TForm, TField>;
26
+ export declare function maxFiles(max: number, options?: RuleOptions): Rule<unknown>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора максимальной длины строки или массива.
4
5
  *
@@ -6,21 +7,27 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
6
7
  * (`null`/`undefined`/`''`) и значения без числового `length` пропускаются
7
8
  * (используйте {@link required} для обязательности).
8
9
  *
10
+ * Длина строки — в единицах UTF-16, как `String.length` и атрибут `maxlength` браузера: эмодзи и
11
+ * другие символы вне BMP считаются за 2, графемы не склеиваются.
12
+ *
13
+ * У строки замечание — `maxLength` (символы), у массива — `maxItems` (элементы): мультивыбор и
14
+ * список считают выбранное, и текст «не больше 3 символов» под ними был бы бессмыслицей.
15
+ *
9
16
  * @param maxLen - Максимально допустимая длина (включительно)
10
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
17
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
11
18
  * попадают `maxLength` и `actualLength`.
12
- * @returns Чистый валидатор {@link Validator} для строки или массива
19
+ * @returns Правило {@link Rule} для строки или массива
13
20
  *
14
21
  * @example Максимальная длина строки
15
22
  * ```typescript
16
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
23
+ * import { defineValidation, validate } from '@reformer/core/validation';
17
24
  * import { maxLength } from '@reformer/core/validators';
18
25
  *
19
26
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
27
+ * const validation = defineValidation<MyForm>(({ model }) => {
21
28
  * validate(model.$.name, [maxLength(50)]);
22
- * validate(model.$.bio, [maxLength(500, { message: 'Максимум 500 символов' })]);
29
+ * validate(model.$.bio, [maxLength(500, { code: 'bio.maxLength' })]);
23
30
  * });
24
31
  * ```
25
32
  */
26
- export declare function maxLength<TForm = unknown, TField = unknown>(maxLen: number, options?: ValidateOptions): Validator<TForm, TField>;
33
+ export declare function maxLength(maxLen: number, options?: RuleOptions): Rule<unknown>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора суммарного размера всех файлов.
4
5
  *
@@ -7,19 +8,19 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
7
8
  * (используйте {@link required} для обязательности).
8
9
  *
9
10
  * @param maxTotal - Максимально допустимый суммарный размер в байтах (включительно)
10
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
11
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
11
12
  * попадают `maxTotalFileSize` и `actualTotal`.
12
- * @returns Чистый валидатор {@link Validator} для файла или массива файлов
13
+ * @returns Правило {@link Rule} для файла или массива файлов
13
14
  *
14
15
  * @example Суммарно не более 20 МБ
15
16
  * ```typescript
16
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
17
+ * import { defineValidation, validate } from '@reformer/core/validation';
17
18
  * import { maxTotalFileSize } from '@reformer/core/validators';
18
19
  *
19
20
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
- * validate(model.$.documents, [maxTotalFileSize(20 * 1024 * 1024, { message: 'Суммарно не более 20 МБ' })]);
21
+ * const validation = defineValidation<MyForm>(({ model }) => {
22
+ * validate(model.$.documents, [maxTotalFileSize(20 * 1024 * 1024, { code: 'documents.maxTotalFileSize' })]);
22
23
  * });
23
24
  * ```
24
25
  */
25
- export declare function maxTotalFileSize<TForm = unknown, TField = unknown>(maxTotal: number, options?: ValidateOptions): Validator<TForm, TField>;
26
+ export declare function maxTotalFileSize(maxTotal: number, options?: RuleOptions): Rule<unknown>;
@@ -1,24 +1,26 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора максимального числового значения.
4
5
  *
5
- * Пустые значения (`null`/`undefined`) пропускаются (используйте {@link required} для обязательности).
6
+ * Пустые значения и не-числа (`''`, строка из цифр, `NaN`) пропускаются — используйте
7
+ * {@link required} и {@link isNumber}.
6
8
  *
7
9
  * @param maxValue - Максимально допустимое значение (включительно)
8
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
10
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
9
11
  * попадают `max` и `actual`.
10
- * @returns Чистый валидатор {@link Validator} для числового поля
12
+ * @returns Правило {@link Rule} для числового поля
11
13
  *
12
14
  * @example Максимальное значение числового поля
13
15
  * ```typescript
14
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
+ * import { defineValidation, validate } from '@reformer/core/validation';
15
17
  * import { required, max } from '@reformer/core/validators';
16
18
  *
17
19
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
18
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
+ * const validation = defineValidation<MyForm>(({ model }) => {
19
21
  * validate(model.$.quantity, [max(100)]);
20
- * validate(model.$.discount, [required(), max(50, { message: 'Не более 50%' })]);
22
+ * validate(model.$.discount, [required(), max(50, { code: 'discount.max' })]);
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>;
26
+ export declare function max(maxValue: number, options?: RuleOptions): Rule<number | null | undefined>;
@@ -1,24 +1,27 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора минимального возраста (по дате рождения).
4
5
  *
5
- * Возраст вычисляется по дате рождения относительно сегодняшнего дня. Пустые и невалидные
6
- * даты пропускаются (используйте {@link required} и {@link isDate}).
6
+ * Возраст вычисляется по дате рождения относительно сегодняшнего дня; родившийся 29 февраля в
7
+ * невисокосный год взрослеет 28 февраля. Дата рождения в будущем — замечание `date_future` с
8
+ * `params.minAge` (свой `code` из опций его заменяет), а не возраст −1. Пустые и невалидные даты пропускаются
9
+ * (используйте {@link required} и {@link isDate}).
7
10
  *
8
11
  * @param minAgeValue - Минимально допустимый возраст (в полных годах)
9
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
12
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
10
13
  * попадают `minAge` и `currentAge`.
11
- * @returns Чистый валидатор {@link Validator} для поля даты рождения (`string | Date`)
14
+ * @returns Правило {@link Rule} для поля даты рождения (`string | Date`)
12
15
  *
13
16
  * @example Минимальный возраст
14
17
  * ```typescript
15
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
18
+ * import { defineValidation, validate } from '@reformer/core/validation';
16
19
  * import { required, minAge } from '@reformer/core/validators';
17
20
  *
18
21
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
- * validate(model.$.birthDate, [required(), minAge(18, { message: 'Вам должно быть не менее 18 лет' })]);
22
+ * const validation = defineValidation<MyForm>(({ model }) => {
23
+ * validate(model.$.birthDate, [required(), minAge(18, { code: 'birthDate.minAge' })]);
21
24
  * });
22
25
  * ```
23
26
  */
24
- export declare function minAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
27
+ export declare function minAge(minAgeValue: number, options?: RuleOptions): Rule<string | Date | null | undefined>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора минимальной даты (включительно).
4
5
  *
@@ -6,19 +7,19 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
6
7
  * пропускаются (используйте {@link required} и {@link isDate}).
7
8
  *
8
9
  * @param minDateValue - Минимально допустимая дата (включительно)
9
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
10
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
10
11
  * попадает `minDate`.
11
- * @returns Чистый валидатор {@link Validator} для поля даты (`string | Date`)
12
+ * @returns Правило {@link Rule} для поля даты (`string | Date`)
12
13
  *
13
14
  * @example Минимальная дата
14
15
  * ```typescript
15
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
+ * import { defineValidation, validate } from '@reformer/core/validation';
16
17
  * import { required, minDate } from '@reformer/core/validators';
17
18
  *
18
19
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
19
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
- * validate(model.$.startDate, [required(), minDate(new Date(), { message: 'Дата не раньше сегодня' })]);
20
+ * const validation = defineValidation<MyForm>(({ model }) => {
21
+ * validate(model.$.startDate, [required(), minDate(new Date(), { code: 'startDate.minDate' })]);
21
22
  * });
22
23
  * ```
23
24
  */
24
- export declare function minDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
25
+ export declare function minDate(minDateValue: Date, options?: RuleOptions): Rule<string | Date | null | undefined>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора минимального размера файла.
4
5
  *
@@ -9,19 +10,19 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
9
10
  * пропускаются (используйте {@link required} для обязательности).
10
11
  *
11
12
  * @param minSize - Минимально допустимый размер файла в байтах (включительно)
12
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
13
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
13
14
  * попадают `minFileSize`, `fileName` и `actualSize`.
14
- * @returns Чистый валидатор {@link Validator} для файла или массива файлов
15
+ * @returns Правило {@link Rule} для файла или массива файлов
15
16
  *
16
17
  * @example Отсев пустых файлов
17
18
  * ```typescript
18
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
19
+ * import { defineValidation, validate } from '@reformer/core/validation';
19
20
  * import { minFileSize } from '@reformer/core/validators';
20
21
  *
21
22
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
22
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
23
- * validate(model.$.documents, [minFileSize(1, { message: 'Файл пустой' })]);
23
+ * const validation = defineValidation<MyForm>(({ model }) => {
24
+ * validate(model.$.documents, [minFileSize(1, { code: 'documents.minFileSize' })]);
24
25
  * });
25
26
  * ```
26
27
  */
27
- export declare function minFileSize<TForm = unknown, TField = unknown>(minSize: number, options?: ValidateOptions): Validator<TForm, TField>;
28
+ export declare function minFileSize(minSize: number, options?: RuleOptions): Rule<unknown>;
@@ -1,25 +1,27 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора минимального количества файлов.
4
5
  *
5
6
  * Работает с массивом файлов (одиночный файл считается как 1). Пустые значения
6
- * (`null`/`undefined`/`''`/`[]`) пропускаются — «нужен хотя бы один файл» выражается
7
- * связкой `required()` + `minFiles(n)`, как и у {@link minLength}.
7
+ * (`null`/`undefined`/`''`) пропускаются (используйте {@link required}), а пустой массив — как
8
+ * у {@link minLength} — проверяется: при `min > 0` это замечание с `actualCount: 0`. Элементы
9
+ * массива, которые не файлы, не считаются.
8
10
  *
9
11
  * @param min - Минимально допустимое количество файлов (включительно)
10
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
12
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
11
13
  * попадают `minFiles` и `actualCount`.
12
- * @returns Чистый валидатор {@link Validator} для файла или массива файлов
14
+ * @returns Правило {@link Rule} для файла или массива файлов
13
15
  *
14
16
  * @example Не менее двух документов
15
17
  * ```typescript
16
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
18
+ * import { defineValidation, validate } from '@reformer/core/validation';
17
19
  * import { required, minFiles } from '@reformer/core/validators';
18
20
  *
19
21
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
21
- * validate(model.$.documents, [required(), minFiles(2, { message: 'Приложите минимум 2 документа' })]);
22
+ * const validation = defineValidation<MyForm>(({ model }) => {
23
+ * validate(model.$.documents, [required(), minFiles(2, { code: 'documents.minFiles' })]);
22
24
  * });
23
25
  * ```
24
26
  */
25
- export declare function minFiles<TForm = unknown, TField = unknown>(min: number, options?: ValidateOptions): Validator<TForm, TField>;
27
+ export declare function minFiles(min: number, options?: RuleOptions): Rule<unknown>;
@@ -1,4 +1,5 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора минимальной длины строки или массива.
4
5
  *
@@ -6,21 +7,27 @@ import { Validator, ValidateOptions } from '../types/validation-schema';
6
7
  * (`null`/`undefined`/`''`) и значения без числового `length` пропускаются
7
8
  * (используйте {@link required} для обязательности).
8
9
  *
10
+ * Длина строки — в единицах UTF-16, как `String.length` и атрибут `minlength` браузера: эмодзи и
11
+ * другие символы вне BMP считаются за 2, графемы не склеиваются.
12
+ *
13
+ * У строки замечание — `minLength` (символы), у массива — `minItems` (элементы): мультивыбор и
14
+ * список считают выбранное, и текст «не меньше 3 символов» под ними был бы бессмыслицей.
15
+ *
9
16
  * @param minLen - Минимально допустимая длина (включительно)
10
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
17
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
11
18
  * попадают `minLength` и `actualLength`.
12
- * @returns Чистый валидатор {@link Validator} для строки или массива
19
+ * @returns Правило {@link Rule} для строки или массива
13
20
  *
14
21
  * @example Минимальная длина строки
15
22
  * ```typescript
16
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
23
+ * import { defineValidation, validate } from '@reformer/core/validation';
17
24
  * import { required, minLength } from '@reformer/core/validators';
18
25
  *
19
26
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
20
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
27
+ * const validation = defineValidation<MyForm>(({ model }) => {
21
28
  * validate(model.$.name, [minLength(2)]);
22
- * validate(model.$.password, [required(), minLength(8, { message: 'Минимум 8 символов' })]);
29
+ * validate(model.$.password, [required(), minLength(8, { code: 'password.minLength' })]);
23
30
  * });
24
31
  * ```
25
32
  */
26
- export declare function minLength<TForm = unknown, TField = unknown>(minLen: number, options?: ValidateOptions): Validator<TForm, TField>;
33
+ export declare function minLength(minLen: number, options?: RuleOptions): Rule<unknown>;
@@ -1,24 +1,26 @@
1
- import { Validator, ValidateOptions } from '../types/validation-schema';
1
+ import { RuleOptions } from '../types/validation-schema';
2
+ import { Rule } from '../validation/types';
2
3
  /**
3
4
  * Фабрика валидатора минимального числового значения.
4
5
  *
5
- * Пустые значения (`null`/`undefined`) пропускаются (используйте {@link required} для обязательности).
6
+ * Пустые значения и не-числа (`''`, строка из цифр, `NaN`) пропускаются — используйте
7
+ * {@link required} и {@link isNumber}.
6
8
  *
7
9
  * @param minValue - Минимально допустимое значение (включительно)
8
- * @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
10
+ * @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
9
11
  * попадают `min` и `actual`.
10
- * @returns Чистый валидатор {@link Validator} для числового поля
12
+ * @returns Правило {@link Rule} для числового поля
11
13
  *
12
14
  * @example Минимальное значение числового поля
13
15
  * ```typescript
14
- * import { defineValidationSchema, validate } from '@reformer/core/validation';
16
+ * import { defineValidation, validate } from '@reformer/core/validation';
15
17
  * import { required, min } from '@reformer/core/validators';
16
18
  *
17
19
  * // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
18
- * const validation = defineValidationSchema<MyForm>(({ model }) => {
20
+ * const validation = defineValidation<MyForm>(({ model }) => {
19
21
  * validate(model.$.age, [min(18)]);
20
- * validate(model.$.quantity, [required(), min(1, { message: 'Минимум 1' })]);
22
+ * validate(model.$.quantity, [required(), min(1, { code: 'quantity.min' })]);
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>;
26
+ export declare function min(minValue: number, options?: RuleOptions): Rule<number | null | undefined>;