跳到主要内容

IRepositoryGenerator

Defined in: generators/RepositoryGenerator.interface.ts:125

Repository 生成器接口

用于为不同类型的 Repository 生成特定的属性、类型定义和静态方法签名 遵循开闭原则:对扩展开放,对修改封闭

Remarks​

生成器采用两阶段生成:

  1. generateProperties(): 生成 Repository 特有的计算属性、缓存属性等(可选)
  2. generateMethods(): 生成 Repository 特有的查询方法(必需)

基类 RepositoryMethodsGenerator 提供了 generateProperties() 钩子, 子类可选择性覆盖此方法。

Example​

// 实现自定义 GeoRepository 生成器
export class GeoRepositoryGenerator extends RepositoryMethodsGenerator {
readonly name = 'GeoRepository';

// 【可选】生成 Geo 特有属性
protected generateProperties(context: GeneratorContext): void {
context.classProperties.push({
name: 'spatialIndex',
type: 'SpatialIndex',
isReadonly: true,
docs: ['空间索引实例,用于地理位置查询']
});
}

// 【必需】生成 Geo 特有方法
protected generateMethods(context: GeneratorContext): void {
this.addStaticMethod(context, {
method: 'findNearby',
options: 'FindNearbyOptions<typeof Entity>',
returnType: 'Entity[]',
metHodDoc: '查询附近的实体'
});
}
}

// 注册到生成器
const generator = new RxDBClientGenerator();
generator.registerRepositoryGenerator(new GeoRepositoryGenerator());

Properties​

abstractEntityMetadata?​

readonly optional abstractEntityMetadata?: ReadonlyMap<string, EntityMetadataOptions[]>;

Defined in: generators/RepositoryGenerator.interface.ts:149

本生成器负责的抽象实体基类元数据,键为基类名,值按「自身 → 祖先」顺序排列。

Remarks​

抽象基类的装饰器实参通常是一个常量标识符(@Entity(GRAPH_ENTITY_BASE_OPTIONS)), CLI 的静态求值取不到它的值;而基类元数据又必须在分析实体源码时就位,否则 extends GraphEntityBase 的实体直接报「无法静态求值」。

由生成器随身携带这份数据后,分析器按 entityBaseModuleSpecifier 指向的包名 加基类名回填——生成器包因此不必为每个插件的基类反向依赖该插件。 只声明了本字段而没有 entityBaseModuleSpecifier 的生成器不会被分析器采纳: 少了包名就只能按类名匹配,用户自己写的同名类会被顶替。


entityBaseModuleSpecifier?​

readonly optional entityBaseModuleSpecifier?: string;

Defined in: generators/RepositoryGenerator.interface.ts:134

实体运行时基类的来源模块;未设置时使用 @aiao/rxdb。


name​

readonly name: string;

Defined in: generators/RepositoryGenerator.interface.ts:131

Generator 名称 必须与 EntityMetadata.repository 字段匹配

Example​

'Repository', 'TreeRepository', 'GraphRepository', 'GeoRepository'

Methods​

declareSymbols()?​

optional declareSymbols(metadata): RepositoryGeneratorSymbols;

Defined in: generators/RepositoryGenerator.interface.ts:162

自报本生成器将写入的符号,供生成前的冲突预检与实体声明使用。

Parameters​

ParameterTypeDescription
metadataEntityMetadata当前实体的元数据

Returns​

RepositoryGeneratorSymbols

本生成器为该实体写入的符号

Remarks​

预检必须在建 ts-morph Project 之前跑完,那时还没有任何产物文本可供扫描, 只能由生成器自己申报。不实现本方法的生成器不占任何名字——它写出的符号因此 不参与预检,冲突要等到 generate 落盘阶段的成员校验才暴露。


generate()​

generate(context): void;

Defined in: generators/RepositoryGenerator.interface.ts:168

生成 Repository 特有的属性和方法

Parameters​

ParameterTypeDescription
contextGeneratorContext生成上下文

Returns​

void