Пример #1
0
        public string ProvideParameterType(IModelType type, bool inModelsModule = false)
        {
            if (type == null)
            {
                throw new ArgumentNullException("type");
            }

            var builder = new StringBuilder("");

            if (type.IsPrimaryType(KnownPrimaryType.Date) ||
                type.IsPrimaryType(KnownPrimaryType.DateTime) ||
                type.IsPrimaryType(KnownPrimaryType.DateTimeRfc1123) ||
                type.IsPrimaryType(KnownPrimaryType.UnixTime))
            {
                builder.Append("Date | string");
            }
            else if (type.IsSequenceContainingDateKind())
            {
                builder.Append("Array<Date> | Array<string>");
            }
            else if (type.IsDictionaryContainingDateKind())
            {
                builder.Append("{ [key: string]: Date } | { [key: string]: string }");
            }
            else
            {
                builder.Append(type.TSType(inModelsModule));
            }
            return(builder.ToString());
        }
Пример #2
0
        public string GetTypeText(IModelType modelType, string moduleName = null)
        {
            var seqType = modelType as SequenceTypeTs;

            var prefix = string.IsNullOrWhiteSpace(moduleName) ? "" : $"{moduleName}.";

            var name = "";

            if (seqType == null)
            {
                name = modelType.GetImplementationName();

                if (modelType.IsEnumType())
                {
                    return(name);
                }

                return(modelType.IsPrimaryType() ? name : $"{prefix}I{name}");
            }

            var elementType = seqType.ElementType;

            name = elementType.GetImplementationName();

            return(SequenceTypeTs.CreateSeqTypeText(elementType.IsPrimaryType() ? name : $"{prefix}I{name}"));
        }
Пример #3
0
        private bool NeedsSpecialSerialization(IModelType type)
        {
            var known = type as PrimaryType;

            return(known != null &&
                   type.IsPrimaryType(KnownPrimaryType.ByteArray) ||
                   type is SequenceType);
        }
Пример #4
0
        /// <summary>
        /// Returns true if the <paramref name="type"/> is a PrimaryType with KnownPrimaryType matching <paramref name="typeToMatch"/>
        /// or a DictionaryType with ValueType matching <paramref name="typeToMatch"/> or a SequenceType matching <paramref name="typeToMatch"/>
        /// </summary>
        /// <param name="type"></param>
        /// <param name="typeToMatch"></param>
        /// <returns></returns>
        public static bool IsOrContainsPrimaryType(this IModelType type, KnownPrimaryType typeToMatch)
        {
            if (type == null)
            {
                return(false);
            }

            if (type.IsPrimaryType(typeToMatch) ||
                type.IsDictionaryContainingType(typeToMatch) ||
                type.IsSequenceContainingType(typeToMatch))
            {
                return(true);
            }
            return(false);
        }
 protected bool IsUnixTime(IModelType modelType)
 {
     return(modelType.IsPrimaryType(KnownPrimaryType.DateTimeRfc1123));
 }
 protected bool IsDate(IModelType modelType)
 {
     return(modelType.IsPrimaryType(KnownPrimaryType.Date));
 }
Пример #7
0
 /// <summary>
 /// Determine whether a model should be serializable.
 /// </summary>
 /// <param name="type">The type to check.</param>
 public static bool IsSerializable(this IModelType type)
 {
     return(!type.IsPrimaryType(KnownPrimaryType.Object));
 }
Пример #8
0
        public ModelsModel Bind(CodeModelTs codeModel)
        {
            var models = new ModelsModel
            {
                Header = new HeaderModel
                {
                    ApiVersion = codeModel.ApiVersion
                },
                RequestModels  = new List <Model.Model>(),
                ResponseModels = new List <Model.Model>(),
                EnumModels     = new List <EnumModel>()
            };

            var modelTypesFromDefinition = codeModel.ModelTypes.ToList();

            var enumsInModels = new List <Tuple <string, IModelType> >();

            Func <IVariable, ModelProperty> getPropertyModel =
                variable =>
            {
                var    propertyType = variable.ModelType;
                string typeName     = null;

                //if (propertyType.IsEnumType())
                //{
                //    var enumType = (EnumTypeTs) propertyType;
                //    typeName = enumType.GetImplementationName(variable);
                //    enumsInModels.Add(new Tuple<string, IModelType>(typeName, propertyType));
                //}

                return(new ModelProperty
                {
                    Name = variable.Name.ToCamelCase(),
                    IsRequired = variable.IsRequired,
                    TypeName = typeName ?? GetTypeText(propertyType)
                });
            };

            foreach (var method in codeModel.Methods)
            {
                string     requestName  = null;
                string     responseName = null;
                IModelType modelType    = null;

                if (!TryGetResponseName(method, out modelType, out responseName, out requestName))
                {
                    continue;
                }

                var requestModelType = new Model.Model
                {
                    Name       = requestName,
                    Properties = new List <ModelProperty>()
                };

                foreach (Parameter parameter in method.Parameters)
                {
                    requestModelType.Properties.Add(getPropertyModel(parameter));
                }

                models.RequestModels.Add(requestModelType);

                if (modelType.IsPrimaryType() || modelType.IsSequenceType() || modelType.IsEnumType())
                {
                    continue;
                }

                var responseModelType = new Model.Model
                {
                    Name       = responseName,
                    Properties = new List <ModelProperty>()
                };

                var type = modelTypesFromDefinition.FirstOrDefault(m => m.ClassName == modelType.ClassName);

                if (type == null)
                {
                    continue;
                }

                modelTypesFromDefinition.Remove(type);

                foreach (var property in type.Properties)
                {
                    responseModelType.Properties.Add(getPropertyModel(property));
                }

                models.ResponseModels.Add(responseModelType);
            }

            foreach (var modelType in modelTypesFromDefinition)
            {
                if (modelType.IsPrimaryType() || modelType.IsSequenceType() && modelType.IsEnumType())
                {
                    continue;
                }

                var model = new Model.Model
                {
                    Name       = GetTypeText(modelType),
                    Properties = new List <ModelProperty>()
                };

                models.ResponseModels.Add(model);

                foreach (var property in modelType.Properties)
                {
                    model.Properties.Add(getPropertyModel(property));
                }
            }

            // disable enum generation for now #ranantawat.

            // foreach (var pair in enumsInModels)
            // {
            //    var enumType = (EnumTypeTs) pair.Item2;
            //    var enumModel = new EnumModel {Name = pair.Item1};

            //    if (enumType.ModelAsString)
            //    {
            //        for (var index = 0; index < enumType.EnumValues.Length; index++)
            //        {
            //            var value = enumType.Children.Cast<EnumValue>().ToArray()[index];
            //            enumModel.Values.Add(value.Name, index);
            //        }
            //    }

            //    models.EnumModels.Add(enumModel);
            // }

            models.EnumModels = models.EnumModels.Distinct().ToList();

            foreach (EnumType enumType in codeModel.EnumTypes.ToArray())
            {
                models.EnumModels.Add(new EnumModel
                {
                    Name   = enumType.DeclarationName,
                    Values = new Dictionary <string, object>()
                });
            }

            return(models);
        }
        public static string InitializePrimaryType(this IModelType paramType, string paramName, bool isBrowser = false)
        {
            var paramValue = "\"\"";

            if (paramType.IsPrimaryType(KnownPrimaryType.String))
            {
                if (paramName.EqualsIgnoreCase("location"))
                {
                    paramValue = "\"westus\"";
                }
                else
                {
                    paramValue = $"\"test{paramName.ToCamelCase()}\"";
                }
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.Date))
            {
                paramValue = "new Date().toISOString().substring(0, 10)";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.DateTime))
            {
                paramValue = "new Date().toISOString()";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.DateTimeRfc1123))
            {
                paramValue = "new Date().toUTCString()";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.UnixTime))
            {
                paramValue = "new Date()";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.TimeSpan))
            {
                paramValue = "\"P1Y2M3DT4H5M6S\"";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.Boolean))
            {
                paramValue = "true";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.Int) || paramType.IsPrimaryType(KnownPrimaryType.Long))
            {
                paramValue = "1";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.Decimal) || paramType.IsPrimaryType(KnownPrimaryType.Double))
            {
                paramValue = "1.01";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.Object))
            {
                paramValue = "{}";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.Uuid))
            {
                paramValue = "ec7b1657-199d-4d8a-bbb2-89a11a42e02a";
            }
            else if (paramType.IsPrimaryType(KnownPrimaryType.Stream))
            {
                paramValue = isBrowser ? "new ReadableStream()" : "new require(\"stream\").Readable()";
            }
            return(paramValue);
        }
 protected bool IsDateTimeRfc1123(IModelType modelType)
 {
     return modelType.IsPrimaryType(KnownPrimaryType.DateTimeRfc1123);
 }