示例#1
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();
 }
        public static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomainOnUnhandledException;
            Parser.Default.ParseArguments <Options>(args).WithParsed(o =>
            {
                var targetAssembly      = AssemblyUtils.GetAssemblies(o.Assembly);
                var customTypeGenerator = GetSingleImplementation <ICustomTypeGenerator>(targetAssembly);
                var typesProvider       = GetSingleImplementation <ITypesProvider>(targetAssembly);
                if (customTypeGenerator == null || typesProvider == null)
                {
                    return;
                }

                var options = new TypeScriptGenerationOptions
                {
                    EnableExplicitNullability = o.EnableExplicitNullability,
                    EnableOptionalProperties  = o.EnableOptionalProperties,
                    EnumGenerationMode        = o.EnumGenerationMode,
                    UseGlobalNullable         = o.UseGlobalNullable,
                    NullabilityMode           = o.NullabilityMode,
                    LinterDisableMode         = o.LinterDisableMode,
                };
                var typeGenerator = new TypeScriptGenerator(options, customTypeGenerator, typesProvider);
                typeGenerator.GenerateFiles(o.OutputDirectory, JavaScriptTypeChecker.TypeScript);
            });
        }
 public ArrayTypeBuildingContext([NotNull] Type arrayType,
                                 [CanBeNull] ICustomAttributeProvider customAttributeProvider,
                                 [NotNull] TypeScriptGenerationOptions options)
 {
     elementType = GetElementType(arrayType);
     this.customAttributeProvider = customAttributeProvider;
     this.options = options;
 }
        public void FlowAndTypeScriptEnumIncompatibilityTest()
        {
            var options = new TypeScriptGenerationOptions {
                EnumGenerationMode = EnumGenerationMode.TypeScriptEnum
            };
            var    generator       = new TypeScriptGenerator(options, CustomTypeGenerator.Null, TypesProvider.Default);
            Action filesGeneration = () => generator.GenerateFiles("", JavaScriptTypeChecker.Flow);

            filesGeneration.Should().Throw <ArgumentException>().And.Message.Should().Be("Flow is not compatible with TypeScript enums");
        }
        public void TestNullableReferences()
        {
            var options = new TypeScriptGenerationOptions {
                NullabilityMode = NullabilityMode.NullableReference, EnumGenerationMode = EnumGenerationMode.FixedStringsAndDictionary
            };
            var generatedCode = GenerateCode(options, CustomTypeGenerator.Null, typeof(NullableReferenceType)).Single();
            var expectedCode  = GetExpectedCode("Options/nullable-reference");

            generatedCode.Diff(expectedCode).ShouldBeEmpty();
        }
        public void TestNullableReferences()
        {
            var options = new TypeScriptGenerationOptions {
                NullabilityMode = NullabilityMode.NullableReference
            };

            var(customGenerator, typesProvider) = GetCustomization <TTypesProvider>(null, typeof(NullableReferenceType));
            var generatedCode = GenerateCode(options, customGenerator, typesProvider).Single();
            var expectedCode  = GetExpectedCode("Options/nullable-reference");

            generatedCode.Diff(expectedCode).ShouldBeEmpty();
        }
        public void NullabilityModeTest(string expectedFileName, NullabilityMode mode)
        {
            var options = new TypeScriptGenerationOptions {
                NullabilityMode = mode
            };

            var(customGenerator, typesProvider) = GetCustomization <TTypesProvider>(null, typeof(NullabilityModeRootType));
            var generatedCode = GenerateCode(options, customGenerator, typesProvider).Single();
            var expectedCode  = GetExpectedCode($"Options/{expectedFileName}");

            generatedCode.Diff(expectedCode).ShouldBeEmpty();
        }
        public void GlobalNullableTest(bool useGlobalNullable, string expectedFileName)
        {
            var options = new TypeScriptGenerationOptions {
                UseGlobalNullable = useGlobalNullable
            };

            var(customGenerator, typesProvider) = GetCustomization <TTypesProvider>(null, typeof(GlobalNullableRootType));
            var generatedCode = GenerateCode(options, customGenerator, typesProvider).Single();
            var expectedCode  = GetExpectedCode($"Options/{expectedFileName}");

            generatedCode.Diff(expectedCode).ShouldBeEmpty();
        }
        public void OptionalPropertiesTest(bool optionalPropertiesEnabled, string expectedFileName)
        {
            var options = new TypeScriptGenerationOptions {
                EnableOptionalProperties = optionalPropertiesEnabled
            };

            var(customGenerator, typesProvider) = GetCustomization <TTypesProvider>(null, typeof(SingleNullablePropertyType));
            var generatedCode = GenerateCode(options, customGenerator, typesProvider).Single();
            var expectedCode  = GetExpectedCode($"Options/{expectedFileName}");

            generatedCode.Diff(expectedCode).ShouldBeEmpty();
        }
示例#10
0
        public static void Main(params string[] args)
        {
            var targetPath = Path.Combine(Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).FullName, "../../../output");
            var options    = new TypeScriptGenerationOptions
            {
                EnableOptionalProperties = false,
                LinterDisableMode        = LinterDisableMode.TsLint,
                UseGlobalNullable        = true,
                NullabilityMode          = NullabilityMode.Optimistic,
            };

            var typeScriptCodeGenerator = new TypeScriptGenerator(options, new AspNetCoreExampleCustomGenerator(), new TypesProvider());

            typeScriptCodeGenerator.GenerateFiles(targetPath);
        }
        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());
        }
示例#12
0
 public ArrayTypeBuildingContext(ITypeInfo arrayType, TypeScriptGenerationOptions options)
 {
     elementType  = GetElementType(arrayType);
     this.options = options;
 }
示例#13
0
 public DictionaryTypeBuildingContext(ITypeInfo dictionaryType, TypeScriptGenerationOptions options)
 {
     keyType      = dictionaryType.GetGenericArguments()[0];
     valueType    = dictionaryType.GetGenericArguments()[1];
     this.options = options;
 }
示例#14
0
 public GenericTypeTypeBuildingContext(ITypeInfo type, TypeScriptGenerationOptions options)
 {
     this.type    = type;
     this.options = options;
 }