@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.
Files changed (176) hide show
  1. package/dist/RxDB.d.ts +119 -18
  2. package/dist/RxDB.d.ts.map +1 -1
  3. package/dist/entity/@TreeEntity.d.ts.map +1 -1
  4. package/dist/entity/EntityBase.d.ts +58 -10
  5. package/dist/entity/EntityBase.d.ts.map +1 -1
  6. package/dist/entity/EntityManager.d.ts +16 -5
  7. package/dist/entity/EntityManager.d.ts.map +1 -1
  8. package/dist/entity/EntityStatus.d.ts +145 -87
  9. package/dist/entity/EntityStatus.d.ts.map +1 -1
  10. package/dist/entity/EntityStatus.interface.d.ts +59 -0
  11. package/dist/entity/EntityStatus.interface.d.ts.map +1 -0
  12. package/dist/entity/TreeEntityBase.d.ts +31 -4
  13. package/dist/entity/TreeEntityBase.d.ts.map +1 -1
  14. package/dist/entity/entity.interface.d.ts +16 -15
  15. package/dist/entity/entity.interface.d.ts.map +1 -1
  16. package/dist/entity/entity.utils.d.ts +21 -0
  17. package/dist/entity/entity.utils.d.ts.map +1 -1
  18. package/dist/entity/many_to_many_entity.d.ts.map +1 -1
  19. package/dist/entity/metadata-options.interface.d.ts +276 -39
  20. package/dist/entity/metadata-options.interface.d.ts.map +1 -1
  21. package/dist/entity/{transition-metadata.d.ts → metadata-transition.d.ts} +1 -1
  22. package/dist/entity/metadata-transition.d.ts.map +1 -0
  23. package/dist/entity/metadata.interface.d.ts +6 -0
  24. package/dist/entity/metadata.interface.d.ts.map +1 -1
  25. package/dist/entity/metadata_cascade_default.d.ts +54 -0
  26. package/dist/entity/metadata_cascade_default.d.ts.map +1 -0
  27. package/dist/entity/proxy.d.ts.map +1 -1
  28. package/dist/entity/relation_helper.d.ts.map +1 -1
  29. package/dist/entity/tree-entity.interface.d.ts +5 -0
  30. package/dist/entity/tree-entity.interface.d.ts.map +1 -0
  31. package/dist/gateway/RxDBTabsGateway.d.ts +52 -0
  32. package/dist/gateway/RxDBTabsGateway.d.ts.map +1 -0
  33. package/dist/gateway/gateway.interface.d.ts +43 -0
  34. package/dist/gateway/gateway.interface.d.ts.map +1 -0
  35. package/dist/index.d.ts +17 -12
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +5791 -1896
  38. package/dist/query/entity_type_dependencies.d.ts +3 -2
  39. package/dist/query/entity_type_dependencies.d.ts.map +1 -1
  40. package/dist/query/merge-update-basic.d.ts +30 -0
  41. package/dist/query/merge-update-basic.d.ts.map +1 -0
  42. package/dist/query/merge-update-tree.d.ts +86 -0
  43. package/dist/query/merge-update-tree.d.ts.map +1 -0
  44. package/dist/query/merge-update.utils.d.ts +52 -0
  45. package/dist/query/merge-update.utils.d.ts.map +1 -0
  46. package/dist/query/merge_create.d.ts +2 -2
  47. package/dist/query/merge_create.d.ts.map +1 -1
  48. package/dist/query/merge_remove.d.ts +2 -15
  49. package/dist/query/merge_remove.d.ts.map +1 -1
  50. package/dist/query/merge_update.d.ts +2 -2
  51. package/dist/query/merge_update.d.ts.map +1 -1
  52. package/dist/query/need_refresh_create.d.ts +4 -4
  53. package/dist/query/need_refresh_create.d.ts.map +1 -1
  54. package/dist/query/need_refresh_remove.d.ts +2 -2
  55. package/dist/query/need_refresh_remove.d.ts.map +1 -1
  56. package/dist/query/need_refresh_update.d.ts +4 -4
  57. package/dist/query/need_refresh_update.d.ts.map +1 -1
  58. package/dist/query/query-matching.utils.d.ts +18 -2
  59. package/dist/query/query-matching.utils.d.ts.map +1 -1
  60. package/dist/query/query-relation.utils.d.ts +44 -0
  61. package/dist/query/query-relation.utils.d.ts.map +1 -0
  62. package/dist/query/query-rules-builder.d.ts +68 -0
  63. package/dist/query/query-rules-builder.d.ts.map +1 -0
  64. package/dist/query/query-tree.utils.d.ts +54 -0
  65. package/dist/query/query-tree.utils.d.ts.map +1 -0
  66. package/dist/repository/QueryManager.d.ts +23 -1
  67. package/dist/repository/QueryManager.d.ts.map +1 -1
  68. package/dist/repository/QueryTask.d.ts +42 -5
  69. package/dist/repository/QueryTask.d.ts.map +1 -1
  70. package/dist/repository/Repository.d.ts +24 -35
  71. package/dist/repository/Repository.d.ts.map +1 -1
  72. package/dist/repository/RepositoryBase.d.ts +5 -3
  73. package/dist/repository/RepositoryBase.d.ts.map +1 -1
  74. package/dist/repository/TreeRepository.d.ts +28 -1
  75. package/dist/repository/TreeRepository.d.ts.map +1 -1
  76. package/dist/repository/fingerprint.utils.d.ts +28 -0
  77. package/dist/repository/fingerprint.utils.d.ts.map +1 -0
  78. package/dist/repository/query-options.interface.d.ts +50 -19
  79. package/dist/repository/query-options.interface.d.ts.map +1 -1
  80. package/dist/repository/query.interface.d.ts +70 -25
  81. package/dist/repository/query.interface.d.ts.map +1 -1
  82. package/dist/repository/relation-query.interface.d.ts +19 -0
  83. package/dist/repository/relation-query.interface.d.ts.map +1 -1
  84. package/dist/repository/repository.interface.d.ts +5 -8
  85. package/dist/repository/repository.interface.d.ts.map +1 -1
  86. package/dist/repository/tree-repository.interface.d.ts +29 -2
  87. package/dist/repository/tree-repository.interface.d.ts.map +1 -1
  88. package/dist/rxdb-adapter.d.ts +96 -14
  89. package/dist/rxdb-adapter.d.ts.map +1 -1
  90. package/dist/rxdb-events.d.ts +316 -172
  91. package/dist/rxdb-events.d.ts.map +1 -1
  92. package/dist/rxdb-plugin.d.ts +2 -2
  93. package/dist/rxdb-plugin.d.ts.map +1 -1
  94. package/dist/rxdb-utils.d.ts +15 -8
  95. package/dist/rxdb-utils.d.ts.map +1 -1
  96. package/dist/rxdb.interface.d.ts +4 -0
  97. package/dist/rxdb.interface.d.ts.map +1 -1
  98. package/dist/rxdb.private.d.ts +5 -0
  99. package/dist/rxdb.private.d.ts.map +1 -1
  100. package/dist/schema/SchemaManager.d.ts +1 -0
  101. package/dist/schema/SchemaManager.d.ts.map +1 -1
  102. package/dist/system/branch.d.ts +124 -7
  103. package/dist/system/branch.d.ts.map +1 -1
  104. package/dist/system/change.d.ts +605 -30
  105. package/dist/system/change.d.ts.map +1 -1
  106. package/dist/system/migration.d.ts +61 -11
  107. package/dist/system/migration.d.ts.map +1 -1
  108. package/dist/system/repository-sync.d.ts +95 -0
  109. package/dist/system/repository-sync.d.ts.map +1 -0
  110. package/dist/system/system.interface.d.ts +25 -0
  111. package/dist/system/system.interface.d.ts.map +1 -0
  112. package/dist/system/types.d.ts +233 -120
  113. package/dist/system/types.d.ts.map +1 -1
  114. package/dist/system/types.local.d.ts +156 -0
  115. package/dist/system/types.local.d.ts.map +1 -0
  116. package/dist/system/types.remote.d.ts +103 -0
  117. package/dist/system/types.remote.d.ts.map +1 -0
  118. package/dist/version/HistoryManager.d.ts +238 -0
  119. package/dist/version/HistoryManager.d.ts.map +1 -0
  120. package/dist/version/LWWConflictResolver.d.ts +41 -0
  121. package/dist/version/LWWConflictResolver.d.ts.map +1 -0
  122. package/dist/version/VersionManager.d.ts +407 -0
  123. package/dist/version/VersionManager.d.ts.map +1 -0
  124. package/dist/version/VersionManager.interface.d.ts +428 -0
  125. package/dist/version/VersionManager.interface.d.ts.map +1 -0
  126. package/dist/version/VersionManager.utils.d.ts +14 -0
  127. package/dist/version/VersionManager.utils.d.ts.map +1 -0
  128. package/dist/version/bulk-sync.d.ts +97 -0
  129. package/dist/version/bulk-sync.d.ts.map +1 -0
  130. package/dist/version/check-repository-updates.d.ts +53 -0
  131. package/dist/version/check-repository-updates.d.ts.map +1 -0
  132. package/dist/version/compact-changes.d.ts +45 -0
  133. package/dist/version/compact-changes.d.ts.map +1 -0
  134. package/dist/version/conflict.d.ts +75 -0
  135. package/dist/version/conflict.d.ts.map +1 -0
  136. package/dist/version/create_branch.d.ts +13 -0
  137. package/dist/version/create_branch.d.ts.map +1 -0
  138. package/dist/version/dependency-graph.d.ts +132 -0
  139. package/dist/version/dependency-graph.d.ts.map +1 -0
  140. package/dist/version/find_switch_branch_step.d.ts +53 -0
  141. package/dist/version/find_switch_branch_step.d.ts.map +1 -0
  142. package/dist/version/get-all-repository-sync-status.d.ts +58 -0
  143. package/dist/version/get-all-repository-sync-status.d.ts.map +1 -0
  144. package/dist/version/get-repository-sync-status.d.ts +74 -0
  145. package/dist/version/get-repository-sync-status.d.ts.map +1 -0
  146. package/dist/version/pull-repository.d.ts +99 -0
  147. package/dist/version/pull-repository.d.ts.map +1 -0
  148. package/dist/version/pull.d.ts +11 -0
  149. package/dist/version/pull.d.ts.map +1 -0
  150. package/dist/version/push-repository.d.ts +93 -0
  151. package/dist/version/push-repository.d.ts.map +1 -0
  152. package/dist/version/push.d.ts +11 -0
  153. package/dist/version/push.d.ts.map +1 -0
  154. package/dist/version/remove_branch.d.ts +8 -0
  155. package/dist/version/remove_branch.d.ts.map +1 -0
  156. package/dist/version/switch_branch_actions.d.ts +17 -0
  157. package/dist/version/switch_branch_actions.d.ts.map +1 -0
  158. package/dist/version/sync-repository.d.ts +57 -0
  159. package/dist/version/sync-repository.d.ts.map +1 -0
  160. package/dist/version/sync-type-utils.d.ts +145 -0
  161. package/dist/version/sync-type-utils.d.ts.map +1 -0
  162. package/dist/version/topological-sort.d.ts +70 -0
  163. package/dist/version/topological-sort.d.ts.map +1 -0
  164. package/dist/version/version.utils.d.ts +4 -0
  165. package/dist/version/version.utils.d.ts.map +1 -0
  166. package/package.json +4 -4
  167. package/README.md +0 -1
  168. package/dist/entity/@GraphEntity.d.ts +0 -8
  169. package/dist/entity/@GraphEntity.d.ts.map +0 -1
  170. package/dist/entity/GraphEntityBase.d.ts +0 -10
  171. package/dist/entity/GraphEntityBase.d.ts.map +0 -1
  172. package/dist/entity/graph_edge_entity.d.ts +0 -5
  173. package/dist/entity/graph_edge_entity.d.ts.map +0 -1
  174. package/dist/entity/transition-metadata.d.ts.map +0 -1
  175. package/dist/system/VersionManager.d.ts +0 -35
  176. package/dist/system/VersionManager.d.ts.map +0 -1
@@ -1,68 +1,24 @@
1
1
  import { RxDB } from '../RxDB.js';
2
+ import { EntityPatch, IEntityStatus } from './EntityStatus.interface.js';
2
3
  import { EntityType } from './entity.interface.js';
3
- import { EntityRelationMetadata, RelationKind } from './metadata-options.interface.js';
4
+ import { EntityRelationMetadata } from './metadata-options.interface.js';
4
5
  /**
5
- * 实体变化记录接口
6
- * 记录实体的变更信息,包括变更内容、逆向变更、时间戳等
6
+ * 实体状态管理器
7
+ *
8
+ * 职责:
9
+ * 1. 状态跟踪:local/remote/modified/removed 标记实体的生命周期状态
10
+ * 2. 变更记录:记录实体的所有变更历史(patches),支持撤销/重做
11
+ * 3. 关系管理:维护实体间的关系缓存,处理级联操作
12
+ * 4. 变更通知:通过 RxJS Subject 发布实体变更事件
13
+ *
14
+ * 架构设计:
15
+ * - 使用 Proxy 拦截属性修改,自动记录变更
16
+ * - 关系按类型分组存储(#relation_map),提高查询效率
17
+ * - Junction 实体单独管理(#remove_junction_set),简化多对多关系的删除逻辑
18
+ * - 懒加载缓存(patch/fingerprint),按需计算避免性能浪费
7
19
  *
8
- * @interface
9
20
  * @template T 实体类型
10
21
  */
11
- export interface EntityPatch<T extends EntityType> {
12
- /**
13
- * 变化
14
- */
15
- patch: Partial<InstanceType<T>>;
16
- /**
17
- * 逆变化
18
- */
19
- inversePatch: Partial<InstanceType<T>>;
20
- /**
21
- * 记录的毫秒世界时间
22
- */
23
- recordAt: Date;
24
- /**
25
- * 记录的程序开始的时间
26
- * 用于 recordAt 一样的时候排序用
27
- */
28
- timeStamp: DOMHighResTimeStamp;
29
- }
30
- /**
31
- * 实体状态接口
32
- * 定义实体状态的基本属性和行为
33
- */
34
- export interface IEntityStatus<T extends EntityType> {
35
- /**
36
- * 当前实体
37
- */
38
- target: InstanceType<EntityType>;
39
- /**
40
- * 是否已修改
41
- */
42
- modified?: boolean;
43
- /**
44
- * 是否在本地
45
- */
46
- local?: boolean;
47
- /**
48
- * 是否在远程
49
- */
50
- remote?: boolean;
51
- /**
52
- * 实体变化
53
- */
54
- patches?: EntityPatch<T>[];
55
- }
56
- /**
57
- * 实体状态选项类型
58
- * 用于创建实体状态实例时的配置选项
59
- */
60
- export type EntityStatusOptions<T extends EntityType> = Omit<IEntityStatus<T>, 'target' | 'proxyTarget'>;
61
- /**
62
- * 实体状态类
63
- * 管理实体的状态信息,包括本地/远程状态、修改状态、变更历史等
64
- * 处理实体关系和变更追踪
65
- */
66
22
  export declare class EntityStatus<T extends EntityType> implements IEntityStatus<T> {
67
23
  #private;
68
24
  readonly rxdb: RxDB;
@@ -94,7 +50,12 @@ export declare class EntityStatus<T extends EntityType> implements IEntityStatus
94
50
  * 实体原始数据
95
51
  * 用于比较变更和恢复
96
52
  */
97
- protected _origin: any;
53
+ protected _origin: InstanceType<T>;
54
+ /**
55
+ * 实体指纹
56
+ * 用于唯一标识实体的版本
57
+ */
58
+ protected _fingerprint?: string;
98
59
  /**
99
60
  * 实体原始对象
100
61
  */
@@ -110,9 +71,14 @@ export declare class EntityStatus<T extends EntityType> implements IEntityStatus
110
71
  */
111
72
  readonly patches$: import('rxjs').Observable<EntityPatch<T>[]>;
112
73
  /**
113
- * 是否已修改
74
+ * 实体是否已修改
75
+ * 标记实体属性是否发生过变更(与 origin 对比)
114
76
  */
115
77
  get modified(): boolean;
78
+ /**
79
+ * 设置修改状态
80
+ * 清理缓存确保下次访问 patch/fingerprint 时重新计算
81
+ */
116
82
  set modified(value: boolean);
117
83
  /**
118
84
  * 是否已删除
@@ -130,11 +96,18 @@ export declare class EntityStatus<T extends EntityType> implements IEntityStatus
130
96
  get local(): boolean;
131
97
  set local(value: boolean);
132
98
  /**
133
- * 获取变更内容
99
+ * 当前变更内容(相对于 origin)
100
+ * 返回与 origin 不同的属性集合,用于生成数据库更新语句
101
+ *
102
+ * 懒加载:首次访问时计算并缓存,避免频繁的对象比较
103
+ * 缓存失效:修改 modified 属性时清空缓存
134
104
  */
135
105
  get patch(): Partial<InstanceType<T>> | null;
136
106
  /**
137
- * 获取逆向变更内容
107
+ * 逆向变更内容(用于撤销操作)
108
+ * 返回 origin 中对应 patch 的属性值
109
+ *
110
+ * 例如:patch = { name: 'new' } → inversePatch = { name: 'old' }
138
111
  */
139
112
  get inversePatch(): Partial<InstanceType<T>> | null;
140
113
  /**
@@ -144,8 +117,20 @@ export declare class EntityStatus<T extends EntityType> implements IEntityStatus
144
117
  /**
145
118
  * 设置原始值
146
119
  */
147
- set origin(value: any);
148
- get origin(): any;
120
+ set origin(value: InstanceType<T>);
121
+ get origin(): InstanceType<T>;
122
+ /**
123
+ * 实体指纹(唯一标识实体的某个版本)
124
+ * 格式:`${id}@${updatedAt.getTime()}`
125
+ *
126
+ * 用途:
127
+ * - 快速判断两个实体引用是否指向同一版本
128
+ * - 缓存键生成
129
+ * - 冲突检测
130
+ *
131
+ * 懒加载:首次访问时生成并缓存
132
+ */
133
+ get fingerprint(): string;
149
134
  /**
150
135
  * 创建实体状态实例
151
136
  *
@@ -155,48 +140,121 @@ export declare class EntityStatus<T extends EntityType> implements IEntityStatus
155
140
  */
156
141
  constructor(rxdb: RxDB, data: IEntityStatus<T>);
157
142
  /**
158
- * 重置实体状态
143
+ * 重置实体状态到初始状态(origin)
144
+ *
145
+ * 操作:
146
+ * 1. 恢复 proxyTarget 的所有属性到 origin 的值
147
+ * 2. 清除 modified 标记
148
+ * 3. 清空变更历史(patches)
149
+ * 4. 发布空的变更事件
150
+ *
151
+ * 使用场景:撤销所有未保存的修改
159
152
  */
160
153
  reset(): void;
161
154
  /**
162
- * 添加实体变更记录
163
- * 记录实体的变更并发布变更事件
155
+ * 记录实体变更
156
+ *
157
+ * 机制:
158
+ * 1. 计算当前 patch 和 inversePatch
159
+ * 2. 首次调用时创建初始快照(冻结的 origin 副本)
160
+ * 3. 将变更记录追加到 patches 数组
161
+ * 4. 通过 Subject 发布变更事件
164
162
  *
165
- * @param patch - 变更内容
166
- * @param inversePatch - 逆向变更内容,用于撤销操作
167
- * @param updatedBy - 更新者信息
168
- * @param recordAt - 记录时间戳
163
+ * 时间戳说明:
164
+ * - recordAt: 业务时间(Date),用于显示和排序
165
+ * - timeStamp: 性能时间(performance.now),用于高精度计时和排序
166
+ *
167
+ * @param recordAt 变更记录时间,默认当前时间
169
168
  */
170
169
  checkChange(recordAt?: Date): void;
171
170
  /**
172
- * 获取需要保存的关联实体
173
- * 根据关系类型的优先级排序,返回需要保存的实体数组
171
+ * 获取需要保存的实体列表
172
+ *
173
+ * 逻辑:
174
+ * 1. 始终包含当前实体(this.proxyTarget)
175
+ * 2. 遍历所有关系类型的缓存
176
+ * 3. 筛选出 modified=true 的关联实体
177
+ *
178
+ * 注意:
179
+ * - 此方法只查找直接关联的实体,不递归
180
+ * - 递归查找由 entity.utils.ts 的 getNeedSaveEntities 处理
181
+ * - 返回的实体需要进一步过滤(根据依赖顺序排序)
174
182
  *
175
- * @returns 需要保存的实体数组
183
+ * @returns 需要保存的实体数组(包含自身和修改过的关联实体)
176
184
  */
177
- getNeedSaveRelationEntities(): InstanceType<T>[];
185
+ getNeedSaveEntities(): InstanceType<T>[];
178
186
  /**
187
+ * 获取需要删除的实体列表
188
+ *
189
+ * 删除策略:
190
+ * - 多对多关系:删除 Junction 实体(中间表记录)
191
+ * - 其他关系:不自动删除关联实体(由业务层决定)
192
+ *
193
+ * Junction 实体处理:
194
+ * 1. removeRelationEntity 时加入 #remove_junction_set
195
+ * 2. 保存时统一删除(保证事务一致性)
196
+ * 3. 只删除 local=true 的(未保存的无需删除)
197
+ *
198
+ * 设计理由:
199
+ * - ONE_TO_MANY/MANY_TO_ONE 的级联删除由数据库外键约束处理
200
+ * - MANY_TO_MANY 没有直接的外键,需要应用层删除 Junction
201
+ *
202
+ * @returns 待删除的 Junction 实体数组
203
+ */
204
+ getNeedRemoveEntities(): InstanceType<T>[]; /**
179
205
  * 添加关系实体
180
- * 根据关系类型处理实体间的关联
181
206
  *
182
- * @param relation - 关系元数据
183
- * @param entity - 要关联的实体
207
+ * 多对多关系处理流程:
208
+ * 1. 生成 Junction 查找条件(nameAId + nameBId)
209
+ * 2. 检查当前实体的缓存,避免重复添加
210
+ * 3. 在关联实体的缓存中查找已存在的 Junction
211
+ * 4. 如果未找到或已标记删除,创建新的 Junction 实体
212
+ * 5. 双向更新缓存:this.cache + entity.cache
213
+ *
214
+ * 其他关系类型:
215
+ * - 直接添加到对应类型的缓存
216
+ *
217
+ * @param relation 关系元数据
218
+ * @param entity 要关联的实体
184
219
  */
185
220
  addRelationEntity(relation: EntityRelationMetadata, entity: InstanceType<EntityType>): void;
186
221
  /**
187
- * 删除关系实体
188
- * 根据关系类型移除实体间的关联
222
+ * 移除关系实体
189
223
  *
190
- * @param relation - 关系元数据
191
- * @param entity - 要移除关联的实体
224
+ * 多对多关系移除流程:
225
+ * 1. 使用与 addRelationEntity 相同的查找条件定位 Junction
226
+ * 2. 从两端的缓存中移除 Junction 实体
227
+ * 3. 将 Junction 加入待删除集合(延迟删除)
228
+ * 4. 从缓存中移除关联实体
229
+ *
230
+ * 其他关系类型:
231
+ * - 直接从缓存中移除
232
+ *
233
+ * 注意:Junction 实体不会立即从数据库删除,而是在保存时统一处理
234
+ *
235
+ * @param relation 关系元数据
236
+ * @param entity 要移除关联的实体
192
237
  */
193
238
  removeRelationEntity(relation: EntityRelationMetadata, entity: InstanceType<EntityType>): void;
194
239
  /**
195
- * 获取指定关系类型的实体缓存
196
- * 如果缓存不存在则创建新的缓存
240
+ * 清理指定关系的缓存
241
+ * 只清理该关系名称对应的缓存,不影响其他同类型关系
242
+ *
243
+ * @param relation 关系元数据
244
+ */
245
+ cleanRelationEntity(relation: EntityRelationMetadata): void;
246
+ /**
247
+ * 获取指定关系的缓存
248
+ *
249
+ * 懒加载:首次访问某个关系时创建对应的 Set
250
+ * 使用 Set 而非 Array 的原因:
251
+ * - 自动去重
252
+ * - O(1) 查找和删除
253
+ * - 遍历性能与 Array 相当
197
254
  *
198
- * @param kind - 关系类型
255
+ * @param relation 关系元数据
256
+ * @returns 该关系的实体集合
199
257
  */
200
- getRelationCache(kind: RelationKind): Set<InstanceType<EntityType>>;
258
+ getRelationCache(relation: EntityRelationMetadata): Set<InstanceType<T>>;
201
259
  }
202
260
  //# sourceMappingURL=EntityStatus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EntityStatus.d.ts","sourceRoot":"","sources":["../../src/entity/EntityStatus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"EntityStatus.d.ts","sourceRoot":"","sources":["../../src/entity/EntityStatus.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,sBAAsB,EAAgB,MAAM,iCAAiC,CAAC;AAEvF;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,YAAY,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;;aAiNvD,IAAI,EAAE,IAAI;IA7K5B;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC;IAE3B;;OAEG;IACH,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC;IAE7B;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAS;IAEpC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAErC;;OAEG;IACH,SAAS,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAElD;;;OAGG;IACH,SAAS,CAAC,OAAO,EAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAEpC;;;OAGG;IACH,SAAS,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAElC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAEvC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,8CAAqD;IAEtE;;;OAGG;IACH,IAAI,QAAQ,IAQQ,OAAO,CAN1B;IAED;;;OAGG;IACH,IAAI,QAAQ,CAAC,KAAK,EAAE,OAAO,EAG1B;IAED;;OAEG;IACH,IAAI,OAAO,IAGQ,OAAO,CADzB;IACD,IAAI,OAAO,CAAC,KAAK,EAAE,OAAO,EAEzB;IAED;;OAEG;IACH,IAAI,MAAM,IAGQ,OAAO,CADxB;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,OAAO,EAExB;IAED;;OAEG;IACH,IAAI,KAAK,IAGQ,OAAO,CADvB;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,OAAO,EAEvB;IAED;;;;;;OAMG;IACH,IAAI,KAAK,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAK3C;IAED;;;;;OAKG;IACH,IAAI,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAElD;IAED;;OAEG;IACH,IAAI,OAAO,qBAEV;IAED;;OAEG;IACH,IAAI,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAEhC;IACD,IAAI,MAAM,IAHQ,YAAY,CAAC,CAAC,CAAC,CAKhC;IAED;;;;;;;;;;OAUG;IACH,IAAI,WAAW,WAKd;IAED;;;;;;OAMG;gBAEe,IAAI,EAAE,IAAI,EAC1B,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC;IA6BxB;;;;;;;;;;OAUG;IACH,KAAK;IAQL;;;;;;;;;;;;;;OAcG;IACH,WAAW,CAAC,QAAQ,OAAa;IAiBjC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB;IAanB;;;;;;;;;;;;;;;;;OAiBG;IACH,qBAAqB,uBASnB;;;;;;;;;;;;;;;OAeC;IACH,iBAAiB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC;IAwCpF;;;;;;;;;;;;;;;;OAgBG;IACH,oBAAoB,CAAC,QAAQ,EAAE,sBAAsB,EAAE,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC;IAiCvF;;;;;OAKG;IACH,mBAAmB,CAAC,QAAQ,EAAE,sBAAsB;IAOpD;;;;;;;;;;;OAWG;IACH,gBAAgB,CAAC,QAAQ,EAAE,sBAAsB;CAkBlD"}
@@ -0,0 +1,59 @@
1
+ import { EntityType } from './entity.interface.js';
2
+ /**
3
+ * 实体变化记录接口
4
+ * 记录实体的变更信息,包括变更内容、逆向变更、时间戳等
5
+ *
6
+ * @interface
7
+ * @template T 实体类型
8
+ */
9
+ export interface EntityPatch<T extends EntityType> {
10
+ /**
11
+ * 变化
12
+ */
13
+ patch: Partial<InstanceType<T>>;
14
+ /**
15
+ * 逆变化
16
+ */
17
+ inversePatch: Partial<InstanceType<T>>;
18
+ /**
19
+ * 记录的毫秒世界时间
20
+ */
21
+ recordAt: Date;
22
+ /**
23
+ * 记录的程序开始的时间
24
+ * 用于 recordAt 一样的时候排序用
25
+ */
26
+ timeStamp: DOMHighResTimeStamp;
27
+ }
28
+ /**
29
+ * 实体状态接口
30
+ * 定义实体状态的基本属性和行为
31
+ */
32
+ export interface IEntityStatus<T extends EntityType> {
33
+ /**
34
+ * 当前实体
35
+ */
36
+ target: InstanceType<EntityType>;
37
+ /**
38
+ * 是否已修改
39
+ */
40
+ modified?: boolean;
41
+ /**
42
+ * 是否在本地
43
+ */
44
+ local?: boolean;
45
+ /**
46
+ * 是否在远程
47
+ */
48
+ remote?: boolean;
49
+ /**
50
+ * 实体数据变化
51
+ */
52
+ patches?: EntityPatch<T>[];
53
+ }
54
+ /**
55
+ * 实体状态选项类型
56
+ * 用于创建实体状态实例时的配置选项
57
+ */
58
+ export type EntityStatusOptions<T extends EntityType> = Omit<IEntityStatus<T>, 'target' | 'proxyTarget'>;
59
+ //# sourceMappingURL=EntityStatus.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityStatus.interface.d.ts","sourceRoot":"","sources":["../../src/entity/EntityStatus.interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,WAAW,WAAW,CAAC,CAAC,SAAS,UAAU;IAC/C;;OAEG;IACH,KAAK,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAEhC;;OAEG;IACH,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvC;;OAEG;IACH,QAAQ,EAAE,IAAI,CAAC;IAEf;;;OAGG;IACH,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,UAAU;IACjD;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC;IAEjC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB;;OAEG;IACH,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;CAC5B;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,UAAU,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,QAAQ,GAAG,aAAa,CAAC,CAAC"}
@@ -1,15 +1,42 @@
1
- import { IEntity, UUID } from './entity.interface.js';
1
+ import { Observable } from 'rxjs';
2
+ import { FindTreeOptions } from '../repository/tree-repository.interface.js';
3
+ import { UUID } from './entity.interface.js';
2
4
  import { EntityBase } from './EntityBase.js';
3
5
  import { EntityMetadataOptions } from './metadata-options.interface.js';
6
+ import { ITreeEntity } from './tree-entity.interface.js';
4
7
  export declare const TREE_ADJACENCY_LIST_ENTITY_BASE_OPTIONS: EntityMetadataOptions;
5
- export interface ITreeEntity extends IEntity {
6
- parentId?: UUID | null;
7
- }
8
8
  /**
9
9
  * 树形实体装饰器配置
10
10
  * 定义了树形结构所需的父子关系
11
11
  */
12
12
  export declare abstract class TreeAdjacencyListEntityBase extends EntityBase implements ITreeEntity {
13
+ /**
14
+ * 父节点ID
15
+ */
13
16
  parentId?: UUID | null;
17
+ /**
18
+ * 查询所有子孙节点
19
+ * @param options - 查询选项,包含实体ID和层级深度
20
+ * @returns Observable 包装的子孙节点数组
21
+ */
22
+ static findDescendants: <T extends TreeAdjacencyListEntityBase>(this: new () => T, options: FindTreeOptions<new () => T>) => Observable<T[]>;
23
+ /**
24
+ * 统计子孙节点数量
25
+ * @param options - 查询选项,包含实体ID和层级深度
26
+ * @returns Observable 包装的子孙节点数量
27
+ */
28
+ static countDescendants: <T extends TreeAdjacencyListEntityBase>(this: new () => T, options: FindTreeOptions<new () => T>) => Observable<number>;
29
+ /**
30
+ * 查询所有祖先节点
31
+ * @param options - 查询选项,包含实体ID和层级深度
32
+ * @returns Observable 包装的祖先节点数组
33
+ */
34
+ static findAncestors: <T extends TreeAdjacencyListEntityBase>(this: new () => T, options: FindTreeOptions<new () => T>) => Observable<T[]>;
35
+ /**
36
+ * 统计祖先节点数量
37
+ * @param options - 查询选项,包含实体ID和层级深度
38
+ * @returns Observable 包装的祖先节点数量
39
+ */
40
+ static countAncestors: <T extends TreeAdjacencyListEntityBase>(this: new () => T, options: FindTreeOptions<new () => T>) => Observable<number>;
14
41
  }
15
42
  //# sourceMappingURL=TreeEntityBase.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TreeEntityBase.d.ts","sourceRoot":"","sources":["../../src/entity/TreeEntityBase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAgB,MAAM,iCAAiC,CAAC;AAEtF,eAAO,MAAM,uCAAuC,EAAE,qBAiB5C,CAAC;AAEX,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB;AAED;;;GAGG;AACH,8BAqBsB,2BAA4B,SAAQ,UAAW,YAAW,WAAW;IACzF,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACxB"}
1
+ {"version":3,"file":"TreeEntityBase.d.ts","sourceRoot":"","sources":["../../src/entity/TreeEntityBase.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAElF,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAA8C,MAAM,iCAAiC,CAAC;AACpH,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,eAAO,MAAM,uCAAuC,EAAE,qBAgC5C,CAAC;AAEX;;;GAGG;AACH,8BAqBsB,2BAA4B,SAAQ,UAAW,YAAW,WAAW;IACzF;;OAEG;IACH,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAEvB;;;;OAIG;IACH,OAAe,eAAe,EAAE,CAAC,CAAC,SAAS,2BAA2B,EACpE,IAAI,EAAE,UAAU,CAAC,EACjB,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,KAClC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAErB;;;;OAIG;IACH,OAAe,gBAAgB,EAAE,CAAC,CAAC,SAAS,2BAA2B,EACrE,IAAI,EAAE,UAAU,CAAC,EACjB,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,KAClC,UAAU,CAAC,MAAM,CAAC,CAAC;IAExB;;;;OAIG;IACH,OAAe,aAAa,EAAE,CAAC,CAAC,SAAS,2BAA2B,EAClE,IAAI,EAAE,UAAU,CAAC,EACjB,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,KAClC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;IAErB;;;;OAIG;IACH,OAAe,cAAc,EAAE,CAAC,CAAC,SAAS,2BAA2B,EACnE,IAAI,EAAE,UAAU,CAAC,EACjB,OAAO,EAAE,eAAe,CAAC,UAAU,CAAC,CAAC,KAClC,UAAU,CAAC,MAAM,CAAC,CAAC;CACzB"}
@@ -1,4 +1,5 @@
1
1
  import { Observable } from 'rxjs';
2
+ import { ITreeEntity } from './tree-entity.interface.js';
2
3
  export declare const ENTITY_STATIC_TYPES: unique symbol;
3
4
  /**
4
5
  * 实体的静态类型
@@ -6,12 +7,20 @@ export declare const ENTITY_STATIC_TYPES: unique symbol;
6
7
  export interface IEntityStaticType {
7
8
  [ENTITY_STATIC_TYPES]?: any;
8
9
  }
9
- export type EntityStaticType<T extends IEntityStaticType, K extends 'idType' | 'entity' | 'getOptions' | 'findOneOrFailOptions' | 'findOptions' | 'findOneOptions' | 'findByCursorOptions' | 'findAllOptions' | 'countOptions' | 'findTreeOptions'> = T[typeof ENTITY_STATIC_TYPES][K];
10
+ export type EntityStaticType<T extends IEntityStaticType, K extends keyof T[typeof ENTITY_STATIC_TYPES]> = T[typeof ENTITY_STATIC_TYPES][K];
10
11
  /**
11
12
  * 实体类型
12
13
  * 表示可实例化的实体构造函数类型
13
14
  */
14
15
  export type EntityType = IEntityStaticType & (new (...args: any) => any);
16
+ /**
17
+ * 实体基础类型
18
+ */
19
+ export type EntityBaseType = IEntityStaticType & (new (...args: any) => IEntity);
20
+ /**
21
+ * 树形实体类型
22
+ */
23
+ export type TreeEntityType = IEntityStaticType & (new (...args: any) => ITreeEntity);
15
24
  /**
16
25
  * 抽象实体类型
17
26
  * 表示不可直接实例化的抽象实体构造函数类型
@@ -35,10 +44,6 @@ export interface IEntity {
35
44
  * 更新时间
36
45
  */
37
46
  updatedAt: Date;
38
- /**
39
- * 删除时间
40
- */
41
- removedAt?: Date | null;
42
47
  /**
43
48
  * 创建人
44
49
  */
@@ -47,10 +52,6 @@ export interface IEntity {
47
52
  * 更新人
48
53
  */
49
54
  updatedBy?: string | null;
50
- /**
51
- * 删除人
52
- */
53
- removedBy?: string | null;
54
55
  }
55
56
  /**
56
57
  * UUID类型
@@ -62,13 +63,13 @@ export type UUID = `${string}-${string}-${string}-${string}-${string}`;
62
63
  * 单个关系对象的访问接口
63
64
  * 提供对单个关联实体的观察和操作能力
64
65
  */
65
- export interface RelationEntityObservable<T> extends Observable<T> {
66
+ export interface RelationEntityObservable<T extends EntityType> extends Observable<InstanceType<T> | null> {
66
67
  /**
67
68
  * 设置关联实体
68
69
  *
69
- * @param entity - 要设置的实体或null(解除关联)
70
+ * @param entity - 要设置的实体或 null(解除关联)
70
71
  */
71
- set: (entity: T | null) => void;
72
+ set: (entity: InstanceType<T> | null) => void;
72
73
  /**
73
74
  * 移除关联实体
74
75
  * 相当于设置为null
@@ -79,7 +80,7 @@ export interface RelationEntityObservable<T> extends Observable<T> {
79
80
  * 多个关系对象的访问接口
80
81
  * 提供对多个关联实体集合的观察和操作能力
81
82
  */
82
- export interface RelationEntitiesObservable<T> extends Observable<T[]> {
83
+ export interface RelationEntitiesObservable<T extends EntityType> extends Observable<InstanceType<T>[]> {
83
84
  /**
84
85
  * 关联实体数量的可观察对象
85
86
  */
@@ -89,13 +90,13 @@ export interface RelationEntitiesObservable<T> extends Observable<T[]> {
89
90
  *
90
91
  * @param entities - 要添加的实体列表
91
92
  */
92
- add: (...entities: T[]) => void;
93
+ add: (...entities: InstanceType<T>[]) => void;
93
94
  /**
94
95
  * 移除关联实体
95
96
  *
96
97
  * @param entities - 要移除的实体列表
97
98
  */
98
- remove: (...entities: T[]) => void;
99
+ remove: (...entities: InstanceType<T>[]) => void;
99
100
  }
100
101
  /**
101
102
  * 实体更新数据类型
@@ -1 +1 @@
1
- {"version":3,"file":"entity.interface.d.ts","sourceRoot":"","sources":["../../src/entity/entity.interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAEvC,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAAqC,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,mBAAmB,CAAC,CAAC,EAAE,GAAG,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,iBAAiB,EAC3B,CAAC,SACG,QAAQ,GACR,QAAQ,GAER,YAAY,GACZ,sBAAsB,GACtB,aAAa,GACb,gBAAgB,GAChB,qBAAqB,GACrB,gBAAgB,GAChB,cAAc,GAEd,iBAAiB,IACnB,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAEzE;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;AAEpE;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,EAAE,EAAE,IAAI,CAAC;IAET;;OAEG;IACH,SAAS,EAAE,IAAI,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,IAAI,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;IAExB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IAChE;;;;OAIG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAEhC;;;OAGG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,EAAE,CAAC;IACpE;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAE3B;;;;OAIG;IACH,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;IAEhC;;;;OAIG;IACH,MAAM,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;CACpC;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;CAAE,CAAC"}
1
+ {"version":3,"file":"entity.interface.d.ts","sourceRoot":"","sources":["../../src/entity/entity.interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,eAAO,MAAM,mBAAmB,EAAE,OAAO,MAAqC,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,CAAC,mBAAmB,CAAC,CAAC,EAAE,GAAG,CAAC;CAC7B;AAED,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,iBAAiB,EAC3B,CAAC,SAAS,MAAM,CAAC,CAAC,OAAO,mBAAmB,CAAC,IAC3C,CAAC,CAAC,OAAO,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC;AAErC;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,iBAAiB,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AAEzE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;AAEjF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,iBAAiB,GAAG,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,KAAK,WAAW,CAAC,CAAC;AAErF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG,QAAQ,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC;AAEpE;;;;GAIG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,EAAE,EAAE,IAAI,CAAC;IAET;;OAEG;IACH,SAAS,EAAE,IAAI,CAAC;IAEhB;;OAEG;IACH,SAAS,EAAE,IAAI,CAAC;IAEhB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1B;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED;;;;GAIG;AACH,MAAM,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,EAAE,CAAC;AAEvE;;;GAGG;AACH,MAAM,WAAW,wBAAwB,CAAC,CAAC,SAAS,UAAU,CAAE,SAAQ,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACxG;;;;OAIG;IACH,GAAG,EAAE,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC;IAE9C;;;OAGG;IACH,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B,CAAC,CAAC,SAAS,UAAU,CAAE,SAAQ,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACrG;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAE3B;;;;OAIG;IACH,GAAG,EAAE,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;IAE9C;;;;OAIG;IACH,MAAM,EAAE,CAAC,GAAG,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC;CAClD;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,CAAC,CAAC,SAAS,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,GAAG;IAAE,EAAE,EAAE,gBAAgB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;CAAE,CAAC"}
@@ -1,3 +1,4 @@
1
+ import { RxDBMutationsMap } from '../rxdb-adapter.js';
1
2
  import { EntityType } from './entity.interface.js';
2
3
  import { EntityMetadata } from './metadata.interface.js';
3
4
  /**
@@ -63,4 +64,24 @@ export declare const fillInitValue: <T extends EntityType>(metadata: EntityMetad
63
64
  * @returns
64
65
  */
65
66
  export declare const getNeedSaveEntities: <T extends EntityType>(entities: InstanceType<T>[]) => InstanceType<T>[];
67
+ /**
68
+ * 获取需要删除的实体
69
+ * 从根实体开始递归查找所有需要删除的关联实体
70
+ * 注意:根实体本身不会被加入删除列表,只收集它们的关系中标记为删除的实体
71
+ *
72
+ * @param entities - 根实体数组(查找起点)
73
+ * @returns 需要删除的实体数组(只包含 local=true 的)
74
+ */
75
+ export declare const getNeedRemoveEntities: <T extends EntityType>(entities: InstanceType<T>[]) => InstanceType<T>[];
76
+ interface EntityMutationsOptions<T extends EntityType = any> {
77
+ need_save_entities: InstanceType<T>[];
78
+ need_remove_entities: InstanceType<T>[];
79
+ }
80
+ /**
81
+ * 获取实体变更映射
82
+ * @param options
83
+ * @returns
84
+ */
85
+ export declare const getEntityMutations: <T extends EntityType = any>(options: EntityMutationsOptions) => RxDBMutationsMap<T>;
86
+ export {};
66
87
  //# sourceMappingURL=entity.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entity.utils.d.ts","sourceRoot":"","sources":["../../src/entity/entity.utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAsBzD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,OASlD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,KAM7E,CAAC,CAAC;AAEV;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,WAMrF,CAAC;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,MAAM,MAAM,GAAG,WAYjG,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,UAAU,EAAE,UAAU,cAAc,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,SAcvG,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,UAAU,EAChD,UAAU,cAAc,EACxB,QAAQ,YAAY,CAAC,CAAC,CAAC,EACvB,WAAW,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAapC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,UAAU,EAAE,UAAU,YAAY,CAAC,CAAC,CAAC,EAAE,sBAiBpF,CAAC"}
1
+ {"version":3,"file":"entity.utils.d.ts","sourceRoot":"","sources":["../../src/entity/entity.utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAczD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAAI,KAAK,MAAM,KAAG,OASlD,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,KAM7E,CAAC,CAAC;AAEV;;;;;;;;GAQG;AACH,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,OAAO,GAAG,WAMrF,CAAC;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,4BAA4B,GAAI,QAAQ,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,EAAE,MAAM,MAAM,GAAG,WAYjG,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,CAAC,SAAS,UAAU,EAAE,UAAU,cAAc,EAAE,QAAQ,YAAY,CAAC,CAAC,CAAC,SAcvG,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,CAAC,SAAS,UAAU,EAChD,UAAU,cAAc,EACxB,QAAQ,YAAY,CAAC,CAAC,CAAC,EACvB,WAAW,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAapC,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,SAAS,UAAU,EAAE,UAAU,YAAY,CAAC,CAAC,CAAC,EAAE,sBAiBpF,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,GAAI,CAAC,SAAS,UAAU,EAAE,UAAU,YAAY,CAAC,CAAC,CAAC,EAAE,sBAoBtF,CAAC;AAEF,UAAU,sBAAsB,CAAC,CAAC,SAAS,UAAU,GAAG,GAAG;IACzD,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;IACtC,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;CACzC;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,CAAC,SAAS,UAAU,GAAG,GAAG,EAC3D,SAAS,sBAAsB,KAC9B,gBAAgB,CAAC,CAAC,CAwCpB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"many_to_many_entity.d.ts","sourceRoot":"","sources":["../../src/entity/many_to_many_entity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,qBAAqB,EAAE,gCAAgC,EAAgB,MAAM,iCAAiC,CAAC;AACxH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;IAEzB;;OAEG;IACH,QAAQ,EAAE,gCAAgC,CAAC;CAC5C;AAED;;;;;;;;;;GAUG;AACH;;;;;GAKG;yBACa,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,KAAG,qBAAqB;AAAzF,wBAmCE"}
1
+ {"version":3,"file":"many_to_many_entity.d.ts","sourceRoot":"","sources":["../../src/entity/many_to_many_entity.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,qBAAqB,EACrB,gCAAgC,EAGjC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAEzD;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,QAAQ,EAAE,cAAc,CAAC;IAEzB;;OAEG;IACH,QAAQ,EAAE,gCAAgC,CAAC;CAC5C;AAED;;;;;;;;;;GAUG;AACH;;;;;GAKG;yBACa,SAAS,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,KAAG,qBAAqB;AAAzF,wBAkDE"}