Improved named parameter generating support. Added the ability to specify the min amount of parameters before converting to named parameters. Made the feature work across all functions of the client code. Bumped package to 1.9.1

This commit is contained in:
2025-10-12 18:45:23 -07:00
parent f6b01af770
commit 528c841828
4 changed files with 34 additions and 9 deletions

View File

@@ -99,11 +99,11 @@ namespace MontoyaTech.Rest.Net.Example
File.WriteAllText("Client.cs", listener.GenerateCSharpClient());
File.WriteAllText("Client.js", listener.GenerateJavascriptClient(useJsonNames: true));
File.WriteAllText("Client.js", listener.GenerateJavascriptClient(useJsonNames: true, namedParameters: true));
File.WriteAllText("StaticClient.cs", listener.GenerateCSharpClient("StaticClient", staticCode: true));
File.WriteAllText("StaticClient.js", listener.GenerateJavascriptClient("StaticClient", staticCode: true, useJsonNames: true));
File.WriteAllText("StaticClient.js", listener.GenerateJavascriptClient("StaticClient", staticCode: true, useJsonNames: true, namedParameters: true));
Console.WriteLine("Generated Client.cs, Client.js, StaticClient.cs, StaticClient.js");
@@ -155,6 +155,8 @@ namespace MontoyaTech.Rest.Net.Example
Console.WriteLine("Download output:" + str);
}
Console.WriteLine("Done. Starting listener.");
listener.Block();
}

View File

@@ -17,7 +17,7 @@
<AssemblyName>MontoyaTech.Rest.Net</AssemblyName>
<RootNamespace>MontoyaTech.Rest.Net</RootNamespace>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Version>1.9.0</Version>
<Version>1.9.1</Version>
<PackageReleaseNotes></PackageReleaseNotes>
<PackageIcon>Logo_Symbol_Black_Outline.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>

View File

@@ -31,6 +31,11 @@ namespace MontoyaTech.Rest.Net
/// </summary>
public bool NamedParameters = false;
/// <summary>
/// The minimum number of parameters before using named parameters. Default is 0.
/// </summary>
public int NamedParameterMin = 0;
/// <summary>
/// Generates a Javascript Client from a given set of routes and returns it.
/// </summary>
@@ -79,7 +84,11 @@ namespace MontoyaTech.Rest.Net
writer.WriteLine("@param {Function} urlHandler An optional function to process request urls before they are sent. This must return the url.");
writer.WriteLine("@param {Function} requestHandler An optional function to process requests before they are sent. This must return the request.");
writer.Outdent().WriteLine("*/");
writer.Write("static Init(baseUrl, urlHandler = null, requestHandler = null) ").WriteLine("{").Indent();
if (this.NamedParameters)
writer.Write("static Init({ baseUrl, urlHandler = null, requestHandler = null } = {}) ");
else
writer.Write("static Init(baseUrl, urlHandler = null, requestHandler = null) ");
writer.WriteLine("{").Indent();
//Make sure the baseUrl isn't null or whitespace
writer.WriteBreak().WriteLine("if (baseUrl == null || baseUrl == undefined || baseUrl.trim() == '') {").Indent();
@@ -110,7 +119,11 @@ namespace MontoyaTech.Rest.Net
writer.WriteLine("@param {Function} urlHandler An optional function to process request urls before they are sent. This must return the url.");
writer.WriteLine("@param {Function} requestHandler An optional function to process requests before they are sent. This must return the request.");
writer.Outdent().WriteLine("*/");
writer.Write("constructor(baseUrl, urlHandler = null, requestHandler = null) ").WriteLine("{").Indent();
if (this.NamedParameters)
writer.Write("constructor({ baseUrl, urlHandler = null, requestHandler = null } = {}) ");
else
writer.Write("constructor(baseUrl, urlHandler = null, requestHandler = null) ");
writer.WriteLine("{").Indent();
//Make sure the baseUrl isn't null or whitespace
writer.WriteBreak().WriteLine("if (baseUrl == null || baseUrl == undefined || baseUrl.trim() == '') {").Indent();
@@ -373,7 +386,10 @@ namespace MontoyaTech.Rest.Net
writer.Outdent().WriteLine("*/");
writer.Write("constructor(");
writer.WriteAssert(this.UseJsonNames, "{");
var parameterCount = fields.Length + properties.Length;
writer.WriteAssert(this.UseJsonNames && parameterCount > this.NamedParameterMin, "{ ");
//Write the default fields
foreach (var field in fields)
@@ -393,7 +409,7 @@ namespace MontoyaTech.Rest.Net
writer.WriteSeparator().Write(EscapeName(property.Name)).Write(" = ").Write(this.GetTypeDefaultValue(property.PropertyType));
}
writer.WriteAssert(this.UseJsonNames, "} = {}");
writer.WriteAssert(this.UseJsonNames && parameterCount > this.NamedParameterMin, " } = {}");
writer.WriteLine(") {").Indent();
//Init the default fields
@@ -650,7 +666,11 @@ namespace MontoyaTech.Rest.Net
else
writer.Write($"async {(routeName == null ? methodInfo.Name : routeName.Name)}(");
//Generate the functions parameters
int parameterCount = (parameters.Length - 1) + (routeRequest != null ? 1 : 0) + (routeResponse != null && routeResponse.Parameter ? 1 : 0);
writer.WriteAssert(this.NamedParameters && parameterCount > this.NamedParameterMin, "{ ");
//Generate the functions parameters, skip the default context parameter.
if (parameters != null)
{
for (int i = 1; i < parameters.Length; i++)
@@ -672,6 +692,7 @@ namespace MontoyaTech.Rest.Net
writer.Write("input");
}
writer.WriteAssert(this.NamedParameters && parameterCount > this.NamedParameterMin, " } = {}");
writer.WriteLine(") {").Indent();
//Generate the url

View File

@@ -257,8 +257,9 @@ namespace MontoyaTech.Rest.Net
/// <param name="staticCode">Whether or not to generate a static client. Default is false.</param>
/// <param name="useJsonNames">Whether or not to use JSON Property name overrides during code generation. Default is false.</param>
/// <param name="namedParameters">Whether or not to generate routes that use named parameters over positional parameters. Default is false.</param>
/// <param name="namedParameterMin">The minimum number of parameters before converting to named parameters. Default is 0.</param>
/// <returns></returns>
public string GenerateJavascriptClient(string clientName = "Client", bool staticCode = false, bool useJsonNames = false, bool namedParameters = false)
public string GenerateJavascriptClient(string clientName = "Client", bool staticCode = false, bool useJsonNames = false, bool namedParameters = false, int namedParameterMin = 0)
{
var generator = new RestJavascriptClientGenerator();
@@ -266,6 +267,7 @@ namespace MontoyaTech.Rest.Net
generator.StaticCode = staticCode;
generator.UseJsonNames = useJsonNames;
generator.NamedParameters = namedParameters;
generator.NamedParameterMin = namedParameterMin;
return generator.Generate(this);
}