protected virtual void WriteMethod(ParsedApiDesc desc, CustomIndentedTextWriter writer) { string returnString; if (desc.Action.ReturnType == null) { returnString = "any"; } else { returnString = _converter.GetTypeScriptName(desc.Action.ReturnType); } var paramString = desc.ParamString; if (!string.IsNullOrWhiteSpace(paramString)) { paramString += ", "; } string filesString = ""; if (desc.PostParameter != null && desc.PostParameter.ParameterType.Name == "IFormCollection") { filesString = "_files?: File[], "; } var modifier = "public"; if (_options.HideActionsWithNoReturn && returnString.StartsWith("any")) { writer.WriteLine("// This method is hidden because it's return type is not specified and HideActionsWithNoReturn=True"); writer.WriteLine("// Either add a return type (check [ProducesResponseType]) or set HideActionsWithNoReturn to False"); modifier = "protected"; } writer.WriteLine($"{modifier} {desc.NameString}({paramString}{filesString}{optionsVariableName}?: {_options.OptionsClassName}): {_options.PromiseType}<{returnString}> {{"); writer.Indent++; if (desc.PostParameter != null) { if (String.IsNullOrWhiteSpace(filesString)) { var pinit = this.CreateTypeInitializerMethod(desc.PostParameter.ParameterType); if (!String.IsNullOrWhiteSpace(pinit)) { writer.WriteLine($"{desc.PostParameter.ParameterName} = from_{pinit}({desc.PostParameter.ParameterName});"); } } else { writer.WriteLine($"if ({checkRealFn}(_files))"); writer.Indent++; writer.WriteLine($"for (const _f of _files) {{ {desc.PostParameter.ParameterName}.append(\"files[]\", _f); }}"); writer.Indent--; } } var excParams = desc.ModelParameter == null ? desc.GetParameters : new[] { desc.ModelParameter }; writer.WriteLine($"var url = this.endpoints.{desc.NameString}({String.Join(", ", excParams.Select(p => p.ParameterName))});"); var ajaxCtx = new AjaxExecContext { Ajax = ajaxVariableName, HttpMethod = desc.Action.Method.ToString().ToLower(), Options = optionsVariableName, Post = desc.PostParameter?.ParameterName ?? "null", Url = "url" }; writer.Write("return " + _options.FnAjaxExecute(ajaxCtx).TrimEnd(';')); var initializer = this.CreateTypeInitializerMethod(desc.Action.ReturnType); if (String.IsNullOrWhiteSpace(initializer)) { writer.WriteLine(";"); } else { writer.WriteLine($".then(to_{initializer});"); } writer.Indent--; writer.WriteLine("}"); }
protected virtual void WriteEndpoint(ParsedApiDesc desc, CustomIndentedTextWriter writer) { var line = $"{desc.NameString}: ({desc.EndpointParamString}): string => {desc.PathString},"; writer.WriteLine(line.Replace(" + \"\",", ",")); }