mirror of
https://github.com/labring/FastGPT.git
synced 2026-05-07 01:02:55 +08:00
fix(workflow): relax variable update reference validation to ignore stale valueType (#6859)
This commit is contained in:
@@ -569,23 +569,21 @@ export const checkWorkflowNodeAndConnection = ({
|
||||
if (!isValidReferenceValue(item.variable, nodeIds) || !isLiveReference(item.variable))
|
||||
return true;
|
||||
|
||||
const isArrayVar =
|
||||
typeof item.valueType === 'string' && item.valueType.startsWith('array');
|
||||
|
||||
if (item.renderType === FlowNodeInputTypeEnum.reference) {
|
||||
if (isArrayVar) {
|
||||
return (
|
||||
!Array.isArray(item.value) ||
|
||||
item.value.length === 0 ||
|
||||
(item.value as ReferenceItemValueType[]).some((v) => !isLiveReference(v))
|
||||
);
|
||||
// 接受单引用 [ref] 与引用数组 [[ref], ...],与 dispatcher 对齐
|
||||
if (isValidReferenceValueFormat(item.value)) {
|
||||
return !isLiveReference(item.value as ReferenceItemValueType);
|
||||
}
|
||||
return !isLiveReference(item.value as ReferenceItemValueType);
|
||||
return (
|
||||
!Array.isArray(item.value) ||
|
||||
item.value.length === 0 ||
|
||||
(item.value as ReferenceItemValueType[]).some((v) => !isLiveReference(v))
|
||||
);
|
||||
}
|
||||
|
||||
// input mode: clear 不需要 value;boolean 由 booleanMode 决定
|
||||
if (isArrayVar && item.arrayMode === 'clear') return false;
|
||||
if (item.valueType === WorkflowIOValueTypeEnum.boolean) return false;
|
||||
// input 模式:clear / boolean 由模式字段决定,不读 value
|
||||
if (item.arrayMode === 'clear') return false;
|
||||
if (item.booleanMode) return false;
|
||||
const inputVal = item.value?.[1];
|
||||
return inputVal === undefined || inputVal === null || inputVal === '';
|
||||
})
|
||||
|
||||
@@ -528,6 +528,34 @@ describe('checkWorkflowNodeAndConnection', () => {
|
||||
).toEqual(['u1']);
|
||||
});
|
||||
|
||||
// item.valueType 是写入快照,不与目标变量同步——校验只看 value 形态
|
||||
it('passes reference array form regardless of stale valueType', () => {
|
||||
expect(
|
||||
run([
|
||||
{
|
||||
variable: [VARIABLE_NODE_ID, 'foo'],
|
||||
value: [[VARIABLE_NODE_ID, 'bar']],
|
||||
valueType: WorkflowIOValueTypeEnum.string,
|
||||
renderType: FlowNodeInputTypeEnum.reference
|
||||
}
|
||||
])
|
||||
).toBeUndefined();
|
||||
});
|
||||
|
||||
// 历史数据:array reference 旧版本存为单引用 [refNode, refOutputId]
|
||||
it('passes legacy single-reference form for array valueType', () => {
|
||||
expect(
|
||||
run([
|
||||
{
|
||||
variable: [VARIABLE_NODE_ID, 'foo'],
|
||||
value: [VARIABLE_NODE_ID, 'bar'],
|
||||
valueType: WorkflowIOValueTypeEnum.arrayString,
|
||||
renderType: FlowNodeInputTypeEnum.reference
|
||||
}
|
||||
])
|
||||
).toBeUndefined();
|
||||
});
|
||||
|
||||
it('passes a fully filled input row', () => {
|
||||
expect(
|
||||
run([
|
||||
|
||||
Reference in New Issue
Block a user