24 lines
1.4 KiB
TypeScript
24 lines
1.4 KiB
TypeScript
import type {NodeHandler} from '../../../types/bot/workflow/runtime.ts';
|
|
import type {WorkflowNodeTemplate} from '../../../types/bot/workflow/metadata.ts';
|
|
import {describe, failure_port, output, port} from '../metadata.ts';
|
|
import {evaluate_condition} from '../runtime/value.ts';
|
|
|
|
export const config_template: WorkflowNodeTemplate = {
|
|
name: 'condition', version: '1.0.0',
|
|
i18n: describe('条件判断', '计算条件表达式,根据布尔结果选择为真或为假分支。'),
|
|
config: [
|
|
{name: 'condition', type: 'condition', required: true,
|
|
i18n: describe('判断条件', '支持多个条件全部满足(and/且)、任一满足(or/或)及嵌套分组、取反;每项可使用 eq、contains、gt、lt 比较字面量或状态引用。')},
|
|
],
|
|
output: {...output('boolean', '判断结果', '条件表达式的布尔结果,true 和 false 均为成功执行;计算失败时输出 null。'), nullable: true},
|
|
ports: [port('true', '为真', '条件结果为 true 时执行。'),
|
|
port('false', '为假', '条件结果为 false 时执行。'), failure_port],
|
|
};
|
|
|
|
export const execute: NodeHandler = async (node, state, signal) => {
|
|
if (node.type !== 'condition') throw new Error('Expected a condition node');
|
|
signal.throwIfAborted();
|
|
const output = evaluate_condition(node.config.condition, state);
|
|
return {port: output ? 'true' : 'false', result: {status: 'success', output}};
|
|
};
|