@aiao/rxdb-plugin-history 0.0.26 → 0.0.28

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/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  核心 `@aiao/rxdb` 保留的是**原语**:三张系统表(`RxDBBranch` / `RxDBChange` / `RxDBSync`)、变更编解码、冲突模型、同步资格判定,以及 `getCurrentBranch()`。这些东西并不专属历史子系统——变更日志触发器直接写 `branchId`,`RxDBChange.branch` 会生成真实的 `REFERENCES rxdb$rxdb_branch(id)` 外键,整条响应式增量链路都跑在 `rxdb_change` 上。搬进本包的是**消费者**:读历史、撤销重做、建/切/合/删分支。
8
8
 
9
- 推拉同步的调度**不在这里**,它住在 [`@aiao/rxdb-plugin-sync`](../rxdb-plugin-sync/):`rxdb.syncManager.push()` / `.pull()` / `.sync()`。那个插件 `inject: ['plugin:history']`,反向没有依赖——本包不认识同步包。
9
+ 推拉同步的调度**不在这里**,它住在 [`@aiao/rxdb-plugin-sync`](../rxdb-plugin-sync/README.md):`rxdb.syncManager.push()` / `.pull()` / `.sync()`。那个插件 `inject: ['plugin:history']`,反向没有依赖——本包不认识同步包。
10
10
 
11
11
  ## 安装
12
12
 
@@ -70,6 +70,14 @@ export declare class HistoryManager {
70
70
  /**
71
71
  * 使 redo 栈失效。全部 trigger id ≤ {@link #redoInvalidationFloor} 视为迟到通知,跳过。
72
72
  *
73
+ * @remarks
74
+ * 这里**不查** `isUndoRedoInProgress` / `isInvalidatingRedo`:undo、redo 与本方法三个入口
75
+ * 全部排进 {@link HistoryManager.#runSerialized},两个标志又只在同一个序列化任务内部置起
76
+ * 再复位,因此轮到本任务时它们必然已复位——查了也是一条走不到的分支。下面那句
77
+ * `isInvalidatingRedo = true` 留着是给 {@link HistoryManager.isExecutingUndoRedo} 读的,
78
+ * 真正生效的守卫在调用方 `VersionManager` 的 `if (!historyManager.isExecutingUndoRedo())`,
79
+ * 它连 `syncDepth` 一起看,覆盖比这里严。
80
+ *
73
81
  * @internal
74
82
  */
75
83
  invalidateRedoStack(triggerChangeIds?: readonly number[]): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"HistoryManager.d.ts","sourceRoot":"","sources":["../src/HistoryManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HistoryManager.d.ts","sourceRoot":"","sources":["../src/HistoryManager.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { EntityType, HistoryScopeAPI, MergeBranchOptions, MergeBranchResult, RestoreEntityOptions, RxDB, RxDBBranch } from '@aiao/rxdb';
1
+ import { EntityType, HistoryScopeAPI, MergeBranchOptions, MergeBranchResult, RestoreEntityOptions, RxDB, RxDBBranch, RxDBBranchSwitchPreconditions } from '@aiao/rxdb';
2
2
  import { PushInFlightRegistry } from './push-inflight.js';
3
3
  import { SyncHistoryBridge } from './sync-history-bridge.js';
4
4
  /**
@@ -79,8 +79,9 @@ export declare class VersionManager {
79
79
  * `HistoryManager` 已经拆掉了订阅,这里重建一个而不是复用 —— 复用等于把新纪元的
80
80
  * 变更喂给一条已 complete 的流。
81
81
  *
82
- * 不发任何适配器读写,因此可以(也必须)早于引导链跑:`HistoryManager` 的分支流
83
- * 要赶在第一条 `rxdb_change` 事件之前订阅上,装晚了那一批变更就不进历史。
82
+ * 不发任何适配器读写,也不会把实例连起来(分支流等 `connected$` 为真才查),因此可以
83
+ * (也必须)早于引导链跑:`HistoryManager` 的分支流要赶在第一条 `rxdb_change` 事件之前
84
+ * 订阅上,装晚了那一批变更就不进历史。
84
85
  */
85
86
  init(): void;
86
87
  /**
@@ -114,12 +115,21 @@ export declare class VersionManager {
114
115
  * 切换到指定分支
115
116
  *
116
117
  * @param branchId - 目标分支 ID
118
+ * @param preconditions - 【可选】切换前要成立的条件;不传时行为与以往逐字节一致
117
119
  *
118
120
  * @remarks
119
121
  * 切换分支后会自动清空 redo 栈,因为 redo 历史在新分支中不再有效。
120
122
  * 如果目标分支与当前分支相同,则直接返回,避免不必要的操作。
123
+ *
124
+ * 第二形参是**纯扩展**:既有调用点一个都不用改,不传即不表态。做成默认开启的话,
125
+ * `switchBranch(id)` 会在任何有未提交改动的库上开始抛错——而历史子系统自己就在调它
126
+ * (undo/redo 回放、redo 失效),那些路径上工作树恒非空,默认开启等于让 undo 在有改动时不可用。
127
+ *
128
+ * 条件由**能力插件**校验,本方法一个字段都不读:判据是
129
+ * `@aiao/rxdb-plugin-working-tree` 贡献的那几张表,这里既不认识也不该认识它们。
130
+ * 反方向(本包 import 那个插件)是条依赖环,nx 的图插件会把 `run-many` 当场拒掉。
121
131
  */
122
- switchBranch(branchId: string): Promise<void>;
132
+ switchBranch(branchId: string, preconditions?: RxDBBranchSwitchPreconditions): Promise<void>;
123
133
  /**
124
134
  * 合并分支
125
135
  *
@@ -200,7 +210,7 @@ export declare class VersionManager {
200
210
  getLocalRepositories(): Promise<{
201
211
  branchRepository: import('@aiao/rxdb').LocalRxDBBranchRepository;
202
212
  changeRepository: import('@aiao/rxdb').LocalRxDBChangeRepository;
203
- adapter: import('@aiao/rxdb').IRxDBAdapter & import('@aiao/rxdb').RxDBAdapterLocalBase;
213
+ adapter: import('@aiao/rxdb').LocalRxDBAdapter;
204
214
  }>;
205
215
  /**
206
216
  * 取远端适配器上的系统表仓库。
@@ -214,7 +224,7 @@ export declare class VersionManager {
214
224
  getRemoteRepositories(): Promise<{
215
225
  branchRepository: import('@aiao/rxdb').RemoteRxDBBranchRepository;
216
226
  changeRepository: import('@aiao/rxdb').RemoteRxDBChangeRepository;
217
- adapter: import('@aiao/rxdb').IRxDBAdapter & import('@aiao/rxdb').RxDBAdapterRemoteBase;
227
+ adapter: import('@aiao/rxdb').RemoteRxDBAdapter;
218
228
  }>;
219
229
  /**
220
230
  * 取当前分支;没有激活分支时激活(或新建)`main`。
@@ -1 +1 @@
1
- {"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../src/VersionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAIV,eAAe,EAIf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,IAAI,EACJ,UAAU,EAQX,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE3F;;;;;;;;;;;GAWG;AAEH,qBAAa,cAAc;;aAsEG,IAAI,EAAE,IAAI;IA/DtC;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAiB;IAEvC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,YAAY,uBAA8B;IAEnD;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAyE;IAE/G;;;;;;OAMG;IACH,IAAI,cAAc,sCAEjB;IAED;;;;;;;;OAQG;IACH,IAAI,cAAc,sCAEjB;IAED;;;;;;;OAOG;gBACyB,IAAI,EAAE,IAAI;IAItC;;;;;;;;;;OAUG;IACH,IAAI;IAwEJ;;;;;;OAMG;IACH,OAAO;IAaP;;;;;;OAMG;IACH,iBAAiB;IAMjB;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;IAIrG;;;OAGG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;;;;;;;OAQG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqCnD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBnG;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,eAAe;IAI7E;;;;;;;;;OASG;IACG,aAAa,CAAC,CAAC,SAAS,UAAU,EACtC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAI3B;;;;;;;;OAQG;IACG,oBAAoB;;;;;IAI1B;;;;;;;;OAQG;IACG,qBAAqB;;;;;IAI3B;;;;;;;;;;;OAWG;IACG,gBAAgB;CAYvB"}
1
+ {"version":3,"file":"VersionManager.d.ts","sourceRoot":"","sources":["../src/VersionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EAIV,eAAe,EAIf,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,IAAI,EACJ,UAAU,EAWV,KAAK,6BAA6B,EAEnC,MAAM,YAAY,CAAC;AAKpB,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAI1D,OAAO,EAA2B,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE3F;;;;;;;;;;;GAWG;AAEH,qBAAa,cAAc;;aAsEG,IAAI,EAAE,IAAI;IA/DtC;;;OAGG;IACH,OAAO,CAAC,cAAc,CAAiB;IAEvC;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,YAAY,uBAA8B;IAEnD;;;;;;;;OAQG;IACH,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAyE;IAE/G;;;;;;OAMG;IACH,IAAI,cAAc,sCAEjB;IAED;;;;;;;;OAQG;IACH,IAAI,cAAc,sCAEjB;IAED;;;;;;;OAOG;gBACyB,IAAI,EAAE,IAAI;IAItC;;;;;;;;;;;OAWG;IACH,IAAI;IAwEJ;;;;;;OAMG;IACH,OAAO;IAaP;;;;;;OAMG;IACH,iBAAiB;IAMjB;;;;OAIG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,OAAO,UAAU,CAAC,CAAC;IAIrG;;;OAGG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAInD;;;;;;;;;;;;;;;;;OAiBG;IACG,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,6BAA6B,GAAG,OAAO,CAAC,IAAI,CAAC;IA6ElG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAiCG;IACG,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAwBnG;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,GAAG,eAAe;IAI7E;;;;;;;;;OASG;IACG,aAAa,CAAC,CAAC,SAAS,UAAU,EACtC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAI3B;;;;;;;;OAQG;IACG,oBAAoB;;;;;IAI1B;;;;;;;;OAQG;IACG,qBAAqB;;;;;IAI3B;;;;;;;;;;;OAWG;IACG,gBAAgB;CA0HvB"}
@@ -14,6 +14,12 @@ import { VersionManager } from './VersionManager.js';
14
14
  *
15
15
  * 远端 `branchExists` 那一趟**留在事务外**:它是网络往返,放进事务会让并发度 1 的
16
16
  * 写队列被一次 RTT 堵住。它本来也只是尽力而为的预检,真正的互斥由本地主键约束兜底。
17
+ *
18
+ * **一条分支未必只有一行。** 贡献系统能力的插件可以在同一个事务里追写自己那几行
19
+ * ({@link RxDBSystemContribution.writeBranchRows})——装了 `@aiao/rxdb-plugin-working-tree`
20
+ * 时是 `CommitBranchRef` 与 `WorkingTreeState` 两行。同属一个事务,正是为了不让
21
+ * 「建了分支却没有对应视图」这种半成品状态存在:那样一条分支与一条正常的老分支
22
+ * 在形状上分辨不出来,只会在下一次用到它时抛一句读不出主语的错。
17
23
  */
18
24
  export declare const create_branch: (version: VersionManager, branchId: string, fromChangeId?: number) => Promise<RxDBBranch>;
19
25
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"create-branch.d.ts","sourceRoot":"","sources":["../src/create-branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,yBAAyB,EAE9B,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,GAAU,SAAS,cAAc,EAAE,UAAU,MAAM,EAAE,eAAe,MAAM,wBA8FnG,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,GACzC,kBAAkB,yBAAyB,EAC3C,kBAAkB,MAAM,wBAqBzB,CAAC"}
1
+ {"version":3,"file":"create-branch.d.ts","sourceRoot":"","sources":["../src/create-branch.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,yBAAyB,EAE9B,UAAU,EACV,UAAU,EAEX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,aAAa,GAAU,SAAS,cAAc,EAAE,UAAU,MAAM,EAAE,eAAe,MAAM,wBA+GnG,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,8BAA8B,GACzC,kBAAkB,yBAAyB,EAC3C,kBAAkB,MAAM,wBAqBzB,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { RxDBBranch } from '@aiao/rxdb';
2
2
  /**
3
3
  * 分支切换步骤
4
+ *
5
+ * @internal
4
6
  */
5
7
  export interface SwitchBranchStep {
6
8
  /**
@@ -41,5 +43,52 @@ export interface FindBranchPathOptions {
41
43
  */
42
44
  nextChangeId: number | null;
43
45
  }
46
+ /**
47
+ * 沿 `parentId` 从一条分支走到它所在树的根,返回途经的全部分支(含自己,根在最后)。
48
+ *
49
+ * 断链(`parentId` 指不到分支)与成环都是**持久化完整性错误**:调用方传进来的分支集合
50
+ * 是全量无过滤查询的结果,不存在「父分支被过滤掉了」这种正常情况。
51
+ * 曾经这两种情况都是 `break` —— 相当于把坏数据当成「已经到根」,继续算出一条通往
52
+ * 并不存在的根的完整 action 序列,调用方照单全收地写库,半条路径被应用而没有任何报错。
53
+ * 切分支失败远好过静默切错,因此这里必须终止且不产生任何 action。
54
+ *
55
+ * 从 {@link find_switch_branch_step} 的闭包里提出来成为模块级导出,是因为
56
+ * 「父链自不自洽」这一问的答案必须**全局只有一个**:`enable-migration.ts` 的
57
+ * 「分支可否完整物化」判定用的就是它(research.md R11)。留在闭包里够不着,
58
+ * 调用方只能另写一套遍历,于是迁移期与运行期会对同一个库给出两种答案。
59
+ *
60
+ * 它**够不到** {@link find_switch_branch_step} 的两处提前返回:变更 id 相同(含两边
61
+ * 都没有变更、都落在根上)时那个函数直接返回空步骤,根本走不到这里。所以要检查父链
62
+ * 完整性的调用方必须**自己**调它一次,不能指望 `find_switch_branch_step` 顺带检查。
63
+ *
64
+ * @param branch - 起点分支
65
+ * @param branchMap - 分支 id → 分支;必须是全量集合
66
+ * @returns 从 `branch` 到根的路径,`branch` 在第 0 位
67
+ * @throws {@link RxDBError} 父链成环或指向不存在的分支时
68
+ *
69
+ * @internal
70
+ */
71
+ export declare const find_branch_path_to_root: (branch: RxDBBranch, branchMap: ReadonlyMap<string, RxDBBranch>) => RxDBBranch[];
72
+ /**
73
+ * 算出树上两个节点之间的切换路径
74
+ *
75
+ * @param options - 起点分支、目标分支、两侧当前变更 id,以及**全量**分支集合
76
+ * @returns 按执行顺序排好的步骤;两侧停在同一个变更 id 时为空数组
77
+ * @throws {@link RxDBError} 父链成环或指向不存在的分支时(经 {@link find_branch_path_to_root})
78
+ *
79
+ * @remarks
80
+ * 规则四条:
81
+ *
82
+ * 1. 两个节点有共同祖先时,路径是「当前节点 → 共同祖先 → 目标节点」
83
+ * 2. 没有共同祖先时,路径是「当前节点 → 根 → 目标节点」
84
+ * 3. 路径里每个节点都要算出自己那一段的变更区间,即 `fromChangeId → toChangeId`
85
+ * 4. `changeId` 在每条分支上都递增,所以**逆向还原**的那些步骤 `fromChangeId > toChangeId`,
86
+ * 正向应用的则相反——方向由这两个数的大小关系表达,步骤上没有第二个方向字段
87
+ *
88
+ * 有两处**提前返回**会跳过父链遍历——变更 id 相同时返回空步骤,同分支不同变更 id 时返回
89
+ * 单步——因此本函数不是父链完整性的检查点,理由见 {@link find_branch_path_to_root}。
90
+ *
91
+ * @internal
92
+ */
44
93
  export declare const find_switch_branch_step: (options: FindBranchPathOptions) => SwitchBranchStep[];
45
94
  //# sourceMappingURL=find-switch-branch-step.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-switch-branch-step.d.ts","sourceRoot":"","sources":["../src/find-switch-branch-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AACnD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAyBD,eAAO,MAAM,uBAAuB,GAAI,SAAS,qBAAqB,KAAG,gBAAgB,EA2MxF,CAAC"}
1
+ {"version":3,"file":"find-switch-branch-step.d.ts","sourceRoot":"","sources":["../src/find-switch-branch-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,YAAY,CAAC;AACnD;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,EAAE,UAAU,CAAC;IACnB;;OAEG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;OAEG;IACH,QAAQ,EAAE,UAAU,EAAE,CAAC;IAEvB;;OAEG;IACH,aAAa,EAAE,UAAU,CAAC;IAE1B;;OAEG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAE/B;;OAEG;IACH,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;CAC7B;AAiBD;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,wBAAwB,GACnC,QAAQ,UAAU,EAClB,WAAW,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,KACzC,UAAU,EAqBZ,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,uBAAuB,GAAI,SAAS,qBAAqB,KAAG,gBAAgB,EA6KxF,CAAC"}
package/dist/index.d.ts CHANGED
@@ -32,4 +32,8 @@ export { isIgnorableDetachedVersionEventError } from './detached-event-error.js'
32
32
  export { PushInFlightRegistry } from './push-inflight.js';
33
33
  export type { PushInFlightSession } from './push-inflight.js';
34
34
  export type { SyncHistoryBridge } from './sync-history-bridge.js';
35
+ export { find_branch_path_to_root, find_switch_branch_step } from './find-switch-branch-step.js';
36
+ export type { SwitchBranchStep } from './find-switch-branch-step.js';
37
+ export { compute_switch_branch_actions, get_branch_max_change } from './switch-branch-actions.js';
38
+ export type { SwitchBranchActionReaders } from './switch-branch-actions.js';
35
39
  //# sourceMappingURL=index.d.ts.map
@@ -1 +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"}
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;AAYlE,OAAO,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACjG,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAClG,YAAY,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC"}