Advanced node types for PocketFlow
Provides conditional, loop, timeout, and other specialized node types.
Types
ConditionalNode = ref object of BaseNode conditionFunc*: proc (ctx: PfContext; params: JsonNode): Future[bool] {....gcsafe.} trueNode*: BaseNode falseNode*: BaseNode
- Node that branches based on a condition
LoopNode = ref object of BaseNode itemsFunc*: proc (ctx: PfContext; params: JsonNode): Future[JsonNode] {....gcsafe.} bodyNode*: BaseNode maxIterations*: int aggregateResults*: bool
- Node that loops over items
MapNode = ref object of BaseNode mapFunc*: proc (ctx: PfContext; item: JsonNode): Future[JsonNode] {....gcsafe.} maxConcurrency*: int
- Maps a function over a collection
TimeoutNode = ref object of BaseNode innerNode*: BaseNode timeoutMs*: int
- Wraps a node with timeout protection
Procs
proc newConditionalNode(condition: proc (ctx: PfContext; params: JsonNode): Future[ bool] {....gcsafe.}; trueNode: BaseNode; falseNode: BaseNode = nil): ConditionalNode {. ...raises: [], tags: [], forbids: [].}
- Creates a conditional node that branches based on a condition
proc newLoopNode(items: proc (ctx: PfContext; params: JsonNode): Future[JsonNode] {. ...gcsafe.}; body: BaseNode; maxIterations: int = 100; aggregateResults: bool = true): LoopNode {....raises: [], tags: [], forbids: [].}
- Creates a loop node that iterates over items
proc newMapNode(mapFunc: proc (ctx: PfContext; item: JsonNode): Future[JsonNode] {. ...gcsafe.}; maxConcurrency: int = 0): MapNode {....raises: [], tags: [], forbids: [].}
- Creates a map node that applies a function to each item
proc newTimeoutNode(innerNode: BaseNode; timeoutMs: int): TimeoutNode {. ...raises: [], tags: [], forbids: [].}
- Creates a timeout node that wraps another node
Methods
method internalRun(node: ConditionalNode; ctx: PfContext): Future[string] {. ...gcsafe, stackTrace: false, raises: [Exception, ValueError], tags: [RootEffect], forbids: [].}
method internalRun(node: LoopNode; ctx: PfContext): Future[string] {....gcsafe, stackTrace: false, raises: [Exception, ValueError, ValidationError, KeyError], tags: [RootEffect], forbids: [].}
method internalRun(node: MapNode; ctx: PfContext): Future[string] {....gcsafe, stackTrace: false, raises: [Exception, ValueError, ValidationError, KeyError], tags: [RootEffect], forbids: [].}
method internalRun(node: TimeoutNode; ctx: PfContext): Future[string] {....gcsafe, stackTrace: false, raises: [Exception, ValueError, TimeoutError], tags: [RootEffect, TimeEffect], forbids: [].}