@reformer/core 10.2.0 → 11.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -68
- package/dist/behaviors-value-D05z3my6.js +109 -0
- package/dist/behaviors.d.ts +1 -1
- package/dist/behaviors.js +376 -211
- package/dist/create-model-DPSG3I0O.js +30 -0
- package/dist/date-utils-90-qZbse.js +43 -0
- package/dist/en-HP8XEych.js +44 -0
- package/dist/form/aggregate-signals.d.ts +21 -63
- package/dist/form/behaviors/collections.d.ts +84 -0
- package/dist/form/behaviors/context.d.ts +56 -0
- package/dist/form/behaviors/index.d.ts +30 -0
- package/dist/form/behaviors/internals.d.ts +41 -0
- package/dist/form/{behaviors-node.d.ts → behaviors/node.d.ts} +28 -5
- package/dist/form/behaviors/operators.d.ts +59 -0
- package/dist/form/behaviors/schema-operators.d.ts +83 -0
- package/dist/form/behaviors/types.d.ts +37 -0
- package/dist/form/create-form.d.ts +59 -70
- package/dist/form/flow/flow.d.ts +87 -0
- package/dist/form/form-bundle.d.ts +153 -0
- package/dist/form/form-level.d.ts +121 -0
- package/dist/form/form-proxy-builder.d.ts +6 -22
- package/dist/form/index.d.ts +23 -27
- package/dist/form/nodes/form-array-node.d.ts +100 -0
- package/dist/form/nodes/form-control-node.d.ts +73 -0
- package/dist/form/nodes/form-group-node.d.ts +66 -0
- package/dist/form/nodes/node-kind.d.ts +29 -0
- package/dist/form/nodes/state/availability.d.ts +6 -0
- package/dist/form/nodes/state/component.d.ts +6 -0
- package/dist/form/nodes/state/index.d.ts +12 -0
- package/dist/form/nodes/state/interaction.d.ts +13 -0
- package/dist/form/nodes/state/issues.d.ts +9 -0
- package/dist/form/nodes/state/pending.d.ts +6 -0
- package/dist/form/schema/compile.d.ts +59 -0
- package/dist/form/schema/compiled.d.ts +143 -0
- package/dist/form/schema/row-key.d.ts +11 -0
- package/dist/form/schema-controller.d.ts +159 -0
- package/dist/form/schema-subtree.d.ts +28 -0
- package/dist/form/signal-node-registry.d.ts +27 -22
- package/dist/form/submission.d.ts +93 -0
- package/dist/form/type-guards.d.ts +14 -73
- package/dist/form/types/contracts.d.ts +21 -91
- package/dist/form/types/field-config.d.ts +27 -0
- package/dist/form/types/index.d.ts +5 -91
- package/dist/form/types/nodes.d.ts +159 -0
- package/dist/form/types/schema-node.d.ts +148 -50
- package/dist/form/types/validation-schema.d.ts +24 -41
- package/dist/form/validation/context.d.ts +67 -0
- package/dist/form/validation/index.d.ts +24 -28
- package/dist/form/validation/operators.d.ts +101 -0
- package/dist/form/validation/run.d.ts +120 -0
- package/dist/form/validation/strategy.d.ts +89 -0
- package/dist/form/validation/types.d.ts +83 -0
- package/dist/form/validators/date-utils.d.ts +42 -0
- package/dist/form/validators/email.d.ts +23 -0
- package/dist/form/{validation/validators → validators}/file-type.d.ts +10 -10
- package/dist/form/{validation/validators → validators}/file-utils.d.ts +3 -2
- package/dist/form/validators/future-date.d.ts +23 -0
- package/dist/form/{validation/validators → validators}/index.d.ts +7 -4
- package/dist/form/validators/integer.d.ts +22 -0
- package/dist/form/validators/is-date.d.ts +24 -0
- package/dist/form/validators/is-number.d.ts +25 -0
- package/dist/form/validators/max-age.d.ts +28 -0
- package/dist/form/validators/max-date.d.ts +25 -0
- package/dist/form/{validation/validators → validators}/max-file-size.d.ts +10 -10
- package/dist/form/validators/max-files.d.ts +26 -0
- package/dist/form/validators/max-length.d.ts +33 -0
- package/dist/form/validators/max-total-file-size.d.ts +26 -0
- package/dist/form/validators/max.d.ts +26 -0
- package/dist/form/validators/min-age.d.ts +27 -0
- package/dist/form/validators/min-date.d.ts +25 -0
- package/dist/form/{validation/validators → validators}/min-file-size.d.ts +10 -10
- package/dist/form/validators/min-files.d.ts +27 -0
- package/dist/form/validators/min-length.d.ts +33 -0
- package/dist/form/validators/min.d.ts +26 -0
- package/dist/form/validators/multiple-of.d.ts +25 -0
- package/dist/form/validators/non-negative.d.ts +22 -0
- package/dist/form/validators/non-zero.d.ts +22 -0
- package/dist/form/validators/past-date.d.ts +23 -0
- package/dist/form/validators/pattern.d.ts +26 -0
- package/dist/form/{validation/validators → validators}/phone.d.ts +11 -11
- package/dist/form/validators/required.d.ts +29 -0
- package/dist/form/validators/url.d.ts +45 -0
- package/dist/form/validators/validation-issue.d.ts +8 -0
- package/dist/i18n/descriptor.d.ts +54 -0
- package/dist/i18n/en.json.d.ts +49 -0
- package/dist/i18n/loader.d.ts +71 -0
- package/dist/i18n/locale-store.d.ts +46 -0
- package/dist/i18n/locale.d.ts +90 -0
- package/dist/i18n/message-format.d.ts +136 -0
- package/dist/i18n/resolve-localized.d.ts +17 -0
- package/dist/i18n/ru.json.d.ts +49 -0
- package/dist/i18n/translator.d.ts +61 -0
- package/dist/i18n/validation-message.d.ts +53 -0
- package/dist/i18n.d.ts +26 -0
- package/dist/i18n.js +86 -0
- package/dist/index.d.ts +18 -6
- package/dist/index.js +932 -2779
- package/dist/loader-BWkigpVe.js +52 -0
- package/dist/locale/en.d.ts +2 -0
- package/dist/locale/en.js +5 -0
- package/dist/locale/en.json +45 -0
- package/dist/locale/index.d.ts +18 -0
- package/dist/locale/ru.d.ts +2 -0
- package/dist/locale/ru.js +44 -0
- package/dist/locale/ru.json +45 -0
- package/dist/locale-CG54AU2Q.js +219 -0
- package/dist/locale.d.ts +2 -0
- package/dist/locale.js +9 -0
- package/dist/{state → model}/behaviors-value.d.ts +24 -6
- package/dist/{state/form-model.d.ts → model/create-model.d.ts} +18 -4
- package/dist/{state → model}/derived-registry.d.ts +1 -1
- package/dist/model/index.d.ts +42 -0
- package/dist/model/model-nodes.d.ts +190 -0
- package/dist/model/model-signals-proxy.d.ts +63 -0
- package/dist/model/model-value-proxy.d.ts +84 -0
- package/dist/{state → model}/safe-effect.d.ts +50 -2
- package/dist/model/types.d.ts +239 -0
- package/dist/model.d.ts +2 -0
- package/dist/model.js +27 -0
- package/dist/node-kind-C-r6ZMdo.js +15 -0
- package/dist/platforms/react/field-binding/field-adapter.d.ts +87 -0
- package/dist/platforms/react/field-binding/field-handle.d.ts +53 -0
- package/dist/platforms/react/form-bundle-context.d.ts +27 -0
- package/dist/{form → platforms/react}/hooks/types.d.ts +60 -38
- package/dist/platforms/react/hooks/use-form-bundle.d.ts +41 -0
- package/dist/platforms/react/hooks/use-form-flow.d.ts +40 -0
- package/dist/{form → platforms/react}/hooks/use-form-validation.d.ts +13 -7
- package/dist/{form → platforms/react}/hooks/useArrayLength.d.ts +6 -6
- package/dist/{form → platforms/react}/hooks/useFormControl.d.ts +7 -9
- package/dist/{form → platforms/react}/hooks/useFormControlValue.d.ts +18 -18
- package/dist/{form → platforms/react}/hooks/useSignalSubscription.d.ts +9 -1
- package/dist/platforms/react/i18n/context.d.ts +18 -0
- package/dist/platforms/react/i18n/hooks.d.ts +65 -0
- package/dist/platforms/react/i18n/provider.d.ts +59 -0
- package/dist/platforms/react/index.d.ts +30 -0
- package/dist/react.d.ts +22 -0
- package/dist/react.js +505 -0
- package/dist/runtime-token.d.ts +22 -0
- package/dist/safe-effect-BazLOv1g.js +669 -0
- package/dist/schema-controller-CpiO2JoK.js +143 -0
- package/dist/signals.d.ts +15 -9
- package/dist/signals.js +11 -6
- package/dist/strategy-DzvnsWLh.js +375 -0
- package/dist/type-guards-D-N_5Ddh.js +19 -0
- package/dist/validation-issue-B9mjI8jz.js +7 -0
- package/dist/validation-message-Ced9MGxs.js +194 -0
- package/dist/validation.d.ts +1 -1
- package/dist/validation.js +11 -165
- package/dist/validators/email.d.ts +1 -1
- package/dist/validators/email.js +5 -8
- package/dist/validators/future-date.d.ts +1 -1
- package/dist/validators/future-date.js +10 -13
- package/dist/validators/integer.d.ts +1 -1
- package/dist/validators/integer.js +4 -7
- package/dist/validators/is-date.d.ts +1 -1
- package/dist/validators/is-date.js +5 -8
- package/dist/validators/is-number.d.ts +1 -1
- package/dist/validators/is-number.js +4 -7
- package/dist/validators/max-age.d.ts +1 -1
- package/dist/validators/max-age.js +8 -12
- package/dist/validators/max-date.d.ts +1 -1
- package/dist/validators/max-date.js +10 -13
- package/dist/validators/max-length.d.ts +1 -1
- package/dist/validators/max-length.js +7 -10
- package/dist/validators/max.d.ts +1 -1
- package/dist/validators/max.js +4 -7
- package/dist/validators/min-age.d.ts +1 -1
- package/dist/validators/min-age.js +10 -11
- package/dist/validators/min-date.d.ts +1 -1
- package/dist/validators/min-date.js +8 -11
- package/dist/validators/min-length.d.ts +1 -1
- package/dist/validators/min-length.js +4 -7
- package/dist/validators/min.d.ts +1 -1
- package/dist/validators/min.js +4 -7
- package/dist/validators/multiple-of.d.ts +1 -1
- package/dist/validators/multiple-of.js +11 -10
- package/dist/validators/non-negative.d.ts +1 -1
- package/dist/validators/non-negative.js +2 -5
- package/dist/validators/non-zero.d.ts +1 -1
- package/dist/validators/non-zero.js +4 -7
- package/dist/validators/past-date.d.ts +1 -1
- package/dist/validators/past-date.js +10 -13
- package/dist/validators/pattern.d.ts +1 -1
- package/dist/validators/pattern.js +5 -8
- package/dist/validators/phone.d.ts +1 -1
- package/dist/validators/phone.js +10 -11
- package/dist/validators/required.d.ts +1 -1
- package/dist/validators/required.js +4 -7
- package/dist/validators/url.d.ts +1 -1
- package/dist/validators/url.js +48 -17
- package/dist/validators.d.ts +1 -5
- package/dist/validators.js +98 -154
- package/docs/llms/01-api-reference.md +89 -0
- package/docs/llms/02-quick-start.md +181 -0
- package/docs/llms/03-api-signatures.md +494 -0
- package/docs/llms/04-common-patterns.md +204 -0
- package/docs/llms/05-common-mistakes.md +192 -0
- package/docs/llms/06-troubleshooting.md +16 -0
- package/docs/llms/07-complete-import.md +130 -0
- package/docs/llms/08-form-types.md +54 -0
- package/docs/llms/09-formschema.md +191 -0
- package/docs/llms/10-arrays.md +241 -0
- package/docs/llms/11-async-watchfield.md +53 -0
- package/docs/llms/12-array-cleanup.md +31 -0
- package/docs/llms/13-multi-step.md +162 -0
- package/docs/llms/14-extended-mistakes.md +101 -0
- package/docs/llms/15-project-structure.md +279 -0
- package/docs/llms/16-ui-components.md +229 -0
- package/docs/llms/17-nonexistent-api.md +278 -0
- package/docs/llms/18-conditional-fields.md +222 -0
- package/docs/llms/19-reading-values.md +100 -0
- package/docs/llms/20-compute-vs-watch.md +153 -0
- package/docs/llms/21-array-operations.md +163 -0
- package/docs/llms/22-cycle-detection.md +86 -0
- package/docs/llms/23-copy-from.md +141 -0
- package/docs/llms/24-sync-fields.md +115 -0
- package/docs/llms/25-reset-when.md +122 -0
- package/docs/llms/26-transform-value.md +136 -0
- package/docs/llms/27-revalidate-when.md +133 -0
- package/docs/llms/28-submit-and-reset.md +409 -0
- package/docs/llms/29-async-preload.md +203 -0
- package/docs/llms/30-type-safety-recipes.md +213 -0
- package/docs/llms/31-async-validator-debounce.md +178 -0
- package/docs/llms/32-async-options-loading.md +108 -0
- package/docs/llms/33-validation-strategy.md +305 -0
- package/docs/llms/34-i18n.md +298 -0
- package/docs/llms/35-unified-contract.md +309 -0
- package/docs/llms/36-issue-messages.md +284 -0
- package/docs/llms/37-compiled-schema.md +332 -0
- package/docs/llms/38-form-flow.md +396 -0
- package/llms-index.json +1 -0
- package/llms.txt +10014 -3826
- package/package.json +77 -15
- package/dist/behaviors-node-DGEFMTQu.js +0 -18
- package/dist/behaviors-value-C7dSEhCc.js +0 -134
- package/dist/date-utils-dTT_x_Be.js +0 -31
- package/dist/derived-registry-CluZCQ7U.js +0 -16
- package/dist/form/behaviors.d.ts +0 -133
- package/dist/form/error-handler.d.ts +0 -166
- package/dist/form/factories/index.d.ts +0 -6
- package/dist/form/factories/node-factory.d.ts +0 -188
- package/dist/form/form-submitter.d.ts +0 -125
- package/dist/form/nodes/array-node.d.ts +0 -360
- package/dist/form/nodes/field-node.d.ts +0 -294
- package/dist/form/nodes/form-node.d.ts +0 -340
- package/dist/form/nodes/group-node.d.ts +0 -288
- package/dist/form/nodes/model-array-node.d.ts +0 -121
- package/dist/form/status-machine.d.ts +0 -153
- package/dist/form/types/deep-schema.d.ts +0 -116
- package/dist/form/types/form-proxy.d.ts +0 -141
- package/dist/form/unique-id.d.ts +0 -53
- package/dist/form/validation/validators/date-utils.d.ts +0 -30
- package/dist/form/validation/validators/email.d.ts +0 -23
- package/dist/form/validation/validators/future-date.d.ts +0 -23
- package/dist/form/validation/validators/integer.d.ts +0 -22
- package/dist/form/validation/validators/is-date.d.ts +0 -23
- package/dist/form/validation/validators/is-number.d.ts +0 -24
- package/dist/form/validation/validators/max-age.d.ts +0 -25
- package/dist/form/validation/validators/max-date.d.ts +0 -25
- package/dist/form/validation/validators/max-files.d.ts +0 -26
- package/dist/form/validation/validators/max-length.d.ts +0 -27
- package/dist/form/validation/validators/max-total-file-size.d.ts +0 -26
- package/dist/form/validation/validators/max.d.ts +0 -25
- package/dist/form/validation/validators/min-age.d.ts +0 -25
- package/dist/form/validation/validators/min-date.d.ts +0 -25
- package/dist/form/validation/validators/min-files.d.ts +0 -26
- package/dist/form/validation/validators/min-length.d.ts +0 -27
- package/dist/form/validation/validators/min.d.ts +0 -25
- package/dist/form/validation/validators/multiple-of.d.ts +0 -24
- package/dist/form/validation/validators/non-negative.d.ts +0 -22
- package/dist/form/validation/validators/non-zero.d.ts +0 -22
- package/dist/form/validation/validators/past-date.d.ts +0 -23
- package/dist/form/validation/validators/pattern.d.ts +0 -33
- package/dist/form/validation/validators/required.d.ts +0 -32
- package/dist/form/validation/validators/url.d.ts +0 -43
- package/dist/form/validation-schema.d.ts +0 -106
- package/dist/form/validation-strategy.d.ts +0 -55
- package/dist/form/validators.d.ts +0 -6
- package/dist/form-model-DYCzGGKF.js +0 -286
- package/dist/state/index.d.ts +0 -31
- package/dist/state/subscription-manager.d.ts +0 -180
- package/dist/state/types.d.ts +0 -144
- package/dist/state.d.ts +0 -2
- package/dist/state.js +0 -21
- package/dist/subscription-manager-705bls97.js +0 -171
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора, проверяющего что число — целое.
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и не-числа пропускаются (используйте {@link required} и {@link isNumber}).
|
|
7
|
+
*
|
|
8
|
+
* @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
|
|
9
|
+
* @returns Правило {@link Rule} для числового поля
|
|
10
|
+
*
|
|
11
|
+
* @example Проверка целого числа
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
14
|
+
* import { required, integer } from '@reformer/core/validators';
|
|
15
|
+
*
|
|
16
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
17
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
18
|
+
* validate(model.$.count, [required(), integer({ code: 'count.integer' })]);
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function integer(options?: RuleOptions): Rule<number | null | undefined>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора, проверяющего что значение — валидная дата.
|
|
5
|
+
*
|
|
6
|
+
* Строгий формат: `Date` либо строка `YYYY-MM-DD` с существующим днём календаря. Строки в иных
|
|
7
|
+
* форматах (`'31.12.2024'`, `'March 7'`, дата со временем) — `date_invalid`. Пустые значения
|
|
8
|
+
* (`''`/`null`/`undefined`) пропускаются (используйте {@link required} для обязательности).
|
|
9
|
+
*
|
|
10
|
+
* @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
|
|
11
|
+
* @returns Правило {@link Rule} для поля даты (`string | Date`)
|
|
12
|
+
*
|
|
13
|
+
* @example Проверка валидности даты
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
16
|
+
* import { required, isDate } from '@reformer/core/validators';
|
|
17
|
+
*
|
|
18
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
19
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
20
|
+
* validate(model.$.eventDate, [required(), isDate({ code: 'eventDate.isDate' })]);
|
|
21
|
+
* });
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export declare function isDate(options?: RuleOptions): Rule<string | Date | null | undefined>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора, проверяющего что значение — конечное число (не `NaN`, не `±Infinity`,
|
|
5
|
+
* не строка).
|
|
6
|
+
*
|
|
7
|
+
* Пустые значения (`''`/`null`/`undefined`) пропускаются (используйте {@link required} для
|
|
8
|
+
* обязательности). В отличие от других number-валидаторов, **не** пропускает не-числа
|
|
9
|
+
* и `NaN` — это его задача.
|
|
10
|
+
*
|
|
11
|
+
* @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
|
|
12
|
+
* @returns Правило {@link Rule} для числового поля
|
|
13
|
+
*
|
|
14
|
+
* @example Проверка, что значение — число
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
17
|
+
* import { required, isNumber } from '@reformer/core/validators';
|
|
18
|
+
*
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.amount, [required(), isNumber({ code: 'amount.isNumber' })]);
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function isNumber(options?: RuleOptions): Rule<number | null | undefined>;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора максимального возраста (по дате рождения).
|
|
5
|
+
*
|
|
6
|
+
* Возраст вычисляется по дате рождения относительно сегодняшнего дня; родившийся 29 февраля в
|
|
7
|
+
* невисокосный год взрослеет 28 февраля. Дату рождения в будущем правило не оценивает — её
|
|
8
|
+
* отклоняет {@link minAge} (или {@link pastDate}); иначе пара правил на поле дала бы два
|
|
9
|
+
* одинаковых замечания. Пустые и невалидные даты пропускаются (используйте {@link required} и
|
|
10
|
+
* {@link isDate}).
|
|
11
|
+
*
|
|
12
|
+
* @param maxAgeValue - Максимально допустимый возраст (в полных годах)
|
|
13
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
14
|
+
* попадают `maxAge` и `currentAge`.
|
|
15
|
+
* @returns Правило {@link Rule} для поля даты рождения (`string | Date`)
|
|
16
|
+
*
|
|
17
|
+
* @example Максимальный возраст
|
|
18
|
+
* ```typescript
|
|
19
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
20
|
+
* import { maxAge } from '@reformer/core/validators';
|
|
21
|
+
*
|
|
22
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
23
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
24
|
+
* validate(model.$.birthDate, [maxAge(100, { code: 'birthDate.maxAge' })]);
|
|
25
|
+
* });
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare function maxAge(maxAgeValue: number, options?: RuleOptions): Rule<string | Date | null | undefined>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора максимальной даты (включительно).
|
|
5
|
+
*
|
|
6
|
+
* Сравнение по нормализованным датам (время обнуляется). Пустые и невалидные даты
|
|
7
|
+
* пропускаются (используйте {@link required} и {@link isDate}).
|
|
8
|
+
*
|
|
9
|
+
* @param maxDateValue - Максимально допустимая дата (включительно)
|
|
10
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
11
|
+
* попадает `maxDate`.
|
|
12
|
+
* @returns Правило {@link Rule} для поля даты (`string | Date`)
|
|
13
|
+
*
|
|
14
|
+
* @example Максимальная дата
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
17
|
+
* import { maxDate } from '@reformer/core/validators';
|
|
18
|
+
*
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.birthDate, [maxDate(new Date(), { code: 'birthDate.maxDate' })]);
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function maxDate(maxDateValue: Date, options?: RuleOptions): Rule<string | Date | null | undefined>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
2
3
|
/**
|
|
3
4
|
* Фабрика валидатора максимального размера файла.
|
|
4
5
|
*
|
|
@@ -9,20 +10,19 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
|
9
10
|
* (используйте {@link required} для обязательности).
|
|
10
11
|
*
|
|
11
12
|
* @param maxSize - Максимально допустимый размер файла в байтах (включительно)
|
|
12
|
-
* @param options - Опции валидатора ({@link
|
|
13
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
13
14
|
* попадают `maxFileSize`, `fileName` и `actualSize`.
|
|
14
|
-
* @returns
|
|
15
|
+
* @returns Правило {@link Rule} для файла или массива файлов
|
|
15
16
|
*
|
|
16
17
|
* @example Ограничение размера вложений
|
|
17
18
|
* ```typescript
|
|
19
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
18
20
|
* import { maxFileSize } from '@reformer/core/validators';
|
|
19
21
|
*
|
|
20
|
-
* //
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* validators: [maxFileSize(5 * 1024 * 1024, { message: 'Файл больше 5 МБ' })],
|
|
25
|
-
* },
|
|
22
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
23
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
24
|
+
* validate(model.$.documents, [maxFileSize(5 * 1024 * 1024, { code: 'documents.maxFileSize' })]);
|
|
25
|
+
* });
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
|
-
export declare function maxFileSize
|
|
28
|
+
export declare function maxFileSize(maxSize: number, options?: RuleOptions): Rule<unknown>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора максимального количества файлов.
|
|
5
|
+
*
|
|
6
|
+
* Работает с массивом файлов (одиночный файл считается как 1). Пустые значения
|
|
7
|
+
* (`null`/`undefined`/`''`/`[]`) пропускаются (используйте {@link required}
|
|
8
|
+
* для обязательности).
|
|
9
|
+
*
|
|
10
|
+
* @param max - Максимально допустимое количество файлов (включительно)
|
|
11
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
12
|
+
* попадают `maxFiles` и `actualCount`.
|
|
13
|
+
* @returns Правило {@link Rule} для файла или массива файлов
|
|
14
|
+
*
|
|
15
|
+
* @example Не более трёх вложений
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
18
|
+
* import { maxFiles } from '@reformer/core/validators';
|
|
19
|
+
*
|
|
20
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
21
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
22
|
+
* validate(model.$.documents, [maxFiles(3, { code: 'documents.maxFiles' })]);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function maxFiles(max: number, options?: RuleOptions): Rule<unknown>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора максимальной длины строки или массива.
|
|
5
|
+
*
|
|
6
|
+
* Работает со строкой или массивом (проверяется `value.length`). Пустые значения
|
|
7
|
+
* (`null`/`undefined`/`''`) и значения без числового `length` пропускаются
|
|
8
|
+
* (используйте {@link required} для обязательности).
|
|
9
|
+
*
|
|
10
|
+
* Длина строки — в единицах UTF-16, как `String.length` и атрибут `maxlength` браузера: эмодзи и
|
|
11
|
+
* другие символы вне BMP считаются за 2, графемы не склеиваются.
|
|
12
|
+
*
|
|
13
|
+
* У строки замечание — `maxLength` (символы), у массива — `maxItems` (элементы): мультивыбор и
|
|
14
|
+
* список считают выбранное, и текст «не больше 3 символов» под ними был бы бессмыслицей.
|
|
15
|
+
*
|
|
16
|
+
* @param maxLen - Максимально допустимая длина (включительно)
|
|
17
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
18
|
+
* попадают `maxLength` и `actualLength`.
|
|
19
|
+
* @returns Правило {@link Rule} для строки или массива
|
|
20
|
+
*
|
|
21
|
+
* @example Максимальная длина строки
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
24
|
+
* import { maxLength } from '@reformer/core/validators';
|
|
25
|
+
*
|
|
26
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
27
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
28
|
+
* validate(model.$.name, [maxLength(50)]);
|
|
29
|
+
* validate(model.$.bio, [maxLength(500, { code: 'bio.maxLength' })]);
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function maxLength(maxLen: number, options?: RuleOptions): Rule<unknown>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора суммарного размера всех файлов.
|
|
5
|
+
*
|
|
6
|
+
* Складывает `size` всех файлов значения (элементы без числового `size` в сумму
|
|
7
|
+
* не входят). Пустые значения (`null`/`undefined`/`''`/`[]`) пропускаются
|
|
8
|
+
* (используйте {@link required} для обязательности).
|
|
9
|
+
*
|
|
10
|
+
* @param maxTotal - Максимально допустимый суммарный размер в байтах (включительно)
|
|
11
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
12
|
+
* попадают `maxTotalFileSize` и `actualTotal`.
|
|
13
|
+
* @returns Правило {@link Rule} для файла или массива файлов
|
|
14
|
+
*
|
|
15
|
+
* @example Суммарно не более 20 МБ
|
|
16
|
+
* ```typescript
|
|
17
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
18
|
+
* import { maxTotalFileSize } from '@reformer/core/validators';
|
|
19
|
+
*
|
|
20
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
21
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
22
|
+
* validate(model.$.documents, [maxTotalFileSize(20 * 1024 * 1024, { code: 'documents.maxTotalFileSize' })]);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function maxTotalFileSize(maxTotal: number, options?: RuleOptions): Rule<unknown>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора максимального числового значения.
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и не-числа (`''`, строка из цифр, `NaN`) пропускаются — используйте
|
|
7
|
+
* {@link required} и {@link isNumber}.
|
|
8
|
+
*
|
|
9
|
+
* @param maxValue - Максимально допустимое значение (включительно)
|
|
10
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
11
|
+
* попадают `max` и `actual`.
|
|
12
|
+
* @returns Правило {@link Rule} для числового поля
|
|
13
|
+
*
|
|
14
|
+
* @example Максимальное значение числового поля
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
17
|
+
* import { required, max } from '@reformer/core/validators';
|
|
18
|
+
*
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.quantity, [max(100)]);
|
|
22
|
+
* validate(model.$.discount, [required(), max(50, { code: 'discount.max' })]);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function max(maxValue: number, options?: RuleOptions): Rule<number | null | undefined>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора минимального возраста (по дате рождения).
|
|
5
|
+
*
|
|
6
|
+
* Возраст вычисляется по дате рождения относительно сегодняшнего дня; родившийся 29 февраля в
|
|
7
|
+
* невисокосный год взрослеет 28 февраля. Дата рождения в будущем — замечание `date_future` с
|
|
8
|
+
* `params.minAge` (свой `code` из опций его заменяет), а не возраст −1. Пустые и невалидные даты пропускаются
|
|
9
|
+
* (используйте {@link required} и {@link isDate}).
|
|
10
|
+
*
|
|
11
|
+
* @param minAgeValue - Минимально допустимый возраст (в полных годах)
|
|
12
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
13
|
+
* попадают `minAge` и `currentAge`.
|
|
14
|
+
* @returns Правило {@link Rule} для поля даты рождения (`string | Date`)
|
|
15
|
+
*
|
|
16
|
+
* @example Минимальный возраст
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
19
|
+
* import { required, minAge } from '@reformer/core/validators';
|
|
20
|
+
*
|
|
21
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
22
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
23
|
+
* validate(model.$.birthDate, [required(), minAge(18, { code: 'birthDate.minAge' })]);
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function minAge(minAgeValue: number, options?: RuleOptions): Rule<string | Date | null | undefined>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора минимальной даты (включительно).
|
|
5
|
+
*
|
|
6
|
+
* Сравнение по нормализованным датам (время обнуляется). Пустые и невалидные даты
|
|
7
|
+
* пропускаются (используйте {@link required} и {@link isDate}).
|
|
8
|
+
*
|
|
9
|
+
* @param minDateValue - Минимально допустимая дата (включительно)
|
|
10
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
11
|
+
* попадает `minDate`.
|
|
12
|
+
* @returns Правило {@link Rule} для поля даты (`string | Date`)
|
|
13
|
+
*
|
|
14
|
+
* @example Минимальная дата
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
17
|
+
* import { required, minDate } from '@reformer/core/validators';
|
|
18
|
+
*
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.startDate, [required(), minDate(new Date(), { code: 'startDate.minDate' })]);
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function minDate(minDateValue: Date, options?: RuleOptions): Rule<string | Date | null | undefined>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
2
3
|
/**
|
|
3
4
|
* Фабрика валидатора минимального размера файла.
|
|
4
5
|
*
|
|
@@ -9,20 +10,19 @@ import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
|
9
10
|
* пропускаются (используйте {@link required} для обязательности).
|
|
10
11
|
*
|
|
11
12
|
* @param minSize - Минимально допустимый размер файла в байтах (включительно)
|
|
12
|
-
* @param options - Опции валидатора ({@link
|
|
13
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
13
14
|
* попадают `minFileSize`, `fileName` и `actualSize`.
|
|
14
|
-
* @returns
|
|
15
|
+
* @returns Правило {@link Rule} для файла или массива файлов
|
|
15
16
|
*
|
|
16
17
|
* @example Отсев пустых файлов
|
|
17
18
|
* ```typescript
|
|
19
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
18
20
|
* import { minFileSize } from '@reformer/core/validators';
|
|
19
21
|
*
|
|
20
|
-
* //
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* validators: [minFileSize(1, { message: 'Файл пустой' })],
|
|
25
|
-
* },
|
|
22
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
23
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
24
|
+
* validate(model.$.documents, [minFileSize(1, { code: 'documents.minFileSize' })]);
|
|
25
|
+
* });
|
|
26
26
|
* ```
|
|
27
27
|
*/
|
|
28
|
-
export declare function minFileSize
|
|
28
|
+
export declare function minFileSize(minSize: number, options?: RuleOptions): Rule<unknown>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора минимального количества файлов.
|
|
5
|
+
*
|
|
6
|
+
* Работает с массивом файлов (одиночный файл считается как 1). Пустые значения
|
|
7
|
+
* (`null`/`undefined`/`''`) пропускаются (используйте {@link required}), а пустой массив — как
|
|
8
|
+
* у {@link minLength} — проверяется: при `min > 0` это замечание с `actualCount: 0`. Элементы
|
|
9
|
+
* массива, которые не файлы, не считаются.
|
|
10
|
+
*
|
|
11
|
+
* @param min - Минимально допустимое количество файлов (включительно)
|
|
12
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
13
|
+
* попадают `minFiles` и `actualCount`.
|
|
14
|
+
* @returns Правило {@link Rule} для файла или массива файлов
|
|
15
|
+
*
|
|
16
|
+
* @example Не менее двух документов
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
19
|
+
* import { required, minFiles } from '@reformer/core/validators';
|
|
20
|
+
*
|
|
21
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
22
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
23
|
+
* validate(model.$.documents, [required(), minFiles(2, { code: 'documents.minFiles' })]);
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
export declare function minFiles(min: number, options?: RuleOptions): Rule<unknown>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора минимальной длины строки или массива.
|
|
5
|
+
*
|
|
6
|
+
* Работает со строкой или массивом (проверяется `value.length`). Пустые значения
|
|
7
|
+
* (`null`/`undefined`/`''`) и значения без числового `length` пропускаются
|
|
8
|
+
* (используйте {@link required} для обязательности).
|
|
9
|
+
*
|
|
10
|
+
* Длина строки — в единицах UTF-16, как `String.length` и атрибут `minlength` браузера: эмодзи и
|
|
11
|
+
* другие символы вне BMP считаются за 2, графемы не склеиваются.
|
|
12
|
+
*
|
|
13
|
+
* У строки замечание — `minLength` (символы), у массива — `minItems` (элементы): мультивыбор и
|
|
14
|
+
* список считают выбранное, и текст «не меньше 3 символов» под ними был бы бессмыслицей.
|
|
15
|
+
*
|
|
16
|
+
* @param minLen - Минимально допустимая длина (включительно)
|
|
17
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
18
|
+
* попадают `minLength` и `actualLength`.
|
|
19
|
+
* @returns Правило {@link Rule} для строки или массива
|
|
20
|
+
*
|
|
21
|
+
* @example Минимальная длина строки
|
|
22
|
+
* ```typescript
|
|
23
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
24
|
+
* import { required, minLength } from '@reformer/core/validators';
|
|
25
|
+
*
|
|
26
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
27
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
28
|
+
* validate(model.$.name, [minLength(2)]);
|
|
29
|
+
* validate(model.$.password, [required(), minLength(8, { code: 'password.minLength' })]);
|
|
30
|
+
* });
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function minLength(minLen: number, options?: RuleOptions): Rule<unknown>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора минимального числового значения.
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и не-числа (`''`, строка из цифр, `NaN`) пропускаются — используйте
|
|
7
|
+
* {@link required} и {@link isNumber}.
|
|
8
|
+
*
|
|
9
|
+
* @param minValue - Минимально допустимое значение (включительно)
|
|
10
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
11
|
+
* попадают `min` и `actual`.
|
|
12
|
+
* @returns Правило {@link Rule} для числового поля
|
|
13
|
+
*
|
|
14
|
+
* @example Минимальное значение числового поля
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
17
|
+
* import { required, min } from '@reformer/core/validators';
|
|
18
|
+
*
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.age, [min(18)]);
|
|
22
|
+
* validate(model.$.quantity, [required(), min(1, { code: 'quantity.min' })]);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function min(minValue: number, options?: RuleOptions): Rule<number | null | undefined>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора, проверяющего что число кратно заданному.
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и не-числа пропускаются (используйте {@link required} и {@link isNumber}).
|
|
7
|
+
*
|
|
8
|
+
* @param divisor - Делитель: значение должно быть кратно ему. Конечное число, не равное нулю, —
|
|
9
|
+
* иначе ошибка конфигурации (`RangeError`) при создании правила: кратность нулю вырождена.
|
|
10
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
11
|
+
* попадает `multipleOf` (делитель).
|
|
12
|
+
* @returns Правило {@link Rule} для числового поля
|
|
13
|
+
*
|
|
14
|
+
* @example Проверка кратности
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
17
|
+
* import { multipleOf } from '@reformer/core/validators';
|
|
18
|
+
*
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.rating, [multipleOf(0.5, { code: 'rating.multipleOf' })]);
|
|
22
|
+
* });
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function multipleOf(divisor: number, options?: RuleOptions): Rule<number | null | undefined>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора, проверяющего что число неотрицательное (`≥ 0`).
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и не-числа пропускаются (используйте {@link required} и {@link isNumber}).
|
|
7
|
+
*
|
|
8
|
+
* @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
|
|
9
|
+
* @returns Правило {@link Rule} для числового поля
|
|
10
|
+
*
|
|
11
|
+
* @example Проверка неотрицательности
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
14
|
+
* import { nonNegative } from '@reformer/core/validators';
|
|
15
|
+
*
|
|
16
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
17
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
18
|
+
* validate(model.$.balance, [nonNegative({ code: 'balance.nonNegative' })]);
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function nonNegative(options?: RuleOptions): Rule<number | null | undefined>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора, проверяющего что число не равно нулю.
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения и не-числа пропускаются (используйте {@link required} и {@link isNumber}).
|
|
7
|
+
*
|
|
8
|
+
* @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
|
|
9
|
+
* @returns Правило {@link Rule} для числового поля
|
|
10
|
+
*
|
|
11
|
+
* @example Проверка «не ноль»
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
14
|
+
* import { nonZero } from '@reformer/core/validators';
|
|
15
|
+
*
|
|
16
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
17
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
18
|
+
* validate(model.$.divisor, [nonZero({ code: 'divisor.nonZero' })]);
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function nonZero(options?: RuleOptions): Rule<number | null | undefined>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора, проверяющего что дата не в будущем.
|
|
5
|
+
*
|
|
6
|
+
* Дата не должна быть позже сегодняшнего дня (сравнение по нормализованным датам).
|
|
7
|
+
* Пустые и невалидные даты пропускаются (используйте {@link required} и {@link isDate}).
|
|
8
|
+
*
|
|
9
|
+
* @param options - Опции валидатора ({@link RuleOptions}): `code`, `params`
|
|
10
|
+
* @returns Правило {@link Rule} для поля даты (`string | Date`)
|
|
11
|
+
*
|
|
12
|
+
* @example Дата не в будущем
|
|
13
|
+
* ```typescript
|
|
14
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
15
|
+
* import { required, pastDate } from '@reformer/core/validators';
|
|
16
|
+
*
|
|
17
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
18
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
19
|
+
* validate(model.$.birthDate, [required(), pastDate({ code: 'birthDate.pastDate' })]);
|
|
20
|
+
* });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export declare function pastDate(options?: RuleOptions): Rule<string | Date | null | undefined>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { RuleOptions } from '../types/validation-schema';
|
|
2
|
+
import { Rule } from '../validation/types';
|
|
3
|
+
/**
|
|
4
|
+
* Фабрика валидатора регулярного выражения.
|
|
5
|
+
*
|
|
6
|
+
* Пустые значения (`''`/`null`/`undefined`) пропускаются (используйте {@link required}
|
|
7
|
+
* для обязательности).
|
|
8
|
+
*
|
|
9
|
+
* @param regex - Регулярное выражение для проверки значения
|
|
10
|
+
* @param options - Опции валидатора ({@link RuleOptions}). В `params` ошибки автоматически
|
|
11
|
+
* попадает `pattern` (строка-источник regex).
|
|
12
|
+
* @returns Правило {@link Rule} для строкового поля
|
|
13
|
+
*
|
|
14
|
+
* @example Проверка по регулярному выражению
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { defineValidation, validate } from '@reformer/core/validation';
|
|
17
|
+
* import { required, pattern } from '@reformer/core/validators';
|
|
18
|
+
*
|
|
19
|
+
* // Правила живут в отдельной схеме над МОДЕЛЬЮ — layout-схема валидаторов не несёт.
|
|
20
|
+
* const validation = defineValidation<MyForm>(({ model }) => {
|
|
21
|
+
* validate(model.$.name, [pattern(/^[a-zA-Zа-яА-Я]+$/, { code: 'name.pattern' })]);
|
|
22
|
+
* validate(model.$.phone, [required(), pattern(/^\+7 \(\d{3}\) \d{3}-\d{2}-\d{2}$/, { code: 'phone.pattern' })]);
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
export declare function pattern(regex: RegExp, options?: RuleOptions): Rule<string | null | undefined>;
|