跳到主要内容

SupabaseTreeRepository<T>

Defined in: packages/rxdb-adapter-supabase/src/SupabaseTreeRepository.ts:36

Supabase Tree Repository(Supabase 树形仓库) 提供树形结构的查询操作

Remarks​

不使用递归 CTE,也不依赖 get_descendants / get_ancestors 之类的数据库函数 —— 实现是按层发 select(每层一次 in('parentId', ...))逐级展开。 因此遍历深度 N 的子树需要 N 次往返,深树上要留意延迟; 祖先链同理是自底向上逐跳查询。

此处此前的注释写的是「使用 PostgreSQL 的递归 CTE」,与实现不符(SUPA-023)。

Extends​

Type Parameters​

Type Parameter
T extends EntityType

Implements​

Constructors​

Constructor​

new SupabaseTreeRepository<T>(adapter, EntityType): SupabaseTreeRepository<T>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseTreeRepository.ts:37

Parameters​

ParameterType
adapterRxDBAdapterSupabase
EntityTypeT

Returns​

SupabaseTreeRepository<T>

Overrides​

SupabaseRepository.constructor

Properties​

adapter​

protected readonly adapter: RxDBAdapterSupabase;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseRepository.ts:61

Inherited from​

SupabaseRepository.adapter


EntityType​

readonly EntityType: T;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:20

Inherited from​

SupabaseRepository.EntityType


metadata​

protected readonly metadata: EntityMetadata;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseRepository.ts:58

Inherited from​

SupabaseRepository.metadata


rxdb​

protected readonly rxdb: RxDB;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:19

Inherited from​

SupabaseRepository.rxdb


_STATIC_METHODS​

protected static _STATIC_METHODS: string[];

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:29

子类声明的"静态方法名"清单,用于把 User.findOne(...) 这样的方法 注入到实体类上(EntityManager.init 时挂)。

Remarks​

用类字段 static 而非构造器里赋值 —— 字段初始化在 extends 链上是自底向上 合并的,所以子类定义的 _STATIC_METHODS 不会丢;运行时反射取的是当前类的字段。

Inherited from​

SupabaseRepository._STATIC_METHODS

Accessors​

staticMethods​

Get Signature​

get static staticMethods(): string[];

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:37

当前类(含继承链上各层)声明的全部静态方法名

Remarks​

没有沿原型链累加:每个子类自己写一份 _STATIC_METHODS,避免运行时 反射出祖先的 get / findOne 这类名字后,再被后代意外覆盖一次。

Returns​

string[]

Inherited from​

SupabaseRepository.staticMethods

Methods​

count()​

count(options): Promise<number>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseRepository.ts:143

统计满足条件的实体数量。

使用 PostgREST 的 count=exact + head=true,仅返回计数不下载行数据。 暂不支持 groupBy。

Parameters​

ParameterTypeDescription
optionsEntityStaticType<T, "countOptions">查询条件(where / groupBy)

Returns​

Promise<number>

实体总数(无匹配时返回 0)

Throws​

传入 groupBy(暂未实现)

Throws​

NetworkOfflineError 连不上远端(判离线用 core 的 isNetworkError,不要按 SupabaseDataError 捕获)

Throws​

远端拒绝(RLS / 约束 / 语法等)

Implementation of​

ITreeRepository.count

Inherited from​

SupabaseRepository.count


countAncestors()​

countAncestors(options): Promise<number>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseTreeRepository.ts:89

查询祖先节点数量

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<number>

Remarks​

指定 entityId 时:不包含当前节点,只统计祖先数量

Implementation of​

ITreeRepository.countAncestors


countDescendants()​

countDescendants(options): Promise<number>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseTreeRepository.ts:59

查询子孙节点数量

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<number>

Remarks​

  • 指定 entityId 时:不包含当前节点,只统计后代数量
  • 不指定 entityId 时:统计所有根节点及其后代的总数

Implementation of​

ITreeRepository.countDescendants


create()​

create(entity): Promise<InstanceType<T>>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseRepository.ts:168

创建实体并落库。

若 rxdb.context.userId 存在,会自动注入 createdBy / updatedBy 审计字段。

Parameters​

ParameterTypeDescription
entityInstanceType<T>待创建的实体(必须包含主键 id)

Returns​

Promise<InstanceType<T>>

创建后的实体(含数据库回填字段如 createdAt,已通过 transform_row_to_entity 还原为类型实例)

Throws​

NetworkOfflineError 连不上远端(判离线用 core 的 isNetworkError,不要按 SupabaseDataError 捕获)

Throws​

远端拒绝插入(主键冲突 / RLS / 约束等)

Implementation of​

ITreeRepository.create

Inherited from​

SupabaseRepository.create


createEntityRef()​

createEntityRef(data): EntityInstanceType<T>;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:50

创建(或复用)一个实体引用

Parameters​

ParameterTypeDescription
dataEntityUpdateData<T>字段初始值;其中 id 缺省时会自动生成

Returns​

EntityInstanceType<T>

已挂到 EntityManager 缓存里的实体实例

Remarks​

不管入参 id 是否已存在于缓存,都会优先返回缓存里的实例(覆盖式刷新); 走 rxdb.entityManager.createEntityRef 是为了复用同一份引用语义,避免 不同调用栈里拿到的是两个状态不同步的克隆。

Inherited from​

SupabaseRepository.createEntityRef


find()​

find(options): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseRepository.ts:79

查询多个实体。

自动按 1000 行分页拉取直到 limit 满足或数据耗尽,避免单次请求超过 PostgREST 的默认上限。 当 where 含跨表条件时会附加 !inner 关系 SELECT,确保关联过滤生效。

Parameters​

ParameterTypeDescription
optionsEntityStaticType<T, "findOptions">查询条件(where / orderBy / limit / offset)

Returns​

Promise<InstanceType<T>[]>

满足条件的实体数组(已通过 transform_row_to_entity 还原为类型实例)

Throws​

NetworkOfflineError 连不上远端(判离线用 core 的 isNetworkError,不要按 SupabaseDataError 捕获)

Throws​

远端拒绝(RLS / 约束 / 语法等)

Implementation of​

ITreeRepository.find

Inherited from​

SupabaseRepository.find


findAncestors()​

findAncestors(options): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseTreeRepository.ts:79

查询祖先节点

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<InstanceType<T>[]>

Remarks​

指定 entityId 时:包含当前节点 + 祖先节点

Implementation of​

ITreeRepository.findAncestors


findDescendants()​

findDescendants(options): Promise<InstanceType<T>[]>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseTreeRepository.ts:48

查询子孙节点

Parameters​

ParameterType
optionsFindTreeOptions<T>

Returns​

Promise<InstanceType<T>[]>

Remarks​

  • 指定 entityId 时:包含当前节点 + 子孙节点
  • 不指定 entityId 时:返回所有根节点及其子孙

Implementation of​

ITreeRepository.findDescendants


getEntityRef()​

getEntityRef(id):
| EntityInstanceType<T>
| undefined;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:57

按 ID 在当前进程的实体缓存中查找实体

Parameters​

ParameterTypeDescription
idEntityStaticType<T, "idType">实体主键

Returns​

| EntityInstanceType<T> | undefined

缓存命中则返回实例,未命中返回 undefined(不触发数据库查询)

Inherited from​

SupabaseRepository.getEntityRef


hasEntityRef()​

hasEntityRef(id): boolean;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:68

判定当前进程的实体缓存里是否有指定 ID

Parameters​

ParameterTypeDescription
idEntityStaticType<T, "idType">实体主键

Returns​

boolean

缓存命中返回 true,否则 false

Remarks​

等价于 getEntityRef(id) !== undefined,单独提供是为了让"批量预热"和 "差异同步"等热点路径省掉一次引用创建 / 取状态的开销。

Inherited from​

SupabaseRepository.hasEntityRef


remove()​

remove(entity): Promise<InstanceType<T>>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseRepository.ts:222

按 id 硬删除实体(无软删 / tombstone)。

返回原始 entity 引用方便链式处理;如需服务端回填字段请改用 find/update。

Parameters​

ParameterTypeDescription
entityInstanceType<T>目标实体(仅取 id 用于定位行)

Returns​

Promise<InstanceType<T>>

传入的 entity(删除成功后原样返回)

Throws​

NetworkOfflineError 连不上远端(判离线用 core 的 isNetworkError,不要按 SupabaseDataError 捕获)

Throws​

RLS 拒绝,或删除的行与目标 id 不符

Implementation of​

ITreeRepository.remove

Inherited from​

SupabaseRepository.remove


update()​

update(entity, patch): Promise<InstanceType<T>>;

Defined in: packages/rxdb-adapter-supabase/src/SupabaseRepository.ts:196

按 id 部分更新实体。

若 rxdb.context.userId 存在,会自动注入 updatedBy 审计字段。 服务端的触发器/默认值会回填到返回结果。

用户 patch 先由 normalizeUpdateEntity 过滤 readonly 字段,系统审计字段随后单独注入。

Parameters​

ParameterTypeDescription
entityInstanceType<T>目标实体(仅取 id 用于定位行)
patchPartial<InstanceType<T>>增量字段(不含 id)

Returns​

Promise<InstanceType<T>>

更新后的实体(已通过 transform_row_to_entity 还原为类型实例)

Throws​

NetworkOfflineError 连不上远端(判离线用 core 的 isNetworkError,不要按 SupabaseDataError 捕获)

Throws​

行不存在 / RLS 拒绝

Implementation of​

ITreeRepository.update

Inherited from​

SupabaseRepository.update


updateEntity()​

updateEntity(entity, update): void;

Defined in: packages/rxdb/dist/repository/RepositoryBase.d.ts:80

用 update 覆盖实体字段

Parameters​

ParameterTypeDescription
entityInstanceType<T>目标实体
updateInstanceType<T>待写入的字段;主键 id 也会被赋值(用于 hydrate 场景)

Returns​

void

Remarks​

走 EntityStatus.applyExternal,保证 dirty tracking 与 patch 生成走的是同一条路径, 且实体有未保存编辑时逐字段避让而不是整行覆盖 —— 活查询整批回填会命中已被用户改过的实体, 无条件 replace 会静默吃掉那些编辑。

Inherited from​

SupabaseRepository.updateEntity