Fixed bugs and improved named parameter documentation for the javascript client generator. Package version is now 1.9.3

This commit is contained in:
2025-10-17 16:02:45 -07:00
parent 49c24ca39f
commit 54de2def1f
3 changed files with 29 additions and 21 deletions

View File

@@ -103,7 +103,7 @@ namespace MontoyaTech.Rest.Net.Example
File.WriteAllText("StaticClient.cs", listener.GenerateCSharpClient("StaticClient", staticCode: true));
File.WriteAllText("StaticClient.js", listener.GenerateJavascriptClient("StaticClient", staticCode: true, useJsonNames: true, namedParameters: true));
File.WriteAllText("StaticClient.js", listener.GenerateJavascriptClient("StaticClient", staticCode: true, useJsonNames: true, namedParameters: true, namedParameterMin: 1));
Console.WriteLine("Generated Client.cs, Client.js, StaticClient.cs, StaticClient.js");

View File

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

View File

@@ -80,9 +80,10 @@ namespace MontoyaTech.Rest.Net
{
writer.WriteBreak().WriteLine("/**").Indent();
writer.WriteLine("Initializes this api client with a given baseUrl of where to send requests.");
writer.WriteLine("@param {string} baseUrl Base url of the server to make requests against.");
writer.WriteLine("@param {Function} urlHandler An optional function to process request urls before they are sent. This must return the url. Default is null.");
writer.WriteLine("@param {Function} requestHandler An optional function to process requests before they are sent. This must return the request. Default is null.");
writer.WriteLineAssert(this.NamedParameters, "@param {Object} params");
writer.WriteLine($"@param {{string}} {(this.NamedParameters ? "params." : "")}baseUrl Base url of the server to make requests against.");
writer.WriteLine($"@param {{Function}} {(this.NamedParameters ? "params." : "")}urlHandler An optional function to process request urls before they are sent. This must return the url. Default is null.");
writer.WriteLine($"@param {{Function}} {(this.NamedParameters ? "params." : "")}requestHandler An optional function to process requests before they are sent. This must return the request. Default is null.");
writer.Outdent().WriteLine("*/");
if (this.NamedParameters)
writer.Write("static Init({ baseUrl, urlHandler = null, requestHandler = null } = {}) ");
@@ -115,9 +116,10 @@ namespace MontoyaTech.Rest.Net
{
writer.WriteBreak().WriteLine("/**").Indent();
writer.WriteLine("Initializes this api client with a given baseUrl of where to send requests.");
writer.WriteLine("@param {string} baseUrl Base url of the server to make requests against.");
writer.WriteLine("@param {Function} urlHandler An optional function to process request urls before they are sent. This must return the url. Default is null.");
writer.WriteLine("@param {Function} requestHandler An optional function to process requests before they are sent. This must return the request. Default is null.");
writer.WriteLineAssert(this.NamedParameters, "@param {Object} params");
writer.WriteLine($"@param {{string}} {(this.NamedParameters ? "params." : "")}baseUrl Base url of the server to make requests against.");
writer.WriteLine($"@param {{Function}} {(this.NamedParameters ? "params." : "")}urlHandler An optional function to process request urls before they are sent. This must return the url. Default is null.");
writer.WriteLine($"@param {{Function}} {(this.NamedParameters ? "params." : "")}requestHandler An optional function to process requests before they are sent. This must return the request. Default is null.");
writer.Outdent().WriteLine("*/");
if (this.NamedParameters)
writer.Write("constructor({ baseUrl, urlHandler = null, requestHandler = null } = {}) ");
@@ -366,13 +368,18 @@ namespace MontoyaTech.Rest.Net
writer.WriteBreak().WriteLine("/**").Indent();
writer.WriteLine("@function");
//Docuemnt the fields
var parameterCount = fields.Length + properties.Length;
var namedParameters = this.NamedParameters && parameterCount > this.NamedParameterMin;
writer.WriteLineAssert(namedParameters, "@param {Object} params");
//Document the fields
foreach (var field in fields)
{
if (this.UseJsonNames)
writer.Write($"@param {{{this.GetTypeFullyResolvedName(field.FieldType)}}} {EscapeName(field.GetCustomAttribute<Newtonsoft.Json.JsonPropertyAttribute>()?.PropertyName ?? field.Name)}");
writer.Write($"@param {{{this.GetTypeFullyResolvedName(field.FieldType)}}} {(namedParameters ? "params." : "")}{EscapeName(field.GetCustomAttribute<Newtonsoft.Json.JsonPropertyAttribute>()?.PropertyName ?? field.Name)}");
else
writer.Write($"@param {{{this.GetTypeFullyResolvedName(field.FieldType)}}} {EscapeName(field.Name)}");
writer.Write($"@param {{{this.GetTypeFullyResolvedName(field.FieldType)}}} {(namedParameters ? "params." : "")}{EscapeName(field.Name)}");
writer.WriteSpacer().Write("Default is ").Write(this.GetTypeDefaultValue(field.FieldType)).WriteLine('.');
}
@@ -381,9 +388,9 @@ namespace MontoyaTech.Rest.Net
foreach (var property in properties)
{
if (this.UseJsonNames)
writer.Write($"@param {{{this.GetTypeFullyResolvedName(property.PropertyType)}}} {EscapeName(property.GetCustomAttribute<Newtonsoft.Json.JsonPropertyAttribute>()?.PropertyName ?? property.Name)}");
writer.Write($"@param {{{this.GetTypeFullyResolvedName(property.PropertyType)}}} {(namedParameters ? "params." : "")}{EscapeName(property.GetCustomAttribute<Newtonsoft.Json.JsonPropertyAttribute>()?.PropertyName ?? property.Name)}");
else
writer.Write($"@param {{{this.GetTypeFullyResolvedName(property.PropertyType)}}} {EscapeName(property.Name)}");
writer.Write($"@param {{{this.GetTypeFullyResolvedName(property.PropertyType)}}} {(namedParameters ? "params." : "")}{EscapeName(property.Name)}");
writer.WriteSpacer().Write("Default is ").Write(this.GetTypeDefaultValue(property.PropertyType)).WriteLine('.');
}
@@ -391,9 +398,7 @@ namespace MontoyaTech.Rest.Net
writer.Outdent().WriteLine("*/");
writer.Write("constructor(");
var parameterCount = fields.Length + properties.Length;
writer.WriteAssert(this.UseJsonNames && parameterCount > this.NamedParameterMin, "{ ");
writer.WriteAssert(namedParameters, "{ ");
//Write the default fields
foreach (var field in fields)
@@ -413,7 +418,7 @@ namespace MontoyaTech.Rest.Net
writer.WriteSeparator().Write(EscapeName(property.Name)).Write(" = ").Write(this.GetTypeDefaultValue(property.PropertyType));
}
writer.WriteAssert(this.UseJsonNames && parameterCount > this.NamedParameterMin, " } = {}");
writer.WriteAssert(namedParameters, " } = {}");
writer.WriteLine(") {").Indent();
//Init the default fields
@@ -647,14 +652,19 @@ namespace MontoyaTech.Rest.Net
writer.WriteLine("@async");
writer.WriteLine($"@name {(routeName == null ? methodInfo.Name : routeName.Name)}");
int parameterCount = (parameters.Length - 1) + (routeRequest != null ? 1 : 0) + (routeResponse != null && routeResponse.Parameter ? 1 : 0);
var namedParameters = this.NamedParameters && parameterCount > this.NamedParameterMin;
writer.WriteLineAssert(namedParameters, "@param {Object} params");
//Generate parameter docs
if (parameters != null)
for (int i = 1; i < parameters.Length; i++)
writer.WriteLine($"@param {{{this.GetTypeFullyResolvedName(parameters[i].ParameterType)}}} {parameters[i].Name}");
writer.WriteLine($"@param {{{this.GetTypeFullyResolvedName(parameters[i].ParameterType)}}} {(namedParameters ? "params." : "")}{parameters[i].Name}");
//Generate request doc if any
if (routeRequest != null)
writer.WriteLine($"@param {{{(routeRequest.Dynamic ? "Any" : this.GetTypeFullyResolvedName(routeRequest.RequestType))}}} body");
writer.WriteLine($"@param {{{(routeRequest.Dynamic ? "Any" : this.GetTypeFullyResolvedName(routeRequest.RequestType))}}} {(namedParameters ? "params." : "")}body");
//Generate response doc if any
if (routeResponse != null)
@@ -670,8 +680,6 @@ namespace MontoyaTech.Rest.Net
else
writer.Write($"async {(routeName == null ? methodInfo.Name : routeName.Name)}(");
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.