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:
2026-04-09 20:22:00 +08:00
parent 7013c0f25b
commit 12b9ab3f4b
40 changed files with 1419 additions and 168 deletions
@@ -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 {}