@reformer/core 9.1.1 → 10.0.0-beta.2

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 (36) hide show
  1. package/README.md +39 -28
  2. package/dist/behaviors-node-DUrqAqp1.js +18 -0
  3. package/dist/behaviors.js +1 -1
  4. package/dist/form/create-form.d.ts +13 -17
  5. package/dist/form/index.d.ts +4 -6
  6. package/dist/form/nodes/group-node.d.ts +2 -15
  7. package/dist/form/types/schema-node.d.ts +13 -9
  8. package/dist/form/types/validation-schema.d.ts +7 -29
  9. package/dist/form/validation/index.d.ts +7 -0
  10. package/dist/form/validation/validators/email.d.ts +1 -1
  11. package/dist/form/validation/validators/file-type.d.ts +31 -0
  12. package/dist/form/validation/validators/file-utils.d.ts +51 -0
  13. package/dist/form/validation/validators/future-date.d.ts +1 -1
  14. package/dist/form/validation/validators/index.d.ts +7 -0
  15. package/dist/form/validation/validators/is-date.d.ts +1 -1
  16. package/dist/form/validation/validators/max-file-size.d.ts +28 -0
  17. package/dist/form/validation/validators/max-files.d.ts +26 -0
  18. package/dist/form/validation/validators/max-total-file-size.d.ts +26 -0
  19. package/dist/form/validation/validators/min-file-size.d.ts +28 -0
  20. package/dist/form/validation/validators/min-files.d.ts +26 -0
  21. package/dist/form/validation/validators/past-date.d.ts +1 -1
  22. package/dist/form/validation/validators/pattern.d.ts +1 -1
  23. package/dist/form/validation/validators/phone.d.ts +1 -1
  24. package/dist/form/validation/validators/url.d.ts +1 -1
  25. package/dist/form/validation-schema.d.ts +93 -0
  26. package/dist/index.js +352 -454
  27. package/dist/signal-node-registry-tiwel-TV.js +11 -0
  28. package/dist/state/behaviors-value.d.ts +3 -3
  29. package/dist/validation.d.ts +2 -0
  30. package/dist/validation.js +115 -0
  31. package/dist/validators.js +196 -65
  32. package/llms.txt +1203 -582
  33. package/package.json +5 -1
  34. package/dist/behaviors-node-BMOI2JJF.js +0 -26
  35. package/dist/form/validate-model-core.d.ts +0 -72
  36. package/dist/form/validate-model.d.ts +0 -27
@@ -38,4 +38,4 @@ export interface PhoneValidatorOptions extends ValidateOptions {
38
38
  * },
39
39
  * ```
40
40
  */
41
- export declare function phone<TForm = unknown, TField extends string | undefined = string>(options?: PhoneValidatorOptions): Validator<TForm, TField>;
41
+ export declare function phone<TForm = unknown, TField extends string | null | undefined = string>(options?: PhoneValidatorOptions): Validator<TForm, TField>;
@@ -40,4 +40,4 @@ export interface UrlValidatorOptions extends ValidateOptions {
40
40
  * },
41
41
  * ```
42
42
  */
43
- export declare function url<TForm = unknown, TField extends string | undefined = string>(options?: UrlValidatorOptions): Validator<TForm, TField>;
43
+ export declare function url<TForm = unknown, TField extends string | null | undefined = string>(options?: UrlValidatorOptions): Validator<TForm, TField>;
@@ -0,0 +1,93 @@
1
+ import { FormModel, ModelArray, PathAwareSignal, ValidationError } from '../index';
2
+ /**
3
+ * Синхронное правило поля типа `TField`. Проверяется ТОЛЬКО значение (`value`).
4
+ *
5
+ * Позиционные `scope`/`root` помечены `never` намеренно: так встроенные value-only фабрики
6
+ * (`required()`/`min()`/… — они `(value, model, root) => …`) и inline-правила `(value) => …`
7
+ * ОБА присваиваются в `Rule<TField>[]` без `any`, при этом сохраняется проверка типа поля
8
+ * (`validate(model.$.age, [email()])` подсветится — `email` ждёт `string`, поле `number`).
9
+ * На вызове раннер приводит правило к callable и передаёт `(value, model, model)`.
10
+ */
11
+ export type Rule<TField> = (value: TField, scope: never, root: never) => ValidationError | null;
12
+ /**
13
+ * Асинхронное правило поля. Получает `AbortSignal` для отмены устаревших ответов (быстрый повторный
14
+ * прогон той же схемы отменяет предыдущий). Сетевой сбой не должен блокировать — ловите и возвращайте `null`.
15
+ */
16
+ export type AsyncRule<TField> = (value: TField, ctx: {
17
+ signal: AbortSignal;
18
+ }) => Promise<ValidationError | null>;
19
+ /** Схема валидации — обычная функция над (под)моделью. First-class значение (можно `apply`/тестировать/переиспользовать). */
20
+ export type ValidationSchema<T> = (ctx: {
21
+ model: FormModel<T>;
22
+ }) => void;
23
+ /**
24
+ * Синхронные правила поля.
25
+ *
26
+ * @example
27
+ * ```ts
28
+ * validate(model.$.loanAmount, [required({ message: 'Сумма' }), min(50000)]);
29
+ * ```
30
+ */
31
+ export declare function validate<TField>(sig: PathAwareSignal<TField>, rules: Rule<TField>[]): void;
32
+ /**
33
+ * Асинхронные правила поля (зеркалит движковое разделение `validators` / `asyncValidators`).
34
+ * Раннер дожидается их и прокидывает `AbortSignal` для отмены устаревших ответов.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * validateAsync(model.$.username, [async (v, { signal }) => {
39
+ * const r = await fetch(`/api/free?u=${v}`, { signal });
40
+ * return (await r.json()).free ? null : { code: 'taken', message: 'Занято' };
41
+ * }]);
42
+ * ```
43
+ */
44
+ export declare function validateAsync<TField>(sig: PathAwareSignal<TField>, rules: AsyncRule<TField>[]): void;
45
+ /**
46
+ * Условная валидация: правила внутри `cb` активны, только пока `cond()` истинно; иначе их поля
47
+ * ГАСЯТСЯ (пустой bucket → `setErrors([])`). Не трогает включение/сброс поля — это дело поведения (`enableWhen`).
48
+ */
49
+ export declare function validateWhen(cond: () => boolean, cb: () => void): void;
50
+ /**
51
+ * Cross-field правило: `fn` получает СНАПШОТ модели текущего scope (`model.get()`) и вешает ошибку на `sig`.
52
+ * Для элементов массива / под-моделей захватывайте нужный снапшот в замыкание (`const item = im.get()`),
53
+ * т.к. `fn` всегда получает модель ТЕКУЩЕГО scope (корень прогона), а не под-модель.
54
+ */
55
+ export declare function cross<TSnapshot>(sig: PathAwareSignal<unknown>, fn: (form: TSnapshot) => ValidationError | null): void;
56
+ /**
57
+ * Применить под-правила к КАЖДОМУ элементу текущего массива модели.
58
+ * `U extends object` — элементы должны быть под-моделями (объектами); для массива примитивов валидируйте лист напрямую.
59
+ */
60
+ export declare function each<U extends object>(arr: ModelArray<U>, itemFn: (item: FormModel<U>) => void): void;
61
+ /** Композиция под-схем в текущую (над той же моделью scope). Заменяет пошаговую группировку. */
62
+ export declare function apply<T>(...schemas: ValidationSchema<T>[]): void;
63
+ /**
64
+ * Тонкая identity-обёртка для типизации/discoverability (как `defineFormBehavior`). Возвращает схему как есть.
65
+ *
66
+ * @example
67
+ * ```ts
68
+ * export const step1 = defineValidationSchema<LoanForm>(({ model }) => {
69
+ * validate(model.$.loanAmount, [required(), min(50000)]);
70
+ * });
71
+ * ```
72
+ */
73
+ export declare function defineValidationSchema<T>(schema: ValidationSchema<T>): ValidationSchema<T>;
74
+ /**
75
+ * Провалидировать модель ЛЮБОЙ схемой (шаг или вся форма). Открывает ambient-окно на время
76
+ * синхронного прогона `schema`, дожидается async-правил, разносит ошибки по нодам формы и гасит
77
+ * поля, ставшие валидными. Возвращает `true`, если нет блокирующих ошибок (`severity:'warning'` не блокирует).
78
+ *
79
+ * Гашение — на пару (model, schema): `validateModel(model, step2)` и `validateModel(model, form)` не мешают
80
+ * друг другу. Устаревший прогон (быстрый повторный вызов той же (model, schema)) отменяется через `AbortSignal`
81
+ * и возвращает `false` (**fail-closed** — отменённому результату нельзя доверять для submit).
82
+ *
83
+ * ⚠️ `schema` должна быть СТАБИЛЬНОЙ ссылкой: отмена устаревших прогонов ключится по идентичности `schema`.
84
+ * Инлайн-стрелка (`validateModel(model, ({ model }) => …)`) каждый раз создаёт НОВЫЙ прогон без дедупликации —
85
+ * держите схемы в `const` / `defineValidationSchema`.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * const ok = await validateModel(model, step2Validation); // один шаг
90
+ * const all = await validateModel(model, formValidation); // вся форма
91
+ * ```
92
+ */
93
+ export declare function validateModel<T>(model: FormModel<T>, schema: ValidationSchema<T>): Promise<boolean>;