12b9ab3f4b
引入完整的低代码设计器 schema 架构,包含以下核心模块: - application: 应用级配置容器,整合所有设计时和运行时配置 - core: 基础类型定义(Entity、JsonValue、DynamicExpression 等) - component: 组件树结构,支持布局、样式、数据和交互 - page: 页面配置,支持多种布局模式(自由、弹性、流式) - route: 路由系统,支持嵌套路由和重定向 - variable: 全局状态管理 - data-source: 数据源抽象,支持 REST 和数据库协议 - query: 数据查询配置,支持静态数据、REST 等多种模式 - mutation: 数据变更操作 - filter: 数据过滤管道 - interaction: 交互系统,包含事件和动作机制 同时更新 package.json 的模块入口,并添加 AGENTS.md 项目说明文档。
80 lines
3.0 KiB
TypeScript
80 lines
3.0 KiB
TypeScript
import type { Entity } from '../core';
|
|
import type { Interaction } from '../interaction';
|
|
|
|
/**
|
|
* 路由
|
|
*
|
|
* 【架构定位】:
|
|
*
|
|
* 1. 它是连接 URL 与 Page(页面实例)的唯一桥梁。
|
|
* 2. 它是构建复杂应用(如中后台系统、多页官网)的核心导航骨架。
|
|
*
|
|
* 【引擎实现指引】
|
|
*
|
|
* 1. 隔离策略:
|
|
* - 设计模式 (design) 下,渲染引擎必须使用 `Memory Router`(或重写 `history.pushState`),
|
|
* 以防止用户在配置路由跳转时,导致整个设计器外壳发生灾难性的真刷新或沙盒逃逸。
|
|
* - 运行/预览模式 (runtime/preview) 下,引擎切换为原生的 `Browser Router`。
|
|
* 2. 嵌套挂载:
|
|
* 当遇到带有 `children` 的路由时,引擎会将其对应的 `pageId` 视为一个“父级布局骨架(Layout Skeleton)”。
|
|
* 引擎在该骨架中必须寻找一个特殊的内置组件(如 `type: 'Outlet'` 或 `RouterView`),
|
|
* 以作为子路由对应 `Page` 的挂载插槽。
|
|
*/
|
|
export interface Route extends Entity {
|
|
/**
|
|
* 路由路径
|
|
*
|
|
* 定义了匹配当前路由的 URL 片段。
|
|
*
|
|
* 支持静态路径(如 '/home'、'/dashboard')和参数路径(如 '/user/:id')。
|
|
*
|
|
* 在根数组中,通常包含一个 '/' 作为默认首页。
|
|
*/
|
|
path: string;
|
|
/**
|
|
* 路由重定向
|
|
*
|
|
* 如果配置了此字段,当 URL 匹配到当前 path 时,引擎不渲染组件,
|
|
* 而是立即执行 301/302 级别的重定向,跳转到目标 path。
|
|
*
|
|
* 常见于将根路径 '/' 重定向到具体的首页 '/home'。
|
|
*/
|
|
redirect?: string;
|
|
/**
|
|
* 绑定的页面 ID
|
|
*
|
|
* 核心映射:当前路由命中时,引擎将去全局的 `Application.pages` 数组中
|
|
* 查找对应的 Page 实例,并渲染该 Page 携带的庞大组件树。
|
|
*
|
|
* 注:如果这是一个纯粹的重定向路由 (redirect存在) 或父级空壳路由,此项可为空。
|
|
*/
|
|
pageId?: string;
|
|
/**
|
|
* 子路由
|
|
*
|
|
* 构建复杂应用(如带侧边栏、顶部导航的后台框架)的核心。
|
|
*
|
|
* 架构规约:
|
|
*
|
|
* 如果此数组不为空,则当前路由的 `pageId` 对应的 Page,不再是一个终端页面,
|
|
* 而是一个带有“插槽”的布局容器。它的内部组件树中必须包含一个 `type: 'Outlet'` 的组件,
|
|
* 用于动态渲染其子孙 Route 所绑定的 Page。
|
|
*/
|
|
children?: Route[];
|
|
/**
|
|
* 交互
|
|
*
|
|
* 路由级生命周期与拦截器
|
|
*
|
|
* 在进入或离开该路由时触发的高阶控制流。
|
|
*
|
|
* 引擎实现指引:
|
|
* 1. 常用于“路由守卫 (Navigation Guards)”:例如在进入 '/admin' 前,
|
|
* 执行一个校验 Token 的 Action,若校验失败,则执行一个 Redirect Action 踢回登录页。
|
|
* 2. 常见事件如:`onEnter` (进入前), `onLeave` (离开前)。
|
|
*
|
|
* 如果当前路由无拦截逻辑,则必须为空数组 `[]`(而非 undefined)。
|
|
*/
|
|
interactions: Interaction[];
|
|
}
|