real compiler
Some checks failed
Build and Test / build-image (push) Failing after 17s

This commit is contained in:
2025-12-31 18:04:54 +03:00
parent 8c1cb1bb2c
commit a76dfacf96
2 changed files with 59 additions and 2 deletions

View File

@@ -1,2 +1,55 @@
// See https://aka.ms/new-console-template for more information
Console.WriteLine("Hello, World! {0}", string.Join("; ", args));
using System.Text.Json;
using s8n_runtime.ViewModels;
string workflowViewFile = Environment.GetEnvironmentVariable("WORKFLOW_FILE")!;
string projectDirectory = Environment.GetEnvironmentVariable("PROJECT_DIR") ?? $"/sources";
var workflow = JsonSerializer.Deserialize<S8nWorkflow>(File.OpenRead(workflowViewFile), JsonSerializerOptions.Web)!;
var edgesFile = Path.Combine("/sources", $"{workflow.Name}.Edges.cs");
var nodesFile = Path.Combine("/sources", $"{workflow.Name}.Nodes.cs");
// Linking
const string templateEdges = """
// !Warning! Please, don't change this file. Code autogenerated
#pragma warning disable CS8622 // Nullability of reference types in type of parameter doesn't match the target delegate (possibly because of nullability attributes).
public partial class {0}
{{
public void Connect()
{{
// edges connect here >>>
{1}
}}
public void Disconnect()
{{
// edges disconnect here >>>
{2}
}}
}}
""";
const string templateNodes = """
// !Warning! Please, don't change this file. Code autogenerated
public partial class {0}
{{
// nodes here >>>
{1}
}}
""";
static string GetConnection(WorkflowEdge edge) =>
$"{edge.Source}{(string.IsNullOrEmpty(edge.SourceHandle) ? string.Empty : ".")}{edge.SourceHandle ?? string.Empty} {(
edge.IsEvent ? "+" : string.Empty
)}= {edge.Target}{(string.IsNullOrEmpty(edge.TargetHandle) ? string.Empty : ".")}{edge.TargetHandle ?? string.Empty}";
string edgesConnections = string.Join("\n", workflow.Edges.Select(e => $"// {e.Id}\n {GetConnection(e)};"));
var edges = string.Format(templateEdges, workflow.Name, edgesConnections, edgesConnections.Replace('+', '-'));
string nodesFields = string.Join("\n ", workflow.Nodes.Select(n => $"// {n.Data?.Label}\n public {n.Class} {n.Id};"));
var nodes = string.Format(templateNodes, workflow.Name, nodesFields);
await File.WriteAllTextAsync(edgesFile, edges);
await File.WriteAllTextAsync(nodesFile, nodes);