mirror of
https://github.com/SamueleLorefice/ComfySharp
synced 2026-01-15 04:53:42 +00:00
Started implementing runtime source code generation
This commit is contained in:
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="NLog" Version="5.2.7" />
|
<PackageReference Include="NLog" Version="5.2.7" />
|
||||||
|
<PackageReference Include="System.CodeDom" Version="8.0.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -1,6 +1,12 @@
|
|||||||
using System.Text.Json;
|
using System.Diagnostics;
|
||||||
|
using System.Text.Json;
|
||||||
using System.Dynamic;
|
using System.Dynamic;
|
||||||
using System.Runtime.CompilerServices;
|
using System.Runtime.CompilerServices;
|
||||||
|
using Microsoft.CSharp;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.CodeDom;
|
||||||
|
using System.CodeDom.Compiler;
|
||||||
|
|
||||||
|
|
||||||
namespace ComfySharp;
|
namespace ComfySharp;
|
||||||
|
|
||||||
@@ -20,6 +26,7 @@ public class NodeDBGenerator {
|
|||||||
public int Count => nodes.Count;
|
public int Count => nodes.Count;
|
||||||
private int typeFields;
|
private int typeFields;
|
||||||
private int enumFields;
|
private int enumFields;
|
||||||
|
private int stringListFields;
|
||||||
|
|
||||||
public NodeDBGenerator(ConversionSettings settings) {
|
public NodeDBGenerator(ConversionSettings settings) {
|
||||||
nodes = new();
|
nodes = new();
|
||||||
@@ -85,6 +92,7 @@ public class NodeDBGenerator {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
stringListFields++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -93,14 +101,16 @@ public class NodeDBGenerator {
|
|||||||
/// <property name="document">JsonDocument containing the nodes off an objectInfo api call</property>
|
/// <property name="document">JsonDocument containing the nodes off an objectInfo api call</property>
|
||||||
public void GenerateClasses(JsonDocument document) {
|
public void GenerateClasses(JsonDocument document) {
|
||||||
Logger.Info("NodeDB Scan phase 1: building Types, Enum and StringLists DataBases");
|
Logger.Info("NodeDB Scan phase 1: building Types, Enum and StringLists DataBases");
|
||||||
foreach (var node in document.RootElement.EnumerateObject())
|
var timer = new Stopwatch();
|
||||||
ScanNode(node);
|
timer.Start();
|
||||||
|
foreach (var node in document.RootElement.EnumerateObject()) ScanNode(node);
|
||||||
|
timer.Stop();
|
||||||
|
Logger.Info($"NodeDB Scan phase 1: finished in {timer.ElapsedMilliseconds} ms");
|
||||||
string types = "";
|
string types = "";
|
||||||
foreach (var knownType in knownTypes)
|
foreach (var knownType in knownTypes)
|
||||||
types += $"\t{knownType}";
|
types += $"\t{knownType}";
|
||||||
Logger.Debug($"List of recognized Types:\n{types}");
|
Logger.Trace($"List of recognized Types:\n{types}");
|
||||||
Logger.Info($"Total amount of types iterated: {typeFields}\n");
|
Logger.Info($"Total amount of detected types\\iterated:\t\t {knownTypes.Count}\t\\{typeFields}");
|
||||||
|
|
||||||
string enums = "";
|
string enums = "";
|
||||||
foreach (var knownEnum in knownEnums) {
|
foreach (var knownEnum in knownEnums) {
|
||||||
@@ -109,11 +119,37 @@ public class NodeDBGenerator {
|
|||||||
enums += $"\t{value}";
|
enums += $"\t{value}";
|
||||||
enums += "\n";
|
enums += "\n";
|
||||||
}
|
}
|
||||||
Logger.Debug($"List of recognized Enums: {enums}");
|
Logger.Trace($"List of recognized Enums: {enums}");
|
||||||
Logger.Info($"Total amount of enums iterated: {enumFields}\n");
|
Logger.Info($"Total amount of enums detected\\iterated:\t\t {knownEnums.Count}\t\\{enumFields}");
|
||||||
|
Logger.Info($"Total amount of stringLists detected\\iterated:\t {knownStringLists.Count}\t\\{knownStringLists.Count}");
|
||||||
|
|
||||||
Logger.Info("NodeDB Scan phase 2: generating types");
|
Logger.Info("NodeDB Scan phase 2: generating types");
|
||||||
|
IndentedTextWriter provider = new(new StringWriter());
|
||||||
|
CSharpCodeProvider codeProvider = new();
|
||||||
|
CodeCompileUnit compileUnit = new();
|
||||||
|
CodeNamespace ns = new("ComfySharp.Types.Generated");
|
||||||
|
ns.Imports.AddRange(new CodeNamespaceImport[] { new ("System"), new ("System.Collections.Generics"), new ("ComfySharp") });
|
||||||
|
compileUnit.Namespaces.Add(ns);
|
||||||
|
foreach (var knownEnum in knownEnums) {
|
||||||
|
CodeTypeDeclaration enumType = new() {
|
||||||
|
Name = knownEnum.Key,
|
||||||
|
IsEnum = true,
|
||||||
|
IsPartial = false,
|
||||||
|
Attributes = MemberAttributes.Public
|
||||||
|
};
|
||||||
|
foreach (var value in knownEnum.Value) {
|
||||||
|
enumType.Members.Add(new CodeMemberField(knownEnum.Key, value));
|
||||||
|
}
|
||||||
|
ns.Types.Add(enumType);
|
||||||
|
codeProvider.GenerateCodeFromCompileUnit(compileUnit, provider, new() {
|
||||||
|
BlankLinesBetweenMembers = false,
|
||||||
|
BracingStyle = "Block",
|
||||||
|
VerbatimOrder = true,
|
||||||
|
ElseOnClosing = false,
|
||||||
|
IndentString = "\t"
|
||||||
|
});
|
||||||
|
var enumcode = provider.InnerWriter.ToString();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user