From 593c816c1ab57003f9063dffca35274d1ae990e5 Mon Sep 17 00:00:00 2001 From: Archer <545436317@qq.com> Date: Fri, 18 Jul 2025 16:39:42 +0800 Subject: [PATCH] perf: value type checker (#5255) * perf: value type checker * fix: ts --- .../global/core/workflow/runtime/utils.ts | 50 ++++++++----------- .../workflow/dispatch/tools/runUpdateVar.ts | 1 + .../common/Textarea/PromptEditor/index.tsx | 8 ++- .../core/app/workflow/dispatch/utils.test.ts | 6 +-- 4 files changed, 32 insertions(+), 33 deletions(-) diff --git a/packages/global/core/workflow/runtime/utils.ts b/packages/global/core/workflow/runtime/utils.ts index 1a1675cc7..bde558c52 100644 --- a/packages/global/core/workflow/runtime/utils.ts +++ b/packages/global/core/workflow/runtime/utils.ts @@ -97,58 +97,50 @@ export const valueTypeFormat = (value: any, type?: WorkflowIOValueTypeEnum) => { } // 4.3 字符串转对象 - if ( - (type === WorkflowIOValueTypeEnum.object || type.startsWith('array')) && - typeof value === 'string' && - value.trim() - ) { - const trimmedValue = value.trim(); - const isJsonString = isObjectString(trimmedValue); - - if (isJsonString) { + if (type === WorkflowIOValueTypeEnum.object) { + if (isObjectString(value)) { + const trimmedValue = value.trim(); try { - const parsed = json5.parse(trimmedValue); - // 检测解析结果与目标类型是否一致 - if (type.startsWith('array') && Array.isArray(parsed)) return parsed; - if (type === WorkflowIOValueTypeEnum.object && typeof parsed === 'object') return parsed; + return json5.parse(trimmedValue); } catch (error) {} } + return {}; } // 4.4 数组类型(这里 value 不是数组类型)(TODO: 嵌套数据类型转化) if (type.startsWith('array')) { + if (isObjectString(value)) { + try { + return json5.parse(value); + } catch (error) {} + } return [value]; } // 4.5 特殊类型处理 if ( - [WorkflowIOValueTypeEnum.datasetQuote, WorkflowIOValueTypeEnum.selectDataset].includes(type) + [ + WorkflowIOValueTypeEnum.datasetQuote, + WorkflowIOValueTypeEnum.selectDataset, + WorkflowIOValueTypeEnum.selectApp + ].includes(type) ) { if (isObjectString(value)) { try { return json5.parse(value); - } catch (error) { - return []; - } + } catch (error) {} } return []; } - if ( - [WorkflowIOValueTypeEnum.selectApp, WorkflowIOValueTypeEnum.object].includes(type) && - typeof value === 'string' - ) { + + // Invalid history type + if (type === WorkflowIOValueTypeEnum.chatHistory) { if (isObjectString(value)) { try { return json5.parse(value); - } catch (error) { - return {}; - } + } catch (error) {} } - return {}; - } - // Invalid history type - if (type === WorkflowIOValueTypeEnum.chatHistory) { - return 0; + return []; } // 5. 默认返回原值 diff --git a/packages/service/core/workflow/dispatch/tools/runUpdateVar.ts b/packages/service/core/workflow/dispatch/tools/runUpdateVar.ts index 3616afd77..a29319992 100644 --- a/packages/service/core/workflow/dispatch/tools/runUpdateVar.ts +++ b/packages/service/core/workflow/dispatch/tools/runUpdateVar.ts @@ -58,6 +58,7 @@ export const dispatchUpdateVariable = async (props: Props): Promise => variables }) : item.value?.[1]; + return valueTypeFormat(val, item.valueType); } else { return getReferenceVariableValue({ diff --git a/packages/web/components/common/Textarea/PromptEditor/index.tsx b/packages/web/components/common/Textarea/PromptEditor/index.tsx index 60b4fecb0..291835f1c 100644 --- a/packages/web/components/common/Textarea/PromptEditor/index.tsx +++ b/packages/web/components/common/Textarea/PromptEditor/index.tsx @@ -97,7 +97,13 @@ const PromptEditor = ({ /> )} - + { { value: 'false', type: WorkflowIOValueTypeEnum.selectApp, - result: {} + result: [] }, { value: 'false', @@ -171,7 +171,7 @@ describe('valueTypeFormat', () => { { value: true, type: WorkflowIOValueTypeEnum.object, - result: true + result: {} } ]; boolTestList.forEach((item, index) => { @@ -263,7 +263,7 @@ describe('valueTypeFormat', () => { { value: '1', type: WorkflowIOValueTypeEnum.chatHistory, - result: 0 + result: [] } ]; chatHistoryTestList.forEach((item, index) => {