@reformer/core 11.0.0-beta.1 → 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 -24
- 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 -85
- package/dist/form/types/field-config.d.ts +27 -0
- package/dist/form/types/index.d.ts +5 -57
- package/dist/form/types/nodes.d.ts +159 -0
- package/dist/form/types/schema-node.d.ts +147 -46
- package/dist/form/types/validation-schema.d.ts +25 -17
- 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 +17 -5
- package/dist/index.js +942 -2601
- 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 +58 -36
- 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 +1 -2
- 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 -1
- package/dist/validators.js +86 -108
- package/docs/llms/01-api-reference.md +60 -34
- package/docs/llms/02-quick-start.md +112 -74
- package/docs/llms/03-api-signatures.md +369 -148
- package/docs/llms/04-common-patterns.md +58 -56
- package/docs/llms/05-common-mistakes.md +69 -44
- package/docs/llms/06-troubleshooting.md +14 -9
- package/docs/llms/07-complete-import.md +74 -43
- package/docs/llms/08-form-types.md +11 -4
- package/docs/llms/09-formschema.md +132 -84
- package/docs/llms/10-arrays.md +141 -61
- package/docs/llms/11-async-watchfield.md +2 -2
- package/docs/llms/13-multi-step.md +134 -63
- package/docs/llms/14-extended-mistakes.md +20 -17
- package/docs/llms/15-project-structure.md +224 -70
- package/docs/llms/16-ui-components.md +86 -46
- package/docs/llms/17-nonexistent-api.md +217 -32
- package/docs/llms/18-conditional-fields.md +71 -32
- package/docs/llms/19-reading-values.md +45 -4
- package/docs/llms/20-compute-vs-watch.md +25 -10
- package/docs/llms/21-array-operations.md +76 -26
- package/docs/llms/22-cycle-detection.md +1 -1
- package/docs/llms/23-copy-from.md +2 -2
- package/docs/llms/24-sync-fields.md +6 -5
- package/docs/llms/25-reset-when.md +14 -7
- package/docs/llms/26-transform-value.md +4 -4
- package/docs/llms/27-revalidate-when.md +16 -15
- package/docs/llms/28-submit-and-reset.md +278 -128
- package/docs/llms/29-async-preload.md +41 -31
- package/docs/llms/30-type-safety-recipes.md +105 -51
- package/docs/llms/31-async-validator-debounce.md +96 -53
- package/docs/llms/33-validation-strategy.md +178 -66
- 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 +10690 -3089
- package/package.json +48 -9
- 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 -121
- package/dist/form/nodes/array-node.d.ts +0 -276
- package/dist/form/nodes/field-node.d.ts +0 -294
- package/dist/form/nodes/form-node.d.ts +0 -326
- package/dist/form/nodes/group-node.d.ts +0 -284
- package/dist/form/nodes/model-array-node.d.ts +0 -121
- package/dist/form/status-machine.d.ts +0 -115
- package/dist/form/types/deep-schema.d.ts +0 -107
- package/dist/form/types/form-proxy.d.ts +0 -141
- package/dist/form/unique-id.d.ts +0 -45
- 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 -11
- 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
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { FieldNode } from '../nodes/field-node';
|
|
2
|
-
import { GroupNode } from '../nodes/group-node';
|
|
3
|
-
import { ArrayNode } from '../nodes/array-node';
|
|
4
|
-
/**
|
|
5
|
-
* Признак «объект-группа» — обычный объект, который нужно обернуть в под-форму.
|
|
6
|
-
*
|
|
7
|
-
* Исключает массивы, спец-объекты (`Date`/`File`/`Blob`) и примитивы.
|
|
8
|
-
* Используется как дискриминатор вместо `extends FormFields` (`Record<string, FormValue>`):
|
|
9
|
-
* пользовательские модели почти всегда объявлены через `interface`, который НЕ assignable
|
|
10
|
-
* к Record-типу (у интерфейса нет неявной index signature), и потому ошибочно проваливался
|
|
11
|
-
* бы в ветку `FieldNode`. Проверка `extends object` корректно ловит и `interface`, и `type`.
|
|
12
|
-
*
|
|
13
|
-
* @internal
|
|
14
|
-
*/
|
|
15
|
-
type IsGroupObject<V> = V extends ReadonlyArray<unknown> ? false : V extends Date | File | Blob ? false : V extends (...args: never[]) => unknown ? false : V extends object ? true : false;
|
|
16
|
-
/**
|
|
17
|
-
* Мапит тип модели данных T на правильные типы узлов формы
|
|
18
|
-
*
|
|
19
|
-
* Рекурсивно определяет типы узлов на основе структуры данных:
|
|
20
|
-
* - `T[K] extends Array<infer U>` где U - объект → `FormArrayProxy<U>`
|
|
21
|
-
* - `T[K] extends Array<infer U>` где U - примитив → `FieldNode<T[K]>` (массив как обычное поле)
|
|
22
|
-
* - `T[K] extends object` → `FormProxy<T[K]>` (вложенная форма с типизацией)
|
|
23
|
-
* - `T[K]` примитив → `FieldNode<T[K]>` (простое поле)
|
|
24
|
-
*
|
|
25
|
-
* Использует NonNullable для правильной обработки опциональных полей
|
|
26
|
-
*
|
|
27
|
-
* @group Types
|
|
28
|
-
* @category Proxy Types
|
|
29
|
-
*
|
|
30
|
-
* @template T - Тип модели данных формы
|
|
31
|
-
*/
|
|
32
|
-
export type FormControlsProxy<T> = {
|
|
33
|
-
[K in keyof T]-?: NonNullable<T[K]> extends ReadonlyArray<infer U> ? IsGroupObject<U> extends true ? FormArrayProxy<U & object> : FieldNode<T[K]> : IsGroupObject<NonNullable<T[K]>> extends true ? FormProxy<NonNullable<T[K]>> : FieldNode<T[K]>;
|
|
34
|
-
};
|
|
35
|
-
/**
|
|
36
|
-
* Комбинированный тип для GroupNode с Proxy доступом к полям
|
|
37
|
-
*
|
|
38
|
-
* Объединяет методы и свойства GroupNode с типизированными полями формы.
|
|
39
|
-
* Это позволяет использовать как API GroupNode, так и прямой доступ к полям.
|
|
40
|
-
*
|
|
41
|
-
* @group Types
|
|
42
|
-
* @category Proxy Types
|
|
43
|
-
*
|
|
44
|
-
* @template T - Тип модели данных формы
|
|
45
|
-
*
|
|
46
|
-
* @example
|
|
47
|
-
* ```typescript
|
|
48
|
-
* interface UserForm {
|
|
49
|
-
* email: string;
|
|
50
|
-
* profile: {
|
|
51
|
-
* name: string;
|
|
52
|
-
* age: number;
|
|
53
|
-
* };
|
|
54
|
-
* }
|
|
55
|
-
*
|
|
56
|
-
* const form = createForm<UserForm>(schema);
|
|
57
|
-
*
|
|
58
|
-
* // Доступ к методам GroupNode
|
|
59
|
-
* await form.validate();
|
|
60
|
-
* const values = form.getValue();
|
|
61
|
-
* console.log(form.valid.value);
|
|
62
|
-
*
|
|
63
|
-
* // Прямой доступ к полям (через Proxy)
|
|
64
|
-
* form.email.setValue('test@mail.com');
|
|
65
|
-
* form.profile.name.setValue('John');
|
|
66
|
-
* ```
|
|
67
|
-
*
|
|
68
|
-
* @remarks
|
|
69
|
-
* **Зарезервированные имена.** Прямой доступ `form.<name>` отдаёт приоритет собственным
|
|
70
|
-
* членам {@link GroupNode} (`value`, `status`, `id`, `errors`, `disabled`, `reset`, `submit`, …).
|
|
71
|
-
* Поэтому поле модели, названное любым из этих имён, недостижимо как `form.<name>` — там будет
|
|
72
|
-
* агрегированный сигнал/метод узла, а не {@link FieldNode}. Такие имена исключены из полевого
|
|
73
|
-
* пространства имён на уровне типов (через `Omit<…, keyof GroupNode>`), чтобы затенение не
|
|
74
|
-
* компилировалось молча. Для доступа к любому полю по имени — включая затенённые — используйте
|
|
75
|
-
* escape-hatch пространство {@link FormProxy.$}: `form.$.status`, `form.$.id`, `form.$.value`.
|
|
76
|
-
*/
|
|
77
|
-
export type FormProxy<T> = GroupNode<T> & Omit<FormControlsProxy<T>, keyof GroupNode<T>> & {
|
|
78
|
-
/**
|
|
79
|
-
* Escape-hatch пространство имён «controls»: типобезопасный доступ ко ВСЕМ полям формы
|
|
80
|
-
* по имени, включая поля, чьи имена совпадают с членами {@link GroupNode}
|
|
81
|
-
* (`value`/`status`/`id`/`errors`/…), недостижимые через `form.<name>`.
|
|
82
|
-
*
|
|
83
|
-
* @example
|
|
84
|
-
* ```typescript
|
|
85
|
-
* // модель: { status: string; email: string }
|
|
86
|
-
* form.status; // ReadonlySignal<FieldStatus> — агрегат GroupNode (не поле!)
|
|
87
|
-
* form.$.status; // FieldNode<string> — поле пользователя
|
|
88
|
-
* form.$.status.setValue('active');
|
|
89
|
-
* form.$.email; // FieldNode<string> — так же доступны и незатенённые поля
|
|
90
|
-
* ```
|
|
91
|
-
*/
|
|
92
|
-
readonly $: FormControlsProxy<T>;
|
|
93
|
-
};
|
|
94
|
-
/**
|
|
95
|
-
* Комбинированный тип для ArrayNode с Proxy доступом к элементам
|
|
96
|
-
*
|
|
97
|
-
* Объединяет методы и свойства ArrayNode с типизированным доступом к элементам массива.
|
|
98
|
-
*
|
|
99
|
-
* @group Types
|
|
100
|
-
* @category Proxy Types
|
|
101
|
-
*
|
|
102
|
-
* @template T - Тип модели данных элемента массива
|
|
103
|
-
*
|
|
104
|
-
* @example
|
|
105
|
-
* ```typescript
|
|
106
|
-
* interface TodoItem {
|
|
107
|
-
* title: string;
|
|
108
|
-
* completed: boolean;
|
|
109
|
-
* }
|
|
110
|
-
*
|
|
111
|
-
* const todos: FormArrayProxy<TodoItem> = new ArrayNode(schema);
|
|
112
|
-
*
|
|
113
|
-
* // Доступ к методам ArrayNode
|
|
114
|
-
* todos.push({ title: 'New todo', completed: false });
|
|
115
|
-
* todos.removeAt(0);
|
|
116
|
-
*
|
|
117
|
-
* // Доступ к элементам (через Proxy)
|
|
118
|
-
* todos.at(0)?.title.setValue('Updated title');
|
|
119
|
-
*
|
|
120
|
-
* // Итерация
|
|
121
|
-
* todos.forEach((item, i) => {
|
|
122
|
-
* console.log(item.title.value.value);
|
|
123
|
-
* });
|
|
124
|
-
* ```
|
|
125
|
-
*/
|
|
126
|
-
export type FormArrayProxy<T extends object> = ArrayNode<T> & {
|
|
127
|
-
/**
|
|
128
|
-
* Безопасный доступ к элементу массива по индексу
|
|
129
|
-
* Возвращает GroupNode с типизированными полями или undefined
|
|
130
|
-
*/
|
|
131
|
-
at(index: number): FormProxy<T> | undefined;
|
|
132
|
-
/**
|
|
133
|
-
* Итерация по элементам массива с типизированными элементами
|
|
134
|
-
*/
|
|
135
|
-
forEach(callback: (item: FormProxy<T>, index: number) => void): void;
|
|
136
|
-
/**
|
|
137
|
-
* Маппинг элементов массива с типизированными элементами
|
|
138
|
-
*/
|
|
139
|
-
map<R>(callback: (item: FormProxy<T>, index: number) => R): R[];
|
|
140
|
-
};
|
|
141
|
-
export {};
|
package/dist/form/unique-id.d.ts
DELETED
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Генератор уникальных идентификаторов
|
|
3
|
-
*
|
|
4
|
-
* Использует атомный счётчик для генерации гарантированно уникальных ключей.
|
|
5
|
-
* Решает проблему возможного дублирования ключей при использовании
|
|
6
|
-
* Date.now() + Math.random() в быстрых последовательных вызовах.
|
|
7
|
-
*
|
|
8
|
-
* @example
|
|
9
|
-
* ```typescript
|
|
10
|
-
* const key1 = uniqueId(SubscriptionKey.Watch); // "watch-1"
|
|
11
|
-
* const key2 = uniqueId(SubscriptionKey.Watch); // "watch-2"
|
|
12
|
-
* const key3 = uniqueId(SubscriptionKey.ComputeFrom); // "computeFrom-3"
|
|
13
|
-
* ```
|
|
14
|
-
*/
|
|
15
|
-
/**
|
|
16
|
-
* Типобезопасные ключи для подписок
|
|
17
|
-
* Используются с uniqueId() для генерации уникальных идентификаторов
|
|
18
|
-
*/
|
|
19
|
-
export declare const SubscriptionKey: {
|
|
20
|
-
/** FieldNode.watch() */
|
|
21
|
-
readonly Watch: "watch";
|
|
22
|
-
/** FieldNode.computeFrom() */
|
|
23
|
-
readonly ComputeFrom: "computeFrom";
|
|
24
|
-
/** GroupNode.linkFields() */
|
|
25
|
-
readonly LinkFields: "linkFields";
|
|
26
|
-
/** GroupNode.watchField() */
|
|
27
|
-
readonly WatchField: "watchField";
|
|
28
|
-
};
|
|
29
|
-
export type SubscriptionKeyType = (typeof SubscriptionKey)[keyof typeof SubscriptionKey];
|
|
30
|
-
/**
|
|
31
|
-
* Генерирует уникальный идентификатор с указанным префиксом.
|
|
32
|
-
*
|
|
33
|
-
* @param prefix - Префикс для идентификатора (используйте {@link SubscriptionKey}).
|
|
34
|
-
* @returns Уникальный идентификатор в формате `${prefix}-${counter}`.
|
|
35
|
-
*
|
|
36
|
-
* ⚠️ `SubscriptionKey`/`SubscriptionKeyType` — внутренние: барель `@reformer/core` их не отдаёт,
|
|
37
|
-
* поэтому вызвать `uniqueId` извне пакета типобезопасно нельзя. Пример ниже — внутрипакетный.
|
|
38
|
-
*
|
|
39
|
-
* @example
|
|
40
|
-
* ```typescript
|
|
41
|
-
* uniqueId(SubscriptionKey.WatchField); // → 'watchField-1'
|
|
42
|
-
* uniqueId(SubscriptionKey.WatchField); // → 'watchField-2'
|
|
43
|
-
* ```
|
|
44
|
-
*/
|
|
45
|
-
export declare function uniqueId(prefix: SubscriptionKeyType): string;
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Утилиты для работы с датами в валидаторах
|
|
3
|
-
*
|
|
4
|
-
* @group Validation
|
|
5
|
-
* @category Validators
|
|
6
|
-
* @module validators/date-utils
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Парсит значение в объект Date
|
|
10
|
-
*
|
|
11
|
-
* @param value - Значение для парсинга (Date, string или undefined)
|
|
12
|
-
* @returns Date объект или null если парсинг не удался
|
|
13
|
-
*/
|
|
14
|
-
export declare function parseDate(value: string | Date | null | undefined): Date | null;
|
|
15
|
-
/**
|
|
16
|
-
* Возвращает сегодняшнюю дату с обнулённым временем
|
|
17
|
-
*/
|
|
18
|
-
export declare function getToday(): Date;
|
|
19
|
-
/**
|
|
20
|
-
* Нормализует дату, обнуляя время
|
|
21
|
-
*/
|
|
22
|
-
export declare function normalizeDate(date: Date): Date;
|
|
23
|
-
/**
|
|
24
|
-
* Вычисляет полный возраст (в годах) по календарным полям.
|
|
25
|
-
*
|
|
26
|
-
* Считаем по годам/месяцам/дням, а не делением миллисекунд на усреднённый год (365.25 дн): усреднение
|
|
27
|
-
* даёт off-by-one на границе — в день N-летия накопленных реальных дней меньше `N * 365.25`, и `floor`
|
|
28
|
-
* роняет возраст до `N - 1` (т.е. `minAge(18)` ошибочно отклонял 18-летнего в его день рождения).
|
|
29
|
-
*/
|
|
30
|
-
export declare function calculateAge(birthDate: Date): number;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора формата email.
|
|
4
|
-
*
|
|
5
|
-
* Проверяет по упрощённому regex `^[^\s@]+@[^\s@]+\.[^\s@]+$`. Пустые значения
|
|
6
|
-
* (`''`/`null`/`undefined`) пропускаются (используйте {@link required} для обязательности).
|
|
7
|
-
*
|
|
8
|
-
* @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
|
|
9
|
-
* @returns Чистый валидатор {@link Validator} для строкового поля
|
|
10
|
-
*
|
|
11
|
-
* @example Проверка формата email
|
|
12
|
-
* ```typescript
|
|
13
|
-
* import { required, email } from '@reformer/core/validators';
|
|
14
|
-
*
|
|
15
|
-
* // Внутри FieldConfig схемы формы:
|
|
16
|
-
* email: {
|
|
17
|
-
* value: model.$.email,
|
|
18
|
-
* component: Input,
|
|
19
|
-
* validators: [required(), email({ message: 'Введите корректный email' })],
|
|
20
|
-
* },
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export declare function email<TForm = unknown, TField extends string | null | undefined = string>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора, проверяющего что дата не в прошлом.
|
|
4
|
-
*
|
|
5
|
-
* Дата не должна быть раньше сегодняшнего дня (сравнение по нормализованным датам).
|
|
6
|
-
* Пустые и невалидные даты пропускаются (используйте {@link required} и {@link isDate}).
|
|
7
|
-
*
|
|
8
|
-
* @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
|
|
9
|
-
* @returns Чистый валидатор {@link Validator} для поля даты (`string | Date`)
|
|
10
|
-
*
|
|
11
|
-
* @example Дата не в прошлом
|
|
12
|
-
* ```typescript
|
|
13
|
-
* import { required, futureDate } from '@reformer/core/validators';
|
|
14
|
-
*
|
|
15
|
-
* // Внутри FieldConfig схемы формы:
|
|
16
|
-
* appointmentDate: {
|
|
17
|
-
* value: model.$.appointmentDate,
|
|
18
|
-
* component: DatePicker,
|
|
19
|
-
* validators: [required(), futureDate({ message: 'Дата записи должна быть в будущем' })],
|
|
20
|
-
* },
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export declare function futureDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора, проверяющего что число — целое.
|
|
4
|
-
*
|
|
5
|
-
* Пустые значения и не-числа пропускаются (используйте {@link required} и {@link isNumber}).
|
|
6
|
-
*
|
|
7
|
-
* @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
|
|
8
|
-
* @returns Чистый валидатор {@link Validator} для числового поля
|
|
9
|
-
*
|
|
10
|
-
* @example Проверка целого числа
|
|
11
|
-
* ```typescript
|
|
12
|
-
* import { required, integer } from '@reformer/core/validators';
|
|
13
|
-
*
|
|
14
|
-
* // Внутри FieldConfig схемы формы:
|
|
15
|
-
* count: {
|
|
16
|
-
* value: model.$.count,
|
|
17
|
-
* component: Input,
|
|
18
|
-
* validators: [required(), integer({ message: 'Должно быть целым числом' })],
|
|
19
|
-
* },
|
|
20
|
-
* ```
|
|
21
|
-
*/
|
|
22
|
-
export declare function integer<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора, проверяющего что значение — валидная дата.
|
|
4
|
-
*
|
|
5
|
-
* Принимает `Date` или строку, парсимую в дату. Пустые значения (`''`/`null`/`undefined`)
|
|
6
|
-
* пропускаются (используйте {@link required} для обязательности).
|
|
7
|
-
*
|
|
8
|
-
* @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
|
|
9
|
-
* @returns Чистый валидатор {@link Validator} для поля даты (`string | Date`)
|
|
10
|
-
*
|
|
11
|
-
* @example Проверка валидности даты
|
|
12
|
-
* ```typescript
|
|
13
|
-
* import { required, isDate } from '@reformer/core/validators';
|
|
14
|
-
*
|
|
15
|
-
* // Внутри FieldConfig схемы формы:
|
|
16
|
-
* eventDate: {
|
|
17
|
-
* value: model.$.eventDate,
|
|
18
|
-
* component: DatePicker,
|
|
19
|
-
* validators: [required(), isDate({ message: 'Введите корректную дату' })],
|
|
20
|
-
* },
|
|
21
|
-
* ```
|
|
22
|
-
*/
|
|
23
|
-
export declare function isDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора, проверяющего что значение — конечное число (не NaN, не строка).
|
|
4
|
-
*
|
|
5
|
-
* Пустые значения (`null`/`undefined`) пропускаются (используйте {@link required} для
|
|
6
|
-
* обязательности). В отличие от других number-валидаторов, **не** пропускает не-числа
|
|
7
|
-
* и `NaN` — это его задача.
|
|
8
|
-
*
|
|
9
|
-
* @param options - Опции валидатора ({@link ValidateOptions}): `message`, `params`
|
|
10
|
-
* @returns Чистый валидатор {@link Validator} для числового поля
|
|
11
|
-
*
|
|
12
|
-
* @example Проверка, что значение — число
|
|
13
|
-
* ```typescript
|
|
14
|
-
* import { required, isNumber } from '@reformer/core/validators';
|
|
15
|
-
*
|
|
16
|
-
* // Внутри FieldConfig схемы формы:
|
|
17
|
-
* amount: {
|
|
18
|
-
* value: model.$.amount,
|
|
19
|
-
* component: Input,
|
|
20
|
-
* validators: [required(), isNumber({ message: 'Введите число' })],
|
|
21
|
-
* },
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export declare function isNumber<TForm = unknown, TField extends number | null | undefined = number>(options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора максимального возраста (по дате рождения).
|
|
4
|
-
*
|
|
5
|
-
* Возраст вычисляется по дате рождения относительно сегодняшнего дня. Пустые и невалидные
|
|
6
|
-
* даты пропускаются (используйте {@link required} и {@link isDate}).
|
|
7
|
-
*
|
|
8
|
-
* @param maxAgeValue - Максимально допустимый возраст (в полных годах)
|
|
9
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
10
|
-
* попадают `maxAge` и `currentAge`.
|
|
11
|
-
* @returns Чистый валидатор {@link Validator} для поля даты рождения (`string | Date`)
|
|
12
|
-
*
|
|
13
|
-
* @example Максимальный возраст
|
|
14
|
-
* ```typescript
|
|
15
|
-
* import { maxAge } from '@reformer/core/validators';
|
|
16
|
-
*
|
|
17
|
-
* // Внутри FieldConfig схемы формы:
|
|
18
|
-
* birthDate: {
|
|
19
|
-
* value: model.$.birthDate,
|
|
20
|
-
* component: DatePicker,
|
|
21
|
-
* validators: [maxAge(100, { message: 'Проверьте дату рождения' })],
|
|
22
|
-
* },
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function maxAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора максимальной даты (включительно).
|
|
4
|
-
*
|
|
5
|
-
* Сравнение по нормализованным датам (время обнуляется). Пустые и невалидные даты
|
|
6
|
-
* пропускаются (используйте {@link required} и {@link isDate}).
|
|
7
|
-
*
|
|
8
|
-
* @param maxDateValue - Максимально допустимая дата (включительно)
|
|
9
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
10
|
-
* попадает `maxDate`.
|
|
11
|
-
* @returns Чистый валидатор {@link Validator} для поля даты (`string | Date`)
|
|
12
|
-
*
|
|
13
|
-
* @example Максимальная дата
|
|
14
|
-
* ```typescript
|
|
15
|
-
* import { maxDate } from '@reformer/core/validators';
|
|
16
|
-
*
|
|
17
|
-
* // Внутри FieldConfig схемы формы:
|
|
18
|
-
* birthDate: {
|
|
19
|
-
* value: model.$.birthDate,
|
|
20
|
-
* component: DatePicker,
|
|
21
|
-
* validators: [maxDate(new Date(), { message: 'Дата не может быть в будущем' })],
|
|
22
|
-
* },
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function maxDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(maxDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора максимального количества файлов.
|
|
4
|
-
*
|
|
5
|
-
* Работает с массивом файлов (одиночный файл считается как 1). Пустые значения
|
|
6
|
-
* (`null`/`undefined`/`''`/`[]`) пропускаются (используйте {@link required}
|
|
7
|
-
* для обязательности).
|
|
8
|
-
*
|
|
9
|
-
* @param max - Максимально допустимое количество файлов (включительно)
|
|
10
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
11
|
-
* попадают `maxFiles` и `actualCount`.
|
|
12
|
-
* @returns Чистый валидатор {@link Validator} для файла или массива файлов
|
|
13
|
-
*
|
|
14
|
-
* @example Не более трёх вложений
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import { maxFiles } from '@reformer/core/validators';
|
|
17
|
-
*
|
|
18
|
-
* // Внутри FieldConfig схемы формы:
|
|
19
|
-
* documents: {
|
|
20
|
-
* value: model.$.documents,
|
|
21
|
-
* component: FileUploadField,
|
|
22
|
-
* validators: [maxFiles(3, { message: 'Максимум 3 файла' })],
|
|
23
|
-
* },
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export declare function maxFiles<TForm = unknown, TField = unknown>(max: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора максимальной длины строки или массива.
|
|
4
|
-
*
|
|
5
|
-
* Работает со строкой или массивом (проверяется `value.length`). Пустые значения
|
|
6
|
-
* (`null`/`undefined`/`''`) и значения без числового `length` пропускаются
|
|
7
|
-
* (используйте {@link required} для обязательности).
|
|
8
|
-
*
|
|
9
|
-
* @param maxLen - Максимально допустимая длина (включительно)
|
|
10
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
11
|
-
* попадают `maxLength` и `actualLength`.
|
|
12
|
-
* @returns Чистый валидатор {@link Validator} для строки или массива
|
|
13
|
-
*
|
|
14
|
-
* @example Максимальная длина строки
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import { maxLength } from '@reformer/core/validators';
|
|
17
|
-
*
|
|
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
|
-
* },
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export declare function maxLength<TForm = unknown, TField = unknown>(maxLen: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора суммарного размера всех файлов.
|
|
4
|
-
*
|
|
5
|
-
* Складывает `size` всех файлов значения (элементы без числового `size` в сумму
|
|
6
|
-
* не входят). Пустые значения (`null`/`undefined`/`''`/`[]`) пропускаются
|
|
7
|
-
* (используйте {@link required} для обязательности).
|
|
8
|
-
*
|
|
9
|
-
* @param maxTotal - Максимально допустимый суммарный размер в байтах (включительно)
|
|
10
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
11
|
-
* попадают `maxTotalFileSize` и `actualTotal`.
|
|
12
|
-
* @returns Чистый валидатор {@link Validator} для файла или массива файлов
|
|
13
|
-
*
|
|
14
|
-
* @example Суммарно не более 20 МБ
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import { maxTotalFileSize } from '@reformer/core/validators';
|
|
17
|
-
*
|
|
18
|
-
* // Внутри FieldConfig схемы формы:
|
|
19
|
-
* documents: {
|
|
20
|
-
* value: model.$.documents,
|
|
21
|
-
* component: FileUploadField,
|
|
22
|
-
* validators: [maxTotalFileSize(20 * 1024 * 1024, { message: 'Суммарно не более 20 МБ' })],
|
|
23
|
-
* },
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export declare function maxTotalFileSize<TForm = unknown, TField = unknown>(maxTotal: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора максимального числового значения.
|
|
4
|
-
*
|
|
5
|
-
* Пустые значения (`null`/`undefined`) пропускаются (используйте {@link required} для обязательности).
|
|
6
|
-
*
|
|
7
|
-
* @param maxValue - Максимально допустимое значение (включительно)
|
|
8
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
9
|
-
* попадают `max` и `actual`.
|
|
10
|
-
* @returns Чистый валидатор {@link Validator} для числового поля
|
|
11
|
-
*
|
|
12
|
-
* @example Максимальное значение числового поля
|
|
13
|
-
* ```typescript
|
|
14
|
-
* import { required, max } from '@reformer/core/validators';
|
|
15
|
-
*
|
|
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
|
-
* },
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function max<TForm = unknown, TField extends number | null | undefined = number>(maxValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора минимального возраста (по дате рождения).
|
|
4
|
-
*
|
|
5
|
-
* Возраст вычисляется по дате рождения относительно сегодняшнего дня. Пустые и невалидные
|
|
6
|
-
* даты пропускаются (используйте {@link required} и {@link isDate}).
|
|
7
|
-
*
|
|
8
|
-
* @param minAgeValue - Минимально допустимый возраст (в полных годах)
|
|
9
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
10
|
-
* попадают `minAge` и `currentAge`.
|
|
11
|
-
* @returns Чистый валидатор {@link Validator} для поля даты рождения (`string | Date`)
|
|
12
|
-
*
|
|
13
|
-
* @example Минимальный возраст
|
|
14
|
-
* ```typescript
|
|
15
|
-
* import { required, minAge } from '@reformer/core/validators';
|
|
16
|
-
*
|
|
17
|
-
* // Внутри FieldConfig схемы формы:
|
|
18
|
-
* birthDate: {
|
|
19
|
-
* value: model.$.birthDate,
|
|
20
|
-
* component: DatePicker,
|
|
21
|
-
* validators: [required(), minAge(18, { message: 'Вам должно быть не менее 18 лет' })],
|
|
22
|
-
* },
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function minAge<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minAgeValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора минимальной даты (включительно).
|
|
4
|
-
*
|
|
5
|
-
* Сравнение по нормализованным датам (время обнуляется). Пустые и невалидные даты
|
|
6
|
-
* пропускаются (используйте {@link required} и {@link isDate}).
|
|
7
|
-
*
|
|
8
|
-
* @param minDateValue - Минимально допустимая дата (включительно)
|
|
9
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
10
|
-
* попадает `minDate`.
|
|
11
|
-
* @returns Чистый валидатор {@link Validator} для поля даты (`string | Date`)
|
|
12
|
-
*
|
|
13
|
-
* @example Минимальная дата
|
|
14
|
-
* ```typescript
|
|
15
|
-
* import { required, minDate } from '@reformer/core/validators';
|
|
16
|
-
*
|
|
17
|
-
* // Внутри FieldConfig схемы формы:
|
|
18
|
-
* startDate: {
|
|
19
|
-
* value: model.$.startDate,
|
|
20
|
-
* component: DatePicker,
|
|
21
|
-
* validators: [required(), minDate(new Date(), { message: 'Дата не раньше сегодня' })],
|
|
22
|
-
* },
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function minDate<TForm = unknown, TField extends string | Date | null | undefined = string | Date>(minDateValue: Date, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора минимального количества файлов.
|
|
4
|
-
*
|
|
5
|
-
* Работает с массивом файлов (одиночный файл считается как 1). Пустые значения
|
|
6
|
-
* (`null`/`undefined`/`''`/`[]`) пропускаются — «нужен хотя бы один файл» выражается
|
|
7
|
-
* связкой `required()` + `minFiles(n)`, как и у {@link minLength}.
|
|
8
|
-
*
|
|
9
|
-
* @param min - Минимально допустимое количество файлов (включительно)
|
|
10
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
11
|
-
* попадают `minFiles` и `actualCount`.
|
|
12
|
-
* @returns Чистый валидатор {@link Validator} для файла или массива файлов
|
|
13
|
-
*
|
|
14
|
-
* @example Не менее двух документов
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import { required, minFiles } from '@reformer/core/validators';
|
|
17
|
-
*
|
|
18
|
-
* // Внутри FieldConfig схемы формы:
|
|
19
|
-
* documents: {
|
|
20
|
-
* value: model.$.documents,
|
|
21
|
-
* component: FileUploadField,
|
|
22
|
-
* validators: [required(), minFiles(2, { message: 'Приложите минимум 2 документа' })],
|
|
23
|
-
* },
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
export declare function minFiles<TForm = unknown, TField = unknown>(min: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора минимальной длины строки или массива.
|
|
4
|
-
*
|
|
5
|
-
* Работает со строкой или массивом (проверяется `value.length`). Пустые значения
|
|
6
|
-
* (`null`/`undefined`/`''`) и значения без числового `length` пропускаются
|
|
7
|
-
* (используйте {@link required} для обязательности).
|
|
8
|
-
*
|
|
9
|
-
* @param minLen - Минимально допустимая длина (включительно)
|
|
10
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
11
|
-
* попадают `minLength` и `actualLength`.
|
|
12
|
-
* @returns Чистый валидатор {@link Validator} для строки или массива
|
|
13
|
-
*
|
|
14
|
-
* @example Минимальная длина строки
|
|
15
|
-
* ```typescript
|
|
16
|
-
* import { required, minLength } from '@reformer/core/validators';
|
|
17
|
-
*
|
|
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
|
-
* },
|
|
25
|
-
* ```
|
|
26
|
-
*/
|
|
27
|
-
export declare function minLength<TForm = unknown, TField = unknown>(minLen: number, options?: ValidateOptions): Validator<TForm, TField>;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { Validator, ValidateOptions } from '../../types/validation-schema';
|
|
2
|
-
/**
|
|
3
|
-
* Фабрика валидатора минимального числового значения.
|
|
4
|
-
*
|
|
5
|
-
* Пустые значения (`null`/`undefined`) пропускаются (используйте {@link required} для обязательности).
|
|
6
|
-
*
|
|
7
|
-
* @param minValue - Минимально допустимое значение (включительно)
|
|
8
|
-
* @param options - Опции валидатора ({@link ValidateOptions}). В `params` ошибки автоматически
|
|
9
|
-
* попадают `min` и `actual`.
|
|
10
|
-
* @returns Чистый валидатор {@link Validator} для числового поля
|
|
11
|
-
*
|
|
12
|
-
* @example Минимальное значение числового поля
|
|
13
|
-
* ```typescript
|
|
14
|
-
* import { required, min } from '@reformer/core/validators';
|
|
15
|
-
*
|
|
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
|
-
* },
|
|
23
|
-
* ```
|
|
24
|
-
*/
|
|
25
|
-
export declare function min<TForm = unknown, TField extends number | null | undefined = number>(minValue: number, options?: ValidateOptions): Validator<TForm, TField>;
|