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