@pravosleva/reactive-engine 0.4.2-beta → 1.0.1-beta

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 (141) hide show
  1. package/README.md +29 -0
  2. package/dist/AbstractService.cjs +2 -0
  3. package/dist/AbstractService.cjs.map +1 -0
  4. package/dist/AbstractService.mjs +24 -0
  5. package/dist/AbstractService.mjs.map +1 -0
  6. package/dist/BaseREServiceEnhanced.cjs +2 -0
  7. package/dist/BaseREServiceEnhanced.cjs.map +1 -0
  8. package/dist/BaseREServiceEnhanced.mjs +12 -0
  9. package/dist/BaseREServiceEnhanced.mjs.map +1 -0
  10. package/dist/_react-bindings.d.ts +17 -0
  11. package/dist/_react-bindings.d.ts.map +1 -0
  12. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  13. package/dist/core/AbstractService.d.ts +11 -0
  14. package/dist/core/AbstractService.d.ts.map +1 -0
  15. package/dist/core/BaseREServiceEnhanced.d.ts +7 -0
  16. package/dist/core/BaseREServiceEnhanced.d.ts.map +1 -0
  17. package/dist/core/core.d.ts +282 -0
  18. package/dist/core/core.d.ts.map +1 -0
  19. package/dist/core/core.test.d.ts +2 -0
  20. package/dist/core/core.test.d.ts.map +1 -0
  21. package/dist/core/index.d.ts +5 -0
  22. package/dist/core/index.d.ts.map +1 -0
  23. package/dist/core/types.d.ts +92 -0
  24. package/dist/core/types.d.ts.map +1 -0
  25. package/dist/core.cjs +2 -0
  26. package/dist/core.cjs.map +1 -0
  27. package/dist/core.mjs +286 -0
  28. package/dist/core.mjs.map +1 -0
  29. package/dist/decorators/index.d.ts +6 -0
  30. package/dist/decorators/index.d.ts.map +1 -0
  31. package/dist/decorators/withCache/index.d.ts +2 -0
  32. package/dist/decorators/withCache/index.d.ts.map +1 -0
  33. package/dist/decorators/withCache/withCache.d.ts +13 -0
  34. package/dist/decorators/withCache/withCache.d.ts.map +1 -0
  35. package/dist/decorators/withCache/withCache.test.d.ts +2 -0
  36. package/dist/decorators/withCache/withCache.test.d.ts.map +1 -0
  37. package/dist/decorators/withDebounce/index.d.ts +2 -0
  38. package/dist/decorators/withDebounce/index.d.ts.map +1 -0
  39. package/dist/decorators/withDebounce/withDebounce.d.ts +12 -0
  40. package/dist/decorators/withDebounce/withDebounce.d.ts.map +1 -0
  41. package/dist/decorators/withDebounce/withDebounce.test.d.ts +2 -0
  42. package/dist/decorators/withDebounce/withDebounce.test.d.ts.map +1 -0
  43. package/dist/decorators/withLongPolling/index.d.ts +2 -0
  44. package/dist/decorators/withLongPolling/index.d.ts.map +1 -0
  45. package/dist/decorators/withLongPolling/withLongPolling.d.ts +28 -0
  46. package/dist/decorators/withLongPolling/withLongPolling.d.ts.map +1 -0
  47. package/dist/decorators/withLongPolling/withLongPolling.test.d.ts +2 -0
  48. package/dist/decorators/withLongPolling/withLongPolling.test.d.ts.map +1 -0
  49. package/dist/decorators/withThrottle/index.d.ts +2 -0
  50. package/dist/decorators/withThrottle/index.d.ts.map +1 -0
  51. package/dist/decorators/withThrottle/withThrottle.d.ts +12 -0
  52. package/dist/decorators/withThrottle/withThrottle.d.ts.map +1 -0
  53. package/dist/decorators/withThrottle/withThrottle.test.d.ts +2 -0
  54. package/dist/decorators/withThrottle/withThrottle.test.d.ts.map +1 -0
  55. package/dist/decorators/withThrottleAndCache/index.d.ts +2 -0
  56. package/dist/decorators/withThrottleAndCache/index.d.ts.map +1 -0
  57. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.d.ts +13 -0
  58. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.d.ts.map +1 -0
  59. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.test.d.ts +2 -0
  60. package/dist/decorators/withThrottleAndCache/withThrottleAndCache.test.d.ts.map +1 -0
  61. package/dist/index.cjs +1 -6
  62. package/dist/index.d.ts +2 -605
  63. package/dist/index.d.ts.map +1 -0
  64. package/dist/index.mjs +4 -541
  65. package/dist/react/ReactiveEngine4React.cjs +6 -0
  66. package/dist/react/ReactiveEngine4React.cjs.map +1 -0
  67. package/dist/react/ReactiveEngine4React.d.ts +27 -0
  68. package/dist/react/ReactiveEngine4React.d.ts.map +1 -0
  69. package/dist/react/ReactiveEngine4React.mjs +28 -0
  70. package/dist/react/ReactiveEngine4React.mjs.map +1 -0
  71. package/dist/react/core.react.test.d.ts +2 -0
  72. package/dist/react/core.react.test.d.ts.map +1 -0
  73. package/dist/react/createObserver.cjs +2 -0
  74. package/dist/react/createObserver.cjs.map +1 -0
  75. package/dist/react/createObserver.d.ts +70 -0
  76. package/dist/react/createObserver.d.ts.map +1 -0
  77. package/dist/react/createObserver.mjs +62 -0
  78. package/dist/react/createObserver.mjs.map +1 -0
  79. package/dist/react/createObserver.test.d.ts +2 -0
  80. package/dist/react/createObserver.test.d.ts.map +1 -0
  81. package/dist/react/hooks/FilteredCatalog.test.d.ts +2 -0
  82. package/dist/react/hooks/FilteredCatalog.test.d.ts.map +1 -0
  83. package/dist/react/hooks/index.cjs +1 -0
  84. package/dist/react/hooks/index.d.ts +4 -0
  85. package/dist/react/hooks/index.d.ts.map +1 -0
  86. package/dist/react/hooks/index.mjs +7 -0
  87. package/dist/react/hooks/types.d.ts +16 -0
  88. package/dist/react/hooks/types.d.ts.map +1 -0
  89. package/dist/react/hooks/useReactiveSubscription/index.cjs +1 -0
  90. package/dist/react/hooks/useReactiveSubscription/index.d.ts +2 -0
  91. package/dist/react/hooks/useReactiveSubscription/index.d.ts.map +1 -0
  92. package/dist/react/hooks/useReactiveSubscription/index.mjs +2 -0
  93. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs +2 -0
  94. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs.map +1 -0
  95. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts +10 -0
  96. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts.map +1 -0
  97. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs +14 -0
  98. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs.map +1 -0
  99. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts +2 -0
  100. package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts.map +1 -0
  101. package/dist/react/hooks/useReactiveValue/index.cjs +1 -0
  102. package/dist/react/hooks/useReactiveValue/index.d.ts +2 -0
  103. package/dist/react/hooks/useReactiveValue/index.d.ts.map +1 -0
  104. package/dist/react/hooks/useReactiveValue/index.mjs +2 -0
  105. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs +2 -0
  106. package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs.map +1 -0
  107. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts +16 -0
  108. package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts.map +1 -0
  109. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs +12 -0
  110. package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs.map +1 -0
  111. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts +2 -0
  112. package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts.map +1 -0
  113. package/dist/react/hooks/useReactiveValue0/index.cjs +1 -0
  114. package/dist/react/hooks/useReactiveValue0/index.d.ts +2 -0
  115. package/dist/react/hooks/useReactiveValue0/index.d.ts.map +1 -0
  116. package/dist/react/hooks/useReactiveValue0/index.mjs +2 -0
  117. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs +2 -0
  118. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs.map +1 -0
  119. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts +15 -0
  120. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts.map +1 -0
  121. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs +20 -0
  122. package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs.map +1 -0
  123. package/dist/react/index.cjs +1 -0
  124. package/dist/react/index.d.ts +4 -0
  125. package/dist/react/index.d.ts.map +1 -0
  126. package/dist/react/index.mjs +7 -0
  127. package/dist/react/types.d.ts +2 -0
  128. package/dist/react/types.d.ts.map +1 -0
  129. package/dist/utils/getExtractedValues.cjs +2 -0
  130. package/dist/utils/getExtractedValues.cjs.map +1 -0
  131. package/dist/utils/getExtractedValues.d.ts +6 -0
  132. package/dist/utils/getExtractedValues.d.ts.map +1 -0
  133. package/dist/utils/getExtractedValues.mjs +21 -0
  134. package/dist/utils/getExtractedValues.mjs.map +1 -0
  135. package/dist/utils/index.d.ts +2 -0
  136. package/dist/utils/index.d.ts.map +1 -0
  137. package/package.json +17 -3
  138. package/dist/index.cjs.map +0 -1
  139. package/dist/index.iife.js +0 -6
  140. package/dist/index.iife.js.map +0 -1
  141. package/dist/index.mjs.map +0 -1
package/dist/index.d.ts CHANGED
@@ -1,605 +1,2 @@
1
- import { default as default_2 } from 'react';
2
- import { useEffect } from 'react';
3
- import { useState } from 'react';
4
-
5
- export declare abstract class AbstractService {
6
- protected engine: ReactiveEngine;
7
- constructor(engine: ReactiveEngine);
8
- protected createNumericSignal(val: number, name: string): Signal<number>;
9
- protected createComputed<T>(fn: () => T): Computed<T>;
10
- protected createSignal<T>(val: T, name?: string): Signal<T>;
11
- protected onInit(): void;
12
- }
13
-
14
- export declare const BaseREService: typeof AbstractService;
15
-
16
- export declare abstract class BaseREServiceEnhanced {
17
- protected engine: ReactiveEngine;
18
- constructor(engine: ReactiveEngine);
19
- protected onInit(): void;
20
- }
21
-
22
- declare interface CacheOptions {
23
- /** Время жизни кэша в миллисекундах. По умолчанию 5 минут (300000 мс) */
24
- ttl?: number;
25
- }
26
-
27
- export declare type CleanupFn = () => void;
28
-
29
- /**
30
- * Интерфейс для вычисляемого значения.
31
- * @template T
32
- * @interface Computed<T>
33
- */
34
- export declare interface Computed<T> {
35
- /**
36
- * Только читаемое значение вычисляемого значения.
37
- * @type {T}
38
- */
39
- readonly value: T;
40
- /**
41
- * Подписка на изменение вычисляемого значения.
42
- * @function subscribe
43
- * @param {Function} cb - Коллбек функция для обработки изменения.
44
- * @returns {CleanupFn} - Функция для очистки подписки.
45
- */
46
- subscribe: (cb: (val: T) => void) => CleanupFn;
47
- /**
48
- * Принудительное уничтожение вычисляемого значения и его эффекта для предотвращения утечек памяти.
49
- */
50
- destroy: () => void;
51
- }
52
-
53
- /**
54
- * Функция высшего порядка (HOC) для автоматического отслеживания сигналов внутри React-компонента.
55
- * Полный аналог `observer` из MobX.
56
- *
57
- * @template P - Объект пропсов оборачиваемого компонента.
58
- * @param engine - Экземпляр реактивного движка {@link ReactiveEngine}.
59
- * @returns Функция-декоратор, преобразующая обычный компонент в реактивный.
60
- *
61
- * @example
62
- * ```tsx
63
- * import { createObserver } from '@pravosleva/reactive-engine';
64
- * import { engine } from '~/utils/ReactiveEngine'; // Ваш локальный экземпляр движка
65
- *
66
- * const observer = createObserver(engine);
67
- * const counterSignal = engine.signal(0);
68
- *
69
- * // Компонент автоматически перерисуется при изменении counterSignal.value
70
- * export const CounterView = observer(() => {
71
- * return (
72
- * <div>
73
- * <p>Счетчик: {counterSignal.value}</p>
74
- * <button onClick={() => counterSignal.value++}>+1</button>
75
- * </div>
76
- * );
77
- * });
78
- * ```
79
- *
80
- * @source
81
- */
82
- export declare const createObserver: (engine: ReactiveEngine) => <P extends object>(Component: default_2.ComponentType<P>) => default_2.ComponentType<P>;
83
-
84
- /**
85
- * Фабрика для создания инлайн-компонента `<Observer>`.
86
- *
87
- * @param engine - Экземпляр реактивного движка {@link ReactiveEngine}.
88
- * @returns Специальный React-компонент для точечной изоляции реактивных обновлений в JSX.
89
- *
90
- * @example
91
- * ```tsx
92
- * import { createObserverComponent, engine } from '@pravosleva/reactive-engine';
93
- *
94
- * const Observer = createObserverComponent(engine);
95
- * const priceSignal = engine.signal(100);
96
- *
97
- * export const MyComponent = () => {
98
- * return (
99
- * <div>
100
- * <h1>Статический тяжелый контент (не перерисовывается)</h1>
101
- * <Observer>
102
- * {() => <span>Живая цена: {priceSignal.value}</span>}
103
- * </Observer>
104
- * </div>
105
- * );
106
- * };
107
- * ```
108
- */
109
- export declare const createObserverComponent: (engine: ReactiveEngine) => ({ children }: ObserverProps) => any;
110
-
111
- declare interface DebounceOptions {
112
- /** Задержка в миллисекундах. По умолчанию 300 мс */
113
- delay?: number;
114
- }
115
-
116
- export declare type EffectFn = () => CleanupFn | void;
117
-
118
- export declare type Factory<T> = (engine: ReactiveEngine) => T;
119
-
120
- export declare interface IEffect {
121
- run: () => void;
122
- label?: string;
123
- cleanups: Set<CleanupFn>;
124
- }
125
-
126
- /**
127
- * Функция для очистки эффекта.
128
- * @typedef {() => void} CleanupFn
129
- */
130
- /**
131
- * Функция эффекта, которая может возвращать функцию очистки.
132
- * @typedef {() => CleanupFn | void} EffectFn
133
- */
134
- /**
135
- * Токен для зависимости.
136
- * @typedef {string | symbol | { new(engine: ReactiveEngine, ...args: any[]): T }} Token<T>
137
- */
138
- /**
139
- * Фабрика для создания сервиса.
140
- * @template T
141
- * @typedef {(engine: ReactiveEngine) => T} Factory<T>
142
- */
143
- /**
144
- * Интерфейс для эффекта.
145
- * @interface IEffect
146
- */
147
- export declare interface IEffect {
148
- /**
149
- * Запуск эффекта.
150
- * @function run
151
- * @returns {void}
152
- */
153
- run: () => void;
154
- /**
155
- * Коллекция функций очистки.
156
- * @type {Set<CleanupFn>}
157
- */
158
- cleanups: Set<CleanupFn>;
159
- }
160
-
161
- declare interface LongPollingOptions {
162
- /** Коллбэк для инкремента реактивного тика (перехода на следующую итерацию поллинга) */
163
- onNextTick: () => void;
164
- /**
165
- * Коллбэк, вызываемый при возникновении сетевой ошибки.
166
- * Позволяет внешней системе узнать о сбое и текущем времени ожидания до следующей попытки.
167
- *
168
- * @param {number} delayMs - Текущая задержка Exponential Backoff в миллисекундах перед следующим запросом.
169
- * @param {() => void} onRetryScheduled - Коллбэк-триггер. Должен быть вызван один раз, чтобы
170
- * просигнализировать декоратору, что шаг зафиксирован и задержка для следующей ошибки может быть увеличена.
171
- */
172
- onError: (delayMs: number, onRetryScheduled: () => void) => void;
173
- /** Пауза перед открытием следующего соединения в миллисекундах. По умолчанию 500 мс */
174
- delay?: number;
175
- /** Стартовая задержка Exponential Backoff в миллисекундах. По умолчанию 2000 мс */
176
- errorInitialDelay?: number;
177
- /** Потолок задержки Exponential Backoff в миллисекундах. По умолчанию 8000 мс */
178
- errorMaxDelay?: number;
179
- /** Внешний сигнал для жесткой остановки рекурсивных таймаутов */
180
- externalSignal?: AbortSignal;
181
- }
182
-
183
- declare interface ObservableItem<T> {
184
- readonly value: T;
185
- subscribe: (cb: (val: T) => void) => CleanupFn;
186
- destroy?: () => void;
187
- }
188
-
189
- declare interface ObservableItem_2<T> {
190
- readonly value: T;
191
- subscribe: (cb: (val: T) => void) => CleanupFn;
192
- destroy?: () => void;
193
- }
194
-
195
- /**
196
- * Свойства для инлайн-компонента {@link Observer}.
197
- */
198
- declare interface ObserverProps {
199
- /**
200
- * Функция-рендер, возвращающая JSX-разметку.
201
- * Сигналы, прочитанные внутри этого коллбека, будут автоматически отслеживаться.
202
- */
203
- children: () => default_2.ReactNode;
204
- }
205
-
206
- /**
207
- * Класс реактивного движка.
208
- */
209
- export declare class ReactiveEngine {
210
- private activeEffect;
211
- private isBatching;
212
- private pendingEffects;
213
- private services;
214
- private factories;
215
- private proxyCache;
216
- private allEffects;
217
- /**
218
- * Коллбек для уведомления об изменении сигнала.
219
- * Использование unknown вместо any гарантирует безопасную работу с типами prev/next.
220
- */
221
- onSignalChange?: (name: string, next: unknown, prev: unknown) => void;
222
- private reactAdapters;
223
- /**
224
- * DI: Регистрация зависимости.
225
- * @template T
226
- * @function provide
227
- * @param {Token<T>} token - Токен для зависимости.
228
- * @param {T | Factory<T>} valueOrFactory - Значение или фабрика для создания сервиса.
229
- * @returns {void}
230
- * @source
231
- */
232
- provide<T>(token: Token<T>, valueOrFactory: T | Factory<T>): void;
233
- /**
234
- * DI: Инъекция; Получение сервиса по токену.
235
- * @template T
236
- * @function inject
237
- * @param {Token<T>} token - Токен для зависимости.
238
- * @returns {T} - Сервис.
239
- * @source
240
- */
241
- inject<T>(token: Token<T>): T;
242
- /**
243
- * Создание сигнала.
244
- * @template T
245
- * @function signal
246
- * @param {T} initialValue - Начальное значение сигнала.
247
- * @param {string | SignalOptions<T>} [optionsOrName] - Имя или опции сигнала.
248
- * @returns {Signal<T>} - Сигнал.
249
- * @source
250
- */
251
- signal<T>(initialValue: T, optionsOrName?: string | SignalOptions<T>): Signal<T>;
252
- /**
253
- * Создание эффекта.
254
- * @function effect
255
- * @param {EffectFn} fn - Функция эффекта.
256
- * @param {string} [label] - Необязательная метка для логирования и отладки.
257
- * @returns {CleanupFn} - Функция для очистки эффекта.
258
- * @source
259
- */
260
- effect(fn: EffectFn, label?: string): CleanupFn;
261
- private computedCache;
262
- private cleanupRegistry;
263
- /**
264
- * Создание вычисляемого значения.
265
- * @template T
266
- * @function computed
267
- * @param {Function} fn - Функция для вычисления значения.
268
- * @param {string} [signalName] - Имя сигнала.
269
- * @returns {Computed<T>} - Вычисляемое значение с методом destroy.
270
- * @source
271
- */
272
- computed<T>(fn: () => T, signalName?: string): Computed<T>;
273
- /**
274
- * Создание реактивного объекта (Proxy).
275
- * @template T
276
- * @function reactive
277
- * @param {T} target - Целевой объект для проксирования.
278
- * @param {string} [name] - Имя проксируемого объекта.
279
- * @returns {T} - Реактивный объект.
280
- * @source
281
- */
282
- reactive<T extends object>(target: T, name?: string): T;
283
- /**
284
- * Группировка изменений. (Оставил для обратной совместимости)
285
- * @function batch
286
- * @param {Function} fn - Функция для выполнения в группе.
287
- * @returns {void}
288
- * @source
289
- */
290
- batch(fn: () => void): void;
291
- /**
292
- * Вспомогательная функция для задержки (sleep), чувствительная к AbortSignal
293
- *
294
- * Вызов new DOMException('Aborted', 'AbortError') гарантирует,
295
- * что ваша кастомная пауза между ретраями this.delay притворяется для движка JavaScript
296
- * точно таким же нативным процессом отмены, как и fetch().
297
- * Это делает реактивное ядро бесшовным и избавляет от необходимости
298
- * писать кучу разных проверок под каждый тип ошибки.
299
- */
300
- private delay;
301
- /**
302
- * Создание асинхронного ресурса. Типы на входе: <T - формат ответа, S - источник изменений (сигнал либо computed-кортеж из зачений сигналов через конструкцию `.value`)>
303
- *
304
- * Explained 👉 {@link https://github.com/garage-13/reactive-engine/blob/main/README_EN.md#1-async-resources-dependent-on-multiple-signals}
305
- *
306
- * @template T, S
307
- * @see {@link https://github.com/garage-13/reactive-engine/blob/main/examples/200-resource/Example200.tsx Реализация базового компонента Example200}
308
- * @see {@link https://github.com/garage-13/reactive-engine/blob/main/examples/201-multi-resource/service.secondary.ts Сложный пример зависимости ресурсов через computed}
309
- * @function resource
310
- * @param {Function} fetcher - Асинхронная функция для загрузки данных.
311
- * @param {{ value: S }} [source] - Источник данных.
312
- * @param {string | ResourceOptions<T>} [optionsOrName] - Имя сигнала или объект конфигурации `{ name: string; validate: (res) => boolean | string; resetDataOnSourceChange?: boolean }`.
313
- * @returns {Resource<T>} - Асинхронный ресурс.
314
- *
315
- * @example
316
- * // Базовый вызов со строкой (обратная совместимость):
317
- * const res = engine.resource(fetcher, source, 'my-resource-name');
318
- *
319
- * @example
320
- * // Современный вызов с валидацией ответа:
321
- * const res = engine.resource(fetcher, source, {
322
- * name: 'my-resource-name',
323
- * resetDataOnSourceChange: true, // true by default
324
- * responseValidate: (data) => !!data || 'Данные пусты', // Проверяйте формат в соотв. с дженериком
325
- * });
326
- *
327
- * @example
328
- * // (Экспериментальная фича)
329
- * // В теле fetcher можно выкинуть ошибку в виде
330
- * // `throw new Error('[THROW_CUSTOM_VALIDATION_ERROR_NO_RETRY=1][MESSAGE=Your msg]')`
331
- * // Причина: Особенности внутренней реализации определения харакрера ошибки и необходимость делать retry (если такая опция передана)
332
- * // Рекомендуем вместо этого использовать `validateBeforeFetch` в опциях при создании ресурса.
333
- * const res = engine.resource(
334
- * async (counterValue, abortSignal) => {
335
- * if (counterValue === 0)
336
- * throw new Error([
337
- * '[THROW_CUSTOM_VALIDATION_ERROR_NO_RETRY=1]', // Иначе запустится механизм retry (напр. по причине отсутствия сети, далее в этом же примере)
338
- * `[MESSAGE=Stop for count value ${counterValue} - excepted from fetcher fn body]`,
339
- * ].join(' '))
340
- * const res = await fetch(
341
- * [
342
- * `${BASE_API_URL}/profile/search`,
343
- * '?',
344
- * [
345
- * `counter=${counterValue}`,
346
- * '_responseDelay=2000',
347
- * ].join('&')
348
- * ].join(''),
349
- * { signal: abortSignal }
350
- * )
351
- * if (!res.ok) throw new Error(`HTTP error! status: ${res.status}`)
352
- * return res.json()
353
- * },
354
- * this.counter,
355
- * )
356
- * @source
357
- */
358
- resource<T, S = void>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, source?: {
359
- value: S;
360
- }, optionsOrName?: string | ResourceOptions<T, S>): Resource<T>;
361
- /**
362
- * Выполняет функцию без отслеживания зависимостей.
363
- * @template T
364
- * @function untrack
365
- * @param {Function} fn - Функция для выполнения.
366
- * @returns {T} - Результат выполнения функции.
367
- * @source
368
- */
369
- untrack<T>(fn: () => T): T;
370
- /**
371
- * Установка адаптеров React.
372
- * @function setReactAdapters
373
- * @param {Function} useState - Функция useState из React.
374
- * @param {Function} useEffect - Функция useEffect из React.
375
- * @returns {void}
376
- * @source
377
- */
378
- setReactAdapters(useState: typeof useState, useEffect: typeof useEffect): void;
379
- /**
380
- * Использование реактивного значения в React компоненте.
381
- * @template T
382
- * @function use
383
- * @param {{ value: T; subscribe: (cb: (v: T) => void) => CleanupFn }} item - Реактивный объект.
384
- * @returns {T} - Значение реактивного объекта.
385
- * @source
386
- */
387
- use<T>(item: {
388
- value: T;
389
- subscribe: (cb: (v: T) => void) => CleanupFn;
390
- }): T;
391
- /**
392
- * Безопасное выполнение функции.
393
- * @private
394
- * @function safeRun
395
- * @param {IEffect} effect - Эффект.
396
- * @param {Function} fn - Функция для выполнения.
397
- * @returns {void}
398
- * @source
399
- */
400
- private safeRun;
401
- }
402
-
403
- declare type ReactiveInput<T> = ObservableItem<T> | (() => ObservableItem<T>);
404
-
405
- declare type ReactiveInput_2<T> = ObservableItem_2<T> | (() => ObservableItem_2<T>);
406
-
407
- /**
408
- * Интерфейс для ресурса.
409
- * @template T
410
- * @interface Resource<T>
411
- */
412
- export declare interface Resource<T> extends ResourceState<T> {
413
- /**
414
- * Перезагрузка ресурса.
415
- * @function refetch
416
- * @returns {void}
417
- */
418
- refetch: () => void;
419
- /**
420
- * Подписка на изменение состояния ресурса.
421
- * @function subscribe
422
- * @param {Function} cb - Коллбек функция для обработки изменения.
423
- * @returns {CleanupFn} - Функция для очистки подписки.
424
- */
425
- subscribe: (cb: (val: ResourceState<T>) => void) => CleanupFn;
426
- /**
427
- * Только читаемое состояние ресурса.
428
- * @type {ResourceState<T>}
429
- */
430
- readonly value: ResourceState<T>;
431
- }
432
-
433
- export declare interface ResourceOptions<T, S> {
434
- name: string;
435
- /** Автоматически сбрасывать data в null при изменении source. По умолчанию: true */
436
- resetDataOnSourceChange?: boolean;
437
- /** Функция для валидации успешного ответа сервера перед его сохранением в стейт.
438
- *
439
- * Варианты возвращаемого значения:
440
- * - true 👉 все ок
441
- * - false 👉 в error попадет стандартный текст ошибки
442
- * - string 👉 попадет в поле error
443
- * */
444
- responseValidate?: (responseData: T) => boolean | string;
445
- /** Функция валидации входных зависимостей (source) перед запуском fetch.
446
- * Если возвращает false или string (текст ошибки) — запрос и ретраи блокируются. */
447
- validateBeforeFetch?: (sourceValue: S) => boolean | string;
448
- /** Настройка лимита повторов retry. */
449
- retryCount?: number;
450
- /** Настройка задержки первого повтора retry. */
451
- retryDelay?: number;
452
- /** Включить экспоненциальное увеличение задержки (каждая попытка ждет в 2 раза дольше). По умолчанию: false */
453
- isExponentialBackoffEnabled?: boolean;
454
- /** Максимальный лимит ожидания между попытками в миллисекундах. По умолчанию: 30000 (30 секунд) */
455
- maxRetryDelay?: number;
456
- /** Максимальное время ожидания ответа сервера в миллисекундах. По умолчанию: отсутствует (бесконечно) */
457
- timeout?: number;
458
- }
459
-
460
- export declare interface ResourceState<T> {
461
- data: T | null;
462
- loading: boolean;
463
- error: any | null;
464
- }
465
-
466
- /**
467
- * Интерфейс для состояния ресурса.
468
- * @template T Data format
469
- * @interface ResourceState<T>
470
- */
471
- export declare interface ResourceState<T> {
472
- /**
473
- * Данные ресурса.
474
- * @type {T | null}
475
- */
476
- data: T | null;
477
- /**
478
- * Состояние загрузки ресурса.
479
- * @type {boolean}
480
- */
481
- loading: boolean;
482
- /**
483
- * Ошибка ресурса.
484
- * @type {any | null}
485
- */
486
- error: any | null;
487
- /** Флаг активного процесса повторных попыток после сбоя сети */
488
- isRetrying: boolean;
489
- }
490
-
491
- /**
492
- * Интерфейс для сигнала.
493
- * @template T
494
- * @interface Signal<T>
495
- */
496
- export declare interface Signal<T> {
497
- /**
498
- * Значение сигнала.
499
- * @type {T}
500
- */
501
- value: T;
502
- /**
503
- * Подписка на изменение значения сигнала.
504
- * @function subscribe
505
- * @param {Function} cb - Коллбек функция для обработки изменения.
506
- * @returns {CleanupFn} - Функция для очистки подписки.
507
- */
508
- subscribe: (cb: (val: T) => void) => CleanupFn;
509
- }
510
-
511
- /**
512
- * Интерфейс для опций сигнала.
513
- * @template T
514
- * @interface SignalOptions<T>
515
- */
516
- export declare interface SignalOptions<T> {
517
- /**
518
- * Имя сигнала.
519
- * @type {string}
520
- */
521
- name?: string;
522
- /**
523
- * Валидатор значения сигнала.
524
- * @function validate
525
- * @param {T} val - Значение для валидации.
526
- * @returns {boolean | string} - Результат валидации.
527
- */
528
- validate?: (val: T) => boolean | string;
529
- }
530
-
531
- declare interface ThrottleAndCacheOptions {
532
- /** Интервал троттлинга в миллисекундах. По умолчанию 300 мс */
533
- limit?: number;
534
- /** Время жизни кэша в миллисекундах. По умолчанию 5 минут (300000 мс) */
535
- ttl?: number;
536
- }
537
-
538
- declare interface ThrottleOptions {
539
- /** Интервал троттлинга в миллисекундах. По умолчанию 300 мс */
540
- limit?: number;
541
- }
542
-
543
- export declare type Token<T> = string | symbol | {
544
- new (engine: ReactiveEngine, ...args: any[]): T;
545
- };
546
-
547
- /**
548
- * Универсальный хук для подписки на изменения Signal, Computed или Resource.
549
- * @template T Тип данных внутри реактивного контейнера
550
- * @param {Signal<T> | { subscribe: (cb: (val: T) => void) => CleanupFn }} signal Объект подписки
551
- * @param {(val: T) => void} callback Функция обратного вызова, принимающая новое значение
552
- * @source
553
- */
554
- export declare const useReactiveSubscription: <T>(signal: Pick<Signal<T>, "subscribe">, callback: (val: T) => void) => void;
555
-
556
- /**
557
- * Хук для извлечения значения из Signal/Computed/Resource и авто-ререндера компонента.
558
- * Поддерживает React 18+ и ленивые фабрики без утечек памяти.
559
- *
560
- * @source
561
- */
562
- export declare const useReactiveValue: <T>(input: ReactiveInput<T>) => T;
563
-
564
- /**
565
- * Fallback хук для извлечения значения из сигналов. Поддерживает React 16.8+.
566
- *
567
- * @source
568
- */
569
- export declare const useReactiveValue0: <T>(input: ReactiveInput_2<T>) => T;
570
-
571
- /**
572
- * Декоратор для создания кэширующего fetcher-а для engine.resource
573
- * @param fetcher Оригинальная асинхронная функция запроса
574
- * @param options Настройки кэширования
575
- * @source
576
- */
577
- export declare const withCache: <S, T>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, options?: CacheOptions) => (source: S, signal: AbortSignal) => Promise<T>;
578
-
579
- /**
580
- * Декоратор для создания дебаунсящего fetcher-а для engine.resource
581
- * @param fetcher Оригинальная асинхронная функция запроса
582
- * @param options Настройки дебаунса
583
- */
584
- export declare const withDebounce: <S, T>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, options?: DebounceOptions) => (source: S, signal: AbortSignal) => Promise<T>;
585
-
586
- /**
587
- * Адаптированный декоратор лонг-поллинга для engine.resource.
588
- * Принимает строго два аргумента: асинхронную функцию и конфиг-объект.
589
- */
590
- export declare const withLongPolling: <S, T>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, options: LongPollingOptions) => (source: S, signal: AbortSignal) => Promise<T>;
591
-
592
- /**
593
- * Декоратор для создания троттлящего fetcher-а для engine.resource
594
- * @param fetcher Оригинальная асинхронная функция запроса
595
- * @param options Настройки троттлинга
596
- */
597
- export declare const withThrottle: <S, T>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, options?: ThrottleOptions) => (source: S, signal: AbortSignal) => Promise<T>;
598
-
599
- /**
600
- * Комбинированный декоратор: сначала применяет троттлинг к частоте вызовов,
601
- * а затем проверяет кэш перед отправкой реального fetcher-запроса.
602
- */
603
- export declare const withThrottleAndCache: <S, T>(fetcher: (source: S, signal: AbortSignal) => Promise<T>, options?: ThrottleAndCacheOptions) => (source: S, signal: AbortSignal) => Promise<T>;
604
-
605
- export { }
1
+ export * from './core/index.js'
2
+ export {}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,cAAc,CAAA"}