From 2bb7bd5549738318cba6bd6827b22deea23116d4 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Thu, 2 May 2024 11:51:52 +0200 Subject: [PATCH] improve expr interpreter for flows to handle results?.X --- backend/windmill-worker/src/js_eval.rs | 31 ++++++++++---------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/backend/windmill-worker/src/js_eval.rs b/backend/windmill-worker/src/js_eval.rs index 263b9b6b61..f3c547d319 100644 --- a/backend/windmill-worker/src/js_eval.rs +++ b/backend/windmill-worker/src/js_eval.rs @@ -139,14 +139,18 @@ pub async fn eval_timeout( } } - let p_id = by_id.as_ref().map(|x| format!("results.{}", x.previous_id)); - let p_id2 = by_id - .as_ref() - .map(|x| format!("results[\"{}\"]", x.previous_id)); + let p_ids = by_id.as_ref().map(|x| { + [ + format!("results.{}", x.previous_id), + format!("results?.{}", x.previous_id), + format!("results[\"{}\"]", x.previous_id), + format!("results?.[\"{}\"]", x.previous_id), + ] + }); - if p_id.is_some() + if p_ids.is_some() && transform_context.contains_key("previous_result") - && &expr == p_id.as_ref().unwrap() + && p_ids.as_ref().unwrap().iter().any(|x| x == &expr) { // tracing::error!("PREVIOUS_RESULT"); return Ok(transform_context @@ -156,17 +160,6 @@ pub async fn eval_timeout( .clone()); } - if p_id2.is_some() - && transform_context.contains_key("previous_result") - && &expr == p_id2.as_ref().unwrap() - { - return Ok(transform_context - .get("previous_result") - .unwrap() - .as_ref() - .clone()); - } - if by_id.is_some() && authed_client.is_some() { if let Some(x) = RE_FULL .captures(&expr) @@ -227,10 +220,10 @@ pub async fn eval_timeout( .collect_vec(); if !context_keys.contains(&"previous_result".to_string()) - && (p_id.is_some() && expr.contains(p_id.as_ref().unwrap())) + && (p_ids.is_some() && p_ids.as_ref().unwrap().iter().any(|x| expr.contains(x))) || expr.contains("error") - || (p_id2.is_some() && expr.contains(p_id2.as_ref().unwrap())) { + // tracing::error!("PREVIOUS_RESULT"); context_keys.push("previous_result".to_string()); } let has_flow_input = expr.contains("flow_input");