/// <summary> /// Builds an array property. /// </summary> /// <param name="sb">The string builder.</param> /// <param name="propEntry">The property entry.</param> /// <param name="options">The options.</param> private static void BuildArrayProperty(StringBuilder sb, PropertyBag propEntry, JsGeneratorOptions options) { sb.AppendLine(string.Format("\tthis.{0} = new Array(cons.{0} == null ? 0 : cons.{1}.length );", Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase), Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase))); sb.AppendLine($"\tif(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} != null) {{"); sb.AppendLine( $"\t\tfor (i = 0, length = cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}.length; i < length; i++) {{"); var collectionType = propEntry.CollectionInnerTypes.First(); if (!collectionType.IsPrimitiveType) { sb.AppendLine( $"\t\t\tif (!overrideObj.{Helpers.GetName(collectionType.Type.Name, options.ClassNameConstantsToRemove)}) {{"); sb.AppendLine( $"\t\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[i] = new {options.OutputNamespace}.{Helpers.GetName(collectionType.Type.Name, options.ClassNameConstantsToRemove)}(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[i]);"); sb.AppendLine("\t\t\t} else {"); sb.AppendLine( $"\t\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[i] = new overrideObj.{Helpers.GetName(collectionType.Type.Name, options.ClassNameConstantsToRemove)}(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[i], overrideObj);"); sb.AppendLine("\t\t\t}"); } else { sb.AppendLine( $"\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[i] = cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[i];"); } sb.AppendLine("\t\t}"); sb.AppendLine("\t}"); }
/// <summary> /// Builds an object/reference property. /// </summary> /// <param name="sb">The string builder.</param> /// <param name="propEntry">The property entry.</param> /// <param name="options">The options.</param> private static void BuildObjectProperty(StringBuilder sb, PropertyBag propEntry, JsGeneratorOptions options) { sb.AppendLine($"\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = null;"); sb.AppendLine($"\tif (cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}) {{"); sb.AppendLine( $"\t\tif (!overrideObj.{Helpers.GetName(propEntry.PropertyType.Name, options.ClassNameConstantsToRemove)}) {{"); sb.AppendLine( $"\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = new {options.OutputNamespace}.{Helpers.GetName(propEntry.PropertyType.Name, options.ClassNameConstantsToRemove)}(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)});"); sb.AppendLine("\t\t} else {"); sb.AppendLine( $"\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = new overrideObj.{Helpers.GetName(propEntry.PropertyType.Name, options.ClassNameConstantsToRemove)}(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}, overrideObj);"); sb.AppendLine("\t\t}"); sb.AppendLine("\t}"); }
/// <summary> /// Builds a primitive property. /// </summary> /// <param name="propEntry">The property entry.</param> /// <param name="sb">The string builder.</param> /// <param name="options">The options.</param> private static void BuildPrimitiveProperty(PropertyBag propEntry, StringBuilder sb, JsGeneratorOptions options) { if (propEntry.TypeDefinition.IsEnum) { sb.AppendLine( propEntry.PropertyType == typeof(string) ? $"\t{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}: '{propEntry.DefaultValue}'," : $"\t{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}: {propEntry.DefaultValue},"); } else if (propEntry.HasDefaultValue) { var writtenValue = propEntry.DefaultValue is bool ? propEntry.DefaultValue.ToString().ToLower() : propEntry.DefaultValue; sb.AppendLine( $"\tif (!cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}) {{"); sb.AppendLine( propEntry.PropertyType == typeof(string) ? $"\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = '{writtenValue}';" : $"\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = {writtenValue};"); sb.AppendLine("\t} else {"); sb.AppendLine( $"\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)};"); sb.AppendLine("\t}"); } else { sb.AppendLine( $"\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)};"); } }
/// <summary> /// Builds a dictionary property. /// </summary> /// <param name="sb">The string builder.</param> /// <param name="propEntry">The property entry.</param> /// <param name="options">The options.</param> private static void BuildDictionaryProperty(StringBuilder sb, PropertyBag propEntry, JsGeneratorOptions options) { sb.AppendLine($"\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} = {{}};"); sb.AppendLine($"\tif(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)} != null) {{"); sb.AppendLine( $"\t\tfor (var key in cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}) {{"); sb.AppendLine( $"\t\t\tif (cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}.hasOwnProperty(key)) {{"); var keyType = propEntry.CollectionInnerTypes.First(p => p.IsDictionaryKey); if (!AllowedDictionaryKeyTypes.Contains(keyType.Type)) { throw new Exception( $"Dictionaries must have strings, enums, or integers as keys, error found in type: {propEntry.TypeName}"); } var valueType = propEntry.CollectionInnerTypes.First(p => !p.IsDictionaryKey); if (!valueType.IsPrimitiveType) { sb.AppendLine( $"\t\t\t\tif (!overrideObj.{Helpers.GetName(valueType.Type.Name, options.ClassNameConstantsToRemove)}) {{"); sb.AppendLine( $"\t\t\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[key] = new {options.OutputNamespace}.{Helpers.GetName(valueType.Type.Name, options.ClassNameConstantsToRemove)}(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[key]);"); sb.AppendLine("\t\t\t\t} else {"); sb.AppendLine( $"\t\t\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[key] = new overrideObj.{Helpers.GetName(valueType.Type.Name, options.ClassNameConstantsToRemove)}(cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[key], overrideObj);"); sb.AppendLine("\t\t\t\t}"); } else { sb.AppendLine( $"\t\t\t\tthis.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[key] = cons.{Helpers.ToCamelCase(propEntry.PropertyName, options.CamelCase)}[key];"); } sb.AppendLine("\t\t\t}"); sb.AppendLine("\t\t}"); sb.AppendLine("\t}"); }