From 72f6ad8d9987d29deb987d6a0fdd0b9ee814c720 Mon Sep 17 00:00:00 2001 From: Hetu Nandu Date: Fri, 1 Oct 2021 20:39:09 +0530 Subject: [PATCH] fix: Cyclic dependency not resolving in JS Editor (#8003) --- app/client/src/workers/evaluation.worker.ts | 26 ++++++++++++++------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/app/client/src/workers/evaluation.worker.ts b/app/client/src/workers/evaluation.worker.ts index 8708df5073..b2ae9eae9a 100644 --- a/app/client/src/workers/evaluation.worker.ts +++ b/app/client/src/workers/evaluation.worker.ts @@ -235,22 +235,28 @@ ctx.addEventListener( } case EVAL_WORKER_ACTIONS.PARSE_JS_FUNCTION_BODY: { const { body, jsAction } = requestData; - - if (!dataTreeEvaluator) { - return true; - } + /** + * In case of a cyclical dependency, the dataTreeEvaluator will not + * be present. This causes an issue because evalTree is needed to resolve + * the cyclical dependency in a JS Collection + * + * By setting evalTree to an empty object, the parsing can still take place + * and it would resolve the cyclical dependency + * **/ + const currentEvalTree = dataTreeEvaluator + ? dataTreeEvaluator.evalTree + : {}; try { const { evalTree, result } = parseJSCollection( body, jsAction, - dataTreeEvaluator.evalTree, + currentEvalTree, ); return { evalTree, result, }; } catch (e) { - const evalTree = dataTreeEvaluator.evalTree; const errors = [ { errorType: PropertyEvaluationErrorType.PARSE, @@ -259,9 +265,13 @@ ctx.addEventListener( errorMessage: e.message, }, ]; - _.set(evalTree, `${jsAction.name}.${EVAL_ERROR_PATH}.body`, errors); + _.set( + currentEvalTree, + `${jsAction.name}.${EVAL_ERROR_PATH}.body`, + errors, + ); return { - evalTree, + currentEvalTree, }; } }