@fozy-labs/rx-toolkit 0.5.3-rc.2 → 0.5.4
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/LICENSE +21 -21
- package/README.md +143 -137
- package/dist/common/devtools/combineDevtools.js +3 -3
- package/dist/common/devtools/index.d.ts +3 -3
- package/dist/common/devtools/index.js +3 -3
- package/dist/common/devtools/reduxDevtools.d.ts +1 -1
- package/dist/common/devtools/reduxDevtools.js +17 -17
- package/dist/common/devtools/types.d.ts +0 -6
- package/dist/common/options/SharedOptions.d.ts +1 -0
- package/dist/common/options/SharedOptions.js +6 -0
- package/dist/common/options/index.d.ts +1 -1
- package/dist/common/options/index.js +1 -1
- package/dist/common/react/index.d.ts +2 -2
- package/dist/common/react/index.js +2 -2
- package/dist/common/react/useConstant.js +1 -1
- package/dist/common/utils/deepEqual.js +1 -1
- package/dist/common/utils/index.d.ts +3 -3
- package/dist/common/utils/index.js +3 -3
- package/dist/common/utils/shallowEqual.js +1 -1
- package/dist/index.d.ts +8 -7
- package/dist/index.js +8 -7
- package/dist/query/SKIP_TOKEN.js +1 -1
- package/dist/query/api/createCommand.d.ts +1 -1
- package/dist/query/api/createOperation.d.ts +1 -1
- package/dist/query/api/createOperation.js +1 -1
- package/dist/query/api/createResource.d.ts +1 -1
- package/dist/query/api/createResourceDuplicator.d.ts +1 -1
- package/dist/query/core/Command/Command.d.ts +7 -7
- package/dist/query/core/Command/Command.js +2 -2
- package/dist/query/core/Command/CommandAgent.d.ts +1 -1
- package/dist/query/core/Command/index.d.ts +2 -2
- package/dist/query/core/Command/index.js +2 -2
- package/dist/query/core/{Opertation → Operation}/Operation.d.ts +2 -2
- package/dist/query/core/{Opertation → Operation}/Operation.js +1 -1
- package/dist/query/core/{Opertation → Operation}/OperationAgent.d.ts +1 -1
- package/dist/query/core/{Opertation → Operation}/OperationAgent.js +1 -1
- package/dist/query/core/QueriesCache.d.ts +1 -1
- package/dist/query/core/QueriesCache.js +1 -1
- package/dist/query/core/QueriesLifetimeHooks.js +7 -7
- package/dist/query/core/Resource/Resource.d.ts +15 -15
- package/dist/query/core/Resource/Resource.js +7 -7
- package/dist/query/core/Resource/ResourceAgent.d.ts +1 -1
- package/dist/query/core/Resource/ResourceAgent.js +2 -2
- package/dist/query/core/Resource/ResourceDuplicator.d.ts +16 -16
- package/dist/query/core/Resource/ResourceDuplicator.js +18 -20
- package/dist/query/core/Resource/ResourceDuplicatorAgent.d.ts +5 -5
- package/dist/query/core/Resource/ResourceDuplicatorAgent.js +2 -2
- package/dist/query/core/Resource/ResourceRef.d.ts +2 -2
- package/dist/query/core/Resource/ResourceRef.js +12 -12
- package/dist/query/index.d.ts +11 -10
- package/dist/query/index.js +11 -10
- package/dist/query/lib/IndirectMap.js +4 -4
- package/dist/query/react/useCommandAgent.d.ts +2 -2
- package/dist/query/react/useOperationAgent.d.ts +1 -1
- package/dist/query/react/useOperationAgent.js +1 -1
- package/dist/query/react/useResourceAgent.d.ts +3 -3
- package/dist/query/react/useResourceAgent.js +1 -1
- package/dist/query/react/useResourceRef.d.ts +3 -3
- package/dist/query/react/useResourceRef.js +7 -2
- package/dist/query/types/Command.types.d.ts +1 -1
- package/dist/query/types/Operation.types.d.ts +1 -1
- package/dist/query/types/Resource.types.d.ts +7 -5
- package/dist/query/types/index.d.ts +4 -4
- package/dist/query/types/index.js +4 -4
- package/dist/query-v2/api/createApi.d.ts +10 -0
- package/dist/query-v2/api/createApi.js +83 -0
- package/dist/query-v2/core/common/CacheEntry.d.ts +29 -0
- package/dist/query-v2/core/common/CacheEntry.js +71 -0
- package/dist/query-v2/core/common/CacheMap.d.ts +38 -0
- package/dist/query-v2/core/common/CacheMap.js +127 -0
- package/dist/query-v2/core/common/LifecycleHooks.d.ts +22 -0
- package/dist/query-v2/core/common/LifecycleHooks.js +104 -0
- package/dist/query-v2/core/common/index.d.ts +3 -0
- package/dist/query-v2/core/common/index.js +3 -0
- package/dist/query-v2/core/index.d.ts +3 -0
- package/dist/query-v2/core/index.js +3 -0
- package/dist/query-v2/core/machines/Machine.d.ts +14 -0
- package/dist/query-v2/core/machines/Machine.js +33 -0
- package/dist/query-v2/core/machines/MachineError.d.ts +11 -0
- package/dist/query-v2/core/machines/MachineError.js +26 -0
- package/dist/query-v2/core/machines/MachineIdle.d.ts +8 -0
- package/dist/query-v2/core/machines/MachineIdle.js +19 -0
- package/dist/query-v2/core/machines/MachinePending.d.ts +12 -0
- package/dist/query-v2/core/machines/MachinePending.js +29 -0
- package/dist/query-v2/core/machines/MachineRefreshing.d.ts +14 -0
- package/dist/query-v2/core/machines/MachineRefreshing.js +46 -0
- package/dist/query-v2/core/machines/MachineSuccess.d.ts +16 -0
- package/dist/query-v2/core/machines/MachineSuccess.js +42 -0
- package/dist/query-v2/core/machines/MachineWithData.d.ts +18 -0
- package/dist/query-v2/core/machines/MachineWithData.js +40 -0
- package/dist/query-v2/core/machines/Patcher.d.ts +20 -0
- package/dist/query-v2/core/machines/Patcher.js +104 -0
- package/dist/query-v2/core/machines/index.d.ts +8 -0
- package/dist/query-v2/core/machines/index.js +8 -0
- package/dist/query-v2/core/resource/ResourceV2.d.ts +120 -0
- package/dist/query-v2/core/resource/ResourceV2.js +464 -0
- package/dist/query-v2/core/resource/ResourceV2Agent.d.ts +26 -0
- package/dist/query-v2/core/resource/ResourceV2Agent.js +132 -0
- package/dist/query-v2/core/resource/index.d.ts +2 -0
- package/dist/query-v2/core/resource/index.js +2 -0
- package/dist/query-v2/index.d.ts +11 -0
- package/dist/query-v2/index.js +17 -0
- package/dist/query-v2/lib/NO_VALUE.d.ts +2 -0
- package/dist/query-v2/lib/NO_VALUE.js +1 -0
- package/dist/query-v2/lib/SKIP_TOKEN.d.ts +2 -0
- package/dist/query-v2/lib/SKIP_TOKEN.js +1 -0
- package/dist/query-v2/lib/index.d.ts +4 -0
- package/dist/query-v2/lib/index.js +3 -0
- package/dist/query-v2/lib/stableStringify.d.ts +8 -0
- package/dist/query-v2/lib/stableStringify.js +23 -0
- package/dist/query-v2/plugins/ReactHooksPlugin.d.ts +25 -0
- package/dist/query-v2/plugins/ReactHooksPlugin.js +19 -0
- package/dist/query-v2/plugins/types.d.ts +1 -0
- package/dist/query-v2/plugins/types.js +1 -0
- package/dist/query-v2/react/__tests__/helpers.d.ts +12 -0
- package/dist/query-v2/react/__tests__/helpers.js +33 -0
- package/dist/query-v2/react/index.d.ts +2 -0
- package/dist/query-v2/react/index.js +2 -0
- package/dist/query-v2/react/useResourceV2Agent.d.ts +12 -0
- package/dist/query-v2/react/useResourceV2Agent.js +36 -0
- package/dist/query-v2/react/useResourceV2Ref.d.ts +12 -0
- package/dist/query-v2/react/useResourceV2Ref.js +57 -0
- package/dist/query-v2/snapshot/Snapshot.d.ts +13 -0
- package/dist/query-v2/snapshot/Snapshot.js +76 -0
- package/dist/query-v2/types/agent.types.d.ts +54 -0
- package/dist/query-v2/types/agent.types.js +1 -0
- package/dist/query-v2/types/api.types.d.ts +22 -0
- package/dist/query-v2/types/api.types.js +1 -0
- package/dist/query-v2/types/cache.types.d.ts +37 -0
- package/dist/query-v2/types/cache.types.js +1 -0
- package/dist/query-v2/types/index.d.ts +9 -0
- package/dist/query-v2/types/index.js +9 -0
- package/dist/query-v2/types/lifecycle.types.d.ts +25 -0
- package/dist/query-v2/types/lifecycle.types.js +1 -0
- package/dist/query-v2/types/machine.types.d.ts +67 -0
- package/dist/query-v2/types/machine.types.js +1 -0
- package/dist/query-v2/types/plugin.types.d.ts +38 -0
- package/dist/query-v2/types/plugin.types.js +1 -0
- package/dist/query-v2/types/resource.types.d.ts +35 -0
- package/dist/query-v2/types/resource.types.js +1 -0
- package/dist/query-v2/types/shared.types.d.ts +20 -0
- package/dist/query-v2/types/shared.types.js +1 -0
- package/dist/query-v2/types/snapshot.types.d.ts +21 -0
- package/dist/query-v2/types/snapshot.types.js +1 -0
- package/dist/signals/base/Batcher.js +9 -5
- package/dist/signals/base/ComputeCache.js +3 -3
- package/dist/signals/base/DependencyTracker.js +1 -1
- package/dist/signals/base/Devtools.d.ts +3 -2
- package/dist/signals/base/Devtools.js +54 -27
- package/dist/signals/base/Indexer.js +1 -1
- package/dist/signals/base/ReadonlySignal.js +1 -1
- package/dist/signals/base/SyncObservable.d.ts +1 -2
- package/dist/signals/base/SyncObservable.js +2 -5
- package/dist/signals/base/index.d.ts +6 -6
- package/dist/signals/base/index.js +6 -6
- package/dist/signals/index.d.ts +5 -4
- package/dist/signals/index.js +5 -4
- package/dist/signals/operators/index.d.ts +1 -1
- package/dist/signals/operators/index.js +1 -1
- package/dist/signals/react/index.d.ts +1 -1
- package/dist/signals/react/index.js +1 -1
- package/dist/signals/signals/Computed.d.ts +3 -4
- package/dist/signals/signals/Computed.js +18 -10
- package/dist/signals/signals/Effect.js +2 -1
- package/dist/signals/signals/LocalState.d.ts +3 -4
- package/dist/signals/signals/LocalState.js +8 -8
- package/dist/signals/signals/Signal.d.ts +7 -6
- package/dist/signals/signals/Signal.js +4 -1
- package/dist/signals/signals/State.d.ts +4 -5
- package/dist/signals/signals/State.js +23 -9
- package/dist/signals/signals/index.d.ts +5 -5
- package/dist/signals/signals/index.js +5 -6
- package/dist/signals/types/SignalOptions.d.ts +16 -0
- package/dist/signals/types/SignalOptions.js +1 -0
- package/dist/signals/types/index.d.ts +3 -1
- package/dist/signals/types/index.js +3 -1
- package/dist/signals/types/normalizeSignalOptions.d.ts +2 -0
- package/dist/signals/types/normalizeSignalOptions.js +10 -0
- package/dist/signals/types/signals.types.d.ts +2 -3
- package/docs/CHANGELOG.md +95 -90
- package/docs/CONTRIBUTING.md +230 -0
- package/docs/contributing/ai-assisted-development.md +47 -0
- package/docs/contributing/query-v2/README.md +379 -0
- package/docs/{release → contributing/release}/README.md +59 -59
- package/docs/devtools/README.md +228 -228
- package/docs/migrations/0.5.0.md +58 -58
- package/docs/migrations/query-v2.md +171 -0
- package/docs/options/README.md +92 -92
- package/docs/query/README.md +575 -573
- package/docs/query-v2/README.md +280 -0
- package/docs/query-v2/api-reference.md +235 -0
- package/docs/query-v2/optimistic-updates.md +148 -0
- package/docs/query-v2/ssr.md +130 -0
- package/docs/signals/README.md +300 -300
- package/docs/usage/react/README.md +309 -309
- package/package.json +85 -63
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
# Релиз
|
|
2
|
-
|
|
3
|
-
Процесс выпуска новой версии RxToolkit.
|
|
4
|
-
|
|
5
|
-
## Подготовка
|
|
6
|
-
|
|
7
|
-
1. Убедитесь, что все изменения закоммичены
|
|
8
|
-
2. Обновите CHANGELOG (если есть)
|
|
9
|
-
3. Проверьте документацию
|
|
10
|
-
|
|
11
|
-
## Команды релиза
|
|
12
|
-
|
|
13
|
-
```bash
|
|
14
|
-
# 1. Проверка типов
|
|
15
|
-
npm run ts-check
|
|
16
|
-
|
|
17
|
-
# 2. Сборка проекта
|
|
18
|
-
npm run build
|
|
19
|
-
|
|
20
|
-
# 3. Обновление версии
|
|
21
|
-
npm version patch # для патч-версии (0.4.18 -> 0.4.19)
|
|
22
|
-
npm version minor # для минорной версии (0.4.18 -> 0.5.0)
|
|
23
|
-
npm version major # для мажорной версии (0.4.18 -> 1.0.0)
|
|
24
|
-
|
|
25
|
-
# 4. Публикация в npm
|
|
26
|
-
npm publish
|
|
27
|
-
|
|
28
|
-
# 5. Пуш тегов в репозиторий
|
|
29
|
-
git push origin develop --tags
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## rc
|
|
33
|
-
|
|
34
|
-
### Выпуск релиза-кандидата (RC)
|
|
35
|
-
|
|
36
|
-
```bash
|
|
37
|
-
# 1. Проверка типов
|
|
38
|
-
npm run ts-check
|
|
39
|
-
|
|
40
|
-
# 2. Сборка проекта
|
|
41
|
-
npm run build
|
|
42
|
-
|
|
43
|
-
# 3. Обновление версии до RC
|
|
44
|
-
npm version prerelease --preid=rc
|
|
45
|
-
# пример: 1.2.0 → 1.2.0-rc.0
|
|
46
|
-
|
|
47
|
-
# 4. Публикация RC (НЕ latest!)
|
|
48
|
-
npm publish --tag rc
|
|
49
|
-
|
|
50
|
-
# 5. Пуш тегов
|
|
51
|
-
git push origin develop --tags
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
### Переход с RC на stable
|
|
55
|
-
```bash
|
|
56
|
-
npm version <latest_version>
|
|
57
|
-
npm publish
|
|
58
|
-
git push origin develop --tags
|
|
59
|
-
```
|
|
1
|
+
# Релиз
|
|
2
|
+
|
|
3
|
+
Процесс выпуска новой версии RxToolkit.
|
|
4
|
+
|
|
5
|
+
## Подготовка
|
|
6
|
+
|
|
7
|
+
1. Убедитесь, что все изменения закоммичены
|
|
8
|
+
2. Обновите CHANGELOG (если есть)
|
|
9
|
+
3. Проверьте документацию
|
|
10
|
+
|
|
11
|
+
## Команды релиза
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 1. Проверка типов
|
|
15
|
+
npm run ts-check
|
|
16
|
+
|
|
17
|
+
# 2. Сборка проекта
|
|
18
|
+
npm run build
|
|
19
|
+
|
|
20
|
+
# 3. Обновление версии
|
|
21
|
+
npm version patch # для патч-версии (0.4.18 -> 0.4.19)
|
|
22
|
+
npm version minor # для минорной версии (0.4.18 -> 0.5.0)
|
|
23
|
+
npm version major # для мажорной версии (0.4.18 -> 1.0.0)
|
|
24
|
+
|
|
25
|
+
# 4. Публикация в npm
|
|
26
|
+
npm publish
|
|
27
|
+
|
|
28
|
+
# 5. Пуш тегов в репозиторий
|
|
29
|
+
git push origin develop --tags
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## rc
|
|
33
|
+
|
|
34
|
+
### Выпуск релиза-кандидата (RC)
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# 1. Проверка типов
|
|
38
|
+
npm run ts-check
|
|
39
|
+
|
|
40
|
+
# 2. Сборка проекта
|
|
41
|
+
npm run build
|
|
42
|
+
|
|
43
|
+
# 3. Обновление версии до RC
|
|
44
|
+
npm version prerelease --preid=rc
|
|
45
|
+
# пример: 1.2.0 → 1.2.0-rc.0
|
|
46
|
+
|
|
47
|
+
# 4. Публикация RC (НЕ latest!)
|
|
48
|
+
npm publish --tag rc
|
|
49
|
+
|
|
50
|
+
# 5. Пуш тегов
|
|
51
|
+
git push origin develop --tags
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Переход с RC на stable
|
|
55
|
+
```bash
|
|
56
|
+
npm version <latest_version>
|
|
57
|
+
npm publish
|
|
58
|
+
git push origin develop --tags
|
|
59
|
+
```
|
package/docs/devtools/README.md
CHANGED
|
@@ -1,228 +1,228 @@
|
|
|
1
|
-
# Devtools
|
|
2
|
-
|
|
3
|
-
RxToolkit предоставляет интеграцию с популярными инструментами разработчика для отладки реактивных приложений в реальном времени. Вы можете отслеживать изменения сигналов, выполнение команд и состояние ресурсов.
|
|
4
|
-
|
|
5
|
-
**Отслеживает изменения:**
|
|
6
|
-
- Сигналов (Signal / Computed)
|
|
7
|
-
- Ресурсов и команд (Resource / Command)
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## Redux DevTools
|
|
12
|
-
|
|
13
|
-
Популярное браузерное расширение для отладки состояния приложений. **RxToolkit включает встроенный адаптер `reduxDevtools()`**.
|
|
14
|
-
|
|
15
|
-
### Установка
|
|
16
|
-
|
|
17
|
-
1. Установите [расширение Redux DevTools](https://github.com/reduxjs/redux-devtools) для браузера
|
|
18
|
-
2. Подключите в коде:
|
|
19
|
-
|
|
20
|
-
```typescript
|
|
21
|
-
import { DefaultOptions, reduxDevtools } from '@fozy-labs/rx-toolkit';
|
|
22
|
-
|
|
23
|
-
DefaultOptions.update({
|
|
24
|
-
DEVTOOLS: reduxDevtools()
|
|
25
|
-
});
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
### Опции reduxDevtools
|
|
29
|
-
|
|
30
|
-
```typescript
|
|
31
|
-
reduxDevtools({
|
|
32
|
-
// Имя приложения в DevTools
|
|
33
|
-
name: 'MyApp',
|
|
34
|
-
|
|
35
|
-
// Стратегия батчинга обновлений
|
|
36
|
-
batchStrategy: 'microtask', // 'sync' | 'microtask' | 'task'
|
|
37
|
-
|
|
38
|
-
// Задержка для стратегии 'task' (мс)
|
|
39
|
-
taskDelay: 0,
|
|
40
|
-
})
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
**Стратегии батчинга (batchStrategy):**
|
|
44
|
-
|
|
45
|
-
| Стратегия | Описание |
|
|
46
|
-
|---------------|-----------------------------------------------------------------------------------------------------------------|
|
|
47
|
-
| `'sync'` | Синхронное выполнение без батчинга. Каждое обновление отправляется немедленно. Интегрируется с Batcher сигналов |
|
|
48
|
-
| `'microtask'` | **(default)** Пакование в микротаске. Все обновления в текущем синхронном потоке объединяются |
|
|
49
|
-
| `'task'` | Пакование в макротаске (setTimeout) с настраиваемой задержкой |
|
|
50
|
-
|
|
51
|
-
---
|
|
52
|
-
|
|
53
|
-
## @reatom/devtools
|
|
54
|
-
|
|
55
|
-
Npm пакет с встроенным отладчиком, работающим прямо в браузере. После подключения в углу страницы появляется кнопка, которая открывает панель инструментов.
|
|
56
|
-
|
|
57
|
-
### Установка
|
|
58
|
-
|
|
59
|
-
```bash
|
|
60
|
-
npm install @reatom/devtools
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
### Подключение
|
|
64
|
-
|
|
65
|
-
```typescript
|
|
66
|
-
import { DefaultOptions } from '@fozy-labs/rx-toolkit';
|
|
67
|
-
import { createDevtools } from '@reatom/devtools';
|
|
68
|
-
|
|
69
|
-
DefaultOptions.update({
|
|
70
|
-
DEVTOOLS: createDevtools({
|
|
71
|
-
initVisibility: true // Показать панель при загрузке
|
|
72
|
-
})
|
|
73
|
-
});
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
**Может пригодиться:**
|
|
77
|
-
- Если в вашей среде невозможно установить браузерное расширение
|
|
78
|
-
- Для мобильной отладки
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## DefaultOptions
|
|
83
|
-
|
|
84
|
-
`DefaultOptions.update()` позволяет настроить глобальные опции RxToolkit:
|
|
85
|
-
|
|
86
|
-
```typescript
|
|
87
|
-
import { DefaultOptions, reduxDevtools } from '@fozy-labs/rx-toolkit';
|
|
88
|
-
import { Observable } from 'rxjs';
|
|
89
|
-
|
|
90
|
-
DefaultOptions.update({
|
|
91
|
-
// Devtools интеграция
|
|
92
|
-
DEVTOOLS: reduxDevtools(),
|
|
93
|
-
|
|
94
|
-
// Глобальный обработчик ошибок запросов
|
|
95
|
-
onQueryError: (error) => {
|
|
96
|
-
console.error('Query error:', error);
|
|
97
|
-
// Можно отправить в систему мониторинга
|
|
98
|
-
errorTracker.capture(error);
|
|
99
|
-
},
|
|
100
|
-
|
|
101
|
-
// Функция для получения имени текущего scope (полезно для SSR)
|
|
102
|
-
getScopeName: () => {
|
|
103
|
-
return currentRequestId ?? null;
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Параметры DefaultOptions
|
|
109
|
-
|
|
110
|
-
| Параметр | Тип | Описание |
|
|
111
|
-
|----------|-----|----------|
|
|
112
|
-
| `DEVTOOLS` | `DevtoolsLike \| null` | Интеграция с devtools |
|
|
113
|
-
| `onQueryError` | `(error: unknown) => void` | Глобальный обработчик ошибок запросов |
|
|
114
|
-
| `getScopeName` | `() => string \| null` | Получение имени текущего scope |
|
|
115
|
-
|
|
116
|
-
---
|
|
117
|
-
|
|
118
|
-
## Практики
|
|
119
|
-
|
|
120
|
-
### Development-режим
|
|
121
|
-
|
|
122
|
-
Подключайте devtools только в режиме разработки:
|
|
123
|
-
|
|
124
|
-
```typescript
|
|
125
|
-
// Node.js / Webpack
|
|
126
|
-
if (process.env.NODE_ENV !== 'production') {
|
|
127
|
-
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
// Vite
|
|
131
|
-
if (import.meta.env.DEV) {
|
|
132
|
-
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Next.js
|
|
136
|
-
if (process.env.NODE_ENV === 'development') {
|
|
137
|
-
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
138
|
-
}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
### SSR-совместимость
|
|
142
|
-
|
|
143
|
-
Защитите от выполнения на сервере:
|
|
144
|
-
|
|
145
|
-
```typescript
|
|
146
|
-
if (typeof window !== 'undefined' && process.env.NODE_ENV !== 'production') {
|
|
147
|
-
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
### Несколько инструментов
|
|
152
|
-
|
|
153
|
-
Можно комбинировать несколько devtools с помощью `combineDevtools`:
|
|
154
|
-
|
|
155
|
-
```typescript
|
|
156
|
-
import { combineDevtools, reduxDevtools, DefaultOptions } from '@fozy-labs/rx-toolkit';
|
|
157
|
-
import { createDevtools } from '@reatom/devtools';
|
|
158
|
-
|
|
159
|
-
DefaultOptions.update({
|
|
160
|
-
DEVTOOLS: combineDevtools(
|
|
161
|
-
reduxDevtools({ name: 'MyApp' }),
|
|
162
|
-
createDevtools({ initVisibility: true })
|
|
163
|
-
)
|
|
164
|
-
});
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
### Именование для devtools
|
|
168
|
-
|
|
169
|
-
При создании сигналов и запросов можно указывать имена для удобной отладки:
|
|
170
|
-
|
|
171
|
-
```typescript
|
|
172
|
-
// Сигналы
|
|
173
|
-
const count$ = new Signal(0, 'counter');
|
|
174
|
-
const user$ = new Signal(null, { name: 'currentUser' });
|
|
175
|
-
|
|
176
|
-
// Ресурсы и команды
|
|
177
|
-
const userResource = createResource({
|
|
178
|
-
queryFn: fetchUser,
|
|
179
|
-
devtoolsName: 'user-resource', // Имя в devtools
|
|
180
|
-
});
|
|
181
|
-
|
|
182
|
-
const updateUser = createCommand({
|
|
183
|
-
queryFn: updateUserApi,
|
|
184
|
-
devtoolsName: 'update-user',
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
// Отключение devtools для конкретного сигнала
|
|
188
|
-
const internalSignal = new Signal(0, { isDisabled: true });
|
|
189
|
-
|
|
190
|
-
// Отключение devtools для ресурса
|
|
191
|
-
const internalResource = createResource({
|
|
192
|
-
queryFn: fetchInternal,
|
|
193
|
-
devtoolsName: false, // Не отслеживать
|
|
194
|
-
});
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
---
|
|
198
|
-
|
|
199
|
-
## DevtoolsLike интерфейс
|
|
200
|
-
|
|
201
|
-
Если вам нужно создать кастомную интеграцию с devtools:
|
|
202
|
-
|
|
203
|
-
```typescript
|
|
204
|
-
interface DevtoolsLike {
|
|
205
|
-
state<T>(name: string, initState: T): DevtoolsStateLike<T>;
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
interface DevtoolsStateLike<T = any> {
|
|
209
|
-
(newState: T | '$COMPLETED' | '$CLEANED'): void;
|
|
210
|
-
}
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
**Пример кастомного devtools:**
|
|
214
|
-
|
|
215
|
-
```typescript
|
|
216
|
-
const customDevtools: DevtoolsLike = {
|
|
217
|
-
state(name, initState) {
|
|
218
|
-
console.log(`[INIT] ${name}:`, initState);
|
|
219
|
-
|
|
220
|
-
return (newState) => {
|
|
221
|
-
console.log(`[UPDATE] ${name}:`, newState);
|
|
222
|
-
};
|
|
223
|
-
}
|
|
224
|
-
};
|
|
225
|
-
|
|
226
|
-
DefaultOptions.update({ DEVTOOLS: customDevtools });
|
|
227
|
-
```
|
|
228
|
-
|
|
1
|
+
# Devtools
|
|
2
|
+
|
|
3
|
+
RxToolkit предоставляет интеграцию с популярными инструментами разработчика для отладки реактивных приложений в реальном времени. Вы можете отслеживать изменения сигналов, выполнение команд и состояние ресурсов.
|
|
4
|
+
|
|
5
|
+
**Отслеживает изменения:**
|
|
6
|
+
- Сигналов (Signal / Computed)
|
|
7
|
+
- Ресурсов и команд (Resource / Command)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Redux DevTools
|
|
12
|
+
|
|
13
|
+
Популярное браузерное расширение для отладки состояния приложений. **RxToolkit включает встроенный адаптер `reduxDevtools()`**.
|
|
14
|
+
|
|
15
|
+
### Установка
|
|
16
|
+
|
|
17
|
+
1. Установите [расширение Redux DevTools](https://github.com/reduxjs/redux-devtools) для браузера
|
|
18
|
+
2. Подключите в коде:
|
|
19
|
+
|
|
20
|
+
```typescript
|
|
21
|
+
import { DefaultOptions, reduxDevtools } from '@fozy-labs/rx-toolkit';
|
|
22
|
+
|
|
23
|
+
DefaultOptions.update({
|
|
24
|
+
DEVTOOLS: reduxDevtools()
|
|
25
|
+
});
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Опции reduxDevtools
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
reduxDevtools({
|
|
32
|
+
// Имя приложения в DevTools
|
|
33
|
+
name: 'MyApp',
|
|
34
|
+
|
|
35
|
+
// Стратегия батчинга обновлений
|
|
36
|
+
batchStrategy: 'microtask', // 'sync' | 'microtask' | 'task'
|
|
37
|
+
|
|
38
|
+
// Задержка для стратегии 'task' (мс)
|
|
39
|
+
taskDelay: 0,
|
|
40
|
+
})
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
**Стратегии батчинга (batchStrategy):**
|
|
44
|
+
|
|
45
|
+
| Стратегия | Описание |
|
|
46
|
+
|---------------|-----------------------------------------------------------------------------------------------------------------|
|
|
47
|
+
| `'sync'` | Синхронное выполнение без батчинга. Каждое обновление отправляется немедленно. Интегрируется с Batcher сигналов |
|
|
48
|
+
| `'microtask'` | **(default)** Пакование в микротаске. Все обновления в текущем синхронном потоке объединяются |
|
|
49
|
+
| `'task'` | Пакование в макротаске (setTimeout) с настраиваемой задержкой |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## @reatom/devtools
|
|
54
|
+
|
|
55
|
+
Npm пакет с встроенным отладчиком, работающим прямо в браузере. После подключения в углу страницы появляется кнопка, которая открывает панель инструментов.
|
|
56
|
+
|
|
57
|
+
### Установка
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
npm install @reatom/devtools
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Подключение
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { DefaultOptions } from '@fozy-labs/rx-toolkit';
|
|
67
|
+
import { createDevtools } from '@reatom/devtools';
|
|
68
|
+
|
|
69
|
+
DefaultOptions.update({
|
|
70
|
+
DEVTOOLS: createDevtools({
|
|
71
|
+
initVisibility: true // Показать панель при загрузке
|
|
72
|
+
})
|
|
73
|
+
});
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**Может пригодиться:**
|
|
77
|
+
- Если в вашей среде невозможно установить браузерное расширение
|
|
78
|
+
- Для мобильной отладки
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## DefaultOptions
|
|
83
|
+
|
|
84
|
+
`DefaultOptions.update()` позволяет настроить глобальные опции RxToolkit:
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
import { DefaultOptions, reduxDevtools } from '@fozy-labs/rx-toolkit';
|
|
88
|
+
import { Observable } from 'rxjs';
|
|
89
|
+
|
|
90
|
+
DefaultOptions.update({
|
|
91
|
+
// Devtools интеграция
|
|
92
|
+
DEVTOOLS: reduxDevtools(),
|
|
93
|
+
|
|
94
|
+
// Глобальный обработчик ошибок запросов
|
|
95
|
+
onQueryError: (error) => {
|
|
96
|
+
console.error('Query error:', error);
|
|
97
|
+
// Можно отправить в систему мониторинга
|
|
98
|
+
errorTracker.capture(error);
|
|
99
|
+
},
|
|
100
|
+
|
|
101
|
+
// Функция для получения имени текущего scope (полезно для SSR)
|
|
102
|
+
getScopeName: () => {
|
|
103
|
+
return currentRequestId ?? null;
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Параметры DefaultOptions
|
|
109
|
+
|
|
110
|
+
| Параметр | Тип | Описание |
|
|
111
|
+
|----------|-----|----------|
|
|
112
|
+
| `DEVTOOLS` | `DevtoolsLike \| null` | Интеграция с devtools |
|
|
113
|
+
| `onQueryError` | `(error: unknown) => void` | Глобальный обработчик ошибок запросов |
|
|
114
|
+
| `getScopeName` | `() => string \| null` | Получение имени текущего scope |
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Практики
|
|
119
|
+
|
|
120
|
+
### Development-режим
|
|
121
|
+
|
|
122
|
+
Подключайте devtools только в режиме разработки:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
// Node.js / Webpack
|
|
126
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
127
|
+
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Vite
|
|
131
|
+
if (import.meta.env.DEV) {
|
|
132
|
+
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Next.js
|
|
136
|
+
if (process.env.NODE_ENV === 'development') {
|
|
137
|
+
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
138
|
+
}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### SSR-совместимость
|
|
142
|
+
|
|
143
|
+
Защитите от выполнения на сервере:
|
|
144
|
+
|
|
145
|
+
```typescript
|
|
146
|
+
if (typeof window !== 'undefined' && process.env.NODE_ENV !== 'production') {
|
|
147
|
+
DefaultOptions.update({ DEVTOOLS: reduxDevtools() });
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Несколько инструментов
|
|
152
|
+
|
|
153
|
+
Можно комбинировать несколько devtools с помощью `combineDevtools`:
|
|
154
|
+
|
|
155
|
+
```typescript
|
|
156
|
+
import { combineDevtools, reduxDevtools, DefaultOptions } from '@fozy-labs/rx-toolkit';
|
|
157
|
+
import { createDevtools } from '@reatom/devtools';
|
|
158
|
+
|
|
159
|
+
DefaultOptions.update({
|
|
160
|
+
DEVTOOLS: combineDevtools(
|
|
161
|
+
reduxDevtools({ name: 'MyApp' }),
|
|
162
|
+
createDevtools({ initVisibility: true })
|
|
163
|
+
)
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### Именование для devtools
|
|
168
|
+
|
|
169
|
+
При создании сигналов и запросов можно указывать имена для удобной отладки:
|
|
170
|
+
|
|
171
|
+
```typescript
|
|
172
|
+
// Сигналы
|
|
173
|
+
const count$ = new Signal(0, 'counter');
|
|
174
|
+
const user$ = new Signal(null, { name: 'currentUser' });
|
|
175
|
+
|
|
176
|
+
// Ресурсы и команды
|
|
177
|
+
const userResource = createResource({
|
|
178
|
+
queryFn: fetchUser,
|
|
179
|
+
devtoolsName: 'user-resource', // Имя в devtools
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
const updateUser = createCommand({
|
|
183
|
+
queryFn: updateUserApi,
|
|
184
|
+
devtoolsName: 'update-user',
|
|
185
|
+
});
|
|
186
|
+
|
|
187
|
+
// Отключение devtools для конкретного сигнала
|
|
188
|
+
const internalSignal = new Signal(0, { isDisabled: true });
|
|
189
|
+
|
|
190
|
+
// Отключение devtools для ресурса
|
|
191
|
+
const internalResource = createResource({
|
|
192
|
+
queryFn: fetchInternal,
|
|
193
|
+
devtoolsName: false, // Не отслеживать
|
|
194
|
+
});
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
199
|
+
## DevtoolsLike интерфейс
|
|
200
|
+
|
|
201
|
+
Если вам нужно создать кастомную интеграцию с devtools:
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
interface DevtoolsLike {
|
|
205
|
+
state<T>(name: string, initState: T): DevtoolsStateLike<T>;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
interface DevtoolsStateLike<T = any> {
|
|
209
|
+
(newState: T | '$COMPLETED' | '$CLEANED'): void;
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Пример кастомного devtools:**
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
const customDevtools: DevtoolsLike = {
|
|
217
|
+
state(name, initState) {
|
|
218
|
+
console.log(`[INIT] ${name}:`, initState);
|
|
219
|
+
|
|
220
|
+
return (newState) => {
|
|
221
|
+
console.log(`[UPDATE] ${name}:`, newState);
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
DefaultOptions.update({ DEVTOOLS: customDevtools });
|
|
227
|
+
```
|
|
228
|
+
|