Esempio n. 1
0
        /// <summary>
        /// Command execute handler.
        /// </summary>
        /// <returns>0 success, otherwise failure.</returns>
        private int OnCommandExecute()
        {
            ExecuteArgument arg = ExecuteArgument.Create(this._appCmd.Options);

            if (arg == null)
            {
                return(1);
            }
            if (arg.Files.Count == 0 && arg.Config.Samples.Count == 0)
            {
                this.Log("No files to convert.");
                return(0);
            }

            List <Document> documents         = this.BuildAst(arg.AllFiles);
            List <Document> includedDocuments = (arg.Files == arg.AllFiles ? documents : documents.FindAll(doc => arg.Files.Contains(doc.Path)));

            if (this.ConfirmConvert(includedDocuments))
            {
                Project          project = new Project(arg.BasePath, documents, includedDocuments);
                ConverterContext context = this.CreateConverterContext(project, arg.Config);
                this.ClearOutput(arg);
                this.Convert(context, arg);
            }
            return(0);
        }
Esempio n. 2
0
        /// <summary>
        /// Convert typescript to csharp code.
        /// </summary>
        /// <param name="context">The convert context.</param>
        /// <param name="arg">Execute argument.</param>
        private void Convert(ConverterContext context, ExecuteArgument arg)
        {
            List <Document> avaiableDocs = this.FilterDocuments(context.Project.IncludeDocuments, context.Config.ExcludeTypes);

            // analyze
            DateTime startTime = DateTime.Now;

            this.Log(string.Format("Starting analyze files({0})", avaiableDocs.Count));
            List <Node> nodes = new List <Node>();

            foreach (Document doc in avaiableDocs)
            {
                nodes.Add(doc.Root);
            }
            context.Analyze(nodes);
            this.Log(string.Format("Finished after {0}s", (DateTime.Now - startTime).TotalSeconds.ToString("0.00")));

            // convert
            startTime = DateTime.Now;
            this.Log(string.Format("Starting convert files({0})", avaiableDocs.Count));
            foreach (Document doc in avaiableDocs)
            {
                DateTime beginTime = DateTime.Now;
                this.Log(string.Format("Starting convert file '{0}'", Path.GetFileNameWithoutExtension(doc.Path)));

                Output          output = arg.GetOutput(doc.Path);
                ConverterConfig config = context.Config;

                //convert
                config.Namespace            = output.Namespace;
                config.Usings               = output.Usings;
                config.PreferTypeScriptType = output.PreferTypeScriptType;

                string savePath = arg.GetSavePath(doc.Path, output);
                string code     = CodeHeaderText + doc.Root.ToCSharp();
                File.WriteAllText(savePath, code);

                //
                this.Log(string.Format("Finished after {0}s", (DateTime.Now - beginTime).TotalSeconds.ToString("0.00")));
            }
            this.Log(string.Format("Finished after {0}s", (DateTime.Now - startTime).TotalSeconds.ToString("0.00")));
        }
Esempio n. 3
0
        /// <summary>
        /// Clear output directory's files which not in input files.
        /// </summary>
        private void ClearOutput(ExecuteArgument arg)
        {
            if (!Directory.Exists(arg.Output.Path) || !Directory.Exists(arg.BasePath))
            {
                return;
            }

            List <string> deleteFiles       = new List <string>();
            List <string> allInputFiles     = arg.AllFiles;
            var           inputDirectories  = Directory.GetDirectories(arg.BasePath);
            var           outputDirectories = Directory.GetDirectories(arg.Output.Path).Where(dir1 =>
            {
                return(inputDirectories.Any(dir2 => Path.GetFileName(dir2) == Path.GetFileName(dir1)));
            });

            foreach (string dir in outputDirectories)
            {
                var existFiles = Directory.GetFiles(dir, "*.*", SearchOption.AllDirectories)
                                 .Where(s => s.EndsWith(".cs"))
                                 .Select(s => Path.GetRelativePath(dir, s));

                foreach (string file in existFiles)
                {
                    string file2 = file.Substring(0, file.LastIndexOf('.')) + ".ts.json";
                    if (!allInputFiles.Exists(f => f.EndsWith(file2)))
                    {
                        deleteFiles.Add(Path.Combine(dir, file));
                    }
                }
            }

            foreach (string file in deleteFiles)
            {
                File.Delete(file);
            }
        }