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, }; } }