Files
datalive-design/src/schema/design-mode/query/query-config.ts
T
skycurtain 12b9ab3f4b feat(schema): 新增低代码设计器核心数据结构定义
引入完整的低代码设计器 schema 架构,包含以下核心模块:
- application: 应用级配置容器,整合所有设计时和运行时配置
- core: 基础类型定义(Entity、JsonValue、DynamicExpression 等)
- component: 组件树结构,支持布局、样式、数据和交互
- page: 页面配置,支持多种布局模式(自由、弹性、流式)
- route: 路由系统,支持嵌套路由和重定向
- variable: 全局状态管理
- data-source: 数据源抽象,支持 REST 和数据库协议
- query: 数据查询配置,支持静态数据、REST 等多种模式
- mutation: 数据变更操作
- filter: 数据过滤管道
- interaction: 交互系统,包含事件和动作机制

同时更新 package.json 的模块入口,并添加 AGENTS.md 项目说明文档。
2026-04-09 20:22:00 +08:00

93 lines
3.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { DynamicExpression, JsonValue, RestRequest } from '../core';
/**
* 数据查询核心配置
*
* 【架构定位】:
*
* 这是一个极其强大的多态联合类型 (Polymorphism Union Type)。
* 它决定了当前这个 `Query` 到底是通过什么“物理手段”去获取数据的。
*
* 引擎实现指引:
*
* 渲染引擎(或数据请求层)在执行 `Query` 时,必须写一个 `switch (config.type)`。
*
* - 如果是 'static'O(1) 复杂度直接返回内存里的死数据。
* - 如果是 'rest',提取其绑定的 dataSourceId,组装 Axios 请求发给网关。
* - 未来如果是 'database',则通过 WebSocket 或专用代理发给后端执行 SQL。
*/
export type QueryConfig =
| QueryConfigByStatic
| QueryConfigByRest
| QueryConfigByGraphql
| QueryConfigByDatabase
| QueryConfigByCode;
/**
* 静态查询配置
*
* 核心价值:
*
* 1. 跨组件复用:定义如“全国省份列表”等被多个组件同时绑定的全局字典数据。
* 2. 接口 Mock:当后端真实 API 尚未开发完毕时,作为临时数据源占位。
* 一旦后端就绪,只需在设计器将此配置一键切换为 `QueryConfigByRest`
* 所有绑定了此 Query 的前端组件无需任何修改即可平滑接入真数据。
*/
export interface QueryConfigByStatic {
type: 'static';
/**
* 静态的、硬编码的全局数据。
* 必须是合法的纯净 JSON(使用 JsonValue 锁死序列化底线,坚决不用 any)。
*/
data: JsonValue;
}
/**
* RESTful 查询配置
*
* 占据了低代码数据获取 90% 以上场景的主力网络通信配置。
*/
export interface QueryConfigByRest {
type: 'rest';
/**
* HTTP 请求方法
*
* 注:在 CQRS 架构中,即使是一个 POST 请求(如 GraphQL 的查询,或带有复杂查询体的高级搜索),
* 只要它是幂等的且不修改服务端状态,它在低代码中依然属于 `Query`(查询),而非 `Mutation`(变更)。
*/
method: 'GET' | 'POST';
/**
* 请求体配置
*
* 极其关键的双模逃生舱设计 (Dual-Mode Design)
* 它引入了定义在 `core/rest-request.ts` 中的 `RestRequest` 类型
* (`RestRequestByFixed | RestRequestByCode`)。
*
* 允许用户既能通过可视化表单填死 url/params
* 又能通过手写 JS 代码,根据全局变量动态拼装出极其复杂的请求头和加密签名。
*/
request: RestRequest;
/**
* 接口超时时间 (毫秒 ms)
*
* 如果不启用,引擎应使用全局 DataSource 配置的超时,或默认的浏览器超时(如 30s)。
*/
timeout: {
enabled: boolean;
duration: number;
};
}
// TODO: GraphQL 查询配置,暂不实现
export interface QueryConfigByGraphql {
type: 'graphql';
}
// TODO: 数据库查询配置,暂不实现
export interface QueryConfigByDatabase {
type: 'database';
}
// TODO: 代码查询配置,暂不实现
export interface QueryConfigByCode extends DynamicExpression {}