示例#1
0
        protected override byte[] GenerateCode(string inputFileName, string inputFileContent)
        {
            byte[] mainFileBytes = null;
            var    targetItem    = Dte.Solution.FindProjectItem(inputFileName);

            if (targetItem != null)
            {
                var targetFileInfo = new FileInfo(targetItem.FileNames[0]);

                var resxResults = GetRelatedFilesNames(inputFileName).Select(x => resxResultProvider.GetResult(x));

                List <string> generatedFileNames = new List <string>();

                ResxResult structureItem = null;
                foreach (var item in resxResults)
                {
                    var fileName = GetFileName(targetFileInfo, item);
                    if (item.IsDefault)
                    {
                        structureItem = item;

                        using (var ms = new MemoryStream())
                        {
                            resxTypeScriptGenerator.Generate(ms, FileNamespace, structureItem, item);
                            mainFileBytes = ms.ToArray();
                        }
                    }
                    else
                    {
                        using (var fs = File.Open(fileName, FileMode.Create, FileAccess.Write))
                        {
                            resxTypeScriptGenerator.Generate(fs, FileNamespace, structureItem, item);
                        }

                        // only add the file to the project for localized files
                        // visual studio handles the addition of the default file
                        targetItem.ProjectItems.AddFromFile(fileName);
                    }

                    generatedFileNames.Add(fileName);
                }

                // ensure only generated files are child-items
                foreach (ProjectItem item in targetItem.ProjectItems)
                {
                    if (!generatedFileNames.Contains(item.FileNames[0]))
                    {
                        item.Delete();
                    }
                }
            }

            return(mainFileBytes);
        }
示例#2
0
 protected string[] GenerateCode(TypeScriptGenerationOptions options, ICustomTypeGenerator customTypeGenerator, Type rootType)
 {
     var generator = new TypeScriptGenerator(options, customTypeGenerator, new TypesProvider(rootType));
     if (JavaScriptTypeChecker == JavaScriptTypeChecker.Flow && options.EnumGenerationMode == EnumGenerationMode.TypeScriptEnum)
         throw new ArgumentException("Invalid EnumGenerationMode for JavaScriptTypeChecker.Flow");
     return generator.Generate().Select(x => x.GenerateCode(new DefaultCodeGenerationContext(JavaScriptTypeChecker)).Replace("\r\n", "\n")).ToArray();
 }
        private static void TryGenerate(Func <string, string> pluralize)
        {
            var options = TypeScriptGenerationOptions.Default;

            options.Pluralize = pluralize;
            var generator = new TypeScriptGenerator(options, CustomTypeGenerator.Null, TypesProvider.Default);

            generator.Generate();
        }
        private static string[] GenerateCode(Type rootType)
        {
            var generator = new TypeScriptGenerator(new TypeScriptGenerationOptions {
                EnumGenerationMode = EnumGenerationMode.FixedStringsAndDictionary
            },
                                                    CustomTypeGenerator.Null, new RoslynTypesProvider(rootType.FullName));

            return(generator.Generate().Select(x => x.GenerateCode(new DefaultCodeGenerationContext(JavaScriptTypeChecker.TypeScript)).Replace("\r\n", "\n")).ToArray());
        }
示例#5
0
文件: Program.cs 项目: Annxii/ResxTS
        static void Main(string[] args)
        {
            var provider = new ResxResultProvider();
            var result   = provider.GetResult("Testresources.resx");

            var generator = new TypeScriptGenerator();

            var output = generator.Generate("anx.localized", result);
        }
示例#6
0
        public void TypescriptGenerator_HandlesCollectionsSuitably()
        {
            var generator = new TypeScriptGenerator();
            var actual    = generator.Generate(new List <Type> {
                typeof(CollectionTestClasses.CollectionTestClass)
            });
            var expected = Results.Resources.CollectionTest;

            StringAssert.HaveTrimmedContent(expected, actual);
        }
示例#7
0
        public void TypescriptGenerator_GeneratesWorkingTypescript()
        {
            var generator = new TypeScriptGenerator();
            var actual    = generator.Generate(new List <Type> {
                typeof(NamespaceOfTestClasses.Subclass)
            });
            var expected = Results.Resources.TypeScriptResult;

            StringAssert.HaveTrimmedContent(expected, actual);
        }
        private static void GenerateSource(Options options)
        {
            var inputPaths = new List <string>();

            if (options.InputFiles != null)
            {
                inputPaths.AddRange(options.InputFiles);
            }
            if (options.InputDirectories != null)
            {
                var searchOptions = options.RecursiveInputDirectories
                                        ? SearchOption.AllDirectories
                                        : SearchOption.TopDirectoryOnly;

                inputPaths.AddRange(options.InputDirectories
                                    .SelectMany(path => Directory.EnumerateFiles(path, "*.cs", searchOptions)));
            }

            var useStdOut  = string.IsNullOrEmpty(options.OutputDirectory);
            var inputFiles = inputPaths.Select(File.ReadAllText).ToArray();
            var output     = useStdOut ? (TextWriter) new StringWriter() : new StreamWriter(options.OutputDirectory);

            var generator = new TypeScriptGenerator(output)
            {
                CustomTypePrefix           = options.TypePrefix,
                ConvertFieldsToCamelCase   = options.MakeCamelCase,
                ConvertClassesToInterfaces = options.MakeInterfaces,
                MakeEnumConst = options.ConstEnum,
            };

            if (options.Verbose)
            {
                generator.OnUnhandledSyntaxNode += node => Console.Error.WriteLine($"[WARNING] Unhandled syntax node {node.Kind()}");
            }

            generator.ArrayTypeNames.UnionWith(options.ArrayTypes);
            foreach (var typeConversion in options.AliasTypes)
            {
                var types      = typeConversion.Split(':');
                var csharp     = types.Length >= 1 ? types[0] : "???";
                var typescript = types.Length >= 2 ? types[1] : "???";
                generator.TypeNameConversions[csharp] = typescript;
            }

            generator.Generate(inputFiles);

            if (useStdOut)
            {
                Console.WriteLine(output);
            }
            output.Close();
        }
        public static void AssertEqual(string input, string expectedOutput, Action <TypeScriptGenerator> options = null)
        {
            var sb        = new StringBuilder();
            var generator = new TypeScriptGenerator(new StringWriter(sb));

            options?.Invoke(generator);
            generator.Generate(input);

            var expexted = NormalizeTypescriptSource(expectedOutput);
            var actual   = NormalizeTypescriptSource(sb.ToString());

            Assert.AreEqual(expexted, actual);
        }
示例#10
0
        public void CustomGeneratorBuilderTest()
        {
            var(customGenerator, typesProvider) = GetCustomization <TTypesProvider>(typeof(BuilderCustomGenerator), typeof(ArrayRootType));
            var generator = new TypeScriptGenerator(TypeScriptGenerationOptions.Default, customGenerator, typesProvider);
            var units     = generator.Generate();
            var code      = units.Select(x => x.GenerateCode(new DefaultCodeGenerationContext()).Replace("\r\n", "\n")).ToArray();

            units.Select(x => x.Path).Should().Equal("", "a/b/c");
            var expectedCodeRoot  = GetExpectedCode("CustomGenerator/custom-generator-builder");
            var expectedCodeChild = GetExpectedCode("CustomGenerator/custom-generator-builder-child");

            code.Length.Should().Be(2);
            code[0].Diff(expectedCodeRoot).ShouldBeEmpty();
            code[1].Diff(expectedCodeChild).ShouldBeEmpty();
        }
        public void CustomGeneratorBuilderTest()
        {
            var customGenerator = new CustomTypeGenerator()
                .WithTypeLocation<AnotherCustomType>(x => "a/b/c")
                .WithTypeRedirect<byte[]>("ByteArray", @"DataTypes\ByteArray")
                .WithTypeBuildingContext<HashSet<string>>(x => new CollectionTypeBuildingContext(x));

            var generator = new TypeScriptGenerator(TypeScriptGenerationOptions.Default, customGenerator, new RootTypesProvider(typeof(ArrayRootType)));
            var units = generator.Generate();
            var code = units.Select(x => x.GenerateCode(new DefaultCodeGenerationContext(JavaScriptTypeChecker)).Replace("\r\n", "\n")).ToArray();

            units.Select(x => x.Path).Should().Equal("", "a/b/c");
            var expectedCodeRoot = GetExpectedCode("CustomGenerator/custom-generator-builder");
            var expectedCodeChild = GetExpectedCode("CustomGenerator/custom-generator-builder-child");
            code.Length.Should().Be(2);
            code[0].Diff(expectedCodeRoot).ShouldBeEmpty();
            code[1].Diff(expectedCodeChild).ShouldBeEmpty();
        }
示例#12
0
        public static void AssertGenerator(TypeInfo[] input, string expectedOuput, Action <TypeScriptGenerator> options = null)
        {
            string Normalize(string value)
            {
                var whitespace = new Regex(@"\s+");

                return(whitespace.Replace(value, ""));
            }

            var writer    = new StringWriter();
            var generator = new TypeScriptGenerator(writer);

            options?.Invoke(generator);
            generator.Generate(input);

            var actual   = Normalize(writer.ToString());
            var expected = Normalize(expectedOuput);

            Assert.AreEqual(expected, actual);
        }
        protected string[] GenerateCode(TypeScriptGenerationOptions options, ICustomTypeGenerator customTypeGenerator, IRootTypesProvider typesProvider)
        {
            var generator = new TypeScriptGenerator(options, customTypeGenerator, typesProvider);

            return(generator.Generate().Select(x => x.GenerateCode(new DefaultCodeGenerationContext()).Replace("\r\n", "\n")).ToArray());
        }
示例#14
0
        private static string[] GenerateCode(Type rootType)
        {
            var generator = new TypeScriptGenerator(TypeScriptGenerationOptions.Default, CustomTypeGenerator.Null, new RoslynTypesProvider(rootType.FullName));

            return(generator.Generate().Select(x => x.GenerateCode(new DefaultCodeGenerationContext()).Replace("\r\n", "\n")).ToArray());
        }