@reformer/core 7.0.0-beta.1 → 7.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 (40) hide show
  1. package/dist/core/factories/node-factory.d.ts +2 -1
  2. package/dist/core/model/behaviors.d.ts +13 -1
  3. package/dist/core/model/validate-model.d.ts +22 -0
  4. package/dist/core/nodes/field-node.d.ts +3 -3
  5. package/dist/core/nodes/group-node.d.ts +3 -5
  6. package/dist/core/nodes/model-array-node.d.ts +38 -0
  7. package/dist/core/types/validation-schema.d.ts +8 -2
  8. package/dist/core/utils/create-form.d.ts +83 -18
  9. package/dist/core/utils/derived-registry.d.ts +41 -2
  10. package/dist/core/utils/index.d.ts +0 -4
  11. package/dist/core/utils/signal-node-registry.d.ts +38 -4
  12. package/dist/core/validation/validators/email.d.ts +14 -4
  13. package/dist/core/validation/validators/future-date.d.ts +14 -4
  14. package/dist/core/validation/validators/index.d.ts +2 -1
  15. package/dist/core/validation/validators/integer.d.ts +13 -4
  16. package/dist/core/validation/validators/is-date.d.ts +14 -4
  17. package/dist/core/validation/validators/is-number.d.ts +15 -5
  18. package/dist/core/validation/validators/max-age.d.ts +16 -4
  19. package/dist/core/validation/validators/max-date.d.ts +16 -4
  20. package/dist/core/validation/validators/max-length.d.ts +18 -4
  21. package/dist/core/validation/validators/max.d.ts +15 -6
  22. package/dist/core/validation/validators/min-age.d.ts +16 -4
  23. package/dist/core/validation/validators/min-date.d.ts +16 -4
  24. package/dist/core/validation/validators/min-length.d.ts +18 -4
  25. package/dist/core/validation/validators/min.d.ts +15 -6
  26. package/dist/core/validation/validators/multiple-of.d.ts +15 -4
  27. package/dist/core/validation/validators/non-negative.d.ts +13 -4
  28. package/dist/core/validation/validators/non-zero.d.ts +13 -4
  29. package/dist/core/validation/validators/past-date.d.ts +14 -3
  30. package/dist/core/validation/validators/pattern.d.ts +24 -4
  31. package/dist/core/validation/validators/phone.d.ts +28 -4
  32. package/dist/core/validation/validators/required.d.ts +16 -5
  33. package/dist/core/validation/validators/url.d.ts +30 -7
  34. package/dist/hooks/useFormControlValue.d.ts +15 -10
  35. package/dist/index.js +562 -896
  36. package/llms.txt +2567 -2854
  37. package/package.json +1 -1
  38. package/dist/core/utils/abstract-registry.d.ts +0 -74
  39. package/dist/core/utils/form-observer.d.ts +0 -176
  40. package/dist/core/utils/registry-stack.d.ts +0 -69
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reformer/core",
3
- "version": "7.0.0-beta.1",
3
+ "version": "7.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",
@@ -1,74 +0,0 @@
1
- import { RegistryStack } from './registry-stack';
2
- /**
3
- * Базовый класс для реестров (BehaviorRegistry, ValidationRegistry).
4
- *
5
- * Реализует паттерн Template Method для управления регистрацией:
6
- * `beginRegistration()` → `onBeginRegistration()`, `endRegistration()` → `onEndRegistration()`.
7
- *
8
- * @typeParam TRegistration - Тип регистрируемых элементов.
9
- *
10
- * @example
11
- * ```typescript
12
- * import { AbstractRegistry } from '@reformer/core';
13
- *
14
- * class MyRegistry extends AbstractRegistry<{ name: string }> {
15
- * protected onEndRegistration(items: { name: string }[]) {
16
- * console.log('Registered', items.length);
17
- * }
18
- * }
19
- * ```
20
- */
21
- export declare abstract class AbstractRegistry<TRegistration> {
22
- /** Флаг активной регистрации */
23
- protected isRegistering: boolean;
24
- /** Массив зарегистрированных элементов */
25
- protected registrations: TRegistration[];
26
- /**
27
- * Получить стек для конкретного класса реестра
28
- * Создает новый стек если не существует
29
- *
30
- * @param ctor - Конструктор класса реестра
31
- * @returns RegistryStack для данного класса
32
- */
33
- protected static getStack<T extends AbstractRegistry<any>>(ctor: new (...args: any[]) => T): RegistryStack<T>;
34
- /**
35
- * Получить текущий активный реестр из стека
36
- * Должен быть переопределен в наследниках как static метод
37
- *
38
- * @param ctor - Конструктор класса реестра
39
- * @returns Текущий активный реестр или null
40
- */
41
- protected static getCurrentFromStack<T extends AbstractRegistry<any>>(ctor: new (...args: any[]) => T): T | null;
42
- /**
43
- * Начать регистрацию
44
- *
45
- * Помещает this в global stack для изоляции форм
46
- * Вызывает hook onBeginRegistration()
47
- */
48
- beginRegistration(): void;
49
- /**
50
- * Проверить, активна ли регистрация
51
- */
52
- isActive(): boolean;
53
- /**
54
- * Получить зарегистрированные элементы
55
- */
56
- getRegistrations(): TRegistration[];
57
- /**
58
- * Hook: вызывается в начале регистрации
59
- * Может быть переопределен в наследниках для инициализации
60
- */
61
- protected onBeginRegistration(): void;
62
- /**
63
- * Завершить регистрацию и извлечь из стека
64
- *
65
- * @param registryName - Имя реестра для отладки
66
- */
67
- protected completeRegistration(registryName: string): void;
68
- /**
69
- * Отменить регистрацию без применения
70
- *
71
- * @param registryName - Имя реестра для отладки
72
- */
73
- cancelRegistration(registryName: string): void;
74
- }
@@ -1,176 +0,0 @@
1
- import { FormFields, FormValue, FieldStatus, ValidationError } from '../types';
2
- /**
3
- * Тип события изменения в форме
4
- */
5
- export type FormChangeType = 'value' | 'status' | 'errors' | 'touched' | 'dirty';
6
- /**
7
- * Событие изменения в форме
8
- */
9
- export interface FormChangeEvent {
10
- /** Тип изменения */
11
- type: FormChangeType;
12
- /** Путь к полю */
13
- path: string;
14
- /** Timestamp события */
15
- timestamp: number;
16
- /** Старое значение */
17
- oldValue?: unknown;
18
- /** Новое значение */
19
- newValue: unknown;
20
- }
21
- /**
22
- * Интерфейс узла формы для observer
23
- */
24
- export interface ObservableFormNode {
25
- value: {
26
- value: FormValue;
27
- };
28
- status: {
29
- value: FieldStatus;
30
- };
31
- errors: {
32
- value: ValidationError[];
33
- };
34
- touched: {
35
- value: boolean;
36
- };
37
- dirty: {
38
- value: boolean;
39
- };
40
- }
41
- /**
42
- * Интерфейс формы для observer
43
- */
44
- export interface ObservableForm<T extends FormFields> {
45
- value: {
46
- value: T;
47
- };
48
- status: {
49
- value: FieldStatus;
50
- };
51
- errors: {
52
- value: ValidationError[];
53
- };
54
- touched: {
55
- value: boolean;
56
- };
57
- dirty: {
58
- value: boolean;
59
- };
60
- getFieldByPath(path: string): ObservableFormNode | undefined;
61
- }
62
- /**
63
- * Callback для обработки событий изменения
64
- */
65
- export type FormChangeCallback = (event: FormChangeEvent) => void;
66
- /**
67
- * Опции для FormObserver
68
- */
69
- export interface FormObserverOptions {
70
- /** Включить логирование в консоль (по умолчанию true в DEV) */
71
- enableLogging?: boolean;
72
- /** Фильтр типов событий */
73
- eventTypes?: FormChangeType[];
74
- /** Фильтр путей полей (regex или массив) */
75
- pathFilter?: RegExp | string[];
76
- }
77
- /**
78
- * FormObserver - мониторинг изменений в форме
79
- *
80
- * Полезен для:
81
- * - Отладки сложных форм
82
- * - Логирования изменений для аудита
83
- * - Синхронизации с внешними системами
84
- *
85
- * @example
86
- * ```typescript
87
- * const observer = new FormObserver(form, {
88
- * enableLogging: true,
89
- * eventTypes: ['value', 'errors']
90
- * });
91
- *
92
- * // Подписка на события
93
- * const unsubscribe = observer.subscribe((event) => {
94
- * console.log(`${event.type} at ${event.path}:`, event.newValue);
95
- * });
96
- *
97
- * // Включить трассировку
98
- * const disposeTracing = observer.enableTracing();
99
- *
100
- * // Cleanup
101
- * unsubscribe();
102
- * disposeTracing();
103
- * ```
104
- */
105
- export declare class FormObserver<T extends FormFields> {
106
- private readonly form;
107
- private listeners;
108
- private disposers;
109
- private options;
110
- /**
111
- * @param form - Форма для наблюдения
112
- * @param options - Опции observer
113
- */
114
- constructor(form: ObservableForm<T>, options?: FormObserverOptions);
115
- /**
116
- * Подписаться на события изменения
117
- *
118
- * @param callback - Функция обработки события
119
- * @returns Функция отписки
120
- *
121
- * @example
122
- * ```typescript
123
- * const unsubscribe = observer.subscribe((event) => {
124
- * // Отправить событие в analytics
125
- * analytics.track('form_change', event);
126
- * });
127
- * ```
128
- */
129
- subscribe(callback: FormChangeCallback): () => void;
130
- /**
131
- * Включить трассировку формы
132
- *
133
- * Подписывается на изменения основных сигналов формы
134
- * и вызывает listeners при каждом изменении
135
- *
136
- * @returns Функция для отключения трассировки
137
- *
138
- * @example
139
- * ```typescript
140
- * const dispose = observer.enableTracing();
141
- *
142
- * // Позже, для отключения
143
- * dispose();
144
- * ```
145
- */
146
- enableTracing(): () => void;
147
- /**
148
- * Наблюдать за конкретным полем
149
- *
150
- * @param path - Путь к полю
151
- * @returns Функция для отключения наблюдения
152
- *
153
- * @example
154
- * ```typescript
155
- * // Наблюдать за полем email
156
- * const dispose = observer.watchField('email');
157
- * ```
158
- */
159
- watchField(path: string): () => void;
160
- /**
161
- * Отправить событие всем listeners
162
- */
163
- private emit;
164
- /**
165
- * Проверить, нужно ли отслеживать тип события
166
- */
167
- private shouldTrack;
168
- /**
169
- * Проверить, соответствует ли путь фильтру
170
- */
171
- private matchesPathFilter;
172
- /**
173
- * Очистить все подписки и disposers
174
- */
175
- dispose(): void;
176
- }
@@ -1,69 +0,0 @@
1
- /**
2
- * Generic Registry Stack - утилита для управления стеком регистрации
3
- *
4
- * Используется ValidationRegistry и BehaviorRegistry для tracking активного контекста.
5
- * Устраняет дублирование кода между параллельными системами.
6
- *
7
- * @template T - Тип элементов в стеке (ValidationRegistry или BehaviorRegistry)
8
- *
9
- * @internal
10
- *
11
- * @example
12
- * ```typescript
13
- * class ValidationRegistry {
14
- * private static registryStack = new RegistryStack<ValidationRegistry>();
15
- *
16
- * static getCurrent() {
17
- * return ValidationRegistry.registryStack.getCurrent();
18
- * }
19
- *
20
- * beginRegistration() {
21
- * ValidationRegistry.registryStack.push(this);
22
- * }
23
- *
24
- * endRegistration() {
25
- * ValidationRegistry.registryStack.verify(this, 'ValidationRegistry');
26
- * }
27
- * }
28
- * ```
29
- */
30
- export declare class RegistryStack<T> {
31
- private stack;
32
- /**
33
- * Добавить элемент в стек
34
- * @param item - Элемент для добавления
35
- */
36
- push(item: T): void;
37
- /**
38
- * Извлечь элемент из стека
39
- * @returns Извлеченный элемент или undefined если стек пуст
40
- */
41
- pop(): T | undefined;
42
- /**
43
- * Получить текущий элемент (вершину стека) без извлечения
44
- * @returns Текущий элемент или null если стек пуст
45
- */
46
- getCurrent(): T | null;
47
- /**
48
- * Извлечь элемент из стека с проверкой
49
- * Выводит предупреждение в DEV режиме если извлеченный элемент не совпадает с ожидаемым
50
- *
51
- * @param expected - Ожидаемый элемент
52
- * @param name - Имя реестра для отладки (например, 'ValidationRegistry')
53
- */
54
- verify(expected: T, name: string): void;
55
- /**
56
- * Получить длину стека
57
- * @returns Количество элементов в стеке
58
- */
59
- get length(): number;
60
- /**
61
- * Проверить, пуст ли стек
62
- * @returns true если стек пуст
63
- */
64
- isEmpty(): boolean;
65
- /**
66
- * Очистить стек
67
- */
68
- clear(): void;
69
- }