Files
node_server/bot/workflow/node/merge_node.ts
T
2026-10-22 17:07:08 +08:00

26 lines
1.6 KiB
TypeScript

import type {NodeHandler} from '../../../types/bot/workflow/runtime.ts';
import type {WorkflowNodeTemplate} from '../../../types/bot/workflow/metadata.ts';
import {describe, edge_input_output, failure_port, output, success_port} from '../metadata.ts';
export const config_template: WorkflowNodeTemplate = {
name: 'merge', version: '1.0.0',
i18n: describe('分支合流', '按全部入线汇合或每次到达独立继续的方式处理分支,输出本次入线数据。'),
config: [
{name: 'mode', type: 'select', required: true, default: 'all',
i18n: describe('合流方式', '选择是否等待每一条入线;全部入线模式至少需要两条入线且不能作为入口节点。'),
options: [
{value: 'all', i18n: describe('全部入线', '等待同一轮次的每一条入线均到达后合并状态并执行一次;互斥分支可能导致入线无法到齐。')},
{value: 'any', i18n: describe('每次到达', '每条入线每次到达都独立执行,不等待其他入线,也不会只执行首次到达。')},
]},
],
output: {...output('object', '入线数据', '以连线 ID 为键的 inputs 对象;all 包含本轮全部入线,any 包含本次到达的入线。'),
nullable: true, additional_properties: edge_input_output},
ports: [success_port, failure_port],
};
export const execute: NodeHandler = async (node, state, signal) => {
if (node.type !== 'merge') throw new Error('Expected a merge node');
signal.throwIfAborted();
return {port: 'success', result: {status: 'success', output: state.inputs}};
};