客户端生成
基于实体模型自动生成类型安全的客户端代码(实体类型、查询/变更 API、关系字段等),减少重复劳动并确保前后端一致。
能力概览
- 读取
@aiao/rxdb装饰器定义(@Entity/@TreeEntity/@GraphEntity) - 生成:
- 实体类型与静态类型映射
Repository查询方法签名(get/find/findAll/findByCursor/...)- 关系字段的规则类型(支持点语法关系查询)
- 可配置关系查询深度(默认 3 层)
安装
- npm
- Yarn
- pnpm
- Bun
npm i -D @aiao/rxdb-client-generator
yarn add --dev @aiao/rxdb-client-generator
pnpm add -D @aiao/rxdb-client-generator
bun add --dev @aiao/rxdb-client-generator
使用方式一:命令行
- 新建配置文件
rxdb.config.ts
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const __dirname = path.dirname(fileURLToPath(import.meta.url));
export default [
{
entities: [path.join(__dirname, 'entities', '*.ts')], // 支持 glob
outDir: path.join(__dirname, 'dist', 'entities'),
relationQueryDeep: 3
}
];
- 运行生成
# node / bun / pnpm script 均可
node node_modules/@aiao/rxdb-client-generator/dist/cli.js ./rxdb.config.ts
# 或直接使用包内 CLI(已暴露 shebang)
npx @aiao/rxdb-client-generator ./rxdb.config.ts
参考示例:packages/rxdb-test/rxdb.config.ts。
使用方式二:Vite 插件
在构建结束后自动生成:
// vite.config.ts
import { defineConfig } from 'vite';
import { rxDBViteClientGenerator } from '@aiao/rxdb-client-generator/vite';
export default defineConfig({
plugins: [
rxDBViteClientGenerator([
{
entities: ['src/entities/*.ts'],
outDir: 'src/generated/entities',
relationQueryDeep: 3
}
])
]
});
生成物目录结构(示例)
dist/
entities/
index.ts # 聚合导出
Todo.ts # 实体类型、查询类型、关系规则类型
Menu.ts
集成使用
// 1) 引入生成的实体类型
import { Todo } from './dist/entities';
// 2) 注册到 RxDB
const rxdb = new RxDB({
dbName: 'demo',
entities: [Todo],
sync: { type: SyncType.None, local: { adapter: 'sqlite' } }
});
// 3) 直接使用静态方法进行类型安全查询
Todo.find({
where: { combinator: 'and', rules: [{ field: 'completed', operator: '=', value: false }] },
orderBy: [{ field: 'createdAt', sort: 'desc' }],
limit: 20
}).subscribe(items => console.log(items));
参数说明
entities: 需要扫描的实体文件(支持 glob)outDir: 生成代码输出目录relationQueryDeep: 关系查询类型展开深度,最小为 1(默认 3)
注意事项
- 仅基于装饰器与类型信息生成声明与类型辅助,不包含运行时代码
- 请确保实体能被正常 import(ESM 环境下的路径与构建需可用)
- 生成物建议纳入版本控制,或在构建阶段生成
参考
- 包源码:
packages/rxdb-client-generator - 示例配置:
packages/rxdb-test/rxdb.config.ts