@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.
- package/README.md +29 -0
- package/dist/AbstractService.cjs +2 -0
- package/dist/AbstractService.cjs.map +1 -0
- package/dist/AbstractService.mjs +24 -0
- package/dist/AbstractService.mjs.map +1 -0
- package/dist/BaseREServiceEnhanced.cjs +2 -0
- package/dist/BaseREServiceEnhanced.cjs.map +1 -0
- package/dist/BaseREServiceEnhanced.mjs +12 -0
- package/dist/BaseREServiceEnhanced.mjs.map +1 -0
- package/dist/_react-bindings.d.ts +17 -0
- package/dist/_react-bindings.d.ts.map +1 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/core/AbstractService.d.ts +11 -0
- package/dist/core/AbstractService.d.ts.map +1 -0
- package/dist/core/BaseREServiceEnhanced.d.ts +7 -0
- package/dist/core/BaseREServiceEnhanced.d.ts.map +1 -0
- package/dist/core/core.d.ts +282 -0
- package/dist/core/core.d.ts.map +1 -0
- package/dist/core/core.test.d.ts +2 -0
- package/dist/core/core.test.d.ts.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/types.d.ts +92 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.mjs +286 -0
- package/dist/core.mjs.map +1 -0
- package/dist/decorators/index.d.ts +6 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/withCache/index.d.ts +2 -0
- package/dist/decorators/withCache/index.d.ts.map +1 -0
- package/dist/decorators/withCache/withCache.d.ts +13 -0
- package/dist/decorators/withCache/withCache.d.ts.map +1 -0
- package/dist/decorators/withCache/withCache.test.d.ts +2 -0
- package/dist/decorators/withCache/withCache.test.d.ts.map +1 -0
- package/dist/decorators/withDebounce/index.d.ts +2 -0
- package/dist/decorators/withDebounce/index.d.ts.map +1 -0
- package/dist/decorators/withDebounce/withDebounce.d.ts +12 -0
- package/dist/decorators/withDebounce/withDebounce.d.ts.map +1 -0
- package/dist/decorators/withDebounce/withDebounce.test.d.ts +2 -0
- package/dist/decorators/withDebounce/withDebounce.test.d.ts.map +1 -0
- package/dist/decorators/withLongPolling/index.d.ts +2 -0
- package/dist/decorators/withLongPolling/index.d.ts.map +1 -0
- package/dist/decorators/withLongPolling/withLongPolling.d.ts +28 -0
- package/dist/decorators/withLongPolling/withLongPolling.d.ts.map +1 -0
- package/dist/decorators/withLongPolling/withLongPolling.test.d.ts +2 -0
- package/dist/decorators/withLongPolling/withLongPolling.test.d.ts.map +1 -0
- package/dist/decorators/withThrottle/index.d.ts +2 -0
- package/dist/decorators/withThrottle/index.d.ts.map +1 -0
- package/dist/decorators/withThrottle/withThrottle.d.ts +12 -0
- package/dist/decorators/withThrottle/withThrottle.d.ts.map +1 -0
- package/dist/decorators/withThrottle/withThrottle.test.d.ts +2 -0
- package/dist/decorators/withThrottle/withThrottle.test.d.ts.map +1 -0
- package/dist/decorators/withThrottleAndCache/index.d.ts +2 -0
- package/dist/decorators/withThrottleAndCache/index.d.ts.map +1 -0
- package/dist/decorators/withThrottleAndCache/withThrottleAndCache.d.ts +13 -0
- package/dist/decorators/withThrottleAndCache/withThrottleAndCache.d.ts.map +1 -0
- package/dist/decorators/withThrottleAndCache/withThrottleAndCache.test.d.ts +2 -0
- package/dist/decorators/withThrottleAndCache/withThrottleAndCache.test.d.ts.map +1 -0
- package/dist/index.cjs +1 -6
- package/dist/index.d.ts +2 -605
- package/dist/index.d.ts.map +1 -0
- package/dist/index.mjs +4 -541
- package/dist/react/ReactiveEngine4React.cjs +6 -0
- package/dist/react/ReactiveEngine4React.cjs.map +1 -0
- package/dist/react/ReactiveEngine4React.d.ts +27 -0
- package/dist/react/ReactiveEngine4React.d.ts.map +1 -0
- package/dist/react/ReactiveEngine4React.mjs +28 -0
- package/dist/react/ReactiveEngine4React.mjs.map +1 -0
- package/dist/react/core.react.test.d.ts +2 -0
- package/dist/react/core.react.test.d.ts.map +1 -0
- package/dist/react/createObserver.cjs +2 -0
- package/dist/react/createObserver.cjs.map +1 -0
- package/dist/react/createObserver.d.ts +70 -0
- package/dist/react/createObserver.d.ts.map +1 -0
- package/dist/react/createObserver.mjs +62 -0
- package/dist/react/createObserver.mjs.map +1 -0
- package/dist/react/createObserver.test.d.ts +2 -0
- package/dist/react/createObserver.test.d.ts.map +1 -0
- package/dist/react/hooks/FilteredCatalog.test.d.ts +2 -0
- package/dist/react/hooks/FilteredCatalog.test.d.ts.map +1 -0
- package/dist/react/hooks/index.cjs +1 -0
- package/dist/react/hooks/index.d.ts +4 -0
- package/dist/react/hooks/index.d.ts.map +1 -0
- package/dist/react/hooks/index.mjs +7 -0
- package/dist/react/hooks/types.d.ts +16 -0
- package/dist/react/hooks/types.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveSubscription/index.cjs +1 -0
- package/dist/react/hooks/useReactiveSubscription/index.d.ts +2 -0
- package/dist/react/hooks/useReactiveSubscription/index.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveSubscription/index.mjs +2 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs +2 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.cjs.map +1 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts +10 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs +14 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.mjs.map +1 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts +2 -0
- package/dist/react/hooks/useReactiveSubscription/useReactiveSubscription.test.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveValue/index.cjs +1 -0
- package/dist/react/hooks/useReactiveValue/index.d.ts +2 -0
- package/dist/react/hooks/useReactiveValue/index.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveValue/index.mjs +2 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs +2 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.cjs.map +1 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts +16 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs +12 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.mjs.map +1 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts +2 -0
- package/dist/react/hooks/useReactiveValue/useReactiveValue.test.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveValue0/index.cjs +1 -0
- package/dist/react/hooks/useReactiveValue0/index.d.ts +2 -0
- package/dist/react/hooks/useReactiveValue0/index.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveValue0/index.mjs +2 -0
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs +2 -0
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.cjs.map +1 -0
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts +15 -0
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.d.ts.map +1 -0
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs +20 -0
- package/dist/react/hooks/useReactiveValue0/useReactiveValue0.mjs.map +1 -0
- package/dist/react/index.cjs +1 -0
- package/dist/react/index.d.ts +4 -0
- package/dist/react/index.d.ts.map +1 -0
- package/dist/react/index.mjs +7 -0
- package/dist/react/types.d.ts +2 -0
- package/dist/react/types.d.ts.map +1 -0
- package/dist/utils/getExtractedValues.cjs +2 -0
- package/dist/utils/getExtractedValues.cjs.map +1 -0
- package/dist/utils/getExtractedValues.d.ts +6 -0
- package/dist/utils/getExtractedValues.d.ts.map +1 -0
- package/dist/utils/getExtractedValues.mjs +21 -0
- package/dist/utils/getExtractedValues.mjs.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/package.json +17 -3
- package/dist/index.cjs.map +0 -1
- package/dist/index.iife.js +0 -6
- package/dist/index.iife.js.map +0 -1
- package/dist/index.mjs.map +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,605 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
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"}
|