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 declare 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;
}
export interface IDataSourceEngine {
    /** 数据源, key 是数据源的 ID */
    dataSourceMap: Record<string, IRuntimeDataSource>;
    /** 重新加载所有的数据源 */
    reloadDataSource(): Promise<void>;
}
