internal static StringBuilder GenerateJsProxyScript(Incubator incubator, string[] classes, bool includeLocal = false) { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("(function(b, d, $, win){"); stringBuilder.AppendLine(DaoProxyRegistration.GetDaoJsCtorScript(incubator, classes).ToString()); foreach (string className in classes) { Type type = incubator[className]; string varName = GetVarName(type); string var = string.Format("\tb.{0}", className); stringBuilder.Append(var); stringBuilder.Append(" = {};\r\n"); stringBuilder.Append(var); stringBuilder.Append(".proxyName = \"{0}\";\r\n"._Format(varName)); foreach (MethodInfo method in type.GetMethods()) { if (WillProxyMethod(method, includeLocal)) { stringBuilder.AppendLine(GetMethodCall(type, method)); } } MethodInfo modelTypeMethod = type.GetMethod("GetDaoType"); if (modelTypeMethod != null && modelTypeMethod.ReturnType == typeof(Type)) { Type modelType = (Type)modelTypeMethod.Invoke(null, null); stringBuilder.Append("\td.entities = d.entities || {};"); stringBuilder.Append("\td.fks = d.fks || [];"); stringBuilder.AppendFormat("\td.entities.{0} = b.{0};\r\n", className); stringBuilder.AppendFormat("\td.entities.{0}.ctx = '{1}';\r\n", className, Dao.ConnectionName(modelType)); stringBuilder.AppendFormat("\td.entities.{0}.cols = [];\r\n", className); PropertyInfo[] modelProps = modelType.GetProperties(); foreach (PropertyInfo prop in modelProps) { if (prop.HasCustomAttributeOfType(out ColumnAttribute col)) { string typeName = prop.PropertyType.Name; if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>)) { typeName = prop.PropertyType.GetGenericArguments()[0].Name; } stringBuilder.AppendFormat("\td.entities.{0}.cols.push({{name: '{1}', type: '{2}', nullable: {3} }});\r\n", className, col.Name, typeName, col.AllowNull ? "true" : "false"); } if (prop.HasCustomAttributeOfType(out ForeignKeyAttribute fk)) { stringBuilder.AppendFormat("\td.fks.push({{ pk: '{0}', pt: '{1}', fk: '{2}', ft: '{3}', nullable: {4} }});\r\n", fk.ReferencedKey, fk.ReferencedTable, fk.Name, fk.Table, fk.AllowNull ? "true" : "false"); } } } stringBuilder.AppendFormat("\twin.{0} = win.{0} || {{}};\r\n", varName); stringBuilder.AppendFormat("\t$.extend(win.{0}, {1});\r\n", varName, var.Trim()); stringBuilder.AppendFormat("\twin.{0}.className = '{1}';\r\n", varName, className); stringBuilder.AppendFormat("\td.{0} = b.{1};\r\n", varName, className); } stringBuilder.AppendLine("})(bam, dao, jQuery, window || {});"); return(stringBuilder); }
internal static StringBuilder GenerateJsProxyScript(Incubator incubator, string[] classes, bool includeLocal = false, IRequest request = null) { string daoNs = request?.QueryString?["daoNs"] ?? "dao"; string bamNs = request?.QueryString?["bamNs"] ?? "bam"; StringBuilder stringBuilder = new StringBuilder(); stringBuilder.AppendLine("(function(b, d, $, win){"); stringBuilder.AppendLine(DaoProxyRegistration.GetDaoJsCtorScript(incubator, classes).ToString()); foreach (string className in classes) { Type type = incubator[className]; string varName = GetVarName(type); string var = string.Format("\tb.{0}", className); stringBuilder.Append(var); stringBuilder.Append(" = {};\r\n"); stringBuilder.Append(var); stringBuilder.Append(".proxyName = \"{0}\";\r\n"._Format(varName)); if (request != null && request.Url != null) { string protocol = request.Url.Scheme; string host = request.Url.Host; int port = request.Url.Port; if (!string.IsNullOrEmpty(request.Headers["X-Forwarded-For"])) // if the request was passed through a proxy set the port to 80 { port = 80; } stringBuilder.Append(var); stringBuilder.Append(".protocol = \"{0}\";\r\n"._Format(protocol)); stringBuilder.Append(var); stringBuilder.Append(".host = \"{0}\";\r\n"._Format(host)); stringBuilder.Append(var); stringBuilder.Append(".port = \"{0}\";\r\n"._Format(port)); stringBuilder.Append($"\tb.proxy('{className}', " + "{" + $"protocol: '{protocol}:', host: '{host}', port: '{port}'" + "});\r\n"); } foreach (MethodInfo method in type.GetMethods()) { if (method.WillProxy(includeLocal)) { stringBuilder.AppendLine(GetJsMethodCall(type, method)); } } MethodInfo modelTypeMethod = type.GetMethod("GetDaoType"); if (modelTypeMethod != null && modelTypeMethod.ReturnType == typeof(Type)) { Type modelType = (Type)modelTypeMethod.Invoke(null, null); stringBuilder.Append("\td.entities = d.entities || {};"); stringBuilder.Append("\td.fks = d.fks || [];"); stringBuilder.AppendFormat("\td.entities.{0} = b.{0};\r\n", className); stringBuilder.AppendFormat("\td.entities.{0}.ctx = '{1}';\r\n", className, Dao.ConnectionName(modelType)); stringBuilder.AppendFormat("\td.entities.{0}.cols = [];\r\n", className); PropertyInfo[] modelProps = modelType.GetProperties(); foreach (PropertyInfo prop in modelProps) { if (prop.HasCustomAttributeOfType(out ColumnAttribute col)) { string typeName = prop.PropertyType.Name; if (prop.PropertyType.IsGenericType && prop.PropertyType.GetGenericTypeDefinition() == typeof(Nullable <>)) { typeName = prop.PropertyType.GetGenericArguments()[0].Name; } stringBuilder.AppendFormat("\td.entities.{0}.cols.push({{name: '{1}', type: '{2}', nullable: {3} }});\r\n", className, col.Name, typeName, col.AllowNull ? "true" : "false"); } if (prop.HasCustomAttributeOfType(out ForeignKeyAttribute fk)) { stringBuilder.AppendFormat("\td.fks.push({{ pk: '{0}', pt: '{1}', fk: '{2}', ft: '{3}', nullable: {4} }});\r\n", fk.ReferencedKey, fk.ReferencedTable, fk.Name, fk.Table, fk.AllowNull ? "true" : "false"); } } } stringBuilder.AppendFormat("\twin.{0} = win.{0} || {{}};\r\n", varName); stringBuilder.AppendFormat("\t$.extend(win.{0}, {1});\r\n", varName, var.Trim()); stringBuilder.AppendFormat("\twin.{0}.className = '{1}';\r\n", varName, className); stringBuilder.AppendFormat("\td.{0} = b.{1};\r\n", varName, className); } stringBuilder.AppendLine("})(" + bamNs + ", " + daoNs + ", jQuery, window || {});"); return(stringBuilder); }
protected void OnInitializedAppDaoTemplates(string appName, DaoProxyRegistration reg) { InitializedAppDaoTemplates?.Invoke(appName, reg); }
public string Ctors() { return(DaoProxyRegistration.GetDaoJsCtorScript(_serviceProvider, _serviceProvider.ClassNames).ToString()); }
protected void OnInitializedCommonDaoTemplates(DaoProxyRegistration reg) { InitializedCommonDaoTemplates?.Invoke(reg); }