refactor(canvas): 节点注册表 - 收敛素材类型、生成模式与输入计数判据
把三条按类型分支的语义判据收进注册表: - resourceKind 原 canvas-resource-references.ts,作为 @ 引用素材时的类型 - generationMode 原 canvas-connection-policy.ts,作为生成节点时的模式 - inputKind 原 canvas-connection-policy.ts,被容量校验计数时的类别 resourceKind 与 inputKind 刻意分成两个字段:它们语义不同——空图片节点不是素材 (不进 @ 引用),但照样计入 imageCount。合成一个会静默改掉连线容量校验。 两处必须保住的语义,均已由测试钉住: 1. 角色卡(workflowKind === character)是跨类型覆盖,对任何节点类型生效, 属于查注册表之前的前置判定,因此留在调用点而不进 per-type 定义。 2. 排除必须早于覆盖。原实现先 return 掉生成配置与背板,之后才判角色卡; 若把角色卡判定提前,带角色元数据的配置/背板节点会被多算成 characterCount。 新增 test/canvas-node-registry.test.ts(19 用例 / 77 断言)并加入 package.json 的 test 列表——该列表是显式枚举,不加进去文件不会跑。补测的原因是 canvas-resource-references.test.ts 只覆盖 collectUpstreamVideoNodes, 本次改动的 resourceKind 此前零覆盖,而这类判据出错不报错、只会让 @ 引用少收素材。 顺带内联 nodeGenerationMode(迁移后退化为单行转发)。 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,10 @@
|
||||
import type { ReactNode } from "react";
|
||||
|
||||
import type { CanvasNodeData, CanvasNodeMetadata, CanvasNodeType } from "@/types/canvas";
|
||||
import type { CanvasResourceKind } from "@/lib/canvas/canvas-resource-references";
|
||||
import type { CanvasGenerationMode, CanvasNodeData, CanvasNodeMetadata, CanvasNodeType } from "@/types/canvas";
|
||||
|
||||
/** 作为上游输入被容量校验计数时归入的类别 */
|
||||
export type CanvasNodeInputKind = "image" | "video" | "audio" | "text";
|
||||
|
||||
/**
|
||||
* 节点定义——注册表的基本单元。
|
||||
@@ -26,4 +30,19 @@ export type CanvasNodeDefinition = {
|
||||
keepAspectRatio?: (node: CanvasNodeData) => boolean;
|
||||
/** 是否出现在添加节点菜单(技能、生成配置由其他入口创建) */
|
||||
showInCreateMenu: boolean;
|
||||
/**
|
||||
* 作为 @ 引用素材时归入的类型;不设或返回 null 表示该节点不是可引用素材。
|
||||
* 判定依赖内容——空节点不构成素材。
|
||||
*
|
||||
* 注意:角色卡(workflowKind === "character")是**跨类型覆盖**,不在这里表达,
|
||||
* 由 canvas-resource-references 在查注册表之前先行判定。
|
||||
*/
|
||||
resourceKind?: (node: CanvasNodeData) => CanvasResourceKind | null;
|
||||
/** 作为生成节点时的生成模式;不设表示该类型不产生生成行为 */
|
||||
generationMode?: (node: CanvasNodeData) => CanvasGenerationMode | null;
|
||||
/**
|
||||
* 作为上游输入被参考素材容量校验计数时的类别;
|
||||
* 不设表示不参与计数(生成配置、背板)。与 resourceKind 不同,计数不看内容。
|
||||
*/
|
||||
inputKind?: CanvasNodeInputKind;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user