diff --git a/app/client/src/ce/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity.ts b/app/client/src/ce/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity.ts new file mode 100644 index 0000000000..0e3216a899 --- /dev/null +++ b/app/client/src/ce/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity.ts @@ -0,0 +1,9 @@ +import type { ActionEntity } from "@appsmith/entities/DataTree/types"; +import type { DataTreeEntity } from "entities/DataTree/dataTreeTypes"; +import { isAction } from "@appsmith/workers/Evaluation/evaluationUtils"; + +export function isRunNClearFnQualifierEntity( + entity: DataTreeEntity, +): entity is ActionEntity { + return isAction(entity); +} diff --git a/app/client/src/ce/workers/Evaluation/getEntityForEvalContextMap.ts b/app/client/src/ce/workers/Evaluation/getEntityForEvalContextMap.ts new file mode 100644 index 0000000000..3e3ab3c7fb --- /dev/null +++ b/app/client/src/ce/workers/Evaluation/getEntityForEvalContextMap.ts @@ -0,0 +1,12 @@ +import { ENTITY_TYPE_VALUE } from "entities/DataTree/dataTreeFactory"; +import type { DataTreeEntity } from "entities/DataTree/dataTreeTypes"; +import { getJSActionForEvalContext } from "workers/Evaluation/getJSActionForEvalContext"; + +export const getEntityForEvalContextMap: Record< + string, + (entityName: string, entity: DataTreeEntity) => unknown +> = { + [ENTITY_TYPE_VALUE.JSACTION]: (entityName, entity) => { + return getJSActionForEvalContext(entityName, entity); + }, +}; diff --git a/app/client/src/ee/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity.ts b/app/client/src/ee/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity.ts new file mode 100644 index 0000000000..e3deec850c --- /dev/null +++ b/app/client/src/ee/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity.ts @@ -0,0 +1 @@ +export * from "ce/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity"; diff --git a/app/client/src/ee/workers/Evaluation/getEntityForEvalContextMap.ts b/app/client/src/ee/workers/Evaluation/getEntityForEvalContextMap.ts new file mode 100644 index 0000000000..faa1ae4686 --- /dev/null +++ b/app/client/src/ee/workers/Evaluation/getEntityForEvalContextMap.ts @@ -0,0 +1 @@ +export * from "ce/workers/Evaluation/getEntityForEvalContextMap"; diff --git a/app/client/src/workers/Evaluation/fns/index.ts b/app/client/src/workers/Evaluation/fns/index.ts index ff6ab3316c..5287033e29 100644 --- a/app/client/src/workers/Evaluation/fns/index.ts +++ b/app/client/src/workers/Evaluation/fns/index.ts @@ -42,10 +42,7 @@ import type { TRunDescription, } from "./actionFns"; import run, { clear } from "./actionFns"; -import { - isAction, - isAppsmithEntity, -} from "@appsmith/workers/Evaluation/evaluationUtils"; +import { isAppsmithEntity } from "@appsmith/workers/Evaluation/evaluationUtils"; import type { ActionEntity } from "@appsmith/entities/DataTree/types"; import type { DataTreeEntity } from "entities/DataTree/dataTreeTypes"; import type { @@ -62,6 +59,7 @@ import { watchGeoLocation, } from "./geolocationFns"; import { getFnWithGuards, isAsyncGuard } from "./utils/fnGuard"; +import { isRunNClearFnQualifierEntity } from "@appsmith/workers/Evaluation/fns/utils/isRunNClearFnQualifierEntity"; export const getPlatformFunctions = () => { return platformFns; @@ -117,7 +115,7 @@ const platformFns = [ export const entityFns = [ { name: "run", - qualifier: (entity: DataTreeEntity) => isAction(entity), + qualifier: (entity: DataTreeEntity) => isRunNClearFnQualifierEntity(entity), fn: (entity: DataTreeEntity, entityName: string) => { const actionEntity = entity as ActionEntity; // @ts-expect-error: name is not defined on ActionEntity @@ -131,7 +129,7 @@ export const entityFns = [ }, { name: "clear", - qualifier: (entity: DataTreeEntity) => isAction(entity), + qualifier: (entity: DataTreeEntity) => isRunNClearFnQualifierEntity(entity), fn: (entity: DataTreeEntity, entityName: string) => getFnWithGuards( clear.bind(entity as ActionEntity), diff --git a/app/client/src/workers/Evaluation/getEntityForContext.ts b/app/client/src/workers/Evaluation/getEntityForContext.ts index 39cebc5e69..2b77f88674 100644 --- a/app/client/src/workers/Evaluation/getEntityForContext.ts +++ b/app/client/src/workers/Evaluation/getEntityForContext.ts @@ -1,62 +1,13 @@ -import type { JSActionEntity } from "@appsmith/entities/DataTree/types"; +import { getEntityForEvalContextMap } from "@appsmith/workers/Evaluation/getEntityForEvalContextMap"; import type { DataTreeEntity } from "entities/DataTree/dataTreeTypes"; -import { ENTITY_TYPE_VALUE } from "entities/DataTree/dataTreeFactory"; -import JSObjectCollection from "./JSObject/Collection"; -import { jsObjectFunctionFactory } from "./fns/utils/jsObjectFnFactory"; -import { isObject } from "lodash"; - -function getJSFunctionsForEntity({ - jsObject, - jsObjectName, -}: { - jsObjectName: string; - jsObject: JSActionEntity; -}) { - const jsObjectFunction: Record = {}; - const resolvedFunctions = JSObjectCollection.getResolvedFunctions(); - const resolvedObject = Object.assign({}, resolvedFunctions[jsObjectName]); - for (const fnName of Object.keys(resolvedObject || {})) { - const fn = resolvedObject[fnName]; - if (typeof fn !== "function") continue; - const data = jsObject[fnName]?.data; - jsObjectFunction[fnName] = jsObjectFunctionFactory( - fn, - jsObjectName + "." + fnName, - ); - - if (!!data) { - jsObjectFunction[fnName]["data"] = data; - } - } - return jsObjectFunction; -} export function getEntityForEvalContext( entity: DataTreeEntity, entityName: string, ) { - if (entity && isObject(entity) && "ENTITY_TYPE" in entity) { - switch (entity.ENTITY_TYPE) { - case ENTITY_TYPE_VALUE.JSACTION: { - const jsObjectName = entityName; - const jsObject = entity as JSActionEntity; + const getterMethod = getEntityForEvalContextMap[entity.ENTITY_TYPE]; - let jsObjectForEval = JSObjectCollection.getVariableState(entityName); + if (!getterMethod) return entity; - const fns = getJSFunctionsForEntity({ - jsObjectName, - jsObject, - }); - - if (!jsObjectForEval) { - return Object.assign({}, jsObject, fns); - } - - jsObjectForEval = - JSObjectCollection.getVariablesForEvaluationContext(entityName); - return Object.assign(jsObjectForEval, fns); - } - } - } - return entity; + return getterMethod(entityName, entity); } diff --git a/app/client/src/workers/Evaluation/getJSActionForEvalContext.ts b/app/client/src/workers/Evaluation/getJSActionForEvalContext.ts new file mode 100644 index 0000000000..efd4b4c949 --- /dev/null +++ b/app/client/src/workers/Evaluation/getJSActionForEvalContext.ts @@ -0,0 +1,53 @@ +import type { JSActionEntity } from "@appsmith/entities/DataTree/types"; +import type { DataTreeEntity } from "entities/DataTree/dataTreeTypes"; +import JSObjectCollection from "workers/Evaluation/JSObject/Collection"; +import { jsObjectFunctionFactory } from "workers/Evaluation/fns/utils/jsObjectFnFactory"; + +function getJSFunctionsForEntity({ + jsObject, + jsObjectName, +}: { + jsObjectName: string; + jsObject: JSActionEntity; +}) { + const jsObjectFunction: Record = {}; + const resolvedFunctions = JSObjectCollection.getResolvedFunctions(); + const resolvedObject = Object.assign({}, resolvedFunctions[jsObjectName]); + for (const fnName of Object.keys(resolvedObject || {})) { + const fn = resolvedObject[fnName]; + if (typeof fn !== "function") continue; + const data = jsObject[fnName]?.data; + jsObjectFunction[fnName] = jsObjectFunctionFactory( + fn, + jsObjectName + "." + fnName, + ); + + if (!!data) { + jsObjectFunction[fnName]["data"] = data; + } + } + return jsObjectFunction; +} + +export function getJSActionForEvalContext( + entityName: string, + entity: DataTreeEntity, +) { + const jsObjectName = entityName; + const jsObject = entity as JSActionEntity; + + let jsObjectForEval = JSObjectCollection.getVariableState(entityName); + + const fns = getJSFunctionsForEntity({ + jsObjectName, + jsObject, + }); + + if (!jsObjectForEval) { + return Object.assign({}, jsObject, fns); + } + + jsObjectForEval = + JSObjectCollection.getVariablesForEvaluationContext(entityName); + return Object.assign(jsObjectForEval, fns); +}