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