@reformer/core 9.1.1 → 10.0.0

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 +1198 -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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reformer/core",
3
- "version": "9.1.1",
3
+ "version": "10.0.0",
4
4
  "description": "Reactive form state management library for React with signals-based architecture",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,6 +23,10 @@
23
23
  "types": "./dist/behaviors.d.ts",
24
24
  "import": "./dist/behaviors.js"
25
25
  },
26
+ "./validation": {
27
+ "types": "./dist/validation.d.ts",
28
+ "import": "./dist/validation.js"
29
+ },
26
30
  "./validators": {
27
31
  "types": "./dist/validators.d.ts",
28
32
  "import": "./dist/validators.js"
@@ -1,26 +0,0 @@
1
- import { effect as o } from "@preact/signals-core";
2
- import { d as a } from "./behaviors-value-lCpqicfa.js";
3
- const s = /* @__PURE__ */ new WeakMap();
4
- function l(e, n) {
5
- s.set(e, n);
6
- }
7
- function f(e) {
8
- return s.get(e);
9
- }
10
- function u(e, n, r) {
11
- return o(() => {
12
- const i = n(), t = f(e);
13
- t && a(() => {
14
- i ? t.enable() : (t.disable(), r?.resetOnDisable && t.reset());
15
- });
16
- });
17
- }
18
- function g(e, n, r) {
19
- return u(e, () => !n(), r);
20
- }
21
- export {
22
- g as d,
23
- u as e,
24
- f as g,
25
- l as r
26
- };
@@ -1,72 +0,0 @@
1
- import { ValidationError } from './types/contracts';
2
- import { FormSchemaNode } from './types/schema-node';
3
- import { FormModel, PathAwareSignal } from '../state/types';
4
- /**
5
- * Валидатор слоя **данных**. `value` — значение поля; `model` — ближайший scope (под-модель элемента
6
- * массива или корень); `root` — корневая модель.
7
- *
8
- * Отличие от {@link Validator}: 2-й/3-й аргументы — сами данные ({@link FormModel}/scope), а не
9
- * `FormProxy`-узлы формы. Оба совместимы с полем `validators` узла схемы (см. {@link SchemaValidator}).
10
- *
11
- * @group Model
12
- */
13
- export type ModelValidator<TValue = unknown, TModel = unknown, TRoot = unknown> = (value: TValue, model: TModel, root: TRoot) => ValidationError | null | Promise<ValidationError | null>;
14
- /**
15
- * Результат валидации: ошибки по пути поля.
16
- *
17
- * @group Model
18
- */
19
- export interface ModelValidationResult {
20
- valid: boolean;
21
- /** Ключ — путь поля (`'coBorrowers.0.relationship'`). Только поля с ошибками. */
22
- errors: Record<string, ValidationError[]>;
23
- }
24
- export interface FieldTask {
25
- signal: PathAwareSignal<unknown>;
26
- validators: ModelValidator[];
27
- scope: unknown;
28
- }
29
- /** Результат обхода схемы: что валидировать и что очистить. */
30
- export interface CollectResult {
31
- /** Активные поля с валидаторами (прогоняются). */
32
- tasks: FieldTask[];
33
- /** Сигналы полей в ВЫКЛЮЧЕННЫХ ветках — их ошибки нужно очистить (`setErrors([])`). */
34
- clearSignals: PathAwareSignal<unknown>[];
35
- }
36
- /** Один обход схемы → задачи (активные) + сигналы на очистку (выключенные ветки). */
37
- export declare function collect(model: unknown, schema: unknown): CollectResult;
38
- /**
39
- * Есть ли среди собранных ошибок блокирующие. Ошибка с `severity: 'warning'` показывается,
40
- * но НЕ блокирует submit (см. {@link ValidationError.severity} — 'warning' allows submission),
41
- * поэтому `valid` выводится из наличия блокирующих ошибок, а не из общего количества ошибок.
42
- */
43
- export declare const hasBlockingErrors: (errors: Record<string, ValidationError[]>) => boolean;
44
- /**
45
- * Синхронная headless-валидация данных. Асинхронные валидаторы пропускаются.
46
- *
47
- * @group Model
48
- * @param model - Модель данных ({@link FormModel}), из сигналов которой читаются значения полей.
49
- * @param schema - Единая схема формы (дерево узлов с `value`/`validators`, `{ when, children }`,
50
- * секциями массивов). Обходится один раз для сбора активных полей.
51
- * @returns {@link ModelValidationResult} — `valid` + ошибки по пути поля (без async-валидаторов).
52
- *
53
- * @example Быстрая синхронная проверка (например, для gate «можно ли перейти на след. шаг»)
54
- * ```typescript
55
- * const res = validateModelSync(model, schema);
56
- * if (!res.valid) console.log(res.errors); // { 'email': [{ code, message }], ... }
57
- * ```
58
- */
59
- export declare function validateModelSync<T>(model: FormModel<T>, schema: FormSchemaNode): ModelValidationResult;
60
- /**
61
- * Headless-валидация данных (sync + async). Работает без UI/нод.
62
- *
63
- * @group Model
64
- * @example
65
- * ```typescript
66
- * const res = await validateModel(model, schema);
67
- * if (!res.valid) console.log(res.errors); // { 'email': [{ code, message }], ... }
68
- * ```
69
- */
70
- export declare function validateModel<T>(model: FormModel<T>, schema: FormSchemaNode): Promise<ModelValidationResult>;
71
- /** Прогон задач (sync + async): возвращает ошибки по пути. */
72
- export declare function runTasks(tasks: FieldTask[], model: unknown): Promise<Record<string, ValidationError[]>>;
@@ -1,27 +0,0 @@
1
- import { FormSchemaNode } from './types/schema-node';
2
- import { FormModel } from '../state/types';
3
- import { ModelValidationResult } from './validate-model-core';
4
- export { validateModel, validateModelSync } from './validate-model-core';
5
- export type { ModelValidator, ModelValidationResult } from './validate-model-core';
6
- /**
7
- * In-form валидация: прогоняет {@link validateModel} и роутит ошибки в ноды формы
8
- * (через реестр сигнал→нода): `node.setErrors(errors[path] ?? [])` — заодно очищает прошедшие поля
9
- * И поля выключенных веток (`{ when, children }` с ложным условием). Дерево обходится ОДИН раз.
10
- *
11
- * @group Model
12
- * @param model - Модель данных ({@link FormModel}) — источник значений полей.
13
- * @param schema - Единая схема формы (та же, что передавалась в `createForm`).
14
- * @returns {@link ModelValidationResult} — `valid` + ошибки по пути поля; побочный эффект — ошибки
15
- * разведены по нодам формы.
16
- * @remarks Поля, не материализованные в форме (элементы массива — строятся per-item), не роутятся
17
- * в родительскую форму; их ошибки доступны в возвращаемом результате по пути.
18
- *
19
- * @example Валидация перед submit (ошибки показываются в UI автоматически)
20
- * ```typescript
21
- * const form = createForm({ model, schema });
22
- * form.touchAll();
23
- * const res = await validateFormModel(model, schema);
24
- * if (res.valid) await api.save(model.get());
25
- * ```
26
- */
27
- export declare function validateFormModel<T>(model: FormModel<T>, schema: FormSchemaNode): Promise<ModelValidationResult>;