110 lines
2.6 KiB
TypeScript
110 lines
2.6 KiB
TypeScript
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
|
|
}
|