resolveOutputs method
Implementation
Future<Map<String, dynamic>> resolveOutputs({
required String nodeId,
required Map<String, RuleNode> nodes,
required Map<String, dynamic> context,
String? outputName,
}) async {
final node = nodes[nodeId];
if (node == null) {
return {};
}
// Get the output connections
final connections = _castToStringMap(node.data['connections']) ?? {};
final outputs = _castToStringMap(connections['outputs']) ?? {};
if (outputs.isEmpty) {
return {};
}
final targetOutput = outputName ?? outputs.keys.first;
if (!outputs.containsKey(targetOutput)) {
return {};
}
final connectionsList = outputs[targetOutput] as List<dynamic>? ?? [];
final results = <String, dynamic>{};
// Process each connected node
for (final connection in connectionsList) {
final connectionMap = connection as Map<String, dynamic>;
final targetNodeId = connectionMap['nodeId'] as String;
final targetPortName = connectionMap['portName'] as String;
try {
final result = await callNode(
nodeId: targetNodeId,
nodes: nodes,
context: context,
);
results[targetPortName] = result;
} catch (e) {
// Continue processing other connections even if one fails
results[targetPortName] = {'error': e.toString()};
}
}
return results;
}