跳到主要内容

rxdb

面向 Local-first 应用的 TypeScript 数据库核心。通过装饰器驱动的实体定义,自动生成类型安全的 Repository 与响应式查询 API,让你在浏览器中直接运行 SQLite,以接近原生 App 的方式构建离线优先、数据驱动的 Web 应用。

@aiao/rxdb 是引擎核心,与具体存储后端解耦 —— 通过适配器接入 wa-sqlite / PGlite / Supabase / sqliteai,通过框架绑定接入 Angular / React / Vue。

安装​

pnpm add @aiao/rxdb rxjs

核心包不直接提供存储实现,需配合一个适配器使用,例如浏览器内 SQLite:

pnpm add @aiao/rxdb-adapter-wa-sqlite

核心能力​

  • 装饰器驱动实体:用 @Entity / @TreeEntity 声明数据模型与字段元数据
  • 类型安全 Repository:从实体自动派生 CRUD 与关系查询接口
  • 响应式查询:查询结果以 RxJS Observable 形式推送,数据变更自动刷新
  • 变更追踪与事务:内建 diff、变更事件与事务支持
  • 事务执行器:TransactionExecutor 把「本事务内的写入」这条判据收敛到一处 —— adapter.transaction(tx => tx.getRepository(X).create(...)) 而不是 adapter.transaction(async () => entity.save())(后者会落回队列并永久挂起)
  • 迁移执行器:MigrationType.up(executor) 形参;用户迁移里的写入必须经 executor 发出,否则无路可走
  • 适配器无关:同一套模型可运行在不同存储后端之上

事务与迁移 API 速查​

import { TransactionExecutor, MigrationType } from '@aiao/rxdb';

// 1. 事务 —— 持有 executor 才算「在本事务内」
await adapter.transaction(async executor => {
const repo = executor.getRepository(Todo);
await repo.create({ title: 'inside tx' });
// await todo.save() // ❌ 落回队列并永久挂起
});

// 2. 嵌套内层工作 —— 复用当前 executor,不开新事务
await adapter.transaction(async executor => {
await executor.run(async inner => {
await inner.getRepository(Todo).create({ title: 'nested' });
});
});

// 3. 合并远端变更到本事务
await adapter.transaction(async executor => {
await executor.mergeChanges(actions, localChanges, disableTriggers);
});

// 4. 迁移 —— 必须把 executor 交给用户
const migration: MigrationType = {
name: '001-init',
async up(executor) {
await executor.getRepository(Seed).create({ ... });
},
async down() {}
};

旧签名 tx => tx.execute(sql) 与 MigrationType.up()(无参)仍兼容 —— TS 允许形参更少。

快速开始​

字段必须在 properties 里声明。TypeScript 的字段类型在编译后被擦除,装饰器无法从 title!: string 这样的声明推导出持久化属性 —— 只写类字段的实体可以正常赋值,但不会落库。

import { Entity, EntityBase, PropertyType, RxDB, SyncType } from '@aiao/rxdb';

@Entity({
name: 'Todo',
tableName: 'todo',
namespace: 'public',
properties: [
{ name: 'title', type: PropertyType.string, required: true },
`{ name: 'done', type: PropertyType.boolean }`
]
})
export class Todo extends EntityBase {
title!: string;
done!: boolean;
}

最小闭环 —— 注册适配器、连接、写入、查询:

import { firstValueFrom } from 'rxjs';

const rxdb = new RxDB({
dbName: 'demo',
entities: [Todo],
sync: `{ local: { adapter: 'sqlite' }, type: SyncType.None }`
});

rxdb.adapter('sqlite', db => createYourSqliteAdapter(db));
await rxdb.connect('sqlite');

const repository = rxdb.entityManager.getRepository(Todo);
await repository.create({ title: 'write docs', done: false });

// find() 返回活查询 Observable,数据变更会自动重新发射
const todos = await firstValueFrom(repository.find({ where: { combinator: 'and', rules: [] } }));

实体定义、查询与变更的完整用法见文档站。

可选能力:本地工作树与提交历史​

@aiao/rxdb-plugin-working-tree 给库加上「未提交的改动」与「提交历史」两个一等概念:用户的编辑先落进工作树而不是直接改主数据,commit() 一次性提交成快照,restore() 把历史版本的内容搬回工作树。

未装这个插件的库零成本——十张系统表、写捕获、提交图编解码全部随包走,核心侧只留装卸口与两道转交门。

import { rxDBPluginWorkingTree } from '@aiao/rxdb-plugin-working-tree';

rxdb.use(rxDBPluginWorkingTree); // ← 必须在 connect() 之前
await rxdb.connect('sqlite');
await rxdb.workingTree.enable();

启用之后核心会在 rxdb_migration 里留下一行能力水位,没装对应插件的客户端再打开这个库时,核心拒绝连接,并把该装的包名原样报出来。这道守卫对第三方插件同样有效:包名是插件自己写进水位行的,核心不需要认识它。

启用前要知道的六件事(完整版见文档站的插件页):

  1. 提交能力是数据库级的显式开关——一次 enable() 之后整个库的所有实体、所有分支都按工作树语义运行;从此所有访问这个库的客户端都必须装上插件,包括旧版本的、你控制不到的那些。v1 没有 disable()。
  2. 工作树不是草稿缓存。 工作树装的是「已经写进数据库、还没提交成快照」的变更,参与事务、被查询读到;@aiao/rxdb-plugin-workspace 的草稿缓存装的是「还没保存」的编辑器 buffer,根本没进主库。两层各管一件事,不能合并。
  3. 恢复不是 checkout。 restore() 把历史提交的内容作为新的未提交变更写回工作树:HEAD 不动、历史不删、工作树变脏,下一步是 commit() 或 discard()。没有 detached HEAD,也没有 checkout()。
  4. 历史会原样保留敏感旧值。 写进过某次提交的字段永久留在那次提交里,之后改掉、清空、删行都不会动到它;v1 没有任何公开 API 能把它从历史里抠掉。不要把不该留痕的东西写进启用了提交能力的库——需要 right-to-erasure 的字段不适合直接存在这里。
  5. 加密边界。 支持字段加密的后端上,提交、工作树与恢复会话里的加密字段仍以 versioned envelope 落盘,持久化路径不会先解密再写明文,错误与摘要也不带明文。但加密保护的是落盘的字节——解锁后的合法读取照常拿到旧值,所以它不消解第 4 条,第 4 条也不能替代它。
  6. 不改写历史。 没有 amend / rebase / squash,没有「修改提交信息」,也没有 auto-baseline。提交图损坏时守卫只把分支置为 corrupted_read_only 并留下诊断,不动 HEAD、不删记录。

还有一条容易漏掉的:远端同步拉下来的变更和用户的编辑一样进工作树,在 status().byOrigin 里计为 origin = 'remote_sync' 且不豁免——它会让 clean 变成 false,并被下一次 commit() 一并提交(提交者是这次 commit() 的 authorId,v1 不伪造远端作者身份)。「同步之后工作树突然脏了」是正常行为,不是缺陷。

写捕获拦得住什么,拦不住什么​

写捕获只覆盖经 adapter 的写路径与 adapter 公开的批量写方法。绕过 adapter 的外部数据库句柄——另一个进程直接打开同一个 SQLite 文件、另起一个 PGlite 实例、DevTools 里手写 SQL——拦不住,v1 也不承诺拦得住;这类写入不进工作树、不进历史、status() 看不见。

因此启用了提交能力的数据库有一条硬约束:业务表只能经 RxDB 写入。这句话不是免责声明的注脚:不假装拦得住比拦不住更重要——一道号称拦得住却拦不住的门禁,会让人把「没报错」当成「没被绕过」。

文档​

License​

MIT

RxDB 核心包 - 响应式数据库客户端 提供实体管理、版本控制、查询管理等功能

Enumerations​

EnumerationDescription
OnDeleteAction外键约束操作枚举 定义 SQLite 外键约束的级联行为
OnUpdateAction外键更新行为枚举 定义当父表主键被更新时的级联行为
PropertyType实体属性类型枚举 定义实体属性支持的数据类型
RelationKind实体关系类型枚举 定义实体之间可能的关系类型
SyncStatus同步状态枚举
SyncType同步类型枚举 定义不同的数据同步策略,控制本地数据和远程数据之间的同步方式

Classes​

ClassDescription
AmbiguousActiveBranchErrorRxDBBranch.activated 有多行为真。
CapabilityEnabledEvent能力启用事件(FR-037)。
ConflictDetectedEvent冲突检测事件
ConflictPendingEvent冲突待处理事件
EntityBase实体基类 所有需要同步的实体都应该继承此类
EntityLocalCreatedEvent本地实体创建成功事件
EntityLocalNewEvent本地实体初始化事件
EntityLocalRemovedEvent本地实体删除成功事件
EntityLocalUpdatedEvent本地实体更新成功事件
EntityRelationResolutionError关系目标解析失败。
EntityRemoteCreatedEvent远程实体创建事件
EntityRemoteRemovedEvent远程实体删除事件
EntityRemoteUpdatedEvent远程实体更新事件
InvalidBranchIdError分支 id 不可用时抛出。
LWWConflictResolverLast-Write-Wins 冲突解决器
MalformedRxDBCapabilityWatermarkError带前缀、但读不出三元组的水位行。
MergeBranchBeginEvent分支合并开始事件
MergeBranchCommitEvent分支合并提交事件
MergeBranchEventBase三个分支合并事件的共同载荷
MergeBranchFailedEvent分支合并失败事件
NetworkOfflineError网络离线错误 —— 启用 offlineFallback 但无本地缓存可用时抛出
NoActiveBranchError运行期一行 active 分支都没有。
QueryTask查询任务实现
ReachabilityMonitor远端可达性监视器
RemoteEntityInvalidatedEvent远端实体失效事件(US-023)。
Repository实体仓库 根据配置决策实体的具体操作
RepositoryBase数据仓库
RepositorySyncBeginEventRepository 同步开始事件
RepositorySyncCompleteEventRepository 同步完成事件
RepositorySyncErrorEventRepository 同步错误事件
RxDBRxDB 是个单例对象,负责管理插件、适配器、事件以及上下文等全局功能 全局只能创建一个 RxDB 实例,所有 entity 都通过这个实例进行管理 所有 Entity 的 Class 也只能被注册一次
RxDBAdapterBase数据库适配器基类
RxDBAdapterLocalBase数据库适配器基类(本地)
RxDBAdapterRemoteBase数据库适配器基类(远程)
RxDBBackupArchiveReader流式归档读取器。
RxDBBackupArchiveWriter流式归档写入器。
RxDBBackupError备份 / 恢复失败。
RxDBBranch分支表
RxDBChange数据库变更记录
RxDBDependencyFailedError依赖仓库同步失败,导致本仓库整个没有被同步
RxDBError-
RxDBLocalAdapterCapabilityError被配置为 sync.local 的适配器跑不了系统引导 —— 缺 RxDB.connect() 本地分支要调的成员。
RxDBMigration数据库迁移记录
RxDBMigrationClaimConflictError同名迁移已被另一个 RxDB 实例认领执行权
RxDBMissingPluginError声明了某个策略、却没装提供它的插件。
RxDBMissingPrimaryAdapterError主端没有配置适配器。
RxDBMixedPrimaryAdapterError一次批量修改里的实体分属不同主适配器。
RxDBMixedVersionedCacheTransactionError一次批量修改混入了 QueryCache 实体与版本化(Full / Filter)实体。
RxDBPartialSyncError部分同步错误 —— 同步在中途失败,但已经应用的部分不会被撤销。
RxDBPluginAmbiguousDependencyErrorplugin:* 依赖指向了多个同名插件 —— 无法裁决该注入哪一个(US-015 AC#14 / D4)。
RxDBPluginBaseRxDB 插件基类
RxDBPluginDependencyCycleError插件依赖成环 —— 在安装规划阶段抛出(US-015 AC#16)。
RxDBQueryCacheCapabilityErrorQueryCache 必需能力缺失 —— 适配器没有提供 QueryCache 同步流程所需的 duck。
RxDBSyncRepository 同步元数据表
RxDBSyncOverrideError实例级同步覆盖配置非法。
RxDBSystemMigrationLockError拿不到系统迁移所需的排他锁,本次迁移整体未执行
SwitchBranchBeginEvent分支切换开始事件
SwitchBranchCommitEvent分支切换提交事件
SwitchBranchEventBase三个分支切换事件的共同载荷
SwitchBranchRollbackEvent分支切换回滚事件
SyncBeginEvent同步开始事件
SyncCompleteEvent同步完成事件
SyncErrorEvent同步错误事件
SyncStateHub同步状态汇聚器
TransactionBeginEvent事务开始事件
TransactionCommitEvent事务提交事件
TransactionRollbackEvent事务回滚事件
UnclaimedRxDBCapabilityError库里有能力行、本进程却没有任何插件认领它。
UnsupportedRxDBChangeVersionError解码时遇到的版本号与 RXDB_CHANGE_CODEC_VERSION / RXDB_CHANGE_SCHEMA_VERSION 不一致时抛出。
UnsupportedRxDBEntityIdentityVersionErrorencodeRxDBEntityIdentity 的字节格式版本对不上当前进程时抛出。
UnsupportedRxDBSystemVersionError库里存着的版本号高于本进程支持的版本
UpdateDataCache更新数据的缓存管理器 用于缓存序列化后的实体数据,避免重复序列化

Interfaces​

InterfaceDescription
ActiveBranchEntityHostresolveSingleActiveBranch 建 main 时需要的最小能力。
BigIntProperty有符号 64 位整数属性。
BinaryPropertyUint8Array 字节序列属性
BooleanProperty布尔属性
BranchMaterializationBarrierContext屏障那笔事务里交给来源方的现场。
BranchMaterializationIntent一次物化的意图:拉到哪为止、拉哪些东西。
BranchMaterializationPage已经落进 staging 的一页;pageIndex 是它落库时拿到的页序。
BranchMaterializationPagePayload来源方交出的一页快照:原样落库的 payload 与它的指纹。
BranchMaterializationPageRequest向来源方要页时交代的事。
BranchMaterializationProjectionContext把一页投影成本地写操作时交给来源方的现场。
BranchMaterializationSource远端快照来源:工作树物化流水线与业务数据之间的唯一接缝。
CodeFormat源代码。language 非空时原样透传,不校验语言是否存在。
ColorFormat颜色。
Conflict冲突信息
ConflictResolver冲突解决器接口
CountOptionsCount 查询选项
CurrencyFormat货币。currency 只校验 ISO 4217 的代码形状 /^[A-Z]{3}$/,不内置货币分配表。
DateProperty日期时间属性
DateTimeFormat日期时间。timezone 是 opaque hint,本层不验证 IANA 数据库。
DiffResultDiff 结果,包含分类后的实体 ID
DurationFormat时长。必须声明单位。
EmailFormat邮箱地址。
EntityComputedFieldDescriptor计算属性的描述:输出真实 valueType,永远只读。
EntityFieldConfig-
EntityFieldsDescriptor一个实体的完整字段描述。
EntityForeignKeyMetadataOptions实体级外键约束。
EntityIndexMetadataOptions实体索引元数据接口 定义实体索引的配置
EntityManager实体管理器
EntityMetadataFeaturesEntityMetadata 扩展特性
EntityMetadataOptions实体定义元数据选项接口 用于配置 @Entity 装饰器的完整选项,定义实体的结构和行为
EntityMetadataType实体元数据类型 包含实体的所有元数据信息,如属性、关系、索引等
EntityMetadataValidationError单条元数据违规。
EntityMutationsOptionsgetEntityMutations 的入参
EntityPropertyFieldDescriptor普通属性与系统字段的描述。
EntityStatus实体状态管理器
EntitySyncOverride实例级实体同步覆盖条目。
EntitySyncResolver实体生效同步配置的唯一解析入口。
EnumProperty受控取值集合属性
FieldOptionDisplay单个枚举选项的展示元数据。
FieldValidationError字段值校验失败的描述。
FindAllOptionsFindAll 查询选项
FindByCursorOptionsFindByCursor 查询选项
FindOneOptionsFindOne 查询选项
FindOneOrFailOptionsFindOneOrFail 查询选项
FindOptionsFind 查询选项
HistoryItem历史记录项 表示一个可撤销/重做的操作单元
HistoryScopeAPI历史记录作用域 API 所有作用域返回统一的接口,消除特殊情况
ICascadeOptions外键级联选项接口 定义关系的外键约束配置
IEntity实体基础接口 定义所有实体共有的基本属性,为了能更好地与远程数据同步 所有实体类都应该实现这个接口
IEntityStaticType实体的静态类型
IMutationContext操作上下文
IncrementalUpdateContext一次增量合并的上下文:完整实体缓存 + 匹配状态分类。
IntegerProperty整数属性
IRepository数据仓库管理接口
IRepositoryConfigIRepositoryConfig 统一注册配置
IRxDBAdapterRxDB 数据库适配器接口
IRxDBChange远程更改数据接口
IRxDBPluginRxDB 插件接口
JSONPropertyjson 存储任意 JSON 结构的数据,适用于灵活的数据模型或嵌套对象
KeyValuePropertykeyValue 存储键值对的对象,适用于简单的配置项或动态属性集合
KeyValueSchemaEntry-
LocalRxDBBranchRepositoryRxDBBranch 本地仓库接口
LocalRxDBChangeRepositoryRxDBChange 本地仓库接口
MergeBranchOptions分支合并选项
MergeBranchResult分支合并结果
MigrationType升级脚本
MultilineTextFormat多行纯文本。
MultiSelectFormat多项选择。载体是 StringArrayProperty,此时其 enum 必填。
NumberArrayProperty数字数组属性
NumberFormat普通数字。
NumberProperty数字组
OrderBy排序
PercentageFormat百分比。scale 决定固有值域:0..1 为 [0, 1],0..100 为 [0, 100]。
PhoneFormat电话号码。
PlainTextFormat单行纯文本。
PullBatchRequest一次批量拉取里针对单个实体的水位线请求
PullOptionsPull 操作选项
PullRepositoryOptions拉取仓库选项
PullRepositoryResult拉取仓库结果
PullResultPull 操作结果
PushOptionsPush 操作选项
PushRepositoryOptions推送仓库选项
PushRepositoryResult推送仓库结果
PushResultPush 操作结果
QueryCacheEngineFactoryQueryCache 读引擎工厂 —— 插件在 install(scope) 里经 RxDB.queryCacheEngine() 登记。
QueryCacheEntityQueryCache 实体约束接口
QueryCacheEntityMetadata实体元数据,用于 QueryCache 新鲜度比较
QueryCacheFindOptions查询选项
QueryCacheLocalAdapterQueryCache 适配器接口(本地)
QueryCacheLocalReaderQueryCache 读侧的本地出口(US-020 D8)。
QueryCacheOutboxProvider查询出站队列提供者 —— 插件在 install(scope) 里经 RxDB.queryCacheOutbox() 登记。
QueryCachePrimaryQueryCache 策略下的主仓储。
QueryCacheRemoteAdapterQueryCache 适配器接口(远程)
QueryCacheSession一个 QueryCache 实体一份的引擎会话。
QueryCacheSessionContext建会话需要的一切,全部由核心备好后注入。
QueryManager查询缓存管理器
QueryTaskOptions查询任务选项接口
RatingFormat评分。要求 min < max 且 (max - min) / step 为整数,保证两个端点都可选。
RawQueryResultIRxDBAdapter.rawQuery 的返回形态
RawWriteGate一次 raw 写的判定入口;由捕获运行时提供
RawWritePrimitives未经拦截的五个写原语
ReachabilityEventTarget监听 online / offline 的事件源形状
ReachabilityOptionsReachabilityMonitor 的构造选项
RelationEntitiesObservable多个关系对象的访问接口 提供对多个关联实体集合的观察和操作能力
RelationEntityObservable单个关系对象的访问接口 提供对单个关联实体的观察和操作能力
RemoteBranchInfo远程分支信息
RemoteChange远程更改数据接口
RemoteMergeResult远端合并一批本地变更之后回传的结果
RemoteRxDBBranchRepositoryRxDBBranch 远程仓库接口
RemoteRxDBChangeRepositoryRxDBChange 远程仓库接口
RepositoryConstructor门面仓储的构造器类型(由 RxDB.repository() 登记)
RepositoryIdentifier仓库标识符 唯一标识一个实体类型
RepositoryInstance仓库构造函数类型 —— 必须可实例化(具体类),不能是抽象类;支持带额外泛型参数的仓库
RepositoryQueryExtensions由 Repository 插件通过模块扩展追加的查询任务。
RepositorySyncCapability某个同步类型的同步能力
RepositorySyncSwitch仓库同步开关:RxDBSync 中与资格判定相关的那一个字段
ResolvedTrustedWrite已解析出入口的声明;takeDeclaredWrite 的返回形态。
RestoreEntityOptions恢复被删除实体的参数
RichTextFormat富文本。
RuleGroupBase查询规则组(基础) 用于生成的类型文件,可以组合出更多复杂的类型
RxDBAdapters已注册适配器的类型注册表
RxDBBackupCompatibility目标侧的兼容性期望,由 adapter 按预先提供的目标配置算出。
RxDBBackupEntryHeader归档内一个条目的头。
RxDBBackupErrorDetails备份错误的结构化细节。
RxDBBackupHeldLock已获得的 Web Lock。
RxDBBackupManifest归档元数据。写在归档最前面,恢复时在写入目标之前完成兼容性校验。
RxDBBackupOptions备份选项。
RxDBBackupQueueOptionsrunRxDBBackupWhenQueued 的选项。
RxDBBackupResult备份成功的结果。
RxDBBackupScope备份范围声明(AC#14)。
RxDBBackupTrailer归档结束标记里的汇总。
RxDBBranchCreationContext新建一条分支时,贡献方写自己那几行所需的上下文
RxDBBranchInitData初始化数据
RxDBBranchRemovalContext移除一条分支时,贡献方清自己那几行所需的上下文
RxDBBranchStaticTypes静态类型
RxDBBranchSwitchContextRxDBSystemContribution.prepareBranchSwitch 拿到的上下文
RxDBBranchSwitchFailureContextRxDBSystemContribution.settleBranchSwitchFailure 拿到的上下文
RxDBBranchSwitchTakeoverContextRxDBSystemContribution.takeOverBranchSwitch 拿到的上下文
RxDBCapabilityClaim一次能力认领:谁(packageSpecifier)在这个库上启用了哪个能力(capability)的哪一版。
RxDBCapabilityVersionKind版本不匹配时报给用户的「哪个号」——插件能力自己的。
RxDBChangeInitData初始化数据
RxDBChangeStaticTypes静态类型
RxDBContextRxDB 环境上下文
RxDBEntityEventMapRxDB 实体事件映射接口
RxDBEntityLocalCreatedEventDataENTITY_LOCAL_CREATE_EVENT 的载荷
RxDBEntityLocalNewEventDataENTITY_LOCAL_NEW_EVENT 的载荷
RxDBEntityLocalRemovedEventDataENTITY_LOCAL_REMOVE_EVENT 的载荷
RxDBEntityLocalUpdatedEventDataENTITY_LOCAL_UPDATE_EVENT 的载荷
RxDBEntityRemoteCreatedEventDataENTITY_REMOTE_CREATE_EVENT 的载荷
RxDBEntityRemoteRemovedEventDataENTITY_REMOTE_REMOVE_EVENT 的载荷;data 是删除之前的整行
RxDBEntityRemoteUpdatedEventDataENTITY_REMOTE_UPDATE_EVENT 的载荷;data 是更新之后的整行
RxDBEventMapRxDB 完整事件映射接口
RxDBMigrationInitData初始化数据
RxDBMigrationStaticTypes静态类型
RxDBMutationsMap一次事务内要落库的全部变更,按「建 / 删 / 改」分好组
RxDBOptionsRxDB 顶层配置
RxDBRepositories已注册门面仓储的类型注册表
RxDBRestoreOptions恢复选项。
RxDBRestoreResult恢复成功的结果。
RxDBSyncInitData初始化数据
RxDBSyncStaticTypes静态类型
RxDBSystemActivationContext既有库引导跑完、连接交还给调用方之前的上下文
RxDBSystemBootstrapContext建表时点可用的上下文
RxDBSystemContribution插件对系统层的贡献
RxDBSystemVersionState从迁移记录里读出来的两个版本号
SchemaManagerSchemaManager 实现。
Sha256Hasher增量 SHA-256 摘要器。
SingleSelectFormat单项选择。载体是 EnumProperty,选项集合由其 enum 决定。
StringArrayProperty字符串组
StringProperty变长字符串属性
SwitchBranchOptionsadapter.switchBranch() 的参数
SwitchBranchPrepareContextSwitchBranchOptions.prepare 拿到的上下文。
SwitchVersionActions切换分支版本需要的操作
SwitchVersionChange-
SyncAdapterOptions同步适配器选项接口 定义数据同步适配器的配置
SyncConflict带发生时刻的冲突记录
SyncConflictReport一次冲突判定的结果,冲突发生处上报用
SyncFailure单个仓库的同步失败记录
SyncProgress同步进度信号
SyncRepositoryOptions同步仓库选项
SyncRepositoryResult同步仓库结果
SyncResultSync 操作结果(pull + push 组合)
SyncState同步状态快照
SyncStateSourcesSyncStateHub 的上游数据源
SyncStats同步统计信息
TransactionExecutor一次事务的作用域句柄。
TransactionOptionstransaction() 的可选项。
TrustedCallsite登记表的一行
TrustedWriteDeclaration一次受信写的自报身份
UpdateClassification更新分类结果
UrlFormatURL。
UUIDPropertyUUID 属性
WorkingTreeCaptureHook捕获运行时接管四个挂载点的转交口
WorkingTreeCaptureMountPoint一条必须挂载工作树捕获的写原语。
WorkingTreeWriteHost一次写调用的宿主:真实适配器本身,或事务内的 executor 门面
WorkingTreeWritePrimitiveSignature一个写原语的签名身份

Type Aliases​

Type AliasDescription
AbstractEntityType抽象实体类型
AdapterFactory适配器工厂:RxDB.adapter() 登记的就是它,而不是已经建好的适配器实例
AdapterRepositoryConstructor适配器仓储的构造器类型(由 RxDBAdapterBase.repository() 登记)
BigIntRulesbigint
BinaryRulesbinary
BooleanRules布尔
ConflictResolution冲突解决结果
DateRules日期
EntityBaseType实体基础类型
EntityData实体数据类型
EntityFieldDescriptor单个字段的描述。用 source 收窄到具体分支(INV-5)。
EntityFieldType-
EntityFieldTypeNameEntityFieldType 的字符串字面量视图。
EntityForeignKeyMetadata归一化之后的实体级外键元数据
EntityInstanceType实体实例类型
EntityMetadata实体元数据(只读版本) 实体元数据的只读深度副本,防止元数据被修改
EntityMetadataResolver按 entity / namespace 查找已注册实体元数据。
EntityPropertyMetadata归一化之后的字段元数据联合类型
EntityPropertyMetadataOptions实体属性元数据联合类型 包含所有可能的属性类型元数据
EntityRelationFieldDescriptor关系字段描述。用顶层 cardinality 收窄到具体分支。
EntityRelationManyToManyMetadata多对多
EntityRelationManyToOneMetadata多对一
EntityRelationMetadata-
EntityRelationMetadataOptions实体关系元数据联合类型 包含所有可能的关系类型(一对一、一对多、多对一、多对多)
EntityRelationOneToManyMetadata一对多
EntityRelationOneToOneMetadata一对一
EntityStaticType-
EntitySyncTarget解析目标:实体类或它的元数据。
EntityToManyRelationFieldDescriptor1:m / m:n 关系:多值,没有可写外键列,语义是「加入 / 移出」。
EntityToOneRelationFieldDescriptor1:1 / m:1 关系:单值,写外键列,语义是「设置 / 清除」。
EntityType实体类型
EntityUpdateData实体更新数据类型 用于表示更新实体时传递的数据结构
EnumRules枚举 枚举类型查询规则 支持:等于、不等于、为空、不为空、in、notIn
EventListener-
EventOrigin事件来源标记 - undefined 或不存在:本地当前 tab 产生的原始事件 - 'cross-tab':从其他 tab 通过 BroadcastChannel 接收的事件
FieldCardinality字段基数。
FieldFormat字段业务语义与默认渲染方式的判别联合。
FieldFormatConfigKeyformat 配置键全集(不含 kind 本身)。
FieldOptions按枚举值索引的展示元数据。键必须是 enum 的子集。
FieldSource字段来源判别式。系统字段与普通属性形状相同,只在这里区分。
FieldValidationRulevalidateFieldValue 可能命中的规则标识。
Fingerprint指纹类型
HistoryScope历史记录作用域配置
HistoryScopeType历史记录作用域类型
IntegerRules整数
InterceptedBulkWrite被拦截的批量写方法。
IQueryContext查询上下文
IRxDBAdapterOptions适配器基础配置
JsonValueJSON 可序列化的值。
KeyValue值对象 存储键值队列
KeyValuePropertyMetadatakeyValue 属性元数据联合类型 keyValue 的嵌套属性不需要 columnName,直接用 name 作为键
KeyValueRules键值对
LocalRxDBAdapter本地适配器的完整形态:接口契约 + 本地基类能力。
MergeChangesNext可重新绑定宿主的未拦截 mergeChanges
MergeStrategy合并策略
MetadataValidationRule注册期元数据校验规则。
NumberArrayRules数字数组
NumberRules数字
OperatorName所有操作符
PluginRxDB 插件
PrimaryAdapterKind写入落到哪一侧适配器
QueryCachePendingWriteIds查询出站队列此刻占着哪些实体 id。
QueryOptions一次查询任务的选项联合
RawWriteContext某个适配器实例当前的 raw 写判定上下文(adapter-contract.md §2)
RefreshMatchRules刷新匹配规则 二维数组表示多组规则的组合,每组规则内的条件是 AND 关系,组与组之间是 OR 关系 例如:[['match_where', 'result_contains'], ['not_match_where']] 表示:(匹配查询条件 AND 结果包含) OR (不匹配查询条件)
RelationBigIntRulesbigint
RelationBooleanRules布尔
RelationDateRules日期
RelationExistsRulesRelation EXISTS 规则 SubRG 类型参数应为关联实体的 RuleGroup 类型
RelationNumberRules数字
RelationResolutionRule关系目标解析规则。
RelationStringRules字符串
RelationUUIDRulesUUID
RelationValueType关系字段的值类型全集:目标实体主键只允许这四种。
RemoteRxDBAdapter远端适配器的完整形态:接口契约 + 远端基类能力。
RepositorySyncDirectionRepository 同步方向
RepositorySyncTypeRepository 同步类型
Rule查询规则
RuleGroup查询规则组(自动计算类型)
RxDBAdapterName适配器名称
RxDBBackupArchiveItemRxDBBackupArchiveReader.next 的产出。
RxDBBackupErrorCode备份 / 恢复的稳定错误分类(US-217 公共契约)。
RxDBBranchOrderByField排序字段
RxDBBranchRuleGroup规则组基类
RxDBBranchSwitchPreconditions切分支时调用方能提出的前置条件
RxDBBranchSwitchTakeover一次接管表态
RxDBChangeEntityMetadataResolver反查对端实体元数据的回调。
RxDBChangeOrderByField排序字段
RxDBChangeRuleGroup规则组基类
RxDBConfig-
RxDBEntityEventRxDB 实体事件联合类型
RxDBEntityIdRxDB 实体主键的公共运行时类型。
RxDBEntityLocalEventDataRxDB 实体本地事件数据联合类型
RxDBEntityRemoteEventDataRxDB 实体远程事件数据联合类型
RxDBEventRxDB 事件联合类型。
RxDBMigrationOrderByField排序字段
RxDBMigrationRuleGroup规则组基类
RxDBPluginDependency插件可声明的依赖,封闭取值。
RxDBRepositoryName门面仓储名称
RxDBScalar标量类型 定义可以直接存储的基本数据类型
RxDBSyncOrderByField排序字段
RxDBSyncOverrideErrorReason覆盖条目非法的原因。
RxDBSyncRuleGroup规则组基类
RxDBSystemVersionKind版本不匹配时报给用户的「哪个号」——核心自己的两个。
StringArrayRules字符串数组
StringRules字符串
SyncDirection同步方向
SyncOptions同步配置联合类型 包含所有可能的同步配置类型
TransactionExecutorFun事务回调:参数是本次事务的 executor。
TransactionExecutorState事务生命周期状态。
TransactionFun事务回调函数。
TrustedWriteIntentTrustedWriteIntent 的值联合
TrustedWritePrimitive受信调用点实际调用的写原语
TrustedWriteScope作用域对象:适配器实例或事务执行器。
UUIDUUID类型 表示标准的UUID字符串格式 格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
UUIDRulesUUID
WorkingTreeCaptureMountPointOrdinal契约 §1 表格里的行号,1–4。
WorkingTreeCaptureMountTargetinstallWorkingTreeCapture 要改写的那个对象所需的最小面。
WriteEntranceWRITE_ENTRANCES 的值联合

Variables​

VariableDescription
ACTIVE_BRANCH_KEY写进 active 分支 activeKey 列的哨兵值。
CAPABILITY_ENABLED_EVENT某个能力刚在另一条连接上被启用(FR-037)。
CONFLICT_DETECTED_EVENT同步过程中检出冲突
CONFLICT_PENDING_EVENT存在等待人工裁决的冲突;在用户给出选择之前,相关实体的同步不会推进
CORE_SYSTEM_ENTITIES核心自带的系统表,每个库都有
ENTITY_BASE_METADATA_OPTIONS实体基类装饰器配置 定义了所有实体共有的基础属性
ENTITY_FIELDS_DTO_VERSION字段描述 DTO 的协议版本。
ENTITY_LOCAL_CREATE_EVENT本地实体已成功插入数据库(type: 'INSERT'),载荷的 patch 是完整实体
ENTITY_LOCAL_NEW_EVENT实体刚被 new 出来,尚未落库(type: 'NEW')
ENTITY_LOCAL_REMOVE_EVENT本地实体已成功删除(type: 'DELETE'),载荷只有 inversePatch——patch 为 null
ENTITY_LOCAL_UPDATE_EVENT本地实体已成功更新(type: 'UPDATE'),载荷同时带 patch 与 inversePatch,只含变化的字段
ENTITY_REMOTE_CREATE_EVENT远端拉取到的实体创建
ENTITY_REMOTE_REMOVE_EVENT远端拉取到的实体删除;载荷是删除前的整行 data,见 ENTITY_REMOTE_CREATE_EVENT
ENTITY_REMOTE_UPDATE_EVENT远端拉取到的实体更新;载荷是更新后的整行 data,见 ENTITY_REMOTE_CREATE_EVENT
ENTITY_STATIC_TYPES-
FIELD_FORMAT_CARRIERS支持的 format kind 与其合法载体 PropertyType 的唯一真相源(AC#12 结构 fixture 共用)。
FIELD_FORMAT_CONFIG_KEYS各 kind 允许出现的配置键(不含 kind 本身)。
FIELD_FORMAT_KINDSformat kind 全集,顺序即声明顺序。
MAIN_BRANCH_ID根分支(也是零 active 时的恢复目标)的分支 id。
MERGE_BRANCH_BEGIN分支合并开始
MERGE_BRANCH_COMMIT分支合并全部完成;与 MERGE_BRANCH_FAILED 是仅有的两个终态
MERGE_BRANCH_FAILED分支合并失败事件类型
REMOTE_CHANGES_PENDING_EVENT远端有变更待拉取
REMOTE_ENTITY_INVALIDATED_EVENT远端某个实体的数据已变,本地针对它的查询缓存不再可信(US-023)。
REPOSITORY_SYNC_BEGIN_EVENT单个仓库的同步开始
REPOSITORY_SYNC_COMPLETE_EVENT单个仓库同步完成;同一轮里其他仓库可能仍在进行
REPOSITORY_SYNC_ERROR_EVENT单个仓库同步失败
RXDB_BACKUP_CHUNK_SIZE单个数据帧的最大载荷(64 KiB)。
RXDB_BACKUP_FORMAT归档格式标识。
RXDB_BACKUP_FORMAT_VERSION当前归档格式版本。读到其他值一律拒绝,不做猜测性兼容。
RXDB_BACKUP_SCOPE冻结的备份范围常量。
RXDB_CAPABILITY_WATERMARK_PREFIX能力认领水位行的名字前缀
RXDB_CHANGE_CODEC_VERSION当前编/解码协议的版本号。
RXDB_CHANGE_CODEC_WATERMARK当前变更编解码水位行的完整名字
RXDB_CHANGE_CODEC_WATERMARK_PREFIX变更编解码版本水位行的名字前缀
RXDB_CHANGE_ENTITY_ID_PREFIX编码后 entityId 的固定前缀,便于反序列化时判断"是不是已被编码"。
RXDB_CHANGE_SCHEMA_VERSION-
RXDB_CHANGE_VALUE_ENVELOPE_KEYpatch 内某个字段是 bigint / binary 编码值时使用的 key。
RXDB_SYSTEM_SCHEMA_VERSION系统表结构版本
RXDB_SYSTEM_SCHEMA_WATERMARK当前系统表结构水位行的完整名字,适配器 migrateSystemSchema() 补记时写入这一条
RXDB_SYSTEM_SCHEMA_WATERMARK_PREFIX系统表结构水位行的名字前缀
SKIP_BRANCH_SWITCH_PREPARE显式表态「这次调用没有分支要校验」的空实现
SWITCH_BRANCH_BEGIN分支切换开始,在切换事务内、动第一行之前派发
SWITCH_BRANCH_COMMIT分支切换已提交
SWITCH_BRANCH_ROLLBACK分支切换回滚,库停在切换前的分支上
SYNC_BEGIN_EVENT一轮同步开始
SYNC_COMPLETE_EVENT一轮同步正常结束
SYNC_DISABLED_REASONRxDBSync.enabled 被关闭时的原因短语
SYNC_ERROR_EVENT一轮同步因异常中断;与 SYNC_COMPLETE_EVENT 互斥,一轮只会收到其中一条
SYSTEM_ENTITIES本进程见过的全部系统表身份
TRANSACTION_BEGIN事务开始
TRANSACTION_COMMIT事务提交;本次事务内的实体事件在它之前已经发过,不要等它再刷 UI
TRANSACTION_ROLLBACK事务回滚
TRUSTED_CALLSITE_REGISTRY与真实代码核对过的 11 行受信调用点(整表核对日期 2026-09-16)
TrustedWriteIntent受信路径声明的写意图
WORKING_TREE_CAPTURE_MOUNT_POINT_METHODS被挂载的写原语名,按契约 §1 的表格顺序。
WORKING_TREE_CAPTURE_MOUNT_POINTS契约 §1 的 4 个挂载点,展平成行。
WRITE_ENTRANCES已登记的写入口身份

Functions​

FunctionDescription
__decorateClass-
applyExternalEntityUpdate把外部事件的增量 patch 合并进缓存实体,且不记成用户的本地修改。
assertClaimedCapabilities未认领能力守卫
assertOptionalNonNegativeSafeInteger校验可选的非负安全整数,不赋予缺省值任何领域语义。
assertRxDBBackupCompatible判定归档能否恢复到目标配置。
assertSingleActiveBranch运行期校验:必须恰好一行 active;不修复任何东西。
assertSupportedRxDBSystemVersions断言库的版本不高于本进程支持的版本,否则拒绝打开。
assertUsableBranchId校验分支 id 可用,不可用即抛。
assertValidSystemContribution校验贡献的形状
branchMaterializationPageFingerprint算一页快照 payload 的指纹——这是分页指纹的公开口径(FR-044)。
buildOfflineWriteRepositoryRules按「离线可写但没有 changelog 端点的仓库」构造 OR 组,形状与 buildPushableRepositoryRules 完全一致。
buildPushableRepositoryRules按「当前配置里有推送资格的仓库」构造 OR 组,同步记录只提供水位线。
calculateOrderBy按 orderBy 给一批结果排序。
canonicalMaterializationJson把一个 JSON 值折成键序无关的字符串——物化协议两端共用的规范形。
capabilityWatermarkName把一次能力认领编码成迁移行名
classifyBackupIoError把流 / 存储抛出的原始异常映射到稳定分类;已分类的原样返回。
compactChanges压缩变更列表为 SwitchVersionActions(专用于 Push 场景)
computeRxDBSchemaFingerprint计算实体结构指纹。
createEntitySyncResolver构造实体同步配置解析器。
createSha256创建增量 SHA-256 摘要器。
declareTrustedWrite声明紧接着这一次写的意图
decodeRxDBChangeEntityIdencodeRxDBChangeEntityId 的反序列化。无前缀视为"未被编码过", 直接返回原值(兼容老 RxDB 数据)。
decodeRxDBChangePatchencodeRxDBChangePatch 的逆运算;语义、列过滤规则完全对称。
decodeRxDBEntityIdentityencodeRxDBEntityIdentity 的反序列化。
describeEntityFields生成一个实体的完整字段描述。
deterministicStringify确定性的 JSON.stringify
diffMetadata比较远程元数据与本地元数据,确定同步动作
encodeRxDBChangeEntityId把 RxDBEntityId 包成带有版本号的字符串。所有 id 一律包信封 —— string / number / bigint 都带前缀、版本号与类型 tag,靠 tag 在反序列化时区分。
encodeRxDBChangePatch把实体的字段变更包(patch)按列类型重新编码,让它在落盘 / 跨网络时仍是合法 JSON。
encodeRxDBEntityIdentity为 AAD(Additional Authenticated Data)和身份键编码实体标识。
Entity实体装饰器 用于将类标记为 RxDB 实体,并处理元数据、代理和生命周期
entityDefaultNow默认值函数里的「现在」。
extractEntityFields-
extractSystemFields-
findCurrentSyncRecord读取某个 repository 在当前分支上的同步记录(只读,不创建)
formatEntityFieldValue-
formatMetadataViolations把跨实体聚合后的违规渲染成单条异常消息。
gateRawWrite判定一次 raw 写,放行时才执行语句
getCurrentBranch取当前分支;没有激活分支时激活(或新建)main。
getEntityColumnName将实体属性名或关系 ID 名转换为数据库列名。
getEntityId获取实体 ID
getEntityMetadata获取实体元数据。
getEntityMutations获取实体变更映射
getEntityStatus获取实体状态。
getEntitySync取实体生效的同步配置。
getEntityType从实体元数据取回实体类。
getFingerprintByEntities多个实体指纹计算
getFingerprintByEntity单个实体指纹计算
getFingerprintPrimitive值类型指纹计算 用于 count 等返回原始值的查询
getLocalSystemRepositories取本地适配器上的系统表仓库。
getOrCreateSyncRecord取出(或首次创建)某个 repository/branch 的同步水位记录
getRemoteSystemRepositories取远端适配器上的系统表仓库。
getRxDBBackupAuthDomain加密认证域:有实体声明加密列时为库名(与 keyring 的 namespace 同源),否则 null。
getRxDBBackupSchemaFingerprint实体结构指纹。
getRxDBChangeEntityIdQueryValues把一组 ID 拆成"用于 SQL IN (...) 列表"的字符串集合。
getRxDBChangeKey构造业务实体的唯一键(用于 deletes/updates/inserts Map)
getRxDBEntityIdentityKey计算一个稳定可索引的"身份键"字符串:rxid1: + 编码字节的 hex。
getRxDBSystemVersionState从迁移名集合里解出两个版本号。
getSyncableRepositories获取需要同步的 repository 列表
getSyncCapability读取某个同步类型的能力
getSyncConfig获取实体的有效同步配置(支持全局配置回退)
getSyncType从 EntityMetadata 获取同步类型
getSystemEntityIdentities全部系统表的身份(namespace:name,形如 rxdb:RxDBBranch)
getSystemEntityNames全部系统表的实体名(@Entity 上的 name,不带 namespace)
groupBySyncType按同步类型分组 repositories
hasRxDBBackupWebLocks当前环境是否提供 Web Locks。
installWorkingTreeCapture在一个本地适配器实例上装好四个捕获挂载点
isAdapterShutdownError判断错误是否由 adapter 关闭/断连引起。
isCrossTabEvent判定事件是否来自其他 tab。
isCurrentRxDBSystemVersion判断库是否已经停在当前水位,两个号都相等才算。
isEntityInternalName判断字段名是否是内部保留字段 包括基类字段、私有字段和以下划线开头的字段
isEntityMatchWhere判断实体是否匹配规则组
isEntitySyncResolver判定入参是不是解析器(而不是一份数据库级 SyncOptions)。
isNetworkError判断一个错误是否为网络故障(连不上远端),而非远端给出的业务结果。
isNoSync检查 repository 是否完全不同步
isRemoteNewer判定远端记录是否比本地新。
isRepositorySyncEnabled判定仓库的同步开关是否处于启用状态
isRuleGroup判断是否是 RuleGroup
isRxDBBackupError判断一个值是否为指定 code 的 RxDBBackupError。
isRxDBEntity检查是否为 RxDB 实体。
isStaleEntityEvent判断一条实体变更事件相对实体缓存是否陈旧。
isStaleEntityRemoveEvent判断一条 DELETE 事件相对实体缓存是否陈旧。
isSystemEntity判断一个实体类是不是 RxDB 注入的系统表
isUniqueConstraintViolation判定错误是否为唯一/主键约束冲突。
isWorkingTreeCaptureMountPoint判定一个写原语签名是否为捕获挂载点
needsOfflineWrite检查 repository 在远端不可达时是否接受本地写(并在恢复连接后重放)
needsPull检查 repository 是否需要 pull
needsPush检查 repository 是否需要 push
normalizeCreateEntity规范化创建数据(过滤未赋值字段)。
normalizeUpdateEntity规范化更新数据并过滤 readonly 字段。
parseCapabilityWatermark从迁移行名里读回能力认领
parseEntityFieldsDescriptor解析并校验来自网络或存储的字段描述。
parseEntityFieldValue按字段类型把原始值规范化成实体侧的运行时表示。
parseEntityRecordValues按实体元数据把一整条原始记录解码成实体侧的运行时值。
parseRxDBBackupManifest校验并规范化归档 manifest。
parseRxDBChangeKey解析实体键
parseRxDBEntityIdentityKeygetRxDBEntityIdentityKey 的逆运算;不带前缀时视为"非身份键", 原样返回 —— 这样 parseRxDBEntityIdentityKey(decodeRxDBEntityIdentityKey(x)) === x 对任意字符串 x 都不抛错,调用方可以无条件来回转。
parseUpdatedAt把 updatedAt 解析成毫秒时间点。
prepareIncrementalUpdate为一批 UPDATE 事件准备增量合并上下文。
queryNeedRefreshCreate-
queryNeedRefreshRemove-
queryNeedRefreshUpdate-
quoteSqlIdentifier把标识符(表名、列名)包成双引号形式。
registerSystemEntities登记插件贡献的系统表
repositoryKey把仓库标识渲染成 namespace:entity(依赖图与错误消息共用的键格式)
resolve_current_branch解析「当前分支」:取激活分支,没有则激活 main,main 也不存在则建一个。
resolvePullIneligibility判定某个 repository 当前能否拉取(syncType + RxDBSync.enabled 两道)
resolvePushIneligibility判定某个 repository 当前能否推送(syncType + RxDBSync.enabled 两道)
resolveSingleActiveBranch只给首次启用迁移用:读出唯一的 active 分支,零 active 时恢复到 main。
runRxDBBackupWhenQueued在 adapter 的串行队列里执行备份任务,排队本身有时限、可取消。
sha256Hex算一段字节的 SHA-256。
sqlBooleanLiteral把布尔值拼成 SQL 布尔字面量。
sqlIntegerLiteral把整数拼成 SQL 数值字面量。
sqlStringLiteral把字符串拼成 SQL 字符串字面量。
sqlTimestampLiteral把时刻拼成 SQL 字符串字面量(ISO 8601,UTC)。
syncTypeIneligibility读取某个同步类型在指定方向上不具备能力的原因
takeDeclaredWrite取出并清除这个作用域上的声明
toEntitySyncResolver把历史签名里的 databaseSync 参数归一成解析器。
transitionMetadata将元数据选项(metadataOptions)转换为实体元数据(metadata)
trustedCallsiteKey登记键:文件 + 符号 + 意图
tryAcquireRxDBBackupLock立即尝试获取锁,拿不到就返回 null,不排队。
tryGetEntityMetadata探测实体元数据:查不到返回 undefined,不抛错。
tryGetEntityStatus探测实体状态:查不到返回 undefined,不抛错。
uninstallWorkingTreeCapture卸载捕获挂载点,把五个写原语恢复到安装前的样子
uuid-
validateEntityFieldValue按 EntityFieldConfig 校验字段值。
validateEntityMetadata校验单个实体的元数据声明,返回按 namespace/entity/field/rule 排序的全部违规。
validateEntityMetadataSet跨实体聚合校验,并把全部违规排序后一次性返回。
validateFieldValue按 EntityFieldDescriptor 校验单个字段值。