12b9ab3f4b
引入完整的低代码设计器 schema 架构,包含以下核心模块: - application: 应用级配置容器,整合所有设计时和运行时配置 - core: 基础类型定义(Entity、JsonValue、DynamicExpression 等) - component: 组件树结构,支持布局、样式、数据和交互 - page: 页面配置,支持多种布局模式(自由、弹性、流式) - route: 路由系统,支持嵌套路由和重定向 - variable: 全局状态管理 - data-source: 数据源抽象,支持 REST 和数据库协议 - query: 数据查询配置,支持静态数据、REST 等多种模式 - mutation: 数据变更操作 - filter: 数据过滤管道 - interaction: 交互系统,包含事件和动作机制 同时更新 package.json 的模块入口,并添加 AGENTS.md 项目说明文档。
93 lines
3.0 KiB
TypeScript
93 lines
3.0 KiB
TypeScript
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 {}
|