From 797cea53949c10532bf8eea208b05527246e376a Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Fri, 22 Sep 2023 13:49:54 +0100 Subject: [PATCH] Fix env evaluation when one env references another in the same object Fixes #4342 --- .../@node-red/runtime/lib/flows/util.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/packages/node_modules/@node-red/runtime/lib/flows/util.js b/packages/node_modules/@node-red/runtime/lib/flows/util.js index 7eefe86c4..0c353aa90 100644 --- a/packages/node_modules/@node-red/runtime/lib/flows/util.js +++ b/packages/node_modules/@node-red/runtime/lib/flows/util.js @@ -112,6 +112,7 @@ async function evaluateEnvProperties(flow, env, credentials) { if (pendingEvaluations.length > 0) { await Promise.all(pendingEvaluations) } + // Now loop over the env types and evaluate them properly for (let i = 0; i < envTypes.length; i++) { let { name, value, type } = envTypes[i] // If an env-var wants to lookup itself, delegate straight to the parent @@ -122,7 +123,17 @@ async function evaluateEnvProperties(flow, env, credentials) { if (evaluatedEnv.hasOwnProperty(value)) { value = evaluatedEnv[value] } else { - value = redUtil.evaluateNodeProperty(value, type, {_flow: flow}, null, null); + value = redUtil.evaluateNodeProperty(value, type, {_flow: { + // Provide a hook so when it tries to look up a flow setting, + // we can insert the just-evaluated value which hasn't yet + // been set on the flow object - otherwise delegate up to the flow + getSetting: function(name) { + if (evaluatedEnv.hasOwnProperty(name)){ + return evaluatedEnv[name] + } + return flow.getSetting(name) + } + }}, null, null); } evaluatedEnv[name] = value }