@aiao/rxdb-plugin-history 0.0.0-stage → 0.0.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +70 -2
- package/dist/HistoryManager.d.ts +79 -0
- package/dist/HistoryManager.d.ts.map +1 -0
- package/dist/VersionManager.d.ts +233 -0
- package/dist/VersionManager.d.ts.map +1 -0
- package/dist/create-branch.d.ts +29 -0
- package/dist/create-branch.d.ts.map +1 -0
- package/dist/detached-event-error.d.ts +28 -0
- package/dist/detached-event-error.d.ts.map +1 -0
- package/dist/find-switch-branch-step.d.ts +45 -0
- package/dist/find-switch-branch-step.d.ts.map +1 -0
- package/dist/history-filters.d.ts +78 -0
- package/dist/history-filters.d.ts.map +1 -0
- package/dist/history-item-builder.d.ts +25 -0
- package/dist/history-item-builder.d.ts.map +1 -0
- package/dist/history-scope-api.d.ts +41 -0
- package/dist/history-scope-api.d.ts.map +1 -0
- package/dist/history-undo-session.types.d.ts +32 -0
- package/dist/history-undo-session.types.d.ts.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1480 -0
- package/dist/merge-branch.d.ts +22 -0
- package/dist/merge-branch.d.ts.map +1 -0
- package/dist/plugin.d.ts +58 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/pullable-count.d.ts +37 -0
- package/dist/pullable-count.d.ts.map +1 -0
- package/dist/push-inflight.d.ts +60 -0
- package/dist/push-inflight.d.ts.map +1 -0
- package/dist/redo-stack.d.ts +56 -0
- package/dist/redo-stack.d.ts.map +1 -0
- package/dist/remove-branch.d.ts +16 -0
- package/dist/remove-branch.d.ts.map +1 -0
- package/dist/restore-entity.d.ts +15 -0
- package/dist/restore-entity.d.ts.map +1 -0
- package/dist/scope-selection.d.ts +55 -0
- package/dist/scope-selection.d.ts.map +1 -0
- package/dist/switch-branch-actions.d.ts +16 -0
- package/dist/switch-branch-actions.d.ts.map +1 -0
- package/dist/sync-history-bridge.d.ts +87 -0
- package/dist/sync-history-bridge.d.ts.map +1 -0
- package/dist/undo-redo-apply.d.ts +47 -0
- package/dist/undo-redo-apply.d.ts.map +1 -0
- package/dist/version-manager.utils.d.ts +30 -0
- package/dist/version-manager.utils.d.ts.map +1 -0
- package/package.json +57 -3
- package/src/HistoryManager.ts +770 -0
- package/src/VersionManager.ts +451 -0
- package/src/create-branch.ts +154 -0
- package/src/detached-event-error.ts +43 -0
- package/src/find-switch-branch-step.ts +277 -0
- package/src/history-filters.ts +157 -0
- package/src/history-item-builder.ts +101 -0
- package/src/history-scope-api.ts +189 -0
- package/src/history-undo-session.types.ts +37 -0
- package/src/index.ts +46 -0
- package/src/merge-branch.ts +153 -0
- package/src/plugin.ts +93 -0
- package/src/pullable-count.ts +67 -0
- package/src/push-inflight.ts +91 -0
- package/src/redo-stack.ts +79 -0
- package/src/remove-branch.ts +89 -0
- package/src/restore-entity.ts +97 -0
- package/src/scope-selection.ts +132 -0
- package/src/switch-branch-actions.ts +238 -0
- package/src/sync-history-bridge.ts +131 -0
- package/src/undo-redo-apply.ts +260 -0
- package/src/version-manager.utils.ts +43 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { MergeBranchOptions, MergeBranchResult } from '@aiao/rxdb';
|
|
2
|
+
import { VersionManager } from './VersionManager.js';
|
|
3
|
+
/**
|
|
4
|
+
* 合并分支
|
|
5
|
+
*
|
|
6
|
+
* 将源分支的变更合并到当前激活分支(目标分支)。
|
|
7
|
+
*
|
|
8
|
+
* 支持两种策略:
|
|
9
|
+
* - `squash`(默认):将源分支所有变更压缩为最小操作集后应用,过滤幽灵操作(源分支内
|
|
10
|
+
* INSERT 后又 DELETE 的实体不会影响目标分支)
|
|
11
|
+
* - `normal`:逐条应用源分支变更,每条变更在目标分支产生独立的变更记录,不过滤幽灵操作
|
|
12
|
+
*
|
|
13
|
+
* 合并后可选删除源分支。
|
|
14
|
+
*
|
|
15
|
+
* @param version - VersionManager 实例
|
|
16
|
+
* @param sourceBranchId - 源分支 ID
|
|
17
|
+
* @param currentBranchId - 当前激活分支 ID(由调用方提供,避免重复查询)
|
|
18
|
+
* @param options - 合并选项
|
|
19
|
+
* @returns 合并结果
|
|
20
|
+
*/
|
|
21
|
+
export declare const merge_branch: (version: VersionManager, sourceBranchId: string, currentBranchId: string, options?: MergeBranchOptions) => Promise<MergeBranchResult>;
|
|
22
|
+
//# sourceMappingURL=merge-branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-branch.d.ts","sourceRoot":"","sources":["../src/merge-branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,kBAAkB,EAAE,iBAAiB,EAAmC,MAAM,YAAY,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAIrD;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,YAAY,GACvB,SAAS,cAAc,EACvB,gBAAgB,MAAM,EACtB,iBAAiB,MAAM,EACvB,UAAU,kBAAkB,KAC3B,OAAO,CAAC,iBAAiB,CA4H3B,CAAC"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { IRxDBPlugin, Plugin, RxDBPluginBase } from '@aiao/rxdb';
|
|
2
|
+
import { LifecycleScope } from '@aiao/utils';
|
|
3
|
+
import { VersionManager } from './VersionManager.js';
|
|
4
|
+
/** 本插件当前不接受任何选项 */
|
|
5
|
+
export type RxDBPluginHistoryOptions = object;
|
|
6
|
+
/**
|
|
7
|
+
* 历史 / 撤销重做 / 分支插件。
|
|
8
|
+
*
|
|
9
|
+
* @remarks
|
|
10
|
+
* **不声明 `inject`**:`VersionManager.init()` 只挂事件监听与订阅,一条适配器读写都不发。
|
|
11
|
+
* 声明 `adapter:local` 会把安装推到引导链之后,而 `HistoryManager` 的分支流必须在第一条
|
|
12
|
+
* `rxdb_change` 事件到达之前就已经订阅上——装晚了,那一批变更不进历史。这也正是搬进插件
|
|
13
|
+
* 之前的时序:核心在构造器里 `new VersionManager()`、在 `init()` 里调 `init()`,
|
|
14
|
+
* 两者都早于 `schemaManager.init()`。
|
|
15
|
+
*
|
|
16
|
+
* 两处宿主改动都登记在 `scope` 上,断开连接时由宿主逆序释放:
|
|
17
|
+
*
|
|
18
|
+
* 1. `rxdb.versionManager` 这个实例槽位 —— 释放时连同 `destroy()` 一起撤掉,不给下一个
|
|
19
|
+
* 纪元留一个指向已拆事件总线的管理器。槽位排在最先获取,因而最后撤,`destroy()`
|
|
20
|
+
* 才跑得在槽位仍可读的窗口里;
|
|
21
|
+
* 2. {@link RxDB.syncState} 上的可推送计数订阅 —— 枢纽活得和实例一样长,计数却只在连接
|
|
22
|
+
* 期间有意义,因此走 `bindPushableCount()` 拿一个解绑函数,而不是在构造枢纽时传进去。
|
|
23
|
+
*
|
|
24
|
+
* 同一枢纽上的「重算待拉数」跳板**不在这里**:`refreshPullableCount()` 随 US-025 阶段 D
|
|
25
|
+
* 去了 `@aiao/rxdb-plugin-sync`,接住 `requestPullableRefresh()` 于是也是那个插件的活。
|
|
26
|
+
* 只装历史不装同步时那个请求发进空里,正是「没有同步就没有待拉数」的实情。
|
|
27
|
+
*/
|
|
28
|
+
export declare class RxDBPluginHistory extends RxDBPluginBase implements IRxDBPlugin {
|
|
29
|
+
readonly lifecycle: "scoped";
|
|
30
|
+
name: Uncapitalize<string>;
|
|
31
|
+
install(scope: LifecycleScope): void;
|
|
32
|
+
}
|
|
33
|
+
declare module '@aiao/rxdb' {
|
|
34
|
+
interface RxDB {
|
|
35
|
+
/**
|
|
36
|
+
* 历史 / 撤销重做 / 分支子系统。
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* 由 `@aiao/rxdb-plugin-history` 在连接纪元内装配。**没装插件时这个槽位不存在**:
|
|
40
|
+
* 读它拿到 `undefined`,而不是一个什么都不做的空壳——核心不做 fallback 兜底。
|
|
41
|
+
*/
|
|
42
|
+
versionManager: VersionManager;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* 历史插件工厂。
|
|
47
|
+
*
|
|
48
|
+
* @param db - 宿主实例
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* ```ts
|
|
52
|
+
* import { rxDBPluginHistory } from '@aiao/rxdb-plugin-history';
|
|
53
|
+
*
|
|
54
|
+
* rxdb.use(rxDBPluginHistory);
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare const rxDBPluginHistory: Plugin<RxDBPluginHistoryOptions>;
|
|
58
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAQ,cAAc,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,mBAAmB;AACnB,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,iBAAkB,SAAQ,cAAe,YAAW,WAAW;IAC1E,QAAQ,CAAC,SAAS,EAAG,QAAQ,CAAU;IACvC,IAAI,EAAE,YAAY,CAAC,MAAM,CAAC,CAAa;IAEvC,OAAO,CAAC,KAAK,EAAE,cAAc;CAyB9B;AAED,OAAO,QAAQ,YAAY,CAAC;IAC1B,UAAU,IAAI;QACZ;;;;;;WAMG;QACH,cAAc,EAAE,cAAc,CAAC;KAChC;CACF;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,wBAAwB,CAA2C,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { PullOptions, PullResult } from '@aiao/rxdb';
|
|
2
|
+
/**
|
|
3
|
+
* 结算一次 pull 所需的全部输入
|
|
4
|
+
*/
|
|
5
|
+
export interface PullableSettlement {
|
|
6
|
+
/** 本次 pull 是否覆盖了当前分支的完整仓库集合,且没有遗留分页或失败 */
|
|
7
|
+
complete: boolean;
|
|
8
|
+
/** 结算令牌签发之后是否又有远端事件到达 */
|
|
9
|
+
concurrent: boolean;
|
|
10
|
+
/** 本次 pull 实际取回的变更数 */
|
|
11
|
+
pulled: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* 判断一次 pull 是否算「完整同步」
|
|
15
|
+
*
|
|
16
|
+
* @param options - 发起 pull 时的选项
|
|
17
|
+
* @param result - pull 的结果
|
|
18
|
+
* @returns 覆盖了全部仓库、没有下一页、也没有失败仓库时返回 `true`
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* `repositoryFilter` 传了空数组等价于不过滤:判成不完整会让绝大多数正常 pull 永远清不掉计数。
|
|
22
|
+
*/
|
|
23
|
+
export declare function isCompletePull(options: PullOptions | undefined, result: PullResult): boolean;
|
|
24
|
+
/**
|
|
25
|
+
* 计算结算后的 pullable 计数
|
|
26
|
+
*
|
|
27
|
+
* @param current - 结算前的计数
|
|
28
|
+
* @param settlement - 结算输入
|
|
29
|
+
* @returns 结算后的计数(不会为负)
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* 只有「完整同步」且「期间没有新的远端事件」才归零。`concurrent` 这一关是必须的:
|
|
33
|
+
* pull 期间到达的事件描述的是快照之后的新变更,本次 pull 没有覆盖它们,
|
|
34
|
+
* 归零等于把它们吞掉,界面从此再也不会提示这批数据。
|
|
35
|
+
*/
|
|
36
|
+
export declare function settledPullableCount(current: number, settlement: PullableSettlement): number;
|
|
37
|
+
//# sourceMappingURL=pullable-count.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pullable-count.d.ts","sourceRoot":"","sources":["../src/pullable-count.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE1D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,QAAQ,EAAE,OAAO,CAAC;IAElB,yBAAyB;IACzB,UAAU,EAAE,OAAO,CAAC;IAEpB,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,OAAO,CAK5F;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAK5F"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 推送在飞登记:push 把「正在往远端送」的变更区间挂出来,undo 认这个区间。
|
|
3
|
+
*
|
|
4
|
+
* @module rxdb/version/push-inflight
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 一次 push 调用期间持有的认领句柄。
|
|
8
|
+
*
|
|
9
|
+
* 一次 `pushRepository` 可能同时推多个仓库(级联),因此 `claim` 可以调多次,
|
|
10
|
+
* 而 {@link release} 一次把这一轮的全部认领撤干净 —— 谁开的谁关,中途从哪条路径
|
|
11
|
+
* 提前返回都不会漏。
|
|
12
|
+
*/
|
|
13
|
+
export interface PushInFlightSession {
|
|
14
|
+
/**
|
|
15
|
+
* 声明本轮正在把某仓库 id ≤ `maxChangeId` 的变更送往远端。
|
|
16
|
+
*
|
|
17
|
+
* @param repositoryKey - `namespace:entity`
|
|
18
|
+
* @param maxChangeId - 本轮送出的最大 change id
|
|
19
|
+
*
|
|
20
|
+
* @remarks
|
|
21
|
+
* 同一仓库重复认领取**较大**者:级联路径分相位推同一份计划,后一相位不该把
|
|
22
|
+
* 前一相位已经罩住的区间缩回去。
|
|
23
|
+
*/
|
|
24
|
+
claim(repositoryKey: string, maxChangeId: number): void;
|
|
25
|
+
/** 撤销本 session 的全部认领。重复调用是空操作。 */
|
|
26
|
+
release(): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* 「哪些变更此刻正在飞往远端」的进程内登记处。
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* 存在的理由是一个时序缺口:撤销的判据是「还没推上去」,而这件事的数据源
|
|
33
|
+
* `RxDBSync.lastPushedChangeId` 只在 push **提交**时才写。push 的远端往返在事务之外,
|
|
34
|
+
* 于是「已经发出去了、水位线还没推进」这段窗口里,`undo()` 会放行一条其实已经到达
|
|
35
|
+
* 远端的变更。
|
|
36
|
+
*
|
|
37
|
+
* 撤销**不产生新的变更行**(`undo-redo-apply.ts` 只给原行打 `revertChangeId` 标记),
|
|
38
|
+
* 而出站查询过滤 `revertChangeId = null` —— 那条变更从此远端有、本地无,且没有任何
|
|
39
|
+
* 一次 push 会把这个差异送出去。本登记处把那段窗口填上:在飞即视同已推。
|
|
40
|
+
*
|
|
41
|
+
* **只覆盖本进程。** 多 tab / Tauri 多进程共享同一份本地库时,另一个进程的 push
|
|
42
|
+
* 在这里是看不见的。跨进程要的是数据库里的一条租约行,而 push 路径目前整体就没有
|
|
43
|
+
* 跨进程互斥(两个进程会各自推同一批变更),那是另一个问题,不在这里假装解决。
|
|
44
|
+
*/
|
|
45
|
+
export declare class PushInFlightRegistry {
|
|
46
|
+
#private;
|
|
47
|
+
/**
|
|
48
|
+
* 开一轮认领。
|
|
49
|
+
*
|
|
50
|
+
* @returns 本轮的认领句柄;调用方必须在 `finally` 里 {@link PushInFlightSession.release}
|
|
51
|
+
*/
|
|
52
|
+
session(): PushInFlightSession;
|
|
53
|
+
/**
|
|
54
|
+
* 当前全部在飞认领,按仓库取最大值。
|
|
55
|
+
*
|
|
56
|
+
* @returns `namespace:entity` -> 正在飞的最大 change id;没有任何认领时是空 Map
|
|
57
|
+
*/
|
|
58
|
+
snapshot(): ReadonlyMap<string, number>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=push-inflight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-inflight.d.ts","sourceRoot":"","sources":["../src/push-inflight.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;GAMG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;;;;;;;OASG;IACH,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAExD,kCAAkC;IAClC,OAAO,IAAI,IAAI,CAAC;CACjB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,oBAAoB;;IAK/B;;;;OAIG;IACH,OAAO,IAAI,mBAAmB;IAiB9B;;;;OAIG;IACH,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC;CAWxC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { HistoryItem } from '@aiao/rxdb';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
/**
|
|
4
|
+
* Redo 栈容量上限(会话内)
|
|
5
|
+
*
|
|
6
|
+
* 超过则丢弃最旧的项(尾部),避免长会话下无界增长。
|
|
7
|
+
*/
|
|
8
|
+
export declare const MAX_REDO_STACK_SIZE = 1000;
|
|
9
|
+
/**
|
|
10
|
+
* 会话级 Redo 栈
|
|
11
|
+
*
|
|
12
|
+
* 从 HistoryManager 抽离的 redo 栈管理子模块:
|
|
13
|
+
* - 持有内存 `BehaviorSubject<HistoryItem[]>`(不持久化)
|
|
14
|
+
* - 新项总在头部(push 后第一个)
|
|
15
|
+
* - 容量上限 `MAX_REDO_STACK_SIZE`
|
|
16
|
+
*
|
|
17
|
+
* 设计理由:
|
|
18
|
+
* - HistoryManager 原本 1120 行,redo 栈状态 + 操作占 60+ 行且与 history 查询/undo 流程正交
|
|
19
|
+
* - 独立后可单测,并避免泄漏 BehaviorSubject 引用
|
|
20
|
+
*
|
|
21
|
+
* @internal 由 HistoryManager 持有;外部通过 HistoryManager 公共 API 访问
|
|
22
|
+
*/
|
|
23
|
+
export declare class RedoStack {
|
|
24
|
+
#private;
|
|
25
|
+
/**
|
|
26
|
+
* 当前 redo 栈的可观察流(新项在前)
|
|
27
|
+
*/
|
|
28
|
+
get items$(): Observable<HistoryItem[]>;
|
|
29
|
+
/**
|
|
30
|
+
* 当前栈快照
|
|
31
|
+
*/
|
|
32
|
+
get value(): HistoryItem[];
|
|
33
|
+
/**
|
|
34
|
+
* 将一组历史项压入栈顶(items 在前)
|
|
35
|
+
*
|
|
36
|
+
* 超过 MAX_REDO_STACK_SIZE 时丢弃尾部最旧项。
|
|
37
|
+
*/
|
|
38
|
+
push(items: HistoryItem[]): void;
|
|
39
|
+
/**
|
|
40
|
+
* 按稳定身份(`fingerprint`)移除已应用的项。
|
|
41
|
+
*
|
|
42
|
+
* @param items - 已经 redo 完成、需要出栈的项
|
|
43
|
+
* @returns 实际被移除的项(按栈中原顺序);不在栈中的项被忽略
|
|
44
|
+
*
|
|
45
|
+
* @remarks
|
|
46
|
+
* **不能用「移除 N 项」代替身份匹配**:作用域 redo 会先按 scope 筛出本作用域的项再应用,
|
|
47
|
+
* 这些项未必位于栈顶。按数量截栈顶会删掉栈头那些**未被 redo** 的项(它们从此丢失),
|
|
48
|
+
* 而真正已 redo 的项仍留在栈里可以被重复执行。
|
|
49
|
+
*/
|
|
50
|
+
remove(items: HistoryItem[]): HistoryItem[];
|
|
51
|
+
/**
|
|
52
|
+
* 清空栈
|
|
53
|
+
*/
|
|
54
|
+
clear(): void;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=redo-stack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redo-stack.d.ts","sourceRoot":"","sources":["../src/redo-stack.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAmB,UAAU,EAAE,MAAM,MAAM,CAAC;AAEnD;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;;;;;;;;;;;;;GAaG;AACH,qBAAa,SAAS;;IAGpB;;OAEG;IACH,IAAI,MAAM,IAAI,UAAU,CAAC,WAAW,EAAE,CAAC,CAEtC;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,WAAW,EAAE,CAEzB;IAED;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI;IAMhC;;;;;;;;;;OAUG;IACH,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE;IAS3C;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { VersionManager } from './VersionManager.js';
|
|
2
|
+
/**
|
|
3
|
+
* 移除一个分支
|
|
4
|
+
* @param version
|
|
5
|
+
* @param branchId
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 「查子分支 → 查 change → 删」整段必须在一个事务窗口内完成。
|
|
9
|
+
* 拆开之后,检查与删除之间新建的子分支会漏判,留下 `parentId` 指向不存在分支的孤儿,
|
|
10
|
+
* 而孤儿又会被切分支时的「父节点缺失即当作到根」静默吞掉,损坏无声。
|
|
11
|
+
*
|
|
12
|
+
* 事务体内一律用 `executor.getRepository(...)`:绑在适配器上的仓库会重新入队,
|
|
13
|
+
* 排在自己这个事务后面(队列并发度 1),永久挂起。
|
|
14
|
+
*/
|
|
15
|
+
export declare const remove_branch: (version: VersionManager, branchId: string) => Promise<void>;
|
|
16
|
+
//# sourceMappingURL=remove-branch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remove-branch.d.ts","sourceRoot":"","sources":["../src/remove-branch.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,GAAU,SAAS,cAAc,EAAE,UAAU,MAAM,kBAkE5E,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { EntityType, RestoreEntityOptions } from '@aiao/rxdb';
|
|
2
|
+
import { VersionManager } from './VersionManager.js';
|
|
3
|
+
/**
|
|
4
|
+
* 恢复被删除的实体。
|
|
5
|
+
*
|
|
6
|
+
* 根据 RxDBChange 记录中的 inversePatch 重新插入实体,
|
|
7
|
+
* 恢复操作本身会生成新的 RxDBChange 记录(可被 push 到远程)。
|
|
8
|
+
*
|
|
9
|
+
* @param vm - 版本管理器实例
|
|
10
|
+
* @param entity - 被删除的实体实例(需要包含 metadata 信息)
|
|
11
|
+
* @param options - 恢复选项,包含 changeId(DELETE 类型的 RxDBChange 记录 ID)
|
|
12
|
+
* @returns 恢复后的实体实例
|
|
13
|
+
*/
|
|
14
|
+
export declare function restore_entity<T extends EntityType>(vm: VersionManager, entity: InstanceType<T>, options: RestoreEntityOptions): Promise<InstanceType<T>>;
|
|
15
|
+
//# sourceMappingURL=restore-entity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restore-entity.d.ts","sourceRoot":"","sources":["../src/restore-entity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAqB,oBAAoB,EAAa,MAAM,YAAY,CAAC;AAE5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,CAAC,SAAS,UAAU,EACvD,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAsE1B"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { HistoryItem, HistoryScope, RxDBChange, RxDBError } from '@aiao/rxdb';
|
|
2
|
+
/** 判定作用域归属只需要这三个字段 */
|
|
3
|
+
type ScopedChange = Pick<RxDBChange, 'entity' | 'entityId' | 'namespace'>;
|
|
4
|
+
/**
|
|
5
|
+
* 单条变更是否落在作用域内
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* entity 作用域用 `===` 比较 id,`0` / `''` 这类假值同样是合法 id——
|
|
9
|
+
* 判空必须用 `undefined` 而不是真值判断,否则 `entityId = 0` 会退化成 repository 作用域。
|
|
10
|
+
*/
|
|
11
|
+
export declare function isChangeInScope(change: ScopedChange, scope: HistoryScope): boolean;
|
|
12
|
+
/** 历史项是否**至少有一条**变更落在作用域内(决定它是否出现在该作用域的历史里) */
|
|
13
|
+
export declare function historyTouchesScope(history: HistoryItem, scope: HistoryScope): boolean;
|
|
14
|
+
/** 历史项是否**全部**变更都落在作用域内(决定它能否被该作用域整条应用) */
|
|
15
|
+
export declare function isHistoryWithinScope(history: HistoryItem, scope: HistoryScope): boolean;
|
|
16
|
+
/** {@link selectScopedHistories} 的结果 */
|
|
17
|
+
export interface ScopedHistorySelection {
|
|
18
|
+
/** 触及作用域、但同时改了作用域外数据的事务:不可部分应用 */
|
|
19
|
+
crossScope: HistoryItem[];
|
|
20
|
+
/** 完全落在作用域内、可以整条应用的历史项(未被裁剪) */
|
|
21
|
+
selected: HistoryItem[];
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 在作用域内挑出接下来 `step` 条要 undo / redo 的历史项
|
|
25
|
+
*
|
|
26
|
+
* @param histories - 候选历史(已按可撤销 / 可重做过滤,最新在前)
|
|
27
|
+
* @param scope - 作用域
|
|
28
|
+
* @param step - 取几条;非正数取 0 条
|
|
29
|
+
*
|
|
30
|
+
* @remarks
|
|
31
|
+
* `step` 数的是「触及作用域的历史项」,越界事务同样占一个名额而不是被跳过——
|
|
32
|
+
* undo 必须后进先出,跳过它去撤更早的那条会把顺序弄乱。
|
|
33
|
+
*/
|
|
34
|
+
export declare function selectScopedHistories(histories: HistoryItem[], scope: HistoryScope, step: number): ScopedHistorySelection;
|
|
35
|
+
/**
|
|
36
|
+
* 作用域 undo / redo 撞上跨作用域事务
|
|
37
|
+
*
|
|
38
|
+
* @remarks
|
|
39
|
+
* 拿到本错误说明选中的历史项里有事务同时改了作用域内外的数据。作用域**不会**替你决定
|
|
40
|
+
* 是牺牲原子性还是越权撤销,改用不带参数的 `rxdb.versionManager.history()`
|
|
41
|
+
* (database 作用域)可以完整撤销这个事务。`historyManager` 是私有字段,够不到。
|
|
42
|
+
*/
|
|
43
|
+
export declare class RxDBCrossScopeTransactionError extends RxDBError {
|
|
44
|
+
/** 发起 undo / redo 的作用域 */
|
|
45
|
+
readonly scope: HistoryScope;
|
|
46
|
+
/** 越界的历史项(完整未裁剪) */
|
|
47
|
+
readonly histories: readonly HistoryItem[];
|
|
48
|
+
constructor(
|
|
49
|
+
/** 发起 undo / redo 的作用域 */
|
|
50
|
+
scope: HistoryScope,
|
|
51
|
+
/** 越界的历史项(完整未裁剪) */
|
|
52
|
+
histories: readonly HistoryItem[]);
|
|
53
|
+
}
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=scope-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-selection.d.ts","sourceRoot":"","sources":["../src/scope-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC9E,sBAAsB;AACtB,KAAK,YAAY,GAAG,IAAI,CAAC,UAAU,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC,CAAC;AAE1E;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAIlF;AAED,+CAA+C;AAC/C,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAEtF;AAED,2CAA2C;AAC3C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CAEvF;AAED,wCAAwC;AACxC,MAAM,WAAW,sBAAsB;IACrC,kCAAkC;IAClC,UAAU,EAAE,WAAW,EAAE,CAAC;IAC1B,gCAAgC;IAChC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,WAAW,EAAE,EACxB,KAAK,EAAE,YAAY,EACnB,IAAI,EAAE,MAAM,GACX,sBAAsB,CAcxB;AAuBD;;;;;;;GAOG;AACH,qBAAa,8BAA+B,SAAQ,SAAS;IAEzD,0BAA0B;IAC1B,QAAQ,CAAC,KAAK,EAAE,YAAY;IAC5B,oBAAoB;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,WAAW,EAAE;;IAH1C,0BAA0B;IACjB,KAAK,EAAE,YAAY;IAC5B,oBAAoB;IACX,SAAS,EAAE,SAAS,WAAW,EAAE;CAS7C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RxDBChange, SwitchVersionActions } from '@aiao/rxdb';
|
|
2
|
+
import { VersionManager } from './VersionManager.js';
|
|
3
|
+
/**
|
|
4
|
+
* 计算切换分支所需的操作
|
|
5
|
+
* @param version
|
|
6
|
+
* @param branchId 要切换到的分支ID
|
|
7
|
+
* @returns 返回切换分支所需的操作序列
|
|
8
|
+
*/
|
|
9
|
+
export declare const switch_branch_actions: (version: VersionManager, branchId: string) => Promise<SwitchVersionActions<import('@aiao/rxdb').EntityType>>;
|
|
10
|
+
/**
|
|
11
|
+
* 计算切换版本所需的操作
|
|
12
|
+
* @param changes 需要计算的 changes
|
|
13
|
+
* @param options
|
|
14
|
+
*/
|
|
15
|
+
export declare const get_switch_version_actions: (changes: RxDBChange[], isPatch: boolean, actions?: SwitchVersionActions) => SwitchVersionActions;
|
|
16
|
+
//# sourceMappingURL=switch-branch-actions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch-branch-actions.d.ts","sourceRoot":"","sources":["../src/switch-branch-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EAEV,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,GAAU,SAAS,cAAc,EAAE,UAAU,MAAM,mEAmFpF,CAAC;AAkBF;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GACrC,SAAS,UAAU,EAAE,EACrB,SAAS,OAAO,EAChB,UAAS,oBAIR,KACA,oBA4FF,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { PullOptions, PullResult } from '@aiao/rxdb';
|
|
2
|
+
import { HistoryManager } from './HistoryManager.js';
|
|
3
|
+
import { PushInFlightRegistry } from './push-inflight.js';
|
|
4
|
+
/**
|
|
5
|
+
* 同步插件可见的历史侧能力。
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* 由 `VersionManager.syncBridge` 提供,`SyncManager` 在构造时接过去。
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export interface SyncHistoryBridge {
|
|
13
|
+
/**
|
|
14
|
+
* 「哪些变更此刻正在飞往远端」的登记处。
|
|
15
|
+
*
|
|
16
|
+
* @remarks
|
|
17
|
+
* push 与 undo 唯一的会合点,主人是 {@link VersionManager} —— undo 侧经
|
|
18
|
+
* `rxdb.versionManager.pushInFlight` 读它,push 侧经本桥认领区间。
|
|
19
|
+
* 两边读的必须是同一个实例,见 {@link PushInFlightRegistry}。
|
|
20
|
+
*/
|
|
21
|
+
readonly pushInFlight: PushInFlightRegistry;
|
|
22
|
+
/**
|
|
23
|
+
* 在可重入同步上下文中执行:期间产生的本地写入不进 undo/redo 栈。
|
|
24
|
+
*
|
|
25
|
+
* @param fn - 同步动作
|
|
26
|
+
*/
|
|
27
|
+
syncing<T>(fn: () => Promise<T>): Promise<T>;
|
|
28
|
+
/** 与远端合并之后清空当前分支的 undo/redo —— 合并前的内容已经 undo 不回去了 */
|
|
29
|
+
clearUndoHistory(): void;
|
|
30
|
+
/**
|
|
31
|
+
* pull 开始前签发结算令牌。
|
|
32
|
+
*
|
|
33
|
+
* @returns 令牌,交回 {@link settlePull} / {@link settleAbortedPull} /
|
|
34
|
+
* {@link reconcilePullableCount}
|
|
35
|
+
*
|
|
36
|
+
* @remarks
|
|
37
|
+
* 必须在真正发起 pull **之前**取:拉取期间到达的远端事件描述的是快照之后的新变更,
|
|
38
|
+
* 结算时要能看出来,否则「完整同步」的归零会把它们一起吞掉。
|
|
39
|
+
*/
|
|
40
|
+
beginPullableSettlement(): number;
|
|
41
|
+
/**
|
|
42
|
+
* 按一次成功 pull 的实际覆盖范围结算待拉计数。
|
|
43
|
+
*
|
|
44
|
+
* @param token - {@link beginPullableSettlement} 签发的令牌
|
|
45
|
+
* @param options - 发起 pull 时的选项
|
|
46
|
+
* @param result - pull 的结果
|
|
47
|
+
*/
|
|
48
|
+
settlePull(token: number, options: PullOptions | undefined, result: PullResult): void;
|
|
49
|
+
/**
|
|
50
|
+
* 按一次抛错 pull 已落库的部分结算待拉计数。
|
|
51
|
+
*
|
|
52
|
+
* @param token - {@link beginPullableSettlement} 签发的令牌
|
|
53
|
+
* @param pulled - 抛错前已经真实落库的条数,一条都没落时传 0
|
|
54
|
+
*
|
|
55
|
+
* @remarks
|
|
56
|
+
* 令牌必须收回,否则代次永远停在旧值,后续结算全被判成「并发」。
|
|
57
|
+
*/
|
|
58
|
+
settleAbortedPull(token: number, pulled: number): void;
|
|
59
|
+
/**
|
|
60
|
+
* 用远端水位线校准待拉计数。
|
|
61
|
+
*
|
|
62
|
+
* @param token - {@link beginPullableSettlement} 签发的令牌
|
|
63
|
+
* @param count - 按各仓库持久化水位线算出的待拉总数
|
|
64
|
+
*/
|
|
65
|
+
reconcilePullableCount(token: number, count: number): void;
|
|
66
|
+
/**
|
|
67
|
+
* 远端事件到达时累加待拉计数。
|
|
68
|
+
*
|
|
69
|
+
* @param count - 本次事件里属于当前激活分支的条数
|
|
70
|
+
*/
|
|
71
|
+
incrementPullableCount(count: number): void;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* 造一座桥。
|
|
75
|
+
*
|
|
76
|
+
* @param historyManager - 取当前 {@link HistoryManager} 的闭包
|
|
77
|
+
* @param pushInFlight - 飞行登记处
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* 第一个参数是闭包而不是实例:`VersionManager` 在 `init()` 里会重建
|
|
81
|
+
* {@link HistoryManager}(上一纪元 destroy 过),桥若捏着旧实例,重连后所有结算
|
|
82
|
+
* 都会打进一个已经拆掉事件总线的管理器。
|
|
83
|
+
*
|
|
84
|
+
* @internal
|
|
85
|
+
*/
|
|
86
|
+
export declare const createSyncHistoryBridge: (historyManager: () => HistoryManager, pushInFlight: PushInFlightRegistry) => SyncHistoryBridge;
|
|
87
|
+
//# sourceMappingURL=sync-history-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync-history-bridge.d.ts","sourceRoot":"","sources":["../src/sync-history-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAE1D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;;;;GAOG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;IAE5C;;;;OAIG;IACH,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IAE7C,qDAAqD;IACrD,gBAAgB,IAAI,IAAI,CAAC;IAEzB;;;;;;;;;OASG;IACH,uBAAuB,IAAI,MAAM,CAAC;IAElC;;;;;;OAMG;IACH,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IAEtF;;;;;;;;OAQG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvD;;;;;OAKG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3D;;;;OAIG;IACH,sBAAsB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7C;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,GAClC,gBAAgB,MAAM,cAAc,EACpC,cAAc,oBAAoB,KACjC,iBAaD,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { FindOptions, HistoryItem, IRepository, RxDB, RxDBAdapterLocalBase, RxDBChange, RxDBSync, RxDBSyncOrderByField, RxDBSyncRuleGroup } from '@aiao/rxdb';
|
|
2
|
+
import { BehaviorSubject, Subject } from 'rxjs';
|
|
3
|
+
import { ActiveUndoSession, UndoBoundary } from './history-undo-session.types.js';
|
|
4
|
+
type LocalRxDBSyncRepository = IRepository<typeof RxDBSync> & {
|
|
5
|
+
find(options: FindOptions<typeof RxDBSync, RxDBSyncRuleGroup, RxDBSyncOrderByField>): Promise<RxDBSync[]>;
|
|
6
|
+
};
|
|
7
|
+
export declare const getLocalRxDBSyncRepository: (adapter: RxDBAdapterLocalBase) => LocalRxDBSyncRepository;
|
|
8
|
+
/**
|
|
9
|
+
* undo / redo / pushableCount 所需的可变状态。
|
|
10
|
+
*
|
|
11
|
+
* `#` 字段必须通过 getter/setter 关闭 captured 实例;Map / Subject 用类持有的同一份引用。
|
|
12
|
+
*/
|
|
13
|
+
export interface UndoRedoApplyHost {
|
|
14
|
+
readonly rxdb: RxDB;
|
|
15
|
+
readonly destroyed: boolean;
|
|
16
|
+
isUndoRedoInProgress: boolean;
|
|
17
|
+
redoInvalidationFloor: number;
|
|
18
|
+
pushableGeneration: number;
|
|
19
|
+
readonly pushableCount$: BehaviorSubject<number>;
|
|
20
|
+
readonly pushableCountTrigger$: BehaviorSubject<number>;
|
|
21
|
+
readonly errors$: Subject<Error>;
|
|
22
|
+
getFirstConnectedAt(): Date;
|
|
23
|
+
isUndoSessionCurrent(session: ActiveUndoSession): boolean;
|
|
24
|
+
getNextRevertStateUpdatedAt(changes: RxDBChange[]): Date;
|
|
25
|
+
setRevertStateWatermarks(changes: RxDBChange[], reverted: boolean, updatedAt: Date): void;
|
|
26
|
+
pushToRedoStack(items: HistoryItem[]): void;
|
|
27
|
+
removeFromRedoStack(items: HistoryItem[]): HistoryItem[];
|
|
28
|
+
}
|
|
29
|
+
/** 绕过 Observable 缓存,直接查最新变更再转成历史项。 */
|
|
30
|
+
export declare function fetchLatestHistories(host: UndoRedoApplyHost, undoBoundary: UndoBoundary): Promise<{
|
|
31
|
+
histories: HistoryItem[];
|
|
32
|
+
lastPushedMap: Map<string, number>;
|
|
33
|
+
}>;
|
|
34
|
+
/**
|
|
35
|
+
* 应用 undo/redo:提取排序 → switchBranch actions → 元数据 → 身份检查 → 切分支 → 栈。
|
|
36
|
+
*
|
|
37
|
+
* undo 在 `adapter.switchBranch` 前必须做 session 对象身份检查。
|
|
38
|
+
*/
|
|
39
|
+
export declare function applyUndoRedoHistories(host: UndoRedoApplyHost, operation: 'undo' | 'redo', histories: HistoryItem[], undoSession?: ActiveUndoSession): Promise<void>;
|
|
40
|
+
/**
|
|
41
|
+
* 按 repository 水位线异步刷新 pushableCount。
|
|
42
|
+
*
|
|
43
|
+
* 只有仍是最新那次刷新才有资格改写计数。失败字符串 `'[#updatePushableCount] error'` 不得改。
|
|
44
|
+
*/
|
|
45
|
+
export declare function updatePushableCount(host: UndoRedoApplyHost): Promise<void>;
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=undo-redo-apply.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"undo-redo-apply.d.ts","sourceRoot":"","sources":["../src/undo-redo-apply.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,WAAW,EAEhB,KAAK,IAAI,EACT,KAAK,oBAAoB,EAEzB,UAAU,EAEV,QAAQ,EACR,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAkB,OAAO,EAAE,MAAM,MAAM,CAAC;AAGhE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAEvF,KAAK,uBAAuB,GAAG,WAAW,CAAC,OAAO,QAAQ,CAAC,GAAG;IAC5D,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,OAAO,QAAQ,EAAE,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CAC3G,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,SAAS,oBAAoB,KAAG,uBACA,CAAC;AAE5E;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,qBAAqB,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACjC,mBAAmB,IAAI,IAAI,CAAC;IAC5B,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC1D,2BAA2B,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;IACzD,wBAAwB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,CAAC;IAC1F,eAAe,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC5C,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,WAAW,EAAE,CAAC;CAC1D;AAED,sCAAsC;AACtC,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,iBAAiB,EACvB,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC;IAAE,SAAS,EAAE,WAAW,EAAE,CAAC;IAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAAC,CAoD3E;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,iBAAiB,EACvB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,SAAS,EAAE,WAAW,EAAE,EACxB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAiEf;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsEhF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview 版本管理器的纯函数工具集
|
|
3
|
+
*
|
|
4
|
+
* 从 {@link VersionManager} 抽出的无状态辅助函数,供变更事件处理流程复用。
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* 同步侧那两个(`hasSyncedData` / `partialResultOf`)随 US-025 阶段 D 去了
|
|
8
|
+
* `@aiao/rxdb-plugin-sync` 的 `sync-manager.utils.ts`:它们的形参是
|
|
9
|
+
* `SyncRepositoryResult`,留在这里会让历史包反向依赖同步包。
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* 从变更事件里提取数字 id。
|
|
13
|
+
*
|
|
14
|
+
* @param change - 变更事件,优先取 `change.id`,缺失时回退到 `change.patch.id`
|
|
15
|
+
* @returns 正整数 id,无法提取时返回 null
|
|
16
|
+
*/
|
|
17
|
+
export declare const getRxDBChangeEventId: (change: {
|
|
18
|
+
id: unknown;
|
|
19
|
+
patch?: unknown;
|
|
20
|
+
}) => number | null;
|
|
21
|
+
/**
|
|
22
|
+
* 取一组变更里最早的 `recordAt` 时间。
|
|
23
|
+
*
|
|
24
|
+
* @param changes - 变更数组
|
|
25
|
+
* @returns 最早的有效 `recordAt`,没有有效记录时返回 null
|
|
26
|
+
*/
|
|
27
|
+
export declare const getEarliestRecordAt: (changes: readonly {
|
|
28
|
+
recordAt?: unknown;
|
|
29
|
+
}[]) => Date | null;
|
|
30
|
+
//# sourceMappingURL=version-manager.utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version-manager.utils.d.ts","sourceRoot":"","sources":["../src/version-manager.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,KAAG,MAAM,GAAG,IAKxF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,SAAS;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EAAE,KAAG,IAAI,GAAG,IASvF,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,60 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aiao/rxdb-plugin-history",
|
|
3
|
-
"version": "0.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "0.0.26",
|
|
4
|
+
"description": "History, undo/redo and branch management for Aiao RxDB.",
|
|
5
|
+
"homepage": "https://rxdb.netlify.app/docs/plugins",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/aiao-io/rxdb/issues"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"aiao",
|
|
11
|
+
"rxdb",
|
|
12
|
+
"history",
|
|
13
|
+
"undo",
|
|
14
|
+
"redo",
|
|
15
|
+
"branch",
|
|
16
|
+
"offline-first",
|
|
17
|
+
"typescript"
|
|
18
|
+
],
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/aiao-io/rxdb.git",
|
|
23
|
+
"directory": "packages/rxdb-plugin-history"
|
|
24
|
+
},
|
|
25
|
+
"type": "module",
|
|
26
|
+
"sideEffects": false,
|
|
27
|
+
"main": "./dist/index.js",
|
|
28
|
+
"module": "./dist/index.js",
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"exports": {
|
|
31
|
+
"./package.json": "./package.json",
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"import": "./dist/index.js",
|
|
35
|
+
"default": "./dist/index.js"
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
"files": [
|
|
39
|
+
"dist",
|
|
40
|
+
"src",
|
|
41
|
+
"!src/**/*.spec.*",
|
|
42
|
+
"!src/**/*.test.*",
|
|
43
|
+
"!src/**/__tests__/**",
|
|
44
|
+
"!**/*.tsbuildinfo"
|
|
45
|
+
],
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
48
|
+
},
|
|
49
|
+
"nx": {
|
|
50
|
+
"name": "rxdb-plugin-history",
|
|
51
|
+
"tags": [
|
|
52
|
+
"js-lib"
|
|
53
|
+
]
|
|
54
|
+
},
|
|
55
|
+
"dependencies": {
|
|
56
|
+
"rxjs": "^7.8.2",
|
|
57
|
+
"@aiao/rxdb": "0.0.26",
|
|
58
|
+
"@aiao/utils": "0.0.26"
|
|
59
|
+
}
|
|
6
60
|
}
|