import type {NodeConfig} from '../types' import {NodeTypes} from '../types' import {register as vueNodeRegister} from '@logicflow/vue-node-registry' import LogicFlow from '@logicflow/core' import {NodeConfigMap, NodeIconMap, NodeSettingMap, NodeTypeOrder} from '../const' import {BaseEdge} from "./base-node" import StartNode from './start-node' import EndNode from './end-node' import LLMNode from './llm-node' import ClassifierNode from './classifier-node' import SwitchNode from './switch-node' import KnowledgeNode from './knowledge-node' import CodeNode from './code-node' import SubflowNode from './subflow-node' import EnhanceJavaNode from './enhance-java-node' import HTTPNode from './http-node' import ReplyNode from './reply-node' export const DefaultEdgeType = BaseEdge.type /** * 注册所有的vue节点 */ export function registerAllVueNode(lf: LogicFlow) { // 0. 清理 NodeIconMap.clear(); NodeSettingMap.clear(); NodeConfigMap.clear(); NodeTypeOrder.clear(); // 1. 注册自定义边 lf.register(BaseEdge) // 2. 注册自定义节点 const register = getRegisterFn(lf); // 开始节点 register(StartNode, true); // LLM节点 register(LLMNode); // 分类器节点 register(ClassifierNode); // ------- NodeTypeOrder.addDivider(); // 知识库节点 register(KnowledgeNode); // ------- NodeTypeOrder.addDivider(); // 条件分支节点 register(SwitchNode); // 脚本节点 register(CodeNode); // Java增强节点 register(EnhanceJavaNode); // HTTP节点 register(HTTPNode); // ------- NodeTypeOrder.addDivider(); // 子流程节点 register(SubflowNode); // ------- NodeTypeOrder.addDivider(); // 直接回复节点 register(ReplyNode); // 结束节点 register(EndNode); } function getRegisterFn(lf: LogicFlow) { return (vn: NodeConfig, noAdd = false) => { vn.docs = handleNodeDocs(vn); NodeConfigMap.set(vn.type, vn); vueNodeRegister(vn.lfNode, lf); // 添加图标 if (vn.components.icon) { NodeIconMap.set(vn.type, vn.components.icon); } // 添加配置 if (vn.components.setting) { NodeSettingMap.set(vn.type, vn.components.setting); } if (!noAdd) { NodeTypeOrder.add(vn.type); } } } function handleNodeDocs(node: NodeConfig): string | undefined { const {docs} = node; if (!docs) { return; } if (typeof docs === 'string') { return docs; } // @ts-ignore if (!Array.isArray(docs) || docs.length === 0) { return; } if (docs.length > 1) { // TODO 判断是否是敲敲云环境 return docs[1]; } return docs[0]; } export {BaseNodeModel} from './base-node' export { NodeTypes }