@redhare/lowcode-datasource-types
Version:
80 lines (66 loc) • 2.03 kB
text/typescript
import { RequestHandlersMap } from './data-source-handlers';
import {
IDataSourceRuntimeContext,
RuntimeDataSource,
} from './data-source-runtime';
export type DataSourceOptions<TParams = Record<string, unknown>> = {
[key: string]: unknown;
uri?: string;
params?: TParams;
method?: string;
isCors?: boolean;
timeout?: number;
headers?: Record<string, string>;
isSync?: boolean;
};
/** 数据源的状态 */
export enum RuntimeDataSourceStatus {
/** 初始状态,尚未加载 */
Initial = 'init',
/** 正在加载 */
Loading = 'loading',
/** 已加载(无错误) */
Loaded = 'loaded',
/** 加载出错了 */
Error = 'error',
}
/**
* 运行时的数据源(对外暴露的接口)
* @see https://yuque.antfin-inc.com/mo/spec/spec-low-code-building-schema#Jwgj5
*/
export interface IRuntimeDataSource<TParams = unknown, TResultData = unknown> {
/** 当前状态(initial/loading/loaded/error) */
readonly status: RuntimeDataSourceStatus;
/** 加载成功时的数据 */
readonly data?: TResultData;
/** 加载出错的时候的错误信息 */
readonly error?: Error;
/** 当前是否正在加载中 */
readonly isLoading?: boolean;
/**
* 加载数据 (无论是否曾经加载过)
* 注意:若提供 params,则会和默认配置的参数做浅合并;否则会使用默认配置的参数。
*/
load(params?: TParams): Promise<TResultData | void>;
}
/**
* DataSourceEngineFactory
* 用来定义 engine 的工厂函数类型
*/
export interface IRuntimeDataSourceEngineFactory {
create(
dataSource: RuntimeDataSource,
context: IDataSourceRuntimeContext,
extraConfig?: {
requestHandlersMap: RequestHandlersMap;
[key: string]: any;
},
): IDataSourceEngine;
}
// create 返回的 DataSourceEngine 定义
export interface IDataSourceEngine {
/** 数据源, key 是数据源的 ID */
dataSourceMap: Record<string, IRuntimeDataSource>;
/** 重新加载所有的数据源 */
reloadDataSource(): Promise<void>;
}