From a42e71af5eb3be966aa5662d841ab209726e1a75 Mon Sep 17 00:00:00 2001 From: Ankitkumar Satapara Date: Sun, 19 Apr 2026 00:52:41 +0530 Subject: [PATCH] Added debug node for the debugging and logging --- Examples/Nodify.Calculator/Executor.cs | 27 +++++++++++++++++ Examples/Nodify.Calculator/GraphSerializer.cs | 4 +++ .../Operations/OperationFactory.cs | 29 +++++++++++++++++++ .../SystemOperationViewModel.cs | 3 +- 4 files changed, 62 insertions(+), 1 deletion(-) diff --git a/Examples/Nodify.Calculator/Executor.cs b/Examples/Nodify.Calculator/Executor.cs index 8bf1afa..115efa3 100644 --- a/Examples/Nodify.Calculator/Executor.cs +++ b/Examples/Nodify.Calculator/Executor.cs @@ -428,6 +428,33 @@ namespace Nodify.Calculator OnLogMe?.Invoke($"Auth node resolved. Base URL: {_authBaseUrl}, Auth Type: {_authType}"); return; } + if (op is SystemOperationViewModel debugSysOp && debugSysOp.SystemOperationType == SystemOperations.DEBUG) + { + // Find the data input connection (non-triangle) + var debugInputCons = connections.Where(c => c.Input.Operation == op && c.Input.Shape != ConnectorShape.Triangle).ToList(); + if (debugInputCons.Any()) + { + var sourceConn = debugInputCons.First(); + var sourceNodeId = sourceConn.Output.Operation.NodeId; + if (outputs.TryGetValue(sourceNodeId, out var debugVal)) + { + OnLogMe?.Invoke($"[DEBUG] {debugVal}"); + } + else if (sourceConn.Output.Value != null) + { + OnLogMe?.Invoke($"[DEBUG] {sourceConn.Output.Value}"); + } + else + { + OnLogMe?.Invoke($"[DEBUG] (no value)", logType.Warning); + } + } + else + { + OnLogMe?.Invoke($"[DEBUG] No input connected", logType.Warning); + } + return; + } // Handle Function nodes — execute the inner flow if (op is FunctionOperationViewModel funcOp) diff --git a/Examples/Nodify.Calculator/GraphSerializer.cs b/Examples/Nodify.Calculator/GraphSerializer.cs index be33d9a..459d4d5 100644 --- a/Examples/Nodify.Calculator/GraphSerializer.cs +++ b/Examples/Nodify.Calculator/GraphSerializer.cs @@ -234,6 +234,10 @@ namespace Nodify.Calculator case SystemOperations.END: info.Input.Add(""); // flow input only break; + case SystemOperations.DEBUG: + info.Input.Add("Value"); + info.IsFlowNode = true; + break; case SystemOperations.TAKE: info.Input.Add("List"); break; diff --git a/Examples/Nodify.Calculator/Operations/OperationFactory.cs b/Examples/Nodify.Calculator/Operations/OperationFactory.cs index 1f727e9..5e472cf 100644 --- a/Examples/Nodify.Calculator/Operations/OperationFactory.cs +++ b/Examples/Nodify.Calculator/Operations/OperationFactory.cs @@ -99,8 +99,18 @@ namespace Nodify.Calculator authNode.Input.Add("Username"); authNode.Input.Add("Password"); + var debugNode = new OperationInfoViewModel() + { + Title = "Debug", + Type = OperationType.System, + sysOp = SystemOperations.DEBUG, + IsFlowNode = true + }; + debugNode.Input.Add("Value"); + systemNodes.Add(authNode); systemNodes.Add(copynode); + systemNodes.Add(debugNode); systemNodes.Add(begin); systemNodes.Add(ending); systemNodes.Add(debugAndCreateModels); @@ -321,6 +331,25 @@ namespace Nodify.Calculator return funcOp; } + if (info.sysOp == SystemOperations.DEBUG) + { + var debugOp = new SystemOperationViewModel + { + Title = info.Title, + SystemOperationType = SystemOperations.DEBUG + }; + // Flow connectors + debugOp.Input.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle }); + debugOp.Output.Add(new ConnectorViewModel { Title = "", Shape = ConnectorShape.Triangle, IsInput = false }); + // Data input + foreach (var inp in input) + { + inp.ConnectorColor = Color.LimeGreen; + debugOp.Input.Add(inp); + } + return debugOp; + } + if (info.sysOp == SystemOperations.AUTH) { var authOp = new AuthOperationViewModel diff --git a/Examples/Nodify.Calculator/SystemOperationViewModel.cs b/Examples/Nodify.Calculator/SystemOperationViewModel.cs index 3be161b..55deb5a 100644 --- a/Examples/Nodify.Calculator/SystemOperationViewModel.cs +++ b/Examples/Nodify.Calculator/SystemOperationViewModel.cs @@ -18,7 +18,8 @@ namespace Nodify.Calculator PARSEJSON, SPLIT, AUTH, - FUNCTION + FUNCTION, + DEBUG } public class SystemOperationViewModel : OperationViewModel