@142vip/data-source
Version:
通用型数据源,支持多种数据库、API、CSV等形式的数据源管理
404 lines (384 loc) • 9.83 kB
TypeScript
import { AxiosRequestConfig } from 'axios';
import { WithId, Document } from 'mongodb';
/**
* 数据源请求失败时想赢结构
*/
interface DataSourceResponseError {
message?: string;
}
/**
* 数据源解析返回
*/
interface DataSourceParseResponse<T = unknown> extends DataSourceResponseError {
success: boolean;
data?: T;
}
/**
* 表列表
*/
interface DataSourceTable {
name: string;
schema: string;
}
/**
* 表的列信息
*/
interface DataSourceColumn {
table: string;
name: string;
schema: string;
type: string;
comment?: string;
}
/**
* 表的列描述信息
*/
interface ColumnComment {
name: string;
comment: string;
}
/**
* API Query 配置
*/
interface ApiQueryConfig {
path: string;
params: string;
body: string;
headers: string;
}
/**
* SQL连接基础配置
*/
interface DataSourceConnectionOptions {
host: string;
port: number;
username: string;
password: string;
querySql: string;
}
/**
* 数据源连接器
*/
interface DataSourceConnector<T> {
/**
* 获取连接数据
*/
getConnectionData: (params: T) => Promise<DataSourceParseResponse>;
}
interface AliGatewayAPIAuth {
appKey: string;
appSecret: string;
}
interface AliGatewayApiOptions extends AliGatewayAPIAuth {
method: 'post' | 'get' | 'put' | 'delete';
url: string;
bodyParams?: Record<string, unknown>;
headerParams?: Record<string, unknown>;
}
/**
* 阿里云网关API
* 参考:https://www.npmjs.com/package/aliyun-api-gateway
*/
declare class VipAliGatewayApi implements DataSourceConnector<AliGatewayApiOptions> {
/**
* 获取连接数据
*/
getConnectionData(params: AliGatewayApiOptions): Promise<DataSourceParseResponse>;
}
type DTableRecords = unknown[];
/**
* 表记录,分页后的格式
*/
interface DTableAPIData {
page?: number;
size?: number;
total?: number;
records?: any;
}
interface DTableApiOptions {
apiKey: string;
/**
* 表ID
*/
tableId: string;
/**
* 视图ID
*/
viewId: string;
/**
* 单次请求最大数量,最大1000,因为接口分页1000
*/
maxRecords?: number;
}
/**
* DTable API
*/
declare class VipDTableApi implements DataSourceConnector<DTableApiOptions> {
private vipHttpApi;
/**
* 获取连接数据
*/
getConnectionData(options: DTableApiOptions): Promise<DataSourceParseResponse<DTableRecords>>;
/**
* 并发获取所有记录,提高获取速度
* @param options
*/
getConnectionDataByConcurrency(options: DTableApiOptions): Promise<DataSourceParseResponse<DTableRecords>>;
/**
* 获取分页表总数量
* @private
*/
getPaginationTotal(options: DTableApiOptions): Promise<number>;
/**
* 循环获取所有记录,同步获取
*/
private getTableAllRecords;
/**
* 并发获取所有记录,提高获取速度
*/
private getTableAllRecordsByConcurrency;
/**
* 分页最大数量
* @private
*/
private getMaxPageSize;
/**
* 获取请求配置
* @private
*/
private getApiConfig;
}
/**
* api 认证
*/
interface DTStackAPIAuth {
apiId: number;
appKey: number;
appSecret: string;
}
interface DTStackAPIOptions extends DTStackAPIAuth {
url: string;
method: 'GET' | 'POST';
pathParams: string;
headerParams: Record<string, unknown>;
bodyParams: Record<string, unknown>;
queryParams: Record<string, unknown>;
}
/**
* 数栈API
*/
declare class VipDtStackApi implements DataSourceConnector<DTStackAPIOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: DTStackAPIOptions): Promise<DataSourceParseResponse>;
/**
* 获取数栈请求时配置
* @param apiParams
* @private
*/
private getConfig;
/**
* 字符串进行MD5加密
* - 数栈请求数据,加密获取签名
*/
private getSignature;
}
interface HttpApiOptions extends AxiosRequestConfig {
}
/**
* 发送Http,请求API
* - 标准的axios请求
*/
declare class VipHttpApi implements DataSourceConnector<HttpApiOptions> {
/**
* 获取连接数据
*/
getConnectionData<T>(options: HttpApiOptions): Promise<DataSourceParseResponse<T>>;
}
interface ClickHouseOptions extends DataSourceConnectionOptions {
database: string;
}
/**
* ClickHouse数据库
*/
declare class VipClickhouse implements DataSourceConnector<ClickHouseOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: ClickHouseOptions): Promise<DataSourceParseResponse>;
}
interface DamengOptions extends DataSourceConnectionOptions {
}
/**
* 达梦数据库
*/
declare class VipDameng implements DataSourceConnector<DamengOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: DamengOptions): Promise<DataSourceParseResponse>;
}
interface IbmDBOptions extends DataSourceConnectionOptions {
database: string;
}
/**
* DB2 数据源
*/
declare class VipIbmDB implements DataSourceConnector<IbmDBOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: IbmDBOptions): Promise<DataSourceParseResponse>;
/**
* 获取链接URL
* @param options
* @private
*/
private getConnectURL;
}
interface KingBaseOptions extends DataSourceConnectionOptions {
database: string;
}
/**
* 金仓数据源
*/
declare class VipKingBase implements DataSourceConnector<KingBaseOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: KingBaseOptions): Promise<DataSourceParseResponse>;
}
interface MongoDBOptions extends Omit<DataSourceConnectionOptions, 'querySql'> {
database: string;
table: string;
findFilter?: Record<string, any>;
findOptions?: Record<string, any>;
}
/**
* MongoDB数据源
*/
declare class VipMongo implements DataSourceConnector<MongoDBOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: MongoDBOptions): Promise<DataSourceParseResponse<WithId<Document>[]>>;
/**
* 查询表中的数据
* @private
*/
private findTableData;
/**
* 建立连接,获取MongoDB客户端
* @private
*/
private getMongoClient;
}
interface MysqlOptions extends DataSourceConnectionOptions {
database: string;
}
/**
* MySQL 数据源
*/
declare class VipMysql implements DataSourceConnector<MysqlOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: MysqlOptions): Promise<DataSourceParseResponse>;
}
interface OracleOptions extends DataSourceConnectionOptions {
sid?: string;
serviceName?: string;
}
/**
* Oracle 数据源
*/
declare class VipOracle implements DataSourceConnector<OracleOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: OracleOptions): Promise<DataSourceParseResponse>;
}
interface PostgreSqlOptions extends DataSourceConnectionOptions {
database: string;
}
/**
* PostgreSQL 数据源
*/
declare class VipPostgreSql implements DataSourceConnector<PostgreSqlOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: PostgreSqlOptions): Promise<DataSourceParseResponse>;
/**
* 获取连接地址
* @private
*/
private getConnectURL;
}
interface SqlServerOptions extends DataSourceConnectionOptions {
database: string;
}
/**
* SQL Server 数据源
*/
declare class VipSqlServer implements DataSourceConnector<SqlServerOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: SqlServerOptions): Promise<DataSourceParseResponse>;
}
interface CSVOptions {
file: Buffer;
encode: string;
}
declare class VipCsv implements DataSourceConnector<CSVOptions> {
/**
* 获取连接数据
*/
getConnectionData(options: CSVOptions): Promise<DataSourceParseResponse>;
/**
* 获取字符串编码
*/
private getCharset;
}
/**
* 数据源管理器
*/
interface DataSourceManager {
/**
* 解析数据
*/
parseData: () => Promise<DataSourceParseResponse>;
/**
* 测试连接
*/
testConnect: () => Promise<DataSourceParseResponse>;
/**
* 获取表名列表
*/
getDataBaseNames: () => Promise<DataSourceParseResponse<string[]>>;
/**
* 获取表名列表
*/
getTableNames: () => Promise<DataSourceParseResponse<DataSourceTable[]>>;
/**
* 获取表字段列表
*/
getTableColumns: (tableName: string, schema?: string) => Promise<DataSourceParseResponse<DataSourceColumn[]>>;
}
/**
* 正则校验url
*/
declare function testURL(url: string): boolean;
/**
* 检查密码是否为空
*/
declare function checkPasswordIsNil(password?: string | null): {
password: string | null;
};
/**
* 数据源处理错误
*/
declare function handlerDataSourceConnectError<T>(dataSourceName: string, error: any): DataSourceParseResponse<T>;
export { type AliGatewayApiOptions, type ApiQueryConfig, type CSVOptions, type ClickHouseOptions, type ColumnComment, type DTStackAPIOptions, type DTableAPIData, type DTableApiOptions, type DamengOptions, type DataSourceColumn, type DataSourceConnectionOptions, type DataSourceManager, type DataSourceParseResponse, type DataSourceResponseError, type DataSourceTable, type HttpApiOptions, type IbmDBOptions, type KingBaseOptions, type MongoDBOptions, type MysqlOptions, type OracleOptions, type PostgreSqlOptions, type SqlServerOptions, VipAliGatewayApi, VipClickhouse, VipCsv, VipDTableApi, VipDameng, VipDtStackApi, VipHttpApi, VipIbmDB, VipKingBase, VipMongo, VipMysql, VipOracle, VipPostgreSql, VipSqlServer, checkPasswordIsNil, handlerDataSourceConnectError, testURL };