예제 #1
0
        public static string GetWorkingDirectory(ConvertService.LogAction log, string workingDirectory)
        {
            string localWorkingDir;
            var    dir = Directory.GetCurrentDirectory();

            if (string.IsNullOrEmpty(workingDirectory))
            {
                log("Using Default Working Directory {0}", dir);
                localWorkingDir = dir;
            }
            else
            {
                var localdir = Path.Combine(dir, workingDirectory);

                if (!Directory.Exists(localdir))
                {
                    log("Working Directory does not exist {0}, creating..", localdir);
                    Directory.CreateDirectory(localdir).Create();
                    localWorkingDir = localdir;
                }
                else
                {
                    log("Working Directory {0}", localdir);
                    localWorkingDir = localdir;
                }
            }

            return(localWorkingDir);
        }
예제 #2
0
        public static string GetConvertDirectory(ConvertService.LogAction log, string convertDirectory)
        {
            var dir = Directory.GetCurrentDirectory();

            if (string.IsNullOrEmpty(convertDirectory))
            {
                log("Using Default Convert Directory {0} - this does not always update", dir);
                return(dir);
            }
            else
            {
                var localdir = Path.Combine(dir, convertDirectory);

                if (!Directory.Exists(localdir))
                {
                    log("Convert Directory does not exist {0}, creating..", localdir);
                }
                else
                {
                    log("Convert Directory {0}", localdir);
                    DeleteDirectory(localdir, 0);
                }

                Directory.CreateDirectory(localdir).Create();
                return(localdir);
            }
        }
예제 #3
0
        public static void Convert(ConvertService.LogAction log, List <ModelFile> models, ConvertServiceParameters parameters)
        {
            log("Converting..");

            foreach (var file in models)
            {
                var directoryPath = Path.Combine(parameters.ConvertDirectory, file.Structure);

                var relativePath = parameters.PathStyle == PathStyle.Kebab
                    ? ConvertServiceHelper.ToKebabCasePath(file.Structure)
                    : file.Structure;

                DirectoryInfo di = Directory.CreateDirectory(Path.Combine(parameters.ConvertDirectory, relativePath));
                di.Create();

                string fileName = (parameters.PathStyle == PathStyle.Kebab ? ConvertServiceHelper.ToKebabCase(file.Name) : ConvertServiceHelper.ToCamelCase(file.Name))
                                  + (parameters.IsModelInTSFileName ? ".model" : "")
                                  + ".ts";
                log("Creating file {0}", fileName);
                string saveDir = Path.Combine(directoryPath, fileName);

                using var stream = GetStream(saveDir, 0);
                using var f      =
                          new StreamWriter(stream, System.Text.Encoding.UTF8, 1024, false);
                var importing = false;               //only used for formatting
                var imports   = new List <string>(); //used for duplication

                if (parameters.IsAutoGeneratedTag)
                {
                    f.WriteLine("/* Auto Generated */");
                    f.WriteLine();
                }

                if (file.IsEnum)
                {
                    f.WriteLine(
                        "export enum "
                        + file.Name
                        // + (String.IsNullOrEmpty(file.Inherits) ? "" : (" : " + file.Inherits)) //typescript doesn't extend enums like c#
                        + " {"
                        );

                    foreach (var obj in file.EnumObjects)
                    {
                        if (!String.IsNullOrEmpty(obj.Name))
                        {  //not an empty obj
                            var tsName = ConvertServiceHelper.ToCamelCase(obj.Name);
                            var str    = tsName;
                            if (parameters.EnumValues == EnumValues.Strings)
                            {
                                str += " = '" + tsName + "'";
                            }
                            else if (!obj.IsImplicit)
                            {
                                str += " = " + obj.Value;
                            }
                            str += ",";

                            f.WriteLine("    " + str);
                        }
                    }

                    f.WriteLine("}");
                }
                else
                {
                    foreach (var obj in file.Objects)
                    {
                        if (!string.IsNullOrEmpty(file.Inherits))
                        {
                            importing = true;

                            var import = "import { " + file.Inherits + " } from \""
                                         + (parameters.PathStyle == PathStyle.Kebab ? ConvertServiceHelper.ToKebabCasePath(file.InheritenceStructure) : file.InheritenceStructure) + "\";";

                            if (!imports.Contains(import))
                            {
                                f.WriteLine(import);
                                imports.Add(import);
                            }
                        }

                        if (obj.UserDefined)
                        {
                            importing = true;
                            var import = "import { " + obj.Type + " } from \""
                                         + (parameters.PathStyle == PathStyle.Kebab ? ConvertServiceHelper.ToKebabCasePath(obj.UserDefinedImport) : obj.UserDefinedImport) + "\";";

                            if (!imports.Contains(import))
                            {
                                f.WriteLine(import);
                                imports.Add(import);
                            }
                        }

                        if (obj.IsContainer)
                        {
                            foreach (LineObject innerObj in obj.Container)
                            {
                                if (innerObj.UserDefined)
                                {
                                    importing = true;
                                    var import = "import { " + innerObj.Type + " } from \""
                                                 + (parameters.PathStyle == PathStyle.Kebab ? ConvertServiceHelper.ToKebabCasePath(innerObj.UserDefinedImport) : innerObj.UserDefinedImport) + "\";";

                                    if (!imports.Contains(import))
                                    {
                                        f.WriteLine(import);
                                        imports.Add(import);
                                    }
                                }
                            }
                        }
                    }

                    if (parameters.Implements.ContainsKey(file.Name))
                    {
                        var implements = parameters.Implements[file.Name];

                        if (string.IsNullOrEmpty(implements.from))
                        {
                            continue;
                        }

                        importing = true;

                        var import = "import { " + implements.type + " } from \""
                                     + implements.from + "\";";
                        if (!imports.Contains(import))
                        {
                            f.WriteLine(import);
                            imports.Add(import);
                        }
                    }

                    if (parameters.Extends.ContainsKey(file.Name))
                    {
                        var extends = parameters.Extends[file.Name];

                        if (string.IsNullOrEmpty(extends.from))
                        {
                            continue;
                        }

                        importing = true;

                        var import = "import { " + extends.type + " } from \""
                                     + extends.from + "\";";
                        if (!imports.Contains(import))
                        {
                            f.WriteLine(import);
                            imports.Add(import);
                        }
                    }

                    if (importing)
                    {
                        f.WriteLine("");
                    }

                    if (!string.IsNullOrEmpty(file.Inherits) &&
                        parameters.Extends.ContainsKey(file.Name))
                    {
                        throw new InvalidOperationException($"Class cannot be inherited and Extended. File name: {file.Name}, inherits: {file.Inherits}, Extends: {parameters.Extends[file.Name]} ");
                    }

                    string inherits = null;
                    if (!string.IsNullOrEmpty(file.Inherits))
                    {
                        inherits = file.Inherits;
                    }
                    else if (parameters.Extends.ContainsKey(file.Name))
                    {
                        inherits = parameters.Extends[file.Name].type;
                    }

                    f.WriteLine(
                        (parameters.ConvertToType == ConvertToType.Interface ? "export interface " : "export class ")
                        + file.Name
                        + (string.IsNullOrEmpty(inherits) ? "" : (" extends " + inherits)) //if class has inheritance
                        + (!parameters.Implements.ContainsKey(file.Name) ? "" : (" implements " + parameters.Implements[file.Name].type))
                        + " {"
                        );

                    foreach (var obj in file.Objects)
                    {
                        if (obj.IsContainer)
                        {
                            var str =
                                (parameters.ConvertToType == ConvertToType.Interface ? "" : "public ")
                                + ConvertServiceHelper.ToCamelCase(obj.VariableName)
                                + (obj.IsOptional ? "?" : string.Empty)
                                + ": "
                                + $"{obj.Type}<{obj.Container[0].Type}, {obj.Container[1].Type}>;";

                            f.WriteLine("    " + str);
                        }
                        else if (!string.IsNullOrEmpty(obj.VariableName))
                        {  //not an empty obj
                            var str =
                                (parameters.ConvertToType == ConvertToType.Interface ? "" : "public ")
                                + ConvertServiceHelper.ToCamelCase(obj.VariableName)
                                + (obj.IsOptional ? "?" : string.Empty)
                                + ": "
                                + obj.Type
                                + (obj.IsArray ? "[]" : string.Empty);
                            if (!obj.IsOptional && parameters.ConvertToType == ConvertToType.Class)
                            {
                                str += " = ";
                                if (obj.IsArray)
                                {
                                    str += "[]";
                                }
                                else
                                {
                                    if (obj.UserDefined)
                                    {
                                        var isEnum = models.Any(m => m.IsEnum && m.Name == obj.Type);
                                        if (isEnum)
                                        {
                                            str += "0";
                                        }
                                        else
                                        {
                                            str += "new " + obj.Type + "()";
                                        }
                                    }
                                    else
                                    {
                                        switch (obj.Type)
                                        {
                                        case "number":
                                            str += "0";
                                            break;

                                        case "string":
                                            str += "''";
                                            break;

                                        case "boolean":
                                            str += "false";
                                            break;

                                        case "Date":
                                            str += "new Date()";
                                            break;
                                        }
                                    }
                                }
                            }

                            str += ";";

                            f.WriteLine("    " + str);
                        }
                    }

                    f.WriteLine("}");
                }
            }
        }