@aiao/rxdb 0.0.6 → 0.0.8
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/dist/RxDB.d.ts +119 -18
- package/dist/RxDB.d.ts.map +1 -1
- package/dist/entity/@TreeEntity.d.ts.map +1 -1
- package/dist/entity/EntityBase.d.ts +58 -10
- package/dist/entity/EntityBase.d.ts.map +1 -1
- package/dist/entity/EntityManager.d.ts +16 -5
- package/dist/entity/EntityManager.d.ts.map +1 -1
- package/dist/entity/EntityStatus.d.ts +145 -87
- package/dist/entity/EntityStatus.d.ts.map +1 -1
- package/dist/entity/EntityStatus.interface.d.ts +59 -0
- package/dist/entity/EntityStatus.interface.d.ts.map +1 -0
- package/dist/entity/TreeEntityBase.d.ts +31 -4
- package/dist/entity/TreeEntityBase.d.ts.map +1 -1
- package/dist/entity/entity.interface.d.ts +16 -15
- package/dist/entity/entity.interface.d.ts.map +1 -1
- package/dist/entity/entity.utils.d.ts +21 -0
- package/dist/entity/entity.utils.d.ts.map +1 -1
- package/dist/entity/many_to_many_entity.d.ts.map +1 -1
- package/dist/entity/metadata-options.interface.d.ts +276 -39
- package/dist/entity/metadata-options.interface.d.ts.map +1 -1
- package/dist/entity/{transition-metadata.d.ts → metadata-transition.d.ts} +1 -1
- package/dist/entity/metadata-transition.d.ts.map +1 -0
- package/dist/entity/metadata.interface.d.ts +6 -0
- package/dist/entity/metadata.interface.d.ts.map +1 -1
- package/dist/entity/metadata_cascade_default.d.ts +54 -0
- package/dist/entity/metadata_cascade_default.d.ts.map +1 -0
- package/dist/entity/proxy.d.ts.map +1 -1
- package/dist/entity/relation_helper.d.ts.map +1 -1
- package/dist/entity/tree-entity.interface.d.ts +5 -0
- package/dist/entity/tree-entity.interface.d.ts.map +1 -0
- package/dist/gateway/RxDBTabsGateway.d.ts +52 -0
- package/dist/gateway/RxDBTabsGateway.d.ts.map +1 -0
- package/dist/gateway/gateway.interface.d.ts +43 -0
- package/dist/gateway/gateway.interface.d.ts.map +1 -0
- package/dist/index.d.ts +17 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5791 -1896
- package/dist/query/entity_type_dependencies.d.ts +3 -2
- package/dist/query/entity_type_dependencies.d.ts.map +1 -1
- package/dist/query/merge-update-basic.d.ts +30 -0
- package/dist/query/merge-update-basic.d.ts.map +1 -0
- package/dist/query/merge-update-tree.d.ts +86 -0
- package/dist/query/merge-update-tree.d.ts.map +1 -0
- package/dist/query/merge-update.utils.d.ts +52 -0
- package/dist/query/merge-update.utils.d.ts.map +1 -0
- package/dist/query/merge_create.d.ts +2 -2
- package/dist/query/merge_create.d.ts.map +1 -1
- package/dist/query/merge_remove.d.ts +2 -15
- package/dist/query/merge_remove.d.ts.map +1 -1
- package/dist/query/merge_update.d.ts +2 -2
- package/dist/query/merge_update.d.ts.map +1 -1
- package/dist/query/need_refresh_create.d.ts +4 -4
- package/dist/query/need_refresh_create.d.ts.map +1 -1
- package/dist/query/need_refresh_remove.d.ts +2 -2
- package/dist/query/need_refresh_remove.d.ts.map +1 -1
- package/dist/query/need_refresh_update.d.ts +4 -4
- package/dist/query/need_refresh_update.d.ts.map +1 -1
- package/dist/query/query-matching.utils.d.ts +18 -2
- package/dist/query/query-matching.utils.d.ts.map +1 -1
- package/dist/query/query-relation.utils.d.ts +44 -0
- package/dist/query/query-relation.utils.d.ts.map +1 -0
- package/dist/query/query-rules-builder.d.ts +68 -0
- package/dist/query/query-rules-builder.d.ts.map +1 -0
- package/dist/query/query-tree.utils.d.ts +54 -0
- package/dist/query/query-tree.utils.d.ts.map +1 -0
- package/dist/repository/QueryManager.d.ts +23 -1
- package/dist/repository/QueryManager.d.ts.map +1 -1
- package/dist/repository/QueryTask.d.ts +42 -5
- package/dist/repository/QueryTask.d.ts.map +1 -1
- package/dist/repository/Repository.d.ts +24 -35
- package/dist/repository/Repository.d.ts.map +1 -1
- package/dist/repository/RepositoryBase.d.ts +5 -3
- package/dist/repository/RepositoryBase.d.ts.map +1 -1
- package/dist/repository/TreeRepository.d.ts +28 -1
- package/dist/repository/TreeRepository.d.ts.map +1 -1
- package/dist/repository/fingerprint.utils.d.ts +28 -0
- package/dist/repository/fingerprint.utils.d.ts.map +1 -0
- package/dist/repository/query-options.interface.d.ts +50 -19
- package/dist/repository/query-options.interface.d.ts.map +1 -1
- package/dist/repository/query.interface.d.ts +70 -25
- package/dist/repository/query.interface.d.ts.map +1 -1
- package/dist/repository/relation-query.interface.d.ts +19 -0
- package/dist/repository/relation-query.interface.d.ts.map +1 -1
- package/dist/repository/repository.interface.d.ts +5 -8
- package/dist/repository/repository.interface.d.ts.map +1 -1
- package/dist/repository/tree-repository.interface.d.ts +29 -2
- package/dist/repository/tree-repository.interface.d.ts.map +1 -1
- package/dist/rxdb-adapter.d.ts +96 -14
- package/dist/rxdb-adapter.d.ts.map +1 -1
- package/dist/rxdb-events.d.ts +316 -172
- package/dist/rxdb-events.d.ts.map +1 -1
- package/dist/rxdb-plugin.d.ts +2 -2
- package/dist/rxdb-plugin.d.ts.map +1 -1
- package/dist/rxdb-utils.d.ts +15 -8
- package/dist/rxdb-utils.d.ts.map +1 -1
- package/dist/rxdb.interface.d.ts +4 -0
- package/dist/rxdb.interface.d.ts.map +1 -1
- package/dist/rxdb.private.d.ts +5 -0
- package/dist/rxdb.private.d.ts.map +1 -1
- package/dist/schema/SchemaManager.d.ts +1 -0
- package/dist/schema/SchemaManager.d.ts.map +1 -1
- package/dist/system/branch.d.ts +124 -7
- package/dist/system/branch.d.ts.map +1 -1
- package/dist/system/change.d.ts +605 -30
- package/dist/system/change.d.ts.map +1 -1
- package/dist/system/migration.d.ts +61 -11
- package/dist/system/migration.d.ts.map +1 -1
- package/dist/system/repository-sync.d.ts +95 -0
- package/dist/system/repository-sync.d.ts.map +1 -0
- package/dist/system/system.interface.d.ts +25 -0
- package/dist/system/system.interface.d.ts.map +1 -0
- package/dist/system/types.d.ts +233 -120
- package/dist/system/types.d.ts.map +1 -1
- package/dist/system/types.local.d.ts +156 -0
- package/dist/system/types.local.d.ts.map +1 -0
- package/dist/system/types.remote.d.ts +103 -0
- package/dist/system/types.remote.d.ts.map +1 -0
- package/dist/version/HistoryManager.d.ts +238 -0
- package/dist/version/HistoryManager.d.ts.map +1 -0
- package/dist/version/LWWConflictResolver.d.ts +41 -0
- package/dist/version/LWWConflictResolver.d.ts.map +1 -0
- package/dist/version/VersionManager.d.ts +407 -0
- package/dist/version/VersionManager.d.ts.map +1 -0
- package/dist/version/VersionManager.interface.d.ts +428 -0
- package/dist/version/VersionManager.interface.d.ts.map +1 -0
- package/dist/version/VersionManager.utils.d.ts +14 -0
- package/dist/version/VersionManager.utils.d.ts.map +1 -0
- package/dist/version/bulk-sync.d.ts +97 -0
- package/dist/version/bulk-sync.d.ts.map +1 -0
- package/dist/version/check-repository-updates.d.ts +53 -0
- package/dist/version/check-repository-updates.d.ts.map +1 -0
- package/dist/version/compact-changes.d.ts +45 -0
- package/dist/version/compact-changes.d.ts.map +1 -0
- package/dist/version/conflict.d.ts +75 -0
- package/dist/version/conflict.d.ts.map +1 -0
- package/dist/version/create_branch.d.ts +13 -0
- package/dist/version/create_branch.d.ts.map +1 -0
- package/dist/version/dependency-graph.d.ts +132 -0
- package/dist/version/dependency-graph.d.ts.map +1 -0
- package/dist/version/find_switch_branch_step.d.ts +53 -0
- package/dist/version/find_switch_branch_step.d.ts.map +1 -0
- package/dist/version/get-all-repository-sync-status.d.ts +58 -0
- package/dist/version/get-all-repository-sync-status.d.ts.map +1 -0
- package/dist/version/get-repository-sync-status.d.ts +74 -0
- package/dist/version/get-repository-sync-status.d.ts.map +1 -0
- package/dist/version/pull-repository.d.ts +99 -0
- package/dist/version/pull-repository.d.ts.map +1 -0
- package/dist/version/pull.d.ts +11 -0
- package/dist/version/pull.d.ts.map +1 -0
- package/dist/version/push-repository.d.ts +93 -0
- package/dist/version/push-repository.d.ts.map +1 -0
- package/dist/version/push.d.ts +11 -0
- package/dist/version/push.d.ts.map +1 -0
- package/dist/version/remove_branch.d.ts +8 -0
- package/dist/version/remove_branch.d.ts.map +1 -0
- package/dist/version/switch_branch_actions.d.ts +17 -0
- package/dist/version/switch_branch_actions.d.ts.map +1 -0
- package/dist/version/sync-repository.d.ts +57 -0
- package/dist/version/sync-repository.d.ts.map +1 -0
- package/dist/version/sync-type-utils.d.ts +145 -0
- package/dist/version/sync-type-utils.d.ts.map +1 -0
- package/dist/version/topological-sort.d.ts +70 -0
- package/dist/version/topological-sort.d.ts.map +1 -0
- package/dist/version/version.utils.d.ts +4 -0
- package/dist/version/version.utils.d.ts.map +1 -0
- package/package.json +4 -4
- package/README.md +0 -1
- package/dist/entity/@GraphEntity.d.ts +0 -8
- package/dist/entity/@GraphEntity.d.ts.map +0 -1
- package/dist/entity/GraphEntityBase.d.ts +0 -10
- package/dist/entity/GraphEntityBase.d.ts.map +0 -1
- package/dist/entity/graph_edge_entity.d.ts +0 -5
- package/dist/entity/graph_edge_entity.d.ts.map +0 -1
- package/dist/entity/transition-metadata.d.ts.map +0 -1
- package/dist/system/VersionManager.d.ts +0 -35
- package/dist/system/VersionManager.d.ts.map +0 -1
|
@@ -0,0 +1,428 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { EntityType, UUID } from '../entity/entity.interface.js';
|
|
3
|
+
import { RxDBChange } from '../system/change.js';
|
|
4
|
+
import { ConflictResolver } from './conflict.js';
|
|
5
|
+
/**
|
|
6
|
+
* Pull 操作结果
|
|
7
|
+
*/
|
|
8
|
+
export interface PullResult {
|
|
9
|
+
/**
|
|
10
|
+
* 从远程拉取的变更数量(压缩前)
|
|
11
|
+
*/
|
|
12
|
+
pulled: number;
|
|
13
|
+
/**
|
|
14
|
+
* 被压缩/丢弃的变更数量
|
|
15
|
+
* 例如:INSERT → DELETE 的变更会被丢弃
|
|
16
|
+
*/
|
|
17
|
+
compacted: number;
|
|
18
|
+
/**
|
|
19
|
+
* 成功应用到本地的变更数量(压缩后)
|
|
20
|
+
*/
|
|
21
|
+
applied: number;
|
|
22
|
+
/**
|
|
23
|
+
* 是否还有更多数据需要拉取
|
|
24
|
+
*/
|
|
25
|
+
hasMore: boolean;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Push 操作结果
|
|
29
|
+
*/
|
|
30
|
+
export interface PushResult {
|
|
31
|
+
/**
|
|
32
|
+
* 成功推送到远程的变更数量(压缩后)
|
|
33
|
+
*/
|
|
34
|
+
pushed: number;
|
|
35
|
+
/**
|
|
36
|
+
* 推送失败的变更数量
|
|
37
|
+
*/
|
|
38
|
+
failed: number;
|
|
39
|
+
/**
|
|
40
|
+
* 被压缩/丢弃的变更数量
|
|
41
|
+
* 例如:INSERT → DELETE 的变更会被丢弃
|
|
42
|
+
*/
|
|
43
|
+
compacted: number;
|
|
44
|
+
/**
|
|
45
|
+
* 压缩前的原始变更数量
|
|
46
|
+
* originalCount = pushed + failed + compacted
|
|
47
|
+
*/
|
|
48
|
+
originalCount: number;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Sync 操作结果(pull + push 组合)
|
|
52
|
+
*/
|
|
53
|
+
export interface SyncResult {
|
|
54
|
+
/**
|
|
55
|
+
* Pull 操作结果
|
|
56
|
+
*/
|
|
57
|
+
pullResult: PullResult;
|
|
58
|
+
/**
|
|
59
|
+
* Push 操作结果
|
|
60
|
+
*/
|
|
61
|
+
pushResult: PushResult;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Pull 操作选项
|
|
65
|
+
*/
|
|
66
|
+
export interface PullOptions {
|
|
67
|
+
/**
|
|
68
|
+
* 单次拉取的最大数量
|
|
69
|
+
* @default 1000
|
|
70
|
+
*/
|
|
71
|
+
limit?: number;
|
|
72
|
+
/**
|
|
73
|
+
* 是否自动处理分页,拉取所有数据
|
|
74
|
+
* @default false
|
|
75
|
+
*/
|
|
76
|
+
fetchAll?: boolean;
|
|
77
|
+
/**
|
|
78
|
+
* 可选的实体过滤列表(用于 repository-level sync)
|
|
79
|
+
* 只拉取指定实体的变更
|
|
80
|
+
* @example ['Todo', 'User']
|
|
81
|
+
* @example [{ namespace: 'public', entity: 'Todo' }]
|
|
82
|
+
*/
|
|
83
|
+
repositoryFilter?: (string | RepositoryIdentifier)[];
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Check repository updates result
|
|
87
|
+
*
|
|
88
|
+
* 检查远程仓库更新的结果,用于实现 "有 N 条更新可拉取" 功能
|
|
89
|
+
*/
|
|
90
|
+
export interface CheckRepositoryUpdatesResult {
|
|
91
|
+
/**
|
|
92
|
+
* 是否有更新可拉取
|
|
93
|
+
*/
|
|
94
|
+
hasUpdates: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* 远程可用的更新数量
|
|
97
|
+
* 仅在 hasUpdates=true 时有意义
|
|
98
|
+
*/
|
|
99
|
+
updateCount: number;
|
|
100
|
+
/**
|
|
101
|
+
* 远程最新的 changeId
|
|
102
|
+
* 如果远程没有任何变更记录,则为 0
|
|
103
|
+
*/
|
|
104
|
+
latestChangeId: number;
|
|
105
|
+
/**
|
|
106
|
+
* 本地最后一次拉取的 changeId
|
|
107
|
+
* 如果本地从未拉取过,则为 0
|
|
108
|
+
*/
|
|
109
|
+
lastPulledChangeId: number;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Push 操作选项
|
|
113
|
+
*/
|
|
114
|
+
export interface PushOptions {
|
|
115
|
+
/**
|
|
116
|
+
* 单次推送的最大数量
|
|
117
|
+
* @default 1000
|
|
118
|
+
*/
|
|
119
|
+
batchSize?: number;
|
|
120
|
+
/**
|
|
121
|
+
* 可选的实体过滤列表(用于 repository-level sync)
|
|
122
|
+
* 只推送指定实体的变更
|
|
123
|
+
* @example ['Todo', 'User']
|
|
124
|
+
* @example [{ namespace: 'public', entity: 'Todo' }]
|
|
125
|
+
*/
|
|
126
|
+
repositoryFilter?: (string | RepositoryIdentifier)[];
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* 远程同步配置选项
|
|
130
|
+
*/
|
|
131
|
+
export interface RemoteSyncOptions {
|
|
132
|
+
/**
|
|
133
|
+
* 自动同步开关
|
|
134
|
+
*
|
|
135
|
+
* - `true`(默认): 收到远程变更时立即应用到本地实体表
|
|
136
|
+
* - `false`: 缓存变更,等待用户调用 pull() 时批量应用
|
|
137
|
+
*
|
|
138
|
+
* @default true
|
|
139
|
+
*/
|
|
140
|
+
autoSync?: boolean;
|
|
141
|
+
/**
|
|
142
|
+
* 冲突解决器
|
|
143
|
+
*
|
|
144
|
+
* 当 pull 时检测到本地未同步变更与远程变更冲突时调用
|
|
145
|
+
*
|
|
146
|
+
* @default new LWWConflictResolver()
|
|
147
|
+
*/
|
|
148
|
+
conflictResolver?: ConflictResolver;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* 历史记录作用域类型
|
|
152
|
+
*/
|
|
153
|
+
export type HistoryScopeType = 'database' | 'repository' | 'entity';
|
|
154
|
+
/**
|
|
155
|
+
* 历史记录作用域配置
|
|
156
|
+
*/
|
|
157
|
+
export type HistoryScope = {
|
|
158
|
+
type: 'database';
|
|
159
|
+
} | {
|
|
160
|
+
type: 'repository';
|
|
161
|
+
namespace: string;
|
|
162
|
+
entity: string;
|
|
163
|
+
} | {
|
|
164
|
+
type: 'entity';
|
|
165
|
+
namespace: string;
|
|
166
|
+
entity: string;
|
|
167
|
+
entityId: string;
|
|
168
|
+
};
|
|
169
|
+
/**
|
|
170
|
+
* 历史记录作用域 API
|
|
171
|
+
* 所有作用域返回统一的接口,消除特殊情况
|
|
172
|
+
*/
|
|
173
|
+
export interface HistoryScopeAPI {
|
|
174
|
+
type: HistoryScopeType;
|
|
175
|
+
/** 历史记录流 */
|
|
176
|
+
histories$: Observable<HistoryItem[]>;
|
|
177
|
+
/** 可撤销的历史记录流 */
|
|
178
|
+
undoHistories$: Observable<HistoryItem[]>;
|
|
179
|
+
/** 可重做的历史记录流 */
|
|
180
|
+
redoHistories$: Observable<HistoryItem[]>;
|
|
181
|
+
/** 历史记录总数 */
|
|
182
|
+
count$: Observable<number>;
|
|
183
|
+
/** 可撤销数量 */
|
|
184
|
+
undoCount$: Observable<number>;
|
|
185
|
+
/** 可重做数量 */
|
|
186
|
+
redoCount$: Observable<number>;
|
|
187
|
+
/** 撤销操作 */
|
|
188
|
+
undo(step?: number): Promise<void>;
|
|
189
|
+
/** 重做操作 */
|
|
190
|
+
redo(step?: number): Promise<void>;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 历史记录项
|
|
194
|
+
* 表示一个可撤销/重做的操作单元
|
|
195
|
+
*/
|
|
196
|
+
export interface HistoryItem {
|
|
197
|
+
changeId: number;
|
|
198
|
+
/**
|
|
199
|
+
* 唯一指纹,用于标识该历史项
|
|
200
|
+
*/
|
|
201
|
+
fingerprint: string;
|
|
202
|
+
/**
|
|
203
|
+
* 命名空间
|
|
204
|
+
*/
|
|
205
|
+
namespace: string;
|
|
206
|
+
/**
|
|
207
|
+
* 实体名称
|
|
208
|
+
*/
|
|
209
|
+
entity: string;
|
|
210
|
+
/**
|
|
211
|
+
* 操作类型
|
|
212
|
+
*/
|
|
213
|
+
type: 'INSERT' | 'UPDATE' | 'DELETE' | 'TRANSACTION';
|
|
214
|
+
/**
|
|
215
|
+
* 描述信息(用于 UI 展示)
|
|
216
|
+
*
|
|
217
|
+
* @example
|
|
218
|
+
* - 单条变更:「创建 User」「更新 Todo」「删除 Post」
|
|
219
|
+
* - 多条变更:「事务: 创建2条, 更新3条」
|
|
220
|
+
*/
|
|
221
|
+
description: string;
|
|
222
|
+
/**
|
|
223
|
+
* 事务ID
|
|
224
|
+
*/
|
|
225
|
+
transactionId: UUID | null;
|
|
226
|
+
/**
|
|
227
|
+
* 该历史项包含的所有变更
|
|
228
|
+
*/
|
|
229
|
+
changes: RxDBChange[];
|
|
230
|
+
/**
|
|
231
|
+
* 变更数量
|
|
232
|
+
*/
|
|
233
|
+
count: number;
|
|
234
|
+
/**
|
|
235
|
+
* 最新变更的时间戳
|
|
236
|
+
*/
|
|
237
|
+
createdAt: Date;
|
|
238
|
+
/**
|
|
239
|
+
* 是否已撤销
|
|
240
|
+
* true 表示该历史项已被撤销(任意一个 change 被撤销即为 true)
|
|
241
|
+
*/
|
|
242
|
+
reverted: boolean;
|
|
243
|
+
/**
|
|
244
|
+
* Redo 是否失效
|
|
245
|
+
* true 表示该历史项的 redo 操作已被废弃(任意一个 change 被废弃即为 true)
|
|
246
|
+
*/
|
|
247
|
+
redoInvalidated: boolean;
|
|
248
|
+
}
|
|
249
|
+
export type EntityData = Record<string, any> | any;
|
|
250
|
+
export interface SwitchVersionChange<T extends EntityType = EntityType> {
|
|
251
|
+
patch: Partial<InstanceType<T>> | null;
|
|
252
|
+
inversePatch: Partial<InstanceType<T>> | null;
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* 切换分支版本需要的操作
|
|
256
|
+
*/
|
|
257
|
+
export interface SwitchVersionActions<T extends EntityType = EntityType> {
|
|
258
|
+
/**
|
|
259
|
+
* 需要删除的实体键集合 key
|
|
260
|
+
* key 格式:`${namespace}:${entityName}:${entityId}`
|
|
261
|
+
*/
|
|
262
|
+
deletes: Map<string, SwitchVersionChange<T>>;
|
|
263
|
+
/**
|
|
264
|
+
* 需要更新的实体键集合 key
|
|
265
|
+
* key 格式:`${namespace}:${entityName}:${entityId}`
|
|
266
|
+
*/
|
|
267
|
+
updates: Map<string, SwitchVersionChange<T>>;
|
|
268
|
+
/**
|
|
269
|
+
* 需要插入的实体键集合 key
|
|
270
|
+
* key 格式:`${namespace}:${entityName}:${entityId}`
|
|
271
|
+
*/
|
|
272
|
+
inserts: Map<string, SwitchVersionChange<T>>;
|
|
273
|
+
/**
|
|
274
|
+
* 更新 RxDBChange 序列号
|
|
275
|
+
* local only, 不会同步到远程
|
|
276
|
+
*/
|
|
277
|
+
updateRxDBChangeSequence?: number;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Repository identifier
|
|
281
|
+
* Uniquely identifies an entity type
|
|
282
|
+
*/
|
|
283
|
+
export interface RepositoryIdentifier {
|
|
284
|
+
/**
|
|
285
|
+
* Entity namespace
|
|
286
|
+
* @example "public"
|
|
287
|
+
*/
|
|
288
|
+
namespace: string;
|
|
289
|
+
/**
|
|
290
|
+
* Entity name
|
|
291
|
+
* @example "Todo"
|
|
292
|
+
*/
|
|
293
|
+
entity: string;
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* Pull repository options
|
|
297
|
+
*/
|
|
298
|
+
export interface PullRepositoryOptions {
|
|
299
|
+
/**
|
|
300
|
+
* Maximum number of changes to fetch per request
|
|
301
|
+
* @default 1000
|
|
302
|
+
*/
|
|
303
|
+
limit?: number;
|
|
304
|
+
/**
|
|
305
|
+
* Whether to fetch all changes in multiple requests
|
|
306
|
+
* @default false
|
|
307
|
+
*/
|
|
308
|
+
fetchAll?: boolean;
|
|
309
|
+
/**
|
|
310
|
+
* Whether to include related entities (cascade sync)
|
|
311
|
+
*
|
|
312
|
+
* When true:
|
|
313
|
+
* - Automatically pulls all parent entities (foreign key references)
|
|
314
|
+
* - Follows topological order: parent -> child
|
|
315
|
+
* - Example: Pulling Post automatically pulls User
|
|
316
|
+
*
|
|
317
|
+
* When false:
|
|
318
|
+
* - Only syncs the specified repository
|
|
319
|
+
* - May cause foreign key constraint errors if parent entities not synced
|
|
320
|
+
*
|
|
321
|
+
* @default true
|
|
322
|
+
*/
|
|
323
|
+
includeRelated?: boolean;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Push repository options
|
|
327
|
+
*/
|
|
328
|
+
export interface PushRepositoryOptions {
|
|
329
|
+
/**
|
|
330
|
+
* Maximum number of changes to push per batch
|
|
331
|
+
* @default 1000
|
|
332
|
+
*/
|
|
333
|
+
batchSize?: number;
|
|
334
|
+
/**
|
|
335
|
+
* Whether to include related entities (cascade sync)
|
|
336
|
+
*
|
|
337
|
+
* When true:
|
|
338
|
+
* - Automatically pushes all child entities (entities referencing current entity)
|
|
339
|
+
* - Follows reverse topological order: child -> parent
|
|
340
|
+
* - Example: Pushing User automatically pushes Post
|
|
341
|
+
*
|
|
342
|
+
* When false:
|
|
343
|
+
* - Only syncs the specified repository
|
|
344
|
+
* - May cause incomplete remote data
|
|
345
|
+
*
|
|
346
|
+
* @default true
|
|
347
|
+
*/
|
|
348
|
+
includeRelated?: boolean;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Sync repository options
|
|
352
|
+
*/
|
|
353
|
+
export interface SyncRepositoryOptions {
|
|
354
|
+
pull?: PullRepositoryOptions;
|
|
355
|
+
push?: PushRepositoryOptions;
|
|
356
|
+
}
|
|
357
|
+
/**
|
|
358
|
+
* Pull repository result
|
|
359
|
+
*/
|
|
360
|
+
export interface PullRepositoryResult {
|
|
361
|
+
/**
|
|
362
|
+
* Repository identifier
|
|
363
|
+
*/
|
|
364
|
+
repository: RepositoryIdentifier;
|
|
365
|
+
/**
|
|
366
|
+
* Number of changes pulled from remote (before compaction)
|
|
367
|
+
*/
|
|
368
|
+
pulled: number;
|
|
369
|
+
/**
|
|
370
|
+
* Number of changes compacted/discarded
|
|
371
|
+
*/
|
|
372
|
+
compacted: number;
|
|
373
|
+
/**
|
|
374
|
+
* Number of changes successfully applied to local (after compaction)
|
|
375
|
+
*/
|
|
376
|
+
applied: number;
|
|
377
|
+
/**
|
|
378
|
+
* Whether there are more changes to pull
|
|
379
|
+
*/
|
|
380
|
+
hasMore: boolean;
|
|
381
|
+
/**
|
|
382
|
+
* Results of related repositories (when includeRelated=true)
|
|
383
|
+
*/
|
|
384
|
+
relatedResults?: PullRepositoryResult[];
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Push repository result
|
|
388
|
+
*/
|
|
389
|
+
export interface PushRepositoryResult {
|
|
390
|
+
/**
|
|
391
|
+
* Repository identifier
|
|
392
|
+
*/
|
|
393
|
+
repository: RepositoryIdentifier;
|
|
394
|
+
/**
|
|
395
|
+
* Number of changes successfully pushed to remote (after compaction)
|
|
396
|
+
*/
|
|
397
|
+
pushed: number;
|
|
398
|
+
/**
|
|
399
|
+
* Number of changes that failed to push
|
|
400
|
+
*/
|
|
401
|
+
failed: number;
|
|
402
|
+
/**
|
|
403
|
+
* Number of changes compacted/discarded
|
|
404
|
+
*/
|
|
405
|
+
compacted: number;
|
|
406
|
+
/**
|
|
407
|
+
* Original number of unpushed changes (before compaction)
|
|
408
|
+
*/
|
|
409
|
+
originalCount: number;
|
|
410
|
+
/**
|
|
411
|
+
* Results of related repositories (when includeRelated=true)
|
|
412
|
+
*/
|
|
413
|
+
relatedResults?: PushRepositoryResult[];
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Sync repository result
|
|
417
|
+
*/
|
|
418
|
+
export interface SyncRepositoryResult {
|
|
419
|
+
/**
|
|
420
|
+
* Pull result
|
|
421
|
+
*/
|
|
422
|
+
pullResult: PullRepositoryResult;
|
|
423
|
+
/**
|
|
424
|
+
* Push result
|
|
425
|
+
*/
|
|
426
|
+
pushResult: PushRepositoryResult;
|
|
427
|
+
}
|
|
428
|
+
//# sourceMappingURL=VersionManager.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VersionManager.interface.d.ts","sourceRoot":"","sources":["../../src/version/VersionManager.interface.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IRxDBChange } from '../system/system.interface.js';
|
|
2
|
+
/**
|
|
3
|
+
* 构造业务实体的唯一键(用于 deletes/updates/inserts Map)
|
|
4
|
+
* @param change - RxDBChange 实例
|
|
5
|
+
* @returns 格式: "namespace:entity:entityId"
|
|
6
|
+
*/
|
|
7
|
+
export declare const getRxDBChangeKey: <T extends IRxDBChange>(change: T) => string;
|
|
8
|
+
/**
|
|
9
|
+
* 解析实体键
|
|
10
|
+
* @param entityKey - 实体键字符串
|
|
11
|
+
* @returns [namespace, entity, entityId]
|
|
12
|
+
*/
|
|
13
|
+
export declare const parseRxDBChangeKey: (entityKey: string) => [string, string, string];
|
|
14
|
+
//# sourceMappingURL=VersionManager.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"VersionManager.utils.d.ts","sourceRoot":"","sources":["../../src/version/VersionManager.utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,WAAW,EAAE,QAAQ,CAAC,WACN,CAAC;AAE5D;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,WAAW,MAAM,KAA6B,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { RxDB } from '../RxDB.js';
|
|
2
|
+
import { RepositoryIdentifier } from './dependency-graph.js';
|
|
3
|
+
import { PullRepositoryOptions } from './pull-repository.js';
|
|
4
|
+
import { PushRepositoryOptions } from './push-repository.js';
|
|
5
|
+
import { SyncRepositoryResult } from './sync-repository.js';
|
|
6
|
+
/**
|
|
7
|
+
* 批量同步选项
|
|
8
|
+
*/
|
|
9
|
+
export interface BulkSyncOptions {
|
|
10
|
+
/**
|
|
11
|
+
* 同步操作类型
|
|
12
|
+
* @default 'sync'
|
|
13
|
+
*/
|
|
14
|
+
operation?: 'pull' | 'push' | 'sync';
|
|
15
|
+
/**
|
|
16
|
+
* 目标仓库列表
|
|
17
|
+
* 如果为空,则同步所有启用的仓库
|
|
18
|
+
*/
|
|
19
|
+
repositories?: RepositoryIdentifier[];
|
|
20
|
+
/**
|
|
21
|
+
* 拉取选项(应用于所有仓库)
|
|
22
|
+
*/
|
|
23
|
+
pull?: PullRepositoryOptions;
|
|
24
|
+
/**
|
|
25
|
+
* 推送选项(应用于所有仓库)
|
|
26
|
+
*/
|
|
27
|
+
push?: PushRepositoryOptions;
|
|
28
|
+
/**
|
|
29
|
+
* 是否并发执行
|
|
30
|
+
* @default false
|
|
31
|
+
*/
|
|
32
|
+
concurrent?: boolean;
|
|
33
|
+
/**
|
|
34
|
+
* 并发限制(只有 concurrent=true 时生效)
|
|
35
|
+
* @default 3
|
|
36
|
+
*/
|
|
37
|
+
concurrency?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 批量同步结果
|
|
41
|
+
*/
|
|
42
|
+
export interface BulkSyncResult {
|
|
43
|
+
/**
|
|
44
|
+
* 成功的仓库数量
|
|
45
|
+
*/
|
|
46
|
+
succeeded: number;
|
|
47
|
+
/**
|
|
48
|
+
* 失败的仓库数量
|
|
49
|
+
*/
|
|
50
|
+
failed: number;
|
|
51
|
+
/**
|
|
52
|
+
* 每个仓库的详细结果
|
|
53
|
+
*/
|
|
54
|
+
results: Array<{
|
|
55
|
+
repository: RepositoryIdentifier;
|
|
56
|
+
success: boolean;
|
|
57
|
+
result?: SyncRepositoryResult;
|
|
58
|
+
error?: Error;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* 总耗时(毫秒)
|
|
62
|
+
*/
|
|
63
|
+
durationMs: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* 对多个仓库执行批量同步
|
|
67
|
+
*
|
|
68
|
+
* 支持顺序和并发两种执行模式。
|
|
69
|
+
* 在顺序模式下,仓库将被逐个同步。
|
|
70
|
+
* 在并发模式下,可以同时并发同步多个仓库。
|
|
71
|
+
*
|
|
72
|
+
* @param rxdb - RxDB 实例
|
|
73
|
+
* @param options - 批量同步选项
|
|
74
|
+
* @returns 带有成功/失败计数的批量同步结果
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* // 顺序同步所有启用的仓库
|
|
79
|
+
* const result = await bulkSync(rxdb);
|
|
80
|
+
*
|
|
81
|
+
* // 同步指定仓库
|
|
82
|
+
* const result = await bulkSync(rxdb, {
|
|
83
|
+
* repositories: [
|
|
84
|
+
* { namespace: 'public', entity: 'Todo' },
|
|
85
|
+
* { namespace: 'public', entity: 'User' }
|
|
86
|
+
* ]
|
|
87
|
+
* });
|
|
88
|
+
*
|
|
89
|
+
* // 并发同步并限制并发数
|
|
90
|
+
* const result = await bulkSync(rxdb, {
|
|
91
|
+
* concurrent: true,
|
|
92
|
+
* concurrency: 3
|
|
93
|
+
* });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare function bulkSync(rxdb: RxDB, options?: BulkSyncOptions): Promise<BulkSyncResult>;
|
|
97
|
+
//# sourceMappingURL=bulk-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-sync.d.ts","sourceRoot":"","sources":["../../src/version/bulk-sync.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAA8C,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAG7G;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAErC;;;OAGG;IACH,YAAY,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAEtC;;OAEG;IACH,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAE7B;;OAEG;IACH,IAAI,CAAC,EAAE,qBAAqB,CAAC;IAE7B;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;OAEG;IACH,OAAO,EAAE,KAAK,CAAC;QACb,UAAU,EAAE,oBAAoB,CAAC;QACjC,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,oBAAoB,CAAC;QAC9B,KAAK,CAAC,EAAE,KAAK,CAAC;KACf,CAAC,CAAC;IAEH;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAsJD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC,CAyCjG"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { RxDB } from '../RxDB.js';
|
|
2
|
+
/**
|
|
3
|
+
* Repository 标识符
|
|
4
|
+
*/
|
|
5
|
+
export interface RepositoryIdentifier {
|
|
6
|
+
namespace: string;
|
|
7
|
+
entity: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Check Repository Updates Result
|
|
11
|
+
*/
|
|
12
|
+
export interface CheckRepositoryUpdatesResult {
|
|
13
|
+
/**
|
|
14
|
+
* Repository 标识
|
|
15
|
+
*/
|
|
16
|
+
repository: RepositoryIdentifier;
|
|
17
|
+
/**
|
|
18
|
+
* 远程最新的 changeId
|
|
19
|
+
*/
|
|
20
|
+
remoteLatestChangeId: number;
|
|
21
|
+
/**
|
|
22
|
+
* 本地最后拉取的远程 changeId
|
|
23
|
+
*/
|
|
24
|
+
localLastPullRemoteChangeId: number | null;
|
|
25
|
+
/**
|
|
26
|
+
* 待拉取的变更数量
|
|
27
|
+
*/
|
|
28
|
+
pendingCount: number;
|
|
29
|
+
/**
|
|
30
|
+
* 是否有更新
|
|
31
|
+
*/
|
|
32
|
+
hasUpdates: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 预检远程更新(不下载数据)
|
|
36
|
+
*
|
|
37
|
+
* @param rxdb - RxDB 实例
|
|
38
|
+
* @param namespace - 命名空间
|
|
39
|
+
* @param entity - 实体名称
|
|
40
|
+
* @returns 更新检查结果
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // 检查 Todo 是否有远程更新
|
|
45
|
+
* const result = await checkRepositoryUpdates(rxdb, 'public', 'Todo');
|
|
46
|
+
* if (result.hasUpdates) {
|
|
47
|
+
* console.log(`有 ${result.pendingCount} 条更新待拉取`);
|
|
48
|
+
* // 用户点击"更新"按钮后再调用 pullRepository()
|
|
49
|
+
* }
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
export declare function checkRepositoryUpdates(rxdb: RxDB, namespace: string, entity: string): Promise<CheckRepositoryUpdatesResult>;
|
|
53
|
+
//# sourceMappingURL=check-repository-updates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-repository-updates.d.ts","sourceRoot":"","sources":["../../src/version/check-repository-updates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIvC;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,UAAU,EAAE,oBAAoB,CAAC;IAEjC;;OAEG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;OAEG;IACH,2BAA2B,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3C;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,OAAO,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,4BAA4B,CAAC,CAkEvC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { IRxDBChange } from '../system/system.interface.js';
|
|
2
|
+
import { SwitchVersionActions } from './VersionManager.interface.js';
|
|
3
|
+
/**
|
|
4
|
+
* 压缩变更列表为 SwitchVersionActions(专用于 Push 场景)
|
|
5
|
+
*
|
|
6
|
+
* 使用状态机逻辑处理变更压缩,针对 Push 场景特化:
|
|
7
|
+
* - 本地新建后删除的数据(INSERT → DELETE 且 inversePatch 为 null)不需要 push
|
|
8
|
+
* - 远程已有数据的删除(inversePatch 不为 null)必须 push DELETE
|
|
9
|
+
*
|
|
10
|
+
* @param changes - 原始变更列表(会自动按 id 排序)
|
|
11
|
+
* @returns 压缩后的操作集合
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // 场景1:本地新建后删除(不需要 push)
|
|
16
|
+
* const changes1 = [
|
|
17
|
+
* { type: 'INSERT', entityId: '1', patch: { name: 'Alice' }, inversePatch: null },
|
|
18
|
+
* { type: 'DELETE', entityId: '1', patch: null, inversePatch: null }
|
|
19
|
+
* ];
|
|
20
|
+
* const actions1 = compactChanges(changes1);
|
|
21
|
+
* // actions1.deletes.size === 0(本地数据,服务器从未见过,不需要通知删除)
|
|
22
|
+
*
|
|
23
|
+
* // 场景2:远程数据被删除(必须 push DELETE)
|
|
24
|
+
* const changes2 = [
|
|
25
|
+
* { type: 'UPDATE', entityId: '1', patch: { name: 'Bob' }, inversePatch: { name: 'Alice' } },
|
|
26
|
+
* { type: 'DELETE', entityId: '1', patch: null, inversePatch: { name: 'Bob' } }
|
|
27
|
+
* ];
|
|
28
|
+
* const actions2 = compactChanges(changes2);
|
|
29
|
+
* // actions2.deletes.size === 1(服务器有这条数据,必须通知删除)
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @remarks
|
|
33
|
+
* **压缩规则(Push 专用)**:
|
|
34
|
+
* - `INSERT → DELETE` + `inversePatch === null` → 抵消(本地新建,服务器从未见过)
|
|
35
|
+
* - `INSERT → DELETE` + `inversePatch !== null` → 保留 DELETE(服务器已有旧数据)
|
|
36
|
+
* - `INSERT → UPDATE*` → 合并为 INSERT(一次性插入最终状态)
|
|
37
|
+
* - `UPDATE → UPDATE*` → 合并为 UPDATE(合并所有 patch)
|
|
38
|
+
* - `UPDATE → DELETE` → 保留 DELETE(服务器必须知道数据被删除)
|
|
39
|
+
*
|
|
40
|
+
* **与 `get_switch_version_actions` 的区别**:
|
|
41
|
+
* - `get_switch_version_actions`:分支切换场景,`INSERT → DELETE` 完全抵消
|
|
42
|
+
* - `compactChanges`:Push 场景,基于 `inversePatch` 判断是否需要通知服务器
|
|
43
|
+
*/
|
|
44
|
+
export declare function compactChanges<T extends IRxDBChange>(changes: T[], actions?: SwitchVersionActions): SwitchVersionActions;
|
|
45
|
+
//# sourceMappingURL=compact-changes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compact-changes.d.ts","sourceRoot":"","sources":["../../src/version/compact-changes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAGrE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,WAAW,EAClD,OAAO,EAAE,CAAC,EAAE,EACZ,OAAO,GAAE,oBAIR,GACA,oBAAoB,CAmFtB"}
|