import { Callback } from "../common/callback"; type URL = { url: string; method: string; }; export interface DataSource { delete(items: T[]): Promise; select(args?: DataSourceSelectArguments): Promise>; save: (items: T[]) => Promise[]>; /** save 成功后触发,携带被保存的项 */ saved: Callback<{ sender: DataSource; items: T[]; }>; /** select 成功后触发,携带结果与参数 */ selected: Callback<{ sender: DataSource; selectResult: DataSourceSelectResult; selectArguments: DataSourceSelectArguments; }>; } export type DataSourceSelectArguments = { startRowIndex?: number; maximumRows?: number; filter?: string; relations?: string[]; fields?: string[]; sortExpression?: string[] | string; /** 把获取到的数据构建成树形结构 */ buildTree?: boolean; }; export interface DataSourceSelectResult { totalRowCount: number; dataItems: Array; } export type DataSourceParams = { database?: string; entityType?: string; fields?: string[]; relations?: string[]; filter?: string; buildTree?: boolean; maximumRows?: number; selectUrl?: URL; deleteUrl?: URL; saveUrl?: URL; }; /** * 数据源提供器:负责创建 DataSource 实例,并对外枚举数据库/实体、提供实体元数据。 * 通过 configProviders.dataSource(见 providers/index.tsx)注入具体实现。 */ export interface DataSourceProvider { /** 获取指定数据库下的实体(数据源)名称列表;不传 database 时取默认数据库 */ getNames(database?: string): Promise; /** 获取所有可用数据库名称列表 */ getDatabaseNames: () => Promise; /** 依据参数(实体类型/数据库/字段/筛选条件等)创建 DataSource 实例,用于后续查询、保存、删除 */ createDataSource(params: DataSourceParams): DataSource; /** 获取指定实体的元数据(列定义、关联关系等);database 缺省时取默认数据库 */ getEntityMetadata(name: string, database?: string): Promise; /** 获取指定数据库下全部实体的元数据;不传 database 时取默认数据库 */ getEntityMetadatas(database?: string): Promise; } export type EntityMetadata = { name: string; columns: ColumnMetadata[]; relations: RelationMetadata[]; }; export type ColumnMetadata = { propertyName: string; type: any; isPrimary: boolean; isNullable: boolean; isGenerated: boolean; /** 是否为 json 列(maishu-alinq 中 dbType 为 'json') */ isJson?: boolean; /** 数据库列名(maishu-alinq 的 mappedName) */ dbName?: string; /** 列类型声明(maishu-alinq 的 dbType,如 'varchar'/'int'/'datetime'/'json') */ dbType?: string; /** 是否创建时间列(等价于 TypeORM @CreateDateColumn) */ isCreateDate?: boolean; /** 是否更新时间列(等价于 TypeORM @UpdateDateColumn) */ isUpdateDate?: boolean; }; export type RelationMetadata = { propertyName: string; type: any; /** 目标实体名(maishu-alinq 关联 otherType) */ otherType?: string; }; export declare class ArrayDataSource implements DataSource { private data; constructor(data: T[]); saved: Callback<{ sender: DataSource; items: T[]; }>; selected: Callback<{ sender: DataSource; selectResult: DataSourceSelectResult; selectArguments: DataSourceSelectArguments; }>; primaryKeys: string[]; canDelete: boolean; canInsert: boolean; canUpdate: boolean; private getItemIndex; insert(item: T): Promise; delete(items: T[], args?: any): Promise; update(item: T, args?: any): Promise; save(items: T[]): Promise; select(args?: DataSourceSelectArguments): Promise>; } export {};