ソースを参照

feat: the runner understands a node whose ports come from its config

fszontagh 1 ヶ月 前
親
コミット
00485f1001

+ 6 - 0
src/runner/node_registry.cpp

@@ -76,6 +76,12 @@ NodeDefinition NodeDefinition::fromProto(const proto::NodeDefinitionWithCode& pr
         }
     } catch (...) {}
 
+    try {
+        if (!proto.dynamic_outputs().empty() && proto.dynamic_outputs() != "null") {
+            node.dynamic_outputs = nlohmann::json::parse(proto.dynamic_outputs());
+        }
+    } catch (...) {}
+
     // Parse inputs
     for (const auto& input : proto.inputs()) {
         NodeIO io;

+ 1 - 0
src/runner/node_registry.hpp

@@ -39,6 +39,7 @@ struct NodeDefinition {
     nlohmann::json output_schema;
     std::vector<NodeIO> inputs;
     std::vector<NodeIO> outputs;
+    nlohmann::json dynamic_outputs;
     bool is_trigger = false;
     int64_t last_modified = 0;
 

+ 4 - 2
src/runner/workflow_engine.cpp

@@ -427,7 +427,8 @@ Result<ExecutionResult> WorkflowEngine::execute(const Workflow& workflow,
             // after it can run.
             if (node->disabled) {
                 auto disabled_def = registry_.getNode(node->type);
-                const bool decides_branch = disabled_def && disabled_def->outputs.size() > 1;
+                const bool decides_branch = disabled_def &&
+                    (disabled_def->outputs.size() > 1 || !disabled_def->dynamic_outputs.is_null());
 
                 NodeExecutionResult disabled_result;
                 disabled_result.node_id = node_id;
@@ -1515,7 +1516,8 @@ bool WorkflowEngine::executeLoopBody(
                 disabled_result.status = NodeStatus::Disabled;
                 disabled_result.input = nlohmann::json::object();
                 disabled_result.output = nlohmann::json::object();
-                if (disabled_def && disabled_def->outputs.size() > 1) {
+                if (disabled_def && (disabled_def->outputs.size() > 1 ||
+                                     !disabled_def->dynamic_outputs.is_null())) {
                     disabled_result.output["_activeBranch"] = "";
                 }
                 disabled_result.started_at = TimeUtils::nowMs();