@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,41 @@
|
|
|
1
|
+
import { EntityType, HistoryItem, HistoryScope, HistoryScopeAPI } from '@aiao/rxdb';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { ActiveUndoSession, UndoBoundary, UndoSession } from './history-undo-session.types.js';
|
|
4
|
+
/**
|
|
5
|
+
* `history()` 工厂所需的可变状态与委托。
|
|
6
|
+
*
|
|
7
|
+
* `history_cache` / `history_ref_counts` 是类持有的同一份 Map,sibling 的 set/delete 必须写回。
|
|
8
|
+
*/
|
|
9
|
+
export interface HistoryScopeApiHost {
|
|
10
|
+
readonly history_cache: Map<string, HistoryScopeAPI>;
|
|
11
|
+
readonly history_ref_counts: Map<string, number>;
|
|
12
|
+
readonly histories$: Observable<HistoryItem[]>;
|
|
13
|
+
readonly undoHistories$: Observable<HistoryItem[]>;
|
|
14
|
+
readonly redoHistories$: Observable<HistoryItem[]>;
|
|
15
|
+
readonly undoSession$: {
|
|
16
|
+
readonly value: UndoSession;
|
|
17
|
+
};
|
|
18
|
+
runSerialized<T>(task: () => Promise<T>): Promise<T>;
|
|
19
|
+
fetchLatestHistories(boundary: UndoBoundary): Promise<{
|
|
20
|
+
histories: HistoryItem[];
|
|
21
|
+
lastPushedMap: Map<string, number>;
|
|
22
|
+
}>;
|
|
23
|
+
isUndoSessionCurrent(session: ActiveUndoSession): boolean;
|
|
24
|
+
selectWholeTransactions(histories: HistoryItem[], scope: HistoryScope, step: number): HistoryItem[];
|
|
25
|
+
applyUndoRedoHistories(operation: 'undo' | 'redo', histories: HistoryItem[], undoSession?: ActiveUndoSession): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 解析 `history()` 入参:无参 → database;显式 HistoryScope;否则 EntityType / 实例。
|
|
29
|
+
*/
|
|
30
|
+
export declare function resolveHistoryScope<T extends EntityType>(options?: T | InstanceType<T> | HistoryScope): HistoryScope;
|
|
31
|
+
/**
|
|
32
|
+
* 创建(或从缓存取出)特定作用域的历史 API。
|
|
33
|
+
*
|
|
34
|
+
* @remarks
|
|
35
|
+
* 引用计数由 wrapObservable 对称管理(addRef / cleanup 成对出现),不再挂 finalize。
|
|
36
|
+
* 缓存条目的生死跟着引用计数走:第一个订阅者出现时入表,最后一个退订时摘掉。
|
|
37
|
+
* 因此「只调方法不订阅」的用法不产生任何常驻状态 —— 它拿到的是个短命对象,
|
|
38
|
+
* 用完即由 GC 回收。
|
|
39
|
+
*/
|
|
40
|
+
export declare function createHistoryScopeApi<T extends EntityType>(host: HistoryScopeApiHost, options?: T | InstanceType<T> | HistoryScope): HistoryScopeAPI;
|
|
41
|
+
//# sourceMappingURL=history-scope-api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-scope-api.d.ts","sourceRoot":"","sources":["../src/history-scope-api.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAEV,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,eAAe,EAErB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAuB,UAAU,EAAe,MAAM,MAAM,CAAC;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AACpG;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACrD,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IAC/C,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;IACnD,QAAQ,CAAC,YAAY,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC;IACvD,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACrD,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC;QACpD,SAAS,EAAE,WAAW,EAAE,CAAC;QACzB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACpC,CAAC,CAAC;IACH,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAC1D,uBAAuB,CAAC,SAAS,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAAC;IACpG,sBAAsB,CACpB,SAAS,EAAE,MAAM,GAAG,MAAM,EAC1B,SAAS,EAAE,WAAW,EAAE,EACxB,WAAW,CAAC,EAAE,iBAAiB,GAC9B,OAAO,CAAC,IAAI,CAAC,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,YAAY,CAuBpH;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,UAAU,EACxD,IAAI,EAAE,mBAAmB,EACzB,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,GAC3C,eAAe,CA+GjB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* undo session 类型:按分支隔离的撤销边界。
|
|
3
|
+
*
|
|
4
|
+
* @internal 供 {@link HistoryManager} 与 undo/redo sibling 共用
|
|
5
|
+
*/
|
|
6
|
+
/** 同步清空后的永久撤销边界 */
|
|
7
|
+
export type UndoBoundary = Readonly<{
|
|
8
|
+
changeId: number;
|
|
9
|
+
createdAfter: Date | null;
|
|
10
|
+
}>;
|
|
11
|
+
/** 当前可撤销的 session */
|
|
12
|
+
export type ActiveUndoSession = Readonly<{
|
|
13
|
+
generation: number;
|
|
14
|
+
state: 'active';
|
|
15
|
+
boundary: UndoBoundary;
|
|
16
|
+
}>;
|
|
17
|
+
/** 同步后已清空、等待本地新写入再恢复的 session */
|
|
18
|
+
export type ClearedUndoSession = Readonly<{
|
|
19
|
+
generation: number;
|
|
20
|
+
state: 'cleared';
|
|
21
|
+
boundary: UndoBoundary;
|
|
22
|
+
clearedAt: Date;
|
|
23
|
+
}>;
|
|
24
|
+
export type UndoSession = ActiveUndoSession | ClearedUndoSession;
|
|
25
|
+
/** 本地写入事件携带的 session 归属信息 */
|
|
26
|
+
export type UndoSessionEvent = Readonly<{
|
|
27
|
+
generation: number | null;
|
|
28
|
+
recordAt: Date | null;
|
|
29
|
+
}>;
|
|
30
|
+
/** 未发生过清空时的默认边界 */
|
|
31
|
+
export declare const INITIAL_UNDO_BOUNDARY: UndoBoundary;
|
|
32
|
+
//# sourceMappingURL=history-undo-session.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"history-undo-session.types.d.ts","sourceRoot":"","sources":["../src/history-undo-session.types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,mBAAmB;AACnB,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B,CAAC,CAAC;AAEH,qBAAqB;AACrB,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;CACxB,CAAC,CAAC;AAEH,iCAAiC;AACjC,MAAM,MAAM,kBAAkB,GAAG,QAAQ,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,IAAI,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;AAEjE,6BAA6B;AAC7B,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACtC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;CACvB,CAAC,CAAC;AAEH,mBAAmB;AACnB,eAAO,MAAM,qBAAqB,EAAE,YAAkD,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
* `@aiao/rxdb-plugin-history` —— 历史、撤销重做与分支。
|
|
4
|
+
*
|
|
5
|
+
* @remarks
|
|
6
|
+
* 核心 `@aiao/rxdb` 只保留**原语**:三张系统表({@link RxDBBranch} / `RxDBChange` /
|
|
7
|
+
* `RxDBSync`)、变更编解码、冲突模型与同步资格判定。原因是这些东西并不属于历史子系统 ——
|
|
8
|
+
* 变更日志触发器直接写 `branchId`,`RxDBChange.branch` 会生成真实的
|
|
9
|
+
* `REFERENCES rxdb$rxdb_branch(id)` 外键,整条响应式增量链路都跑在 `rxdb_change` 上。
|
|
10
|
+
*
|
|
11
|
+
* 搬进本包的是**消费者**:读历史、撤销重做、建/切/合/删分支。
|
|
12
|
+
*
|
|
13
|
+
* 推拉同步的调度**不在这里**。US-025 阶段 D 之后它住在 `@aiao/rxdb-plugin-sync`:
|
|
14
|
+
* `rxdb.syncManager.push()` / `.pull()` / `.sync()`。那个插件 `inject: ['plugin:history']`,
|
|
15
|
+
* 反向则没有依赖——本包不认识同步包。
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* import { rxDBPluginHistory } from '@aiao/rxdb-plugin-history';
|
|
20
|
+
*
|
|
21
|
+
* rxdb.use(rxDBPluginHistory);
|
|
22
|
+
* await rxdb.connect();
|
|
23
|
+
*
|
|
24
|
+
* // 撤销重做走作用域 API:无参 = 整库,传实体类 = 该仓储,传实例 = 该行
|
|
25
|
+
* await rxdb.versionManager.history().undo();
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export * from './plugin.js';
|
|
29
|
+
export { RxDBCrossScopeTransactionError } from './scope-selection.js';
|
|
30
|
+
export type { VersionManager } from './VersionManager.js';
|
|
31
|
+
export { isIgnorableDetachedVersionEventError } from './detached-event-error.js';
|
|
32
|
+
export { PushInFlightRegistry } from './push-inflight.js';
|
|
33
|
+
export type { PushInFlightSession } from './push-inflight.js';
|
|
34
|
+
export type { SyncHistoryBridge } from './sync-history-bridge.js';
|
|
35
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,cAAc,aAAa,CAAC;AAG5B,OAAO,EAAE,8BAA8B,EAAE,MAAM,sBAAsB,CAAC;AAEtE,YAAY,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAQ1D,OAAO,EAAE,oCAAoC,EAAE,MAAM,2BAA2B,CAAC;AAGjF,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAC9D,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC"}
|