| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using Abp.Collections.Extensions;
- using Abp.Extensions;
- using Abp.Web.Api.Modeling;
- namespace Abp.Web.Api.ProxyScripting.Generators
- {
- public static class ProxyScriptingJsFuncHelper
- {
- private const string ValidJsVariableNameChars = "abcdefghijklmnopqrstuxwvyzABCDEFGHIJKLMNOPQRSTUXWVYZ0123456789_";
- private static readonly HashSet<string> ReservedWords = new HashSet<string> {
- "abstract",
- "else",
- "instanceof",
- "super",
- "boolean",
- "enum",
- "int",
- "switch",
- "break",
- "export",
- "interface",
- "synchronized",
- "byte",
- "extends",
- "let",
- "this",
- "case",
- "false",
- "long",
- "throw",
- "catch",
- "final",
- "native",
- "throws",
- "char",
- "finally",
- "new",
- "transient",
- "class",
- "float",
- "null",
- "true",
- "const",
- "for",
- "package",
- "try",
- "continue",
- "function",
- "private",
- "typeof",
- "debugger",
- "goto",
- "protected",
- "var",
- "default",
- "if",
- "public",
- "void",
- "delete",
- "implements",
- "return",
- "volatile",
- "do",
- "import",
- "short",
- "while",
- "double",
- "in",
- "static",
- "with"
- };
- public static string NormalizeJsVariableName(string name, string additionalChars = "")
- {
- var validChars = ValidJsVariableNameChars + additionalChars;
- var sb = new StringBuilder(name);
- sb.Replace('-', '_');
- //Delete invalid chars
- foreach (var c in name)
- {
- if (!validChars.Contains(c))
- {
- sb.Replace(c.ToString(), "");
- }
- }
- if (sb.Length == 0)
- {
- return "_" + Guid.NewGuid().ToString("N").Left(8);
- }
- return sb.ToString();
- }
- public static string WrapWithBracketsOrWithDotPrefix(string name)
- {
- if (!ReservedWords.Contains(name))
- {
- return "." + name;
- }
- return "['" + name + "']";
- }
- public static string GetParamNameInJsFunc(ParameterApiDescriptionModel parameterInfo)
- {
- return parameterInfo.Name == parameterInfo.NameOnMethod
- ? NormalizeJsVariableName(parameterInfo.Name.ToCamelCase(), ".")
- : NormalizeJsVariableName(parameterInfo.NameOnMethod.ToCamelCase()) + "." + NormalizeJsVariableName(parameterInfo.Name.ToCamelCase(), ".");
- }
- public static string CreateJsObjectLiteral(ParameterApiDescriptionModel[] parameters, int indent = 0)
- {
- var sb = new StringBuilder();
- sb.AppendLine("{");
- foreach (var prm in parameters)
- {
- sb.AppendLine($"{new string(' ', indent)} '{prm.Name}': {GetParamNameInJsFunc(prm)}");
- }
- sb.Append(new string(' ', indent) + "}");
- return sb.ToString();
- }
- public static string GenerateJsFuncParameterList(ActionApiDescriptionModel action, string ajaxParametersName)
- {
- var methodParamNames = action.Parameters.Select(p => p.NameOnMethod).Distinct().ToList();
- methodParamNames.Add(ajaxParametersName);
- return methodParamNames.Select(prmName => NormalizeJsVariableName(prmName.ToCamelCase())).JoinAsString(", ");
- }
- }
- }
|