UNPKG

flexbiz-server

Version:

Flexible Server

9 lines (8 loc) 3.39 kB
const get=require("lodash/get"),crypto=require("crypto"); async function forEachItemHandler($flowState_instanceId$$,$listToIterate_node$$,$payload$$,$abortSignal_errorMsg$$,$engineContext_nodeId$$){const {updateNodeStatus:$updateNodeStatus$$,triggerDownstreamNodesInternal:$triggerDownstreamNodesInternal$$}=$engineContext_nodeId$$;$flowState_instanceId$$=$flowState_instanceId$$.instanceId;$engineContext_nodeId$$=$listToIterate_node$$.id;const $nodeLabel$$=$listToIterate_node$$.data?.name||$engineContext_nodeId$$||"For Each Item Node",$parentTriggerId$$=$payload$$?._triggerId|| "initial_loop",{listPath:$listPath$$="payload",outputItemAs:$outputItemAs$$=""}=$listToIterate_node$$.data;Logger.info(`[${$flowState_instanceId$$}|${$parentTriggerId$$}] ${$nodeLabel$$}: Executing. List path: '${$listPath$$}', Output item as: '${$outputItemAs$$}'`);if($abortSignal_errorMsg$$.aborted)throw Logger.info(`[${$flowState_instanceId$$}|${$parentTriggerId$$}] ${$nodeLabel$$}: Aborted before execution.`),new DOMException("Aborted before iterating list","AbortError");$listToIterate_node$$= $listPath$$.trim().toLowerCase()==="payload"||$listPath$$.trim()===""?$payload$$:get($payload$$,$listPath$$);if(!Array.isArray($listToIterate_node$$))return $abortSignal_errorMsg$$=`[${$flowState_instanceId$$}|${$parentTriggerId$$}] ${$nodeLabel$$}: Data at path '${$listPath$$}' is not an array. Received: ${typeof $listToIterate_node$$}`,Logger.error($abortSignal_errorMsg$$,$listToIterate_node$$),$updateNodeStatus$$($flowState_instanceId$$,$engineContext_nodeId$$,"failed",$abortSignal_errorMsg$$, $payload$$,$parentTriggerId$$),$payload$$;if($listToIterate_node$$.length===0)return Logger.info(`[${$flowState_instanceId$$}|${$parentTriggerId$$}] ${$nodeLabel$$}: List at path '${$listPath$$}' is empty. Nothing to iterate.`),$updateNodeStatus$$($flowState_instanceId$$,$engineContext_nodeId$$,"completed",{message:"Empty list, no iterations."},$payload$$,$parentTriggerId$$),$payload$$;Logger.info(`[${$flowState_instanceId$$}|${$parentTriggerId$$}] ${$nodeLabel$$}: Iterating over ${$listToIterate_node$$.length} items.`); for(let $i$$=0;$i$$<$listToIterate_node$$.length;$i$$++){if($abortSignal_errorMsg$$.aborted){Logger.info(`[${$flowState_instanceId$$}|${$parentTriggerId$$}] ${$nodeLabel$$}: Iteration aborted at item ${$i$$}.`);break}var $item_itemPayload$$=$listToIterate_node$$[$i$$];$item_itemPayload$$=$outputItemAs$$&&String($outputItemAs$$).trim()!==""?{[$outputItemAs$$]:$item_itemPayload$$}:$item_itemPayload$$;const $subTriggerId$$=`${$parentTriggerId$$}_item${$i$$}_${crypto.randomBytes(2).toString("hex")}`; typeof $item_itemPayload$$==="object"&&$item_itemPayload$$!==null?$item_itemPayload$$._triggerId=$subTriggerId$$:$item_itemPayload$$={value:$item_itemPayload$$,_triggerId:$subTriggerId$$};Logger.info(`[${$flowState_instanceId$$}|${$subTriggerId$$}] ${$nodeLabel$$}: Triggering downstream for item ${$i$$}:`,$item_itemPayload$$);$triggerDownstreamNodesInternal$$($flowState_instanceId$$,$engineContext_nodeId$$,$item_itemPayload$$,$subTriggerId$$)}Logger.info(`[${$flowState_instanceId$$}|${$parentTriggerId$$}] ${$nodeLabel$$}: All items dispatched for processing.`); $updateNodeStatus$$($flowState_instanceId$$,$engineContext_nodeId$$,"completed",{message:`Dispatched ${$listToIterate_node$$.length} items.`},$payload$$,$parentTriggerId$$)}module.exports=forEachItemHandler;