@aiao/rxdb 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (187) hide show
  1. package/dist/RxDB.d.ts +118 -21
  2. package/dist/RxDB.d.ts.map +1 -1
  3. package/dist/RxDBError.d.ts.map +1 -1
  4. package/dist/entity/@Entity.d.ts +1 -1
  5. package/dist/entity/@Entity.d.ts.map +1 -1
  6. package/dist/entity/@TreeEntity.d.ts +2 -21
  7. package/dist/entity/@TreeEntity.d.ts.map +1 -1
  8. package/dist/entity/EntityBase.d.ts +59 -11
  9. package/dist/entity/EntityBase.d.ts.map +1 -1
  10. package/dist/entity/EntityManager.d.ts +18 -25
  11. package/dist/entity/EntityManager.d.ts.map +1 -1
  12. package/dist/entity/EntityStatus.d.ts +149 -107
  13. package/dist/entity/EntityStatus.d.ts.map +1 -1
  14. package/dist/entity/EntityStatus.interface.d.ts +59 -0
  15. package/dist/entity/EntityStatus.interface.d.ts.map +1 -0
  16. package/dist/entity/TreeEntityBase.d.ts +32 -5
  17. package/dist/entity/TreeEntityBase.d.ts.map +1 -1
  18. package/dist/entity/entity.interface.d.ts +23 -34
  19. package/dist/entity/entity.interface.d.ts.map +1 -1
  20. package/dist/entity/entity.utils.d.ts +23 -2
  21. package/dist/entity/entity.utils.d.ts.map +1 -1
  22. package/dist/entity/{generate_many_to_many_entity.d.ts → many_to_many_entity.d.ts} +3 -3
  23. package/dist/entity/many_to_many_entity.d.ts.map +1 -0
  24. package/dist/entity/{entity-metadata-options.interface.d.ts → metadata-options.interface.d.ts} +312 -35
  25. package/dist/entity/metadata-options.interface.d.ts.map +1 -0
  26. package/dist/entity/{transition-metadata.d.ts → metadata-transition.d.ts} +3 -3
  27. package/dist/entity/metadata-transition.d.ts.map +1 -0
  28. package/dist/entity/{entity-metadata.interface.d.ts → metadata.interface.d.ts} +8 -2
  29. package/dist/entity/metadata.interface.d.ts.map +1 -0
  30. package/dist/entity/metadata_cascade_default.d.ts +54 -0
  31. package/dist/entity/metadata_cascade_default.d.ts.map +1 -0
  32. package/dist/entity/proxy.d.ts +7 -0
  33. package/dist/entity/proxy.d.ts.map +1 -0
  34. package/dist/entity/{entity_relation_helper.d.ts → relation_helper.d.ts} +2 -2
  35. package/dist/entity/relation_helper.d.ts.map +1 -0
  36. package/dist/entity/tree-entity.interface.d.ts +5 -0
  37. package/dist/entity/tree-entity.interface.d.ts.map +1 -0
  38. package/dist/gateway/RxDBTabsGateway.d.ts +52 -0
  39. package/dist/gateway/RxDBTabsGateway.d.ts.map +1 -0
  40. package/dist/gateway/gateway.interface.d.ts +43 -0
  41. package/dist/gateway/gateway.interface.d.ts.map +1 -0
  42. package/dist/index.d.ts +19 -13
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +6579 -2876
  45. package/dist/query/entity_type_dependencies.d.ts +22 -0
  46. package/dist/query/entity_type_dependencies.d.ts.map +1 -0
  47. package/dist/query/merge-update-basic.d.ts +30 -0
  48. package/dist/query/merge-update-basic.d.ts.map +1 -0
  49. package/dist/query/merge-update-tree.d.ts +86 -0
  50. package/dist/query/merge-update-tree.d.ts.map +1 -0
  51. package/dist/query/merge-update.utils.d.ts +52 -0
  52. package/dist/query/merge-update.utils.d.ts.map +1 -0
  53. package/dist/query/merge_create.d.ts +19 -0
  54. package/dist/query/merge_create.d.ts.map +1 -0
  55. package/dist/query/merge_remove.d.ts +6 -0
  56. package/dist/query/merge_remove.d.ts.map +1 -0
  57. package/dist/query/merge_update.d.ts +24 -0
  58. package/dist/query/merge_update.d.ts.map +1 -0
  59. package/dist/query/need_refresh_create.d.ts +11 -0
  60. package/dist/query/need_refresh_create.d.ts.map +1 -0
  61. package/dist/query/need_refresh_remove.d.ts +6 -0
  62. package/dist/query/need_refresh_remove.d.ts.map +1 -0
  63. package/dist/query/need_refresh_update.d.ts +11 -0
  64. package/dist/query/need_refresh_update.d.ts.map +1 -0
  65. package/dist/query/query-matching.utils.d.ts +60 -0
  66. package/dist/query/query-matching.utils.d.ts.map +1 -0
  67. package/dist/query/query-relation.utils.d.ts +44 -0
  68. package/dist/query/query-relation.utils.d.ts.map +1 -0
  69. package/dist/query/query-rules-builder.d.ts +68 -0
  70. package/dist/query/query-rules-builder.d.ts.map +1 -0
  71. package/dist/query/query-tree.utils.d.ts +54 -0
  72. package/dist/query/query-tree.utils.d.ts.map +1 -0
  73. package/dist/repository/QueryManager.d.ts +69 -0
  74. package/dist/repository/QueryManager.d.ts.map +1 -0
  75. package/dist/repository/QueryManager.interface.d.ts +106 -0
  76. package/dist/repository/QueryManager.interface.d.ts.map +1 -0
  77. package/dist/repository/QueryTask.d.ts +150 -0
  78. package/dist/repository/QueryTask.d.ts.map +1 -0
  79. package/dist/repository/Repository.d.ts +38 -44
  80. package/dist/repository/Repository.d.ts.map +1 -1
  81. package/dist/repository/RepositoryBase.d.ts +8 -8
  82. package/dist/repository/RepositoryBase.d.ts.map +1 -1
  83. package/dist/repository/TreeRepository.d.ts +29 -4
  84. package/dist/repository/TreeRepository.d.ts.map +1 -1
  85. package/dist/repository/fingerprint.utils.d.ts +28 -0
  86. package/dist/repository/fingerprint.utils.d.ts.map +1 -0
  87. package/dist/repository/query-options.interface.d.ts +88 -16
  88. package/dist/repository/query-options.interface.d.ts.map +1 -1
  89. package/dist/repository/query.interface.d.ts +107 -37
  90. package/dist/repository/query.interface.d.ts.map +1 -1
  91. package/dist/repository/relation-query.interface.d.ts +20 -1
  92. package/dist/repository/relation-query.interface.d.ts.map +1 -1
  93. package/dist/repository/repository.interface.d.ts +4 -29
  94. package/dist/repository/repository.interface.d.ts.map +1 -1
  95. package/dist/repository/tree-repository.interface.d.ts +34 -30
  96. package/dist/repository/tree-repository.interface.d.ts.map +1 -1
  97. package/dist/rxdb-adapter.d.ts +100 -16
  98. package/dist/rxdb-adapter.d.ts.map +1 -1
  99. package/dist/rxdb-events.d.ts +335 -66
  100. package/dist/rxdb-events.d.ts.map +1 -1
  101. package/dist/rxdb-plugin.d.ts +2 -2
  102. package/dist/rxdb-plugin.d.ts.map +1 -1
  103. package/dist/rxdb-utils.d.ts +20 -9
  104. package/dist/rxdb-utils.d.ts.map +1 -1
  105. package/dist/rxdb.interface.d.ts +5 -9
  106. package/dist/rxdb.interface.d.ts.map +1 -1
  107. package/dist/rxdb.private.d.ts +7 -36
  108. package/dist/rxdb.private.d.ts.map +1 -1
  109. package/dist/schema/SchemaManager.d.ts +5 -4
  110. package/dist/schema/SchemaManager.d.ts.map +1 -1
  111. package/dist/system/branch.d.ts +124 -7
  112. package/dist/system/branch.d.ts.map +1 -1
  113. package/dist/system/change.d.ts +605 -33
  114. package/dist/system/change.d.ts.map +1 -1
  115. package/dist/system/migration.d.ts +61 -11
  116. package/dist/system/migration.d.ts.map +1 -1
  117. package/dist/system/repository-sync.d.ts +95 -0
  118. package/dist/system/repository-sync.d.ts.map +1 -0
  119. package/dist/system/system.interface.d.ts +25 -0
  120. package/dist/system/system.interface.d.ts.map +1 -0
  121. package/dist/system/types.d.ts +234 -139
  122. package/dist/system/types.d.ts.map +1 -1
  123. package/dist/system/types.local.d.ts +156 -0
  124. package/dist/system/types.local.d.ts.map +1 -0
  125. package/dist/system/types.remote.d.ts +103 -0
  126. package/dist/system/types.remote.d.ts.map +1 -0
  127. package/dist/version/HistoryManager.d.ts +238 -0
  128. package/dist/version/HistoryManager.d.ts.map +1 -0
  129. package/dist/version/LWWConflictResolver.d.ts +41 -0
  130. package/dist/version/LWWConflictResolver.d.ts.map +1 -0
  131. package/dist/version/VersionManager.d.ts +407 -0
  132. package/dist/version/VersionManager.d.ts.map +1 -0
  133. package/dist/version/VersionManager.interface.d.ts +428 -0
  134. package/dist/version/VersionManager.interface.d.ts.map +1 -0
  135. package/dist/version/VersionManager.utils.d.ts +14 -0
  136. package/dist/version/VersionManager.utils.d.ts.map +1 -0
  137. package/dist/version/bulk-sync.d.ts +97 -0
  138. package/dist/version/bulk-sync.d.ts.map +1 -0
  139. package/dist/version/check-repository-updates.d.ts +53 -0
  140. package/dist/version/check-repository-updates.d.ts.map +1 -0
  141. package/dist/version/compact-changes.d.ts +45 -0
  142. package/dist/version/compact-changes.d.ts.map +1 -0
  143. package/dist/version/conflict.d.ts +75 -0
  144. package/dist/version/conflict.d.ts.map +1 -0
  145. package/dist/version/create_branch.d.ts +13 -0
  146. package/dist/version/create_branch.d.ts.map +1 -0
  147. package/dist/version/dependency-graph.d.ts +132 -0
  148. package/dist/version/dependency-graph.d.ts.map +1 -0
  149. package/dist/version/find_switch_branch_step.d.ts +53 -0
  150. package/dist/version/find_switch_branch_step.d.ts.map +1 -0
  151. package/dist/version/get-all-repository-sync-status.d.ts +58 -0
  152. package/dist/version/get-all-repository-sync-status.d.ts.map +1 -0
  153. package/dist/version/get-repository-sync-status.d.ts +74 -0
  154. package/dist/version/get-repository-sync-status.d.ts.map +1 -0
  155. package/dist/version/pull-repository.d.ts +99 -0
  156. package/dist/version/pull-repository.d.ts.map +1 -0
  157. package/dist/version/pull.d.ts +11 -0
  158. package/dist/version/pull.d.ts.map +1 -0
  159. package/dist/version/push-repository.d.ts +93 -0
  160. package/dist/version/push-repository.d.ts.map +1 -0
  161. package/dist/version/push.d.ts +11 -0
  162. package/dist/version/push.d.ts.map +1 -0
  163. package/dist/version/remove_branch.d.ts +8 -0
  164. package/dist/version/remove_branch.d.ts.map +1 -0
  165. package/dist/version/switch_branch_actions.d.ts +17 -0
  166. package/dist/version/switch_branch_actions.d.ts.map +1 -0
  167. package/dist/version/sync-repository.d.ts +57 -0
  168. package/dist/version/sync-repository.d.ts.map +1 -0
  169. package/dist/version/sync-type-utils.d.ts +145 -0
  170. package/dist/version/sync-type-utils.d.ts.map +1 -0
  171. package/dist/version/topological-sort.d.ts +70 -0
  172. package/dist/version/topological-sort.d.ts.map +1 -0
  173. package/dist/version/version.utils.d.ts +4 -0
  174. package/dist/version/version.utils.d.ts.map +1 -0
  175. package/package.json +4 -3
  176. package/README.md +0 -1
  177. package/dist/entity/entity-metadata-options.interface.d.ts.map +0 -1
  178. package/dist/entity/entity-metadata.interface.d.ts.map +0 -1
  179. package/dist/entity/entity_proxy_helper.d.ts +0 -49
  180. package/dist/entity/entity_proxy_helper.d.ts.map +0 -1
  181. package/dist/entity/entity_relation_helper.d.ts.map +0 -1
  182. package/dist/entity/generate_many_to_many_entity.d.ts.map +0 -1
  183. package/dist/entity/transition-metadata.d.ts.map +0 -1
  184. package/dist/repository/query.utils.d.ts +0 -27
  185. package/dist/repository/query.utils.d.ts.map +0 -1
  186. package/dist/system/VersionManager.d.ts +0 -35
  187. 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"}