refactor: 简化schema结构,更新AGENTS.md
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import type { Entity, Condition, DynamicExpression, JsonValue } from '../core';
|
||||
|
||||
/**
|
||||
* 执行动作的目标实体
|
||||
*
|
||||
* 泛化 RPC 命令动作 (Generalized RPC Command Action)
|
||||
*
|
||||
* 【架构定位】:
|
||||
*
|
||||
* 这是整个交互体系的巅峰设计。
|
||||
* 我们坚决拒绝将 Action 枚举化为 `ShowToast`, `Navigate`, `SetVariable` 等海量具体类型。
|
||||
* 相反,我们采用极其抽象的“一切皆实体(Entity),一切皆方法(Method)”模型。
|
||||
*
|
||||
* 架构优势:
|
||||
*
|
||||
* 这种极致抽象保持了 Schema 结构的极简与统一。未来设计器新增几百种组件或系统能力时,
|
||||
* Schema 结构一行代码都不用改;渲染引擎只需要一个通用的“方法派发器(Method Dispatcher)”即可支撑无限的扩展能力。
|
||||
*/
|
||||
export interface Action extends Entity {
|
||||
/**
|
||||
* 命令目标 (Target Entity)
|
||||
*
|
||||
* 告诉引擎:这个命令是发给谁的?
|
||||
*
|
||||
* 目标类型举例:
|
||||
* - `type: 'component'`: 调用画布上的组件(如让图表刷新,或动态修改其 layout)。
|
||||
* - `type: 'variable'`: 调用全局变量(如修改当前用户的值)。
|
||||
* - `type: 'query'`: 调用全局查询(如手动触发一次 `execute()` 发起网络请求)。
|
||||
* - `type: 'system'`: 极其关键!调用引擎提供的全局系统服务(如 `id: 'router'` 进行跳转,或 `id: 'message'` 弹出 Toast)。
|
||||
*/
|
||||
target: {
|
||||
type: string;
|
||||
id: string;
|
||||
};
|
||||
/**
|
||||
* 目标方法名 (Method Name)
|
||||
*
|
||||
* 目标实体向外暴露的、可供执行的函数名。
|
||||
*
|
||||
* 例:组件暴露的 `updateLayout`,系统路由服务暴露的 `navigateTo`。
|
||||
*/
|
||||
method: string;
|
||||
/**
|
||||
* 执行动作的条件
|
||||
*
|
||||
* 动作级拦截器 (Action Execution Condition)
|
||||
*
|
||||
* 在执行此单一动作前的高阶逻辑判断。
|
||||
*
|
||||
* 若存在此字段且求值为 false,引擎将静默跳过此动作的执行,继续执行下一个动作。
|
||||
*/
|
||||
condition?: Condition;
|
||||
/**
|
||||
* 方法调用入参 (Method Parameters Payload)
|
||||
*
|
||||
* 传递给 `method` 的额外数据。
|
||||
*
|
||||
* 采用“双模设计 (Dual-Mode)”:
|
||||
* 既支持固定的 JSON 字典(fixed),也支持极其强大的代码逃生舱(code),
|
||||
* 允许在触发动作的一瞬间,通过 JS 代码动态拼装入参(如提取事件源 event 的值)。
|
||||
*/
|
||||
params?: ActionParams;
|
||||
}
|
||||
|
||||
export type ActionParams = ActionParamsByFixed | ActionParamsByCode;
|
||||
|
||||
/**
|
||||
* 静态表单参数模式
|
||||
*
|
||||
* 适用于大部分常规场景(如打开弹窗时传个死参数)。
|
||||
* payload 里的值在设计时即已确定。
|
||||
*/
|
||||
export interface ActionParamsByFixed {
|
||||
type: 'fixed';
|
||||
payload: Record<string, JsonValue>;
|
||||
}
|
||||
|
||||
/**
|
||||
* 动态代码参数模式 (代码逃生舱)
|
||||
*
|
||||
* 业务场景:
|
||||
* 当你需要“点击表格的某一行,提取这一行的数据 ID,传给下一个页面或 Mutation”时。
|
||||
* 你必须在此时动态执行一段 JS 函数,从上下文中提取事件源的数据,返回一个 params 对象。
|
||||
*/
|
||||
export interface ActionParamsByCode extends DynamicExpression {}
|
||||
Reference in New Issue
Block a user