跳到主要内容

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​

ParameterTypeDescription
rxdbRxDB宿主实例

Returns​

RxDBPluginWorkingTree

Remarks​

挂载放在构造器而不是 install():use() 里插件工厂是同步求值的,于是入口从 use() 那一刻起就在,早于 init() / connect()。install() 跑在 init() 内部,用它挂就会让 「入口存不存在」变成连接纪元的函数——而 contracts/core-api.md §1 要它是进程内库版本 的属性。WorkingTreeManager 自己不持有任何纪元资源(适配器每次调用现取), 所以也没有对称的拆卸义务。

configurable: false / writable: false:status$() 一类订阅依赖入口的稳定身份, 可重定义的属性允许第二个插件实例在订阅者背后把它换掉。同一实例上已经挂过就直接返回, 谁装的就是谁的——与 storage 插件的 hasOwnProperty 守卫同一条理由。

Overrides​

RxDBPluginBase.constructor

Properties​

lifecycle​

readonly lifecycle: "scoped";

Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:191

已迁移到作用域拆卸,宿主不再调用 destroy()。

Implementation of​

IRxDBPlugin.lifecycle


name​

readonly name: "workingTree" = WORKING_TREE_CAPABILITY;

Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:194

RxDB 插件唯一名称。

Implementation of​

IRxDBPlugin.name


rxdb​

protected readonly rxdb: RxDB;

Defined in: packages/rxdb/dist/rxdb-plugin.d.ts:136

Inherited from​

RxDBPluginBase.rxdb


system​

readonly system: RxDBSystemContribution;

Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:197

系统层贡献;宿主在 use() 里同步读这个字段,见 RxDBSystemContribution。

Implementation of​

IRxDBPlugin.system

Methods​

install()​

install(scope): void;

Defined in: packages/rxdb-plugin-working-tree/src/plugin.ts:248

只登记一件事:跨连接的能力启用通知(FR-037)。

Parameters​

ParameterTypeDescription
scopeLifecycleScope本次连接纪元的激活作用域

Returns​

void

Remarks​

另外三件事都不在这里,各有自己的时点:

  • rxdb.workingTree 在构造时挂上(见构造器),必须早于 init();
  • 10 张表、初始行与引导迁移经 RxDBPluginWorkingTree.system 声明,由宿主在建表 那一刻编排——走 install() 的贡献永远赶不上自己的表(见 RxDBSystemContribution);
  • 本连接自己的接通由 bootstrapExisting()(既有库读能力位)与 WorkingTreeManager.enable(本连接刚启用)完成。

留给这里的只有第四种排列:别的连接启用了,而本连接早已连上。它落在这里而不是 bootstrapExisting() 里,尽管那边手边就有 adapter——因为那个钩子只在既有库上调 (见 RxDBSystemContribution.bootstrapExisting 的 @remarks)。把监听器挂在那里, 建库的那个客户端就一次都收不到,而「A 建库、B 连上、B 启用」正是这条通道最该救的排列。

登记在作用域里而不是裸挂:监听器指着本纪元的适配器解析路径,漏摘的话下一纪元会有 两个监听器,各自把钩子往自己那一代上装。

Implementation of​

IRxDBPlugin.install