From 877c283d07d4a0f3dbc652cd2f25e77c142962eb Mon Sep 17 00:00:00 2001 From: YISH Date: Tue, 27 Feb 2024 09:47:18 +0800 Subject: [PATCH 1/3] Feature: Add support for accessing NodeData via json path Supports `{{.data.instance.pathtokey}}` --- packages/server/src/utils/index.ts | 35 +++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index 2903d426512..d4639978382 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -528,11 +528,40 @@ export const getVariableValue = ( variableDict[`{{${variableFullPath}}}`] = handleEscapeCharacters(convertChatHistoryToText(chatHistory), false) } - // Split by first occurrence of '.' to get just nodeId - const [variableNodeId, _] = variableFullPath.split('.') + // Resolve values with following case. + // 1: .data.instance + // 2: .data.instance.pathtokey + const variableFullPathParts = variableFullPath.split('.') + const variableNodeId = variableFullPathParts[0] const executedNode = reactFlowNodes.find((nd) => nd.id === variableNodeId) if (executedNode) { - const variableValue = get(executedNode.data, 'instance') + let variableValue = get(executedNode.data, 'instance') + + // Handle path such as `.data.instance.key` + if (variableFullPathParts.length > 3) { + let variableObj = null + switch (typeof variableValue) { + case 'string': + const unEscapedVariableValue = handleEscapeCharacters(variableValue, true) + if (unEscapedVariableValue.startsWith('{') && unEscapedVariableValue.endsWith('}')) { + try { + variableObj = JSON.parse(unEscapedVariableValue) + } catch (e) { + // ignore + } + } + break + case 'object': + variableObj = variableValue + break + default: + break + } + if (variableObj) { + variableObj = get(variableObj, variableFullPathParts.slice(3)) + variableValue = handleEscapeCharacters(JSON.stringify(variableObj), false) + } + } if (isAcceptVariable) { variableDict[`{{${variableFullPath}}}`] = variableValue } else { From 6a6cfb61fc3e1e72c035db945959161d0249afd5 Mon Sep 17 00:00:00 2001 From: YISH Date: Tue, 27 Feb 2024 10:00:09 +0800 Subject: [PATCH 2/3] Update index.ts --- packages/server/src/utils/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index d4639978382..fd99f49d10f 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -541,7 +541,7 @@ export const getVariableValue = ( if (variableFullPathParts.length > 3) { let variableObj = null switch (typeof variableValue) { - case 'string': + case 'string': { const unEscapedVariableValue = handleEscapeCharacters(variableValue, true) if (unEscapedVariableValue.startsWith('{') && unEscapedVariableValue.endsWith('}')) { try { @@ -551,9 +551,11 @@ export const getVariableValue = ( } } break - case 'object': + } + case 'object': { variableObj = variableValue break + } default: break } From b7d01f10a453c1e642d35e277bd0e6dcb753dac2 Mon Sep 17 00:00:00 2001 From: YISH Date: Tue, 27 Feb 2024 10:16:55 +0800 Subject: [PATCH 3/3] Update index.ts --- packages/server/src/utils/index.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/server/src/utils/index.ts b/packages/server/src/utils/index.ts index fd99f49d10f..30196c66c89 100644 --- a/packages/server/src/utils/index.ts +++ b/packages/server/src/utils/index.ts @@ -561,7 +561,10 @@ export const getVariableValue = ( } if (variableObj) { variableObj = get(variableObj, variableFullPathParts.slice(3)) - variableValue = handleEscapeCharacters(JSON.stringify(variableObj), false) + variableValue = handleEscapeCharacters( + typeof variableObj === 'object' ? JSON.stringify(variableObj) : variableObj, + false + ) } } if (isAcceptVariable) {