Skip to content

Schema 与命令

Designer 创建并持有页面 Engine,所有 Schema 写入都经过命令接口。

ts
import { CommandType, createEngine } from '@dragcraft/designer'

const engine = createEngine()
engine.execute({
  type: CommandType.SET_GLOBAL_CONFIG,
  payload: { config: { title: '首页' } },
})
入口用途
createEngine()创建不挂载工作台的 Schema Engine。
engine.execute(command)执行内置或已注册命令。
engine.state读取深只读 Schema 和交互状态。
engine.exportSchema() / importSchema()交换完整页面快照。
engine.registerMigration()注册版本间的 Schema 迁移。
ContainerDefinitioncreateContainerPlan()描述和读取外部容器 region。

engine.store 的 Schema ref 是只读的。命令成功前会校验节点所有权、容器约束和 ID;失败命令不会产生历史或 schema:changed。标准项目优先使用内置 CommandType、字段绑定和节点动作。

Schema 托管物料

导航栏、底部栏等由页面模板固定提供的物料,可以注册为 Schema 托管物料。完整的 metadata 与初始节点范例见 动作与业务策略

ts
import type { DesignerWidgetMeta } from '@dragcraft/designer'

const navbarMeta: DesignerWidgetMeta = {
  type: 'navbar',
  title: '导航栏',
  group: 'chrome',
  authoring: 'schema-managed',
  defaultProps: {},
  formSchema: { sections: [] },
  defaultLayout: {
    placement: { kind: 'chrome', edge: 'block-start', position: 'fixed' },
  },
}

这类物料不出现在标准物料面板中,也不能通过 ADD_NODE 或 duplicate 创建。已有实例默认仍可选中和编辑属性,但不可移动、删除或切换容器 variant。可以用 selectableconfigurabledraggablesortabledeletablevariantChangeableactions 按实例开放能力;创建与复制始终禁止。draggable: true 开启移动;只有需要锁住绝对 sibling 下标时才设为 sortable: false

限制会传播到候选子树:复制包含托管后代的普通容器会被拒绝,删除普通父容器也要求所有托管后代允许删除。importSchema()、注册的 migration 和 custom command 是可信宿主入口,不应被当作不可信插件沙箱。