RxDBPluginWorkingTree
Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:189
把工作树与提交历史装到单个 RxDB 实例上的插件生命周期对象。
Remarks
与 @aiao/rxdb-plugin-storage 那类插件的形状差别,全部来自时点:storage 的服务是连接期
资源(它握着 OPFS 句柄),所以三件事都登记在作用域里、断连时逆序退回;本插件挂的入口是
进程内库版本的属性,贡献的表要赶在建表那一刻之前就位——两者都早于 install(),也都没有
对称的拆卸义务。真正落在作用域里的只有那个跨连接的能力启用监听器(见 RxDBPluginWorkingTree.install)。
Extends
Implements
Constructors
Constructor
new RxDBPluginWorkingTree(rxdb): RxDBPluginWorkingTree;
Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:215
建插件对象,并把 rxdb.workingTree 挂上去。
Parameters
| Parameter | Type | Description |
|---|---|---|
rxdb | RxDB | 宿主实例 |
Returns
RxDBPluginWorkingTree
Remarks
挂载放在构造器而不是 install():use() 里插件工厂是同步求值的,于是入口从 use()
那一刻起就在,早于 init() / connect()。install() 跑在 init() 内部,用它挂就会让
「入口存不存在」变成连接纪元的函数——而 contracts/core-api.md §1 要它是进程内库版本
的属性。WorkingTreeManager 自己不持有任何纪元资源(适配器每次调用现取),
所以也没有对称的拆卸义务。
configurable: false / writable: false:status$() 一类订阅依赖入口的稳定身份,
可重定义的属性允许第二个插件实例在订阅者背后把它换掉。同一实例上已经挂过就直接返回,
谁装的就是谁的——与 storage 插件的 hasOwnProperty 守卫同一条理由。
Overrides
Properties
lifecycle
readonly lifecycle: "scoped";
Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:191
已迁移到作用域拆卸,宿主不再调用 destroy()。
Implementation of
name
readonly name: "workingTree" = WORKING_TREE_CAPABILITY;
Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:194
RxDB 插件唯一名称。
Implementation of
rxdb
protected readonly rxdb: RxDB;
Defined in: packages/rxdb/dist/rxdb-plugin.d.ts:136
Inherited from
system
readonly system: RxDBSystemContribution;
Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:197
系统层贡献;宿主在 use() 里同步读这个字段,见 RxDBSystemContribution。
Implementation of
Methods
install()
install(scope): void;
Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:248
只登记一件事:跨连接的能力启用通知(FR-037)。
Parameters
| Parameter | Type | Description |
|---|---|---|
scope | LifecycleScope | 本次连接纪元的激活作用域 |
Returns
void
Remarks
另外三件事都不在这里,各有自己的时点:
rxdb.workingTree在构造时挂上(见构造器),必须早于init();- 10 张表、初始行与引导迁移经 RxDBPluginWorkingTree.system 声明,由宿主在建表
那一刻编排——走
install()的贡献永远赶不上自己的表(见 RxDBSystemContribution); - 本连接自己的接通由
bootstrapExisting()(既有库读能力位)与 WorkingTreeManager.enable(本连接刚启用)完成。
留给这里的只有第四种排列:别的连接启用了,而本连接早已连上。它落在这里而不是
bootstrapExisting() 里,尽管那边手边就有 adapter——因为那个钩子只在既有库上调
(见 RxDBSystemContribution.bootstrapExisting 的 @remarks)。把监听器挂在那里,
建库的那个客户端就一次都收不到,而「A 建库、B 连上、B 启用」正是这条通道最该救的排列。
登记在作用域里而不是裸挂:监听器指着本纪元的适配器解析路径,漏摘的话下一纪元会有 两个监听器,各自把钩子往自己那一代上装。